??我們經(jīng)常需要在系統(tǒng)中查找一個文件或者命令,那么在Linux系統(tǒng)中如何快速定位和精確查找它呢?下面總結(jié)了五個基礎(chǔ)命令·分別是which、whereis、type、locate、find。
一 which
??which命令用于查找并顯示給定命令的絕對路徑,環(huán)境變量PATH中保存了查找命令時需要遍歷的目錄。which指令會在環(huán)境變量$PATH設(shè)置的目錄里查找符合條件的文件。也就是說,使用which命令,就可以看到某個系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個位置的命令。
語法
which [options] [arguments]
選項
-n<文件名長度>:制定文件名長度,指定的長度必須大于或等于所有文件中最長的文件名;
-p<文件名長度>:與-n參數(shù)相同,但此處的<文件名長度>包含了文件的路徑;
-w:指定輸出時欄位的寬度;
-V:顯示版本信息。
參數(shù)
指令名:指令名列表。
二 whereis
??whereis命令首先會去掉filename中的前綴空格和以.開頭的任何字符,然后再在數(shù)據(jù)庫(var/lib/slocate/slocate.db)中查找與上述處理后的filename相匹配的二進制文件、源文件和幫助手冊文件,使用之前可以使用updatedb命令手動更新數(shù)據(jù)庫。
語法
whereis [options] [arguments]
選項
-b:只查找二進制文件;
-B<目錄>:只在設(shè)置的目錄下查找二進制文件;
-f:不顯示文件名前的路徑名稱;
-m:只查找說明文件;
-M<目錄>:只在設(shè)置的目錄下查找說明文件;
-s:只查找原始代碼文件;
-S<目錄>只在設(shè)置的目錄下查找原始代碼文件;
-u:查找不包含指定類型的文件。
參數(shù)
指令名:要查找的二進制程序、源文件和man手冊頁的指令名。
三 type
??type命令用來顯示指定命令的類型,判斷給出的指令是內(nèi)部指令還是外部指令。
命令類型:
alias:別名。
keyword:關(guān)鍵字,Shell保留字。
function:函數(shù),Shell函數(shù)。
builtin:內(nèi)建命令,Shell內(nèi)建命令。
file:文件,磁盤文件,外部命令。
unfound:沒有找到。
語法
type [options] [arguments]
選項
-t:輸出“file”、“alias”或者“builtin”,分別表示給定的指令為“外部指令”、“命令別名”或者“內(nèi)部指令”;
-p:如果給出的指令為外部指令,則顯示其絕對路徑;
-a:在環(huán)境變量“PATH”指定的路徑中,顯示給定指令的信息,包括命令別名。
參數(shù)
指令:要顯示類型的指令。
四 locate
??locates是查詢系統(tǒng)上預(yù)建的文建索引數(shù)據(jù)庫(/var/lib/mlocate/mlocate.db)依賴實現(xiàn)構(gòu)建的索引。索引的構(gòu)建是在系統(tǒng)較為空閑時自動進行(周期性任務(wù)),管理員手動更新數(shù)據(jù)庫(updatedb)索引構(gòu)建過程需要遍歷整個根文件系統(tǒng),極消耗資源.
工作特點:
查找速度快
模糊查找
非實時查找
搜索的是文件的全路徑,不僅僅是文件名
可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄
選項
-i 不區(qū)分大小寫搜索
-n 只列舉前N個匹配項目
參數(shù)
查找字符串:要查找的文件名中含有的字符串。
五 find
??find命令用來在指定目錄下查找文件。任何位于參數(shù)之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設(shè)置任何參數(shù),則find命令將在當(dāng)前目錄下查找子目錄與文件。并且將查找到的子目錄和文件全部進行顯示。
實時查找工具,通過遍歷指定的路徑完成文件查找
工作特點:
查找速度略慢
精確查找
實時查找
可能只搜索用戶具備讀取和執(zhí)行權(quán)限的目錄
選項
查找條件
1.只搜索層級
-maxdepth level 最大搜索目錄深度,指定目錄為第一級
-mindepth level最大搜索目錄深度
根據(jù)文件名和inode查找:
-name "文件名稱“:支持使用glob
*,?,[],[^]
-iname "文件名稱“:不區(qū)分字母大小寫
-inum n 按inode相同的inode號的文件
isamefile name 相同inode號的文件
-links n 鏈接數(shù)為n的文件
-regex "PATTERN": 以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
更具屬主屬組查找:
-user USERNAME:查找屬主為指定用戶(UID)的文件
-group GREPNAME:查找屬組為指定組(GID)的文件
-uid UserID:查找屬主為指定的UID號的文件
-gid GroupID: 查找屬主為指定的GID號的文件
-nouser:查找沒有屬主的文件
-nogroup:查找沒有屬組的文件
2.根據(jù)文件類型查找:
-type TYPE
f:普通文件
d:目錄文件
l:符號鏈接文件
s:套接字文件
b:塊文件
c:字符設(shè)備文件
p:管道文件
組合條件:
與:-a
或:-o
非:-not,!
德.摩根定律
(非A) 或 (非B)= 非(A且B)
(非A) 且 (非B)= 非(A或B)
3.根據(jù)文件大小來查找:
-size [+|-] #UNIT
#UNIT:(#-1,#)
-#UNIT:(0,#-1)
+#UNIT:(#,∞)
根據(jù)時間戳:
以“天”為單位:
-atime[+|-]#
#:[#,#+1]
+#:[#+1,,∞]
-#:[0,#]
-ctime
-mtime
以“分鐘”為單位:
-amin
-mmin
-cmin
根據(jù)權(quán)限查找:
-perm[/|-]MODE
MODE:精確權(quán)限匹配
/MODE:任何一類(u,g,o)對象的權(quán)限中只要能一位匹配即可,或關(guān)系,+從centos7開始淘汰
-MODE:每一類對象都必須同時擁有指定權(quán)限,與關(guān)系
O 表示不關(guān)注
處理動作
1. -print:默認(rèn)的處理動作,顯示至屏幕
2. -ls:類似對于查到的文件執(zhí)行"ls -l"命令
3. -delete:刪除查找到的文件
4. -fls file:查找到的所文件的長格式信息保存至指定文件中
5. -ok COMAND{} \;對查找到的每個文件執(zhí)行由COMMAND制定的命令,對于每個文件執(zhí)行命令之前,都會交互式要求用戶確認(rèn)
6. -exec COMMAND {} \;對查找到的每個文件執(zhí)行由COMMAND指定的命令
7. {}:用于應(yīng)用查找到的文件名稱自身
8. find傳遞查找到的文件至后面指定的命令時,查找到所有符合條件的文件一次性傳遞給后面的命令
參數(shù)替換xargs
1. 由于很多命令不支持管道|來傳遞參數(shù),而正常工作中有這個必要,所以就有了xargs命令
2. xargs用于產(chǎn)生某個命令參數(shù),xargs可以讀入stdin的數(shù)據(jù),并且以空格符或回車符將stdin的數(shù)據(jù)分隔成為arguments
3. 注意:文件名或者是其他異議的名詞內(nèi)含有空格符的情況
4. 有些命令不能接受過多參數(shù),命令執(zhí)行可能會失敗,xargs可以解決
find和xargs格式:find | xargs COMMAND
參數(shù)
起始目錄:查找文件的起始目錄。
六 命令比較
總結(jié)
??到目前為止,查找命令也學(xué)了不少了,為了自己對這些命令不產(chǎn)生混淆以此篇博客理清一下。
|