locate : (速度快)
非实时,模糊匹配 . 查找是根据全系统数据库进行的
#updatedb 手动生成文件数据库
find : (速度慢)
实时查找 ,
精确查找 ,
支持众多查找标准
遍历指定目录中的所有文件完成查找 ,
find 查找路径 查找标准 查找到以后的处理运作
查找路径 : 默认当前目录
查找标准 : 默认为指定路径下的所有文件
处理运作 : 默认为显示
匹配标准 :
-name ‘FILENAME‘ : 对文件名做精确匹配
文件名通配:
-iname ‘FILENAME‘ : 文件名匹配时不区分大小写
-regex PATTERN : 基于正则表达式进行文件名匹配
-user USERNAME : 根据属主查找
-group GROUPNAME : 根据属组查找
-uid UID : 根据 UID 查找
-gid GID : 根据 GID 查找
-nouser : 查找没有属主的文件
-nogroup : 查找没有属组的文件
-type : 根据文件类型查找
f : 普通文件
d : 目录
c : 字符设备
b : 块设备
l : 连接文件
p : 管道设备
s : 套接字设备
-size : 根据文件大小查找
[+|-]#k
#M
#G
-10k 所有小于 10k 的文件
+10k 所有大于 10k 的文件
组合条件 :
-a : 与
-o : 或
-not : 非
[[email protected] ~]# find /etc -name ‘passwd‘ #在 /etc 目录下查找文件名为 passwd 的文件 [[email protected] ~]# find /etc -name ‘passwd*‘ #在 /etc 目录下查找文件名 passwd 开头的文件 [[email protected] ~]# find /tmp -user zhao #在 /tmp 目录下查找文件属主为 zhao 的文件 [[email protected] ~]# find /etc -group mysql #在 /etc 目录下查找文件属组为 mysql 的文件 [[email protected] ~]# find /etc -type d #在 /etc 目录下查找目录 [[email protected] ~]# find /etc -size 1M #在 /etc 目录查找大小为 1M 的文件( 1M 内的所有文件) [[email protected] ~]# find /etc -size 10k -ls #在 /etc 目录下查找 10k 以内的所有文件,并且长格式显示 [[email protected] ~]# find /etc -nouser -a -type d #在 /etc 目录下查找没有属主并且类型为目录的 [[email protected] ~]# find /etc -not -type d #在 /etc 目录下查找非目录的文件 [[email protected] ~]# find /tmp -not -type d -a -not -type s #/tmp 目录,不是目录,并且还不能是套接字类型的文件
根据时间戳查找文件
-mtime : 修改时间 (天)
-ctime : 改变时间
-atime : 访问时间
[ +|- ]#
-mmin
-cmin
-amin
[ +|- ]#
[[email protected] etc]# find ./ -amin -5 #查找当前目录下 , 5分钟之内访问过的文件 [[email protected] etc]# find ./ -amin +5 #查找当前目录下, 5分钟之前访问过的文件(至少有5分钟没访问过)
-perm chmod 根据文件权限匹配
-perm ### : 精确匹配
-perm /### : 任意一位匹配成功即可
-perm -### : 文件权限能完全包含此 MODE 时才能显示 (三位完全包含)
动作 :
-print : 显示
-ls : 类似 ls -l 的形式显示每一个文件的详细
-ok COMMAND {} \ : 需要用户确认
-exec COMMAND
[[email protected] etc]# find ./ -perm -006 -exec chmod o-w {} \; #在当前目录下找到 其他人权限包含 rw 的文件,并将找到的文件,取消 w 权限. {} 为占位符 [[email protected] etc]# find ./ -perm -020 -exec mv {} {}.new \; #在当前目录下找到 属组包含w权限的文件,并重命名为 .new [[email protected] etc]# fidn ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \; #在当前目录下找到 .sh 结尾的文件,并且有属主属组其他人都有执行权限的文件,减去执行权限
练习 :
1 . 查找 /var 目录下属主为 root 并且属组为 mail 的所有文件;
find /var -user root -group mail
2 . 查找 /usr 目录下不属于 root bin student 的文件;
find /usr -not -user root -a -not -user bin -a -not -user student
find /usr -not \( -user root -o -user bin -o -user student \)
3 . 查找 /etc 目录下最近一周内内容修改过且不属于 root 及 student 用户的文件;
find /etc -mtime -7 -not -user root -a -not -user student
4 . 查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为 root;
find / \(-nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;
5 . 查找 /etc 目录下大雨 1M 的文件,并将其文件名写入 /tmp/etc.largefile 文件中;
find /etc -size +1M >> /tmp/etc.largefile
6 . 查找 /etc 目录下所有用户都没有写权限的文件,显示出其详细信息
find /etc -not -perm /222 -ls