1. 程式人生 > >Linux命令之檔案查詢命令

Linux命令之檔案查詢命令

which命令

命令功能 在PATH變數指定的路徑中,搜尋某個系統命令的位置,並且返回第一個搜尋結果。
命令格式 which 可執行檔名稱
常用選項
空 查詢檔案、顯示命令路徑
例項 查詢pwd命令的路徑
命令 which pwd
注意:cd命令找不到,原因是cd是bash內建的命令。
whereis命令
命令功能 定位可執行檔案、原始碼檔案、幫助檔案在檔案系統中的位置。
這些檔案的屬性應屬於原始程式碼,二進位制檔案,或是幫助檔案。whereis 程式還具有搜尋原始碼、指定備用搜索路徑和搜尋不尋常項的能力。
命令格式 whereis [-bmsu] [BMS 目錄名 -f ] 檔名
常用選項
-b 定位可執行檔案。
例項 只將可執行檔案查找出來
命令 whereis -b svn
-m 定位幫助檔案。
例項 將幫助檔案查找出來
命令 whereis -m svn
-s 定位原始碼檔案。
-u 搜尋預設路徑下除可執行檔案、原始碼檔案、幫助檔案以外的其它檔案。
-B 指定搜尋可執行檔案的路徑
-M 指定搜尋幫助檔案的路徑。
-S 指定搜尋原始碼檔案的路徑。

locate命令

命令功能 可以在搜尋資料庫時快速找到檔案
資料庫由updatedb程式來更新,updatedb是由cron daemon週期性建立的,locate命令在搜尋資料庫時比由整個由硬碟資料來搜尋資料來得快,但較差勁的是locate所找到的檔案若是最近才建立或 剛更名的,可能會找不到,在內定值中,updatedb每天會跑一次,可以由修改crontab來更新設定值。(etc/crontab)
locate指定用在搜尋符合條件的檔案,它會去儲存檔案與目錄名稱的資料庫內,尋找合乎範本樣式條件的檔案或目錄錄,可以使用特殊字元(如”*” 或”?”等)來指定範本樣式,如指定範本為kcpa*ner, locate會找出所有起始字串為kcpa且結尾為ner的檔案或目錄,如名稱為kcpartner若目錄錄名稱為kcpa_ner則會列出該目錄下包括 子目錄在內的所有檔案。
locate指令和find找尋檔案的功能類似,但locate是透過update程式將硬碟中的所有檔案和目錄資料先建立一個索引資料庫,在 執行loacte時直接找該索引,查詢速度會較快,索引資料庫一般是由作業系統管理,但也可以直接下達update強迫系統立即修改索引資料庫。
命令格式

locate [選擇引數] [樣式]
常用選項
空 查詢與某檔案相關的所有檔案
例項 查詢pwd相關的所有檔案
命令 locate pwd
例項 搜尋etc目錄下所有以sh開頭的檔案
命令 locate /etc/sh

find命令

命令功能 用於在檔案樹中查詢檔案,並作出相應的處理
命令格式 find 目錄路徑 -options [-print -exec -ok …]
-print: find命令將匹配的檔案輸出到標準輸出。
-exec: find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為’command’ { } \;,注意{ }和\;之間的空格。
-ok: 和-exec的作用相同,只不過以一種更為安全的模式來執行該引數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓使用者來確定是否執行。
常用選項


-name 按照檔名查詢檔案。
例項 在當前目錄下查詢以“.log”結尾的檔案
命令 find . -name “*.log”
-perm 按照檔案許可權來查詢檔案。最好使用八進位制的許可權表示法。r,w,x分別對應4,2,1。
例項 查詢/opt/soft/test/目錄下許可權為777的檔案
命令 find /opt/soft/test -perm 777
-user 按照檔案屬主來查詢檔案。
-group 按照檔案所屬的組來查詢檔案。
-mtime -n +n 按照檔案的更改時間來查詢檔案, - n表示檔案更改時間距現在n天以內,+ n表示檔案更改時間距現在n天以前。find命令還有-atime和-ctime 選項,但它們都有-m time選項。
-amin n 查詢系統中最後N分鐘訪問的檔案
-atime n 查詢系統中最後n*24小時訪問的檔案
-cmin n 查詢系統中最後N分鐘被改變檔案狀態的檔案
-ctime n 查詢系統中最後n*24小時被改變檔案狀態的檔案
-mmin n 查詢系統中最後N分鐘被改變檔案資料的檔案
-mtime n 查詢系統中最後n*24小時被改變檔案資料的檔案
例項 查詢48小時內修改過的檔案
命令 find -atime -2
-newer 查詢比某個檔案新的檔案
例項 查詢更改時間比檔案log2012.log新但比檔案log2017.log舊的檔案
命令 find -newer log2012.log ! -newer log2017.log

-type 查詢某一型別的檔案,諸如:
b - 塊裝置檔案。
d - 目錄。
c - 字元裝置檔案。
p - 管道檔案。
l - 符號連結檔案。
f - 普通檔案。
例項 查詢當前目錄下,以.log結尾的普通檔案
命令 find . -type f -name “*.log”
-size n:[c] 查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計。
例項 查詢當前目錄下,大於1K的檔案
命令 find . size +1000c -print
注:1c是一個位元組,塊直接用數字表示。

find命令之exec

命令功能 用於配合find命令,對find命令查詢到的檔案進一步操作
命令格式 -exec {} \;
{}表示前面使用find查找出來的檔名。
-exec引數後面跟的是command命令,終止以;為結束標誌,考慮各個系統中分號的不同意義,使用反斜槓轉義。
常用選項
ls -l命令放在find命令的-exec選項中
例項 查詢當前目錄下所有的普通檔案,並在-exec選項中使用ls -l命令將其列出
命令 find . -type f -exec ls -l {} \;
rm命令放在find命令的-exec選項中
例項 查詢當前目錄下所有的更改時間在14天前的普通檔案,並在-exec選項中使用rm命令將其刪除
命令 find . -type f -mtime +14 -exec rm {} \;
注意:在shell中使用任何方式刪除檔案之前,應當先檢視相應檔案!
例項 查詢當前目錄下所有的更改時間在5天前的普通檔案,並在-exec選項中使用rm命令將其刪除,刪除前提示
命令 find . -type f -mtime +5 -ok rm {} \;
mv命令放在find命令的-exec選項中
例項 查詢當前目錄下名字為”*.log”的檔案,並在-exec選項中使用mv命令將其移動到上級目錄
命令 find . -name “*.log” -exec mv {} .. \;
cp命令放在find命令的-exec選項中
例項 查詢當前目錄下名字為”*.log”的檔案,並在-exec選項中使用cp命令將其複製到test3中
命令 find . -name “*.log” -exec cp {} test3 \;

find命令之xargs

命令功能 用於配合find命令,是對-exec的補充
有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令執行幾分鐘之後,就會出現溢位錯誤。錯誤資訊通常是“引數列太長”或“引數列溢位”。這就是xargs命令的用處所在。find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。
命令格式 | xargs
常用選項
file 查詢系統中的每一個普通檔案,然後使用xargs命令測試它們屬於哪類檔案
例項 查詢當前目錄下所有普通檔案,並使用xargs命令來測試它們分別屬於哪類檔案
命令 find . -type f -print | xargs file
配合echo
例項 在整個系統中查詢記憶體資訊轉儲檔案(core dump),然後把結果保到/tmp/core.log檔案中(該檔案必須存在)
命令 find / -name “core” -print | xargs echo “” > /tmp/core.log
配合chmod
例項 查詢當前目錄下所有使用者具有讀寫執行許可權的檔案,並收回相應的寫許可權
命令 find . -perm -7 -print | xargs chmod a-w
注意:chmod中“a”表示所有使用者,“u”表示建立者、“g”表示建立者同組使用者、“o”表示其他使用者;“+”表示新增許可權,“-”表示取消許可權;“r”表示讀許可權、“w”表示寫許可權、“x”表示寫許可權。
配合grep
例項 用grep命令在所有的普通檔案中搜索hostname這個詞
命令 find . -type f -print | xargs grep “hostname”
使用xargs執行mv
例項 移動當前目錄下檔名為”*.log”的檔案到test4中去
命令 find . -name “*.log” | xargs -i mv {} test4
-p 提示你確認是否執行後面的命令
例項 移動當前目錄下檔名為”*.log”的檔案到test4中去(帶提示)
  命令 find . -name “*.log” | xargs -p -i mv {} test4