在文件系统上常常需要根据文件的各种属性去查找符合条件的文件。在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