你的理解基本正確,不過(guò)find會(huì)查找你指定目錄的所有子目錄,就是遞歸查找子目錄里的內(nèi)容。普通用戶(hù)沒(méi)有權(quán)限使用find,你可以執(zhí)行 visudo 命令,里面有一行是
建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁(yè)設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開(kāi)發(fā)技術(shù)和網(wǎng)頁(yè)設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。成都創(chuàng)新互聯(lián)專(zhuān)業(yè)提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站設(shè)計(jì)、電商門(mén)戶(hù)網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶(hù)體驗(yàn)的提升,我們力求做到極致!
root ALL=(ALL)……
你也添加類(lèi)似一行:
youruser ALL=(ALL)……
這樣你這個(gè)用戶(hù)就可以執(zhí)行root的命令了:sudo find ……
root執(zhí)行出來(lái)的應(yīng)該和普通用戶(hù)執(zhí)行出來(lái)的一樣啊,而且肯定root不會(huì)遇到permission deny的搜索結(jié)果。但普通用戶(hù)限于權(quán)限問(wèn)題,搜索有些位置的時(shí)候就會(huì)遇到permission deny的拒絕。
我也剛剛了解不久,期待完善
grep對(duì)匹配結(jié)果取反: grep -v "pattem" file file2。\x0d\x0agrep (縮寫(xiě)來(lái)自Globally search a Regular Expression and Print)是一種強(qiáng)大的文本搜索工具,它能使用正則表達(dá)式搜索文本,并把匹配的行打印出來(lái)。Unix的grep家族包括grep、egrep和fgrep。\x0d\x0a\x0d\x0aegrep和fgrep的命令只跟grep有很小不同。egrep和fgrep都是grep的擴(kuò)展,支持更多的re元字符,fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說(shuō),正則表達(dá)式中的元字符表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強(qiáng),可以通過(guò)-G、-E、-F命令行選項(xiàng)來(lái)使用egrep和fgrep的功能。\x0d\x0agrep的工作方式是這樣的,它在一個(gè)或多個(gè)文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板后的所有字符串被看作文件名。搜索的結(jié)果被送到屏幕,不影響原文件內(nèi)容。\x0d\x0agrep可用于shell腳本,因?yàn)間rep通過(guò)返回一個(gè)狀態(tài)值來(lái)說(shuō)明搜索的狀態(tài),如果模板搜索成功,則返回0,如果搜索不成功,則返回1,如果搜索的文件不存在,則返回2。我們利用這些返回值就可進(jìn)行一些自動(dòng)化的文本處理工作。\x0d\x0aGrep命令中允許指定的串語(yǔ)句是一個(gè)規(guī)則表達(dá)式,這是一種允許使用某些特殊鍵盤(pán)字符的指定字符串的方法,這種方法中的特殊鍵盤(pán)字符可以用于代表其他字符也可以進(jìn)一步定義模式匹配工作方式。例如:grep ".*hood" essay1。該命令將在文件essay1中搜索,顯示出包含帶有字符串hood的字的每一行。命令行中的點(diǎn)表示的是hood之前可以有任意字符,星號(hào)指的是在字符串之前點(diǎn)號(hào)所表示的任意字符可以有任意個(gè)(其中的雙引號(hào)是可有可無(wú)的,但是當(dāng)語(yǔ)句中包含短語(yǔ)或者空格時(shí)就必須加雙引號(hào))。\x0d\x0a
grep egrep區(qū)別
grep 默認(rèn)不支持?jǐn)U展 但可以通過(guò)-E 選擇來(lái)支持?jǐn)U展正則
egrep 支持?jǐn)U展正則
關(guān)于正則與擴(kuò)展正則的區(qū)別可以看我另一篇shell 正則的介紹
文件處理順序 以行為單位,逐行進(jìn)行處理
默認(rèn)只輸出與表達(dá)式相匹配的文本行
基本用法
- 格式1:egrep [選擇] '正則表達(dá)式' 文件
- 格式2:前置命令 | egrep [選擇] '正則表達(dá)式'
? egrep命令工具 (擴(kuò)展正則命令)
? 常用命令選項(xiàng)
?grep 正則表達(dá)式,用來(lái)查找過(guò)濾文檔的工具符號(hào)
grep "root" user //在user文檔中查找有單詞root的行
grep "^root" user //在user文檔中查找以單詞root開(kāi)頭的行
grep "bash " user //查找空行
grep "^ " user //查找以空格開(kāi)頭的行
grep "[rot]" user //查找字母r或者o或者t
grep "roo[tn]" user //查找root或者roon
grep "[^rot]" user //查找字母r或者o或者t之外的內(nèi)容
grep "[a-z]" user //查找小寫(xiě)字母
grep "[A-Z]" user //查找大寫(xiě)字母
grep "[a-Z]" user //查找所有字母
grep "[0-9]" user //查找數(shù)字
grep "r..t" user //查找以r開(kāi)頭t結(jié)尾中間有2個(gè)任意字符的單詞
grep "r. " user //查找以r開(kāi)頭后面任意字符 相當(dāng)手通配符
grep "ro*" user //查找以r開(kāi)頭后面有或沒(méi)有字母o的單詞,o可以出現(xiàn)任意次
grep "o{1,2}" user //查找o出現(xiàn)1次到2次的行
grep "o{2,3}" user //查找o出現(xiàn)2次到3次的行
grep "o{2}" user //查找o出現(xiàn)2次的行
grep "o{1,} " user //查找o出現(xiàn)1次以及1次以上
grep "(:0){2}" user //查找:0(數(shù)字零)連續(xù)出現(xiàn)2次的行
擴(kuò)展正則
egrep "o+" user //查找o出現(xiàn)1次以及1次以上
egrep "o?" user //查找o出現(xiàn)0次或1次
egrep "o{1,2}" user //查找o出現(xiàn)1次到2次的行
egrep "o{2,3}" user //查找o出現(xiàn)2次到3次的行
egrep "o{2}" user //查找o出現(xiàn)2次的行
egrep "o{1,}" user //查找o出現(xiàn)1次以及1次以上
egrep "(:0){2}" user //查找:0(數(shù)字零)連續(xù)出現(xiàn)2次的行
egrep "bash|nologin" user //查找bash或者nologin
egrep "\bthe\b" a //查找單詞the,前后是空格或者特殊符號(hào)
案例:
正則表達(dá)式匹配練習(xí)
1)典型的應(yīng)用場(chǎng)合:grep、egrep檢索文本行
grep命令不帶-E選項(xiàng)時(shí),支持基本正則匹配模式。比如“word”關(guān)鍵詞檢索、“^word”匹配以word開(kāi)頭的行、“word$”匹配以word結(jié)尾的行……等等。
輸出以“r”開(kāi)頭的用戶(hù)記錄:
輸出以“l(fā)ocalhost”結(jié)尾的行:
若希望在grep檢索式同時(shí)組合多個(gè)條件,比如輸出以“root”或者以“daemon”開(kāi)頭的行:
而若若使用grep -E或egrep命令,可支持?jǐn)U展正則匹配模式,能夠自動(dòng)識(shí)別 |、{} 等擴(kuò)展正則表達(dá)式中的特殊字符,用起來(lái)更加方便,比如:
或者
使用grep -E 與 使用egrep命令完全等效,推薦使用后者,特別是涉及到復(fù)雜的正則表達(dá)式的時(shí)候。
2)grep、egrep命令的-q選項(xiàng)
選項(xiàng) -q 表示 quiet(靜默)的意思,結(jié)合此選項(xiàng)可以只做檢索而并不輸出,通常在腳本內(nèi)用來(lái)識(shí)別查找的目標(biāo)是否存在,通過(guò)返回狀態(tài) $? 來(lái)判斷,這樣可以忽略無(wú)關(guān)的文本信息,簡(jiǎn)化腳本輸出。
比如,檢查/etc/hosts文件內(nèi)是否存在192.168.4.4的映射記錄,如果存在則顯示“YES”,否則輸出“NO”,一般會(huì)執(zhí)行:
這樣grep的輸出信息和腳本判斷后的提示混雜在一起,用戶(hù)不易辨別,所以可以改成以下操作:
是不是清爽多了,從上述結(jié)果也可以看到,使用 -q 選項(xiàng)的效果與使用 /dev/null的效果類(lèi)似。
3)基本元字符 ^、$ —— 匹配行首、行尾
輸出注釋的配置行(以#開(kāi)頭的行):
統(tǒng)計(jì)本地用戶(hù)中登錄Shell為“/sbin/nologin”的用戶(hù)個(gè)數(shù):
提示: -m10僅在文件的前10行中過(guò)濾,后面的行不再過(guò)濾。
結(jié)合 -c 選項(xiàng)輸出匹配的行數(shù)
使用 -c 選項(xiàng)可輸出匹配行數(shù),這與通過(guò)管道再 wc -l的效果是相同的,但是寫(xiě)法更簡(jiǎn)便。比如,統(tǒng)計(jì)使用“/bin/bash”作為登錄Shell的正常用戶(hù)個(gè)數(shù),可執(zhí)行:
或者
4)基本元字符 . —— 匹配任意單個(gè)字符
以/etc/rc.local文件為例,確認(rèn)文本內(nèi)容:
輸出/etc/rc.local文件內(nèi)的空行(用 –v 選項(xiàng)將條件取反):
5)基本元字符 +、?、 —— 目標(biāo)出現(xiàn)的次數(shù)*
還以/etc/rc.local文件為例:
輸出包括 f、ff、ff、……的行,即“f”至少出現(xiàn)一次:
輸出包括init、initial的行,即末尾的“ial”最多出現(xiàn)一次(可能沒(méi)有):
輸出包括stu、stuf、stuff、stufff、……的行,即末尾的“f”可出現(xiàn)任意多次,也可以沒(méi)有。重復(fù)目標(biāo)只有一個(gè)字符時(shí),可以不使用括號(hào):
輸出所有行,單獨(dú)的“.*”可匹配任意行(包括空行):
輸出/etc/passwd文件內(nèi)“r”開(kāi)頭且以“nologin”結(jié)尾的用戶(hù)記錄,即中間可以是任意字符:
6)元字符 {} —— 限定出現(xiàn)的次數(shù)范圍
創(chuàng)建一個(gè)練習(xí)用的測(cè)試文件:
輸出包括ababab的行,即“ab”連續(xù)出現(xiàn)3次:
輸出包括abab、ababab、abababab的行,即“ab”連續(xù)出現(xiàn)2~4次:
輸出包括ababab、abababab、……的行,即“ab”最少連續(xù)出現(xiàn)3次:
7)元字符 [] —— 匹配范圍內(nèi)的單個(gè)字符
還以前面的測(cè)試文件bracet.txt為例:
輸出包括abc、abd的行,即前兩個(gè)字符為“ab”,第三個(gè)字符只要是c、d中的一個(gè)就符合條件:
輸出包括大寫(xiě)字母的行,使用[A-Z]匹配連續(xù)范圍:
8)單詞邊界匹配
以文件/etc/rc.local為例:
輸出包括單詞“init”的行,文件中“initialization”不合要求:
或者:
輸出包括以“l(fā)l”結(jié)尾的單詞的行,使用 匹配單詞右邊界:
或者:
9)多個(gè)條件的組合
通過(guò)dmesg啟動(dòng)日志查看藍(lán)牙設(shè)備、網(wǎng)卡設(shè)備相關(guān)的信息:
grep命令
grep
1.作用
Linux系統(tǒng)中g(shù)rep命令是一種強(qiáng)大的文本搜索工具,它能使用正則表達(dá)式搜索文本,并把匹 配的行打印出來(lái)。grep全稱(chēng)是Global Regular Expression Print,表示全局正則表達(dá)式版本,它的使用權(quán)限是所有用戶(hù)。
grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的擴(kuò)展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說(shuō),正則表達(dá)式中的元字符表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強(qiáng),可以通過(guò)-G、-E、-F命令行選項(xiàng)來(lái)使用egrep和fgrep的功能。
2.格式及主要參數(shù)
grep [options]
主要參數(shù): grep --help可查看
-c:只輸出匹配行的計(jì)數(shù)。
-i:不區(qū)分大小寫(xiě)。
-h:查詢(xún)多文件時(shí)不顯示文件名。
-l:查詢(xún)多文件時(shí)只輸出包含匹配字符的文件名。
-n:顯示匹配行及 行號(hào)。
-s:不顯示不存在或無(wú)匹配文本的錯(cuò)誤信息。
-v:顯示不包含匹配文本的所有行。
--color=auto :可以將找到的關(guān)鍵詞部分加上顏色的顯示。
pattern正則表達(dá)式主要參數(shù):
\: 忽略正則表達(dá)式中特殊字符的原有含義。
^:匹配正則表達(dá)式的開(kāi)始行。
$: 匹配正則表達(dá)式的結(jié)束行。
\:從匹配正則表達(dá) 式的行開(kāi)始。
\:到匹配正則表達(dá)式的行結(jié)束。
[ ]:?jiǎn)蝹€(gè)字符,如[A]即A符合要求 。
[ - ]:范圍,如[A-Z],即A、B、C一直到Z都符合要求 。
.:所有的單個(gè)字符。
*:所有字符,長(zhǎng)度可以為0。
3.grep命令使用簡(jiǎn)單實(shí)例
itcast$ grep ‘test’ d*
顯示所有以d開(kāi)頭的文件中包含 test的行
itcast $ grep ‘test’ aa bb cc
顯示在aa,bb,cc文件中匹配test的行。
itcast $ grep ‘[a-z]\{5\}’ aa
顯示所有包含每個(gè)字符串至少有5個(gè)連續(xù)小寫(xiě)字符的字符串的行。
itcast $ grep ‘wesest.*\1′ aa
如果west被匹配,則es就被存儲(chǔ)到內(nèi)存中,并標(biāo)記為1,然后搜索任意個(gè)字符(.*),這些字符后面緊跟著 另外一個(gè)es(\1),找到就顯示該行。如果用egrep或grep -E,就不用”\”號(hào)進(jìn)行轉(zhuǎn)義,直接寫(xiě)成’w(es)t.*\1′就可以了。
4.grep命令使用復(fù)雜實(shí)例
明確要求搜索子目錄:
grep -r
或忽略子目錄
grep -d skip
如果有很多輸出時(shí),您可以通過(guò)管道將其轉(zhuǎn)到’less’上閱讀:
itcast$ grep magic /usr/src/Linux/Documentation/* | less
這樣,您就可以更方便地閱讀。
有一點(diǎn)要注意,您必需提供一個(gè)文件過(guò)濾方式(搜索全部文件的話用 *)。如果您忘了,’grep’會(huì)一直等著,直到該程序被中斷。如果您遇到了這樣的情況,按 ,然后再試。
下面還有一些有意思的命令行參數(shù):
grep -i pattern files :不區(qū)分大小寫(xiě)地搜索。默認(rèn)情況區(qū)分大小寫(xiě),
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整個(gè)單詞,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
例如:grep "abc\|xyz" testfile 表示過(guò)濾包含abc或xyz的行
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。
grep -n pattern files 即可顯示行號(hào)信息
grep -c pattern files 即可查找總行數(shù)
還有些用于搜索的特殊符號(hào):\ 和 \ 分別標(biāo)注單詞的開(kāi)始與結(jié)尾。
例如:
grep man * 會(huì)匹配 ‘Batman’、’manic’、’man’等,
grep ‘\man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\man\’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
‘^’: 指匹配的字符串在行首,
1.列出文件清單命令:ls
ls命令能夠列出當(dāng)前目錄下的所有內(nèi)容。ls 命令的執(zhí)行方式為:
# ls [-選項(xiàng)] [文件名或者目錄名]
進(jìn)入到Linux命令行中后,我們至少要知道當(dāng)前所處的位置有哪些內(nèi)容,這些信息就可以使用ls命令來(lái)獲得。
在Linux中,ls命令是最常使用的命令之一,因?yàn)樵诿钚邢乱S時(shí)查看目錄內(nèi)容。如果不加任何選項(xiàng)的話,ls命令僅列出當(dāng)前目錄下的文件和目錄名,例如,想要查看/etc目錄下的內(nèi)容,可以使用下列命令:
# ls /etc
如果想要列出當(dāng)前目錄下所有文件,則可以使用下列命令:
# ls -a
2、cat命令
功能:在標(biāo)準(zhǔn)輸出上顯示文件。
語(yǔ)法:cat [-vTEuAte] 文件
例子: cat example.txt
cat -A exam2.txt
cat file1 file2 file2
3、more命令
功能:在終端屏幕按屏顯示文本文件。
語(yǔ)法: more [-pcdls] 文件
例子: more example.c
more -dc example.c
more -c -10 example.c
4、less命令
less命令的功能幾乎和more命令一樣,也是用來(lái)按頁(yè)顯示文件,不同之處在于less命令在顯示文件時(shí)允許用戶(hù)既
可以向前又可以向后翻閱文件。
5、head命令
功能:顯示指定文件的前若干行。缺省設(shè)置為顯示10行
語(yǔ)法:head [-n] 文件
例子: head example.c
head -3 example.c
6、tail命令
功能:顯示指定文件的末尾若干行。缺省設(shè)置為顯示10行
語(yǔ)法:tail [+ / - num ] [參數(shù)] 文件
+num 從第num行以后開(kāi)始顯示。- num 從距文件尾num行處開(kāi)始顯示。
例子: tail example.c
tail -4 example.c
7、grep、fgrep和egrep命令
功能:
這組命令以指定模式搜索文件,并通知用戶(hù)在什么文件中搜索到與指定的模式匹配的字符串,并打印出所有包含該字符串的文本行,在該文本行的最前面是該行所在的文件名。grep命令一次只能搜索一個(gè)指定的模式;egrep命令檢索擴(kuò)展的正則表達(dá)式(包括表達(dá)式組和可選項(xiàng));fgrep命令檢索固定字符串,它不識(shí)別正則表達(dá)式,是快速搜索命令。
語(yǔ)法:
grep [-EFbcihlnvxef] [查找模式] [文件名1,文件名2,……]
egrep [選項(xiàng)] [查找模式] [文件名1,文件名2,……]
fgrep [選項(xiàng)] [查找模式] [文件名1,文件名2,……]
例子: grep "text file" example
grep data *
grep goto *.c