liunx標準輸入與輸出

一、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. 後台程序運行,分別將標準輸出與標準錯誤寫入不同的日誌文件內。