Shell查找命令find和grep的具體使用
第一節(jié) 文件查找之find命令
語(yǔ)法格式:find [路徑] [選項(xiàng)] [操作]
常用選項(xiàng)
# - name 查找/etc目錄下以conf結(jié)尾的文件 區(qū)分大小寫(xiě) find /etc -name '*conf' # -iname 查找當(dāng)前目錄下文件名為aa的文件,不區(qū)分大小寫(xiě) find . -iname aa # -user 查找文件屬主為hdfs的所有文件 find . -user hdfs # -group 查找文件屬組為yarn的所有文件 find . -group yarn # -type # f 文件 find . -type f # d 目錄 find . -type d # c 字符設(shè)備文件 find . -type c # b 塊設(shè)備文件 find . -type b # l 鏈接文件 find . -type 1 # 管道文件 find . -type p # -size # -n 大小小于n的文件 # +n 大小大于n的文件 # n 大小等于n的文件 # 例子1:查找/etc目錄下小于1000字節(jié)的文件 find /etc -size -10000c # 例子2:查找/etc目錄下大于1M的文件 find /etc -size +1M # -mtime # -n天以?xún)?nèi)修改的文件 # +n n天以外修改的文件 # n 正好n天修改的文件 # 例子1:查找/etc目錄下5天之內(nèi)修改且以conf結(jié)尾的文件 find /etc -mtime -5 -name '*.conf' # 例子2:查找/etc目錄下10天之前修改且屬主為root的文件 find /etc -mtime +10 -user root # -mmin # -n n分鐘以?xún)?nèi)修改的文件 # +n n分鐘以外修改的文件 # 例子1:查找/etc目錄下30分鐘之前修改的文件 find /etc -mmin +30 # 例子2:查找/etc目錄下30分鐘之內(nèi)修改的目錄 find /etc -mnin -30 -type d # -mindepth n 表示從n級(jí)子目錄開(kāi)始搜索 # 例子:在/etc下的3級(jí)子目錄開(kāi)始搜索 find /etc -mindepth 3 # -maxdepth n 表示最多搜索到n-1級(jí)子目錄 # 例子1:在/etc下搜索符合條件的文件,但最多搜索到2級(jí)子目錄 find /etc -maxdepth 3 -name '*.conf' # 例子2: find ./etc/ -type f -name '*.conf' -size +10k -maxdepth 2
了解選項(xiàng)
# -nouser 查找沒(méi)有屬主的用戶(hù) find . -type f -nouser # -nogroup 查找沒(méi)有屬組的用戶(hù) find . -type f -nogroup # -perm 根據(jù)權(quán)限查找 find . -perm 664 # -prune 通常和-path一起使用,用于將特定目錄排除在搜索條件之外 # 例子1:查找當(dāng)前目錄下所有普通文件,但排除etc目錄 find . -path ./etc -prune -o -type f # 例子2:查找當(dāng)前目錄下所有普通文件,但排除etc和opt目錄 find . -path ./etc -prune -o -path ./opt -prune -o -type f # 例子3:查找當(dāng)前目錄下所有普通文件,但排除etc和opt目錄,但屬主為hdfs find . -path ./etc -prune -o -path ./opt -prune -o type f -a -user hdfs # 例子4:查找當(dāng)前目錄下所有普通文件,但排除etc和opt目錄,但屬主為hdfs,且文件大小必須大于500字 find . -path ./etc -prune -o -path ./opt -prune -o -type f -a -user hdfs -a -size +500c # -newer file1 比f(wàn)ile1新的文件 find /etc -newer a
對(duì)查找到的文件操作
# -print 打印輸出 # -exec 對(duì)搜索到的文件執(zhí)行特定的操作,格式為-exec 'command'{} \; # {} 表示前面搜索到的結(jié)果 固定寫(xiě)法{} \ # 例子1:搜索/etc下的文件(非目錄),文件名以conf結(jié)尾且大于10k,然后將其刪除 find ./etc/ -type f -name '*.conf' -size +10k -exec rm -f {} \; # 例子2:將/var/1og/目錄下以1og結(jié)尾的文件,且更改時(shí)間在7天以上的刪除 find /var/log/ -name '*.1og' -mtime +7 -exec rm -rf {} \; # 例子3:搜索條件和例子1一樣,只是不刪除,而是將其復(fù)制到/root/conf目錄下 find ./etc/ -size +10k -type f -name '*.conf' -exec cp {} /root/conf/ \; # -ok 和exec功能一樣,只是每次操作都會(huì)給用戶(hù)提示 # 邏輯運(yùn)算符: # -a 與 # -o 或 # -not|! 非 # 例子1:查找當(dāng)前目錄下,屬主不是hdfs的所有文件 find . -not -user hdfs | find .! -user hdfs # 例子2:查找當(dāng)前目錄下,屬主屬于hdfs,且大小大于300字節(jié)的文件 find . -type f -a -user hdfs -a -size +300c # 例子3:查找當(dāng)前目錄下的屬主為hdfs或者以xm1結(jié)尾的普通文件 find . -type f -a \( -user hdfs -o -name '*.xml')
第二節(jié) find、locate、whereis和which總結(jié)
locate命令介紹:
- 文件查找命令,所屬軟件包mlocate
- 不同于find命令是在整塊磁盤(pán)中搜索,locate命令在數(shù)據(jù)庫(kù)文件中查找
- find就會(huì)很影響IO性能,locate會(huì)歸檔到數(shù)據(jù)庫(kù)中,文件查找就會(huì)很快。
- find是默認(rèn)全部匹配,locate則是默認(rèn)部分匹配
通過(guò)updatedb命令及時(shí)更新locate命令的數(shù)據(jù)庫(kù),做到及時(shí)查到,否則就要等到它自動(dòng)歸檔到數(shù)據(jù)庫(kù)中。
yum -y install mlocate # 用戶(hù)更新/var/lib/mlocate/mlocate.db # 所使用配置文件/etc/updatedb.conf # 該命令在后臺(tái)cron計(jì)劃任務(wù)中定期執(zhí)行 updatedb # 會(huì)遍歷整個(gè)文件系統(tǒng) 會(huì)比較慢 locate my.cnf
whereis
- -b 只返回二進(jìn)制文件
- -m 只返回幫助文檔文件
- -s 只返回源代碼文件
whereis mysql whereis -b mysql whereis -m mysql
which 作用∶僅查找二進(jìn)制程序文件
-b 只返回二進(jìn)制文件
which mysql
第三節(jié) grep和egrep
第一種形式: grep [option] [pattern] [file1,file2...]
第二種形式:command \ grep [option] [pattern]
# 必須掌握的選項(xiàng): # -v 最示不匹配pattern的行 排除包含字符的內(nèi)容 # -i 搜索時(shí)忽略大小寫(xiě) # -n 顯示行號(hào) # -E 支持?jǐn)U展的正則表達(dá)式 # -F 不支持正則表達(dá)式,按字符串的字面意思進(jìn)行匹配 # -r 遞歸搜索 # file i love python .lovelove python lovelove LOVE PYTHON Love pYtHoN grep python file # file文件包含python的行 grep -v python file # file文件不包括python的文件 grep -iv python file # file文件不包括python的文件 忽略大小寫(xiě) grep -n python file # file文件包含python的行 并顯示行號(hào) # 下面的|就是拓展正則表達(dá)式 grep "python | PYTHON" file grep -E "python | PYTHON" file # -F 不支持正則表達(dá)式,按字符串的字面意思進(jìn)行匹配 grep "py.*" file grep -F "py.*" file # 需了解的選項(xiàng): # -c 只輸出匹配行的數(shù)量,不顯示具體內(nèi)容 # -w 匹配整詞 # -x 匹配整行 # -l 只列出匹配的文件名,不顯示具體匹配行內(nèi)容 grep -c python file grep -w love file grep -x "i love python" file
grep和egrep:
- grep默認(rèn)不支持?jǐn)U展正則表達(dá)式,只支持基礎(chǔ)正則表達(dá)式使用
- grep -E可以支持?jǐn)U展正則表達(dá)式
- 使用egrep可以支持?jǐn)U展正則表達(dá)式,與grep -E等價(jià)
到此這篇關(guān)于 Shell查找命令find和grep的具體使用的文章就介紹到這了,更多相關(guān) Shell查找命令find和grep內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用命令行將json數(shù)據(jù)導(dǎo)出到csv(一行命令搞定)
這篇文章主要為大家介紹了使用命令行將json數(shù)據(jù)導(dǎo)出到csv,一行命令搞定的方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01獲取磁盤(pán)IO與系統(tǒng)負(fù)載Load的shell腳本
本節(jié)介紹的幾段shell腳本,可以用于提取磁盤(pán)的I/O信息,系統(tǒng)負(fù)載Load信息等2013-08-08Shell獲取進(jìn)程PID的實(shí)現(xiàn)
本文主要介紹了Shell獲取進(jìn)程PID的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06linux每天定時(shí)備份數(shù)據(jù)庫(kù)并刪除十天前數(shù)據(jù)詳細(xì)步驟
每天定時(shí)備份數(shù)據(jù)庫(kù)需要用到Linux的定時(shí)任務(wù),利用Linux的crondtab 命令。下面通過(guò)本文給大家?guī)?lái)了linux每天定時(shí)備份數(shù)據(jù)庫(kù)并刪除十天前數(shù)據(jù)詳細(xì)步驟,感興趣的朋友一起看看吧2018-06-06Shell腳本實(shí)現(xiàn)監(jiān)測(cè)文件變化的示例詳解
這篇文章主要和大家分享一個(gè)Shell腳本,可以實(shí)現(xiàn)監(jiān)測(cè)文件變化功能。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-06-06Linux Shell中的特殊符號(hào)和含義簡(jiǎn)明總結(jié)(包含了絕大部份)
這篇文章主要介紹了Linux Shell中的特殊符號(hào)和含義簡(jiǎn)明總結(jié),本文匯總了包含了絕大部份的Shell特殊符號(hào),對(duì)每一個(gè)符號(hào)的作用做了總結(jié),需要的朋友可以參考下2014-06-06shell自動(dòng)拉取鏡像并運(yùn)行容器的shell腳本
本文主要介紹了shell自動(dòng)拉取鏡像并運(yùn)行容器的shell腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06阿里云云服務(wù)器Linux系統(tǒng)更新yum源Shell腳本
這篇文章主要介紹了阿里云云服務(wù)器Linux系統(tǒng)更新yum源Shell腳本,阿里云自建了一個(gè)包含大多數(shù)系統(tǒng)更新的本地yum源,速度快又好用,需要的朋友可以參考下2014-09-09