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 | 不再指定的目录中查找 |
| 将查找到的文件输出到标准输出 |
-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 命令一同使用,第一条命令可以一天执行一次,第二三条命令可以一周执行一次