Linux 搜尋檔案
【whereis 命令】
1.命令格式:whereis [選項] 檔名
常用選項:
-b | 只查詢二進位制檔案 |
-m | 只查詢說明檔案 |
-s | 只查詢原始程式碼檔案 |
-B<目錄> | 只在設定的目錄下查詢二進位制檔案 |
-M<目錄> | 只在設定的目錄下查詢說明檔案 |
-S<目錄> | 只在設定的目錄下查詢原始程式碼檔案 |
-f | 不顯示檔名前的路徑名稱 |
-u | 查詢不包含指定型別的檔案 |
2.用途:只能用於程式名的搜尋,而且只搜尋二進位制檔案(-b)、man 說明檔案(-m)、原始碼檔案(-s),若省略引數,則返回所有資訊。
3.特點:簡單快速
【which 命令】
1.命令格式:which [選項] 檔名
常用選項:
-n<檔名長度> | 制定檔名長度,指定的長度必須大於或等於所有檔案中最長的檔名 |
-p<檔名長度> | 與-n引數相同,但此處的<檔名長度>包含了檔案的路徑 |
-w | 指定輸出時欄位的寬度 |
2.用途:用於查詢並顯示給定命令的絕對路徑,只從環境變數 PATH 指定的路徑中搜索命令,通常使用 which 來確定是否安裝了某個指定的軟體。
3.特點:簡單精確
【locate 命令】
1.命令格式:locate [選項] 查詢字串(要查詢的檔名中含有的字串)
常用選項:
-c | 只統計數目 |
-i | 可以忽略大小寫進行查詢 |
-b | 只查詢二進位制檔案 |
-m | 只查詢說明檔案 |
-s | 只查詢原始程式碼檔案 |
-d<目錄> 或 --database=<目錄> | 指定資料庫所在的目錄 |
-u | 更新 slocate 資料庫 |
2.用途:常用來查詢指定目錄下的不同檔案型別。
注:locate 是通過 Linux 系統自動建立的 /var/lib/locatedb 資料庫查詢,這個資料庫中含有本地所有檔案資訊。此資料庫不是實時更新的,系統會定時每天自動執行 updatedb 命令更新一次,因此使用 locate 命令無法查到最新變動檔案,為了避免這種情況,因此可在使用 locate 前,先使用 updatedb 命令,手動更新資料庫。
3.特點:快速全面
【find 命令】
1.命令格式:find 指定目錄 [引數] 檔名
常用選項:
-name<範本樣式> | 指定字串作為尋找檔案或目錄的範本樣式 |
-iname<範本樣式> | 此引數的效果和指定“-name”引數類似,但忽略字元大小寫的差別 |
-user<擁有者名稱> | 查詢符和指定的擁有者名稱的檔案或目錄 |
-group<群組名稱> | 查詢符合指定之群組名稱的檔案或目錄 |
-perm<許可權數值> | 查詢符合指定的許可權數值的檔案或目錄 |
-size<檔案大小> | 查詢符合指定的檔案大小的檔案 |
-path<範本樣式> | 指定字串作為尋找目錄的範本樣式 |
-ctime<24小時數> | 查詢在指定時間之時被更改的檔案或目錄,單位以24小時計算 |
-atime<24小時數> | 查詢在指定時間曾被存取過的檔案或目錄,單位以24小時計算 |
-mtime<24小時數> | 查詢在指定時間曾被更改過的檔案或目錄,單位以24小時計算 |
-newer<參考檔案或目錄> | 查詢其更改時間較指定檔案或目錄的更改時間更接近現在的檔案或目錄 |
2.用途:在指定目錄下,可通過檔案型別、檔名、檔案屬性等進行查詢。若不設定任何引數,則將在當前目錄下查詢子目錄與檔案,並將查詢到的子目錄和檔案全部進行顯示。
3.特點:精準細緻
4.例項
1)列出所有長度為零的檔案:find . -empty
2)否定引數
找出 /home 下不是以 .txt 結尾的檔案:find /home ! -name "*.txt"
3)根據檔案許可權/所有權進行匹配
當前目錄下搜尋出許可權為 777 的檔案:find -perm 777
找出當前目錄使用者 Tom 擁有的所有檔案:find -user Tom
找出當前目錄使用者組 Sunk 擁有的所有檔案:find -group Sunk
4)根據檔案進行匹配列出當前目錄及子目錄下所有檔案和資料夾:find .
在 /home 目錄下查詢以 .txt 結尾的檔名:find /home -name "*.txt"
在 /home 目錄下查詢以 .txt 結尾的檔名,但忽略大小寫:find /home -iname "*.txt"
當前目錄及子目錄下查詢所有以 .txt 和 .pdf 結尾的檔案:find . -name "*.txt" -o -name "*.pdf"
匹配檔案路徑或者檔案:find /usr/ -path "*local*"
注:-o 或者、-a 並且、-not 相反
5)根據檔案型別進行搜尋:find . -type 型別引數
型別引數列表:
f | 普通檔案 |
l | 符號連結文件 |
d | 目錄文件 |
c | 字元裝置文件 |
b | 塊裝置文件 |
s | 套接字文件 |
p | 管道文件 |
當前目錄下搜尋出所有普通檔案:find .-type f
6)根據檔案大小進行匹配:find . -type f -size 檔案大小單元
檔案大小單元:
b | 塊(512位元組) |
c | 位元組 |
w | 字(2位元組) |
k | 千位元組 |
M | 兆位元組 |
G | 吉位元組 |
搜尋大於10KB的檔案:find . -type f -size +10k
搜尋小於10KB的檔案:find . -type f -size -10k
搜尋等於10KB的檔案:find . -type f -size 10k
7)根據檔案時間戳進行搜尋:find . -type f 時間戳
時間戳:
訪問時間(-atime/天,-amin/分鐘) | 使用者最近一次訪問時間 |
修改時間(-mtime/天,-mmin/分鐘) | 檔案最後一次修改時間 |
變化時間(-ctime/天,-cmin/分鐘) | 檔案資料元(例如許可權等)最後一次修改時間 |
注:以 mtime n為例,n 為數字
- -mtime n:列出在 n 天之前的“一天之內”修改過的檔案
- -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改過的檔案
- -mtime -n:列出在 n 天之內(包含 n 天本身)被修改過的檔案
- -newer file:file 為一個已存在的檔案,列出比 file 還要新的檔名
搜尋最近七天內被訪問過的所有檔案:find . -type f -atime -7
搜尋恰好在七天前被訪問過的所有檔案:find . -type f -atime 7
搜尋超過七天內被訪問過的所有檔案:find . -type f -atime +7
搜尋訪問時間超過10分鐘的所有檔案:find . -type f -amin +10