Linux 系統資源/指令輸入與輸出(行程重導)


系統資源

資源查看 top / free / ps

# 顯示即時的程式執行狀態與統計數字
top

# 查看記憶體使用情況(單位:KB)
free -h

# 查詢執行中的程序(最常用參數:aux)
ps aux

查看硬體資訊 - dmidecode

使用 dmidecode 工具查出硬體資訊如 CPU / Memory / 主機板型號:

dmidecode -t bios        # BIOS 資訊
dmidecode -t system      # 系統資訊
dmidecode -t baseboard   # 主機板
dmidecode -t chassis     # 機殼
dmidecode -t processor   # 處理器
dmidecode -t memory      # 記憶體
dmidecode -t cache       # 快取
dmidecode -t connector   # 連接器
dmidecode -t slot        # 插槽

注意:執行 dmidecode 通常需要 root 權限。


查看 CPU 資訊

lscpu

查看記憶體資訊

lsmem

訊號種類與使用

# 查看所有訊號名稱及對應代碼
kill -l
trap -l
訊號名稱 代碼 說明
SIGHUP 1 掛斷訊號,常用於重新載入設定
SIGINT 2 中斷(Ctrl+C)
SIGKILL 9 強制終止,無法捕捉或忽略
SIGUSR1 10 使用者自定訊號 1
SIGUSR2 12 使用者自定訊號 2
SIGTERM 15 預設終止信號,可捕捉

傳遞訊號 - kill

# 使用代碼發送訊號
kill -2 <PID>

# 使用訊號名稱發送訊號
kill -SIGINT <PID>

捕捉訊號 - trap

可透過 trap 在腳本中對訊號做出處理,進行善後動作(如清除暫存檔)。

語法:

trap '要執行的指令' 訊號名稱

範例:

trap 'echo "捕捉到 SIGINT,準備退出。"; exit 1' SIGINT

while true; do
    sleep 1
done

注意:SIGKILL(9)與 SIGSTOP(19)無法被捕捉或忽略。


行程輸出重導(Redirection & Piping)


輸入與輸出導向(<、>、>>、<<)

# 將檔案作為輸入來源
cmd < input.txt

# 將輸出覆蓋寫入檔案
cmd > output.txt

# 同時指定輸入與輸出
cmd < input.txt > output.txt

# 開啟檔案供讀寫(可讀可寫)
cmd <> file.txt

# 將輸出附加至檔案末尾
cmd >> output.txt

注意:> 等同於 1>(標準輸出)。


輸出與錯誤導向

語法 說明
cmd > file 將標準輸出寫入檔案(覆蓋)
cmd 1> file 同上
cmd >> file 將標準輸出附加至檔案末尾
cmd 2> file 將錯誤輸出導向檔案(覆蓋)
cmd 2>> file 將錯誤輸出附加至檔案末尾
cmd &> file 將標準與錯誤輸出都導向檔案(覆蓋)
cmd &>> file 將標準與錯誤輸出都附加至檔案末尾
cmd > file 2>&1 將錯誤輸出 2 導向標準輸出 1,再導向檔案
cmd 2>&1 > file 先把錯誤輸出導向目前的標準輸出,再改變標準輸出 → 結果不同

常見重導向技巧

僅保留正確輸出,忽略錯誤訊息

cmd 2>/dev/null

僅保留錯誤訊息,忽略正確輸出

cmd > /dev/null

同時忽略所有輸出

cmd > /dev/null 2>&1

/dev/null 是特殊裝置,代表「黑洞」,任何寫入的內容都會被丟棄。


管線(Pipe) |

管線會將前一指令的「標準輸出」作為後一指令的「標準輸入」:

cmd1 | cmd2

範例:

# 將 /etc/passwd 中的內容過濾含 bash 的行
cat /etc/passwd | grep bash

# 等效於:
grep bash /etc/passwd

備註

  • 若需只處理標準錯誤,請使用 2>
  • 若需只處理標準輸出,請使用 1>>
  • 多重重導向或與程式控制流程結合時,建議使用小括號明確邏輯。
# 將標準與錯誤輸出導向不同檔案
(cmd > out.txt) 2> err.txt