linux文件查找find命令


linux文件查找find命令

 

1、文件查找

基本介紹

  在文件系統上查找符合條件的文件

  linux上常見的文件查找工具:find命令

  查找分類  

    實時查找

    精確查找

基本語法

  find  [options..] [查找的路徑] [查找條件] [處理動作]

    查找的路徑:指定查找目標文件具體路徑。默認為當前目錄

    查找條件:指定的查找標准,可以是文件名、大小、類型、權限、屬組或者屬主等標准進行查找。默認為找出指定路徑下的所有文件

    處理動作:對查找符合的文件做什么操作。默認輸出至屏幕

 

    查找條件有哪些

      根據文件名查找:

        -name  “文件名稱”:文件名稱支持使用glob,也就是可以是用*、?、[]、[^]。使用-name進行文件查找時,是嚴格區分文件大小寫的

          使用案例

            [root@oldboy ~]# find /etc -name "fs*"

            /etc/fstab

        -iname  “文件名稱”:文件名稱支持glob,使用-iname進行查找時,不區分文件的大小寫

        -regex  PATTERN:以PATTERN去匹配整個路徑字符串,而不僅僅是文件名稱

 

      根據文件的屬組、屬主查找

        -user  USERNAME:查找屬主為USERNAME的文件

        -group  GROUPNAME:查找屬組為GROUPNAME的文件

        -uid  UID:查找屬主為指定UID號的文件

        -gid  GID:查找屬組為指定GID號的文件

        -nouser:查找沒有屬主的文件(即用戶已經被刪除,在文件屬性中的屬主列屬性中只剩下一個UID

        -nogroup:查找沒有屬組的文件(即屬組已經被刪除,在文件屬性中屬組列屬性只剩下一個GID

          注意:當我們把一個用戶刪除時,屬於這個用戶的文件的屬組或者屬主都變成相應的UID號了

 

      根據文件類型查找

        -type  TYPE

          TYPE包含下列幾種

            f:普通文件

            d:目錄文件

            l:符號鏈接文件

            s:套接字文件

            p:管道文件

            b:塊設備文件

            c:字符設備文件

 

     組合條件查找

      -a:與(可以省略)

      -o:或

      -not或者 ! :非

      注意

        組合條件查找時有時需要把組合條件執行了再執行處理動作,因此,這個是組合條件就需要加括號(括號需要轉義)避免出錯。因為組合條件可能和后邊的處理動作產生歧義,造成意想不到的效果

      產生這樣結果的原因:通過處理動作執行后的結果會被輸入到屏幕上,而組合條件沒有加括號的話,只有組合條件中的最后一個條件與處理動作進行組和輸出了

  案例演示

[root@oldboy ~]# find /home -nouser -o -nogroup -ls

394369    4 -rw-r--r--   1 oldboy   500           176 Jul 24  2015 /home/oldboy/.bash_profile

394370    4 -rw-r--r--   1 oldboy   500           124 Jul 24  2015 /home/oldboy/.bashrc

394565    0 -rw-rw-r--   1 oldboy   500             0 Mar  3  1978 /home/oldboy/2.txt

394566    4 drw-r-----   2 oldboy   500          4096 Mar  3  1978 /home/oldboy/test

394375    4 -rw-------   1 oldboy   500           816 Dec 25 01:19 /home/oldboy/.viminfo

394373    4 -rw-------   1 oldboy   500           695 Mar  3  1978 /home/oldboy/.bash_history

394128    4 -rw-------   1 oldboy   500            17 Mar 30  1978 /home/oldboy/.history

394371    4 -rw-r--r--   1 oldboy   500            18 Jul 24  2015 /home/oldboy/.bash_logout

394372    4 drwxrwxr-x   2 oldboy   500          4096 Dec 25 01:19 /home/oldboy/script

394374    4 -rw-rw-r--   1 oldboy   500           164 Dec 25 01:19 /home/oldboy/script/functions

[root@oldboy ~]# find /home -nouser -ls

394558    4 drwx------   2 512      514          4096 Jan 17 10:54 /home/gentoo

394559    4 -rw-r--r--   1 512      514           176 Jul 24  2015 /home/gentoo/.bash_profile

394560    4 -rw-r--r--   1 512      514           124 Jul 24  2015 /home/gentoo/.bashrc

394561    4 -rw-r--r--   1 512      514            18 Jul 24  2015 /home/gentoo/.bash_logout

401181    4 drwx------   3 514      517          4096 Mar  4 18:02 /home/com

401182    4 -rw-r--r--   1 514      517           176 Jul 24  2015 /home/com/.bash_profile

401183    4 drwxr-xr-x   4 514      517          4096 Mar 30  1978 /home/com/.mozilla

401184    4 drwxr-xr-x   2 514      517          4096 Aug 18  2010 /home/com/.mozilla/extensions

401185    4 drwxr-xr-x   2 514      517          4096 Aug 18  2010 /home/com/.mozilla/plugins

401186    4 -rw-r--r--   1 514      517           124 Jul 24  2015 /home/com/.bashrc

401187    4 -rw-r--r--   1 514      517            18 Jul 24  2015 /home/com/.bash_logout

[root@oldboy ~]# find /home -nogroup -ls

394558    4 drwx------   2 512      514          4096 Jan 17 10:54 /home/gentoo

394559    4 -rw-r--r--   1 512      514           176 Jul 24  2015 /home/gentoo/.bash_profile

394560    4 -rw-r--r--   1 512      514           124 Jul 24  2015 /home/gentoo/.bashrc

394561    4 -rw-r--r--   1 512      514            18 Jul 24  2015 /home/gentoo/.bash_logout

394369    4 -rw-r--r--   1 oldboy   500           176 Jul 24  2015 /home/oldboy/.bash_profile

394370    4 -rw-r--r--   1 oldboy   500           124 Jul 24  2015 /home/oldboy/.bashrc

394565    0 -rw-rw-r--   1 oldboy   500             0 Mar  3  1978 /home/oldboy/2.txt

394566    4 drw-r-----   2 oldboy   500          4096 Mar  3  1978 /home/oldboy/test

394375    4 -rw-------   1 oldboy   500           816 Dec 25 01:19 /home/oldboy/.viminfo

394373    4 -rw-------   1 oldboy   500           695 Mar  3  1978 /home/oldboy/.bash_history

394128    4 -rw-------   1 oldboy   500            17 Mar 30  1978 /home/oldboy/.history

394371    4 -rw-r--r--   1 oldboy   500            18 Jul 24  2015 /home/oldboy/.bash_logout

394372    4 drwxrwxr-x   2 oldboy   500          4096 Dec 25 01:19 /home/oldboy/script

394374    4 -rw-rw-r--   1 oldboy   500           164 Dec 25 01:19 /home/oldboy/script/functions

401181    4 drwx------   3 514      517          4096 Mar  4 18:02 /home/com

401182    4 -rw-r--r--   1 514      517           176 Jul 24  2015 /home/com/.bash_profile

401183    4 drwxr-xr-x   4 514      517          4096 Mar 30  1978 /home/com/.mozilla

401184    4 drwxr-xr-x   2 514      517          4096 Aug 18  2010 /home/com/.mozilla/extensions

401185    4 drwxr-xr-x   2 514      517          4096 Aug 18  2010 /home/com/.mozilla/plugins

401186    4 -rw-r--r--   1 514      517           124 Jul 24  2015 /home/com/.bashrc

401187    4 -rw-r--r--   1 514      517            18 Jul 24  2015 /home/com/.bash_logout

[root@oldboy ~]# find /home -nouser -o -nogroup

/home/gentoo

/home/gentoo/.bash_profile

/home/gentoo/.bashrc

/home/gentoo/.bash_logout

/home/oldboy/.bash_profile

/home/oldboy/.bashrc

/home/oldboy/2.txt

/home/oldboy/test

/home/oldboy/.viminfo

/home/oldboy/.bash_history

/home/oldboy/.history

/home/oldboy/.bash_logout

/home/oldboy/script

/home/oldboy/script/functions

/home/com

/home/com/.bash_profile

/home/com/.mozilla

/home/com/.mozilla/extensions

/home/com/.mozilla/plugins

/home/com/.bashrc

/home/com/.bash_logout

[root@oldboy ~]# find /home \( -nouser -o -nogroup \) -ls

394558    4 drwx------   2 512      514          4096 Jan 17 10:54 /home/gentoo

394559    4 -rw-r--r--   1 512      514           176 Jul 24  2015 /home/gentoo/.bash_profile

394560    4 -rw-r--r--   1 512      514           124 Jul 24  2015 /home/gentoo/.bashrc

394561    4 -rw-r--r--   1 512      514            18 Jul 24  2015 /home/gentoo/.bash_logout

394369    4 -rw-r--r--   1 oldboy   500           176 Jul 24  2015 /home/oldboy/.bash_profile

394370    4 -rw-r--r--   1 oldboy   500           124 Jul 24  2015 /home/oldboy/.bashrc

394565    0 -rw-rw-r--   1 oldboy   500             0 Mar  3  1978 /home/oldboy/2.txt

394566    4 drw-r-----   2 oldboy   500          4096 Mar  3  1978 /home/oldboy/test

394375    4 -rw-------   1 oldboy   500           816 Dec 25 01:19 /home/oldboy/.viminfo

394373    4 -rw-------   1 oldboy   500           695 Mar  3  1978 /home/oldboy/.bash_history

394128    4 -rw-------   1 oldboy   500            17 Mar 30  1978 /home/oldboy/.history

394371    4 -rw-r--r--   1 oldboy   500            18 Jul 24  2015 /home/oldboy/.bash_logout

394372    4 drwxrwxr-x   2 oldboy   500          4096 Dec 25 01:19 /home/oldboy/script

394374    4 -rw-rw-r--   1 oldboy   500           164 Dec 25 01:19 /home/oldboy/script/functions

401181    4 drwx------   3 514      517          4096 Mar  4 18:02 /home/com

401182    4 -rw-r--r--   1 514      517           176 Jul 24  2015 /home/com/.bash_profile

401183    4 drwxr-xr-x   4 514      517          4096 Mar 30  1978 /home/com/.mozilla

401184    4 drwxr-xr-x   2 514      517          4096 Aug 18  2010 /home/com/.mozilla/extensions

401185    4 drwxr-xr-x   2 514      517          4096 Aug 18  2010 /home/com/.mozilla/plugins

401186    4 -rw-r--r--   1 514      517           124 Jul 24  2015 /home/com/.bashrc

401187    4 -rw-r--r--   1 514      517            18 Jul 24  2015 /home/com/.bash_logout
View Code

 

  案例演示

    找出/tmp目錄下,屬主不是root,並且文件的名字不是www的文件

      find  /tmp  ! \( -user root-o -name www”  \)  -ls

 

    根據文件大小來查找

      -size  [+|-]num:指定文件的大小來進行查找。num表示文件的大小,后邊可以跟一個單位,單位包括kmg

        使用注意:

          ①當我們給定數字和單位,那么去找尋文件時表示查詢的文件的大小范圍在大於這個給定數字減一到這個給定數字之間的任何值

          ②如果使減號后面跟數字加單位,表示找尋的文件大小是從0開始到給定數字減一的所有文件

          ③如果使用加號后面跟數字加單位,表示去找尋的文件是從當前給定數字到無窮大之間的所有文件的大小

        使用案例

          查找/tmp目錄下,大小是3k的文件

            find  /tmp  -size  3k  -type  f

            注意:這里打印出的文件可能並非大小只是3k的文件,包括大於2k,小於等於3k的文件

 

    根據文件時間戳查找

      以天為單位

        -atime  [+|-] num查詢訪問時間

        -mtime  [+|-] num查詢修改時間

        -ctime   [+|-] num查詢文件屬性改變時間

      一分鍾為單位

        -amin  [+|-] num查詢訪問時間

        -mmin  [+|-] num查詢修改時間

        -cmin   [+|-] num查詢文件屬性改變時間

      注意上面具體的時間參數在下面給出了

      注意:

        +num:表示指定天數大於等於num+1天之前

        num:如果只是數字,沒有加減號,那么表示大於等於我們給定的前num這個天數,小於給定num天數加1

        -num:從當前開始(即大於等於0)到前三天,但是不包括前第三天即小於num天數

                      圖示這些關系

 

 

   

    根據文件權限來查找

      -perm  [-|/] MODE

        MODE:沒有加號或者減號,表示精確權限匹配權限

        MODE前給定了加號(/)或者減號( - )表示

          /MODE:任何一類對象(ugo)的權限中只要有一個匹配即可。CentOS7.x+號的MODE形式已經被廢棄了。改用的是斜線/

            案例演示

              找尋/tmp目錄下的所有文件的文件屬性在其他組的權限上具有執行權限的文件

                find  /tmp  -perm  /001  -ls

              找尋/tmp目錄下的所有文件的文件屬性在屬組的權限上具有寫或者讀權限的文件

                  find  /tmp  -perm  /060  -ls

          -MODE:每一類對象(ugo)必須同時擁有為其制定的權限標准

            案例演示

              找尋/tmp目錄下所有文件的文件屬性在其他組的權限上具有可寫、可執行或者可讀、可寫、可執行的文件

                find  /tmp  -perm  -003  -ls

   處理動作

      -print:默認的處理動作,顯示到屏幕上

      -ls:類似於對查詢到的文件執行ls  -l命令

      -delete:刪除查詢到的文件,謹慎使用

      -fls   FILE:查詢到的所有文件的長格式信息保存值指定的PATH文件中

      -ok  COMMAND  {} \; :對查詢到的每個文件執行由COMMAND指定的命令。但是這個命令在對每個文件進行命令之前都會交互是的與用戶進行確認。注意:大括號與反斜線之間必須要有空格,否則報錯。相對安全

      -exec  COMMAND {} \; :對查詢到的每個文件執行由COMMAND指定的命令。但是這個不會跟用戶進行交互式確認。注意:大括號與反斜線之間必須要有空格,否則報錯。比較不安全

        注意:花括號{ }的表示的是引用find查詢到的文件,而\;表示固定格式

      使用案例

        查詢/tmp目錄下三分鍾之前修改過的文件,並且將文件名改為以.new結尾

[root@oldboy ~]# find /tmp -type f -cmin -3

/tmp/fstab

/tmp/issue

[root@oldboy ~]# find /tmp -type f -cmin -3 -exec mv {} {}.new \;

[root@oldboy ~]# find /tmp -type f -cmin -3

/tmp/fstab.new

/tmp/issue.new
View Code

        注意:find傳遞查詢到的文件傳遞給后面指定的命令時,是一次性查詢到所有符合條件的文件,並且一次性傳遞給后面的命令。這個時候要注意,有些命令不能接受過多的參數,因此可能造成溢出,此時命令可能就會執行失敗。那么怎么規避這個問題呢?使用xargs命令

      find  |  xargs  COMMAND

      這條命令表示:通過find命令查詢到所有文件通過管道交給xargs,然后后面命令執行時,一次給命令一個參數,直至xargs給完所有內容

locate查找文件工具

  非實時查找或者叫數據庫查找,他不是去遍歷文件系統上的所有文件,而是一開始將所有的文件做成一個索引存放在數據庫中,locate就是用來查詢數據庫而完成查找的

locate文件的查找依賴於事先構建的索引,索引的構建是在系統較為空閑時自動進行(這個是一個周期性任務)。

  locate的查詢速度很快。因為他是通過數據庫索引進行查找的,但是他的查找不夠精確,因為,文件索引在數據庫中的構建需要系統自動進行,而且是在系統比較空閑時進行的,因此,當我們創建一個文件后,通過locate去查找,可能不會找到。但是我們可以手動更新數據庫

  手動更新文件索引數據庫使用的命令updatedb。注意:文件索引的構建是非常消耗資源的,因為他要遍歷整個根文件系統。當系統比較繁忙時禁止使用這個命令,因為可能其他服務無法工作

  工作特點

    查找速度查找

    模糊查找:路徑下出現某個關鍵詞都會把相應的路徑打印出來

    非實時查找,非精確查找

locate基本語法

  ocate  keyword

使用介紹

  locate就是根據keyword關鍵詞進行查找,她會找出包含keyword所有路徑

 

2、find的練習

查詢/var/目錄下屬主為root且屬組為mail的文件或者目錄

  find  /var/  -user  “root”  -a  -group  “mail”

 

查詢/usr下屬主不為rootbin、或者hadoop的所有文件或者目錄

  find  /usr  -not  \( -user  root  -o  -user  “bin”  -o   -user  “hadoop” \)

  find  /usr  -not  -user  root  -a  -not  -user  bin  -a  -not  -user  haddop

查詢當前系統上沒有屬主或者屬組且最近一周內曾被訪問過的文件或者目錄

  find  /  -nouser  -a  -nogroup  -a  -atime  -7  

  注意:問題的或者有不同的含義

 

查詢/etc/目錄下最近一周內其內容被修改過,同時屬主不為root,也不是hadoop的文件或者目錄

  find  /etc  -not  -mtime  -7  -a  -not  \(  -user  root  -o  -user  hadoop \)

  find  /etc  -not  \( -mtime  -7  -o  -user  root  -o   -user  hadoop  \)

 

查詢/etc/目錄下大於1M且類型為普通文件的所有文件

  find  /etc  -size  +1m  -type  f

 

查詢/etc/所有用戶都沒有寫權限的文件

  find  /etc/  -not  -perm   /222

 

查詢/etc/下至少有一類用戶沒有執行權限的文件

  find  /etc/  -not  -perm  -111

 

查詢/etc/init.d/下,所有用戶都有執行權限且其他用戶有些權限的文件

  find  /etc/init.d/  -perm  -113

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM