技術員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務器類 >

Linux中find命令的用法匯總

來源:技術員聯(lián)盟┆發(fā)布時間:2017-11-25 18:26┆點擊:

  Linux系統(tǒng)中的 find 命令在查找文件時非常有用而且方便。它可以根據(jù)不同的條件來查找文件,例如權限、擁有者、修改日期/時間、文件大小等等。在這篇文章中,我們將學習如何使用 find 命令以及它所提供的選項來查找文件。

  在絕大多數(shù)Linux發(fā)行版中,你都可以直接使用 find 命令而無需進行任何安裝操作。如果你想在linux系統(tǒng)的命令行中變得特別高效,那么 find 是你必須掌握的命令之一。

  find 命令的基本語法如下:

  $ find [path] [option] [expression]

  一、基本用法

  1. 列出當前目錄和子目錄下的所有文件

  這個命令會列出當前目錄以及子目錄下的所有文件。

  $ find

  .

  ./abc.txt

  ./subdir

  ./subdir/how.php

  ./cool.php

  該命令與以下命令效果相同

  $ find .

  $ find . -print

  2. 查找特殊的目錄或路徑

  下面的命令會查找當前目錄下 test 文件夾中的文件,默認列出所有文件。

  $ find ./test

  ./test

  ./test/abc.txt

  ./test/subdir

  ./test/subdir/how.php

  ./test/cool.php

  下面的命令用于查找指定名稱的文件。

  $ find ./test -name "abc.txt"

  ./test/abc.txt

  也可以使用通配符

  $ find ./test -name "*.php"

  ./test/subdir/how.php

  ./test/cool.php

  請注意,所有的文件夾都會被遞歸地查找。所以,這是用于查找指定擴展名文件的一種非常強大的方式。

  如果我們嘗試搜索 / 文件夾,也就是根目錄,就會搜索整個文件系統(tǒng),包括掛載的設備以及網(wǎng)絡存儲設備。所以請小心使用。當然,你隨時可以通過按 Ctrl + C 來終止命令。

  注意:當指定文件夾的時候(例如示例中的"./test"文件夾),忽略末尾的斜杠是沒有問題的。但是,如果文件夾是一個指向其它位置的鏈接(symlink)時,你必須在末尾寫上斜杠才能使find命令正常工作(find ./test/)。

  忽略大小寫

  在查找文件名時,忽略大小寫往往非常有用。要忽略大小寫,只需要使用 iname 選項,而不是 name 選項。

  $ find ./test -iname "*.Php"

  ./test/subdir/how.php

  ./test/cool.php

  總是用雙引號或單引號來包圍匹配模式(文件名參數(shù)),這非常有用。不這樣做的話有時也能正常工作,有時也可能會產(chǎn)生奇怪的結果。

  3. 限制目錄查找的深度

  find 命令默認會遞歸查找整個目錄樹,而這非常消耗時間和資源。好在目錄查找的深度可以手動指定。例如我們只想查找一到兩層以內的子目錄,可以通過 maxdepth 選項來指定。

  $ find ./test -maxdepth 2 -name "*.php"

  ./test/subdir/how.php

  ./test/cool.php

  $ find ./test -maxdepth 1 -name *.php

  ./test/cool.php

  第二個示例中指定了 maxdepth 為1,表明最多只查找一層內的子目錄,也就是只查找當前文件夾。

  當我們只想在當前目錄下查找,而不是查找整個目錄樹的時候,這個選項會特別有用。

  與 maxdepth 選項相似,還有一個選項叫做 mindepth ,正如名字所表示的那樣,它會至少到達第 N 層子目錄后才開始查找文件。

  4. 反向查找

  除了查找滿足條件的文件之外,我們還可以查找不滿足條件的所有文件。當我們知道要在查找中排除哪些文件時,這個選項就能發(fā)揮作用了。

  $ find ./test -not -name "*.php"

  ./test

  ./test/abc.txt

  ./test/subdir

  在上面的示例中我們找到了所有擴展名不是 php 的文件和文件夾。我們也可以使用感嘆號 ! 來代替 -not。

  find ./test ! -name "*.php"

  5. 結合多個查找條件

  我們可以同時使用多個查找條件來指定文件名并排除某些文件。

  $ find ./test -name 'abc*' ! -name '*.php'

  ./test/abc.txt

  ./test/abc

  上面的命令查找所有以 abc 開頭并且不含 .php 擴展名的文件。這個示例展現(xiàn)了 find 命令自帶的查找表達式是多么的強大。

  OR 操作符

  當我們使用多個查找條件時, find 命令會將它們通過 AND 操作符結合起來,也就是說,只有滿足所有條件的文件才會被列出。不過,如果我們需要進行基于 OR 運算的查找時,可以加上 -o 開關。

  $ find -name '*.php' -o -name '*.txt'

  ./abc.txt

  ./subdir/how.php

  ./abc.php

  ./cool.php

  上面的命令查找所有以 .php 結尾或者以 .txt 結尾的文件。

  6. 只查找文件或目錄

  有時我們只想通過某個名字查找對應的文件或對應的目錄,我們可以很容易實現(xiàn)這個要求。

  $ find ./test -name abc*

  ./test/abc.txt

  ./test/abc

  只查找文件

  $ find ./test -type f -name "abc*"

  ./test/abc.txt

  只查找目錄

  $ find ./test -type d -name "abc*"

  ./test/abc

  非常有用而且方便!

  7. 同時在多個目錄下查找

  如果你想要在兩個不同的目錄內進行查找,命令非常簡單。

  $ find ./test ./dir2 -type f -name "abc*"

  ./test/abc.txt

  ./dir2/abcdefg.txt

  檢查一下,它確實列出了來自給定的兩個目錄的文件。

  8. 查找隱藏文件

  在Linux系統(tǒng)中,隱藏文件的名字以英文的句號開頭,即 . 。所以要列出隱藏文件,只需加上簡單的文件名過濾條件就行了。

  $ find ~ -type f -name ".*"

  二、基于文件權限和屬性的查找

  9. 查找指定權限的文件

  通過指定 perm 選項,我們可以查找具有特定權限的文件。下面的示例中查找了所有具有 0664 權限的文件。

  $ find . -type f -perm 0664

  ./abc.txt

  ./subdir/how.php

  ./abc.php

  ./cool.php

  我們可以用這個命令來查找?guī)в绣e誤權限的文件,這些文件可能會產(chǎn)生安全問題。

  可以結合 反向查找 來進行權限檢查。

  $ find . -type f ! -perm 0777

  ./abc.txt

  ./subdir/how.php

  ./abc.php

  ./cool.php

  10. 查找具有 SGID/SUID 屬性的文件

  下面的命令查找所有具有 644 權限和 SGID 屬性的文件。

  # find / -perm 2644

  我們同樣可以使用 1664 來查找設置了 粘滯位 (sticky bit)的文件。

  # find / -perm 1644

  perm 選項除了接受數(shù)值型參數(shù)外,同樣接受 chmod 命令中的模式串。在下面的查找中,我們用另一種語法來代替數(shù)字。

  $ find / -maxdepth 2 -perm /u=s 2>/dev/null

  /bin/mount

  /bin/su

  /bin/ping6

  /bin/fusermount

  /bin/ping

  /bin/umount

  /sbin/mount.ecryptfs_private

  注意:由于權限不足,某些目錄會拒接訪問。命令中的 2>/dev/null 正是用于清除輸出中的錯誤訪問結果。

  11. 查找只讀文件

  $ find /etc -maxdepth 1 -perm /u=r

  /etc

  /etc/thunderbird

  /etc/brltty

  /etc/dkms

  /etc/phpmyadmin

  ... output truncated ...

  12. 查找可執(zhí)行文件

  $ find /bin -maxdepth 2 -perm /a=x

  /bin

  /bin/preseed_command

  /bin/mount

  /bin/zfgrep

  /bin/tempfile

  ... output truncated ...

  三、基于文件擁有者和用戶組的查找

  13. 查找屬于特定用戶的文件

  查找當前目錄下,屬于 bob 的文件。

  $ find . -user bob

  .

  ./abc.txt

  ./abc

  ./subdir

  ./subdir/how.php

  ./abc.php

  在指定所屬用戶的同時,我們同樣可以指定文件名。

  $ find . -user bob -name '*.php'

  很容易看出,我們可以通過增加過濾條件來縮小查找文件的范圍。

  14. 查找屬于特定用戶組的文件

  # find /var/www -group developer

  四、基于日期和時間的查找