shell脚本(二)

shell脚本(二)

#find查找文件,以可根据时间、名称、uid、gid、权限、大小等条件查找

#-amin -10:10分钟之内访问过的文件或目录;+10:10分钟之前访问过的文件或目录.时间单位为分钟。

#查找10分钟之前30分钟之内访问过的文件或目录

find /home -amin +10 -a -amin -30

技术分享

#-atime -2:48小时内访问过的文件或目录;+2:48小时之前访问过的文件或目录。

#时间单位为24小时,即2*24=48小时。

#查找1天之前3天之内访问过的文件或目录

find /var/log/ -atime +1 -a -atime -30 -exec ls -l {} \;

技术分享

#-cmin -2:2分钟之内修改过权限属性的文件或目录;+2:2分钟之前修改过权限属性的文件或目录.时间单位为分钟。

#查找2分钟之前60分钟之内修改过权限的文件或目录

find /home -cmin +2 -a -cmin -60

技术分享

#-ctime -2:48小时内修改过权限属性的文件或目录;+2:48小时之前修改过权限属性的文件或目录。时间单位为24小时,即2*24=48小时。

#查找3天之前5天之内修改过权限属性的文件或目录

find /var/log/ -ctime +3 -a -ctime -5 -exec ls -l {} \;

技术分享

#-mmin -2:2分钟之内修改过内容的文件或目录;+2:2分钟之前修改过内容的文件#或目录,时间单位为分钟。

#查找1分钟之前30分钟之内修改过文件内容的文件或目录

find /home -mmin +1 -a -mmin -30

技术分享

#-mtime -2:48小时内修改过内容的文件或目录;+2:48小时之前修改过内容的文件或目录。时间单位为24小时,即2*24=48小时。

#查找1天之前30天之内修改过内容的文件或目录

find /home -mtime +1 -a -mtime -30

技术分享

#-uid (+或-)数值(0):-10:表示小于10;+1:表示大小于;没有+-5:表示等于5

#在当前目录下查找uid=0的文件或目录

find . -uid 0

技术分享

#-gid (+或-)数值(0):-10:表示小于10;+1:表示大小于;没有+-5:表示等于5

#在当前目录下查找gid=0的文件或目录

find . -gid 0

技术分享

#-name 查找文件或目录名称:可以使用*、+匹配符

#查找/var/log/下所有以.log结尾文件

find /var/log/*.log

技术分享

#查找当前目录下uid>0,gid<2223的文件或者目录

find . -uid +0 -gid -2223

技术分享

#-perm mode:

#-数值:mode转换成二进制,四个值中二进制位有1的地方一定要匹配,如0700(111000000)

#0700-7777都与之匹配,可以理解为大于0700的都匹配

#查找权限大于744的文件或目录,因为mode第1个为7,全为1,所以所有属主

#权限不为7的都不会符合,同时群组权限数值为4、5(4+1)、7(4+2+1),相与有1

#符合要求,其他权限要求与群组权限一样要求,所以test目录符合要求

find . -perm -744

技术分享

#+数值:mode转换成二进制,四个值中二进制位任何有1的地方

#有其中1个值相与等于1就可以了

#+001与只要最后一位权限数值是1、5(=4+1)、7(=4+2+1)的权限都匹配

#查找包含有权限值001的文件或目录

#user3、user4和user5权限与001相与,都没有1,所以不符合要求,而ddd

#其他权限中相与有1,所以符合要求

#+mode可以理解为包含有此mode模式的都符合要求

find . -perm +001

技术分享

技术分享

#mode:表示等于。

#查找权限值等于001的文件或目录

find . -perm 001

技术分享

#-size 文件大小:-数值表示小于,+数值表示大于,没有+-表示等于。

#查找大于10k小于30k的文件或目录

find . -size +10 -size -30k

技术分享

#查找大小等于4k的文件或目录,k可以换成m或者g

find . -size 10k

技术分享

#-empty:查找大小为0字节文件,或目录下没和任何子目录或文件的空目录

技术分享

#-exec shell命令:对查找到的文件或目录执行shell命令

#查找大于10k小于30k的文件或目录,并将它复制到/tmp

find . -size +10k -size -30k -exec cp -rf {} /tmp \;

技术分享

#whereis,-b:只查找二进制文件,-u:查找不 包含指定类型的文件,-B:只在指定目

#录查找二进制文件,-M:只要指定目录下查找帮助文件

#-S:只在指定目录查找源码文件

#whereis只会在$PATH路径下搜索

whereis ls

#aaa文件在/home下,并不在$PATH中,所以搜索不到

whereis aaa

技术分享

#which,查找可执行文件,如果是别名命令时会列出具体另外信息

which ls

技术分享

#locate,在已建立的档案及路径的数据库中搜索,一般搜索前先更改一下数据库

#如果不使用updatedb更新,那么在系统启动完毕后新建立的文件是无法搜索到的

#最小化安装是没有locate命令的,yum -y install mlocate安装

#它依赖/var/lib/mlocate/mlocate.db数据库

locate one_day

#新建一个文件abcd123456,再查找,因为没有updatedb,所以是找不到文件的

touch abcd123456

locate abcd123456

技术分享

2、文件排序、合并和分割

(1)sort命令

#-c:测试文件是否已经排序;-k:指定排序域;-m:合并两个已经排序的文件;

#-n:根据数字大小进行排序;-o:将输出写到文件;-r:将排序结果逆向显示

#-t:改变域分隔符;-u:去除结果中的重复行

#将a.txt逆向排序,并去除重复的行

sort -u -r a.txt

技术分享

#以":"为分隔符,根据第3域数字大小来对/etc/passwd排序

sort -t: -k3n /etc/passwd

技术分享

#合并已经排序的两个文件,需要合并的两个文件一定是已经排序了的

sort -u -m a.txt b.txt

技术分享

#根据第2域来排序

sort -k2 a.txt

技术分享

(2)uniq命令

#去除文本中重复的行,-c:打印第行在文本中重复出现次数;-d:只显示有重复的记录,

#每个重复记录只出现一次;-u:只显示没有重复的记录

#需要特别注意的是所说的"重复"是指连续出现的重复!如文件test.txt内容:

1

1

2

1

uniq -c test.txt

#结果为,第1行数字1出现次数为2,第2行数字2出现次数为1,第4第数字1出现次数为1

2 1

1 2

1 1

#再如

技术分享

#如果需要统计文件中所有重复的行,则需要先对它进行排序

sort 10.txt | uniq -c 10.txt

技术分享

#注意与uniq -c 10.txt的区别

#只显示重复的行,注意两者区别

uniq -d 10.txt

sort 10.txt | uniq -d 10.txt

技术分享

#只显示没有重复的行,注意文件排序前后去除重复行结果对比

#因为第1行开始数字1连续出现3次,所以uniq -u 10.txt 不会在第1行显示1

技术分享

(3)join命令

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。