文件查找命令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

相关推荐

  • Nginx反向代理https,提供PhpMyAdmin

    准备工作:主机1、双网卡:外–172.16.252.187  内–192.168.42.140 主机2:192.168.42. 145 主机3:172.16.251.112 主机4:192.168.42.141 在主机2上:     安装httpd  yum  install…

    2017-07-01
  • N26-博客作业-week13

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)  1)共享名为shared,工作组为magedu;  2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;  3)添加samb…

    Linux干货 2017-06-15
  • DNS高级应用之ACL和View

    一、环境准备:     1、准备三台主机,要求如下      (1) DNS服务器双网卡:eth0:192.168.10.203  eth1: 172.16.2.10       (2)测试机1双网卡: eth0: 172.16….

    Linux干货 2015-06-01
  • N26-第十一周

    1、详细描述一次加密通讯的过程,结合图示最佳。     发送方:1、使用单项加密算法计算数据文件的特征码2、使用发送方私钥加密特征码3、使用对称加密算法生成一对临时密钥4、使用临时密钥加密数据文件和加密后的特征码5、使用接收方的公钥加密使用临时密钥加密后的数据和特征码和临时密钥的解密密码,并将之发送给接收方 接收方1、使用接收方的私钥解密…

    2017-04-09
  • 四大开源协议的异同:GPL、LGPL、BSD、Apache

    便于自身理解四大常用开源协议的异同之处。

    Linux干货 2017-10-25
  • Linux文件类型及颜色标示

    在Linux系统中,有多种文件类型,不同的文件类型有不同的颜色。 ls -l 目录,这个命令可以在显示的类容中的第一个位置查看目录里面文件的类型。 Linux下用字符表示的文件类型 -:普通文件 d:目录文件 l:链接文件 b:块设备文件 c:字符设备文件 p:管道文件 同时 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝…

    Linux干货 2016-10-17