基礎(chǔ)
0: 對應(yīng)標(biāo)準(zhǔn)輸入流
1: 對應(yīng)標(biāo)準(zhǔn)輸出流
2: 對應(yīng)標(biāo)準(zhǔn)錯誤流
1.管道
管道就是從某條命令的輸出流,作為另外一條命令的輸入流捡多。
eg: 通常情況下我們輸入ls -l
命令時公你,將打印當(dāng)前目錄下文件詳情數(shù)據(jù)祟绊,并將輸出結(jié)果定向到標(biāo)準(zhǔn)輸出流(默認(rèn)就是屏幕弓叛, 在系統(tǒng)中以文件標(biāo)識符的形式存在);當(dāng)我們輸入 grep asd demo.txt
命令時灾茁,從demo文本文件中查找包含asd 這條文本中的行內(nèi)容窜觉, 從demo文件中獲取內(nèi)容的這個動作,其實就是從文件輸入流中獲缺弊ā禀挫; 那么ls -ls | grep asd
就是從標(biāo)準(zhǔn)輸出流重定向到標(biāo)準(zhǔn)輸入流,供下一條命令進(jìn)行操作拓颓;
通常情況下管道后面的命令grep asd
需要支持從標(biāo)準(zhǔn)輸入流中讀取數(shù)據(jù)语婴, 如果命令不支持,則需要使用xargs
來進(jìn)行擴(kuò)展驶睦;
#下面這條命令將會輸出空砰左, 因為echo 命令不支持從標(biāo)準(zhǔn)輸入流中讀取數(shù)據(jù)
ls -l | echo -e
#如需執(zhí)行上條指令的效果,需運行如下命令
ls -l | xargs echo -e
2.輸出重定向
輸出重定向就是將某條命令的輸出內(nèi)容從標(biāo)準(zhǔn)輸出流(默認(rèn)的標(biāo)準(zhǔn)輸出流是顯示器) 重定向到另一條輸出流上(其他文件)啥繁;
eg: 當(dāng)我們執(zhí)行ls -l >> demo.txt
命令時菜职, 我們希望將當(dāng)前命令執(zhí)行結(jié)果保存到demo文件中青抛,并以追加的形式保存旗闽;該條命令的執(zhí)行原理是:打印當(dāng)前目錄下文件詳情數(shù)據(jù),并將輸出結(jié)果定向到標(biāo)準(zhǔn)輸出流蜜另, 然后由于后面接著輸出重定向适室, 將重定向到demo.txt文件中;
# 將命令輸出到文件中
ls -l >> demo.txt
# 將命令輸出到文件中举瑰,如果文件中已存在內(nèi)容捣辆, 則刪除后寫入
ls -l > demo.txt
#將輸出內(nèi)容丟棄
ls -l > /dev/null
>/dev/null 2>&1
與 2>&1 >/dev/null
區(qū)別
前者:標(biāo)準(zhǔn)輸出 與 錯誤輸出 都輸出到 null, 即丟棄數(shù)據(jù)
后者:錯誤輸出 在屏幕顯示此迅,標(biāo)準(zhǔn)輸出 丟棄
重定向綁定:
2>&1
這就是一個最形象的重定向綁定汽畴,此語句將錯誤輸出將和標(biāo)準(zhǔn)輸出綁定到同一個文件描述符上,即它們現(xiàn)在都輸出到屏幕上耸序。
3.輸入重定向
輸入重定向就是某條命令讀取的內(nèi)容是從非標(biāo)準(zhǔn)輸入流讀热绦(默認(rèn)的標(biāo)準(zhǔn)輸入流是鍵盤)
eg: 當(dāng)我們執(zhí)行cat < demo.txt
其執(zhí)行原理:cat 命令本該從鍵盤中讀取內(nèi)容的操作改為從文件中讀取內(nèi)容,執(zhí)行cat命令坎怪, 將結(jié)果輸出到標(biāo)準(zhǔn)輸出流中罢坝;
# 從文件流中讀取內(nèi)容
cat < demo.txt
xargs echo < demo.txt
# 從標(biāo)準(zhǔn)輸入設(shè)備中讀取
cat << EOF
hello, world
hello, tomorrow
EOF
# 將 ls輸出內(nèi)容排序后輸出到 sorted_file.txt
sort < ls -s > sorted_file.txt