C4W3 — Bash Shell 中的 Linux 指令
本週核心問題:資安分析師如何在沒有圖形介面的情況下,用 Bash 指令完成檔案導航、內容過濾、權限管理與使用者管理?
一、指令基礎:怎麼跟 Linux 對話?
1.1 指令與引數
在 Bash shell 中,溝通方式就像對話:你輸入指令(command),OS 回傳結果。
| 概念 | 說明 | 範例 |
|---|---|---|
| 指令 | 告訴電腦要做什麼的指示 | echo、ls、pwd |
| 引數(argument) | 指令需要的額外資訊 | echo "Hello" 中的 "Hello" |
| 選項(option) | 修改指令行為,通常以 - 開頭 | ls -l 中的 -l |
大小寫有別
Linux 所有指令、引數、檔名、目錄名都區分大小寫。
ls和LS是不同的東西。
1.2 標準輸入與輸出
| 概念 | 方向 | 說明 |
|---|---|---|
| 標準輸入(stdin) | 使用者 → OS | 透過命令列輸入的資訊 |
| 標準輸出(stdout) | OS → 使用者 | OS 透過 shell 回傳的資訊 |
二、導航檔案系統:東西放在哪裡?
2.1 FHS 檔案階層結構
Linux 用樹狀結構組織所有檔案,一切從根目錄(/)開始往下分支:
/ ← 根目錄(root directory)
├── home/ ← 使用者家目錄
│ ├── analyst/ ← 個人目錄
│ │ ├── logs/
│ │ ├── projects/
│ │ └── reports/
│ └── analyst2/
├── bin/ ← 二進位執行檔(binary)
├── etc/ ← 系統設定檔
├── tmp/ ← 暫存檔(⚠️ 攻擊者常利用,任何人可改)
└── mnt/ ← 掛載外部媒體(USB、硬碟)
man hier可查看完整 FHS 目錄說明
2.2 路徑類型
| 類型 | 起點 | 範例 |
|---|---|---|
| 絕對路徑 | 從根目錄 / 開始 | /home/analyst/logs |
| 相對路徑 | 從目前目錄開始 | ../projects(上一層的 projects) |
特殊符號:
| 符號 | 意義 | 範例 |
|---|---|---|
/ | 根目錄,或路徑分隔符 | /home/analyst |
~ | 目前使用者的家目錄 | ~/logs = /home/analyst/logs |
. | 目前目錄 | ./file.txt |
.. | 上一層目錄 | cd .. |
2.3 導航指令
| 指令 | 功能 | 範例 |
|---|---|---|
pwd | 顯示目前所在目錄(print working directory) | pwd → /home/analyst |
ls | 列出目前目錄的檔案與子目錄 | ls /home/analyst/reports |
cd | 切換目錄(change directory) | cd logs、cd /home/analyst |
whoami | 顯示目前登入的使用者名稱 | whoami → analyst |
三、讀取檔案內容:怎麼看檔案裡寫了什麼?
| 指令 | 功能 | 適用場景 |
|---|---|---|
cat | 顯示檔案全部內容 | 小型檔案、設定檔 |
head | 顯示檔案前 10 行(預設) | 快速確認檔案開頭 |
tail | 顯示檔案最後 10 行(預設) | 查看 log 最新紀錄 |
less | 分頁瀏覽檔案內容 | 大型檔案 |
head/tail 自訂行數:head -n 5 updates.txt(只看前 5 行)
less 操作快捷鍵:
| 按鍵 | 動作 |
|---|---|
Space | 下一頁 |
b | 上一頁 |
↑ / ↓ | 上下一行 |
q | 離開 |
四、過濾與搜尋:怎麼從大量資料中找到需要的東西?
4.1 grep — 在檔案中搜尋字串
grep 搜尋指定檔案,回傳所有包含目標字串的行。
grep OS updates.txt # 在 updates.txt 中搜尋含 "OS" 的行
grep error server_logs.txt # 在 log 中搜尋錯誤訊息資安應用場景
團隊發現惡意程式包含特定字串,你可以用
grep搜尋其他檔案是否也含有相同字串,判斷感染範圍。
4.2 管線(piping)— 串接指令
管線(|)把前一個指令的輸出,當作下一個指令的輸入。就像水管:水從一端進去,另一端出來。
ls /home/analyst/reports | grep users
# 第一步:ls 列出 reports 目錄的所有檔案
# 第二步:grep 只留下檔名含 "users" 的結果管線是通用工具
不只能配 grep,任何時候你想把「指令 A 的輸出」送給「指令 B 處理」都可以用
|。
4.3 find — 按條件搜尋檔案
find 用來搜尋符合特定條件的檔案或目錄。
| 選項 | 功能 | 範例 |
|---|---|---|
-name | 按檔名搜尋(大小寫敏感) | find /home -name "*log*" |
-iname | 按檔名搜尋(不分大小寫) | find /home -iname "*log*" |
-mtime | 按修改時間搜尋(以天為單位) | find /home -mtime -3(3 天內修改過的) |
-mmin | 按修改時間搜尋(以分鐘為單位) | find /home -mmin -60 |
*是萬用字元,代表零個或多個任意字元。"*log*"= 檔名中任何位置包含 “log”
-mtime 的正負號:
| 寫法 | 意義 |
|---|---|
-mtime -3 | 3 天內修改過的 |
-mtime +3 | 超過 3 天前修改的 |
五、管理目錄與檔案:怎麼建立、搬移、刪除?
5.1 目錄操作
| 指令 | 功能 | 注意事項 |
|---|---|---|
mkdir | 建立新目錄 | mkdir drafts |
rmdir | 刪除空目錄 | 目錄不是空的會報錯,防止誤刪 |
5.2 檔案操作
| 指令 | 功能 | 範例 |
|---|---|---|
touch | 建立空檔案 | touch report.txt |
rm | 刪除檔案(⚠️ 不易復原) | rm old_report.txt |
mv | 移動檔案/目錄(也可用來改名) | mv file.txt /home/analyst/logs/ |
cp | 複製檔案/目錄 | cp vuln.txt /home/analyst/projects/ |
rm刪除後很難復原不像桌面環境有資源回收桶,
rm刪掉就是真的刪掉。
mv 改名用法:mv permissions.txt perm.txt(把檔案重新命名)
5.3 nano 文字編輯器
nano 是 Linux 內建的命令列文字編輯器,適合初學者。
nano report.txt # 開啟(或建立)report.txt 來編輯| 快捷鍵 | 動作 |
|---|---|
Ctrl + O | 存檔 |
Ctrl + X | 離開 |
5.4 輸出重導向
除了 nano,還可以用重導向符號把內容寫入檔案:
| 符號 | 功能 | 注意 |
|---|---|---|
> | 覆寫寫入(原內容被清除) | ⚠️ 會清空原本的檔案內容 |
>> | 附加寫入(加在檔案尾端) | 比較安全 |
echo "last updated: May 2026" >> permissions.txt # 附加一行
echo "reset" > permissions.txt # 整個檔案被覆寫成 "reset"如果指定的檔案不存在,
>和>>都會自動建立新檔案。
六、檔案權限:誰可以看、改、執行?
6.1 三種權限
| 權限 | 字母 | 對檔案的意義 | 對目錄的意義 |
|---|---|---|---|
| 讀取(read) | r | 可讀取檔案內容 | 可列出目錄中的檔案 |
| 寫入(write) | w | 可修改檔案內容 | 可在目錄中建立新檔案 |
| 執行(execute) | x | 可執行該檔案(如果是程式) | 可進入該目錄並存取其中檔案 |
6.2 三種擁有者
| 擁有者 | 符號 | 說明 |
|---|---|---|
| 使用者(user) | u | 檔案的擁有者 |
| 群組(group) | g | 擁有者所屬的群組 |
| 其他(other) | o | 系統上所有其他使用者 |
6.3 解讀 10 字元權限字串
d rwx rwx rwx
│ └┬┘ └┬┘ └┬┘
│ │ │ └── other 的權限
│ │ └────── group 的權限
│ └────────── user 的權限
└───────────── 檔案類型:d = 目錄、- = 一般檔案
實際範例
-rw-r-----表示:
-→ 一般檔案rw-→ user 可讀、可寫、不可執行r--→ group 只能讀---→ other 沒有任何權限
6.4 查看權限
| 指令 | 功能 |
|---|---|
ls -l | 顯示檔案詳細資訊(含權限、擁有者、群組、大小、修改時間) |
ls -a | 顯示隱藏檔案(以 . 開頭的檔案) |
ls -la | 同時顯示隱藏檔案和詳細權限 |
世界可寫檔案(world-writable file)
當 user、group、other 都有寫入權限時,任何人都能修改該檔案,這是重大安全風險。
七、變更權限:chmod
7.1 符號模式語法
chmod 用來變更檔案或目錄的權限。語法結構:
chmod [擁有者][運算子][權限] 檔名
擁有者代碼:u(user)、g(group)、o(other)
運算子:
| 運算子 | 功能 |
|---|---|
+ | 新增權限 |
- | 移除權限 |
= | 直接設定權限(覆蓋原有權限) |
7.2 實際範例
# 幫 group 加寫入權限,同時移除 other 的讀取權限
chmod g+w,o-r access.txt
# 把所有擁有者都設成只能讀
chmod u=r,g=r,o=r login_sessions.txt
# 移除 group 和 other 的所有權限
chmod g-rwx,o-rwx bonuses.txt最小權限原則(Principle of Least Privilege)
只授予完成任務所需的最低權限。例如:薪資檔案只有 HR 負責人能存取,其他 HR 群組成員不需要讀寫權限。 發現
-rw-rw----時,如果 group 不該有寫入權限,就用chmod g-w拿掉。
八、使用者管理:誰可以進入系統?
8.1 root 使用者與 sudo
| 概念 | 說明 |
|---|---|
| root 使用者 | 擁有最高權限的超級使用者,可修改系統任何東西 |
| 為什麼不直接用 root 登入 | ① 安全風險:攻擊者會瞄準 root ② 容易誤操作不可逆 ③ 多人環境無法追蹤是誰下了指令 |
| sudo | 暫時授予提升權限的指令(super-user-do),用完即恢復一般權限 |
| sudoers 檔 | 設定哪些使用者可以使用 sudo 的組態檔 |
sudo 就像飯店萬能鑰匙
清潔人員刷員工證後可以用萬能鑰匙開任何房間。但如果外人拿到這張員工證和鑰匙,就能進入所有房間。所以只有真正需要的人才該有 sudo 權限。
8.2 使用者管理指令
| 指令 | 功能 | 需要 sudo |
|---|---|---|
useradd | 新增使用者 | 是 |
usermod | 修改既有使用者 | 是 |
userdel | 刪除使用者 | 是 |
chown | 變更檔案/目錄的擁有者 | 是 |
8.3 useradd 選項
| 選項 | 功能 | 範例 |
|---|---|---|
-g | 指定主要群組 | sudo useradd -g security fgarcia |
-G | 加入附屬群組(可多個) | sudo useradd -G finance,admin fgarcia |
8.4 usermod 選項
| 選項 | 功能 | 範例 |
|---|---|---|
-g | 變更主要群組 | sudo usermod -g executive fgarcia |
-a -G | 加入附屬群組(保留原有群組) | sudo usermod -a -G marketing fgarcia |
-d | 變更家目錄 | sudo usermod -d /home/garcia_f fgarcia |
-l | 變更登入名稱 | sudo usermod -l garcia_f fgarcia |
-L | 鎖定帳號(無法登入) | sudo usermod -L fgarcia |
-G不加-a會覆蓋
sudo usermod -G sales fgarcia會取代原有的所有附屬群組,只留 sales。 要保留原有群組並新增,一定要用-a -G。
8.5 userdel 選項
| 選項 | 功能 | 注意 |
|---|---|---|
| (無選項) | 刪除使用者但保留家目錄 | 預設行為 |
-r | 刪除使用者及家目錄所有檔案 | ⚠️ 確保有備份再用 |
離職帳號處理建議
與其直接
userdel,可以先用usermod -L鎖定帳號。這樣可以先確認該使用者擁有哪些檔案、移交所有權後再刪除。
8.6 chown 變更所有權
sudo chown fgarcia access.txt # 變更檔案的 user 擁有者
sudo chown :security access.txt # 變更檔案的 group 擁有者(注意冒號)九、取得協助:不會的指令怎麼查?
9.1 內建指令
| 指令 | 功能 | 範例 |
|---|---|---|
man | 顯示指令的完整手冊頁(manual) | man chmod |
whatis | 一行描述某個指令的功能 | whatis tail → “output the last part of files” |
apropos | 搜尋手冊頁描述中包含特定字串的指令 | apropos password |
apropos -a | 搜尋同時包含多個關鍵字的指令 | apropos -a change password |
9.2 線上社群
- Unix & Linux Stack Exchange:問答式社群,答案由社群投票排序,高品質答案在最上面
- Google 搜尋:直接搜尋 “how to [任務] in Linux” 通常就能找到答案
日常學習習慣
遇到不熟的指令先用
whatis快速了解功能,需要詳細說明再用man查完整手冊。遇到「我知道要做什麼但不知道用哪個指令」的情況,用apropos搜尋關鍵字。
十、術語速查表
| 術語 | 定義 |
|---|---|
| 絕對路徑(Absolute file path) | 從根目錄開始的完整檔案路徑 |
| 引數(Argument) | 指令所需的額外資訊 |
| 驗證(Authentication) | 確認某人身分的過程 |
| 授權(Authorization) | 授予系統中特定資源存取權限的概念 |
| Bash | 大多數 Linux 發行版的預設 shell |
| 指令(Command) | 告訴電腦做某事的指示 |
| 檔案路徑(File path) | 檔案或目錄的位置 |
| 檔案階層標準(FHS) | Linux 中組織資料的元件 |
| 過濾(Filtering) | 選取符合特定條件的資料 |
| nano | Linux 預設可用的命令列文字編輯器 |
| 選項(Options) | 修改指令行為的輸入 |
| 權限(Permissions) | 對檔案或目錄授予的存取類型 |
| 最小權限原則(Principle of least privilege) | 只授予完成任務所需最低存取權限的概念 |
| 相對路徑(Relative file path) | 從使用者目前目錄開始的檔案路徑 |
| 根目錄(Root directory) | Linux 中最高層級的目錄 |
| root 使用者(Root user / superuser) | 擁有提升權限可修改系統的使用者 |
| 標準輸入(Standard input) | OS 透過命令列接收的資訊 |
| 標準輸出(Standard output) | OS 透過 shell 回傳的資訊 |