Linux 指令預設在 CLI 環境執行,輸入輸出皆為純文字,三大標準資料流:
| 代碼 | 名稱 | 檔案描述符 | 預設裝置 |
|---|---|---|---|
| STDIN | 標準輸入 | 0 | 鍵盤 |
| STDOUT | 標準輸出 | 1 | 終端機 |
| STDERR | 標準錯誤 | 2 | 終端機 |
| 語法 | 說明 |
|---|---|
指令 > file | 標準輸出導向檔案(覆蓋) |
指令 >> file | 標準輸出導向檔案(附加) |
指令 2> file | 標準錯誤導向檔案 |
指令 2>&1 | 標準錯誤導向標準輸出(合併輸出) |
指令 > file 2>&1 | 標準輸出與錯誤皆導向檔案 |
指令 < file | 標準輸入從檔案讀取 |
指令 << EOF ... EOF | Here Document 內嵌輸入 |
將前一個指令的標準輸出,作為下一個指令的標準輸入:
指令1 | 指令2 | 指令3 ...
ps aux --sort -%mem | head -n 11
find . -type f | awk -F. '{print $NF}' | sort | uniq -c | sort -rn
tail -f /var/log/nginx/access.log | grep --line-buffered "ERROR"
make 2>&1 | tee build.log
cat > /etc/yum.repos.d/local.repo << 'EOF'
[local]
name=Local Repo
baseurl=file:///mnt/repo
enabled=1
gpgcheck=0
EOF
exec 1>log.txt 2>&1:在腳本開頭執行,後續所有輸出自動導向檔案。command > /dev/null 2>&1:完全靜默執行(丟棄所有輸出)。command 2>&1 >/dev/null:錯誤輸出到終端機,標準輸出丟棄(順序影響結果)。掌握「0 輸入、1 輸出、2 錯誤」三大檔案描述符,靈活運用 >、>>、2>、2>&1、|,能將簡單指令組合成強大的資料處理管線,是 Linux 命令列高手的核心功力。