文件查找命令find

  在文件系统上常常需要根据文件的各种属性去查找符合条件的文件。在Linux下也有相当优异的查找命令。今天只要将find和locate。find通常不常用,因为速度慢!通常我们先使用locate来进行模糊查找,如果真找不到了,才以find来查找。为什么呢?因为locate是利用数据库来查找数据,所以速度非常快,而且并没有实际查询硬盘比较省时间。

locate/slocate命令

locate属于非实时查找,以来于事先构建的索引;索引的创建在系统空闲时由系统自动进行(周期性任务);手动更新数据库进行使用updatedb命令;索引构建过程需要遍历整个跟文件系统,及其耗费资源。其特点为;查找速度快、非精确查找、模糊查找。

语法

locate [OPTION]… PATTERN…

常用选项

-i, –ignore-case #忽略字符大小写

-r, –regexp REGEXP #使用正则表达式模式查找

-l, –limit, -n LIMIT #列举匹配

locate用法简单,即locate KEYWORD即可,这里就不再详述


find命令

在指定目录层级结构下查找路径

语法

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]

find [OPTION] [查找起始路径] [查找条件] [处理动作]

查找起始路径:指定具体搜索目标起始路径;默认为当前目录;

查找条件:指定的查找标准,根据文件名、大小、类型、从属关系、权限等等标准进行;默认为找出指定路径下的所有文件;

处理动作:对符合查找条件的文件作出的操作,例如删除等操作;默认为输出至标准输出;


                              

查找条件

    -name filename  #查找名为filename的所有文件

    -iname filename  #忽略字符大小写查找filename文件

支持glob风格的通配符; *  . ?  [] [^]

-regex pattern :基于正则表达式模式查找条件,匹配是整个路径,而非 其名。

根据文件从属关系查找:

    -user USERNAME: 查找属主指定用户的所有文件;

    -group GROUPNAME:查找属组指定组的所有文件

    -uid UID: 查找属主指定的UID的所有文件;

    -gid GID   查找属组指定的GID的素有文件;

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

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

根据文件的类型查找:

  -type TYPE:

         f;普通文件

         d;目录文件

         l;符号链接文件

         b;块设备文件

         c;字符设备文件

         p;管道文件

         s;套接字文件

组合测试;即德摩根定律

    与; -a,默认组合逻辑 同时满足

    或; -o, 满足其中之一即可

    非: not !

根据文件的大小查找;

        -size [+|-]# UNIT 不带加减号做精确查找。

          常用单位; k M G 不带单位默认为字节。

          #UNIT: (#-1,#)大于等于# 。小于等于#的值

                 # :例如#为3k时  查找范围为大于等于3k小于等于4k的文件。

          -#UNIT: (0,#-1)小于#,大于0的值

                -# 例如为-500k     查找范围就是小于500k大于0k的文件

          +#UNIT:[大于#,oo]大于#的无上限文件。

                +#例如为+500     查找范围就是大于500无上限的文件、

   根据时间戳来查找:

      以"天"为单位:

           -atime:查找按访问时间查找

           -atime [+|-]#

                #:[#>, <#-1] 大于#天 小于#-1天

                 如#是3 就是 大于3天 小于4天的ac时间

                -#(#>,0)小于#大于0 例如#为3就是小于3大于0天。

                  即为3天之内的访问时间

                +#(oo,#-1):从无穷大到#-1天。

                例如#为3 即为 大于3天而后无线天。

                  即为3天之前的访问时间

           -mtime:查找按修改时间查找,以天为单位。查找机制同atime

           -ctime:查找按改变时间查找,以天为单位。查找机制同atime

           以“分钟”为单位

           -amin 机制同上

           -mmin

           -cmin

           根据权限来查找

             -perm [/|-]mode

                  mode:精确权限匹配;

                  /mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足

                      9位权限之间存在"或"关系

                  -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;

                       9位权限之间存在"与"关系

                     find ./ -not -perm -222:至少有一类用户没有写权限

 处理动作;

      -print:输出至标准输出;默认的动作

      -ls;类似于对查找到的文件执行"ls -l"命令,输出文件的详细信息;

      -delete:删除查找到的文件

      -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;

      -ok COMMAND {} \; :对查找到的每个文件执行由COMMAND表示的命令;    

      -exec COMMAND {} \; : 对查找到的每个文件执行由COMMAND表示的命令

作业示例

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

[root@localhost ~]# find /var -not -user root -a -group mail#执行命令
/var/spool/mail/rpc
/var/spool/mail/mageedu
/var/spool/mail/user1
/var/spool/mail/user2
/var/spool/mail/user3
/var/spool/mail/user4
/var/spool/mail/user5
/var/spool/mail/user6
/var/spool/mail/user7
/var/spool/mail/user8
/var/spool/mail/user9
/var/spool/mail/user10

2、查找/var目录下不属于root、lp、gdm的所有文件

[root@localhost ~]# find /var -not \( -user root -o -user lp -o -user gdm \) -ls#执行并详细显示结果
201328431    0 drwxr-xr-x   3 colord   colord         50 Jul 26 08:32 /var/lib/colord
  8438    0 drwxr-xr-x   2 colord   colord          6 Nov 20  2015 /var/lib/colord/icc
201356799    4 -rw-r--r--   1 colord   colord       4096 Jul 26 08:32 
.......

3、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfix的文件

[root@localhost ~]# find /var -atime -7 -not -user root -not -user postfix -ls#执行并详细显示结果
201328431    0 drwxr-xr-x   3 colord   colord         50 Jul 26 08:32 /var/lib/colord
  8438    0 drwxr-xr-x   2 colord   colord          6 Nov 20  2015 /var/lib/colord/icc
67259713    0 drwx------   2 setroubleshoot setroubleshoot        6 Nov 20  2015 /var/lib/setroubleshoot
134301009    0 drwx------   2 rpc      rpc             6 Nov 20  2015 /var/lib/rpcbind
201329095    0 drwxr-xr-x   2 chrony   chrony         18 Aug 17 23:21 /var/lib/chrony
201404738    4 -rw-r--r--   1 chrony   chrony         42 Aug 17 23:21 /var/lib/chrony/drift
134301042    0 drwx------   2 tss      tss             6 Nov 21  2015 /var/lib/tpm
134301049    0 drwxr-xr-x   2 geoclue  geoclue         6 Nov 20  2015 /var/lib/geoclue

…..

4、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

 find / -nouser -nogroup -atime -7 -ls #执行并详细显示结果
30848    0 drwxrwxr-x   2 1001     1001            6 Aug 17 11:00 /home/user1/.config/abrt
67409330    4 -rw-------   1 1001     1001          122 Aug 17 21:04 /home/user1/.bash_history
67409284    0 drwx------   3 1002     1002           74 Aug 17 10:59 /home/user2
134376235    0 drwxr-xr-x   4 1002     1002           37 Jul 26 16:08 /home/user2/.mozilla
201404771    0 drwxr-xr-x   2 1002     1002            6 Jun 10  2014 /home/user2/.mozilla/extensions
 30836    0 drwxr-xr-x   2 1002     1002            6 Jun 10  2014 /home/user2/.mozilla/plugins
67409285    4 -rw-r--r--   1 1002     1002           18 Nov 20  2015 /home/user2/.bash_logout
67409286    4 -rw-r--r--   1 1002     1002          193 Nov 20  2015 /home/user2/.bash_profile
67409287    4 -rw-r--r--   1 1002     1002          231 Nov 20  2015 /home/user2/.bashrc
....

5、查找/etc目录下大于1M且类型为普通文件的所有文件

[root@localhost var]# find /etc -size +1M  -ls#执行并详细显示结果
201335240 3772 -rw-r--r--   1 root     root      3858924 Nov 21  2015 /etc/selinux/targeted/policy/policy.29
 48037 6824 -r--r--r--   1 root     root      6984832 Jul 26 08:28 /etc/udev/hwdb.bin

6、查找/etc目录下所有用户都没有写权限的文件

[root@localhost tmp]# find /etc -not -perm /222 -ls #执行并详细显示结果
394539    4 -r--r--r--   1 root     root          324 May 11 01:32 /etc/ld.so.conf.d/kernel-2.6.32-642.el6.x86_64.conf
393245    4 ----------   1 root     root          890 Aug 14 15:36 /etc/gshadow-
395245    4 -r--r-----   1 root     root         3729 Dec  8  2015 /etc/sudoers
394101    4 -r--r--r--   1 root     root          146 May 11 13:00 /etc/pam.d/cups
393979    4 ----------   1 root     root          882 Aug 15 14:35 /etc/gshadow
393494  340 -r--r--r--   1 root     root       346654 Jul 26 11:00 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
393496  204 -r--r--r--   1 root     root       208874 Jul 26 11:00 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem

…..

7、查找/etc目录下至少有一类用户没有执行权限的文件

[root@localhost tmp]# find /etc -not -perm -111 -ls#执行命令
393591    4 -rw-r--r--   1 root     root         1816 Feb  9  2016 /etc/login.defs
394159    4 -rw-r--r--   1 root     root          370 Oct 15  2014 /etc/pm-utils-hd-apm-restore.conf
393355    4 -rw-r--r--   1 root     root          118 May 20  2009 /etc/httpd/conf.d/mod_dnssd.conf
394292    4 -rw-r--r--   1 root     root          299 Feb  4  2016 /etc/httpd/conf.d/welcome.conf
394191    4 -rw-r--r--   1 root     root          392 May 12 03:29 /etc/httpd/conf.d/README
394354   36 -rw-r--r--   1 root     root        34419 Feb  4  2016 /etc/httpd/conf/httpd.conf
394357   16 -rw-r--r--   1 root     root        13139 May 12 03:29 /etc/httpd/conf/magic
393584    8 -rw-r--r--   1 root     root         4940 Feb 22  2013 /etc/man.config
393224    0 -rw-r--r--   1 root     root            0 Jul 26 10:58 /etc/crypttab
393516    4 -rw-r--r--   1 root     root           17 May 11 14:31 /etc/ld.so.conf.d/mysql-x86_64.conf

8、查找/etc/init.d目录下,所有用户都有执行权限,且其它用户有写权限的文件

[root@localhost init.d]# find /etc/init.d/ -perm -113 -ls#执行命令
393230    0 -rwxrwxrwx   1 root     root            0 Aug 18 11:42 /etc/init.d/a

原创文章,作者:ladsdm,如若转载,请注明出处:http://www.178linux.com/37189

(0)
上一篇 2016-08-22 09:29
下一篇 2016-08-22 09:29

相关推荐

  • n28-第二周

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示 cp:copy files and directories 复制文件和目录 -i:交互式复制 默认情况下是别名定义了alias cp=’cp -i’ -f:强制复制 #cp -f /etc/issue /tmp/first.txt -r:递归复制目录 将/etc目录递归复制到/tmp…

    Linux干货 2017-12-10
  • MairaDB之基于openssl的主从复制

    一、配置openssl   1、   在master server(node0)上根CA的搭建(及生成自签名证书) [root@node0 ~]# cd /etc/pki/CA/ [root@node0 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) Gen…

    2014-10-03
  • N26-博客作业-week2

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。   cp:copy 复制文件和路径 cp [OPTION]… [-T] SOURCE DEST cp [OPTION]… SOURCE… DIRECTORY cp [OPTION]… -t DIRECTORY SOURCE&…

    Linux干货 2017-02-12
  • rpm包及rmp命令详解

    一、软件运行环境           API: Application Programming Interface              国际标准&nbs…

    Linux干货 2016-08-22
  • 磁盘配额

    配置配额系统     综述        •在内核中执行        •以文件系统为单位启用        •对不同组或者用户的策略不同 …

    Linux干货 2016-09-02