LinuxMastery By asdlkfj

LinuxMastery 10: 資料流重導向與管線 | > >>

讓指令互相合作

Linux 的強大之處在於「組合」。每個指令只做一件事並把它做好,然後透過「管線 (Pipe)」將它們串接起來,完成複雜的任務。此外,「重導向 (Redirection)」能讓我們靈活控制資料的輸入與輸出。

核心符號詳解

  1. | (Pipe)

    • 用途:將左邊指令的「輸出」,變成右邊指令的「輸入」。
    • 範例
      # 列出所有進程,然後過濾出包含 'nginx' 的行
      ps aux | grep nginx
      
      # 讀取 log 檔,然後計算行數 (wc -l)
      cat access.log | wc -l
      
  2. > (Output Redirection)

    • 用途:將指令的輸出寫入檔案 (會覆蓋原有內容)。
    • 範例
      # 將 ls 的結果存成 filelist.txt
      ls -l > filelist.txt
      
  3. >> (Append Redirection)

    • 用途:將指令的輸出追加到檔案末尾 (不會覆蓋)。
    • 範例
      # 將一段文字追加到 Log 檔最後
      echo "Backup completed" >> /var/log/backup.log
      
  4. 2> (Error Redirection)

    • 用途:只重導向「錯誤訊息」。
    • 範例
      # 執行指令,正常輸出顯示在螢幕,錯誤訊息存到 error.log
      ./script.sh 2> error.log
      

實戰心法

最經典的用法是 > /dev/null 2>&1。這串咒語的意思是:「把標準輸出丟進黑洞 (/dev/null),然後把錯誤輸出也導向到標準輸出 (也就是一起丟進黑洞)」。這常用於 Crontab 中,當你不希望腳本執行時產生任何信件或 Log 時使用。