liunx標準輸入與輸出

2022-09-17 06:01:17

一、Linux提供了三種輸入/輸出通道給程式
在linux中,每個程序都會有三個檔案,並且這三個檔案會進行重定向處理:
1. 標準輸入(STDIN) - 預設為鍵盤
2. 標準輸出(STDOUT) - 預設為終端視窗
3. 標準錯誤(STDERR) - 預設為終端視窗

4. 2>&1中的數位就是上面重定向後的數位
  0: 表示鍵盤輸入
  1:將資訊輸入到螢幕(一般linux命令都是預設為1)
  2:將資訊輸入到錯誤輸出

 

二、標準輸出和標準錯誤能重定向到檔案中: 

1. 命令 > 檔案:重定向標準輸出到檔案

2. 命令 2> 檔案:重定向標準錯誤到檔案

3. 命令 &> 檔案:重定向所有的輸出到檔案

ps:使用>時會將檔案內容會覆蓋,使用>>時檔案內容追加

 

三、範例:重定向輸出給一個檔案範例

當前資料夾存在內容為hello world的test001.txt的檔案,但是沒有test002.txt

1. cat兩個檔案時將標準輸出與標準錯誤至控制檯:

cat test001.txt test002.txt

 

2. 重定向標準輸出到檔案,不包含標準錯誤 

cat test001.txt test002.txt  > 1.out

3. 重定向標準錯誤到檔案

cat test001.txt test002.txt  2> 1.out

 4. 重定向準輸出與標準錯誤輸出至檔案

cat test001.txt test002.txt  &> 1.out

 5. 重定向準輸出與標準錯誤輸出至兩個不同的檔案

cat test001.txt test002.txt  > 1.out  2> 2.out

 

三、常見用法:

1. 後臺程式執行並,並將紀錄檔儲存至預設地址nohup.out:

nohup java -jar wiremock-jre8-standalone-2.33.2.jar --port 7777 2>&1 &

nohup 命令含義:執行由 Command引數和任何相關的 Arg引數指定的命令,忽略所有結束通話(SIGHUP)訊號。在登出後使用 nohup 命令執行後臺中的程式。要執行後臺中的 nohup 命令,新增 & ( 表示「and」的符號)到命令的尾部
如果不將 nohup 命令的輸出重定向,輸出將附加到當前目錄的 nohup.out 檔案中。如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 $HOME/nohup.out 檔案中

2. 同上的命令簡化命令,紀錄檔儲存至log紀錄檔內:

nohup java -jar wiremock-jre8-standalone-2.33.2.jar --port 7777 &>log &

3. 後臺程式執行,並在紀錄檔輸入至黑洞,即不儲存紀錄檔:

nohup java -jar wiremock-jre8-standalone-2.33.2.jar --port 7777 >/dev/null 2>&1 &

 4. 後臺程式執行,分別將標準輸出與標準錯誤寫入不同的紀錄檔檔案內。