基本概念
什么是數(shù)據(jù)流顺献?
- 定義:以規(guī)定順序被讀取一次的數(shù)據(jù)序列。最初在1998年由Henzinger在文獻(xiàn)87中提出這個概念。
- 類別分為三種:標(biāo)準(zhǔn)輸入(stdin),標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯誤輸出(stderr)扬虚。
- 標(biāo)準(zhǔn)輸出: 指的是命令執(zhí)行所回傳的正確信息。
- 標(biāo)準(zhǔn)錯誤輸出:指的是命令執(zhí)行失敗后球恤,所回傳的錯誤信息辜昵。
- 默認(rèn)都是將信息打印在屏幕上的。
如下表所示:
文件描述符 | 設(shè)備文件 | 說明 |
---|---|---|
0 | /dev/stdin | 標(biāo)準(zhǔn)輸入 |
1 | /dev/stdout | 標(biāo)準(zhǔn)輸出 |
2 | /dev/stderr | 標(biāo)準(zhǔn)錯誤 |
什么是重定向咽斧?什么是重定向描述符路鹰?
- 重定向:重新定個方向轉(zhuǎn)到正確位置贷洲。在之前l(fā)inux入門系列文章中已經(jīng)多次出現(xiàn)過>或>>操作了收厨,并知道他們分別是將標(biāo)準(zhǔn)輸出導(dǎo)向一個文件或追加到一個文件中晋柱。這其實就是重定向。
- 重定向描述符: & 是一個描述符诵叁,若1或2前不加&雁竞,會被當(dāng)成一個普通文件。
- 常用的方法詳見下表:
表達(dá)式 | 含義 |
---|---|
1>&2 | 把標(biāo)準(zhǔn)輸出重定向到標(biāo)準(zhǔn)錯誤 |
2>&1 | 把標(biāo)準(zhǔn)錯誤輸出重定向到標(biāo)準(zhǔn)輸出 |
&>filename | 把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤輸出都重定向到文件filename 中 |
什么是數(shù)據(jù)流重定向拧额?
改變數(shù)據(jù)流的標(biāo)準(zhǔn)流向碑诉,使之流向指定的文件或設(shè)備。
本文重點
介紹如何在Linux中利用shell把執(zhí)行命令所回傳的正確信息(標(biāo)準(zhǔn)輸出信息)流向一個文件侥锦,而將所回傳的錯誤信息(標(biāo)準(zhǔn)錯誤輸出)流向別一個文件进栽,并把這兩個文件的信息保存下來,而在屏幕上不出現(xiàn)任何該命令執(zhí)行所回傳的信息恭垦。
實例操作
"實踐出真知"快毛,還是讓我們一起通過如下幾個實驗來深入理解上面的概念吧。
1) 標(biāo)準(zhǔn)輸出重定向
重定向標(biāo)準(zhǔn)輸出到文件番挺,這是一個很實用的操作唠帝。詳見如下實例:
$ echo 'hello shiyanlou' > test.txt
$ echo 'www.shiyanlou.com' >> test.txt
$ cat test.txt
其中 ,“>”和“>>”分別是將標(biāo)準(zhǔn)輸出導(dǎo)向一個文件或追加到一個文件中玄柏。
“>” :相當(dāng)于清空源文件內(nèi)容襟衰,重新寫入新的內(nèi)容。
“>>” :相當(dāng)于保留源文件內(nèi)容粪摘,在最后一行追加內(nèi)容瀑晒。
如果源文件不存在,兩者都會新建源文件徘意。
2)Cat輸出重定向
利用cat的連續(xù)輸出(heredoc方式)重定向標(biāo)準(zhǔn)輸出到一個文件
$ cat
(按Ctrl+C退出)
cat重定向到test.c文檔苔悦,在heredoc里輸入內(nèi)容,然后使用end結(jié)束輸入映砖。其中“<< end ”指的是結(jié)束輸入內(nèi)容间坐。
操作實現(xiàn)如下:
cat重定向
3)標(biāo)準(zhǔn)錯誤重定向
將標(biāo)準(zhǔn)錯誤重定向同樣是一個很實用的操作∫赝耍可以將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤分別重定向不同的兩個文件竹宋,亦可以重定向到同一個文件。根據(jù)實際項目的需要地技,可自行判斷蜈七。此處僅給出相關(guān)實例,供大家參考使用莫矗。
- 重定向到兩個文件
$ pwd
/home/shiyanlou/
$ cd mybin
$ back.sh 1>>/home/shiyanlou/Code/back.log 2>>/home/shiyanlou/Code/error.log
將正常日志輸出到back.log 飒硅;將錯誤日志輸出到error.log砂缩。
- 重定向到一個文件
$ pwd
/home/shiyanlou/
$ cd mybin
$ back.sh >>/home/shiyanlou/back.log 2>>&1
將正常日志和錯誤日志都輸出到back.log 。
4)巧用 /dev/null
- /dev/null 或稱空設(shè)備三娩,是一個特殊的設(shè)備文件庵芭,它通常被用于丟棄不需要的輸出流,或作為用于輸入流的空文件雀监,這些操作通常由重定向完成双吆。讀取它則會立即得到一個EOF。
# 清空一個日志文件 back.log
$ cat /dev/null > back.log
5)標(biāo)準(zhǔn)輸入重定向
- 這里用wall來廣播一下之前編輯的autorun.log文件会前,
# wall 0< autorun.log
意思就是將autorun.log中的文件內(nèi)容廣播出去好乐,如下圖廣播效果。
作業(yè)
給大家來一個彩色的火焰瓦宜,祝愿大家紅紅火火蔚万!
友情提示
我正在實驗樓擼代碼,你也快來临庇!800+編程實戰(zhàn)教程反璃,無需搭環(huán)境,直接練習(xí)苔巨!用我的鏈接注冊版扩,你我都能獲得3個實驗豆!http://www.shiyanlou.com/register?inviter=NTY0MzE5MTkxNzAx
感謝您花費時間閱讀這篇文章V对蟆礁芦!通過上述講解是不是讓您對linux的數(shù)據(jù)流重定向的情況有了進(jìn)一步的了解了呢?是的話請給個贊吧悼尾!