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查詢檔案時,有時會找到已經被刪除的資料,或者剛剛建立檔案,卻⽆法查詢到,原因就是因為資料庫檔案沒有被更新。
以上內容,如有錯誤,歡迎指點!