概述
find命令 支持实时查找,精确匹配,通过遍历指定目录中的所有文件完成查找,速度慢,但支持众多查找标准
locate命令
讲find命令之前,先介绍类似的文件查找命令 locate
- locate 非实时,模糊匹配,全文件系统查找命令,根据全系统文件数据库进行查找,其数据存在/var/lib/mlocate/mlocate.db
- updatadb 手动生成文件数据库。updatedb is usually run daily by cron(8) to update the default database.
find命令
search for files in a directory hierarchy
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point…] [expression]
使用:find 查找路径 查找标准 查找后的处理运作
- 查找路径 默认为当前目录
- 查找标准 默认为指定路径下的所有文件
- 处理运作 默认为显示
匹配标准
- -name ‘FILENAME’ 精确查找
- -iname ‘FILENAME’ 不区分大小写匹配查找
- -regex PATTERN 根据正则表达式进行文件名匹配
- -user USERNAME 根据属主查找
- -group GROUPNAME 根据属组查找
- -uid/gid
- -nouser 没有属主的文件
- -type 根据文件类型
- -size 根据文件大小
- 根据时间戳
- -perm 根据文件权限
Tip1 find 常通过文件通配符查找文件,用正则表达式较少
- *匹配任意长度的任意字符
- ? 任意单个字符
- [ ]指定范围内的单个字符
Tip2 若一个用户删除,但是此前用户创建的文件不会删除,那么其属主是谁?
其文件的属主是其原用户的id号
Tip3 -type 文件类型
- f 普通文件
- d 目录
- c 字符文件
- l 链接文件
- p 管道文件
- s 套接字文件
Tip4 -size 文件大小
- [+|-]#M
- [+|-]#G
- [+|-]#k
- +大于 -小于 不添加 精确
Tip5 文件时间戳查找
-
-mtime [+|-]# 最近一次修改时间,默认天
-
-ctime [+|-]# 最近一次改变时间
-
-atime [+|-]# 最近一次访问时间
-
-mmin [+|-]# 默认分
-
-cmin [+|-]#
-
-amin [+|-]#
Tip6 -perm MODE
/MODE 内部有一个满足 -MODE 同时满足
find ./ -perm -001 查找其他用户有执行文件的文件
find ./ -perm -007 查找其他用户有读写执行权限的文件
执行动作 action
- -print 显示
- -ls 类似ls -l
- -ok COMMAND {} ; (;表示结尾标志 {} 文件占位符) 每个操作都要用户确认
- -exec COMMAND {} ; 区别 -ok 每个操作都不需要用户确认
find ./ -perm -006 -exec chmod o-w {} \; 查找其他用户有写权限的文件,并将其他用户写权限去掉
find ./ -type d -ok chmod +x {} \; 查找普通文件,将其增加写权限
find ./ -perm -020 -exec mv {} {}.new \; 将组用户有写权限和执行权限的文件,重命名为xxx.new
find /home -name "*.sh" -a -perm -111 -exec chmod o-x {} \;
练习
1.查找/var 目录下属主为root并且属组为mail的所有文件
find /var -user root -group mail
2.查找/tmp目录下不属于root,bin或者student的文件
find /tmp -not -user root -a -user bin -a student
3.查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
find /tmp -mtime -7 -a -not -user root
4.查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属组属主均修改为root
find / -nouser -nogroup -atime -1 -exec chown root:root {} ;
5.查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefile文件中
find /etc -size 1M -exec echo {} >>/tmp/etc.largerfile ;
find /etc -size 1M >> /tmp/etc.largerfile
6.查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息
find /etc -not -perm /222 -ls
Last
find 常搭配 xargs 命令 从标砖输入接收命令并执行的
find /etc -size +1M | xargs echo >> /tmp/etc.largerfile
find /etc -size +1M -exec echo {} >> /tmp/etc.largerfile