015 Linux 標準輸入輸出、重定向、管道和後臺啟動程式命令

不甩鍋的碼農發表於2022-02-15

file

1 三種標準輸入輸出

  1. 標準輸入(STDIN),檔案描述符號為:0,預設從鍵盤獲取輸入;
  2. 標準輸出(STDOUT),檔案描述符號為:1,預設輸出到顯示終端;
  3. 標準錯誤輸出(STDERR),檔案描述符號為:2,預設輸出到顯示終端;

2 什麼是重定向?如何重定向?

(1)什麼是重定向?

IO 重定向是為了改變預設輸入、輸出的位置,如預設情況下標準輸出(STDOUT),標準錯誤輸出(STDERR)都是輸出到顯示終端,如對標準輸出、標準錯誤輸出改變其預設輸出位置,可重定向輸出到指定的檔案中(實際工作中經常這麼使用),要重定向就要配合一些語法符號。

(2)如何重定向?

  • Linux Shell 使用 " > " 和 ">>"  進行對檔案描述符進行重定向
  1. ">" # 使用本次輸出內容替換原有檔案的內容;
  2. ">>"  把本次輸出追加到原檔案的後面;
  • 常見的一些輸出重定向(標準輸出和標準錯誤輸出)表示
  1. 【>】標準輸出覆蓋重定向
  2. 【>>】標準輸出追加重定向
  3. 【2>】標準錯誤輸出覆蓋重定向
  4. 【2>>】標準錯誤輸出追加重定向
  5. 【&>】將標準輸出和標準錯誤輸出都同時覆蓋重定向
  6. 【&>>】將標準輸出和標準錯誤輸出都同時追加重定向

3 管道符以及和它容易混淆的一些符號使用

(1)管道符 |

  • 格式 : 命令1 | 命令2 ...
  • 解釋: 命令1 的輸出作為命令2的操作物件

(2)&和&&、|和|| 區別、分號(;)用法

  • & 表示任務在後臺執行;
  • && 邏輯與,只有前一條命令執行成功時,才執行後一條命令 ,如 echo '1' && echo '2';
  • | 表示管道,上一條命令的輸出,作為下一條命令操作物件;
  • || 邏輯或,只有上一條命令執行失敗後,才執行下一條命令;
  • ";" 用法方式:command1 ; command2,用 ; 號隔開每個命令,每個命令按照從左到右的順序執行,彼此之間不關心是否失敗, 所有命令都會執行。

4 nohup 後臺啟動程式命令和案例

  • nohup 讓某個程式在後臺執行。
  • nohup 英文全稱 no hang up(不掛起),用於在系統後臺不結束通話地執行命令,退出終端不會影響程式的執行。
  • nohup 命令,在預設情況下(非重定向時),會輸出一個名叫 nohup.out 的檔案到當前目錄下,如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 $HOME/nohup.out 檔案中。
# 以後臺程式執行啟動 grafana 命令,& 放在命令到結尾,表示後臺執行
nohup ./bin/grafana-server  start > grafana.log 2>&1 &

# 2>&1 解釋:將標準錯誤輸出(2 表示)重定向到標準輸出(&1 表示) ,標準輸出(&1) 再被重定向輸入到 grafana.log 檔案中。

5 小結

  • 總結了 Linux 中標準輸入(0 表示),標準輸出(1 表示),標準錯誤輸出(2 表示)以及它們的重定向用法;
  • 接著簡述了管道符 | 用法,以及 &和&&、|和|| 區別、分號(;)用法;
  • 最後結合 nohup 後臺啟動程式命令在實際工作中和上述提到的命令的綜合使用。

「不甩鍋的碼農」原創,轉載請註明來源,未經授權禁止商業用途!同名 GZH 請關注!

相關文章