linux文件查找主要是locate、find.
locate
locate主要查找速度快,实时,但需要依赖系统文件数据库,而这个文件数据库需要手动生成:updatedb.
find用法
实时,精确,有众多查找标准,它遍历指定目录的所有文件完成查找,速度慢。
语法:
find 查找路径 查找标准 查到后处理command
查找路径:默认为当前目录
查找标准:默认为指定路径下的所有文件
处理动作:默认为显示
匹配标准:
-name “filename”:对文件名进行精确匹配
文件名通配:
*:任意长度任意字符
?:
[]
-iname “filename” :文件名不区分大小写。‘
-regex pattern :基于正则表达式进行文件名匹配
-user User :属主属于user用户的文件
-group group 根据属组查找
-uid UID
-gid GID
-nouser :查找没有属主的文件
-nogroup:查找没有属组的文件
-type
f:普通文件
d:目录
c:字符设备
b:块设备,二进制文件
l:链接文件
p:管道文件
s:套接字文件
-size
[+|-]#k
#M
#G
组合条件:【默认就是与条件】
-a 与条件
-o 或条件
-not 非条件
时间
-mtime修改时间
-ctime 改变时间
-atime 访问时间
[+|-]#
-perm
mode 精确查找
-mode 文件权限能完全包含此mode时才符合条件
/mode 任意一位能匹配就行
-ok command {} \; 每一次都需要用户确认
-exec command {} \;
常见案例练习
[[email protected] test]# find /etc/ -size +1M | xargs >> /tmp/etc.largefiles
1.查找/var目录下属主为root并且属组为mail所有文件
[[email protected] test]# find /var/ -user root -group mail > /tmp/var.rootmail.file
2.查看/usr/目录下不属于root,bin,或student的文件
[[email protected] test]# find /usr/ -not \( -user root -o -user bin -o -user student \) -exec ls -al {} \;
-rwsr-xr-x. 1 abrt abrt 9856 Jan 24 2013 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
3.查找/etc/目录下最近一周内内容修改过且不属于root及student用户的文件
[[email protected] ~]# find /etc/ -mtime -7 -a -not \( -user root -o -user student \)
[[email protected] ~]# find /etc/ -mtime -7 -not -user root -a -not -user student
4.查找当前系统上没有属主或属组且最近一天曾被访问的文件,并将其属主属组修改为root
[[email protected] ~]# find / -atime -1 -nouser -nogroup | xargs chown root:root {} \;
5.查找/etc/目录下大于1M的文件,并将其写入/tmp/etc.arggefile
[[email protected] ~]# find /etc/ -size +1M >> largefile
6.查找/etc/目录下所有用户都没有写权限的文件,显示其详细信息
[[email protected] ~]# find /etc/ -not -perm /222