Command:which,whereis,locate,find

which

依環境變數PATH找執行檔
which [-a] < file>
-a 列出所有可找到的同名執行檔,而非僅顯示第一個而已
ps:PATH內容大致為/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

…………………

whereis

依資料庫搜尋檔案
whereis [option] < file>
option如下
-b :只找binary格式的檔案
-m :只找在說明檔manual路徑下的檔案
-s :只找source來源檔案
-u :搜尋不在上述三個項目當中的其他特殊檔案

…………………

locate

依資料庫搜尋檔案
locate [option] < keyword>
option有
-i :忽略大小寫
-r :可接正規表示法
ex:locate passwd //找出系統所有檔名包含passwd的檔案

ps
更新資料庫
updatedb
依/etc/updatedb.conf設定搜尋系統內的檔名,並更新/var/lib/mlocate資料庫

…………………

find

直接尋找硬體內檔案
find < path> < option> [act]

< path>

會自動搜尋次目錄
以空白做為間隔可接多目錄
ex:find /home /var -name file //列出home和var目錄下檔名為file的檔案

[act]

-print :將結果列印到螢幕上,預設動作
-exec < command> {} ; :可接額外的command來處理搜尋到的結果,不支援命令別名
ex:
find / -name bashrc -exec ls -l {} ; //將找到的檔案用ls -l列出
find . -exec grep -Hn ilikelinux {} ;  //列出該目錄下的包含ilikelinux文字的檔案

< option>

-name < filename> :搜尋檔案名稱為filename 的檔案,支援萬用字元
ex:
find / -name passwd //列出根目錄下檔名為passwd的檔案
find / -name '*log*' //列出根目錄下檔名包含log的檔案

-size << +|->SIZE> :依SIZE大小列出檔案,+表大於,-表小於,SIZE的單位有:c表byte,k表1024bytes
ex:
find /var -size +50k //列出var目錄下比50KB大的檔案

-type < TYPE> :依檔案類型列出檔案,TYPE值為:f表一般正規檔案,b,c表裝置檔案,d表目錄,l表連結檔,s表socket,p表FIFO
ex:
find / -type d -perm 777 //列出根目錄下可寫入的目錄
find /var -type s //列出var目錄下檔案類型為socket的檔案

與時間有關
-mtime < n> :列出過去的第n天當天被改過的檔案
-mtime +< n> :列出在n天前(不含n天本身)被改過的檔案
-mtime -< n> :列出在n天內(含n天本身)被改過的檔案
-newer < file> :列出比file還要新的檔案
ex:
find /var -mtime +3 //列出var目錄3天前被改過的檔案
find /var -mtime -3 //列出var目錄3天內被改過的檔案
find /var -mtime 3 //列出var目錄過去的第3天當天被改過的檔案
find /var -newer /var/log/messages //列出var目錄內比/var/log/messages新的檔案

與user和group有關
-uid < uid> :列出屬於uid的檔案
-gid < gid> :列出屬於gid的檔案
-user < name> :列出屬於該使用者的檔案
-group < name> :列出屬於該群族的檔案
-nouser :列出檔案擁有者不存在/etc/passwd的檔案
-nogroup :列出檔案擁有群組不存在/etc/group的檔案
ps:自行安裝軟體時,可能該軟體屬性中並無檔案擁有者,此時可用-nouser或-nogroup搜尋
ex:
find /home -user raymond //列出home目錄下屬於raymond的檔案
find / -nouser //列出系統中不屬於任何人的檔案

與檔案權限有關
-perm < mode> :列出等於mode權限的檔案
-perm -< mode> :列出全部可包含mode權限的檔案
-perm +< mode> :列出全部包含任一mode權限的檔案
ex:
find /var -perm 777 -type d //列出var目錄下權限為可寫入的目錄
find /var -perm 4755 //列出var目錄下權限為-rwsr-xr-x的檔案
find /var -perm -7477 //列出var目錄下7477,7577,7677,7777的檔案
find /var -perm -7177 //列出var目錄下7177,7377,7577,7777的檔案
find /var -perm +0600 //列出var目錄下0600,0400,0200的檔案
find /var -perm +0500 //列出var目錄下0500,0400,0100的檔案