檔案系統
Linux 檔案系統結構與權限管理
Linux 目錄結構
Linux 使用樹狀目錄結構,所有內容都從根目錄 / 開始。
/bin, /sbin
/bin- 主要放置一般使用者可以操作的指令 (binary)/sbin- 放置系統管理員可以操作的指令 (system binary)- 現代系統中通常連結到
/usr/bin,/usr/sbin
/boot
主要放置開機相關檔案:
vmlinuz- Linux kernelinitrd- 初始 RAM diskgrub- 開機載入程式設定
/dev
放置裝置檔案 (device files):
/dev/sda- 第一個 SATA 硬碟/dev/null- 空裝置 (丟棄所有寫入)/dev/zero- 提供無限的零/dev/random- 隨機數產生器/dev/tty- 終端機裝置
/etc
系統設定檔目錄:
/etc/passwd- 使用者帳號資訊/etc/group- 群組資訊/etc/fstab- 檔案系統掛載設定/etc/hosts- 主機名稱對應/etc/systemd/system- systemd 系統服務設定
/home
使用者家目錄:
/home/username- 各使用者的個人目錄- 存放使用者的個人檔案和設定
/lib, /lib64
系統函式庫:
- 共享函式庫 (shared libraries)
- kernel modules
/media, /mnt
/media- 可移除媒體自動掛載點 (USB, CD-ROM)/mnt- 臨時掛載點 (手動掛載)
/opt
第三方軟體安裝目錄:
- 選用的應用程式套件
/proc
虛擬檔案系統,提供程序和核心資訊:
/proc/cpuinfo- CPU 資訊/proc/meminfo- 記憶體資訊/proc/[pid]- 程序資訊
/root
root 使用者的家目錄
/run
執行時期變數資料:
- 系統啟動後的運行時資料
- tmpfs 檔案系統 (存在記憶體中)
/srv
服務資料目錄:
- 系統提供的服務資料 (如 web, ftp)
/sys
虛擬檔案系統,提供核心資訊:
- 硬體裝置資訊
- 核心模組資訊
/tmp
臨時檔案目錄:
- 所有使用者都可寫入
- 系統重啟時通常會清空
/usr
使用者程式和資料:
/usr/bin- 使用者指令/usr/sbin- 系統管理指令/usr/lib- 函式庫/usr/local- 本機安裝的軟體/usr/share- 共享資料 (文件、圖示等)
/var
變動資料目錄:
/var/log- 系統記錄檔/var/cache- 快取資料/var/spool- 列印佇列等/var/tmp- 臨時檔案 (重啟後保留)
Linux Permission System
Permission Types
Linux 檔案權限分為三種:
- r (read) - 讀取權限 (4)
- w (write) - 寫入權限 (2)
- x (execute) - 執行權限 (1)
Permission Groups
權限分為三組:
- User (u) - 檔案擁有者
- Group (g) - 群組成員
- Others (o) - 其他使用者
查看權限
ls -l filename
# -rwxr-xr-- 1 user group 1234 Jan 1 12:00 filename
# │└┬┘└┬┘└┬┘ │ │ │ │ │
# │ │ │ │ │ │ │ │ 檔案名稱
# │ │ │ │ │ │ │ 修改日期
# │ │ │ │ │ │ 檔案大小
# │ │ │ │ │ 群組
# │ │ │ │ 擁有者
# │ │ │ others 權限
# │ │ group 權限
# │ user 權限
# 檔案類型 (-:檔案, d:目錄, l:連結)chmod - 修改權限
數字模式
# rwx = 4+2+1 = 7
# rw- = 4+2 = 6
# r-x = 4+1 = 5
chmod 755 filename # rwxr-xr-x
chmod 644 filename # rw-r--r--
chmod 600 filename # rw-------符號模式
chmod u+x filename # 使用者增加執行權限
chmod g-w filename # 群組移除寫入權限
chmod o=r filename # 其他人只有讀取權限
chmod a+r filename # 所有人增加讀取權限遞迴修改
chmod -R 755 directory/ # 遞迴修改目錄chown - 修改擁有者
chown user filename # 修改擁有者
chown user:group filename # 同時修改擁有者和群組
chown -R user:group directory/ # 遞迴修改chgrp - 修改群組
chgrp group filename # 修改群組
chgrp -R group directory/ # 遞迴修改Special Permissions
Setuid (SUID) - 4000
- 執行時以檔案擁有者身份運行
chmod u+s filename
chmod 4755 filenameSetgid (SGID) - 2000
- 執行時以群組身份運行
- 目錄中建立的檔案繼承群組
chmod g+s filename
chmod 2755 filenameSticky Bit - 1000
- 只有檔案擁有者可刪除
- 常用於 /tmp
chmod +t directory
chmod 1777 directorySoft Link vs Hard Link
Hard Link (硬連結)
- 指向相同的 inode
- 刪除原檔案,連結仍可用
- 不能跨檔案系統
- 不能連結目錄
ln source.txt hardlink.txtSoft Link / Symbolic Link (符號連結)
- 指向檔案路徑
- 刪除原檔案,連結失效
- 可跨檔案系統
- 可連結目錄
ln -s source.txt softlink.txt
ln -s /path/to/dir linkdir查看連結
ls -l
# lrwxrwxrwx ... softlink.txt -> source.txt
# ^
# l 代表 symbolic link
ls -li # 顯示 inode numberinode
什麼是 inode?
- Index node,索引節點
- 儲存檔案的 metadata (但不包含檔名)
- 每個檔案都有一個 inode
inode 包含的資訊
- 檔案大小
- 擁有者 UID
- 群組 GID
- 權限
- 時間戳記 (atime, mtime, ctime)
- 資料區塊位置
查看 inode
ls -i filename # 顯示 inode number
stat filename # 詳細資訊
df -i # 查看 inode 使用情況Mount Points
掛載檔案系統
# 掛載
mount /dev/sdb1 /mnt/usb
# 卸載
umount /mnt/usb
# 查看已掛載
mount | grep sdb1
df -h/etc/fstab
開機自動掛載設定:
# <device> <mount point> <type> <options> <dump> <pass>
/dev/sda1 / ext4 defaults 0 1
/dev/sda2 /home ext4 defaults 0 2Swap Space (交換空間)
什麼是 Swap?
- 虛擬記憶體 (Virtual Memory)
- 當 RAM 不足時使用
- 使用硬碟空間作為記憶體
查看 Swap
free -h # 查看記憶體和 swap
swapon --show # 查看 swap 詳細資訊管理 Swap
# 啟用 swap
swapon /swapfile
# 停用 swap
swapoff /swapfile
# 建立 swap file
dd if=/dev/zero of=/swapfile bs=1G count=4
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile