匿名
尚未登入
登入
頂極製作所
搜尋
檢視 緯育 2026-0320 的原始碼
出自頂極製作所
命名空間
頁面
討論
更多
更多
頁面操作
閱讀
檢視原始碼
歷史
←
緯育 2026-0320
由於下列原因,您沒有權限進行編輯此頁面的動作:
您請求的操作只有這個群組的使用者能使用:
管理員
您可以檢視並複製此頁面的原始碼。
== Linux 基礎指令 == 本次講座主要介紹 Linux/Unix 系統中的核心概念與基礎指令。講師首先詳細解釋了控制檯 (Console) 和終端機 (Terminal) 的定義、差異及實際應用。控制檯是本地端直接操作的設備,而終端機則用於遠端連線。講座中也介紹了 Linux 的共通目錄架構,特別是 /dev 目錄,並強調「在 Unix/Linux 中,萬物皆為檔案」(Everything is a file) 的重要哲學。<br><br> 接著,講師透過實際操作示範了多項基礎指令,包括虛擬控制檯 (TTY) 的切換、使用者登入登出、系統關機與重啟。並詳細解說了 Linux 指令的基本架構,包含指令本身、選項(長短選項的區別與用法)和參數。此外,也示範了 echo、date、cal 等常用指令,並說明如何自訂格式化輸出。<br><br> 講座的另一大重點是查詢指令用法的三種主要方式:使用 --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|800px]] === 指令與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|800px]] === 檔案與目錄的建立 === * 建立檔案 (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|800px]] === 搜尋工具全貌與速度/準確度取捨 === * 僅以系統預設的四類方式為主: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|800px]] === 課前準備與課程大綱 === * 本節核心聚焦「檔案內容」處理,與上一節的檔案/目錄管理不同。 * 主要內容: ** 查看與瀏覽:查看與瀏覽檔案內容,並擷取部分內容。 ** 切割與合併:將檔案切割與合併。 ** 排序與統計:對檔案資料進行排序與統計(如行數、字數)。 ** 打包與備份:類似微軟系統的壓縮/解壓,但在 Linux 中「打包」不必然包含「壓縮」。 ** 輸入輸出與轉向:介紹基本 I/O 與各式轉向。 ** 管線 (Pipe) 使用:深入管線細節與原理。 ** 連續與條件式指令:同一行撰寫多個指令,依條件執行,適合不會寫程式的初期階段。 === 檔案內容打包與備份觀念 === * 打包 vs. 壓縮 * 微軟系統常將備份目錄直接壓縮為單一檔案。 * 在 Linux 伺服器環境,備份大型目錄(如 2TB、10TB)時常選擇「只打包不壓縮」。 * 原因:還原巨大壓縮檔需大量 CPU 與時間,影響效能;只打包雖體積較大,但解開速度快、負擔小。 * 許多打包指令亦內建壓縮選項,使用者可視需求決定是否壓縮。 === 檔案內容查看指令 === * CAT (Concatenate) * 基本用法:cat [檔名],自檔案開頭至結尾輸出所有內容至螢幕。 * 常用選項 -n:cat -n [檔名],於每行前加上行號。 * 範例:cat tongue_name.taste。 * TAC (CAT 的倒序) * 基本用法:tac [檔名],自最後一行開始反向輸出。 * 應用:適合查看日誌檔,因最新紀錄多在檔案末尾。 * 限制:不支援行號,但可透過管線搭配 nl。 * NL (Number Lines) * 基本用法:nl [檔名],功能與 cat -n 相同,為每行加行號。 * 精簡系統考量:部分精簡系統可能移除 nl,因與 cat -n 功能重疊。 * 常用選項 -s:nl -s [分隔符號] [檔名],自訂行號與內容間的分隔符(預設空白)。 === 檔案內容分頁瀏覽工具 === * MORE * 基本用法:more [檔名],分頁瀏覽大型檔案。 * 操作特性: ** 可用上下左右鍵、Page Up/Page Down 翻頁。 ** 搜尋(/)會跳至相符位置,但不標色。 ** 到檔案末尾會自動結束並退出。 * LESS * 基本用法:less [檔名],功能更強大的分頁瀏覽工具。 * 操作特性: ** 操作類似 more。 ** 搜尋時會對關鍵字標色,便於辨識。 ** 到檔案末尾不會自動退出,可回看先前內容。 * 講師偏好使用 less。 === 擷取部分檔案內容 === * HEAD * 功能:擷取檔案開頭內容。 * 預設:head [檔名] 取得前 10 行。 * 常用選項 -n:head -n [行數] [檔名],擷取指定行數(如 head -n 3)。 * 其他選項: ** -c [字元數]:擷取開頭指定字元數。 ** -n -[行數] 或 -c -[字元數]:顯示全部內容,但排除結尾指定行數或字元數(較少見)。 * TAIL * 功能:擷取檔案結尾內容。 * 常用選項 -n:tail -n [行數] [檔名],擷取指定結尾行數(如 tail -n 3)。 * 其他選項: ** -c [字元數]:擷取結尾指定字元數。 ** -c +[字元數]:自第 N 個字元起顯示至檔案結尾(較少見)。 === 檔案內容排序與統計 === * SORT (排序) * 基本用法:sort [檔名],對內容逐行排序(預設字母順序)。 * 常用選項: ** -r:反向排序 (Reverse)。 ** -t [分隔符號]:指定欄位分隔符,如 -t " " 以空白為分隔。 ** -k [欄位編號]:依指定欄位排序。 ** -u:去除重複行 (Unique),排序後僅保留一行。 * 應用:將 Excel 匯出的 CSV 交由 Linux 快速排序;自動化腳本中如排序網路流量找出最大值等。 * WC (Word Count) * 功能:統計檔案內容。 * 基本用法:wc [檔名],輸出三組數字:行數、字詞數、字元數。 * 常用選項: ** -l:僅顯示行數 (Lines)。 ** -w:僅顯示字詞數 (Words)。 ** -m 或 -c:僅顯示字元數 (Characters),對純文字通常相同。 ** -L:顯示最長一行長度。 * 組合應用:以管線將 sort -u 結果傳給 wc -l,統計去重後剩餘行數。 [[檔案:2026-0320-06.png|800px]] === 檔案打包與壓縮(tar、gzip/bzip2) === * tar 的基本概念與使用 ** 在傳送多檔案(例如城市、小專案)情境下,將多個檔案或目錄「打包」成單一檔案以便傳輸;打包不等於壓縮,壓縮需額外指定。 ** 常見於 GitHub 下載尾字:.zip、.tar;Linux 世界更常見 .tar 及其壓縮變體(如 .tar.gz/.tar.bz2)。 ** 伺服器提供下載時,常同時提供未壓縮與壓縮版本。大型伺服器偏好未壓縮包,因為解包不需解壓縮,耗時較少。 * tar 常用選項與語法示例 ** -c:建立打包檔(create),建立檔案時必選。 ** -v:顯示打包或解包過程的檔案清單;不需要過程時可省略。 ** -f:指定輸入/輸出檔名;在短選項合併時,-f 的參數必緊跟在最後一個選項之後。 ** 來源可為多個目錄/檔案;示例將 etc 目錄打包為 etc.tar,示範檔案大小約 34MB(未壓縮)。 ** Linux 副檔名主要「給人看」以理解內容類型;系統不仰賴副檔名決定開啟程式,與 Windows 不同。 * 壓縮選項與副檔名慣例 ** -z:使用 gzip(講者口誤稱「GNULIP/gnu zip」);-j:使用 bzip2。兩者皆常見,使用者多偏向 gzip。 ** 建議在檔名上表明雙重性質,如 etc.tar.gz(講者示例亦提到等同概念等如 etc.tar.gzip/gnip),利於人類辨識;指令多能自動識別壓縮格式,即使副檔名未標示。 ** 範例:tar -czvf userData.tar.gz [來源A] [來源B];示範短選項可合併(如 -czvF)或拆開,但須遵守順序規則。 * 權限與錯誤訊息 ** 以一般使用者打包系統目錄時,部分目錄可能因權限不足出現「Permission Denied」;這不是 -v 的正常輸出,而是錯誤訊息。以 root 帳戶示範時不會有此限制。 * 檢視打包內容(不解壓) ** 使用 tar -t(列出內容)配合 -f 指定檔案,顯示包內目錄/檔案結構;帶斜線的項目表示目錄。 ** 短選項合併的順序規則:可為 -tf file.tar,但不可為 -ft file.tar;-f 是唯一帶參數的選項,參數需黏在最後一個選項後方。 * 解包與解壓縮 ** 使用 -x:解包(可自動辨別是否壓縮);可加 -v 顯示過程,-f 指定檔案。 ** 預設解至當前工作目錄;使用 -C 指定解至目標目錄(注意為大寫 -C)。示例解至 /tmp,解後檢視 /tmp 下出現 Home 目錄等內容。 === Linux 與 Windows 的副檔名與檔案識別差異 === * Windows 依副檔名決定開啟程式(如 .docx 由 Word 開啟);副檔名錯置時可能以不相符的程式嘗試開啟,出現「無法打開」。 ** 講者補充:即使更改副檔名,Windows 有時仍依內容類型判斷並開啟原先適合的應用(講者評述「微軟偷機」),但核心觀念是 Windows 強依賴副檔名。 * Linux 副檔名僅供人類理解;系統以檔案內容與權限為主。故在 Linux 世界,.tar、.gz 等後綴多是「暗示」,人類易讀。 === 超過郵件附件限制的分割與合併(split、cat)=== * 郵件附件大小限制背景 ** 常見限制:單一檔案 3MB、5MB、10MB,Google 約 20MB。超過大小需分割檔案以便傳送。 ** 在 Linux 操作流程通常是先打包/壓縮,再「後續」進行分割;不同於 Windows 某些工具在壓縮當下即指定分割大小。 * split 指令:依行數或大小分割 ** 文字檔可用 -l(小寫 L)依行數分割;非文字檔應以大小分割(以行數分割非文字檔會有問題)。 ** 後綴命名:預設產生 aa、ab、ac…;使用 -d 可改為數字 00、01、02… 的樣式,以符合 Windows 習慣。 ** 大小單位: ** k, m, g:以 1024 為基底(KiB, MiB, GiB 概念)。 ** KB, MB, GB:以 1000 為基底(十進制)。 ** 硬碟容量顯示差異源於廠商採 1000、系統採 1024,導致格式化後容量看起來變小。 * split 文字檔範例(connect.txt) ** split -l 5 connect.txt connect.txt.split ** 產出 connect.txt.splitaa、.splitab、.splitac…;前兩檔各含 5 行(AA、AB),第 3 檔僅 1 行(總 11 行)。 * split 非文字檔範例(GNJLive.mp3) ** split -d -b 1M GNJLive.mp3 GNJLive.mp3.split ** -d 產生 00、01、02…;-b 指定分割大小,示例以 1MiB(若用 MB 則為 1,000,000 bytes)。 ** 可用 ls -l 檢視各分割檔的大小與命名;使用萬用字元()一次列出。 * 分割後的合併(cat) ** 文字檔:cat connect.txt.splitaa connect.txt.splitab connect.txt.splitac > connect.txt.merge ** 注意順序:合併結果與原檔一致需依切割時的序列接回。 ** 非文字檔:cat GNJLive.mp3.split > GNJLive.mp3.merge ** 萬用字元展開通常依字典序排序,00、01、02…可確保正確順序;若有 11、12…需依講義說明調整匹配以避免 1、10、11 排在 2 前的問題。 ** 合併後可比對大小(ls -l),應與原始檔案一致;MP3 合併檔可用播放器測試播放(講者提及「9x1」播放器、DOS 上也可播 MP3 與看彩色圖片的歷史趣聞)。 === 其他壓縮工具與格式概覽 === * gzip(gnuzip)、bzip2(bunzip)、compress、bzlip(講者口誤混用字眼)、xz 等皆為常見壓縮工具;xz 早期亦有 DOS 版本。 * Windows 常見:RAR、ZIP;早期:ARJ、LHA;講者於 YouTube 有相關教學錄影(關鍵字 IR 或 LIP/ZIP)。 * 壓縮格式與副檔名對應 ** 副檔名常反映壓縮工具與格式;遇到陌生格式可上網查詢,課程允許並鼓勵查詢。 * tar 與 gzip 的關係 ** gzip 本為獨立軟體;tar 後來整合壓縮功能,故可直接使用 tar -z 產出 .tar.gz,無需先 tar 再 gzip。 === 管線、輸出導向與標準輸入輸出(引介) === * 在列出 tar 內容過多時,可配合管線做分頁顯示(例如 pipe 至分頁工具);本節作為後續「標準輸入輸出」章節的引入。 * 本次已示範「輸出導向」(>)用於合併檔案;後續課程將系統性講解標準輸入、標準輸出與管線的意義與用法。 [[檔案:2026-0330-01.png|800px]] === 標準輸入輸出基礎 === * 標準 I/O 的定義 ** 每個在 Linux 中執行的程式(如 ls)都有「一個標準輸入」與「兩個標準輸出」。 ** 標準輸入 (Standard Input / stdin):程式接收資料的來源,預設為鍵盤;在圖形介面(GUI)中,滑鼠也可視為一種輸入。 ** 標準輸出 (Standard Output / stdout):程式顯示正常執行結果的地方,預設為螢幕。 ** 標準錯誤輸出 (Standard Error Output / stderr):程式顯示錯誤訊息的地方,預設亦為螢幕。 * 區分標準輸出與錯誤輸出 ** 儘管兩者預設都顯示在螢幕上,仍可由訊息內容加以辨識。 ** 範例:執行 ls -l CAT /etc/passwd ** CAT 不存在,系統顯示 ls: cannot access 'CAT': No such file or directory,屬於標準錯誤輸出 (stderr)。 ** /etc/passwd 存在,系統列出其詳細資訊,屬於標準輸出 (stdout)。 * I/O 的可轉向特性 ** 標準輸入、標準輸出與錯誤輸出的目的地可被改變。 ** 輸入可由鍵盤改為檔案。 ** 輸出與錯誤輸出可由螢幕轉向到檔案或其他裝置(如印表機),此時螢幕不再顯示訊息。 === 輸出轉向 === * 標準輸出轉向 (>) ** 使用 > 將指令的標準輸出寫入檔案而非螢幕。 ** 特性:覆蓋模式。若檔案存在,原內容會被清除後覆寫;若不存在,會自動建立。 ** 範例:cat ~/.bashrc > bashrc.backup 將 .bashrc 內容寫入 bashrc.backup,螢幕無輸出;重複執行,檔案大小不變,因為每次覆蓋。 * 標準輸出附加轉向 (>>) ** 使用 >> 將標準輸出「附加」在檔案末尾。 ** 特性:累加模式。不存在則建立;存在則在末尾新增,不清除原內容。 ** 範例:date >> date.log,每次執行都把日期時間累加至 date.log,常用於日誌。 * 錯誤輸出轉向 (2>) ** 使用 2> 將標準錯誤輸出寫入檔案;數字 2 代表 stderr(檔案描述符 2)。 ** 說明:stdin、stdout、stderr 對應的檔案描述符分別為 0、1、2;因此 > 等同 1>,0< 代表標準輸入轉向。 ** 應用:在腳本中可將錯誤訊息導向日誌,避免打擾使用者並利於除錯。 ** 範例:cd /CAT 2> error.log,因 /CAT 不存在,錯誤訊息寫入 error.log,螢幕不顯示。 * 錯誤輸出附加轉向 (2>>) ** 使用 2>> 將標準錯誤輸出「附加」到檔案末尾。 ** 範例:對會產生錯誤的指令使用 2>> error.log,每次的錯誤訊息都累加至檔案。 * 合併輸出轉向 (&>) ** 使用 &> 將「標準輸出」與「標準錯誤輸出」同時重定向到同一檔案。 ** 適用於需要完全靜默(不在螢幕顯示任何結果或錯誤)的情境。 ** 同樣提供附加模式 &>>,可累加所有輸出。 === 輸入轉向 === * 標準輸入轉向 (<) ** 使用 < 將檔案內容作為指令的標準輸入,取代鍵盤輸入。 ** 範例比較: ** head -n 3 namelist.txt:head 直接讀取檔案。 ** head -n 3 < namelist.txt:head 從標準輸入讀取,而標準輸入被重定向為檔案內容。 ** 兩種寫法結果相同,但內部處理流程不同。 * Here Document (即時文件) ** 使用 << 配合「終止識別符」在命令列提供多行輸入,常用於快速建立簡單檔案。 ** 語法:command << TERMINATOR,輸入多行內容,直到新的一行單獨輸入 TERMINATOR 結束。 ** 範例:cat > stdio.txt << END,輸入多行文本,最後單獨輸入 END 結束;所有內容寫入 stdio.txt。 ** 注意:終止識別符所在行必須只有該識別符,不能包含其他字元或空白。 ** 精簡寫法:cat > file.txt,不使用 Here Document,按 Enter 後直接輸入,使用 Ctrl+D 結束,亦可達成類似效果。 [[檔案:2026-0330-02.png|800px]] === 管線 (Pipe) === * 定義與功能 ** 管線符號為 |,可將前一個程序(指令)的「標準輸出 (Standard Output)」導向下一個程序的「標準輸入 (Standard Input)」。 ** 僅處理標準輸出,不處理錯誤輸出 (Error Output)。 * 使用範例與目的 ** 範例 1: ls -l | nl ** ls -l 以行列格式輸出目前目錄內容(標準輸出)。 ** 管線將 ls -l 的輸出傳給 nl。 ** nl 為輸入內容加上行號後再輸出,便於閱讀與參照。 ** 範例 2: [command] --help | less ** --help 輸出通常篇幅較長,超出單頁。 ** 透過管線將輸出交給 less 分頁瀏覽,方便查看完整說明。 * 組合應用 ** Linux 指令多為單一職責;藉由管線組合不同指令,可完成更複雜任務。例如一個指令產生資料,另一個指令負責處理或過濾。 === grep 指令 === * 基本功能 ** 用於在檔案內容中搜尋關鍵字。 ** 以「行」為單位進行搜尋;若某行包含關鍵字,grep 輸出該整行。 ** 匹配到的關鍵字會以特殊顏色標示,利於辨識。 * 常用參數 ** -i: 忽略大小寫 (Ignore case)。例如搜尋 "Peter" 加上 -i 時,"peter" 也會被匹配。 ** -n: 在每行輸出前顯示原始檔案的行號。 ** -w: 完整單詞匹配 (Whole word match)。如搜尋 b,未加 -w 時 abcd 會被匹配;加上 -w 則僅匹配獨立單詞 b(前後有空白)。 ** -c: 統計符合關鍵字的行數 (Count),只輸出計數數字。撰寫腳本時可用於條件判斷。 === 指令串接 === * 連續指令 (Sequential Commands) ** 以分號 (;) 作為指令分隔。 ** 指令依序執行(指令1完成後執行指令2,依此類推)。 ** 特性:即使前一個指令失敗(如拼字錯誤或找不到目錄),後續指令仍「無條件」執行。使用時須確保每個指令正確,以避免意外(如誤刪檔案)。 ** 應用場景:多步驟且彼此無依賴性時可寫在同一行,例如先執行耗時編譯,再執行程式,最後以 email 寄出結果,以實現自動化流程。 * 條件式指令 (Conditional Commands) ** && (AND) ** 語法:指令1 && 指令2 ** 邏輯:僅在「指令1成功」時才執行「指令2」;若指令1失敗,指令2不執行。 ** 範例:cd /sys && ls。若成功切換至 /sys,則執行 ls;若目錄不存在導致切換失敗,ls 不會執行。 ** 應用:有相依性的任務,例如編譯成功後才執行程式。 ** || (OR) ** 語法:指令1 || 指令2 ** 邏輯:僅在「指令1失敗」時才執行「指令2」;若指令1成功,指令2不執行。 ** 範例:ls /etc/host || ls /etc/host。若找不到 /etc/host(指令失敗),則改執行 ls /etc/host 列出所有以 host 開頭的檔案。 ** 應用:提供備援或錯誤處理,例如主要指令失敗時執行回報或替代方案。 === 其他概念 === * 錯誤輸出重導向 ** 透過 2> /dev/null 將錯誤訊息導向 null 裝置(記憶體空區),避免在螢幕顯示錯誤。 * 補充指令 ** uniq: 用於統計重複行等用途,但前提是資料需先排序 (sorted)。講師列為補充內容,建議有興趣者自行研究。 * 檔案系統刪除機制 ** Windows: 刪除檔案時,系統在檔案目錄(索引)標記「已刪除」,實際資料區塊未立即清除。只要未被新資料覆蓋,救援軟體可透過索引找回原始檔名與內容。 ** Linux: 刪除檔案時,會直接釋放對應資料區塊(具體機制於後續章節說明),使檔案難以救回。市面上也較少專門救援 Linux 檔案系統的軟體。 [[檔案:2026-0330-03.png|800px]]
返回到「
緯育 2026-0320
」。
* [[檔案:2000-Dragon-30.png|15px]] [[附近走走]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[應用程式]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[郵遞區號]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[作品紀錄]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[攝影相簿]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[網路書籤]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[網路照片]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[星艦日誌]]<br> * [[檔案:2000-Dragon-30.png|15px]] [[Privacy_Policy|隱私政策]]<br>
附近走走
應用程式
郵遞區號
作品紀錄
攝影相簿
網路書籤
網路照片
星艦日誌
隱私政策
首頁
wiki工具
wiki工具
特殊頁面
頁面工具
頁面工具
使用者頁面工具
更多
連結至此的頁面
相關變更
頁面資訊
頁面日誌