這一節仍是同樣學習操做目錄文件的命令php
在這一節,我會講到解壓壓縮tar以及zip命令,以及文本查找命令grephtml
tar命令能夠爲linux的文件和目錄建立檔案python
首先要弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件經過一些壓縮算法變成一個小文件。linux
爲何要區分這兩個概念呢?這源於Linux中不少壓縮程序只能針對一個文件進行壓縮,這樣當你想要壓縮一大堆文件時,你得先將這一大堆文件先打成一個包(tar命令),而後再用壓縮程序進行壓縮(結合gzip, bzip2命令)。 正則表達式
tar(選項)(參數)
他的主要選項以下算法
-A或--catenate:新增文件到以存在的備份文件; -B:設置區塊大小; -c或--create:創建新的備份文件; -C <目錄>:這個選項用在解壓縮,若要在特定目錄解壓縮,可使用這個選項。 -d:記錄文件的差異; -x或--extract或--get:從備份文件中還原文件; -t或--list:列出備份文件的內容; -z或--gzip或--ungzip:經過gzip指令處理備份文件; -Z或--compress或--uncompress:經過compress指令處理備份文件; -f<備份文件>或--file=<備份文件>:指定備份文件; -v或--verbose:顯示指令執行過程; -r:添加文件到已經壓縮的文件; -u:添加改變了和現有的文件到已經存在的壓縮文件; -j:支持bzip2解壓文件; -v:顯示操做過程; -l:文件系統邊界設置; -k:保留原有文件不覆蓋; -m:保留文件不被覆蓋; -w:確認壓縮文件的正確性; -p或--same-permissions:用原來的文件權限還原文件; -P或--absolute-names:文件名使用絕對名稱,不移除文件名稱前的「/」號; -N <日期格式> 或 --newer=<日期時間>:只將較指定日期更新的文件保存到備份文件裏; --exclude=<範本樣式>:排除符合範本樣式的文件。
例如咱們將一個文件打包express
tar -cvf log.tar somelogs.log
注意這樣是隻打包,不壓縮bash
打包後,以gzip壓縮工具
tar -zcvf log.tar.gz somelogs.log
打包後,以bzip2壓縮學習
tar -jcvf log.tar.bz2 somelogs.log
注意,第一個參數也就是文件名,能夠本身定義,但按照常理須要以特定後綴結尾,這樣更容易區分
查閱tar包內有哪些文件
tar -ztvf log.tar.gz
將tar包解壓縮
tar -zxvf /opt/soft/test/log.tar.gz
只將tar內的部分文件解壓出來
tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
咱們能夠經過如下命令查看壓縮包裏的文件名
tar -ztvf
事實上,咱們最經常使用的命令也就是壓縮和解壓縮
壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱 查 詢:tar -jtv -f filename.tar.bz2 解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄
zip命令能夠用來解壓縮文件,或者對文件進行打包操做。zip是個使用普遍的壓縮程序,文件經它壓縮後會另外產生具備「.zip」擴展名的壓縮文件。
zip(選項)(參數)
全部選項以下
-A:調整可執行的自動解壓縮文件; -b<工做目錄>:指定暫時存放文件的目錄; -c:替每一個被壓縮的文件加上註釋; -d:從壓縮文件內刪除指定的文件; -D:壓縮文件內不創建目錄名稱; -f:此參數的效果和指定「-u」參數相似,但不只更新既有文件,若是某些文件本來不存在於壓縮文件內,使用本參數會一併將其加入壓縮文件中; -F:嘗試修復已損壞的壓縮文件; -g:將文件壓縮後附加在已有的壓縮文件以後,而非另行創建新的壓縮文件; -h:在線幫助; -i<範本樣式>:只壓縮符合條件的文件; -j:只保存文件名稱及其內容,而不存聽任何目錄名稱; -J:刪除壓縮文件前面沒必要要的數據; -k:使用MS-DOS兼容格式的文件名稱; -l:壓縮文件時,把LF字符置換成LF+CR字符; -ll:壓縮文件時,把LF+cp字符置換成LF字符; -L:顯示版權信息; -m:將文件壓縮並加入壓縮文件後,刪除原始文件,即把文件移到壓縮文件中; -n<字尾字符串>:不壓縮具備特定字尾字符串的文件; -o:以壓縮文件內擁有最新更改時間的文件爲準,將壓縮文件的更改時間設成和該文件相同; -q:不顯示指令執行過程; -r:遞歸處理,將指定目錄下的全部文件和子目錄一併處理; -S:包含系統和隱藏文件; -t<日期時間>:把壓縮文件的日期設成指定的日期; -T:檢查備份文件內的每一個文件是否正確無誤; -u:更換較新的文件到壓縮文件內; -v:顯示指令執行過程或顯示版本信息; -V:保存VMS操做系統的文件屬性; -w:在文件名稱裏假如版本編號,本參數僅在VMS操做系統下有效; -x<範本樣式>:壓縮時排除符合條件的文件; -X:不保存額外的文件屬性; -y:直接保存符號鏈接,而非該連接所指向的文件,本參數僅在UNIX之類的系統下有效; -z:替壓縮文件加上註釋; -$:保存第一個被壓縮文件所在磁盤的卷冊名稱; -<壓縮效率>:壓縮效率是一個介於1~9的數值。
下面經過幾個例子熟悉一下這個命令
將/home/susmtoe/python/這個目錄下全部文件和文件夾打包爲當前目錄下的python.zip:
zip -q -r python.zip /home/susmote/python
grep 文本搜索命令
grep(global search regular expression(RE) and print out the line,全面搜索正則表達式並把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
他的選項以下
-a 不要忽略二進制數據。 -A<顯示列數> 除了顯示符合範本樣式的那一行以外,並顯示該行以後的內容。 -b 在顯示符合範本樣式的那一行以外,並顯示該行以前的內容。 -c 計算符合範本樣式的列數。 -C<顯示列數>或-<顯示列數> 除了顯示符合範本樣式的那一列以外,並顯示該列以前後的內容。 -d<進行動做> 當指定要查找的是目錄而非文件時,必須使用這項參數,不然grep命令將回報信息並中止動做。 -e<範本樣式> 指定字符串做爲查找文件內容的範本樣式。 -E 將範本樣式爲延伸的普通表示法來使用,意味着使用能使用擴展正則表達式。 -f<範本文件> 指定範本文件,其內容有一個或多個範本樣式,讓grep查找符合範本條件的文件內容,格式爲每一列的範本樣式。 -F 將範本樣式視爲固定字符串的列表。 -G 將範本樣式視爲普通的表示法來使用。 -h 在顯示符合範本樣式的那一列以前,不標示該列所屬的文件名稱。 -H 在顯示符合範本樣式的那一列以前,標示該列的文件名稱。 -i 忽略字符大小寫的差異。 -l 列出文件內容符合指定的範本樣式的文件名稱。 -L 列出文件內容不符合指定的範本樣式的文件名稱。 -n 在顯示符合範本樣式的那一列以前,標示出該列的編號。 -q 不顯示任何信息。 -R/-r 此參數的效果和指定「-d recurse」參數相同。 -s 不顯示錯誤信息。 -v 反轉查找。 -w 只顯示全字符合的列。 -x 只顯示全列符合的列。 -y 此參數效果跟「-i」相同。 -o 只輸出文件中匹配到的部分。
下面經過幾個例子熟悉grep命令
在文件中搜索一個單詞,命令會返回一個包含「match_pattern」的文本行:
grep match_pattern file_name grep "match_pattern" file_name
也能夠同時在多個文件中查找
grep "match_pattern" file_1 file_2 file_3 ...
輸出除以外的全部行 -v 選項:
grep -v "match_pattern" file_name
標記匹配顏色 --color=auto 選項:
grep "match_pattern" file_name --color=auto
使用正則表達式 -E 選項:
grep -E "[1-9]+" 或 egrep "[1-9]+"
注意egrep命令與grep -E效果類似
只輸出文件中匹配到的部分 -o 選項:
echo this is a test line. | grep -o -E "[a-z]+\." line. echo this is a test line. | egrep -o "[a-z]+\." line.
注意,在這裏咱們用到了聯合命令,經過一個 「 | 」 鏈接兩個命令,注意是按照從左到右的順序執行的
echo 命令表明輸出的命令,至關與程序設計中的print
統計文件或者文本中包含匹配字符串的行數 -c 選項:
grep -c "text" file_name
輸出包含匹配字符串的行數 -n 選項:
grep "text" -n file_name 或 cat file_name | grep "text" -n #多個文件 grep "text" -n file_1 file_2
打印樣式匹配所位於的字符或字節偏移:
echo gun is not unix | grep -b -o "not" 7:not #一行中字符串的字符便宜是從該行的第一個字符開始計算,起始值爲0。選項 -b -o 通常老是配合使用。
搜索多個文件並查找匹配文本在哪些文件中:
grep -l "text" file1 file2 file3...
在多級目錄中對文本進行遞歸搜索:
grep "text" . -r -n
忽略匹配樣式中的字符大小寫:
echo "hello world" | grep -i "HELLO" hello
選項 -e 制動多個匹配樣式:
echo this is a text line | grep -e "is" -e "line" -o is line #也可使用-f選項來匹配多個樣式,在樣式文件中逐行寫出須要匹配的字符。 cat patfile aaa bbb echo aaa bbb ccc ddd eee | grep -f patfile -o
在grep搜索結果中包括或者排除指定文件:
#只在目錄中全部的.php和.html文件中遞歸搜索字符"main()" grep "main()" . -r --include *.{php,html} #在搜索結果中排除全部README文件 grep "main()" . -r --exclude "README" #在搜索結果中排除filelist文件列表裏的文件 grep "main()" . -r --exclude-from filelist
使用0值字節後綴的grep與xargs:
#測試文件: echo "aaa" > file1 echo "bbb" > file2 echo "aaa" > file3 grep "aaa" file* -lZ | xargs -0 rm #執行後會刪除file1和file3,grep輸出用-Z選項來指定以0值字節做爲終結符文件名(\0),xargs -0 讀取輸入並用0值字節終結符分隔文件名,而後刪除匹配文件,-Z一般和-l結合使用。
grep靜默輸出:
grep -q "test" filename #不會輸出任何信息,若是命令運行成功返回0,失敗則返回非0值。通常用於條件測試。
打印出匹配文本以前或者以後的行:
#顯示匹配某個結果以後的3行,使用 -A 選項: seq 10 | grep "5" -A 3 5 6 7 8 #顯示匹配某個結果以前的3行,使用 -B 選項: seq 10 | grep "5" -B 3 2 3 4 5 #顯示匹配某個結果的前三行和後三行,使用 -C 選項: seq 10 | grep "5" -C 3 2 3 4 5 6 7 8 #若是匹配結果有多個,會用「--」做爲各匹配結果之間的分隔符: echo -e "a\nb\nc\na\nb\nc" | grep a -A 1 a b -- a b
個人官方博客 www.susmote.com