Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux I/O 重定向進階技巧:文件描述符操作、標準流控制與腳本實戰

編輯:Linux 教學

I/O 重定向是 Shell 腳本與系統管理的核心技能。本文深入解析文件描述符機制、標準流重定向語法、自定義描述符操作與實戰模式。

核心概念

  • I/O 重定向:捕獲命令/程式/腳本/代碼塊的輸出,作為另一個文件/命令/程式/腳本的輸入
  • 文件描述符 (FD):內核為每個打開文件分配的整數標識
    FD名稱預設設備
    0stdin (標準輸入)鍵盤
    1stdout (標準輸出)螢幕
    2stderr (標準錯誤)螢幕
    3-9保留/自定義臨時連接

基礎重定向語法

語法效果範例
cmd > filestdout 覆蓋寫入 filels /dev > list.txt
cmd 1> file同上 (1 可省略)ls /dev 1> list.txt
cmd >> filestdout 追加寫入ls /dev >> list.txt
cmd 2> filestderr 覆蓋寫入ls -qw /dev 2> err.txt
cmd &> filestdout + stderr 合併寫入ls /dev &> all.txt
cmd < filestdin 從 file 讀取grep keyword < file

文件描述符進階操作

1. 複製/重新導向 FD (i>&j)

exec 5>&1   # FD5 指向 stdout (備份 stdout)
exec 3<> filename  # 開啟檔案指派給 FD3 (讀寫)
read -n 4 <&3       # 從 FD3 讀 4 字元
echo -n . >&3       # 在第 5 字元位置寫入 '.' 覆蓋
exec 3>&-           # 關閉 FD3

執行後 cat filename 顯示原內容第 5 字元被替換為 .。

2. 關閉 FD 語法

語法效果
n<&-關閉輸入 FD n
0<&- / <&-關閉 stdin
n>&-關閉輸出 FD n
1>&- / &>-關閉 stdout

3. 清空/建立空檔

> filename
: > filename   # 更通用,所有 shell 相容

實戰模式

暫存 stdout 供後續恢復

exec 6>&1           # 備份 stdout 到 FD6
exec > /tmp/log   # 重導向 stdout 到日誌
# ... 執行命令 ...
exec 1>&6         # 恢復 stdout
exec 6>&-         # 關閉備份 FD

同時記錄 stdout/stderr 到不同檔案

cmd > out.log 2> err.log

管線中分離 stderr

cmd 2> err.log | process_stdout

最佳實踐

  • 腳本開頭 exec 2> /var/log/script.err 統一捕獲錯誤
  • 使用 { ... } 3> file 代碼塊級重定向 (Bash 4.1+)
  • 避免在管線中混用重定向導致競態
  • 善用 tee 同時輸出螢幕與檔案:cmd | tee log.txt

熟練掌握 FD 操作,腳本將具備企業級健壯度與除錯能力。

Copyright © Windows教程網 All Rights Reserved