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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。如有问题或建议,请联系上述邮箱,非常感谢。