文件查找命令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.www58058.com/37189

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

相關推薦

  • 馬哥教育網絡班21期+第四周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限; [root@localhost /]# cp -r /etc/skel /home/tuser1 [root@localhost /]# chmod&nb…

    Linux干貨 2016-07-22
  • shell腳本之條件測試

    組合條件測試:在多個條件間實現邏輯運算     與:[ condition1 -a condition2 ]、condition1 && condition2     或:[ condition…

    Linux干貨 2015-08-24
  • Linux 第八天: Linux文本編輯器vim

    Linux 第八天: (08月09日) Linux文本編輯器vim       sed 行編輯器 stream EDitor sed -n 不輸出模式空間內容的自動打印sed -e 多點編輯sed -f /PATH/TO/SCRIPTFILEsed -i 原處編輯   script單地址 # 指定的行/pattern/…

    Linux干貨 2016-08-11
  • 系統時間與硬件時間

    1. “系統時間”與“硬件時間”    系統時間: 一般說來就是我們執行 date 命令看到的時間,linux系統下所有的時間調用(除了直接訪問硬件時間的命令)都是使用的這個時間。    硬件時間: 主板上BIOS中的時間,由主板電池供電來維持運行,系統開機時要讀取這個時間,并根…

    Linux干貨 2016-08-05
  • shell 腳本編程基礎

    Shell腳本簡介: Shell腳本是一種特殊的程序,它是用戶與linux系統內核之間的一個接口,shell是一個工具程序,在用戶登錄后系統啟動。它解釋并運行由命令行或腳本文件輸入的命令,從而實現用戶與內核間的交互。 Shell腳本:也就是用各類命令預先放入到一個文件中,方便一次性執行的一個程序文件,主要是方便管理員進行設置或者管理用的,是利用shell的功…

    Linux干貨 2016-08-21
  • 第一篇博客 簡單說下最近的學習心得吧

        今天是個特殊的日子, 來到馬哥教育已經一周時間了,剛來的時候滿環信心,感覺人生充滿了希望,但是接下來的學習讓我感受到了什么是絕望,剛開始的兩天完全是一種朦朧的狀態,不知道干什么,敲得命令也不理解,完全是生搬硬套,沒有自己的認知,當時就有一種沖動想要一走了之,后來想想算了 ,然后就堅持到了現在,此時感覺當時的決定是對的,經過一周的學…

    2017-07-15
欧美性久久久久