Linux文件查找
locate
查找系统上预先建立的文件索引数据库 /var/lib/mlocate/mlocate.db
locate查找事先依赖于先构建的索引,索引的构建是在系统较为空闲时自动进行(周期性任务),或管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源.
工作特点:
- 非实时查找(数据库查找:locate)
- 查找速度快
- 模糊查找
- 搜索的是文件全路径,不仅仅是文件名
- 可能只所搜用户具备读取和执行权限的目录
locate使用方法
安装locate命令 yum install mlocate 初始化 sudo updatedb
选项
| 选项 | 说明 |
| -i | 忽略大小写 |
| -n | 只列出符合条件的前几个 |
| -r | 支持正则表达式 |
find
实施查找工具,通过遍历指定路径完成文件查找
特性
- 查找速度略慢
- 精确查找
- 实时查找
- 可能只搜索用户具备读取和执行权限的目录
find用法
基本语法: find [OPTION] .... [查找路径] [查找条件] [处理动作]
- 查找路径: 指定一个路径当做本次搜索的位置
- 查找条件: 指定查找标准可为:文件名,大小,类型权限等.
- 处理动作: 对查找到符合条件的文件做什么操作,默认输出到屏幕.
查找条件
1.搜索层级
-maxdepth level 最大搜索目录深度,指定目录为第1级 -mindepth level 最小搜索目录深度
2. 根据文件名和inode查找
-name "文件名称" 根据文件名查找支持使用glob通配符 -iname "文件名称" 不区分字母大小写 -inum n 按inode号查找 -samefile name 相同inode号的文件 -links n 链接数为n的文件 -regex "PATTERN" 以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
3. 根据属主,属组查找
-user USERNAME 查找属主为指定用户(UID)的文件 -group GRPNAME 查找属组为指定组(GID)的文件 -uid UserID 查找属主为指定的UID号的文件 -gid GroupID 查找属组为指定的GID号的文件 -nouser 查找没有属主的文件 -nogroup 查找没有属组的文件
4. 根据文件类型查找
-type TYPE:
f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
5. 根据文件大小
-size [+|-]#UNIT 常用单位:k, M, G,c(byte)
例如:-size 2k 匹配取值为(1k~2k)
-size -5k 取值范围为(0-4k包括5k)
-size +5k 取值范围为(5k+ 不包括5k)
6. 根据时间戳查找
以"天"为单位
-atime [+|-]# 读取时间
#: [#,#+1]次
+#: [#天以上]
-#: [0,#不包括#天]
-mtime 修改时间
-ctime 状态更改时间
以"分钟"为单位
-amin
-mmin
-cmin
7. 根绝文件权限查找
-perm #
例如: -perm 600
/600 或者模糊匹配
-602 other权限位有读权限才会匹配
处理动作
-print 打印输出默认
-ls 显示详细信息
-delete 删除匹配的文件
-fls file 匹配到的文件重定向到指定的文件中
-ok COMMAND {} \; 对每个文件指定COMMAND命令,每个文件需要交互用户确认
-exec COMMAND {} \; 类似-ok,不需要用户交互确认.
组合条件
与:-a 或:-o 非:-not, !
本章练习题
1. 使用locate忽略大小写查询 password文件 2. 使用find查询/下所有没有属主属组的文件 3. 使用find查询属主为root 属组不为test 任意一个权限位包含777的链接文件 4. 使用find 找到 hh1-10 文件并删除 5. 使用find 找到/var/log/ 下面类型为普通文件,七天之前的所有文件按照修改日期查询
答案
1. 使用locate忽略大小写查询 password文件
locate -i password
2. 使用find查询/下所有没有属主属组的文件
find / -nouser -nogroup
3. 使用find查询属主为root 属组不为test 任意一个权限位包含777的链接文件
find / -user root -not -group test -perm /777 -type l
4. 使用find 找到 hh1-10 文件并删除
find / -iname "hh*" -exec rm -rf {} \;
5. 使用find 找到/var/log/ 下面类型为普通文件,七天之前的所有文件按照修改日期查询
find /var/log/ -type f -mtime +7
作者:闫世成
出处:http://cnblogs.com/yanshicheng
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。

浙公网安备 33010602011771号