1. 程式人生 > >Linux中關於find指令的用法以及whereis指令

Linux中關於find指令的用法以及whereis指令

初識Linux,感覺“哇塞好神奇。。。。。。”真的一點兒不誇張。
當你扔掉滑鼠,拿一把稱心如意的鍵盤來控制計算機的時候,那個feel,倍兒爽,想想都覺得帥到爆。當然,前提是你得能夠熟練的運用Linux指令。
額,言歸正傳,我就想說說find指令的使用來著。

以下所有命令用於CentOS6.5系統下。使用者名稱為uu。

Linux下find命令在目錄結構中搜索⽂件,並執⾏指定的操作。

  • Linux下find命令提供了很多查詢條件,功能很強⼤,所以它的選項也很多。(即使系統中含有⺴絡⽂件系統( NFS),find命令在該⽂件系統中同樣有效,只要你具有相應的許可權。)
  • 在運⾏⼀個⾮常消耗資源的find命令時,大都傾向於把它放在後臺
    執⾏,因為遍歷⼀個⼤的⽂件系統可能會花費很⻓的時間(這⾥是指30G位元組以上的⽂件系統)。

指令格式

find pathname -options [-print -exec -ok ...]

命令引數

  • pathname : find命令所查詢的目錄路徑。例如⽤.來表⽰當前目
    錄,⽤/來表⽰系統根目錄。
  • -print: find命令將匹配的⽂件輸出到標準輸出。
  • -exec: find命令對匹配的⽂件執⾏該引數所給出的shell命
    令。相應命令的形式為’command’ { } \;,注意{ }和\;
    之間的空格。
  • -ok: 和-exec的作⽤相同,只不過以⼀種更為安全的模式來執⾏
    該引數所給出的shell命令,在執⾏每⼀個命令之前,都會給出提
    ⽰,讓⽤戶來確定是否執⾏。

命令選項

學習命令選項之前,先來看張圖,瞭解一下與檔案相關的一些屬性。

這裡寫圖片描述

1. -name 按照檔名查詢檔案。 比如:

find ~ -name file //在當前使用者目錄下查詢檔名為file的檔案
find -name file   //在當前目錄下查詢檔名為file的檔案

來看看結果吧

這裡寫圖片描述

使用者目錄下有三個名為file的檔案,分別列印了各自的檔案路徑。
當前目錄的file檔案,列印了 ./file ,其中.表示當前目錄,/為目錄分隔符。

find ~ -name file -exec ls -l {} \;  //顯示使用者目錄下file的詳細資訊。相當於以檔案資訊替換 `{} \;` 

這裡寫圖片描述

2. -perm 按照檔案許可權來查詢檔案。

find ~ -perm 444 -exec ls -l {} \; //查詢許可權為444的檔案

444表示檔案許可權為對於所有使用者都為只讀,以字母r來表示。

這裡寫圖片描述

3. -user 按照檔案屬主來查詢檔案。

find -user uu //查詢使用者名稱為uu的檔案
  • 我的系統下只有一個使用者,即uu,所以所有檔名都會打印出來,就不給大家看結果啦。

4. -group 按照檔案所屬的組來查詢檔案。

  • 指令使用形式如上。結果也一模一樣。

5. -size n: [c] 查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。

find -size +100c -size -500c -exec ls -l {} \; //查詢檔案大小在100到500位元組之間的檔案

看看結果

這裡寫圖片描述

若是已知要查詢的檔案大小,比如要查詢451位元組的檔案,那麼直接 find -size 451c 就可以啦。

6. -mtime -n +n 按照檔案的更改時間來查詢檔案。

-n表示檔案更改時間距現在n天以內,+n表示檔案更改時間距現在n天以前。 find命令還有-atime和-ctime 選項,但它們都和-m time選項相同。我這裡就不多說啦。

 find -mtime -3 -mtime +1 //查詢檔案更改時間距現在3天以內1天以前。

尷尬了,我的檔案沒有符合條件的,所以就只看三天以內的哈!

這裡寫圖片描述

7. -type 查詢某⼀型別的檔案。

  • b - 塊裝置⽂件。
  • d - 目錄。
  • c - 字元裝置⽂件。
  • p - 管道⽂件。
  • l - 符號連結⽂件。
  • f - 普通⽂件。

find -type d // 查詢目錄檔案

當前目錄下,只有當前目錄和dir1位目錄檔案。

這裡寫圖片描述

總結

find指令常用的命令選項如上。當然,只要記住,使用不是難事。但有些情況,往往需要把多個命令選項揉起來用,其實也不難,只要把命令選項記住了,想用哪個依次跟在後面就ok啦。
來看例子

find ~/bit_code -user uu -group uu -perm 664 -size +100c -size -500c -mtime +3 -exec ls -l {} \; //查詢當前使用者bit_code目錄下使用者名稱和所屬組都是uu,許可權為664即rw-rw-r--,檔案大小在100到500位元組之間且3天以前修改的檔案的詳細資訊

這裡寫圖片描述

whereis指令

whereis命令只能用於程式名的搜尋,⽽且只搜尋⼆進位制檔案(引數-b)、 man說明檔案(引數-m)和原始碼檔案(引數-s)。
命令格式如下:

whereis [-bmsu] [BMS 目錄名 -f ] ⽂件名

find&whereis

和find相⽐, whereis查詢的速度⾮常快,這是因為linux系統會將系統內的所有檔案都記錄在⼀個數據庫檔案中,當使用whereis時,會從資料庫中查詢資料,而不是像find命令那樣,通過遍歷硬碟來查詢,效率⾃然會很⾼。
但是該資料庫檔案並不是實時更新,預設情況下時⼀星期更新⼀次,因此,我們在用whereis查詢檔案時,有時會找到已經被刪除的資料,或者剛剛建立檔案,卻⽆法查詢到,原因就是因為資料庫檔案沒有被更新。

以上內容,如有錯誤,歡迎指點!