Linux學習:管道和重定向
---- 在Linux系統(tǒng)當中,大多數(shù)命令都很簡單,很少有復雜功能的命令。每個命令往往只實現(xiàn)一個或幾個很簡單的功能。
---- 我們可以通過將不同功能的命令組合在一起使用,以達到完成某個復雜功能的目的。
---- Linux中,幾乎所有命令的返回數(shù)據(jù)都是純文本的(因為命令都是運行在CLI - Command line Interface命令行界面下),而純文本
形式的數(shù)據(jù)又是絕大多數(shù)命令的輸入格式,這就讓多命令協(xié)作稱為可能。
---- Linux的命令行為我們提供了管道和重定向機制,多命令協(xié)作就是通過管道和重定向完成的。
---- 命令行Shell的數(shù)據(jù)流有以下定義:?
名稱
說明
編號
默認
STDIN
標準輸入
0
鍵盤
STDOUT
標準輸出
1
終端
STDERR
標準錯誤
2
終端
命令通過 STDIN 接收參數(shù)或數(shù)據(jù),通過 STDOUT 輸出結(jié)果或通過 STDERR 輸出錯誤。
通過管道和重定向,我們可以控制CLI的數(shù)據(jù)流。
---- 重定向
關(guān)鍵字
定義
>(1>)
將STDOUT重定向到文件(覆蓋)
>>
將STDOUT重定向到文件(追加)
2>
將STDERR重定向到文件(覆蓋)
2>&1
將STDERR與STDOUT結(jié)合
(標準錯誤重定向到標準輸出)
<
重定向STDIN
在csh環(huán)境下:
> 和 2>: 如果目標文件不存在,則創(chuàng)建文件。如果存在,則覆蓋。
將/etc/passwd的內(nèi)容作為輸入給grep命令,來查找root所在的行。
---- 管道
關(guān)鍵字
定義
|
將一個命令的STDOUT作為另一個命令的STDIN
?
[yanxia.dong@eslruntime07?exercise]$?ls file??out??outfile [yanxia.dong@eslruntime07?exercise]$?ls?-l?|?grep?out -rw-r--r--?1?yanxia.dong?users?29?Apr?15?15:12?out -rw-r--r--?1?yanxia.dong?users??6?Apr?15?15:22?outfile [yanxia.dong@eslruntime07?exercise]$?find?.?-user?yanxia.dong?|?grep?file ./file ./outfile [yanxia.dong@eslruntime07?exercise]$?find?.?-user?yanxia.dong?>?myout?|?grep?file [yanxia.dong@eslruntime07?exercise]$?cat?myout? . ./out ./file ./outfile ./myout [yanxia.dong@eslruntime07?exercise]$?find?.?-user?yanxia.dong?|?grep?file?>?myout [yanxia.dong@eslruntime07?exercise]$?cat?myout? ./file ./outfile
管道通常用來組合不同的命令,以實現(xiàn)一個復雜的功能。
重定向通常用來保存某命令的輸出信息或錯誤信息。可以用來記錄執(zhí)行結(jié)果或保存錯誤信息到一個指定的文件。(保存log等)
---- script 多個命令的輸出都需要記錄,可以用script
[yanxia.dong@eslruntime07?~]$?script Script?started,?file?is?typescript.
我們在啟動 script 時沒有指定文件名,它會自動記錄到當前目錄下一個名為 typescript 的文件中。也可以用 -a 參數(shù)指定文件名
[yanxia.dong@selruntime07?~]$?script?-a?my.txt Script?started,?file?is?my.txt
此時終端的輸出內(nèi)容被記錄到 my.txt 這個文件中。
退出 script 時,用 exit 命令。





