一、Linux中的文件查找工具:

 grep是一个文本查找工具,而非文件查找工具

 locate 根据数据库进行查找,不精确,不实时,但是查找快速

 find   实时查找,精确快速

1. locate 的使用格式:

locate keyword(关键字)

       -c  #  keyword  统计出关键字出现的次数

       -n  #  keyword  只显示符合关键字的前#

2. find 的使用格式:

 find  [dir1,….]  [criteria,….](标准)  [action….](动作)

(1)[criteria]

   -name    根据文件名查找,严格区分大小写的,支持Globbing方式的文件名                  通配

   如:find  /etc –name “passwd*”

       find  /etc –name “*passwd*”

       find  /etc –name “passwd?”

   -iname     不区分文件名中的大小写

   -regex   “pattern”   :查找文件名中符合pattern的文件

   -user    username/UID  查找文件属主

   -group   GID          查找文件属组

   -uid     uid           根据Uid号来查找

   -gid     gid           根据gid 号来查找

   -nouser                :查找没有属主的文件

   -nogroup               :查找没有属组的文件

   -type                  :根据文件类型进行查找

        f :普通文件

        d :目录文件

        l  :符号链接文件

        b  :块设备文件

        c  字符设备文件

        p  :管道文件

        s  :套接字文件

   查找条件之间也可以进行组合:-a 表示“与” -o 表示“或” –not/! 表示“非”

   -size #                 :查找指定文件大小的文件,#可以为k/M/G

   -atime  #              :根据访问时间查找,默认时间为“天”

   -mtime  #              根据修改时间查找

   -ctime   #             :根据改变时间查找

   -perm   根据权限查找文件

         +mode或者/mode : 任何一类用户某一个权限位符合条件就行

         -mode           : 所有类别用户的所有权限位符合条件

2action  动作,查找到文件后做什么操作,默认为显示到屏幕上。

           -print   :默认将查找到的结果显示到桌面上

           -ls     :将查找到的文件内容以长文件格式显示出来

           -ok     查找到文件后执行别的命令(提示确认信息)

           -exec   查找到文件后执行别的命令(不提示确认信息)

           -exec  rm {} \;   {}为引用前面查找到的文件,此句意思是将查找的内容删除掉

           -ok -exec 后面跟的所要执行命令,在shell中可以对文件发出的任何操作的命令都可以使用,如删除文件,修改权限等

  3.需要特别强调的是:

1find无法通过管道来实现查找,能通过命令替换实现。

如: ls  -l  `find  /tmp  -user  redhat`

2find命令可以管道给xargs

如:find  ./  -perm 644  |  xargs chmod 755

find命令习题范例:

1、查找/var目录下属主为root并且属组为mail的所有文件;

# find /var -user root -group mail

2、查找/usr目录下不属于root,bin,student的文件;

# find /usr -not -user root -a -not -user bin -a -not -user student

# find /usr -not \( -user root -o -user bin -o -user student \)

3、查找/etc目录下最近一周内内容修改过且不属于rootstudent用户的文件;

# find /etc -mtime -7 -a -not -user root -a -not -user student

# find /etc -mtime -7 -a -not \( -user root -o -user student \)

4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为root

# find / \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \;

5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;

# find  /etc -size +1M  -exec basename {} >> /tmp/etc.largefiles

6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息;

# ls -l `find /etc -not -perm /222`