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 -33 天內修改過的
-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)選取符合特定條件的資料
nanoLinux 預設可用的命令列文字編輯器
選項(Options)修改指令行為的輸入
權限(Permissions)對檔案或目錄授予的存取類型
最小權限原則(Principle of least privilege)只授予完成任務所需最低存取權限的概念
相對路徑(Relative file path)從使用者目前目錄開始的檔案路徑
根目錄(Root directory)Linux 中最高層級的目錄
root 使用者(Root user / superuser)擁有提升權限可修改系統的使用者
標準輸入(Standard input)OS 透過命令列接收的資訊
標準輸出(Standard output)OS 透過 shell 回傳的資訊