緯育 2026-0417.2

出自頂極製作所
於 2026年4月17日 (五) 09:51 由 Kuyohong留言 | 貢獻 所做的修訂 (建立內容為「<h3>Linux 殼層 I/O、重導向與基礎 Shell Script 入門</h3> <br> 本次課程聚焦 Unix/Linux 殼層中的輸入輸出資料流與重導向(redirection…」的新頁面)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

Linux 殼層 I/O、重導向與基礎 Shell Script 入門


本次課程聚焦 Unix/Linux 殼層中的輸入輸出資料流與重導向(redirection)、錯誤輸出處理、常見轉向目的地、tee 的雙重導向實務,以及基礎 shell script的入門觀念與腳本閱讀。

內容涵蓋單引號/雙引號/反引號差異、echo 指令與 -n/-e 與跳脫序列的效果、IFS 在切詞與引號保護中的角色、連續指令與條件指令(&&、||)的短路行為、標準輸入/輸出/錯誤輸出(0/1/2)與輸出/輸入轉向(>、>>、<、<<)、錯誤輸出的分流與合併(2>、2>>、&>、&>>、> file 2>&1)、Here-document、多目標轉向(檔案、/dev/null、印表機、終端機),以及以 tee 配合管線在終端顯示同時寫檔的雙重導向。另以 find 結合時間條件與一般使用者權限的綜合練習示範如何同時管理 stdout 與 stderr;補充傳統 mail 指令的歷史與當代限制。課程亦帶領閱讀系統內的服務腳本(如 /etc/init.d 與與 SSH 相關腳本),強調先看懂結構與流程,再逐步補齊每個參數與設計的「為什麼」。

引號、echo 與 IFS

  • 引號差異
    • 單引號:內容完全字面化,不做變數與命令替換。
    • 雙引號:允許變數展開、命令替換與少數跳脫(如 ", $, \、

等),其他文字維持字面性。

  • 反引號(...):舊式命令替換,等價 $(...) 但可讀性較差;建議優先使用 $(...)。
  • echo 行為
    • 預設結尾換行;-n 取消換行;-e 啟用跳脫序列(

、\t、\a、\c 等)。

  • \a 需硬體/環境支援才會有嗶聲;\c 可終止輸出後續內容。
  • IFS 與切詞
    • 預設以空白/換行/Tab 切詞;未加引號時易導致字串被過度切割。
    • 以單/雙引號保護空白與特殊符號可避免誤解讀;更動 IFS 有風險,僅於必要時使用。

標準資料流與轉向(Redirection)

  • 三大資料流
    • stdin(0)、stdout(1)、stderr(2);終端下可同時看到 stdout 與 stderr。
  • 輸出轉向
 覆寫、>> 追加;可顯式指定 1>。
  • 輸入轉向
    • < 由檔案餵入 stdin;<< Here-document 以旗標結束多行輸入,旗標需精確匹配。
  • 錯誤輸出轉向與合併
    • 2> 覆寫錯誤輸出、2>> 追加錯誤輸出。
    • 全部合併導向:&> file、&>> file,或以 > file 2>&1 達成;避免混淆與錯誤的非標準組合。
  • 管線與 tee
    • 指令 | tee 檔名:同時顯示於終端並寫入檔案;tee -a 追加。
    • 適合即時監看且留存紀錄;若僅用 > 或 >>,終端可能看不到輸出。

轉向目的地與裝置

  • 檔案:保存 stdout/stderr 供後續處理或稽核。
  • /dev/null:丟棄不需要的輸出(例如 2> /dev/null 隱去錯誤訊息)。
  • 印表機:傳統 /dev/lp0,現行多為 /dev/usb/lp0;可將文字直接轉向列印(受驅動/系統列印管理影響)。
  • 終端機/主控台:/dev/ttyX;可將輸出送至指定終端,可能干擾對方畫面。

郵件寄送指令(歷史與限制)

  • 傳統 mail -s "主旨" 收件者,郵件本文以 < 檔案或 Here-document 提供。
  • 現況多未預裝 MTA,寄件者設定不當易被視為垃圾郵件;多由 Gmail 等取代。未安裝時會提示安裝,配置需設定寄件者資訊。

Shell script 入門與結構閱讀

  • 入門與練習
    • 以 hello 範例起步,再加上互動讀取姓名與時間;逐步引入中斷條件與狀態回報($?)的概念,強調每步都回應狀態以利監控與除錯。
    • 使用條件與邏輯運算子將多行判斷濃縮為單行以快速達成條件效果。
  • 連續與條件指令
    • && 與 || 的短路行為:前者前一成功才執行後一;後者前一失敗才執行後一。
  • 腳本位置與結構
    • 常見於 /etc、/etc/init.d、/etc/rc.* 等;服務啟動腳本為可執行文字檔,shebang(#!/bin/sh)宣告直譯器。
    • 常見元素:set(如 -e/-u 等錯誤處理策略)、test、if/else、case、函數、群組執行 ( )、管線與 grep、變數賦值、U-MASK 022 等。
    • 以 sshd 為例,可透過執行輸出搭配 grep 關鍵字來判斷是否 OpenSSH,採用簡單可讀的檢測方式而非複雜程式。
  • 學習策略
    • 先看懂結構與流程,再逐步補充每個參數與設計理由;能讀懂與辨識模式(控制流、函數、變數、權限遮罩)是關鍵。

綜合練習與案例

  • find 與時間條件(一般使用者)
    • 在 /etc 或 /var/log 搜尋最近 N 分鐘內被存取的項目;同時分流 stdout 與 stderr(例如 stdout 至 find.out、錯誤至 find.err)。
    • 權限不足多屬預期錯誤;執行時終端可能無即時輸出,完成後再檢視結果檔。
  • tee 的雙重導向
    • 對會產生多行輸出的指令(如 ls -l)配合 tee 寫檔並顯示;需要追加則 tee -a。
  • 輸出管理與日誌
    • 比較 >、>>、2>、2>>、&>、&>> 與 tee 的差異;根據需求選擇單純寫檔、追加、合併或同時顯示與保存。

2026-0417-04.png