基本概念
什么是數據流?
- 定義:以規定順序被讀取一次的數據序列。最初在1998年由Henzinger在文獻87中提出這個概念。
- 類別分為三種:標準輸入(stdin),標準輸出(stdout)和標準錯誤輸出(stderr)。
- 標準輸出: 指的是命令執行所回傳的正確信息。
- 標準錯誤輸出:指的是命令執行失敗后,所回傳的錯誤信息。
- 默認都是將信息打印在屏幕上的。
如下表所示:
文件描述符 | 設備文件 | 說明 |
---|---|---|
0 | /dev/stdin | 標準輸入 |
1 | /dev/stdout | 標準輸出 |
2 | /dev/stderr | 標準錯誤 |
什么是重定向?什么是重定向描述符?
- 重定向:重新定個方向轉到正確位置。在之前linux入門系列文章中已經多次出現過>或>>操作了,并知道他們分別是將標準輸出導向一個文件或追加到一個文件中。這其實就是重定向。
- 重定向描述符: & 是一個描述符,若1或2前不加&,會被當成一個普通文件。
- 常用的方法詳見下表:
表達式 | 含義 |
---|---|
1>&2 | 把標準輸出重定向到標準錯誤 |
2>&1 | 把標準錯誤輸出重定向到標準輸出 |
&>filename | 把標準輸出和標準錯誤輸出都重定向到文件filename 中 |
什么是數據流重定向?
改變數據流的標準流向,使之流向指定的文件或設備。
本文重點
介紹如何在Linux中利用shell把執行命令所回傳的正確信息(標準輸出信息)流向一個文件,而將所回傳的錯誤信息(標準錯誤輸出)流向別一個文件,并把這兩個文件的信息保存下來,而在屏幕上不出現任何該命令執行所回傳的信息。
實例操作
"實踐出真知",還是讓我們一起通過如下幾個實驗來深入理解上面的概念吧。
1) 標準輸出重定向
重定向標準輸出到文件,這是一個很實用的操作。詳見如下實例:
$ echo 'hello shiyanlou' > test.txt
$ echo 'www.shiyanlou.com' >> test.txt
$ cat test.txt
其中 ,“>”和“>>”分別是將標準輸出導向一個文件或追加到一個文件中。
“>” :相當于清空源文件內容,重新寫入新的內容。
“>>” :相當于保留源文件內容,在最后一行追加內容。
如果源文件不存在,兩者都會新建源文件。
2)Cat輸出重定向
利用cat的連續輸出(heredoc方式)重定向標準輸出到一個文件
$ cat
(按Ctrl+C退出)
cat重定向到test.c文檔,在heredoc里輸入內容,然后使用end結束輸入。其中“<< end ”指的是結束輸入內容。
操作實現如下:
cat重定向
3)標準錯誤重定向
將標準錯誤重定向同樣是一個很實用的操作。可以將標準輸出和標準錯誤分別重定向不同的兩個文件,亦可以重定向到同一個文件。根據實際項目的需要,可自行判斷。此處僅給出相關實例,供大家參考使用。
- 重定向到兩個文件
$ 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 或稱空設備,是一個特殊的設備文件,它通常被用于丟棄不需要的輸出流,或作為用于輸入流的空文件,這些操作通常由重定向完成。讀取它則會立即得到一個EOF。
# 清空一個日志文件 back.log
$ cat /dev/null > back.log
5)標準輸入重定向
- 這里用wall來廣播一下之前編輯的autorun.log文件,
# wall 0< autorun.log
意思就是將autorun.log中的文件內容廣播出去,如下圖廣播效果。
作業
給大家來一個彩色的火焰,祝愿大家紅紅火火!
友情提示
我正在實驗樓擼代碼,你也快來!800+編程實戰教程,無需搭環境,直接練習!用我的鏈接注冊,你我都能獲得3個實驗豆!http://www.shiyanlou.com/register?inviter=NTY0MzE5MTkxNzAx
感謝您花費時間閱讀這篇文章!!通過上述講解是不是讓您對linux的數據流重定向的情況有了進一步的了解了呢?是的話請給個贊吧!