(一)使用locate命令
- 查询系统上预建的文件索引数据库
/var/lib/mlocate/mlocate.d
- 依赖于事先构建 的索引
- 索引的构建是在系统较为空闲时自动进行( 周期性 任务),管理员手动更新数据库(updatedb)
- 索引构建过程需要遍历整个根文件系统,极消耗资源
- 工作特点:
- 查找速度快
- 模糊查找
- 非实时查找
- 搜索的是文件的全路径,不仅仅是文件名
- 可能只搜索用户具备读取和执行权限的目录
locate
locate KEYWORD
-i 不区分大小写的搜索
-n N 只列举前N 个匹配项目
locate conf
#搜索名称或路径中带有“conf ”的文件
locate -r ‘\.conf$’
#使用Regex 来搜索以“.conf
(二)find命令
- 定义:
- 实时查找工具,通过遍历指定路径完成文件查找
- 工作特点:
- 查找速度略慢
- 精确查找
- 实时查找
- 可能只搜索用户具备读取和执行权限的目录
find [OPTION]... [ 查找路径] [查找条件] [ 处理动作]
查找路径:指定具体目标路径;默认为当前目录
查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
处理动作:对符合条件的文件做操作,默认输出至屏幕
- 搜索层级
-maxdepth level 最大搜索目录深度, 指定目录为第1级
-mindepth level 最小目录深度
- 根据文件名和inode 查找:
- name " 文件名称" :支持使用glob
*, ?, [], [^]
- iname " 文件名称":不区分字母大小写
- inum n 按inode 号查找
- samefile name 相同inode号的文件
- links n 链接数为n 的文件
- regex "PATTERN" :以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
- 根据属主、属组查找:
- -user USERNAME:查找属主为指定用户(UID) 的文件
- -group GRPNAME:查找属组为指定组(GID) 的文件
- -uid UserID:查找属主为指定的UID 号的文件
- -gid GroupID:查找属组为指定的GID 号的文件
- -nouser :查找没有属主的文件
- -nogroup :查找没有属组的文件
- 根据文件类型查找
根据文件类型查找: - -type TYPE:
- f: 普通文件
- d: 目录文件
- l: 符号链接文件
- s :套接字文件
- b: 块设备文件
- c: 字符设备文件
- p: 管道文件
上述的条件可以组合起来进行组合查找,但是中间要加上组合条件的
KEYWORD
- 组合条件:
- 与:-a
- 或:-o
- 非:-not, !
- 德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
对以上的了解的只是这里做个简单的例子
找出/tmp目录下,属主不是root,且文件名 不以f 开头的文件
find /tmp ( -not -user root -a -not -name 'f' ) -ls
find /tmp -not ( -user root -o -name 'f' ) –ls
示例:查找/etc/下,除/etc/sane.d目录的其它所有.conf后缀的文件
find /etc -path ‘/etc/sane.d’ -a -prune-o -name “.conf”
find /etc (–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ )-a prune –o name “.conf”
查找条件可以是其他的:
-
根据文件大小来查找:
-
-size [+|-]#UNIT
-
常用单位:k, M, G ,c(byte) )
-
UNIT: (#-1, #]
-
如:6k 表示(5k,6k]
-
-#UNIT :[0,#-1]
-
如:-6k 表示[0,5k]
-
+#UNIT :(#, ∞ )
-
如:+6k 表示(6k ,∞ )
-
根据时间戳:
-
以“天”为单位;
-
-atime [+|-]#,
-
: [#,#+1)
-
+#: [#+1, ∞ ]
-
-#: [0,#)
-
-mtime
-
-ctime
-
以“分钟”为单位:
-
-amin
-
-mmin
-
-cmin
-
根据权限查找:
-
-perm [/|-]MODE
-
MODE : 精确权限匹配
-
/MODE :任何一类(u,g,o) 对象的权限中只要能一位匹配
-
即 可,或关系,+从centos7 开始淘汰
-
-MODE :每一类对象都必须同时拥有指定权限,与关系
-
0 表示不关注
-
find -perm 755会匹配权限模式恰好是755 的文件
-
只要当任意人有写权限时,find -perm +222 就会匹配
-
只有当每个人都有写权限时,find -perm -222 才会匹配
-
只有当其它人(other)有写权限时,find -perm -002才会匹配
-
处理动作
-print:默认的处理动作,显示至屏幕 -
-ls:类似于对查找到的文件执行“ls -l” 命令
-
-delete :删除查找到的文件
-
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-
-ok COMMAND{};对查找到的每个文件执行由 COMMAND指定的命令,对于每个文件执行命令之前,都会交互式求用户确认
-
-exec COMMAND {};对查找到的每个文件执行由COMMAND 指定的命令
-
{}:用于引用查找到的文件名称自身
-
find:传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
find示例:
find -name “*.conf” -exec cp {} {}.orig \;
# 备份配置文件,添加.orig这个扩展名
find /tmp -ctime +3 -user joe -ok rm {} \;
# 提示删除存在时间超过3天以上的joe 的临时文件
find ~ -perm -002 -exec chmod o-w {} \;
# 在你的主目录中寻找可被其它用户写入的文件
find /data –type f -perm 644 -name “*.sh” –exec chmod 755{}\;
find /home –type d -ls
# 需要找/data文件内权限为644的以“.sh”结尾的普通文件然后修改权限为755
参数替换xargs
- xargs用于产生某个命令的参数,xargs入可以读入stdin的数据,并且以空格符或回车符将将stdin的数据分隔成为arguments
- 注意:文件名或者是其他意义的名词内含有空格符的情况
- 有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决
find 和xargs 格式:find | xargs COMMAND
网友评论