Linux学习第四周笔记vim,文件操作

1.vim编辑器

1. 什么是vim?

vim就是一个编辑工具

2.为啥要使用vim?

因后续所有相关服务都是需要修改其配置文件

3.vi与vim关系?

默认情况下,Linux系统 只有vi命令,没有vim,vim是vi加强版,支持语法高亮,等等。

4.如何使用vim file,需要了解vim模式?

普通模式:当使用vim进入后就是普通模式
编辑模式:通过某种命令,从普通模式进入编辑模式insert,接下来就可以正常编辑
命令模式:从编辑模式退到普通模式,从普通模式进入命令模式

Linux学习第四周笔记vim,文件操作_第1张图片
image.png

5.普通模式 G gg yy p dd D x u r

光标:G光标跳转至行尾 gg光标跳转至行首 500gg光标跳转至第500行 Ctrl+f ctrl+b 翻页
复制:光标选中行,按yy,3yy 表示复制3行
粘贴:p在当前光标下一行粘贴 P在当前光标上一行粘贴
删除:dd删除一行内容,D删除当前光标所在的后面内容 x向后删除一个字符 X向前删除一个字符
撤销:u撤销操作
替换:r--->新的字符

6.普通模式进入编辑模式i o

a,A: a进入编辑模式,光标会往后挪动一位 A:跳转至光标所在行尾部,同时进入编辑模式
i,I: i:直接进入编辑模式 I:跳转至光标所在行首部,同时进入编辑模式
o,O o:在光标所在的行下一行新建一行空白 O:在光标所在的行上一行新建一行 空白行
编辑模式退出至普通模式:使用Esc键

7.普通模式进入命令模式:/

:wq 保存并退出 :w 保存 :q 退出
:wq! 强制保存并退出 :w! 强制保存 :q!强制退出
:x 保存退出
:sg :%s#nologin#oldboy#g 整个替换 :1,3s#old#new#g 一到三行替换
/ 搜索 /oldboy搜索某个关键字 n搜索到的关键字往下跳转 N搜索到的关键字往上跳转

8.视图模式

可视行模式:shift+v 选中操作的行 d 删除
可视块模式:
Ctrl+v 选择操作的字符 x 全部删除
Ctrl+v 选中操作的字符 shift+i 输入# 按Esc键结束 注释行

9.vim环境变量

:set nu 显示行号  取消行号 :set nonu
:set ic 忽略大小写

永久修改vim环境变量

#全局的vim环境变量
[root@oldboy64-lnb ~]# vim /etc/vimrc
....
set number
set ic
#个人环境变量 ~/.vimrc #默认该文件不存在,新建即可
[root@oldboy64-lnb ~]# vim ~/.vimrc
set nonumber

如果全局与个人环境变量 出现冲突,以个人优先


Linux学习第四周笔记vim,文件操作_第2张图片
image.png

10.vim故障

当使用vim时,如果出现意外关闭/ 当下次在打开该文件时,会提示是否恢复该文件.
1.先恢复,然后保存该文件
2.删除该文件备份的版本

[root@oldboy64-lnb ~]# 1 rm -f .passwd.swp

练习:

1.将/etc/passwd 复制到/root/目录下,并重命名为test.txt

[root@oldboy64-yl ~]# cp /etc/passwd /root/test.txt 
[root@oldboy64-yl ~]# 

2.用vim打开test.txt并显示行号

 15 dbus:x:81:81:System message bus:/:/sbin/nologin
 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
 17 tss:x:59:59:Account used by the trousers package to sandbo    x the tcsd daemon:/dev/null:/sbin/nologin
 18 abrt:x:173:173::/etc/abrt:/sbin/nologin
:set nu      #在底行模式下输入

3.分别向下、向右、向左、向右移动5个字符,分别向下、向上翻页
crtl+f 向下翻页
Ctrl+b 向上翻页

4.把光标移动到第10行,让光标移动到行末,再移动到行首,移动到test.txt文件的最后一行,移动到文件的首行
:10 或 10gg $ ^ shift+G gg

[root@oldboy64-yl ~]# vim test.txt +13   #直接定位到13行

5.搜索文件中出现的 root 并数一下一共出现多少个,不区分大小写搜索

 15 dbus:x:81:81:System message bus:/:/sbin/nologin
 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
 17 tss:x:59:59:Account used by the trousers package to sandbo    x the tcsd daemon:/dev/null:/sbin/nologin
:set ic               不区分大小写   
 15 dbus:x:81:81:System message bus:/:/sbin/nologin
 16 polkitd:x:999:998:User for polkitd:/:/sbin/nologin
                                                             
:/root   搜索

6.把从第一行到第三行出现的root 替换成--od--,然后还原上一步操作

 25 yw:x:1002:1002::/home/yw:/bin/bash
 26 boy:x:1003:1003::/home/boy:/bin/bash
:1,3s#root#--od--#g     替换1-3行

撤销:u
7.把整个文件中所有的root替换成--od--

:%s#root#--od--#g

8.把光标移动到20行,删除本行,还原上一步操作
20gg
删除:dd
u

  • 9.删除从5行到10行的所有内容,还原上一步操作

可视行:shift+v 选择5-10行内容,按下d删除
u 撤销

10.复制2行并粘贴到11行下面,还原上一步操作(按两次u)
shift+v 选中两行按 y 复制

:11 跳转到11行按下 p 粘贴

11.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作(按两次u)

:11定位 shift+v 选中11-15行按y复制 :8 按P粘贴到8行上面

12.把13行到18行的内容移动文件的尾部,还原上一步操作(按两次u)
shift+v 选中13 到18行的内容, 按下d 先删除
G 跳转至尾部
p 粘贴刚才删除的内容

13.在第一行下面插入新的一行,并输入"# Hello!"
gg 跳转至首行
o 新增空白一行,并进入编辑模式,.然后输入内容
ecs退出编辑模式

14.保存文档并退出
:wq

2.练习示例2-文件

[root@www ~]# cat proxy.conf
server {
Listen 8080;
Server_Name vim.OldboyEDU.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Forward-for;
proxy_intercept_errors on;
proxy_next_upstream error timeout;
proxy_next_upstream_timeout 3s;
proxy_next_upstream_tries 2;
error_page 500 502 403 404 = /proxy_error.html;
}
location = /proxy_error.html {
root /code/proxy;
}
}

2.练习示例2-题目

1.使用vim打开proxy.conf文件
vim proxy.conf --->输入i键 然后粘贴

2.修改Listen为listen小写,并将8080修改为80
r替换 ---> l
x 删除

3.修改Server_Name为server_name小写。
r --> 直接替换

直接使用编辑模式进行修改

4.在server_name行下插入一行 root /code;
/server_name 搜索

使用o,在当前搜索的行下插入一行空白,同时进入编辑模式

root /code; ---->ECS

5.复制5-14行的内容,然后将其粘贴到14行下面

  • 1.先开启行号 :set nu

  • 2.选中5-15行, shift+v ,然后使用y复制

  • 3.14gg| :14 然后输入p粘贴内容

  1. 删除与proxy_set_header相关的两行全部删除
    /proxy_set_header 搜索

shift+v 选中,然后d删除

  • 7.如上操作完成后,在13-20行前面加上#号

:13
视图块ctrl+v 选择13到20行的头部内容,然后使用 shift+i 输入# 号 ---> ECS 结束

8.删除21-23的行,然后保存当前文件

: 21 选中2行, 然后shift+v --->d 删除

2.文件查看

cat 查看一个文件 从头看到尾 -n显示行号
less 查看一个文件内容特别多的时候。空格翻页 /string 搜索的意思
more 查看一个文件内容特别多的时候。空格翻页 按百分比显示
head 查看一个文件头部内容,默认10行 head -1 查看文件的头部1行内容
tail 查看文件尾部 -f 追踪一个文件的尾部变化

3.文件压缩归档

10GB 文件 1MB/s --->实际带宽 10Mbps
1MB * 60 * 60 = 3600MB = 3.6GB ----> 3.xx小时
在linux上使用zip格式,windows 也使用 zip格式 这样就能完成互通,
当然linux也有其他的格式, 如果 tar.gz 放在windows下也支持解压.
windows的 rar 能不能让Linux 完成解压, 可以的. 参考url https://www.cnblogs.com/qinglin/p/9007939.html

格式 压缩工具
.zip zip压缩工具 (相对来说比较常用)
.gz gzip压缩工具,只能压缩文件,会删除原文件(通常配合tar使用)
.bz2 bzip2压缩工具,只能压缩文件,会删除原文件(通常配合tar使用)
.tar.gz 先使用tar命令归档打包,然后使用gzip压缩
.tar.bz2 先使用tar命令归档打包,然后使用bzip压缩

后面接触最多的压缩格式, xx.zip xx.tar.gz

1.zip打包压缩与解压缩?

使用zip命令可以对文件进行压缩打包,解压则需要使用unzip命令

# zip package_name.zip source1 source2
#1.压缩文件为zip包
[root@oldboy64-lnb ~]# zip file.zip file1 file2 file3
#2.压缩目录为zip包
[root@oldboy64-yl ~]# zip -r etc.zip /etc/
#3.不解压压缩查看压缩包中的内容
[root@oldboy64-yl ~]# unzip -l etc.zip 
#4.解压zip文件包, 默认解压至当前目录
[root@oldboy64-yl ~]# unzip etc.zip    #注意unzip命令默认没有,需要安装
#5.解压zip内容至/opt目录
[root@oldboy64-yl ~]# unzip etc.zip -d /opt/

2.tar.gz tar.bz2打包压缩与解压缩?

tar是linux下最常用的压缩与解压缩, 支持文件和目录的压缩归档

#语法:tar [-zjxcvfpP] filename
c  创建新的归档文件
x  对归档文件解包
t  列出归档文件里的文件内容
v  输出命令的归档或解包的过程
f  指定包文件名,多参数f写最后
z  使用gzip压缩归档后的文件(.tar.gz)
j  使用bzip2压缩归档后的文件(.tar.bz2)
J 使用xz压缩归档后的文件(tar.xz)
C 指定解压目录位置
X 排除多个文件(写入需要排除的文件名称)
h 打包软链接
--hard-dereference 打包硬链接
--exclude 在打包的时候写入需要排除文件或目录

#常用打包与压缩组合
czf  打包tar.gz格式
cjf  打包tar.bz格式
cJf  打包tar.xz格式
zxf  解压tar.gz格式
jxf   tar.bz格式
xf  自动选择解压模式
tf  查看压缩包内容  

1.将文件或目录进行打包压缩

#1.以tar命令进行归档,然后使用gzip压缩
[root@oldboy64-yl ~]# tar czf all.tar.gz oldboy.txt /etc/
#2.以tar命令进行归档,然后使用bzip2压缩
[root@oldboy64-yl ~]# tar cjf all.tar.bz2 oldboy.txt /etc/
#3.查看打包的内容
[root@oldboy64-yl ~]# tar tf all.tar.gz 
#4.打包链接文件,打包链接文件的真实文件
[root@oldboy64-yl ~]# tar czhf rc_local.tar.gz /etc/rc.local 
#5.如何在打包的时候,指定将压缩后的压缩文件存放至某个目录
[root@oldboy64-yl ~]# tar czf /opt/rrr.tat.gz oldboy.txt

2.解压缩文件

#1.解压至当前目录
[root@oldboy64-yl ~]# tar xf all.tar.gz 
[root@oldboy64-yl ~]# tar xf all.tar.bz2 
#2.将解压内容存储至指定的/opt目录下
[root@oldboy64-yl ~]# tar xf all.tar.gz -C /opt/
[root@oldboy64-yl ~]# ls /opt/
etc  oldboy.txt  rrr.tat.gz  rr.tar.gz

3.排除文件, 并打包压缩,扩展了解

#1.排除单个文件
[root@oldboy64-yl ~]# tar czf etc.tar.gz /etc/ --exclude=etc/services 
#2.排除多个文件
[root@oldboy64-yl ~]# tar czf etc.tar.gz /etc/ --exclude=etc/services --exclude=etc/sestatus.conf 
#3.将需要排除的文件写入文件中
[root@oldboy64-lnb ~]# vim paichu.txt
etc/services
etc/sestatus.conf
etc/rc.local
etc/rc.d/rc.local
#指定需要排除的文件列表, 最后进行打包压缩
[root@oldboy64-yl ~]# tar zcf etc.tar.gz /etc/ -X paichu.txt 
[root@oldboy64-yl ~]# tar xf etc.tar.gz

重点记住的命令如下:

#zip
zip -r file.zip path/filename path/filename2 path/dir
#tar
tar czf file.tar.gz path/filename path/filename2 path/dir #打包并压缩归档
tar tf file.tar.gz #查看压缩包
tar xf file.tar.gz #解压
tar xf -C file.tar.gz #指定解压的路径

4.tar相关练习题?

1.linux下常见的压缩包类型有哪些
zip tar.gz tar.bz2 tar.xz

2.将/etc/hosts文件用tar格式打包。
[root@oldboy64-yl ~]# tar cf etc.tar /etc/hosts
tar: Removing leading `/' from member names
[root@oldboy64-yl ~]# tar tf etc.tar
etc/hosts
[root@oldboy64-yl ~]# 

3.使用tar打包/var/log/目录。
[root@oldboy64-yl ~]# tar cf var.tar /var/log/

4.使用zip打包/etc目录。
[root@oldboy64-yl ~]# zip etc.zip /etc/ -r

5.查看/var/log/目录的压缩包中有哪些内容。
[root@oldboy64-yl ~]# tar tf var.tar 

6.将/var/log/目录解压到/opt目录中。
[root@oldboy64-yl ~]# tar xf var.tar -C /opt/
[root@oldboy64-yl ~]# ll /opt/
total 24
drwxr-xr-x. 91 root root 8192 Jul 23 19:47 etc
-rw-r--r--   1 root root   72 Jul 19 22:52 oldboy.txt
-rw-r--r--   1 root root  182 Jul 23 21:25 rrr.tat.gz
-rw-r--r--   1 root root  182 Jul 21 16:50 rr.tar.gz
drwxr-xr-x   3 root root   17 Jul 23 23:41 var

7.查看/etc/目录的压缩包的压缩比率。
首先明确一个概念: 
压缩比率=原内容大小/压缩后大小,压缩比率越大,则表明压缩后占用空间的压缩包越小
[root@oldboy64-yl ~]# du -sh /etc/
32M /etc/
[root@oldboy64-yl ~]# du -sh etc.tar.gz 
9.7M    etc.tar.gz

8.解压/etc/目录到/opt目录中。
[root@oldboy64-yl ~]# tar xf etc.tar.gz -C /opt/

9.用zip打包/opt目录,要求不显示打包过程。
[root@oldboy64-yl ~]# zip -rq opt.zip /opt/

10.打包/etc/目录,要求是.bz2格式
tar czf ---> tar cjf

11.打包/var/log目录,要求是.xz格式
tar czf ---> tar cJf

12.使用tar命令打包/etc/时,会出现一个删根的操作,怎样打包不会进行删根的操作
#切换到需要打包的目录上一级
[root@oldboy64-yl ~]# tar czPf etc.tar.gz /etc/ #在打包过程中会携带/
[root@oldboy64-yl ~]# tar xf etc.tar.gz #会删除/

13.打包/etc/目录,要求不打包/etc/hosts这个文件。
[root@oldboy64-yl ~]# tar cf etc.tar /etc/ --exclude=etc/hosts

14.打包/etc/目录,但要排除passwd,shadow,group,gshadow,hosts,hostname这些文件,不
想让其命令过长,怎么解决。(你能用两种方法实现吗)
#将需要排除的文件列表,写入一个新的文件中. news
tar zcf file.tar.gz -X news

15.已知/etc/grub2.cfg文件是个软连接文件,在你不知道的情况下,请问怎么打包该文件的真实文件。
tar czhf

16.把/oldboy目录中所有.log的文件进行打包成一个压缩包,名称定义为log.tar.gz的压缩包。
[root@oldboy64-yl ~]# tar czf log.tar.gz /oldboy/*.log
tar: Removing leading `/' from member names
[root@oldboy64-yl ~]# tar tf log.tar.gz 
oldboy/nginx.log
[root@oldboy64-yl ~]# 

17.打包/etc/目录,命令以ip地址+当前时间方式的压缩包: 比如: 10.0.0.98_2019-4-23_etc.tar.gz
[root@oldboy64-yl ~]# tar zcf $(ifconfig eth0|awk 'NR==2{print $2}')_$(date +%F)_etc.tar.gz /etc/

4.文件属性file

  • 文件,到底是什么类型的文件 file
    因为Linux一切皆为文件,后缀并不能直接区分是一个什么文件
[root@oldboy64-yl ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@oldboy64-yl ~]# file /home/
/home/: directory
[root@oldboy64-yl ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=ceaf496f3aec08afced234f4f36330d3d13a657b, stripped
[root@oldboy64-yl ~]# file etc.zip 
etc.zip: Zip archive data, at least v1.0 to extract
[root@oldboy64-yl ~]# file 10.0.0.200_2019-07-24_etc.tar.gz 
10.0.0.200_2019-07-24_etc.tar.gz: gzip compressed data, from Unix, last modified: Wed Jul 24 00:57:20 2019
[root@oldboy64-yl ~]# file Image_1.jpg 
Image_1.jpg: JPEG image data, JFIF standard 1.01
#修改名称无效,linux不区分文件名称,也无法区分.
[root@oldboy64-yl ~]# mv Image_1.jpg 1.txt
[root@oldboy64-yl ~]# file 1.txt 
1.txt: JPEG image data, JFIF standard 1.01
[root@oldboy64-yl ~]# 

5.文件查找find

为什么要有文件查找,因为很多时候我们可能会忘了某个文件所在的位置,此时就需要通过find来查
找。
find命令可以根据不同的条件来进行查找文件,例如:文件名称、文件大小、文件修改时间、属主属
组、权限、等等方式。同时find命令是Linux下必须掌握的。
find 命令的基本语法如下

命令 路径 选项 表达式 动作
find [path...] [options] [expression] [action]
查找 地区 妹子 18-25岁 约?

*以下列出所有find常用的选项

1.find名称查找

创建文件
[root@oldboy64-yl ~]# touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}
#2.查找/etc目录下包含ifcfg-eth0名称的文件
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg-eth1'
/etc/sysconfig/network-scripts/ifcfg-eth1
#3.-i 忽略大小写
[root@oldboy64-yl ~]# find /etc/ -iname 'ifcfg-eth1'
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/IFCFG-ETH1
#查找/etc目录下包含ifcfg-eth名称所有文件
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg-eth*'
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
[root@oldboy64-yl ~]# find /etc/ -iname 'ifcfg-eth*'
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/IFCFG-ETH1
[root@oldboy64-yl ~]# 

2.find大小查找

#1.查找等于5M的文件
[root@oldboy64-yl ~]# find /etc/ -size  5M
#2.查找大于5M的文件
[root@oldboy64-yl ~]# find /etc/ -size  +5M
/etc/udev/hwdb.bin
#3.查找小于5M的文件
[root@oldboy64-yl ~]# find /etc/ -size  -5M

3.find类型查找

b 块设备
[root@oldboy64-yl ~]# find /dev/ -type b
/dev/sda3
/dev/sda2
/dev/sda1
/dev/sda
/dev/sr0
s 套接字
[root@oldboy64-yl ~]# find /dev/ -type s
/dev/log
[root@oldboy64-yl ~]# 
c 字符设备
[root@oldboy64-yl ~]# find /dev/ -type c
/dev/vcsa6
/dev/vcs6
d 目录
[root@oldboy64-yl ~]# find /dev/ -type d
/dev/
/dev/snd
/dev/snd/by-path
/dev/net
f 文件
[root@oldboy64-yl ~]# find /dev/ -type f
l 链接
[root@oldboy64-yl ~]# find /dev/ -type l
/dev/cdrom
/dev/snd/by-path/pci-0000:02:02.0
/dev/initctl

4.find时间查找

#1.创建测试文件
[root@xuliangwei ~]# for i in {01..28};do date -s 201904$i && touch
file-$i;done
#2.保留最近7天文件,其余全部列出(不会打印当天的文件)
[root@oldboy64-yl ~]# find ./ -iname 'file-*' -mtime +7
#3.查找最近7天的文件,不建议使用(会打印当天的文件) 列出最近7天的所有文件
[root@oldboy64-yl ~]# find ./ -iname 'file-*' -mtime -7
./file-22
./file-25
./file-28
./file-24
./file-27
./file-23
./file-26
#4.查找第7天文件(不会打印当天的文件)
[root@oldboy64-yl ~]# find ./ -iname 'file-*' -mtime 7
./file-21
[root@oldboy64-yl ~]# 
#5.本地文件保留最近7天的备份文件, 备份服务器保留3个月的备份文件(实际使用方案)
[root@oldboy64-yl ~]# find /backup/ -iname '*.bak' -mtime +7 -delete 
[root@oldboy64-yl ~]# find /backup/ -iname '*.bak' -mtime +90 -delete 

5.find用户查找(一般)

查找属主是oldboy
[root@oldboy64-yl ~]# find /home/ -user oldboy 
/home/oldboy
/home/oldboy/.bash_logout
/home/oldboy/.bash_profile
/home/oldboy/.bashrc
/home/oldboy/.bash_history
查找属组是oldboy
[root@oldboy64-yl ~]# find /home/ -group oldboy 
/home/oldboy
/home/oldboy/.bash_logout
/home/oldboy/.bash_profile
/home/oldboy/.bashrc
/home/oldboy/.bash_history
#查找属主是oldboy, 属组是oldboy
[root@oldboy64-yl ~]# find /home/ -user oldboy -group oldboy 
/home/oldboy
/home/oldboy/.bash_logout
/home/oldboy/.bash_profile
/home/oldboy/.bashrc
/home/oldboy/.bash_history
#查找属主是oldboy, 并且属组是oldboy
[root@oldboy64-yl ~]# find /home/ -user oldboy -a  -group oldboy 
/home/oldboy
/home/oldboy/.bash_logout
/home/oldboy/.bash_profile
/home/oldboy/.bashrc
/home/oldboy/.bash_history
#查找属主是oldboy, 或者属组是oldboy
[root@oldboy64-yl ~]# find /home/ -user oldboy -o  -group oldboy 
/home/oldboy
/home/oldboy/.bash_logout
/home/oldboy/.bash_profile
/home/oldboy/.bashrc
/home/oldboy/.bash_history
#查找没有属主
[root@oldboy64-yl ~]# find /home/ -nouser 
#查找没有属组
[root@oldboy64-yl ~]# find /home/ -nogroup 
#查找没有属主或属组
[root@oldboy64-yl ~]# find /home/ -nouser -o -nogroup

2.find动作处理,比如查找到一个文件后,需要对文件进行如何处理, find的默认动作是 -print

动作 含义
-print 打印查找到的内容(默认)
-ls 以长格式显示的方式打印查找到的内容
-delete 删除查找到的文件(仅能删除空目录)
-ok 后面跟自定义shell命令(会提示是否操作)
-exec 后面跟自定义shell命令(标准写法 -exec ;)

1.find查找后的动作命令示例

#1.使用-print打印查找到的文件
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg*'
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/ifcfg-lo
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg*' -print
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/ifcfg-lo
[root@oldboy64-yl ~]# 
#2.使用-ls打印查找到的文件,以长格式显示
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg*' -ls
50367002    4 -rw-r--r--   1 root     root          199 Jul 13 23:07 /etc/sysconfig/network-scripts/ifcfg-eth0
51472197    0 -rw-r--r--   1 root     root            0 Jul 24 16:06 /etc/sysconfig/network-scripts/ifcfg-eth1
50821108    4 -rw-r--r--   1 root     root          254 Aug 24  2018 /etc/sysconfig/network-scripts/ifcfg-lo
[root@oldboy64-yl ~]# 
#3.使用-delete删除文件,但仅能删除空目录
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg-eth1' -delete
#4.使用-ok实现文件拷贝,但会提示是否拷贝
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg*' -ok cp -rvf {} /tmp/ \; 
#5.使用-exec实现文件拷贝和文件删除。
[root@oldboy64-yl ~]# find /etc/ -name 'ifcfg*' -exec cp -rvf {} /tmp/ \;
‘/etc/sysconfig/network-scripts/ifcfg-eth0’ -> ‘/tmp/ifcfg-eth0’
‘/etc/sysconfig/network-scripts/ifcfg-lo’ -> ‘/tmp/ifcfg-lo’
[root@oldboy64-yl ~]# find /tmp/ -name  'ifcfg*' -exec rm -f {} \;

2.使用find命令结合xargs

#xargs将前者命令查找到的文件作为一个整体传递后者命令的输入
[root@oldboy64-yl ~]# find . -name 'file.txt' |xargs rm -f
[root@oldboy64-yl ~]# find . -name 'file.txt'|xargs -I {} cp -rvf {} /tmp/

3.find逻辑运算符

符号 作用
-a 与 并且
-o 或 或者
-not | !
#1.查找当前目录下,属主不是oldboy的所有文件
[root@oldboy64-yl ~]# find . ! -user oldboy
[root@oldboy64-yl ~]# find . -not -user oldboy
#2.查找当前目录下,属主属于root,且大小大于300字节的文件
[root@oldboy64-yl ~]# find . -type f  -user root -a -size +300c
#3.查找当前目录下的属主为root或者以xml结尾的普通文件
[root@oldboy64-yl ~]# find . -type f -user root -o -name '*.xml'
#4.查找当前目录下所有file-*的文件,全部删除.但唯独排除file-03
[root@oldboy64-yl ~]# find . -type f ! -name "file-03" -a -name 'file-*' -delete

find 命令练习

1.找出/tmp目录下,属主不是root,且文件名不以f开头的文件
find /tmp ! -user root ! -name "f*"
2.查找/etc/目录下,所有.conf后缀(结尾)的文件
find /etc/ -type f -name "*.conf"
3.查找/var目录下属主为root,且属组为mail的所有文件
find /var/ -user root -group mail
[root@oldboy64-lnb ~]# ll /var/spool/mail/
total 0
-rw-rw----. 1 alex mail 0 Jul 7 16:15 alex
-rw-rw----. 1 oldboy mail 0 Jul 7 16:15 oldboy
-rw-rw----. 1 tttt mail 0 Jul 21 10:49 tttt
[root@oldboy64-lnb ~]# ll -d /var/spool/mail/
#邮箱
drwxrwxr-x. 2 root mail 44 Jul 21 10:49
/var/spool/mail/

4.查找/var目录下7天以前,同时属主不为root,也不是postfix的文
件 #
find /var/ -type f -mtime +7 -user root -o -
user postfix
find /var/ -maxdepth 2 -type f -mtime +7 -user
root -o -user postfix |xargs ls -ld
5.查找/etc目录下大于1M且类型为普通文件的所有文件
find /etc/ -type f -size +1M
6.查找/etc目录下所有用户都没有写权限的文件
find /etc/ -perm
[root@oldboy64-lnb ~]# ll -h
total 0
-rw-r--r--. 1 root root 0 Jul 28 00:39 file-5
r
w
x
-rw- r-- r--. 1 root root
0 Jul 28 00:39 file-5
文件所有者权限 所属用户组 其他人/陌生人
user group other
u g o
[root@oldboy64-lnb ~]# touch oldboy{01..05}.txt
[root@oldboy64-lnb ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul 28 00:39 file-5
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy01.txt
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy02.txt
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy03.txt
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy04.txt
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy05.txt
[root@oldboy64-lnb ~]# chmod 400 oldboy01.txt
[root@oldboy64-lnb ~]# chmod 040 oldboy02.txt
[root@oldboy64-lnb ~]# chmod 004 oldboy03.txt
[root@oldboy64-lnb ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul 28 00:39 file-5
-r--------. 1 root root 0 Jul 28 10:04 oldboy01.txt

----r-----. 1 root root 0 Jul 28 10:04 oldboy02.txt
-------r--. 1 root root 0 Jul 28 10:04 oldboy03.txt
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy04.txt
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy05.txt
[root@oldboy64-lnb ~]# chmod 000 oldboy05.txt
[root@oldboy64-lnb ~]# chmod 000 oldboy05.txt
[root@oldboy64-lnb ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jul 28 00:39 file-5
-r--------. 1 root root 0 Jul 28 10:04 oldboy01.txt
----r-----. 1 root root 0 Jul 28 10:04 oldboy02.txt
-------r--. 1 root root 0 Jul 28 10:04 oldboy03.txt
-rw-r--r--. 1 root root 0 Jul 28 10:04 oldboy04.txt
----------. 1 root root 0 Jul 28 10:04 oldboy05.txt
find -type f -perm /+r |xargs ls -l
permission perm
7.查找/目录下最后创建时间是3天前,后缀是*.log的文件
find / -type f -mtime +3 -name "*.log"
find / -maxdepth 3 -type f -mtime +3 -name
"*.log"
8.查找/目录下文件名包含txt的文件
find / -type f -name "*txt*"
find / -type f|grep 'txt'
9.查找/目录下属主是oldboy并且属组是oldboy的文件
find / -type f -user oldboy -group oldboy
find / -type f -user oldboy -a -group oldboy
#-a and
10.查找/目录下属主是oldboy但是属组不是oldboy的文件
11.查找/目录下属主是oldboy或者属主是oldgirl的文件
12.查找/tmp目录下属主既不是oldboy,也不是oldgirl的文件
find -type f ! -user nobody -a ! -user oldboy
find -type f \( ! -user nobody -a ! -user
oldboy \)
13.查找/目录下7天以前的文件
13.查找/tmp目录下15天以前的文件删除
find /tmp -type f -mtime +15
find /tmp -type f -mtime +15 |xargs rm -f
`` 反引号 优先执行 里面的命令
$()
rm -f `find /tmp -type f -mtime +15`
rm -f $(find /tmp -type f -mtime +15)
**方法3 find /tmp/ -mtime +7 -type f -name
'*.log'|xargs rm -f
**方法6 rm -f `find /tmp/ -mtime +7 -type f -name
'*.log'`
**方法7 rm -f $(find /tmp/ -mtime +7 -type f -name
'*.log')
#exec execute 执行
**方法4 find /tmp/ -mtime +7 -type f -name '*.log' -
exec rm -f {} \;
#xargs -i 模拟 find 中 -exec
**方法2 find /tmp/ -mtime +7 -type f -name
'*.log'|xargs -i rm -f {}
查找出/etc下面 以.conf结尾的文件 打包压缩到
/tmp/conf.tar.gz下面
#find /etc/ -type f -name '*.conf' |xargs tar zcf
/tmp/etc-xargs.tar.gz
#find命令找出1个文件 就交给-exec执行1次
find /etc/ -type f -name '*.conf' -exec tar zcf
/tmp/etc-exec.tar.gz {} \;
**方法5 find /tmp/ -mtime +7 -type f -name '*.log' -
exec rm {} +
**方法1 find /tmp/ -mtime +7 -type f -name '*.log' -
delete
15.查找/home目录下,类型是目录的,并且属主是oldboy的目录
16.查找/var/log下大于100kb且以log结尾的所有文件
find /var/log -type f -size +100k -name "*.log"

17.查找tmp目录下所属组group1,所属主user1的目录
18.同时查找根目录下名为1.txt,2.txt的文件和名字带a的目录
[root@oldboy64-lnb ~]# find -name "oldboy01.txt" -
o -name "oldboy02.txt" -o -type d -name "*f*"
19.查找/tmp目录下所有文件并删除 

你可能感兴趣的:(Linux学习第四周笔记vim,文件操作)