美文网首页
Linux基础之文件查找find、locate

Linux基础之文件查找find、locate

作者: 王王王小白 | 来源:发表于2017-09-16 11:37 被阅读0次

(一)使用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

相关文章

网友评论

      本文标题:Linux基础之文件查找find、locate

      本文链接:https://www.haomeiwen.com/subject/bgpysxtx.html