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):

💡 要找一個指令的執行檔在哪裡,用 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 — 暫時檔案

/run — 執行中程序的資料

/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/syslogjournalctl
某個指令的執行檔which 指令名/usr/bin/
我自己安裝的程式/usr/local/bin//opt/
使用者的 SSH 設定~/.ssh/
cron 排程crontab -l/etc/cron.d/
DNS 設定/etc/resolv.conf
hosts 對應/etc/hosts