緯育 2026-0320

出自頂極製作所
於 2026年3月20日 (五) 08:20 由 Kuyohong留言 | 貢獻 所做的修訂 →‎檔案與目錄的刪除

Linux 基礎指令

本次講座主要介紹 Linux/Unix 系統中的核心概念與基礎指令。講師首先詳細解釋了控制檯 (Console) 和終端機 (Terminal) 的定義、差異及實際應用。控制檯是本地端直接操作的設備,而終端機則用於遠端連線。講座中也介紹了 Linux 的共通目錄架構,特別是 /dev 目錄,並強調「在 Unix/Linux 中,萬物皆為檔案」(Everything is a file) 的重要哲學。

接著,講師透過實際操作示範了多項基礎指令,包括虛擬控制檯 (TTY) 的切換、使用者登入登出、系統關機與重啟。並詳細解說了 Linux 指令的基本架構,包含指令本身、選項(長短選項的區別與用法)和參數。此外,也示範了 echo、date、cal 等常用指令,並說明如何自訂格式化輸出。

講座的另一大重點是查詢指令用法的三種主要方式:使用 --help 參數(可結合 | less 分頁檢視)、查閱 man 手冊(並介紹其章節編號的重要性,如 man 1 passwd 與 man 5 passwd 的區別),以及使用 info 指令。

Linux 基礎概念與課程介紹

  • 課程內容概述
    • 介紹 Linux 系統的基本操作,包括開關機與重啟。
    • 講解 Linux 的目錄架構,說明各個通用目錄的用途。
    • 大量介紹指令的架構、用法以及如何在本機查詢指令說明。
    • 介紹檔案與目錄的操作指令。
  • Linux 目錄架構共通性
    • 不同的 Linux 發行版(如 Ubuntu, CentOS)或類 Unix 系統(如 macOS)都擁有共通的核心目錄結構。基礎架構大致一致,各發行版可能會有其特有的額外目錄。

控制檯 (Console)、終端機 (Terminal) 與 TTY/PTS

  • 控制檯 (Console) vs. 終端機 (Terminal)
    • 共通點: 兩者都是使用者與系統溝通的介面,用於執行指令、變更設定或顯示資訊。
    • 控制檯 (Console): 指使用者直接在電腦主機的螢幕前進行的「本地端」操作。Linux 系統只有一個真實 Console,其餘為軟體模擬的虛擬控制檯 (Virtual Console, TTY)。
    • 終端機 (Terminal): 指透過網路或纜線進行的「遠端連線」。在 Unix/Linux 中,也稱為偽終端機 (Pseudo Terminal, PTY 或 PTS)。
  • Linux 虛擬控制檯 (TTY)
    • 概念: Linux 透過軟體模擬出多個虛擬控制檯 (TTY),預設啟用 6 到 7 個。每個 TTY 都是獨立的登入介面,可在單一螢幕上實現多工操作。
    • 切換方式:
    • 使用快速鍵 Alt + F1 ~ F6 在不同 TTY 間切換。在圖形介面 (GUI) 下則需使用 Ctrl + Alt + F1 ~ F6。
    • 使用指令 chvt [編號] 切換,例如 chvt 4 切換至 TTY4。
    • 設備檔案: 虛擬控制檯對應的設備檔案位於 /dev 目錄下,如 /dev/tty1, /dev/tty2 等。可以使用 tty 指令查看當前所在的終端機。
  • 遠端連線與偽終端機 (PTS)
    • 連線原理: 透過 SSH 等方式遠端連線時,系統會建立一個偽終端機,並在 /dev/pts/ 目錄下生成一個對應的設備檔案,如 /dev/pts/0。
    • 生命週期: PTS 檔案在使用者成功登入後建立,登出後即被移除。
    • 桌面環境的終端機: 在圖形介面中開啟的「終端機」應用程式,本質上也是一個偽終端機 (PTS)。
  • Everything is a file 哲學
    • Unix/Linux 的核心哲學是「萬物皆為檔案」。硬體設備、控制檯、終端機都以檔案形式存在於 /dev 目錄。
    • 使用者在 TTY 或 PTS 輸入的文字,實際上是與對應的設備檔案進行 I/O 溝通。可利用此特性進行跨終端機訊息傳遞,例如 echo "hello" > /dev/tty4。

使用者登入、登出與系統開關機

  • 使用者登入與登出
    • 登入 (Login): 輸入帳號密碼登入。系統會記錄所有登入嘗試,包括失敗記錄。
    • 登出 (Logout): 可使用 exit、logout 指令或 Ctrl + D 快捷鍵。
  • 系統關機與重開機
    • 關機 (Shutdown):
    • 常用指令:poweroff, halt, shutdown -h now。
    • 定時關機:shutdown -h 10 (10分鐘後關機)。
    • 重開機 (Reboot):
    • 常用指令:reboot, shutdown -r now。
    • 定時重開機:shutdown -r 10 (10分鐘後重開機)。
    • 取消排程: 使用 shutdown -c 可以取消已預約的關機或重開機任務。

Linux 指令結構與查詢方法

  • 指令基本結構
    • 組成:指令 [選項] [參數],各部分以空白隔開。
    • 選項 (Option):
    • 長選項 (Long Option): 格式為 --單字 (如 --help),語意清晰但無法合併。
    • 短選項 (Short Option): 格式為 -字母 (如 -h),輸入快且可合併 (如 -al),但較不直觀。
    • 參數 (Argument): 指令操作的對象,其意義由指令和選項決定。
  • 指令用法查詢方法
    • 方法一:--help 參數:
    • 用法:[指令名稱] --help,提供快速簡潔的說明。
    • 搭配 | less: 當說明過長時,可使用 [指令] --help | less 進行分頁瀏覽。
    • 方法二:man 手冊 (manual pages):
    • 用法:man [指令名稱],提供最詳細、結構化的官方文件。
    • 操作:可用 g/G 跳至頭尾,/ 進行搜尋,n/N 跳至下/上一個結果,q 退出。
    • 章節編號: man 手冊分為 8 個主要章節,用以區分不同類型的主題。例如 passwd 指令(章節1)和 /etc/passwd 檔案格式(章節5)。可使用 man [章節] [名稱] 查詢特定章節,如 man 5 passwd。
    • 方法三:info 指令:
    • 用法:info [指令名稱],提供超連結式的節點文件,類似線上書籍。此為獨立套件,部分精簡系統可能需另外安裝。

基礎指令範例

  • echo 指令: 將後方字串印出到標準輸出(螢幕),可透過重導向輸出至檔案或設備。
  • date 指令: 顯示或設定系統時間日期。可使用 + 搭配格式化字元自訂輸出,例如 date +"%A, %B %d, %Y"。
  • cal 指令: 顯示月曆。可接受年份、月份作為參數,如 cal 1 2020。在某些新版系統(如 Ubuntu 22.04)中可能需透過 apt install ncal 安裝。
  • /etc/passwd 檔案: Linux 系統中儲存使用者帳號資訊的純文字檔案,可使用 less /etc/passwd 查看其內容。

2026-0320-02.png

指令與Shell基礎

  • Linux/Unix與微軟指令的差異
    • 命名風格:微軟指令多為完整單字(COPY, MOVE, CLS),而Linux/Unix指令偏向縮寫(cp, mv, clear)。
    • clear指令可用快捷鍵Ctrl+L,但支援性取決於Shell。
  • Shell(命令列介面)的概念
    • Shell是使用者與核心溝通的程式,常見的有Bash(Linux預設)、SH(舊版UNIX)、CSH(BSD)、Zsh(macOS新預設)。
  • 重設螢幕指令 (reset)
    • 當終端機畫面顯示異常或亂碼時,使用reset或tset指令可重新初始化,避免因登出中斷背景任務。

目錄與路徑操作

  • 查詢目前所在目錄 (pwd)
    • pwd(Print Working Directory)用於顯示當前的絕對路徑,在提示符未顯示完整路徑時特別有用。
  • 列出目錄內容 (ls)
    • 相當於微軟的dir,用於列出檔案與目錄。
    • 常用參數:
    • -a: 顯示所有檔案,包括以 . 開頭的隱藏檔。
    • -l: 以長格式顯示詳細資訊(權限、擁有者、大小、時間等)。
    • -F: 顯示檔案類型(如目錄加/,執行檔加*)。
    • -s, -t, -r: 分別依大小、時間、反向排序。
  • 切換目錄 (cd)
    • 此指令在Linux與微軟系統中通用。
    • 路徑概念:
    • 絕對路徑:從根目錄/開始的完整路徑(如cd /etc)。
    • 相對路徑:相對於目前目錄的路徑,不以/開頭(如cd .cache)。
    • 特殊符號:
    • .: 代表目前目錄。
    • ..: 代表上一層目錄。
    • ~: 代表目前使用者的家目錄(cd ~或單獨cd可快速返回家目錄)。
    • -: 代表上一個工作目錄,可在最近兩個目錄間快速切換(微軟無此功能)。

Linux 檔案系統層次結構標準 (FHS)

  • FHS(Filesystem Hierarchy Standard)定義了Linux根目錄下各目錄的標準用途,確保軟體相容性。
  • 根目錄 (/)
    • Linux檔案系統的頂層,相當於Windows的磁碟機代號。
  • 重要子目錄詳解:
    • /bin (Binary):存放所有使用者皆可執行的基本指令。
    • /boot:存放開機相關檔案,如開機選單設定(grub)和Linux核心(vmlinuz)。
    • /dev (Device):存放設備檔案。硬體(如硬碟sda、隨身碟sdb)插入時,系統會在此生成對應檔案。
    • /etc (Et cetera):存放所有系統和服務的設定檔,管理相對集中。
    • /home:存放一般使用者的家目錄,每個帳號對應一個子目錄。
    • /lib (Library):存放系統運作所需的函式庫及核心模組(驅動程式)。
    • /lost+found:ext系列檔案系統特有,用於存放因意外斷電等原因遺失的檔案片段。
    • /media & /mnt (Mount):用於掛載外部儲存設備(如隨身碟、光碟)的掛載點。/media常用於經常性掛載,/mnt常用於臨時性掛載。
    • /opt (Option):用於存放非作業系統官方提供的第三方軟體。
    • /proc (Process):一個虛擬檔案系統,存在於記憶體中,反映系統當前所有程序的即時資訊。以程序ID(PID)命名的數字目錄包含該程序的詳細資訊。PID為1的程序是系統啟動的第一個程序,管理所有使用者程序。
    • /root:超級使用者root的家目錄,與一般使用者分開存放以策安全。
    • /run:存放執行中服務的暫存檔,如.pid檔,記錄服務的程序ID。
    • /sbin (System Binary):存放系統管理員使用的系統級指令,如格式化磁碟等。
    • /snap:Ubuntu特有的目錄,用於存放Snap套件,提供沙盒化的安全執行環境。
    • /srv (Service):存放服務提供的資料,如網頁伺服器的網站檔案。
    • /sys:與/proc類似的虛擬檔案系統,反映核心偵測到的硬體設備資訊。udev服務會監控此目錄變化,並在/dev下自動建立設備檔案。
    • /tmp (Temporary):系統的通用臨時資料夾。
    • /usr (User):存放使用者安裝的非系統基本軟體及其相關檔案(指令、函式庫等)。現代Linux系統常將根目錄下的bin, sbin, lib等透過符號連結指向/usr內的對應目錄,以統一管理。
    • /var (Variable):專門存放經常變動的檔案,如快取、資料庫、遊戲存檔等。
    • /var/log:存放所有系統和服務的日誌檔案(Log),是問題排查時最重要的目錄。

使用者與家目錄

  • 家目錄(Home Directory)結構
    • Linux/Unix:root使用者的家目錄在/root;一般使用者在/home/<username>。
    • Windows:所有使用者(包括管理員)的設定檔都存放在C:\Users底下。
  • 安全性考量:CentOS和Ubuntu預設不讓root直接登入,旨在提升系統安全性,與微軟作法相似。

2026-0320-03.png

檔案與目錄的建立

  • 建立檔案 (touch)
    • 建立檔案指令為 touch,後接檔名,如 touch test1.file。
    • touch 的原始功能是更新既有檔案的時間戳(modification time)至目前時間。
    • 若指定檔名不存在,系統會自動建立空檔案,故常用於快速建檔。
    • 除了 touch 外尚有其他建檔方式,但本課程以 touch 為主。
  • 建立目錄 (mkdir)
    • 建立目錄指令為 mkdir,後接目錄名稱,如 mkdir test1.dir。
    • 建立多層目錄:要一次建立巢狀目錄(如 test2.dir/test2-1.dir)需使用 -p 選項。
    • 若未加 -p 嘗試建立多層目錄,會因上層不存在而報錯。
    • 使用 mkdir -p test2.dir/test2-1.dir/test2-2.dir 可一次建立所有不存在的父目錄與子目錄。微軟系統似乎沒有此功能。

檔案與目錄的複製

  • 複製檔案 (cp)
    • 指令語法:cp [來源檔案] [目標檔案或目錄]。
    • 範例:cp test1.file test1.file.copy 會將 test1.file 複製為 test1.file.copy。
    • 也可複製到指定目錄,如 cp test1.file ./some_dir/。
  • 複製目錄 (cp -r)
    • 複製目錄需加 -r(或 -R)選項,代表遞迴(recursive)複製。
    • -r 會將目錄本身及其所有檔案與子目錄一併複製。
    • 忘記加 -r 複製目錄會導致指令失敗。
    • 範例:cp -r test1.dir test1.dir.copy 會將 test1.dir 與其內容複製為新目錄 test1.dir.copy。

檔案與目錄的移動與重新命名

  • 移動與重新命名 (mv)
    • mv 可用於移動檔案/目錄,也可用於重新命名。
    • 移動:mv [來源] [目標目錄]。例:mv test1.file.copy test1.dir/ 將檔案移至 test1.dir。
    • 重新命名:mv [舊名稱] [新名稱]。例:mv test1.file test1.file.mv 將其更名為 test1.file.mv。
    • 在 Linux 中,重新命名的本質是將目標「移動」至同一路徑下的新名稱;微軟系統另有 rename 指令。
    • 課程示範在不同工作目錄(如 /etc, /var)下,透過完整路徑操作家目錄檔案。

檔案與目錄的刪除

  • 刪除檔案 (rm)
    • 刪除檔案的指令為 rm(remove)。
    • 範例:rm test1.file.mv。
    • 刪除前詢問:-i 會在刪除每個檔案前提示確認。
    • 預設行為可能因作業系統或身分(User vs. Root)不同而異:如在 CentOS,Root 執行 rm 時可能預設啟用 -i;一般使用者則不會。Ubuntu 通常預設不詢問。
  • 刪除目錄
    • rmdir 專門刪除「空目錄」。若目錄內仍有內容,rmdir 會失敗。
    • rm -d 也可刪除空目錄。
    • 刪除非空目錄:使用 rm -r 遞迴刪除目錄內所有內容後再刪除目錄本身。
    • 強制刪除:-f(force)會略過任何提示,強制執行(在權限允許下),即使檔案使用中。
    • rm -rf 是非常強大且危險的組合,會強制遞迴刪除指定路徑下的所有內容。
  • 使用 -rf 的風險補充
    • 講師強調使用 rm -rf 必須極度小心路徑書寫。
    • 例:欲刪除 /tmp 內容卻誤打成 rm -rf / tmp,會從根目錄 / 開始刪除所有檔案,導致系統崩潰。
    • 即便現代系統對 rm -rf / 設有防堵機制,仍須保持高度謹慎。

2026-0320-04.png

搜尋工具全貌與速度/準確度取捨

  • 僅以系統預設的四類方式為主:PATH 解析、which、whereis、locate;另補充 find 作為精準檔案搜尋的核心工具。
  • 速度對比:locate 依資料庫搜尋,速度最快但可能不即時、不精準;find 現掃檔案系統,最準確最細緻但相對較慢。
  • 精準度對比:find 可組合多條件(時間、大小、型態、深度、是否為空等)達到最高精準度;which/whereis 聚焦可執行檔與相關文件;PATH 反映實際執行版本。

PATH 與 which 指令

  • PATH 概念:echo $PATH 檢視路徑;系統依 PATH 順序找指令,命中第一個即執行,影響使用到的指令版本。
  • which:顯示指令所在路徑;可搭配 ls -l 驗證檔案屬性與大小。切勿刪除系統指令(如 rm,示例約 59K),若需限制行為以權限控制取代刪除。
  • which -a:列出 PATH 中所有相符項,常見多個符號連結指向同一實體檔,有助於辨識多版本或別名。

whereis 指令

  • 查詢內容:在特定系統目錄中同時找執行檔(binary)、手冊(man)、原始碼(source)。
  • 選項:-b 只看 binary,-m 只看 man,-s 只看 source。
  • 內建與外部差異:cd 為殼層內建通常無外部路徑;echo 同時有內建與外部版本;mv、rm 等為獨立可執行檔。

4. locate 系列:資料庫型超高速模糊搜尋

  • 特性:以預建資料庫搜尋,速度極快、支援模糊關鍵字;準確度取決於資料庫新舊。
  • 家族與發行版差異:mlocate、plocate、slocate、nlocate 等;不同發行版預設或套件名稱不同,近年偏好 plocate。部分版本(如 Ubuntu 20.04 之後)可能不預設安裝。
  • 用法:locate cp 會列出含「cp」的大量結果;字越短越模糊、越多;字越特殊越精準。locate -c 可計數結果。
  • 資料庫更新:updatedb 需定期或開機時更新;示範以 touch 建檔、updatedb 後 locate 才能找到;刪檔後未更新仍會顯示舊結果。
  • 資料庫位置:通常在 /var/lib/locate(不同家族檔名不同)。不建議隨意刪除資料庫,系統排程或開機會重建。

find:精準條件搜尋

  • 基本名稱搜尋:find 路徑 -name 'pattern' 於指定層級與路徑查特定字串或通配。
  • 依時間搜尋:-atime(存取)、-ctime(inode 狀態變更/建立)可查最近分鐘或更細的條件;系統行為可能造成非手動的存取紀錄。
  • 查空項目:-empty 可列出空檔案與空目錄;不建議隨意清除系統目錄中的空項目,以免破壞相容性。
  • 依大小:-size +100K / -10K / 100K 等,常用於磁碟空間管理定位大檔。
  • 限制深度與型態:-maxdepth 限制層級;-type d/l/b/s 等過濾不同型態;在 /var、/dev 等路徑分別可快速分類。

殼層補齊與萬用字元

  • Tab 補齊:Bash、Zsh 支援;第一次嘗試補齊,第二次列出候選。指令與參數多有補齊,但依環境而異。
  • 學習策略:初學者先練手打與目錄心智模型,待路徑與名稱清晰再以補齊提速;可刻意保留末兩字再按 Tab 以降低打錯風險。
  • 星號(*):匹配任意字元任意長度;適合模糊但結果多。
  • 問號(?):每個 ? 代表一字元;適合精準指定長度與字元位置的匹配。

大小寫敏感與跨平台注意

  • Linux 大小寫敏感,ABC 與 abc 為不同檔;Windows 通常不敏感,同名不同大小寫視為同一檔。跨平台操作需特別留意,避免誤判或覆蓋。

2026-0320-05.png