【Linux學習簡記 】數據流重定向<,<<,>,>>,2>,2>>

什麼是數據流?

數據流分三種,標準輸入流(stdin)、標準輸出流(stdout)、標準錯誤輸出流(stderr)

標準輸入流默認由鍵盤輸入產生,標準輸出流是執行命令時的輸出日誌,這些日誌包含正常的日誌輸出與命令掃行失敗的錯誤輸出,即標準輸出流與標準錯誤輸出流

什麼是數據流重定向?

將本應由鍵盤輸入或輸出到屏幕上的數據流重定向到文件或設備上(保存到文件或設備中),稱之爲數據流重定向

數據流重定向的作用(應用場景)

  • 屏幕輸出信息需要保存
  • 後臺執行程序,不想將日誌打在桌面上
  • 區分輸出標準輸出與標準錯誤輸出處理時
  • 丟棄已知錯誤信息,2> /dev/null

數據流的代號與表現方式

  • 標準輸入(stdin):代碼 0,使用 <<< 表示
  • 標準輸出(stdout):代碼 1,使用 >>> 表示
  • 標準錯誤輸出(stderr):代碼 2,使用 2>2>> 表示

>、>>、2>、2>> 區別

  • > :以【覆蓋】的方式,將【正確的數據】輸出到文件或設備上
  • >>:以【追加】的方式,將【正確的數據】輸出到文件或設備上
  • 2>:以【覆蓋】的方式,將【錯誤的數據】輸出到文件或設備上
  • 2>>:以【追加】的方式,將【錯誤的數據】輸出到文件或設備上

黑洞 /dev/null

當需要將某些日誌不重要的數據流重定向走,但又不想保存文件佔用空間時,重定向數據流 /dev/null 設備上,相當於將數據丟入黑洞

示例:

將標準輸出丟入黑洞

$ cat /etc/profile > /dev/null

將標準錯誤輸出丟入黑洞

$ find / -name .bashrc 2> /dev/null

將stdout與stderr輸出到同一文件或設備

非root用戶沒有權限訪問其他用戶家目錄,會輸出錯誤日誌,以下例子由此產生錯誤信息

1、【反例】分別設置stdout與stderr到同一文件

$ find / -name .bashrc > /tmp/stdtestlogs1 2> /tmp/stdtestlogs1

輸入流交叉,會導致文件內容次序錯亂

2、【正例1】輸出兩者到同一文件,語法1 [command]> [file] 2>&1

$ find / -name .bashrc > /tmp/stdtestlogs2 2>&1

3、【正例2】輸出兩者到同一文件,語法2 [command] &> [file]

$ find / -name .bashrc &> /tmp/stdtestlogs3

4、將所有日誌輸入黑洞

$ find / -name .bashrc > /dev/null 2>&1

5、將錯誤日誌輸入黑洞

$ find / -name .bashrc 2> /dev/null

標準輸入流重定向 < 與 <<

即,將原本由鍵盤輸入的數據,改由文件內容提供

在標準輸入流重定向中,<<< 作用不是覆蓋與追加了,< 表示使用文件提供數據,<< 用來【設置輸入結束的字符】

【例1】:將 ~/.bashrc 輸出重定向到 /tmp/stdintest

$ cat > /tmp/stdintest < ~/.bashrc

【例2】:設置【輸入結束字符】,將一段文字輸入到 /tmp/stdintest2

$ cat > /tmp/stdintest2 <<EOF
這是一條測試
這是一條測
這是一條
這是一
這是
這
EOF

總結自鳥哥私房菜第四版

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章