Linux中find命令学习笔记

Posted mob604756f1200e

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中find命令学习笔记相关的知识,希望对你有一定的参考价值。

 LINUX系统上的文件查找命令

  1.locate

    依赖于实现构建好的索引库(最小化安装,无此命令),系统自动实现(周期执行),手动更新数据库(updatedb):需要遍历整个跟文件系统,所以非常消耗系统资源

工作特性:
  查找速度快:键值库查找
  模糊查找:包含目标字串即可匹配,不止是匹配基名。
  非实时查找:根据数据库查找。
  基本语法:locate [OPTION]... [PATTERN]...
 -b:匹配基名

例如:locate -b passw

 -c:统计出共有多少个符合条件文件

例如:locate -b passwd -c

 -r:基于基本正则表达式,编写模式

  2.find:

 实时查找通过遍历指定路径下得文件系统层级结构完成文件查找
工作特性:
  查找速度略慢:要实时遍历文件系统
  精确查找:完全匹配给出目标字串
  实时查找:不依赖数据库,实时进行查找
用法:find [OPTIONS]...[PATH] [条件] [处理动作]
  查找起始路径:默认为当前路径
  查找条件:指定得查找标准、比如文件名、类型、大小、属主、权限...
  表达式:选项和测试
根据文件名查找:
  -name "pattern" :
  -iname "pattern"(忽略文件名大小写) :
  支持glob通配符:*,?,[],[^]
基于正则表达式,根据整个文件路径名,而不仅是基名:
  -regex pattern:
根据文件从属关系查找:
  -user Username
  -group Groupname
  -uid uid
  -gid gid
  -nouser
  -nogroup
根据文件类型查找:
  -type f:普通文件
  -type d:目录文件
  -type b:块设备
  -type l:链接文件
  -type p:管道文件
  -type s:套接字文件
  -type c:字符设备文件
  -ls 显示详细结果信息
根据文件大小查找:
  -size +— # unit
  常用单位:k,m,g,t
根据时间戳查找:
  以天为单位:
  -atime 访问时间
  -mtime 修改时间
  -ctime 改变时间
以分钟为单位:
  -amin
  -mmin
  -cmin
根据权限查找:
  -perm:
  -perm mode:精确匹配mode所表示的条件。
  -perm /mode:任何一类用户(ugo)的权限中的任何一位(rwx)符合mode所表示的条件即可。
  -perm -mode:任何一类用户(ugo)的权限中的每一位(rwx)都要同时符合mode所表示的条件。

练习:
1.查找/tmp目录下,没有属主,且类型是普通文件
  find /tmp/ -nouser -type f
2.找出/tmp目录下,属主为非root,且文件名包含fstab的文件
  find /tmp -not -user root -name *fstab* -ls 3.找出/tmp目录下,文件名不包含fstab文件
  find /tmp -not -name *fstab* 4.找出/tmp目录下,属主为非root,且文件名不包含fstab的文件   find /tmp/ -not \\( -user root -o -name "*fstab*" \\) -ls   find /tmp/ -not -user root -not -name "*fstab*" -ls

组合测试:
  -a:且,上面例子中 find /tmp/ -nouser -a -type f 表示没有属主,且类型是普通文件。
  -o:或,上面例子中 find /tmp/ -nouser -o -type f 表示没有属主,或者类型是普通文件。
  -not,!: 非,比如,查找/tmp目录下,非普通文件的文件
  处理动作:对符合条件得文件做出操作,例如:删除、移动等等,默认为输出至标准输出
  打印信息:
  -print :输出至标准输出(默认)
  -ls : 输出文件详细信息,就类似于对文件执行ll命令
  -delete: 删除查找到的文件
  -ok COMMAND {} \\; :对找到的每个文件使用commond表示的命令; {}在这里表示占位符,意思就是代表find命令查找到的文件名。
  -exec COMMAND {} \\; :对找到的每个文件使用commond表示的命令,此命令对文件的操作将不会由用户进行确认。
  注意:
  以上-exec用法,会将find查找出的命令全部传递给后面的command命令,但是有些命令不能接收过长的参数,会导致命令执行报错,因此这里有另一种方法规避此问题:
    find ** | xargs COMMAND

练习:
查找/var目录下,属主为root,属组为mail文件或目录
  find /var/ -user root -group mail
查找/usr目录下不属于root、bin或hadoop的所有文件或目录,两种方法
  find /usr/ -not -user root -not -user bin -not -user hadoop -ls
  find /usr/ -not \\( -user bin -o -user root -o -user hadoop \\)
查找/etc/目录下,最近一周内修改内容,且属主不是root用户也不是hadoop用户的目录或文件
  find /usr/ -not \\( -user root -o -user hadoop \\) -mtime -7
查找当前系统上没有属主或属组,且最近一周内被访问过的文件或目录
  find / -nouser -o -nogroup -atime -7
查找/etc目录下所有用户都没有写权限的文件
  find /etc -perm /222
  find /etc -not -perm -222
查找/etc目录下,至少有一个用户没有执行权限的文件
  find / etc -not -perm -111 -ls
查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有写权限的文件
  find /etc -perm -113 -ls
查找/tmp/下,所有没有用户的文件,且访问时间超过7天,并删除这些文件  
   find /tmp -nouser -atime +7 -exec rm -rf {} \\;

  

       

以上是关于Linux中find命令学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

Linux学习笔记——find命令

linux 学习笔记—

Linux学习笔记4_基本文件操作命令复习2

Linux学习笔记4_基本文件操作命令复习2

Linux学习笔记(10)

Linux学习笔记find文件名后缀