在文件系統上常常需要根據文件的各種屬性去查找符合條件的文件。在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.www58058.com/37189