IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁操作系統(tǒng)LINUX → Linux Find命令精通指南

Linux Find命令精通指南

時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)

  Linux find 命令是所有 Linux 命令中最有用的一個,同時也是最混亂的一個。它很難,因為它的語法與其他 Linux 命令的標(biāo)準(zhǔn)語法不同。但是,它很強(qiáng)大,因為它允許您按文件名、文件類型、用戶甚至是時間戳查找文件。使用 find 命令,您不但可以找到具這些屬性任意組合的文件,還可以對它找到的文件執(zhí)行操作。

  本文的目的是,通過概述 find 命令的用途和潛能,簡化該命令的學(xué)習(xí)和使用。同時,它將針對 find 命令的某些最強(qiáng)大但最混亂的方面提供一個基本的指南和參考。

  [注意:本文使用的 find 版本是 GNU 版本,因此,某些細(xì)節(jié)可能與其他版本的 find 有所不同。]

  基本格式

  開始之前,我們先來看一下 find 命令的基本結(jié)構(gòu):

  find   start_directory  test  options   criteria_to_matchaction_to_perform_on_results

  在以下命令中,find 將開始在當(dāng)前目錄(用"."表示)中查找任何擴(kuò)展名為"java"的文件:

  find . -name  "*.java"

  下面是該命令所找到的命令的縮略清單:

  find . -name  "*.java"./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java..

  [注意:如果您從本文剪切并粘貼來運(yùn)行該 find 命令,您可能需要使用自己的鍵盤替換雙引號 ("") 才能得出正確的結(jié)果。]

  以下命令將執(zhí)行相同的操作。在這兩種情況下,您都需要對通配符進(jìn)行轉(zhuǎn)義以確保它傳遞到 find 命令并且不由 shell 解釋。因此,請將您的搜索字符串放到引號里,或者在它前面加上反斜線:

  find . -name  \*.java

  盡管 find 的所有參數(shù)均為可選,但是如果您未指定從哪里開始搜索,搜索默認(rèn)將在當(dāng)前目錄中開始。如果您不指定要匹配的測試連接、選項或值,您的結(jié)果將不完整或者無區(qū)別。

  運(yùn)行以下三個 find 命令將得出同樣的結(jié)果 — 當(dāng)前目錄和所有子目錄中的所有文件(包括隱藏文件)的完整清單:

  find find .find . -print

  這類似于運(yùn)行一個帶 -la 選項的 ls 命令。如果您希望上述命令的輸出包含完整的路徑名(或許是為了備份),您將需要指定起始目錄的完整路徑:

  find /home/bluher -name \*.java/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java/home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java/...

  您還可以在搜索字符串中指定多個起始目錄。如果以具有相應(yīng)權(quán)限的用戶身份運(yùn)行,以下命令將下到 /usr、/home /tmp 目錄查找所有 jar 文件:

  find /usr /home  /tmp -name "*.jar"

  但是,如果您沒有相應(yīng)的權(quán)限,您在開始瀏覽許多系統(tǒng)目錄時將生成錯誤消息。以下是一個示例:

  find:  /tmp/orbit-root: Permission denied

  您可以通過附加您的搜索字符串來避免混亂的輸出,如下所示:

  find /usr /home  /tmp -name "*.jar" 2>/dev/null

  這會將所有錯誤消息發(fā)送到空文件,因此提供清理器輸出。

  默認(rèn)情況下,find 是區(qū)分大小寫的。對于不區(qū)分大小寫的 find,將 -iname 測試替換為 -name 測試。

  find downloads  -iname "*.gif"downloads/.xvpics/Calendar05_enlarged.gifdownloads/lcmgcfexsmall.GIF

  除文件名外,您還可以按類型搜索文件。例如,您可以使用以下命令查找一個目錄中的所有子目錄:

  find . -type d

  您可以使用以下命令查找您的/usr 目錄中的所有符號鏈接:

  find /usr -type l

  這可能會列出 3,000 多個鏈接。以下的任何一個命令使用根權(quán)限運(yùn)行都將列出 /usr 目錄中的鏈接以及它所指向的文件:

  # find /usr/bin  -type l  -name "z*" -exec ls  -l {} \;lrwxrwxrwx 1 root  root 8 Dec 12 23:17 /usr/bin/zsh -> /bin/zshlrwxrwxrwx 1 root  root 5 Dec 12 23:17 /usr/bin/zless -> zmorelrwxrwxrwx 1 root  root 9 Dec 12 23:17 /usr/bin/zcat -> /bin/zcat

  find /usr/bin -type  l  -name "z*" -ls

  但是,第二個更短的命令將列出更多的文件,以及目錄和 inode 信息:在本文后面的部分中,我們將討論 -exec 和 -ls 操作的用法。

  其他 find 可以找到的文件類型包括:

  * b — 塊(緩存)特殊

  * c — 字符(未緩存)特殊

  * p — 命名管道 (FIFO)

  * s — 套接字

#p#副標(biāo)題#e#

  使用根作為 find 命令的起點(diǎn)會極大地降低系統(tǒng)的速度。如果您必須運(yùn)行這樣一個命令,您可以在非高峰時段或晚上運(yùn)行它。您可以使用以下語法將輸出重定向到一個文件:

  find  /   -print > masterfilelist.out

  如果您錯誤地輸入一個 find 命令,生成大量不必要的輸出,只需按 CTRL-C 中斷該命令,這將停止最近執(zhí)行的命令。

  在具多個文件系統(tǒng)的企業(yè)網(wǎng)絡(luò)上,限制 find 查找的文件也是一個特別好用的方法。盡可能多地使用選項和測試以減少系統(tǒng)上的負(fù)載。用于此目的的兩個最有用的選項是 -xdev 和 -mount。它們通過阻止 find 下到其他文件系統(tǒng)(如 MS-DOS、CD-ROM 或 AFS)上的目錄中縮短了搜索范圍。這將搜索限制為同一類型的文件系統(tǒng)作為起始目錄。

  如果運(yùn)行 mount 命令,雙引導(dǎo)系統(tǒng)上的用戶可以使用這些選項。假設(shè)涉及 Windows 分區(qū),您可以使用類似以下的命令安裝它:

  mount -t vfat  /dev/sda1 /mnt/msdos

  您使用的實際命令取決于您的系統(tǒng)設(shè)置。您可以通過運(yùn)行 df 或執(zhí)行以下命令驗證該分區(qū)已安裝:

  find /mnt/msdos  -name "*.txt" 2> /dev/null

  您應(yīng)該看到 MS Windows 分區(qū)上列出了很多的文件,F(xiàn)在,運(yùn)行以下帶 -mount 或 -xdev 選項的命令:

  find / -name  "*.txt" -mount 2> /dev/null

  或者

  find / -name  "*.txt" -xdev 2> /dev/null

  還可以使用 -fstype 測試明確告知 find 在哪個文件系統(tǒng)中查找,如以下示例中所示:

  find / -name  "*.txt" -fstype vfat 2> /dev/null

  查找時間

  find 命令有幾個用于根據(jù)您系統(tǒng)的時間戳搜索文件的選項。這些時間戳包括

  * mtime — 文件內(nèi)容上次修改時間

  * atime — 文件被讀取或訪問的時間

  * ctime — 文件狀態(tài)變化時間

  mtime 和 atime 的含義都是很容易理解的,而 ctime 則需要更多的解釋。由于 inode 維護(hù)著每個文件上的元數(shù)據(jù),因此,如果與文件有關(guān)的元數(shù)據(jù)發(fā)生變化,則 inode 數(shù)據(jù)也將變化。這可能是由一系列操作引起的,包括創(chuàng)建到文件的符號鏈接、更改文件權(quán)限或移動了文件等。由于在這些情況下,文件內(nèi)容不會被讀取或修改,因此 mtime 和 atime 不會改變,但 ctime 將發(fā)生變化。

  這些時間選項都需要與一個值 n 結(jié)合使用,指定為 -n、n 或 +n。

  * -n 返回項小于 n

  * +n 返回項大于 n

  * n 返回項正好與 n 相等

  下面,我們來看幾個例子,以便于理解。以下命令將查找在最近 1 小時內(nèi)修改的所有文件:

  find . -mtime -1./plsql/FORALLSample./plsql/RegExpDNASample/plsql/RegExpSample

  用 1 取代 -1 運(yùn)行同一命令將查找恰好在 1 小時以前修改的所有文件:

  find . -mtime 1

  上述命令不會生成任何結(jié)果,因為它要求完全吻合。以下命令查找 1 個多小時以前修改的所有文件:

  find . -mtime +1

  默認(rèn)情況下,-mtime、-atime 和 -ctime 指的是最近 24 小時。但是,如果它們前面加上了開始時間選項,則 24 小時的周期將從當(dāng)日的開始時間算起。您還可以使用 mmin、amin 和 cmin 查找在不到 1 小時的時間內(nèi)變化了的時間戳。

  如果您在登錄到您的帳戶后立即運(yùn)行以下命令,您將找到在不到 1 分鐘以前讀取的所有文件:

  find . -amin -1./.bashrc/.bash_history./.xauthj5FCx1

  應(yīng)該注意的是,使用 find 命令查找文件本身將更改該文件的訪問時間作為其元數(shù)據(jù)的一部分。

  您還可以使用 -newer、-anewer 和 –cnewer 選項查找已修改或訪問過的文件與特定的文件比較。這類似于 -mtime、-atime 和 –ctime。

  * -newer 指內(nèi)容最近被修改的文件

  * -anewer 指最近被讀取過的文件

  * -cnewer 指狀態(tài)最近發(fā)生變化的文件

  要查找您的主目錄中自上一個 tar 文件以來以某種方式編輯過的所有文件,使用以下命令:

  find . -newer  backup.tar.gz

  按大小查找文件

  -size 選項查找滿足指定的大小條件的文件。要查找所有大于 5MB 的用戶文件,使用

  find / -size  +5000000c 2> /dev/null/var/log/lastlog/var/log/cups/access_log.4/var/spool/mail/bluher

  結(jié)尾的"c"以字節(jié)為單位報告我們的結(jié)果。默認(rèn)情況下,find 以 512 字節(jié)塊的數(shù)量報告大小。如果我們將"c"替換為"k",我們還會看到以千

關(guān)鍵詞標(biāo)簽:Linux,Find命令

相關(guān)閱讀

文章評論
發(fā)表評論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠(yuǎn)程會話使用screen管理你的遠(yuǎn)程會話GNU/Linux安裝vmwareGNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連如何登錄linux vps圖形界面 Linux遠(yuǎn)程桌面連

相關(guān)下載

人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址linux tc實現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務(wù)器硬盤IO讀寫負(fù)載