文件查找命令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)
ladsdmladsdm
上一篇 2016-08-22
下一篇 2016-08-22

相关推荐

  • 基于rsync+inotify实现数据实时同步传输

    前言 与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,但随着文件数量的增大和实时同步的要求,rsync已不能满足需求,随之rsync+inotify便应运而生。本文将讲解rsync的基础知识和如何基于rsync+inotify实现数据实时同步传输。 rsync相关介…

    Linux干货 2015-04-27
  • Linux基础知识(三)-用户管理组管理,正则grep,文本处理

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中 5、取出当前主机的IP…

    Linux干货 2016-10-09
  • shell脚本执行

    shell脚本执行 对于我们这些小白而讲,shell脚本无疑是最令人头疼的事了,我再这里讲一下shell脚本运行要注意的哪些。 shell脚本就好像c++,java代码一样,按照从上到下然后从左到右的顺序执行。就像我们日常读书一样。如果shell命令遇见了子进程(嵌套代码),程序就会跟着顺序进入子进程。当子进程完成后,回到父进程,并且把父进程所需要的参数提交…

    2017-06-05
  • 入门——计算机基础简介

    一、计算机系统 计算机系统:由硬件(Hardware)系统和软件(Software)系统俩大部分组成 二、计算机硬件 计算机(computer):是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动、高速的处理,然后把处理结果输出的现代化电子设备。 计算机硬件组成部分 冯.诺依曼体系结构: 1946年数学家冯.诺依曼提出运算器、控制器、存储器、…

    2018-03-27
  • bash通配符和正则表达式元字符部分归纳

    Linux中有各种各样的字符,而且在不同环境和不同命令之下含义也不同 作为新手,决定先归纳学到的符号,方便后面学习厘清它们之间的关系。 glob 简化了的正则表达式 bash默认通配符: ? :只匹配一个任意字符; * :匹配零个或多个任意字符;   [^] :方括号及其中^中的取反 [abc]:匹配任何一个列在方括号中的字符(这个例子要么匹配一个…

    Linux干货 2016-04-11
  • 软件包管理

    一、软件运行环境     API: Application Programming Interface         POSIX: Portable OS     程序源代码 –>…

    Linux干货 2016-08-22