Linux 常用命令之——檔案搜尋命令find、locate、which、whereis、grep
一、命令名稱:find
命令所在路徑:/bin/find
執行許可權:所有使用者
語法: find [搜尋範圍] [匹配條件]
$find /etc -name init -name 在某路徑下根據檔名稱搜尋檔案
$find /etc -iname ?init* -iname 在某路徑下根據根據檔名稱不區分大小寫模糊搜尋
$find /etc -size 204800 -size 或者 +size 表示檔案大小小於或大於多少的檔案,去掉 + -表示精確查詢檔案大寫為多大的檔案
$find /etc -cmin -5 -cmin 檔案屬性change 查詢距現在不超過5分鐘內檔案屬性被修改的檔案
$find /etc -amin -5 -amin 訪問時間access 查詢距現在訪問時間不超過5分鐘的檔案
$find /etc -mmin -5 -mmin 檔案內容modify 查詢距現在訪問時間不超過5分鐘檔案內容被修改的檔案
功能描述:檔案搜尋
最常用的選項操作範例:
1、根據檔案或目錄名稱搜尋(精確搜尋和模糊匹配搜尋)
$ find /etc -name init 在目錄/etc中查詢檔案init
注:如果只知道檔名稱的部分,可以通過佔位符的方式進行拼接搜尋,規則為:
* 號表示匹配任意個字元
?號表示匹配單個字元
例如:
1) $ find /etc -name *init* 表示在目錄/etc中查詢檔名稱 含有init 的檔案
2) $ find /etc -name init* 表示在目錄/etc中查詢檔名稱 以init 開頭的檔案
3) $find /etc -name init? 表示在目錄中查詢檔名稱以 init開頭,且後面跟一個字元(或者說五個字元,前四個字元是init) 的檔案
4) $ find /etc -name ?init 表示在目錄/etc中查詢檔名稱以 init結尾的檔案
2、根據檔名或目錄,不區分檔名稱中大小寫進行搜尋
$find /etc -iname init -iname 不區分檔名稱大小寫
注:如果不確定檔案的大小寫,可以用 -iname 選項代替-name
例項:
1) $ find /etc -iname init 會查找出/etc目錄中 檔名稱為init的檔案或者 INIT 檔案或者 Init檔案等等
3、根據檔案大小進行搜尋
$find / -size +n 在根目錄下查詢大於n資料塊個單位大小的檔案
+n 大於 -n 小於 n等於
特別注意: 這裡的n表示的是一個數字,單位是資料塊,資料塊和平常普通看到的檔案大小的單位位元組有所區別,
資料塊和位元組以及kb的換算關係為: 1個數據塊 = 512位元組 =0.5k
例項:
1) $ find / -size +204800 這裡表示在根目錄下搜尋檔案大小大於100MB的檔案
2) $ find /etc -size -163840 -a -size -204800 在/etc下查詢大於80MB 小於100MB的檔案
特別補充!!!: -a 選項表示兩個條件同時滿足,a可理解為and
-o 選項表示兩個條件滿足任意一個即可,o可理解為or
3) $ find /etc -name inittab -exec ls -l {} \; 在/etc 下查詢inittab檔案並顯示其詳細資訊
特別補充!!!: -exec/-ok 命令 {} \; 對搜尋結果執行操作
特別注意連線符-exec 表示執行完前面命令後繼續執行後面的命令
-ok 表示執行完前面的命令結束後,系統會詢問是否執行後面的命令
上述命令特別注意後面的 大括號符號和反斜槓以及分號結尾符,該符號為固定內容
例如:$ find /home -usr shenchao -ok rm {} \; 表示將/home目錄下所有者為shenchao的所有檔案刪除,刪除前提醒是否刪除確認
4、根據檔案或目錄所有者(一般為檔案或目錄的建立者)搜尋
$find /home -usr shenchao 在根目錄下查詢所有者為shenchao的檔案
5、根據檔案或目錄的所屬組進行搜尋
$find /home -group meinv 在根目錄下查詢使用者組為meinv組的檔案
6、查詢某個時間段內或外被修改過屬性或者內容的檔案:
例項:
1)$ find /etc -cmin -5 查詢/etc目錄中距現在5分鐘內檔案屬性被修改過的檔案
2) $ find /etc -amin -10 查詢/etc目錄中距現在10分鐘內被訪問過的檔案
3) $ find /etc -mmin -30 查詢/etc目錄中距現在30分鐘內檔案內容被修改過的檔案
7、根據檔案型別進行查詢,檔案型別包括: 檔案- f ; 目錄-d ; 軟連結檔案-l
例項:
1) $ find /etc -name init* -a -type d 表示查找出/etc目錄下名稱以init開頭 並且 檔案型別為目錄的 所有目錄
2)$ find /etc -name init* -a -type f 表示查找出/etc目錄下名稱以init 開頭 並且 檔案型別為檔案的 所有檔案
8、根據檔案i節點進行查詢
例項;
1)$ find . -inum 31531 -exec rm {} \; 表示在當前目錄下查詢並刪除i節點為31531開始的檔案
2)如何確定一個檔案是否有硬連結?
方法步驟: 先查詢該檔案的屬性資訊,確定該檔案的 i 節點,然後在該檔案所在的分割槽,搜尋 i 節點為該數字的檔案
所用原理: 一個檔案的硬連結和檔案本身一定在同一個分割槽內
命令:
其他檔案搜尋命令
二、檔案搜尋命令:locate
命令名稱:locate
命令所在路徑:/usr/bin/locate
執行許可權:所有使用者
語法:locate 檔名
功能描述:在檔案資料庫中查詢檔案,不是實時檔案
範例:$ locate inittab
搜尋快的原因:該命令直接搜尋自己的檔案庫,而不是像其他搜尋某個磁碟
locate命令的缺點:非實時查詢命令;可以使用updatedb命令強制更新資料庫,以使用locate搜尋命令
對部分目錄中的檔案不進行收錄,比如/tmp
以上命令類似於windows中的工具everything
三、更精確的檔案搜尋命令:which
命令名稱:which
命令所在路徑:/usr/bin/which
執行許可權:所有使用者
語法:which 命令
功能描述:搜尋命令所在目錄及別名資訊,通過獲取命令所在路徑,可基本判斷該命令的使用許可權範圍,比如,在sbin目錄下的,說明只有root使用者才有許可權使用;
範例: $ which ls
$which cp
$ which rm
四、更精確的檔案搜尋命令:whereis
命令名稱;whereis
命令所在路徑:/usr/bin/whereis
執行許可權:所有使用者
語法:whereis [命令名稱]
功能描述:搜尋命令所在目錄及幫助文件路徑
範例:$ whereis ls
注意:which 和whereis 命令是用於搜尋 命令 所在路徑的資訊,which可查詢命令的路徑和別名資訊,whereis命令可查詢命令的路徑和幫助文件所在的路徑。通過路徑是否在/sbin目錄下,可確認是否只有root許可權可用。通過幫助文件路徑,可以幫助查詢該命令更多資訊
五、檔案搜尋命令:grep
命令名稱:grep
命令所在路徑:/bin/grep
執行許可權:所有使用者
語法:grep -iv [指定字串] [檔案]
-i 不區分大小寫
-v 排除指定字串
功能描述:在檔案中搜尋字串的行並輸出,搜尋某個檔案內的某些字串所在一行的資訊
範例:# grep mysql /root/install.log 表示查詢/root目錄下,install.log檔案中 myssql 字串所在行資訊
注意:該命令也被稱為檔案搜尋命令,但是該命令與find which whereis等命令不同,
以上命令是在Linux系統中,查詢某個檔案的屬性等資訊,是為了找到檔案,而grep命令
是為了在某個確定的檔案中查詢某些字串等的資訊。
即 find locate 用於在大量目錄中查詢某個檔案
而 which whereis 用於在大量目錄中查詢某個命令的路徑
而 grep 用於在某個檔案中搜索某個字串
總結:-i 不區分大小寫的選項在 find locate grep等多個命令中作用共通
在Linux很多配置檔案中,有很多的# 開頭的行,表示註釋資訊