99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋(píng)果6袋
6
麥子學(xué)院

Linux學(xué)習(xí)之find與grep命令詳解

發(fā)布時(shí)間:2017-03-23 17:25  回復(fù):0  查看:1839   最后回復(fù):2017-03-23 17:25  
linux系統(tǒng) 下面工作,有些命令能夠大大提高效率。本文就向大家介紹find 、 grep 命令,他哥倆可以算是必會(huì)的 linux 命令,我?guī)缀趺刻於家玫剿麄?。本文結(jié)構(gòu)如下:
  · find 命令
  · find 命令的一般形式
  · find 命令的常用選項(xiàng)及實(shí)例
  · find xargs
  · grep 命令
  · grep 命令的一般形式
  · grep 正則表達(dá)式元字符集 ( 基本集 )
  · grep 命令的常用選項(xiàng)及實(shí)例
   1、find命令
  find 命令是一個(gè)無(wú)處不在命令,是 linux 中最有用的命令之一。 find 命令用于:在一個(gè)目錄 ( 及子目錄 ) 中搜索文件,你可以指定一些匹配條件,如按文件名、文件類(lèi)型、用戶甚至是時(shí)間戳查找文件。下面就通過(guò)實(shí)例來(lái)體驗(yàn)下 find 命令的強(qiáng)大。
   1.1、find命令的一般形式
  man 文檔中給出的 find 命令的一般形式為:
  find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]
  其實(shí)[-H] [-L] [-P] [-D debugopts] [-Olevel] 這幾個(gè)選項(xiàng)并不常用 ( 至少在我的日常工作中,沒(méi)有用到過(guò) ) ,上面的 find 命令的常用形式可以簡(jiǎn)化為:
  find [path…] [expression]
  · path find 命令所查找的目錄路徑。例如用 . 來(lái)表示當(dāng)前目錄,用 / 來(lái)表示系統(tǒng)根目錄
  · expression expression 可以分為 ——“-options [-print -exec -ok …]”
  · -options ,指定 find 命令的常用選項(xiàng),下節(jié)詳細(xì)介紹
  · -print , find 命令將匹配的文件輸出到標(biāo)準(zhǔn)輸出
  · -exec , find 命令對(duì)匹配的文件執(zhí)行該參數(shù)所給出的 shell 命令。相應(yīng)命令的形式為 ’command’ { } ; ,注意 { } ; 之間的空格
  find ./ -size 0 -exec rm {} ;  刪除文件大小為零的文件  ( 還可以以這樣做: rm -i find ./ -size 0  或  find ./ -size 0 | xargs rm -f &)
  為了用ls -l 命令列出所匹配到的文件,可以把 ls -l 命令放在 find 命令的 -exec 選項(xiàng)中: find . -type f -exec ls -l { } ;
  在/logs 目錄中查找更改時(shí)間在 5 日以前的文件并刪除它們: find /logs -type f -mtime +5 -exec rm { } ;
  · -ok ,和 -exec 的作用相同,只不過(guò)以一種更為安全的模式來(lái)執(zhí)行該參數(shù)所給出的 shell 命令,在執(zhí)行每一個(gè)命令之前,都會(huì)給出提示,讓用戶來(lái)確定是否執(zhí)行。
  find . -name “*.conf” -mtime +5 -ok rm { } ;  在當(dāng)前目錄中查找所有文件名以 .LOG 結(jié)尾、更改時(shí)間在 5 日以上的文件,并刪除它們,只不過(guò)在刪除之前先給出提示
  也有人這樣總結(jié)find 命令的結(jié)構(gòu):
   find start_directory test
   options
  criteria_to_match
  action_to_perform_on_results
   1.2find命令的常用選項(xiàng)及實(shí)例
  · -name
  按照文件名查找文件。
  find /dir -name filename  /dir 目錄及其子目錄下面查找名字為 filename 的文件
  find . -name “*.c”  在當(dāng)前目錄及其子目錄 ( “.” 表示 ) 中查找任何擴(kuò)展名為 “c” 的文件
  · -perm
  按照文件權(quán)限來(lái)查找文件。
  find . -perm 755 –print  在當(dāng)前目錄下查找文件權(quán)限位為 755 的文件,即文件屬主可以讀、寫(xiě)、執(zhí)行,其他用戶可以讀、執(zhí)行的文件
  · -prune
  使用這一選項(xiàng)可以使find 命令不在當(dāng)前指定的目錄中查找,如果同時(shí)使用 -depth 選項(xiàng),那么 -prune 將被 find 命令忽略。
  find /apps -path “/apps/bin” -prune -o –print  /apps 目錄下查找文件,但不希望在 /apps/bin 目錄下查找
  find /usr/sam -path “/usr/sam/dir1” -prune -o –print  /usr/sam 目錄下查找不在 dir1 子目錄之內(nèi)的所有文件
  · -user
  按照文件屬主來(lái)查找文件。
  find ~ -user sam –print  $HOME 目錄中查找文件屬主為 sam 的文件
  · -group
  按照文件所屬的組來(lái)查找文件。
  find /apps -group gem –print  /apps 目錄下查找屬于 gem 用戶組的文件
  · -mtime -n +n
  按照文件的更改時(shí)間來(lái)查找文件, – n 表示文件更改時(shí)間距現(xiàn)在 n 天以內(nèi), + n 表示文件更改時(shí)間距現(xiàn)在 n 天以前。
  find / -mtime -5 –print  在系統(tǒng)根目錄下查找更改時(shí)間在 5 日以內(nèi)的文件
  find /var/adm -mtime +3 –print  /var/adm 目錄下查找更改時(shí)間在 3 日以前的文件
  · -nogroup
  查找無(wú)有效所屬組的文件,即該文件所屬的組在/etc/groups 中不存在。
  find / –nogroup -print
  · -nouser
  查找無(wú)有效屬主的文件,即該文件的屬主在/etc/passwd 中不存在。
  find /home -nouser –print
  · -newer file1 ! file2
  查找更改時(shí)間比文件file1 新但比文件 file2 舊的文件。
  · -type
  查找某一類(lèi)型的文件,諸如:
  b –  塊設(shè)備文件。
  d –  目錄。
  c –  字符設(shè)備文件。
  p –  管道文件。
  l –  符號(hào)鏈接文件。
  f –  普通文件。
  find /etc -type d –print  /etc 目錄下查找所有的目錄
  find . ! -type d –print  在當(dāng)前目錄下查找除目錄以外的所有類(lèi)型的文件
  find /etc -type l –print  /etc 目錄下查找所有的符號(hào)鏈接文件
  · -size n [c]  查找文件長(zhǎng)度為 n 塊的文件,帶有 c 時(shí)表示文件長(zhǎng)度以字節(jié)計(jì)。
  find . -size +1000000c –print  在當(dāng)前目錄下查找文件長(zhǎng)度大于 1 M 字節(jié)的文件
  find /home/apache -size 100c –print  /home/apache 目錄下查找文件長(zhǎng)度恰好為 100 字節(jié)的文件
  find . -size +10 –print  在當(dāng)前目錄下查找長(zhǎng)度超過(guò) 10 塊的文件 ( 一塊等于 512 字節(jié) )
  · -depth :在查找文件時(shí),首先查找當(dāng)前目錄中的文件,然后再在其子目錄中查找。
  find / -name “CON.FILE” -depth –print  它將首先匹配所有的文件然后再進(jìn)入子目錄中查找
  · -mount :在查找文件時(shí)不跨越文件系統(tǒng) mount 點(diǎn)。
  find . -name “*.XC” -mount –print  從當(dāng)前目錄開(kāi)始查找位于本文件系統(tǒng)中文件名以 XC 結(jié)尾的文件 ( 不進(jìn)入其他文件系統(tǒng) )
  · -follow :如果 find 命令遇到符號(hào)鏈接文件,就跟蹤至鏈接所指向的文件。
   1.3、findxargs
  在使用find 命令的 -exec 選項(xiàng)處理匹配到的文件時(shí),  find 命令將所有匹配到的文件一起傳遞給 exec 執(zhí)行。但有些系統(tǒng)對(duì)能夠傳遞給 exec 的命令長(zhǎng)度有限制,這樣在 find 命令運(yùn)行幾分鐘之后,就會(huì)出現(xiàn)溢出錯(cuò)誤。錯(cuò)誤信息通常是 參數(shù)列太長(zhǎng) 參數(shù)列溢出 。這就是 xargs 命令的用處所在,特別是與 find 命令一起使用。
  find 命令把匹配到的文件傳遞給 xargs 命令,而 xargs 命令每次只獲取一部分文件而不是全部,不像 -exec 選項(xiàng)那樣。這樣它可以先處理最先獲取的一部分文件,然后是下一批,并如此繼續(xù)下去。
  在有些系統(tǒng)中,使用-exec 選項(xiàng)會(huì)為處理每一個(gè)匹配到的文件而發(fā)起一個(gè)相應(yīng)的進(jìn)程,并非將匹配到的文件全部作為參數(shù)一次執(zhí)行 ; 這樣在有些情況下就會(huì)出現(xiàn)進(jìn)程過(guò)多,系統(tǒng)性能下降的問(wèn)題,因而效率不高 ;
  而使用xargs 命令則只有一個(gè)進(jìn)程。另外,在使用 xargs 命令時(shí),究竟是一次獲取所有的參數(shù),還是分批取得參數(shù),以及每一次獲取參數(shù)的數(shù)目都會(huì)根據(jù)該命令的選項(xiàng)及系統(tǒng)內(nèi)核中相應(yīng)的可調(diào)參數(shù)來(lái)確定。
  來(lái)看看xargs 命令是如何同 find 命令一起使用的,并給出一些例子。
  find . -type f -print | xargs file  查找系統(tǒng)中的每一個(gè)普通文件,然后使用 xargs 命令來(lái)測(cè)試它們分別屬于哪類(lèi)文件
  find / -name “core” -print | xargs echo “” >/tmp/core.log  在整個(gè)系統(tǒng)中查找內(nèi)存信息轉(zhuǎn)儲(chǔ)文件 (core dump)  ,然后把結(jié)果保存到 /tmp/core.log  文件中:
  find . -type f -print | xargs grep “hostname”  grep 命令在所有的普通文件中搜索 hostname 這個(gè)詞
  find ./ -mtime +3 -print|xargs rm -f –r  刪除 3 天以前的所有東西  (find . -ctime +3 -exec rm -rf {} ;)
  find ./ -size 0 | xargs rm -f &  刪除文件大小為零的文件
  find 命令配合使用 exec xargs 可以使用戶對(duì)所匹配到的文件執(zhí)行幾乎所有的命令。
   2、grep命令
  grep (global search regular expression(RE) and print out the line, 全面搜索正則表達(dá)式并把行打印出來(lái) ) 是一種強(qiáng)大的文本搜索工具,它能使用正則表達(dá)式搜索文本,并把匹配的行打印出來(lái)。
   2.1、grep命令的一般選項(xiàng)及實(shí)例
   grep [ OPTIONS] PATTERN [ FILE…]  grep [ OPTIONS] [-e PATTERN | -f  FILE] [ FILE…]
  grep 命令用于搜索由 Pattern 參數(shù)指定的模式,并將每個(gè)匹配的行寫(xiě)入標(biāo)準(zhǔn)輸出中。這些模式是具有限定的正則表達(dá)式,它們使用 ed egrep 命令樣式。如果在 File 參數(shù)中指定了多個(gè)名稱, grep 命令將顯示包含匹配行的文件的名稱。對(duì)  shell  有特殊含義的字符  ($, *, [, |, ^, (, ), )  出現(xiàn)在  Pattern 參數(shù)中時(shí)必須帶雙引號(hào)。
  如果 Pattern 參數(shù)不是簡(jiǎn)單字符串,通常必須用單引號(hào)將整個(gè)模式括起來(lái)。在諸如  [a-z],  之類(lèi)的表達(dá)式中, -( 減號(hào) )cml  可根據(jù)當(dāng)前正在整理的序列來(lái)指定一個(gè)范圍。整理序列可以定義等價(jià)的類(lèi)以供在字符范圍中使用。如果未指定任何文件, grep 會(huì)假定為標(biāo)準(zhǔn)輸入。
   2.2、grep正則表達(dá)式元字符集(基本集)
  錨定行的開(kāi)始 如: ’^grep’ 匹配所有以 grep 開(kāi)頭的行。
  錨定行的結(jié)束 如: ’grep$’ 匹配所有以 grep 結(jié)尾的行。
  匹配一個(gè)非換行符的字符 如: ’gr.p’ 匹配 gr 后接一個(gè)任意字符,然后是 p
  匹配零個(gè)或多個(gè)先前字符 如: ’ *grep’ 匹配所有一個(gè)或多個(gè)空格后緊跟 grep 的行。  .* 一起用代表任意字符。
  []  匹配一個(gè)指定范圍內(nèi)的字符,如 '[Gg]rep’ 匹配 Grep grep
  [^]  匹配一個(gè)不在指定范圍內(nèi)的字符,如: '[^A-FH-Z]rep’ 匹配不包含 A-F H-Z 的一個(gè)字母開(kāi)頭,緊跟 rep 的行。
  (..)  標(biāo)記匹配字符,如: '(love)’ , love 被標(biāo)記為 1
  錨定單詞的結(jié)束,如 ’grep>’ 匹配包含以 grep 結(jié)尾的單詞的行。
  x{m}  連續(xù)重復(fù)字符 x , m 次,如: ’o{5}’ 匹配包含連續(xù) 5 個(gè) o 的行。
  x{m,}  連續(xù)重復(fù)字符 x, 至少 m 次,如: ’o{5,}’ 匹配至少連續(xù)有 5 個(gè) o 的行。
  x{m,n}  連續(xù)重復(fù)字符 x ,至少 m 次,不多于 n 次,如: ’o{5,10}’ 匹配連續(xù) 5–10 個(gè) o 的行。
  匹配一個(gè)文字和數(shù)字字符,也就是 [A-Za-z0-9] ,如: ’Gw*p’ 匹配以 G 后跟零個(gè)或多個(gè)文字或數(shù)字字符,然后是 p
  W w 的反置形式,匹配一個(gè)非單詞字符,如點(diǎn)號(hào)句號(hào)等。 W* 則可匹配多個(gè)。
  單詞鎖定符,如 : ‘bgrepb’ 只匹配 grep ,即只能是 grep 這個(gè)單詞,兩邊均為空格。
   2.3grep命令的常用選項(xiàng)及實(shí)例
  -?
  同時(shí)顯示匹配行上下的? 行,如: grep -2 pattern filename 同時(shí)顯示匹配行的上下 2 行。
  -b , –byte-offset
  打印匹配行前面打印該行所在的塊號(hào)碼。
  -c,–count
  只打印匹配的行數(shù),不顯示匹配的內(nèi)容。
  -f File , –file=File
  從文件中提取模板??瘴募邪?/span>0 個(gè)模板,所以什么都不匹配。
  -h , –no-filename
  當(dāng)搜索多個(gè)文件時(shí),不顯示匹配文件名前綴。
  -i , –ignore-case
  忽略大小寫(xiě)差別。
  -q , –quiet
  取消顯示,只返回退出狀態(tài)。0 則表示找到了匹配的行。
  -l , –files-with-matches
  打印匹配模板的文件清單。
  -L , –files-without-match
  打印不匹配模板的文件清單。
  -n , –line-number
  在匹配的行前面打印行號(hào)。
  -s , –silent
  不顯示關(guān)于不存在或者無(wú)法讀取文件的錯(cuò)誤信息。
  -v –revert-match
  反檢索,只顯示不匹配的行。
  -w , –word-regexp
  如果被引用,就把表達(dá)式做為一個(gè)單詞搜索。
  -V , –version
  顯示軟件版本信息。
  =====
  ls -l | grep ‘^a’  通過(guò)管道過(guò)濾 ls -l 輸出的內(nèi)容,只顯示以 a 開(kāi)頭的行。
  grep ‘test’ d*  顯示所有以 d 開(kāi)頭的文件中包含 test 的行。
  grep ‘test’ aa bb cc  顯示在 aa , bb cc 文件中匹配 test 的行。
  grep ‘[a-z]’ aa  顯示所有包含每個(gè)字符串至少有 5 個(gè)連續(xù)小寫(xiě)字符的字符串的行。
  grep ‘w(es)t.*’ aa  如果 west 被匹配,則 es 就被存儲(chǔ)到內(nèi)存中,并標(biāo)記為 1 ,然后搜索任意個(gè)字符 (.*) ,這些字符后面緊跟著另外一個(gè) es() ,找到就顯示該行。如果用 egrep grep -E ,就不用 ”” 號(hào)進(jìn)行轉(zhuǎn)義,直接寫(xiě)成 ’w(es)t.*’ 就可以了。
  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 pattern1 files | grep pattern2  :顯示既匹配  pattern1  又匹配  pattern2  的行。
來(lái)源:iyunv
您還未登錄,請(qǐng)先登錄

熱門(mén)帖子

最新帖子

?