(四)find 之grep cut paste sort awk sed find uniq 全面总结

find简介

find可以在维护系统的过程中要找出某一特征的文件,即按照目录,时间戳,类型等特征查找。

find的使用方法

find【path】【expression】

path : find查找的路径,若未指定,则默认为当前工作目录

expression:find查找的表达式,即用于匹配的特征参数

                                                                                     express参数表

表达式

                                                                       说明

-name

按名称查找

-type

按文件类型查找

-perm

按文件权限查找

-mtime +T /-T

按文件修改的时间查找,+T表示修改时间为距现在T天以前,-T表示修改时间为距现在T天以内

-atime

按文件的访问时间戳查找文件

-size n [c]

查找文件长度为n块的文件,c表示文件大小为n字节的文件

-User

按文件所属用户查找

-group

按文件所属组查找

-nouser

查找没有有效属主的文件,即文件属主在/etc/passwd 文件中不存在

-nogroup

查找没有有效属组的文件,即文件在/etc/group文件不存在

-help

输出find命令的帮助信息

-depth

先从当前目录查找,然后从当前目录的子目录查找

-maxdepth levels

向下搜索到第levels层目录,当levels=0时只在当前目录查找

-mindepth levels

向下搜索levels层目录

-mount

不搜索远程文件(占网络IO

-follow

搜索如果遇到链接文件,那么连同链接文件一并检查

-prune

不再指定的目录中查找

-print

将查找到的文件输出到标准输出

-exec

将查找到的文件执行-exec动作后面附带的shell命令

-ok

将查找到的文件执行-exec动作后附带的shell命令,不过在每次执行前将提示用户是否执行

实例

[root@ChangerLee Desktop]# pwd
/home/changerlee.example.com/Desktop

[root@ChangerLee Desktop]# rpm -q httpd
httpd-2.4.6-40.el7.centos.1.x86_64




(一):按名称查找

(1)最好规范操作,勿忘-print

[root@ChangerLee Desktop]# find /etc -name "httpd.conf" -print
/etc/httpd/conf/httpd.conf
[root@ChangerLee Desktop]# find /etc -name "httpd.conf"
/etc/httpd/conf/httpd.conf


(2)正则匹配查找

[root@ChangerLee Desktop]# find /etc -name "[a-z][a-z][0-9].d" -print
/etc/rc4.d
/etc/rc2.d
/etc/rc6.d
......

(3)查找的对象较多而且分布在不同的目录下建议将命令打入后台运行

[root@ChangerLee Desktop]# find / -name "*.conf" -print


(二):按文件权限查找

(1)在/stc目录下查找所属用户可以读写,所属组可以读写,其他用户可以读的文件

[root@ChangerLee Desktop]# find /etc -perm 664 -print
/etc/tomcat/log4j.properties
/etc/tomcat/server.xml
/etc/tomcat/context.xml
/etc/tomcat/tomcat.conf
......

(2)仅查找其他用户可读的文件,而所属用户所属组的权限被find忽略
[root@ChangerLee Desktop]# ll -d /etc/httpd/*
drwxr-xr-x. 2 root root 4096 Jul 12 23:23 /etc/httpd/conf
drwxr-xr-x. 2 root root 4096 Jul 12 23:23 /etc/httpd/conf.d
drwxr-xr-x. 2 root root 4096 Jul 12 23:23 /etc/httpd/conf.modules.d
lrwxrwxrwx. 1 root root   19 Jul 12 23:23 /etc/httpd/logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root   29 Jul 12 23:23 /etc/httpd/modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root   10 Jul 12 23:23 /etc/httpd/run -> /run/httpd

[root@ChangerLee Desktop]# find /etc/httpd -perm -004 -print
/etc/httpd
/etc/httpd/conf.d
/etc/httpd/conf.d/autoindex.conf
......
(三):按文件类型查找

常用文件类型表示符:

f         一般文件/正规文件  

b        块设备文件  

c      字符设备

d      目录

l       链接文件

p      管道文件FIFO   

s      套接字文件


(1)查找/dev下有哪些字符设备(/dev下的字符设备光驱,终端,控制台)
[root@ChangerLee Desktop]# find /dev -type c -print
/dev/hidraw0
/dev/watchdog0
/dev/watchdog
......


(2)查找目录/dev中的块设备文件(/dev下的块设备文件磁盘,软驱,阵列等)

[root@ChangerLee Desktop]# find /dev -type b -print
/dev/dm-1
/dev/dm-0
/dev/sdb1
......

(3)查找目录/dev中除了链接文件以外的文件

[root@ChangerLee Desktop]# find /dev ! -type l -print
/dev
/dev/hidraw0
/dev/watchdog0
......


(四):按时间戳查找

(1)在整个文件系统上查找修改时间在七天内的文件

[root@ChangerLee Desktop]# find / -mtime -7 -print

/proc/3661/map_files/400000-404000
/proc/3661/map_files/603000-604000
/proc/3661/map_files/604000-605000

......

(2)在当前目录查找修改时间在一天以前的文件

[root@ChangerLee Desktop]# find . -mtime +1 -print
./Flask
./Flask/Flask_3.py
./Flask/Flask_Jinja2_1.py
./Flask/templates

......

(五):按文件大小查找


注意:如果以字节来计算文件长度,应该在数字后面加小写字母c,默认情况下文件的长度的单位是块,一块为512字节

(1)在当前目录下查找文件长度大于1MB的文件

[root@ChangerLee Desktop]# find . -size +1000000c -print
./7.3~7.2音频/7.3 morning-2.mp3
./7.3~7.2音频/7.3 afternoon -3.mp3
./7.3~7.2音频/7.2morning.mp3

......

(2)在当前目录下查找小于10块的文件,10X512=5KB

[root@ChangerLee Desktop]# find . -size -10 -print
.
./pic
./7.3~7.2音频
./7.3~7.2音频/7.3 afternoon-2.mp3

(六):按文件属主或属组查找

(1)查找目录/home所属用户为changerlee的文件

[root@ChangerLee Desktop]# find /home -user changerlee.example.com -print

(2)查找目录/home所属组为changerlee.example.com

[root@ChangerLee ~]# find /home -group changerlee.example.com -print


(3)查找目录/home查找没有有效属组的文件

[root@ChangerLee ~]# find /home -nogroup  -print


(七):高级参数查找

(1)用path,prune和name参数指定在除/etc以外的整个目录中查找.conf结尾的文件,

用参数-o连接两个不同的参数,用-mount忽略在系统上挂载的远程文件,即仅在本地

文件系统查找

[root@ChangerLee ~]# find / -path "/etc" -prune -o -name "*.conf" -print -mount

(2)在/home目录中查找修改时间距现在一周以前,类型为普通文件且以.conf结尾的文件,

并且用ls命令以合适的大小查看

[root@ChangerLee ~]# find /home -type f -mtime +7 -print -exec ls -lh {} \;

(3)用-ok参数,在执行shell命令时显示命令执行的提示,避免危险操作的误操作

[root@ChangerLee ~]# find /home -type f -mtime +7 -print -ok rm {} \;

(4)使用xargs命令处理查找到的文件,解决系统对参数exec,ok传递给shell命令的文件列表长度的

限制。当find命令查找到的文件数量很多是,会出现参数的文件缓存区溢出,可能会影响系统性能。

而xargs命令是构造一个参数列表并且交给命令执行,xargs每次只获取并处理列表的一部分,处理

完后再获取下一部分,直到列表结束,对性能影响小,而exec与ok是一次将参数缓冲区的内容全部

读取处理,使用xargs命令分割列表读取并处理时,需要借助管道

[root@ChangerLee ~]# find /home -type f -mtime +7 -print | xargs rm 


生产实战

在备份目录下创建文件备份目录

查找一天内修改过的普通文件

[root@ChangerLee backup]# find /etc/ -type f -mtime -1 -print >/backup/etc/file_`date +%y-%m-%d`_list

打包,清空备份目录

[root@ChangerLee backup]# tar -czT /backup/etc/ -f /backup/file_backup_`date +%y-%m-%d`.tgz
[root@ChangerLee backup]# rm -fr /backup/etc/*
以上命令一般都与crontab 命令一同使用,第一条命令可以一天执行一次,第二三条命令可以一周执行一次




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JaysenLeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值