Q1:为什么要学会使用find?

每个操作系统都由无数的文件组成,Linux更是如此。Linux下,有一个统一的思想:一切皆文件。在windows我们可以通过文件查找功能实现对文件的查找,通过后缀的不同来确定同名文件中,我们最终要找的文件是哪个。而Linux下我们就不能通过图形化界面的文件查找功能得到我们想要的,需要借助find指令,并且Linux下的文件是没有后缀的,所以一个同名的文件可以通过其文件属性的不同区分,也有可能一个同名文件在不同的目录下。所以当我们需要对特定文件进行修改或者维护时,我们就需要借助搜寻指令去找到这个文件。


Q2:Linux下是不是只有一种查找指令?

当然不是。

linux下的查找指令有,whereis,which,locate和find,那么来看看他们的区别。

which:寻找当前PATH下的需要寻找的指令路径

                -a :将所有由 PATH 目录中可以找到的指令均列出,而不止第一个被找到的     

                      指令名称 

whereis:寻找特定文件(速度快,利用数据库搜寻)

              -b :查找特定二进制文件

              -m:找说明文件在manual路径下的文件

               -s:只找source来源文件

               -u:查找不含以上三种的文件

locate:寻找文件(利用数据库),有可能一个文件刚刚建立,无法找到;或者已经被删除的文件依然被找到了,都跟数据库的更新有关。

  #locate 

             -i        //查找文件的时候不区分大小写 比如:locate  –i   passwd 

             -n       //只显示查找结果的前N行     比如:locate  -n  5   passwd

find:功能强大,在目录下搜索文件,并可以执行指定操作,提供了相当多的查找条件(搜寻硬盘)

Q3:find指令用法总结

find  [指定查找目录]  [查找规则]  [查找完后执行的action]

【查找规则】:

(1)根据文件名查找

          -name:根据文件名查找

          -iname:根据文件名查找(不区分大小写)

(* :通配任意字符; ?:通配任意单个字符;  []:通配方括号中的任意一个字符)

Linux下关于find命令的总结_搜寻指令

(2)根据文件所属用户和组群查找

         -user :根据文件所属用户查找

         -group:根据文件所属组群查找

(3)根据文件的uid和gid来查找

       (GID为GroupId,即组ID,用来标识用户组的唯一标识符)

        (UID为UserId,即用户ID,用来标识每个用户的唯一标示符

         -uid:根据文件所属用户id查找

         -gid:根据文件所属组群id查找

(4)-a  (and)   -o (or)     -not (!)来查找

       -a:连接两个不同的条件,条件一成立“且”条件二成立,的文件查找

       -o:连接两个不同的条件,条件一成立“或”条件二成立,的文件查找

       -not:对条件取反进行查找

Linux下关于find命令的总结_find_02

(5)根据时间戳的相关属性查找

        -atime:最近读取时间(天)

        -ctime:最近状态更改时间(天)

        -mtme:  最近内容更改时间(天)

        -amin:    最近读取时间(分钟)

        -cmin:    最近状态更改时间(分钟)

     #find  /tmp  –atime  +5           //表示查找在五天内没有访问过的文件

Linux下关于find命令的总结_linux_03

          #find  /tmp  -atime  -5            //表示查找在五天内访问过的文件

Linux下关于find命令的总结_find_04


(6)根据文件类型查找

-type

                      f     // 普通文件

                      d     //目录文件

                      l     //链接文件

                      b     //块设备文件

                      c     //字符设备文件

                      p     //管道文件

                      s     //socket文件


Linux下关于find命令的总结_linux_05



(7)根据文件大小查找

  -size

          #find  /tmp  -size   2M           //查找在/tmp 目录下等于2M的文件

          #find  /tmp  -size  +2M           //查找在/tmp 目录下大于2M的文件

          #find  /tmp  -size  -2M           //查找在/tmp 目录下小于2M的文件

(8)根据文件权限查找文件

  -perm

          #find  /tmp  -perm  755          

         //查找在/tmp目录下权限是755的文件

          #find  /tmp  -perm  +222        

         //表示只要有一类用户(属主,属组,其他)的匹配写权限就行

          #find  /tmp  -perm  -222         

         //表示必须所有类别用户都满足有写权限

(9)-nouser  and  -nogroup 

           #find  /  -nogroup –a –nouser    

   //在整个系统中查找既没有属主又没有属组的文件(这样的文件通常是很危险的,作为系统工程师的我们应该及时清除掉)

查找完执行的action

          # -print                                 //默认情况下的动作

         # -ls                                     //查找到后用ls 显示出来

         # -ok  [commend]                //查找后执行命令的时候询问用户是否要执行

        # -exec [commend]              //查找后执行命令的时候不询问用户,直接执行


查找5天前的文件并执行删除

查找权限为775的文件并执行修改成权限777的文件
Linux下关于find命令的总结_搜寻指令_06

(ps:{} 用来替代前面rm/chomd 777 所要修改的文件,\;是将;转义不让 -exec去解读)