一、執(zhí)行文件名查找
which(查找‘執(zhí)行文件') //根據(jù)PATH環(huán)境變量所規(guī)范的路徑查詢
which [-a] command //其中參數(shù)-a是指列出找到所有命令,而非只顯示找到的第一個
例如:which ifconfig
![](/d/20211016/037ca11bd6b123226fad5e4ff7f8118a.gif)
二、文件名的查找
1、whereis(尋找特定文件)
whereis [-bmsu] filename/directoryname
-b :只找二進(jìn)制的文件
-m :只找在說明文件manual路徑下的文件
-s :只找source源文件
-u :查找不在上面三個規(guī)定下的特殊文件
例如:whereis ifconfig
![](/d/20211016/7971ffe22448e3cde4373be4fe116f40.gif)
2、locate
依賴于事先構(gòu)建好的索引庫,查找速度快;
用法:locate [-ir] keyword
-i : 忽略大小寫的差異
-r : 后面可接正則表達(dá)式的顯示防方式
例如:locate ifconfig
說明:lcoate是根據(jù)/var/lib/mlocate內(nèi)記錄數(shù)據(jù)查找,而數(shù)據(jù)來源通過更新數(shù)據(jù)庫updatedb根據(jù)/etc/updatedb.config的配置從硬盤獲取數(shù)據(jù)更新到/var/lib/mlocate;
注意:whereis和locate命令可能搜索到已經(jīng)刪除的文件,原因數(shù)據(jù)庫沒及時更新(一般一天更新一次),不過可以手動執(zhí)行updatedb更新。
安裝locate:
yum -y install mlocate
查看包:
yum search mlocate
安裝好更新數(shù)據(jù)庫該命令才生效:
直接執(zhí)行updatedb即可
![](/d/20211016/813e1db110d8754bc743a44ee1a7fc1c.gif)
![](/d/20211016/a479c17f5327641de30470d08dd41faf.gif)
3、find
實時查找工具,通過遍歷指定目錄下的文件系統(tǒng)層級結(jié)構(gòu)完成文件查找;
工作特性:
查找速度略慢;
精確查找;
實時查找;
用法:
find [option] [PATH] [查找條件] [action]
查找條件:指定查找標(biāo)準(zhǔn),可以根據(jù)文件名、大小、類型、從屬關(guān)系、權(quán)限等標(biāo)準(zhǔn)進(jìn)行;
action:對符合查找條件的文件作出操作,例如刪除操作;
查找條件:
1)根據(jù)時間查詢
以‘天'為單位:
-atime、-ctime、-mtime
以mtime為列
-mtime n :n為數(shù)字,在n天前的‘一天之內(nèi)'被改過的文件;
-mtime -n :n天內(nèi)(包含第n天),修改過的文件;
-mtime +n :n天前(不包含第n天),修改過的文件;
以‘分'為單位:
-amin、-mmin、-cmin
說明:時間的計算從現(xiàn)在開始以24小時為一天來計算,如下圖所示:
![](/d/20211016/ae6a9abc605e575242b5df28bb4f8c7d.gif)
2)根據(jù)用戶和用戶組來查詢
-uid n:其中n即指定屬主的UID,在/etc/passwd可以查看;
-gid n:其中n即指定屬組的GID,在/etc/group可以查看
-user name: 查找屬主為name的文件;
-group name:查找屬組為name的文件;
-nouser:查找/etc/passwd中沒得屬主的文件;
-nogroup:查找/etc/group中沒得屬組的文件;
例如:find /home -user legayu
![](/d/20211016/2437790dba6c9c0564e8d1f84440a905.gif)
![](/d/20211016/8033e61f48d211f21953a937218a57eb.gif)
3)根據(jù)文件名和文件權(quán)限查找
-name ‘pattern':查找文件;
-iname ‘pattern':同-name,但忽略查找的文件大小寫;
支持glob通配符*,?,[],[^];
-type TYPE:查找文件類型為TYPE的文件,常見的文件類型有正規(guī)文件(f)、設(shè)備文件(b、c)、目錄(d)、連接文件(l)、socket(s)、及FIFO文件(p)等屬性;
-size [+-]SIZE:查找比SIZE還大(+)或還?。?)的文件,大小規(guī)格:c:代表byte,k:代表1024byte,還可用M、G表示:MB和GB,如查找大于50kB的文件:-size +50k
-perm mode:查找文件權(quán)限“剛好等于”mode的文件;
-perm -mode:查找文件權(quán)限“必須包含全部”mode的文件;
-perm /mode:查找文件權(quán)限“包含任一”mode的文件;
例如:find / -name passwd
![](/d/20211016/24596d22991f4e25ee6299ed60d09e4b.gif)
![](/d/20211016/1a00d1ef6e1ea6c6581dad2f81ef593c.gif)
4)組合邏輯
與:-a
或:-o
非:-not,!
說明:邏輯關(guān)系拆分與合并
!A -a !B = !(A -o B)
!A -o !B = !(A -a B )
例如:
查找/tmp中非root用戶的文件
兩種方法:
find /tmp -not -user root -ls
find /tmp -not -uid 0 -ls
找出/tmp目錄下屬主為非root,而且文件名不包含fstab字符串的文件
![](/d/20211016/b58cc36beac40cba2a0d969f38659e51.gif)
5)find特殊功能
對查詢的結(jié)果做操作
-print:輸出至標(biāo)準(zhǔn)輸出;默認(rèn)的動作;
-ls:類似于對查找到的文件執(zhí)行“l(fā)s -l”命令,輸出文件的詳細(xì)信息,這里不可以使用‘ll'別名;
-delete:刪除查找到的文件;
-fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;
-ok COMMAND {} \; :對查找到的每個文件執(zhí)行由COMMAND表示的命令;每次操作都由用戶進(jìn)行確認(rèn);
-exec COMMAND {} \; :對查找到的每個文件執(zhí)行由COMMAND表示的命令;
注意:find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令;
但是有些命令不能接受過長的參數(shù),此時命令執(zhí)行會失??;
另一種方式可規(guī)避此問題:
即find | xargs COMMAND
如:find /root -perm +644 -exec ls -l {} \;
說明:其中的{}指find查找到的內(nèi)容,‘\;'代表結(jié)束符‘\'是轉(zhuǎn)義符
舉例:
查找/etc目錄下所有用戶都沒有寫權(quán)限的文件;
~]# find /etc -not -perm /222 -type f -ls
說明:所有用戶至少有一個寫的權(quán)限,則取反就是都沒有寫權(quán)
查找/etc目錄至少有一類用戶沒有執(zhí)行權(quán)限的文件;
~]# find /etc -not -perm -111 -type f -ls
說明:至少有一類用戶沒有執(zhí)行權(quán)限就是都有執(zhí)行權(quán)限的取反
![](/d/20211016/0cd95a92bb4c1d29f091c85086b37e79.gif)
以上所述是小編給大家介紹的了Linux命令與文件查找詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!