Linux 檔案系統階層(FHS)完整解說
Linux 目錄樹概覽
Linux 的所有檔案組成一棵以根目錄(/)為起點的樹狀結構。不像 Windows 有 C:、D: 等多個磁碟,Linux 只有一個根目錄,所有東西——包含外接硬碟、USB、網路分享——都掛載到這棵樹的某個位置。
/ 根目錄(所有東西的起點)
├── bin/ 基本執行檔(ls、cat、cp 等)
├── boot/ 開機相關(核心、grub)
├── dev/ 裝置節點
├── etc/ 系統設定檔
├── home/ 使用者家目錄
│ ├── alice/
│ └── bob/
├── lib/ 共用函式庫
├── media/ 可卸載媒體的掛載點(USB 等)
├── mnt/ 手動掛載點
├── opt/ 第三方大型軟體
├── proc/ 程序與核心資訊(虛擬)
├── root/ root 的家目錄
├── run/ 執行中程序的資料(虛擬)
├── sbin/ 系統管理執行檔(需 root)
├── srv/ 服務資料(如 Web 根目錄)
├── sys/ 核心裝置資訊(虛擬)
├── tmp/ 暫存檔案(重啟後清除)
├── usr/ 使用者安裝的程式
│ ├── bin/ 一般使用者的執行檔
│ ├── lib/ 共用函式庫
│ ├── local/ 本地安裝的程式
│ └── share/ 架構無關的資料(文件等)
└── var/ 變動資料(日誌、資料庫)
├── log/ 日誌
├── lib/ 應用程式的持久狀態資料
├── cache/ 快取資料
└── www/ Web 伺服器資料
這個標準叫做 FHS(Filesystem Hierarchy Standard,檔案系統階層標準),大多數 Linux 發行版都遵循。
根目錄的重要子目錄速覽
| 目錄 | 用途 | 常見內容 |
|---|---|---|
/etc | 系統設定檔 | nginx.conf、passwd、fstab |
/var/log | 系統與服務日誌 | syslog、auth.log、nginx/access.log |
/home | 使用者家目錄 | /home/alice、/home/bob |
/usr/bin | 一般使用者的執行檔 | ls、grep、python3 |
/usr/local | 本地安裝的程式 | 手動編譯或 /usr/local/bin/ |
/opt | 第三方大型軟體 | /opt/google/chrome |
/tmp | 暫存(重啟清除) | 暫存檔案、下載中的項目 |
/proc | 程序資訊(虛擬) | /proc/1(PID 1 的資訊) |
/dev | 裝置節點 | /dev/sda(硬碟)、/dev/null |
/etc — 系統設定的心臟
/etc 存放所有系統層級的設定檔,幾乎每個服務的設定都在這裡。
/etc/
├── nginx/ Nginx 網頁伺服器設定
│ ├── nginx.conf 主要設定
│ └── sites-enabled/ 啟用中的站台設定
├── ssh/ SSH 服務設定
│ └── sshd_config SSH daemon 設定
├── hosts 靜態 DNS 對應(IP → 主機名稱)
├── hostname 這台機器的主機名稱
├── fstab 開機自動掛載的磁碟清單
├── crontab 系統層級的 cron 排程
├── passwd 使用者帳號清單
├── shadow 使用者密碼雜湊(只有 root 可讀)
├── group 群組清單
├── sudoers sudo 授權設定
├── resolv.conf DNS 伺服器設定
├── apt/ apt 套件管理設定
│ └── sources.list 套件來源清單
└── systemd/
└── system/ 自訂的 systemd 服務設定
$ ls /etc/ | head -30 # 查看 /etc 有哪些設定
/var — 變動資料
/var(variable)存放程式執行時會變動的資料:
/var/
├── log/ 日誌檔案
│ ├── syslog 系統日誌(Ubuntu)
│ ├── messages 系統訊息(CentOS)
│ ├── auth.log 認證與安全日誌
│ ├── nginx/ Nginx 日誌
│ │ ├── access.log
│ │ └── error.log
│ └── mysql/ MySQL 日誌
├── lib/ 應用程式的狀態資料
│ ├── mysql/ MySQL 資料庫檔案
│ └── docker/ Docker 的映像檔和容器
├── cache/ 快取資料
│ └── apt/ apt 的套件快取
├── spool/ 排隊中的工作(cron、print 等)
└── www/ Web 伺服器的根目錄
$ ls -lh /var/log/ | head -10 # 查看日誌目錄
/usr — 使用者安裝的程式
大多數使用者程式和函式庫安裝在 /usr(Unix System Resources):
/usr/bin/:一般使用者可執行的程式(ls、grep、python3)/usr/sbin/:需要 root 的系統管理程式(nginx、sshd)/usr/lib/:共用函式庫(.so 檔案)/usr/share/:架構無關的資料(文件、圖示、語言設定)/usr/local/:本地手動安裝的程式(不透過套件管理器安裝的)/usr/include/:C/C++ 標頭檔
要找一個指令的執行檔在哪裡,用
which 指令名稱 或 type 指令名稱。例如:which python3 → /usr/bin/python3
/home — 使用者的個人空間
每個一般使用者在 /home/使用者名稱/ 下有一個個人目錄(家目錄):
/home/alice/
├── .bashrc bash 的個人設定(每次開啟 shell 都執行)
├── .bash_profile bash 登入時執行(讀取一次)
├── .ssh/ SSH 金鑰和設定
│ ├── id_ed25519 私鑰(chmod 600,嚴格保密)
│ ├── id_ed25519.pub 公鑰
│ ├── authorized_keys 允許登入的公鑰清單
│ └── config SSH 連線設定
├── .config/ 各應用程式的設定(現代 Linux)
├── Documents/
├── Downloads/
└── ...
以 . 開頭的目錄和檔案是隱藏的(用 ls -a 才能看到)。
/tmp 與 /run
/tmp — 暫時檔案
- 任何人都可以在這裡建立檔案(全部可寫)
- 通常在重啟後自動清除(有些系統用 systemd 的 tmpfs,用記憶體儲存)
- 在腳本中用
mktemp安全地建立暫時檔案
/run — 執行中程序的資料
- 存放服務的 PID 檔案(如
/run/nginx.pid) - 存放 Unix socket 檔案
- 每次開機都重新建立,使用記憶體(tmpfs)
/proc 與 /sys — 虛擬檔案系統
這兩個目錄並不存在於磁碟上,而是核心在記憶體中維護的虛擬檔案系統,提供了查看和控制核心的介面:
$ cat /proc/cpuinfo # 查看 CPU 詳細資訊
$ cat /proc/meminfo # 查看記憶體詳細資訊
$ cat /proc/1/status # 查看 PID 1 的程序狀態
$ cat /proc/net/dev # 查看網路介面統計
$ ls /sys/class/net/ # 查看網路介面
實用:知道東西放在哪裡
| 你想找什麼 | 去哪裡找 |
|---|---|
| nginx 的設定 | /etc/nginx/nginx.conf |
| nginx 的日誌 | /var/log/nginx/access.log |
| MySQL 的資料 | /var/lib/mysql/ |
| 網頁根目錄 | /var/www/html/ 或 /srv/www/ |
| 系統日誌 | /var/log/syslog 或 journalctl |
| 某個指令的執行檔 | which 指令名 或 /usr/bin/ |
| 我自己安裝的程式 | /usr/local/bin/ 或 /opt/ |
| 使用者的 SSH 設定 | ~/.ssh/ |
| cron 排程 | crontab -l 或 /etc/cron.d/ |
| DNS 設定 | /etc/resolv.conf |
| hosts 對應 | /etc/hosts |