linux之find命令,Linux基础知识之find命令详解
在運(yùn)維人員操作系統(tǒng)時,要接觸大量的文件,為了避免忘記文件存放位置的尷尬,就需要我們有一種文件查找工具的幫忙,下面是兩個文件查找工具的詳解,locate以及find,分別分享給大家。
第一款工具: Locate
locate - find files by name
locate的工作依賴于事先構(gòu)建好的索引庫;查找文件時,直接搜索索引庫里記載的文件的位置;
索引庫的構(gòu)建:
系統(tǒng)自動實現(xiàn)(周期性任務(wù));
手動更新數(shù)據(jù)庫(updatedb),但是索引構(gòu)建的過程需要遍歷整個文件系統(tǒng),極其耗費系統(tǒng)資源;
updatedb - update a database for mlocate;
工作特性:
查詢速度快,但不一定精確,無法匹配到數(shù)據(jù)庫創(chuàng)建后的創(chuàng)建文件;
非實時查找,不能實時反饋當(dāng)前文件系統(tǒng)上的文件狀態(tài) ;
使用方法:
locate [OPTIONS] FILE..
選項:
-c:統(tǒng)計查找結(jié)果的數(shù)量
-b:只匹配路徑中的基名
-r:基于基本正則表達(dá)式寫匹配模式
第二款工具:Find
find:find - search for files in a directory hierarchy
工作方式:通過遍歷指定起始路徑下文件系統(tǒng)層級結(jié)構(gòu)完成文件查找;
工作特性:
查找速度慢;
精確查找;
實時查找;
使用方法:
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
fing [OPTIONS] [查找起始路徑] [查找條件] [處理動作]
查找起始路徑:指定具體搜索目標(biāo)起始路徑;默認(rèn)當(dāng)前目錄;
查找條件:指定的查找標(biāo)準(zhǔn),可以根據(jù)文件名,大小,類型,從屬關(guān)系,權(quán)限等標(biāo)準(zhǔn),默認(rèn)為指定目錄下的所有條件
處理動作:對符合條件的文件作出的操作,例如刪除等操作,默認(rèn)為輸出至標(biāo)準(zhǔn)輸出
查找條件說明:
以表達(dá)式的形式,包含選項和測試條件
測試:結(jié)果通常為布爾型數(shù)據(jù)("true""fales")
(1)根據(jù)文件名查找 注意:支持glob風(fēng)格的通配符
-name "pattern":區(qū)分大小寫
-iname "pattern":不區(qū)分名字的大小寫,
-regex "patten":基于正則表達(dá)式模式查找文件,匹配是整個路徑 ,而非其名;
(2)根據(jù)文件從屬關(guān)系查找
-user username:查找屬主指定用戶的所有文件;
-group groupname:查找屬組指定用戶的所有文件;
-uid UID:查找屬主指定UID的所有文件;
-gid GID:查找屬組指定GID的所有文件;#find /etc ?-gid 5000
-nouser:查找沒有屬主的文件 ? ? ? ? ? ? ? ? ? ? #find /etc ?-nouser
-ngroup:查找沒有屬組的文件#find /etc ?-nogroup
(3)根據(jù)文件類型查找
-trpe TYPE: 組合動作-ls使用,查看文件的詳細(xì)信息
f:普通文件
d:目錄
l:鏈接文件
b:塊設(shè)備文件
c:字符設(shè)備文件
s:套接字文件
p:管道文件
組合測試:
與: -a 默認(rèn)組合操作邏輯: ?二者同時成立
或: -o ?符合其中一項即可
非:-not 或"!" ?取反
!A -a !B=!(A -o B)
!A -o !B=!(A -a B)
練習(xí): 找出/etc/下 屬主非root的文件,且文件名中不包含fstab
(4)根據(jù)文件大小查找
-siza[+|-]#UNIT:常用單位:k,m,g
#UNIT: (#-1,#] ? ? 等于數(shù)字
-#UNIT:[0,#-1)? ?小于數(shù)字
+#UNIT:(#,00)? ? 大于數(shù)字
-empty:查找空文件。
(5)根據(jù)時間戳查找
以天為單位
-atime ? [+|-]# : [#,#-1]
-mtime
-ctime
以分鐘為單位
-amin
-mmin
-cmin
(6)根據(jù)權(quán)限查找
-perm [/|-]mode:
mode:精確查找 -perm -664?文件權(quán)限正好符合mode(mode為文件權(quán)限的八進(jìn)制表示)。
/mode:任何一類用戶(u,g,o)權(quán)限中的任何一位(rwx)符合條件即滿足 ?文件權(quán)限部分符合mode
9位權(quán)限之間存在"或"關(guān)系
-mode:每一類用戶(u,g,o)的權(quán)限中的每一位(e,w,x)同時符合條件即滿足;
9位權(quán)限之間存在"與"關(guān)系文件權(quán)限完全符合mode。
處理動作
-print:輸出至標(biāo)準(zhǔn)輸出,默認(rèn)的動作
-ls:類似于對查找到的文件執(zhí)行"ls -l"命令,輸出文件的詳細(xì)信息.
-delete:刪除查找到的文件;
-fls /path/to/SomeFIle:把查找到的所有文件的長格式信息保存至指定文件中
-ok COMMAND {} \; ?:對查找的每個文件執(zhí)行有COMMAND表示的命令;每次操作都有用戶進(jìn)行確認(rèn);
-exec COMMAND {} \; :對查找的每個文件執(zhí)行有COMMAND表示的命令;
注意: find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令;
但是有些命令不能接受過長的參數(shù),此時命令執(zhí)行會失敗;另一種方式可規(guī)避此問題.
find | xargs COMMAND ? ? ? 學(xué)習(xí)xargs命令
xargs命令:該命令的主要功能是從輸入中構(gòu)建和執(zhí)行shell命令。在使用find命令的-exec選項處理匹配到的文件時, ? find命令將所有匹配到的文件一起傳遞給exec執(zhí)行。但有些系統(tǒng)對能夠���遞給exec的命令長度有限制,這樣在find命令運(yùn)行幾分鐘之后,就會出現(xiàn) 溢出錯誤。錯誤信息通常是“參數(shù)列太長”或“參數(shù)列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。在有些系統(tǒng)中,使用-exec選項會為處理每一個匹配到的文件而發(fā)起一個相應(yīng)的進(jìn)程,并非將匹配到的文件全部作為參數(shù)一次執(zhí)行;這樣在有些情況下就會出現(xiàn)進(jìn)程過多,系統(tǒng)性能下降的問題,因而效率不高;而使用xargs命令則只有一個進(jìn)程。另外,在使用xargs命令時,究竟是一次獲取所有的參數(shù),還是分批取得參數(shù),以及每一次獲取參數(shù)的數(shù)目都會根據(jù)該命令的選項及系統(tǒng)內(nèi)核中相應(yīng)的可調(diào)參數(shù)來確定。#查找當(dāng)前目錄下的每一個普通文件,然后使用xargs命令來測試它們分別屬于哪類文件。
#回收當(dāng)前目錄下所有普通文件的執(zhí)行權(quán)限。
#在當(dāng)面目錄下查找所有普通文件,并用grep命令在搜索到的文件中查找hostname這個詞
練習(xí):
1.查找/var/目錄下屬主為root,且數(shù)組為mall的所有文件或目錄;
2.查找/usr目錄下不屬于root,bin,或Hadoop的所有文件或目錄,用兩種方法
[root@linuxidc ~]# find /usr/ -not\( -user root -o -user bin -o -user hadoop\)
[root@linuxidc ~]# find /usr/ -not -user root -a -not -user bin -a not -usr hadoop
3.查找/etc/目錄下最近一周內(nèi)其文件修改過,且屬主不是root用戶也不是hadoop用戶的文件或目錄
4.查找當(dāng)前系統(tǒng)上沒有屬主或?qū)俳M,且最近一周內(nèi)曾被訪問的文件或目錄
5,查找/etc/目錄下大于1M且類型為普通文件的所有文件
6,查找/etc/目錄下所有用戶都沒有寫權(quán)限的文件
7.查找/etc/目錄下至少有一類用戶沒有執(zhí)行權(quán)限的文件
8.查找/etc/init.d目錄下,所有用戶都有執(zhí)行權(quán)限,且其他用戶有寫權(quán)限的所有文件.
總結(jié)
以上是生活随笔為你收集整理的linux之find命令,Linux基础知识之find命令详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把linux制作成内存系统,把内存当硬盘
- 下一篇: linux编译安装madam,linux