標籤:style http color io os 使用 ar strong for
(一)檔案建立命令1.touch命令
例如:touch abc命令在本地目錄中建立了一個名為abc的空檔案
2.cp命令
cp命令允許我們把一個檔案的內容複寫到同名或不同名的檔案中,複製得到的檔案可以在任何目錄。使用cp命令的一個風險是它會在不提示使用者的情況下很容易覆蓋掉不同目錄中的檔案-r選項支援遞迴複製。例如:cp -ar /usr/share/doc/. /doc/ 將複製來源目錄中所有子目錄以及相關檔案
3.mv命令
mv命令實質上市給檔案貼上不同的標籤,例如:mv file1 file2 命令就是把file1的名字改為file2mv命令也可以用於目錄
4.ln命令
連結檔案允許使用者編輯不同目錄中的同一個檔案永久連結包含了檔案的一個副本。只要永久連結檔案是在同一個分區中,則它們的索引號相同 ln /etc/samba/smb.conf smb.conf軟串連起著重新導向的作用。當我們開啟一個用軟連結建立的檔案時,則連結把我們重新導向到原來的檔案。ln -s /etc/samba/smb.conf smb.conf
5.rm命令
-r開關選項可以按遞迴方式進行-f開關選項可以覆蓋掉任何安全措施 rm -rf /root/a/b
6.目錄建立和刪除
mkdir和rmdir命令用於建立和刪除目錄-p no error if existing, make parent directories as needed例如 mkdir -p /test1/test2/test3 rmdir -p /test1/test2/test3
7.alias命令
可以用來簡化幾個命令。對於root使用者,預設的別名可以提供一點安全性
(二)檔案搜尋1.find命令
find / -name name.conf 此命令從根目錄開始搜尋find /usr -name name.conf 從/usr目錄下開始搜尋
2.locate命令
RHEL允許使用者建立一個資料庫,它儲存了全部的安裝檔案和目錄。locate命令的缺點是此資料庫通常每天只更新一次,這在/etc/cron.daily/mlocate.cron指令檔中有記錄這個指令檔可以直接由root使用者從命令列介面中執行。只要輸入這個檔案的完整目錄就行
(三)文字檔的管理1.cat命令
最簡單的文字檔讀取命令是cat。cat filename命令可以翻頁顯示filename檔案的內容。
2.less和more命令
用more filename命令可以翻頁顯示文字檔的內容,每次一個螢幕從頭到尾顯示用less filename命令,我們可以用PAGE UP和PAGE DOWN鍵向前或向後翻頁查看銅件的文本less命令有幾個功能是more和cat這兩個命令所沒有的。它可以讀取用Gzip格式壓縮的文字檔,通常這種檔案的副檔名為.gz
3.head和tail命令
head 命令讀取檔案的頭部
文法:$ head –n N file 列印前N行 $ head –n -N file 列印除最後N行外的所有行
tail命令總是讀取檔案的尾部
文法:$ tail –n N file 列印後N行 $ taill –n +N file 列印除了前N行之外的所有行
(四)處理文字資料流的命令
文字資料流就是資料的流動。例如,cat filename命令把來自filename的資料流輸出到螢幕上。當這些檔案變大時,最好先用過濾器命令對這些流進行處理。
1.sort命令
可以用多種方法對檔案的內容進行排序。預設情況下,sort命令按照字母順序將檔案內容按每行首字元進行排序。
2.grep命令
grep命令用於文本搜尋,預設讀取一個檔案的所有行$ grep match_pattern filename 或者 $ grep “match_pattern” filename一個grep命令也可以對多個檔案進行搜尋 $grep "match_text" file1 file2 file3 ...grep命令通常將match_pattern視為萬用字元。如果要使用Regex,需要添加-E選項——這意味著使用擴充(extended)Regex,或者使用預設允許Regex的egrep命令。 例如: $ grep -E "[a-z]+" 或者 $egrep "[a-z]" 匹配url的Regex $ egrep -o "http://[a-zA-Z0-9.]+\.[a-zA-z]{2,3}" index.html--color=atuto 選項:可以在輸出行中重點標記出匹配到的單詞-o選項:只輸出檔案中匹配到的文本部分。 例如:輸出每個單詞 echo this is a test file | egrep -o "\b[[:alpha:]]+\b"-v選項:列印包含match_pattern的行之外的所有行-c選項:統計檔案或文本中包含匹配字串的行數-b選項: 列印樣式匹配所位於的字元或位元組位移,選項-b總是和-o配合使用 例如:$echo gnu is not unix | grep -b -o "not"其他選項:1)遞迴搜尋檔案 $ grep "text‘ . -R -n2) 忽略樣式中的大小寫 $ echo hello world | grep -i "HELLO"3) 用grep匹配多個樣式 $ grep -e "pattern1" -e "pattern2" 或者 在樣式檔案中逐行寫下需要匹配的樣式,然後用選項-f執行grep。 $echo hello this is cool | grep -f pat_file4) 在grep搜尋中包括或排除檔案 只在目錄中遞迴搜尋所有的.c和.cpp檔案: $ grep "main()" . -r --include *.{c,cpp} 注意:some{string1,string2}會擴充成somestring1 somestring2在搜尋中排除所有的README檔案: $ grep "main()" . -r --exclude "README"如果要排除目錄,可以使用 --exclude-dir 選項如果需要從檔案中讀取所需要排除的檔案列表,使用 --exclude-from FILE5) 使用0值位元組尾碼的grep與xargs在下面的命令序列中,grep輸出以0值位元組作為終結符的檔案(\0)。這可以用grep的-Z選項來指定。xargs -0 讀取輸入並用0值位元組終結符分割檔案名稱:$ grep "test" file* -lZ | xargs -0 rm 。-Z通常和-l結合使用6)grep的靜默輸出:在靜默模式(quiet mode)中,grep命令不會向標準輸出列印任何輸出。它僅是運行命令,然後根據命令執行成功與否返回退回狀態。使用-q7) 列印出匹配文本之前或之後的行要列印匹配某個結果之後的3行,使用-A選項 -A NUM, --after-context=NUM。例如 $seq 10 | grep -A 3 5要列印匹配某個結果之前的3行,使用-B選項 -B NUM, --before-context=NUM。例如 $seq 10 | grep -B 3 5要列印匹配某個結果之前以及之後的3行,使用-C選項 -C NUM, -NUM, --context=NUM。例如 $seq 10 | grep-C 3 5如果有多個匹配,那麼以一行“--”作為各匹配之間的定界符。例如 $ echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
3.diff命令
diff命令可以找出兩個檔案的差別。diff /root/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0
4.wc命令
wc是一個用於統計的工具。它是Word Count(單詞統計)的縮寫。
1)統計行數$ wc -l file2)統計單詞數 $ wc -w file3)統計字元數 $ wc -c file4)當不適用任何選項執行wc時:$ wc file 它只會列印檔案的行數、單詞數和字元數,彼此之間用定位字元分割
5.sed命令
sed命令是流編輯(stream editor)的縮寫符,用於搜尋並修改檔案中指定的單詞甚至文字資料流。如果要替換所有內容,需要在命令尾部加上參數g 其方法如下:$ sed ‘s/pattern/replace_string/g‘ file 尾碼/g意味著sed會替換每一處匹配。但是有時候我們不需要替換前N處匹配,而是需要替換剩下的匹配。當需要從第N處匹配開始替換時,可以使用/Ng 例如: $echo this thisthisthisthis | sed ‘s/this/THIS/4g‘sed常用組合命令1)移除空白行2) 已匹配字串標記& $ echo this is an example | sed ‘s/\w\+/[&]/g‘ Regex \w\+ 匹配每一個單詞,然後我們用[&]替換它,&對應於之前所匹配到的單詞3) 子串匹配標記\1 &代表匹配給定樣式的字串4)組合多個運算式 5) 引用
sed可以替換給定文本中的字串。 $ sed ‘s/pattern/replace_string/‘ file-i選項:將替換結構應用於原檔案。 例如:$ sed -i ‘s/text/replace/‘ file 等價於 $ sed ‘s/text/replace/‘ file > newfile ; $mv newfile file
$ sed ‘/^$/d‘ file
在sed中,用&標記匹配樣式的字串,就能夠在替換字串時使用已匹配的內容
$ echo seven EIGNT | sed ‘s/\([a-z]\+\) \([A-Z]\+\)/\2 \1/‘ ([a-z]\+\)匹配第一個單詞 ([A-Z]\+\)匹配第二個單詞 \1和、2用來引用它們。這種醫用被稱為反向參考(back referencing)。在替換部分,它們的次序被更改為 \2 \1 因此結果就呈現出逆序的形式。
$ sed ‘expression‘ | sed "expression‘ 等價於 $ sed ‘expression; expression‘
sed運算式通常用單引號引用。不過也可以使用雙引號。雙引號會通過對錶達式求值來對其進行擴充。當我們想在sed運算式中使用一些變數字串時,雙引號就有用武之地了。例如: $ text=hello $echo hello world | sed "s/$text/HELLO/" 結果HELLO word, $text的求值結果是hello
6.awk命令一個awk指令碼通常由3部分組成: BEGIN語句塊、END語句塊和能夠使用模式比對的通用語句塊。例如 echo -e "line1\nline2" | awk ‘BEGIN {print "Start"} {print} END{print "End"}‘關於print,需要記住兩件重要的事情:當print的參數是以逗號進行分割時,參數列印時則以空格作為定界符;在awk的print語句中,雙引號是被當做拼接操作符(concatenation operator)使用的。例如:$ echo | awk ‘{ var1="v1"; var2="v2"; var3="v3"; \ print var1,var2,var3;}‘ 輸出 v1 v2 v3$ echo | awk ‘{ var1="v1"; var2="v2"; var3="v3"; \ print var1 "-" var2 "-" var3;}‘ 輸出 v1-v2-v3補充內容1)特殊變數NF:表示欄位數量(number of fields ),在執行過程中對應於當前的欄位數。$0 :這個變數包含執行過程中當前行的常值內容$1 :這個變數包含第一個欄位的常值內容$2 :這個變數包含第二個欄位的常值內容例如 我們可以用print $NF列印一行中最後一個欄位,用$(NF-1)列印倒數第二個欄位,其他欄位依次類推即可。要列印從M行到N行這個範圍內的所有文本,文法 $ awk ‘NR==M, NR==N‘ filename要列印處於start_pattern與end_pattern之間的文本,文法 $ awk ‘/start_pattern/, /end_pattern/‘ filename 用於awk中的樣式為Regex2)將外部變數值傳遞給awk還有另一種靈活的方法可以將多個外部變數傳遞給awk 例如:$ var1="Variable1" ;var2="Variable2" $ echo | awk ‘{ print v1,v2 }‘ v1=$var1 v2=$var2在上面的方法中,變數之間用空格分隔,以鍵-值對的形式(v1=$var1 v2=$var2 )作為awk的命令列參數緊隨在BEGIN、{ }和END語句塊之後。3)用getline讀取行例如:seq 5| awk ‘BEGIN { getline;print $0}{print $0}‘4)用樣式對awk處理的行進行過濾$ awk ‘NR < 5‘ # 行號小於5的行$ awk ‘NR==1,NR==4‘ #行號在1到5之間的行$ awk ‘/linux/‘ # 包含樣式linux的行(可以用Regex來指定樣式)$ awk ‘!/linux/‘ # 不包含樣式linux的行5)設定欄位定界符在BEGIN語句塊中則可以用FS=“delimiter” 設定輸出欄位的定界符 $ awk ‘BEGIN {FS=":"} {print $NF }‘ /etc/passwd6) 從awk中讀取命令輸出awk支援以文本作為索引的關聯陣列7) 在awk中使用迴圈awk有很多內建的字串控制函數:length(String)index(string,search_string)split(string,array,delimiter)substr(string,start-position,end-position)sub( regex, replacement_str, string) 將Regex匹配到的第一處內容替換成replacement_strgsub( regex, replacement_str, string) 將Regex匹配到的所有內容替換成replacement_strmatch( regex, string) 檢查Regex是否能夠匹配字串。如果能夠匹配,返回非0值;否則,返回0。match()有兩個相關的特殊變數,RSTART包含Regex所匹配內容的起始位置,而RLENGTH包含Regex所匹配內容的長度。
awk被設計用於資料流。它非常有趣,其原因就在於它可以對列和行進行操作。awk指令碼的結構基本如下所示: awk ‘ BEGIN { print "start" } pattern { commands } END { print "end" } file
NR:表示記錄數量(number of records),在執行過程中對應於當前行號。
。。。
$N :這個變數包含第N個欄位的常值內容
例如:$var=10000 $ echo | awk -v VARIABLE=$var ‘{ print VARIABLE }‘
通常,grep預設讀取一個檔案的所有行。如果只想讀取某一行,可以使用geiline函數。有時候,我們需要從BEGIN語句塊中讀取第一行。
我們可以為需要處理的行指定一些條件,例如:
預設的欄位定界符是空格。我們可以用-F “delimiter”明確指定一個界定符: $ awk -F: ‘{ print $NF }‘ /etc/passwd
$echo | awk ‘{ "grep root /etc/password" | getline cmdout; print cmdout }‘ 通過使用getline,能夠將外部shell命令的輸出讀入變數cmdout
在awk中可以使用for迴圈,其格式: for( i=0;i<10;i++) { print $i; } 或者 for( i in array) { print array[i] }
Shell 命令--檔案建立、搜尋命令--總結自《Linux Shell 指令碼攻略》