Unix philosophy:do one thing and do it well
Unix 3準(zhǔn)則:
(1)一次只做一件事,并做到最好
(2)能夠與其他程序協(xié)同工作
(3)能夠處理文本流
如何與其他程序協(xié)同:重定向redirection和pipes管道
輸入輸出文本流I/O Stream


Linux中使用>和>>符來重定向標(biāo)準(zhǔn)輸入
1.1輸出重定向:將某個(gè)命令默認(rèn)指向stdout或stderr的輸出文本轉(zhuǎn)而指向一個(gè)文件,即使命令輸出到某個(gè)指定文件中,而不是輸出到終端屏幕或者終端窗口中了
如何進(jìn)行輸出重定向:
ls -l /tmp/example/ 1>./stdout.txt【1:文件描述符,表示被重定向的是標(biāo)準(zhǔn)輸出】如果stdout.txt文件原本不存在,文件將被創(chuàng)建;文件原本存在,內(nèi)容將被覆蓋
ls -l /tmp/example/ 1>> ./stdout.txt【雙右尖括號(hào),命令的輸出將添加到文件原來內(nèi)容后面】
ls -l /tmp/example/ 2> ./stderr.txt【2:重定向錯(cuò)誤輸出】
ls -l /tmp/example/file01 /tmp/example/file04
1>stdout.txt 2>stderr.txt 【同時(shí)重定向標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出】
ls -l /tmp/example/file01 /tmp/example/file04
&>std.txt 【同時(shí)重定向標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出并輸出到同一個(gè)文件當(dāng)中】
例一:利用文件輸出重定向結(jié)合echo命令創(chuàng)建文本文件

?-e輸出轉(zhuǎn)義字符
例二:用文件輸出重定向來忽略命令錯(cuò)誤輸出,即執(zhí)行某個(gè)命令但不希望在屏幕上顯示命令的錯(cuò)誤輸出,錯(cuò)誤輸出被重定向到了一個(gè)名為/dev/null文件中
ls -l /tmp/example/file01 /tmp/example/file04
/dev/null文件是一個(gè)非常特殊的塊設(shè)備文件,可視為系統(tǒng)的黑洞
1.2輸入重定向:讓命令從指定的文件中獲取輸入,而非從stdin中,這常常指從鍵盤獲取輸入
<和<<符來重定向標(biāo)準(zhǔn)輸入
例一:
tr命令往往用于從標(biāo)準(zhǔn)輸入中替換特定字符,并將結(jié)果寫到標(biāo)準(zhǔn)輸出

tr [準(zhǔn)備要替換的字符][要替換成的字符]
例二:
sort展示了輸入重定向的一種特殊形式:here document
sort -k[關(guān)鍵字字段序號(hào)][要排序的文本文件]

界定符EOF不一定是EOF但結(jié)尾的界定符要頂格寫,前后無空格s
2管道:一種特殊的輸入輸出重定向
將一個(gè)命令的標(biāo)準(zhǔn)輸出重定向?yàn)榱硪粋€(gè)命令的標(biāo)準(zhǔn)輸入。
管道操作符|

構(gòu)造命令管道:使用管道操作符將命令連起來
命令1的輸出作為命令2的輸入,命令2的輸出作為命令3的輸入,命令n的輸出作為最終輸出方直接顯示在屏幕上
例子1:對(duì)命令的輸出進(jìn)行分頁查看
ls -l /etc |less
例子2:
grep正則表達(dá)式【文本查找命令后可跟2個(gè)參數(shù)】
grep[關(guān)鍵字][目標(biāo)文件]
ls -l /etc |grep ‘ssh’ 【查找ls命令輸出中帶有ssh字樣的行】
例子3:文本提取和統(tǒng)計(jì)
cut文本切割命令,cut用于切割文本文件或者標(biāo)準(zhǔn)輸出中的指定列,并輸出
cut -c【用字符列切割文本,-c選項(xiàng)后面緊跟的數(shù)字表示切割的字符列序號(hào),可以切割多列,數(shù)字之間用逗號(hào)隔開】
cat ~/install.log| cut -c 1,2【切割輸出當(dāng)前用戶家目錄下的install.log的前兩列字符】
cat /etc/passwd |cut -f1 -d”:”【cut 連用-d -f 兩個(gè)選項(xiàng),按指定分隔符分隔開的文本來切割文本,其中-d選項(xiàng)后面緊跟的符號(hào)表示分隔符,-f選項(xiàng)后面緊跟的數(shù)字表示切割的字段序列號(hào)】【這里切割輸入/etc/passwd文件的第一個(gè)字段,字段用“:”隔開】
wc 文本統(tǒng)計(jì)命令,wc可以統(tǒng)計(jì)文本文件或者標(biāo)準(zhǔn)輸出中的文本行數(shù)單詞數(shù)和字節(jié)數(shù)
wc -l /etc/passwd【僅表示統(tǒng)計(jì)文本行數(shù)】
ls -l ~|cut -c1|grep “d”|wc -l【統(tǒng)計(jì)當(dāng)前用戶家目錄下所有目錄文件的數(shù)目】