首页 > 代码库 > Linux初学之文件查找

Linux初学之文件查找

   Linux哲学思想有一条是一切皆文件,Linux中一切东西都以文件的形式存在。面对如此多的文件查找和处理起来比较困难。因此需要借助一些命令来查找和定位文件。

  文件查找:按照文件名或文件属性来搜索文件

 locate:

   用于模糊搜索:

   基于专用的数据库进行查找,数据库应该事先创建并且定期更新

   可以使用updatedb命令手动更新locate数据库

   查找速度较快,精确度较低

 find:

   精确查找:

   查找精度高,速度慢

   在指定位置进行文件名或文件属性的遍历扫描;不建议对根目录进行find操作

   实时查找

   使用find命令只能搜索当前用户具有读和执行权限的目录

 find

   search for files in a directory hierarchy

   find [OPTIONS] [查找路径] [查找条件] [ 处理动作]

     查找路径:默认为当前工作目录,可以指定具体的目录路径

     查找条件:进行本次搜索的标准,可以是文件名,文件大小,文件类型,文件权限;默认是指定           目录中所有文件

     处理动作:对于符合条件的文件进行处理操作;默认是将查找结果输出到显示器

     根据文件名查找:

       -name 文件名称,支持使用 通配符(* ? [] [^])

       -iname 文件名称,忽略字母大小写,支持通配符


       根据文件的inode编号 进行查找:

        -inum inode编号:硬链接有相同的inode编号:通过给定的inode编号查找对应文件名和路径

        -samefile name:通过给定的文件名查找对应的inode编号,进而确定具有相同inode编号文件

        和路径

        -link n:查找连接数为n的所有文件


      根据正则表达式来匹配:

       -regex  pattern:以pattern匹配整个文件路径字符串,而不仅仅是给定文件的名称


       根据文件的属主和属组进行查找:

         -user uname:根据属主为指定用户的用户名进行查找

         -uid UID:根据属主为某个UID进行查找

         -group gname

         -gid GID


         -nogroup:在文件的额属组上没有对应的组名

         -nouser:在文件的属主上没有对应的用户名


      根据文件理性查找

       -type 文件类型

        b:块设备

        c: 字符设备

        d:目录文件

        f:普通文件

        l:符号链接文件

        p:普通文件

        s:套接字文件

       -xtype 文件类型: 符号链接文件的匹配需要配合其他选项


    根据时间戳进行查找:

      -atime  [+|-]n:根据访问时间进行查找,以天为单位

      -ctime  [+|-]n:根据改变时间进行查找

      -mtime  [+|-]n:根据修改时间进行查找

       n:[n-n+1)

       +n:[n+1- 之前的很长时间)

       -n:[n- now)


       -amin [+|-]n:  以分钟为单位

       -cmin [+|-]n

       -mmin [+|-]n

例子:查找/etc目录下最近一周内内容修改过且不属于root及suse用户的文件;

          find /etc  -ctime -7 -a -user root -a -user suse

     在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:

           find logs -type f -mtime +5 -exec    -ok    rm {} \; 


    根据文件的大小进行查找

       -size[+|-]n[cwbkMG]

         n:(n-1,n]

         -n:[0,n-1]

         +n:(n,zhengwuqiong)

       

例子:

find -size +2k

当前目录下所有大于2KB的文件;

find -size 2k

当前目录下所有1KB-2KB之间的文件;

find -size -2k

当前目录下所有小于1KB的文件;


     组合条件:

      -a:逻辑与  默认可省略

      -o:逻辑或

      -not,| :逻辑非

      逻辑组合条件遵循德摩根定律

    例:查找/usr目录下不属于root、bin、centos等用户的文件;

           find  /usr -not -user root -a -not -user bin -a -not -user centos


     根据权限查找:

       -perm [/|-]mode

         mode:精确匹配指定的权限

         /mode:隐含了逻辑或的关系,任何一个权限位的权限中只要有一个权限位匹配就为真

         -mode:隐含了逻辑与的关系,每个权限位都必须同时包含指定的权限位

例:查找/etc/rc.d/init.d目录下,所有用户都有执行权限并且其他用户有写权限的文件;

         find /etc/rc.d/init.d -prem /111 -a  -perm -002


所有都有 取反 任意一个没有 

! ( a与b与c ) = !a 或 !b 或 !c

所有都没有 取反 任意一个有

! ( !a与!b与!c ) = a 或 b 或 c

      所有都有 取反  任意一个没有

      !(a与b与c) = !a 或 !b 或!c

      所有都没有 取反 任意一个有

      !(!a与!b与!c) = a或b或c


    处理动作:

     -print:输出到显示屏幕,默认的动作 

     -ls:对于查找道的结果执行 ls -li命令显示

     -exec COMMAND {} \;  非交互式

     -ok COMMAND {} \; 交互式

        对于查找到的结果执行COMMAND命令

      {}:占位符,用来引用被find命令查找到的所有文件的信息


      -exec和-OK的取代操作

      chmod a-r $(find -perm -444 -type f)

      find -perm -444 -type f | xargs chmod a-r

      xargs


Linux初学之文件查找