CH4 — 檔案系統
📋 大綱
📁 1|系統目錄架構 (FHS)
Linux 檔案系統採用樹狀目錄結構,所有目錄由此開頭。了解各目錄用途,是系統管理的基本功。
| 目錄 | 用途說明 |
|---|---|
/ | 根目錄,容納整個 Linux 系統的所有目錄和檔案 |
/bin | 放置操作系統時所需的各種指令程式 |
/boot | 系統啟動時必須讀取的檔案,包括系統核心在內 |
/dev | 存放周邊設備代號的檔案 |
/etc | 放置與系統設定、管理相關的檔案 |
/etc/init.d | 開機或關機時所執行的 script 檔案 |
/home | 使用者帳號的家目錄 |
/lib | 放置共用的函式庫 |
/lib/modules | 存放系統核心的模組 |
/lost+found | 檔案系統發生問題時,Linux 自動掃描並修正錯誤,遺失區段轉成檔案存放於此 |
/media | 光碟、隨身碟與其他分割區的自動掛載點 |
/mnt | 手動掛載其他分割區的掛載點 |
/proc | 系統核心和執行程序之間的資訊(ps、free 等指令的資料來源) |
/root | 系統管理者(root)的家目錄 |
/sbin | 存放啟動系統需執行的程式 |
/tmp | 供全部使用者暫時放置檔案。每次開機都會清空,重要檔案勿存於此。 |
/usr | 包括許多子目錄,用來存放系統指令、程式等資訊 |
/usr/bin | 放置使用者可以執行的指令(clear、find、free 等) |
/usr/local | 存放自行編譯的軟體,與 DPKG 安裝的軟體區隔 |
/usr/share/doc | 存放各種文件 |
/usr/share/man | 放置多種線上說明文件 |
/usr/src | 存放原始碼,Linux 核心原始碼放在這裡 |
/var | 執行時內容經常變動的資料或暫存檔 |
/var/tmp | 提供程式產生的暫存檔使用 |
查詢目錄所佔硬碟空間:du -sh 目錄名稱
du -sh:僅顯示該目錄的總計大小(-s = summarize),不列出子目錄細項du -h:顯示該目錄下每個子目錄與檔案的大小(遞迴列出),適合查看哪個子資料夾吃最多空間
常見組合:du -sh * — 列出目前目錄每個項目(檔案或資料夾)的總大小。
📁 2|ext 檔案系統
Ubuntu 預設採用 ext4 檔案系統。ext4 是 ext3 的下一代,ext3 則是 ext2 的下一代。
ext3 與 ext2 的關鍵差異:ext3 是日誌式檔案系統 (Journal File System),提供更好的安全性——當系統突然斷電時,日誌式檔案系統可以快速回復到正常狀態。
ext3 → ext4 轉換(tune2fs):使用 tune2fs 指令可將 ext3 分割區轉換為 ext4,並修改 /etc/fstab 檔,重啟後生效。
ext4 使用的 inode 結構,能指向 12 個資料區塊。若檔案超大則啟用間接指向指標 (indirect pointer)。
📁 3|inode 結構
inode(索引節點)是 Linux 用來描述檔案 metadata 的資料結構,每個檔案和目錄都有一個唯一的 inode 編號。
📁 4|檔案與目錄的權限
執行 ls -l 或 ls -al 時,第一欄共 10 個字元用來標示該檔案的屬性及權限。
| 字元 | 說明 | 備註 |
|---|---|---|
d | 目錄 | directory |
- | 普通檔案 | regular file |
l | 符號連結檔案 | 指向另一個檔案 |
b | 區塊設備檔案 | 如硬碟分割區 |
c | 字元設備檔案 | 如終端機 |
s | 特殊檔案(系統資料結構) | 少見 |
p | 管線檔案 | 少見 |
| 權限 | 對檔案的意義 | 對目錄的意義 |
|---|---|---|
r (Read, 4) | 讀取檔案內容 | 瀏覽目錄內容(列出檔案) |
w (Write, 2) | 修改檔案內容 | 刪除或移動目錄內的檔案 |
x (eXecute, 1) | 執行檔案 | 進入目錄(但不一定能瀏覽,視 r 權限而定) |
- | 不具該項權限 | — |
常見權限範例:
-rwx------(700):擁有者完整權限,其他人無權-rwxr--r--(744):擁有者完整權限,群組與其他人僅讀取-rw-rw-r--(664):擁有者與群組讀寫,其他人僅讀取drwxr-x---(750):群組可讀寫,其他使用者無權- 家目錄預設權限:
drwxr-x---(750),只有擁有者能完整操作
📁 5|數字法更改權限
| 權限 | 數值 | 說明 |
|---|---|---|
r | 4 | 讀取 |
w | 2 | 寫入 |
x | 1 | 執行 |
| 特殊權限 | ||
s (SUID) | 4 | 以擁有者身份執行 |
s (SGID) | 2 | 以群組身份執行 |
t (Sticky) | 1 | 僅擁有者可刪除目錄內檔案 |
使用 chmod 指令:chmod 755 檔案。範例:-rwxr-xr-x = 4+2+1 + 4+0+1 + 4+0+1 = 755
📁 6|文字法更改權限
文字法使用 chmod 配合身份(u/g/o/a)+ 運算(+/-/=)+ 權限(r/w/x)來設定。
| 參數 | 說明 |
|---|---|
u+rw | 為擁有者加入讀取和寫入權限 |
g-x | 取消同群組使用者的執行權限 |
o=rx | 設定其他使用者僅有讀取和執行權限 |
ugo+x 或 a+x | 為所有人加入執行權限 |
-R | 遞迴處理,包括子目錄內所有檔案 |
u+s | 設定 SUID 特殊權限 |
g+s | 設定 SGID 特殊權限 |
o+t | 設定 Sticky Bit(/tmp 目錄常見) |
執行 chown 使用者:群組 檔案 指令,修改檔案或目錄的擁有者及所屬群組。例如:sudo chown mary:users nohup.out
📁 7|實際練習
- 使用
-R參數遞迴更改目錄下所有檔案權限:chmod -R 777 mydir - 無
-R:僅更改該目錄本身權限,不影響內部檔案 - 使用
chown將檔案擁有者轉移給其他使用者(需 root 權限) - 使用者和群組的關係記錄在
/etc/group檔案中
🔍 8|檔案搜尋指令(locate / find / which)
locate 透過預先建立的檔案資料庫(updatedb)做快速搜尋,適合找已知名稱的檔案,速度遠快於 find。
| 指令 | 說明 | 範例 |
|---|---|---|
locate 關鍵字 | 在資料庫中搜詢含有關鍵字的檔案路徑 | locate passwd |
locate -i 關鍵字 | 忽略大小寫 | locate -i readme |
locate -c 關鍵字 | 只顯示符合的數量 | locate -c .conf |
updatedb | 手動更新資料庫(需 root) | sudo updatedb |
⚠️ locate 搜的是資料庫,若新建檔案後找不到,先執行 sudo updatedb 更新資料庫。
find 從指定目錄出發,針對檔名、大小、時間、權限等條件做即時搜尋,功能最齊全但較慢。
| 指令 | 說明 | 範例 |
|---|---|---|
find . -name "*.txt" | 依檔名搜尋(可用萬用字元) | 当前目錄下找所有 .txt |
find /home -name "file*" | 在 /home 目錄下搜尋 | 指定起始路徑 |
find . -type f | 只找檔案(file) | 排除目錄 |
find . -type d | 只找目錄(directory) | 只列出目錄 |
find . -size +10M | 找大於 10MB 的檔案 | + 表大於,- 表小於 |
find . -mtime -7 | 找 7 天內修改過的檔案 | -7 = 7天內,+7 = 超過7天 |
find . -user root | 找擁有者為 root 的檔案 | 可換成實際使用者名稱 |
find . -perm 755 | 找權限為 755 的檔案 | 精確比對權限 |
find . -name "*.log" -exec rm {} \; | 找到後對每個檔案執行指令 | -exec 參數強大,可搭配 rm、cp、ls 等 |
find . -empty | 找空檔案或空目錄 | 清理可用 |
which 根據 $PATH 環境變數,找出系統會執行哪個版本的指令,適合確認指令是否存在或被別名覆寫。
| 指令 | 說明 | 範例 |
|---|---|---|
which 指令名 | 回傳該指令的完整路徑 | which python |
which -a 指令名 | 列出所有符合 $PATH 的版本 | which -a python |
which npm | 查看 npm 安裝路徑 | 確認是否安裝 |
範例情境:which python → /usr/bin/python;若同時有 conda 環境,可能出現多個版本,用 which -a python 確認所有路徑。
clear 指令用於清除終端機畫面。(Windows 指令為 cls,全名為 Clear Screen)
當指令輸出結果太長時,可用 more 或 less 分頁檢視,避免一次全部顯示刷屏。
| 指令 | 說明 | 範例 |
|---|---|---|
指令 | more | 分頁顯示,空白鍵換頁,Enter 換一行 | du -h | more |
指令 | less | 分頁顯示,可上下鍵滾動、搜尋,離開按 q | ls -la / | less |
more 檔案 | 直接用 more 開啟檔案 | more readme.txt |
less 檔案 | 直接用 less 開啟檔案 | less readme.txt |
less 比 more 功能更強,幾乎是業界標配。可用 /關鍵字 搜尋,n 跳到下一個符合處,q 離開。