linux入門之數據流重定向

基本概念

什么是數據流?

  • 定義:以規定順序被讀取一次的數據序列。最初在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重定向
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中的文件內容廣播出去,如下圖廣播效果。


wall輸入重定向
wall輸入重定向

作業

給大家來一個彩色的火焰,祝愿大家紅紅火火!


紅紅火火
紅紅火火

友情提示

我正在實驗樓擼代碼,你也快來!800+編程實戰教程,無需搭環境,直接練習!用我的鏈接注冊,你我都能獲得3個實驗豆!http://www.shiyanlou.com/register?inviter=NTY0MzE5MTkxNzAx


感謝您花費時間閱讀這篇文章!!通過上述講解是不是讓您對linux的數據流重定向的情況有了進一步的了解了呢?是的話請給個贊吧!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容