Linux中对文件查找的实现是使用find命令。

Find命令类似于:whatis locate

Whatis 命令:依赖于数据库,非实时查找,结果非精确,查找速度快,模糊查找,whatis查找的数据库,是在规定时间内更新数据库,或者手动更新数据库(updatedb)。

Find 命令:实时查找,精确匹配,速度慢。

Find的使用格式为:

find  [options]  [查找位置]  [查找条件]  [处理动作]

查找路径:如果省略的话,为当前目录,也可以用 find .

查找条件:默认为查找指定路径下的所有文件

处理动作:默认为显示到桌面

查找条件:

name “文件名称”:对文件名作精确查找,支持使用 globbing(字符匹配)

例子:find / -name history

wKioL1MMzV2g-KwIAABu-RE-b4o582.jpg

iname “文件名称”:查找时不区分字符大小写

例子:查看下/tmp都有哪些文件

wKioL1MM0EySAo5-AABYctTG3O4596.jpg

                     图中可以看到有两个文件名为:text和Text的,我们试着用-iname选项去查找,

                    find /tmp -iname “text”

wKiom1MM0RKjq3XPAABCBBHjsd4938.jpg

                   看到了吧,不区分大小写,两个文件都被匹配到了。

user username 根据属主查找

                   例子:查找以xiezhao为属主的文件,在根(/)目录下:

                       find / -user "xiezhao"

wKioL1MM0_qCHw7hAAKWOhZdyfI994.jpg

group groupname根据属组查找

                  例子:查找根目录下以xiezhao为属组的文件;

                       find / -group "xiezhao"

wKiom1MM1VCikD0dAAI2ZnQWcXA476.jpg

uid UID 根据UID查找。

               例子:先查看任意一个用户的UID,然后用此用户的UID进行查找,但是为了方便和更清楚的                         来看到效果,我们就查看下上面的xiezhao用户的UID来看搜索到的文件是否相同。

               使用tail命令进行查看:tail -3 /etc/passwd

wKioL1MM1pmTxWKRAAC47-WCt4Q796.jpg

                               再根据UID:502进行查找:find / -uid 502

wKioL1MM1_XzpiZXAAL3No5itC0402.jpg

nouser :查找没有属主的文件

   

wKiom1MNVGzBBA6nAADVhzQwJ7g012.jpg

       验证下:stat /home/123456

       

nogroup查找没有属组的文件

wKiom1MNVUXjQhRmAADP8RV9wr4056.jpg

组合条件:

           a 与,或者且,表示同时满足两个或者两个以上的条件,可以省略。

                   例子:我们查找既没有属主也没有属组的文件,如图:

               

wKioL1MNVejCC7DLAADWUvxSjno207.jpg

           -o 或。

                       例子:查找属主为xiezhao的文件,或者属组为xiezhao的文件

wKiom1MNV7nhNtQhAALhdT4uPJM515.jpg

             -not :!,非,取反

                   例子:查找/tmp下非“t”字母结尾的文件

wKioL1MNWhCiSamRAACB45lkUDo327.jpg

             A,并且 非B:非(A或者B

        非A,或 非B :非(AB)                                                                type :根据文件类型查找。

type    d :查找目标为目录。

           

wKioL1MNWpnDn18hAAA7jud2EZg932.jpg               下面的依此类推

         f :普通文件

        b :块设备文件

         c :字符文件

         l :链接文件

         P :管道文件

         S :套接字文件

size :根据文件大小查找

size [+|-] 单位 (M, K,G

例子:-size +2M 查找大于2MB

           

wKiom1MNW6eDjXc5AABmjspJnqE034.jpg

     size - 2M 查找1MB以下

wKiom1MNXAHDXm1mAACNJTUJU9E651.jpg

size  2M 查找大于1M小于2M

wKiom1MNXFPT8UHtAABMzTnIUo0224.jpg

根据时间戳查找:

以天为单位(time):

atime

atime +# 表示(#+1)天之外被访问过。

wKioL1MNXMaxDWpyAACULejHNqs404.jpg

剩下的依此类推:

atime - # 表示 # t天 之内被访问过。

                  atime  # 表示大于等于 #天,小于#+1天被访问过。

                 mtime :用来搜索显示被修改过的文件。

                                   ctime :用来搜索显示被改变过的文件。

以分钟为单位(min用法和上面类似,就不做一一的举例。

             amin        mmin      cmin

根据权限查找:

perm [+|-] MODE

+MODE:任何一类用户任何一位权限匹配 (或)常用于查找某类用户的某特定权限是否存在。

   例子:查询下/tmp下其他用户可以有读权限的文件:

wKioL1MNXwmSGFQDAAC3uGBYgUw552.jpg

wKioL1MNX8OQ7z5VAABQcGOFdbs626.jpg

- MODE:每类用户的任何一位都匹配 (与)每类用户的指定要检查的权限位都匹配,至少两个             权限一起匹配。

                                       

wKiom1MNaOLS3rVLAABCe9rE28w038.jpg

wKioL1MNaW7gAzkNAACXwMHPZyQ800.jpg

处理动作:

默认为:-print :打印在标准输出上

wKiom1MNalnxMLM7AABeDgNZMbA233.jpg

       ls    :以长格式输出各文件的信息

   

            exec COMMAND {}\; :对查找到的文件执行指定的命令。Find把查找到的所有文件一次性的传递给 -exec 所指定的命令

wKiom1MNcdCy7WcSAAB1jXFJfKw785.jpg

 ok  COMMAND {}\; :交互式的显示

find .... |xargs  COMMAND

          xargs一次接收一批结果。

               举例使用:

wKiom1MNeSrRaWusAAB7XOFguzw552.jpg

以上为find命令的一些基本以及常用的选项。