Linux 目錄結構詳解 | 文件系統佈局與路徑管理完全指南
Linux 的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。與其他操作系統(如 Windows)不同,Linux 採用單一的文件系統層次結構標準(FHS),所有文件和目錄都從根目錄開始。
其他目錄通過掛載可以將它們添加到樹中,通過解除掛載可以移除他們。理解 Linux 目錄結構是掌握 Linux 系統管理的基礎。
Linux 文件系統層次結構標準(FHS)
核心目錄說明
| 目錄 | 用途說明 | 重要程度 |
|---|---|---|
/ | 根目錄,所有目錄的起點 | ⭐⭐⭐⭐⭐ |
/bin | 基本用戶命令二進制文件 | ⭐⭐⭐⭐⭐ |
/boot | 引導加載程序文件 | ⭐⭐⭐⭐ |
/dev | 設備文件 | ⭐⭐⭐⭐⭐ |
/etc | 主機特定的系統配置文件 | ⭐⭐⭐⭐⭐ |
/home | 用戶主目錄 | ⭐⭐⭐⭐⭐ |
/lib | 共享庫文件 | ⭐⭐⭐⭐ |
/media | 可移動媒體設備的掛載點 | ⭐⭐⭐ |
/mnt | 臨時掛載文件系統 | ⭐⭐⭐ |
/opt | 附加應用程序軟件包 | ⭐⭐⭐ |
/proc | 虛擬文件系統,進程和內核信息 | ⭐⭐⭐⭐ |
/root | root 用戶的主目錄 | ⭐⭐⭐⭐ |
/sbin | 系統管理命令二進制文件 | ⭐⭐⭐⭐ |
/tmp | 臨時文件 | ⭐⭐⭐ |
/usr | 次要層次結構,用戶程序 | ⭐⭐⭐⭐⭐ |
/var | 可變數據文件 | ⭐⭐⭐⭐ |
重要子目錄詳解
/etc - 配置文件中心
# 查看系統配置文件
ls /etc/
# 常見配置文件
/etc/passwd # 用戶賬戶信息
/etc/shadow # 用戶密碼信息
/etc/group # 用戶組信息
/etc/fstab # 文件系統表
/etc/hosts # 主機名解析
/etc/resolv.conf # DNS 配置
/etc/ssh/ # SSH 配置/var - 可變數據
# 日誌文件
/var/log/ # 系統日誌
/var/log/syslog # 系統日誌(Debian/Ubuntu)
/var/log/messages # 系統日誌(CentOS/RHEL)
# 其他可變數據
/var/spool/ # 假脫機數據
/var/tmp/ # 重啟後保留的臨時文件
/var/lib/ # 應用程序狀態信息/usr - 用戶程序
/usr/bin/ # 用戶命令
/usr/sbin/ # 系統管理命令
/usr/local/ # 本地安裝的軟件
/usr/share/ # 共享數據
/usr/include/ # C 頭文件
/usr/lib/ # 庫文件絕對路徑與相對路徑
| 絕對路徑 | 相對路徑 |
|---|---|
由根目錄 / 寫起,例如:/usr/share/doc 這個目錄。 | 不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成:cd ../man 這就是相對路徑的寫法。 |
路徑示例對比
# 絕對路徑示例(從根目錄開始)
/home/user/documents/file.txt
/usr/local/bin/python3
/etc/nginx/nginx.conf
# 相對路徑示例(相對於當前目錄)
./file.txt # 當前目錄下的 file.txt
../parent/file.txt # 上級目錄下的 file.txt
../../grandparent/ # 上兩級目錄
documents/report.pdf # 當前目錄下 documents 文件夾中的 report.pdf特殊路徑符號
| 符號 | 含義 | 示例 |
|---|---|---|
. | 當前目錄 | ./script.sh |
.. | 上級目錄 | cd .. |
~ | 用戶主目錄 | cd ~ |
- | 上一個工作目錄 | cd - |
查看目錄
Linux 系統當中, ls 命令可能是最常被運行的。
ls | 查看當前路徑下的文件名稱 |
|---|---|
ls -a | 全部的文件,連同隱藏文件(開頭為 . 的文件) 一起列出來(常用) |
ls -d | 僅列出目錄本身,而不是列出目錄內的文件數據(常用) |
ls -l | 長數據串列出,包含文件的屬性與權限等等數據;(常用) |
ll | 等於 ls -l |
ls -al | 目錄下的所有文件列出來(含屬性與隱藏檔) |
ls 命令高級用法
# 基本用法
ls # 列出當前目錄內容
ls /etc # 列出指定目錄內容
# 顯示詳細信息
ls -l # 長格式顯示(權限、所有者、大小、時間)
ls -lh # 人類可讀的文件大小(KB, MB, GB)
# 顯示隱藏文件
ls -a # 顯示所有文件(包括以.開頭的隱藏文件)
ls -la # 顯示所有文件的詳細信息
# 排序選項
ls -lt # 按修改時間排序(最新的在前)
ls -ltr # 按修改時間排序(最舊的在前)
ls -lS # 按文件大小排序
ls -lrS # 按文件大小反向排序
# 遞歸顯示
ls -R # 遞歸顯示子目錄
# 組合使用
ls -lah # 詳細列表 + 人類可讀大小 + 顯示隱藏文件
ls -lt --time-style=long-iso # 按時間排序,ISO 格式時間ls 輸出解讀
$ ls -lh
total 16K
drwxr-xr-x 2 user group 4.0K Jan 15 10:30 Documents
-rw-r--r-- 1 user group 1.2K Jan 15 09:45 README.md
-rwxr-xr-x 1 user group 512 Jan 14 16:20 script.sh字段說明:
- 文件類型和權限:
drwxr-xr-x- 第1位:文件類型(d=目錄,-=文件,l=鏈接)
- 2-4位:所有者權限(rwx)
- 5-7位:組權限(r-x)
- 8-10位:其他用戶權限(r-x)
- 硬鏈接數:
2 - 所有者:
user - 所屬組:
group - 文件大小:
4.0K - 修改時間:
Jan 15 10:30 - 文件名:
Documents
切換目錄
cd 是 Change Directory 的縮寫,這是用來變換工作目錄的命令。
cd \[相對路徑或絕對路徑\]cd 命令實用技巧
# 切換到指定目錄
cd /usr/local/bin # 絕對路徑
cd ../documents # 相對路徑
# 快捷方式
cd ~ # 切換到用戶主目錄
cd # 同上(不帶參數)
cd - # 切換到上一個工作目錄
cd .. # 切換到上級目錄
cd ../.. # 切換到上兩級目錄
cd / # 切換到根目錄
# 使用 Tab 補全
cd /us<Tab>loc<Tab>bin # 自動補全路徑
# 使用變量
cd $HOME # 切換到主目錄
cd $OLDPWD # 切換到上一個目錄目錄導航最佳實踐
# 1. 使用 pushd/popd 管理目錄棧
pushd /var/log # 進入目錄並壓入棧
pushd /etc/nginx # 進入另一個目錄
popd # 返回上一個目錄
# 2. 創建目錄別名
alias cdlog='cd /var/log'
alias cdetc='cd /etc'
# 3. 使用 CDPATH 環境變量
export CDPATH=".:~:/usr:/etc"
cd nginx # 會自動在 CDPATH 中查找顯示當前目錄
pwd 是 Print Working Directory 的縮寫,也就是顯示目前所在目錄的命令。
# 基本用法
pwd # 顯示當前工作目錄
# 顯示物理路徑(解析符號鏈接)
pwd -P
# 示例輸出
$ pwd
/home/user/projects
$ pwd -P
/home/user/real-projects # 如果當前目錄是符號鏈接pwd 與 PWD 變量
# shell 內置變量
echo $PWD # 當前目錄
echo $OLDPWD # 上一個目錄
# 在腳本中使用
CURRENT_DIR=$(pwd)
echo "Working in: $CURRENT_DIR"創建目錄
mkdir(make directory) 用來創建新的目錄。
mkdir \[-mp\] 目錄名稱\-m | 配置文件的權限,直接配置,不需要看默認權限的臉色 |
|---|---|
\-p | 直接將所需要的目錄(包含上一級目錄) 遞歸創建起來! |
mkdir --help | 查看幫助 |
mkdir 命令詳解
# 創建單個目錄
mkdir new_folder
# 創建多個目錄
mkdir dir1 dir2 dir3
# 遞歸創建多級目錄
mkdir -p parent/child/grandchild
# 創建目錄並設置權限
mkdir -m 755 secure_dir
mkdir -m 700 private_dir
# 創建目錄並顯示過程
mkdir -v new_directory
# 組合使用
mkdir -pv projects/{src,docs,tests}/{frontend,backend}實際應用場景
# 1. 創建項目結構
mkdir -p myproject/{src,lib,tests,docs,build}
# 2. 創建帶權限的目錄
mkdir -m 700 ~/.ssh
mkdir -m 755 /var/www/html
# 3. 批量創建日期目錄
mkdir -p logs/$(date +%Y)/$(date +%m)/$(date +%d)
# 4. 創建嵌套的項目結構
mkdir -p project/{frontend/{src,public},backend/{app,config},tests}刪除目錄
rmdir 用來刪除空的目錄命令。
rmdir \[-p\] 目錄名稱\-p | 連同上一級 \[空的\] 目錄也一起刪除 |
|---|
rmdir 與 rm 的區別
# rmdir - 只能刪除空目錄
rmdir empty_dir
# rm - 可以刪除非空目錄(危險!)
rm -r directory_name # 遞歸刪除
rm -rf directory_name # 強制遞歸刪除(謹慎使用!)安全刪除目錄的最佳實踐
# 1. 先確認目錄內容
ls -la directory_name/
# 2. 使用交互式刪除
rm -ri directory_name/ # 每個文件都詢問
# 3. 先移動到臨時位置
mv directory_name /tmp/
# 確認無誤後再刪除
rm -rf /tmp/directory_name
# 4. 使用 trash-cli(更安全)
trash-put directory_name # 移動到回收站rmdir 遞歸刪除示例
# 創建測試目錄結構
mkdir -p a/b/c/d/e
# 嘗試刪除(會失敗,因為非空)
rmdir a
# rmdir: failed to remove 'a': Directory not empty
# 從最內層開始刪除
rmdir a/b/c/d/e
rmdir a/b/c/d
rmdir a/b/c
rmdir a/b
rmdir a
# 或者使用 -p 選項
rmdir -p a/b/c/d/e # 一次性刪除所有空目錄高級目錄操作技巧
1. 查找大目錄
# 查找大於 100MB 的目錄
du -h --max-depth=1 / | sort -hr | head -20
# 查看當前目錄下各子目錄大小
du -sh */
# 查找最大的 10 個目錄
du -ah /home | sort -rh | head -102. 目錄權限管理
# 查看目錄權限
ls -ld /etc
# 修改目錄權限
chmod 755 directory
chmod -R 755 directory # 遞歸修改
# 修改目錄所有者
chown user:group directory
chown -R user:group directory3. 目錄監控
# 實時監控目錄變化
watch -n 1 'ls -la /path/to/dir'
# 使用 inotifywait(需要安裝 inotify-tools)
inotifywait -m /path/to/dir -e create -e delete -e modify4. 目錄比較
# 比較兩個目錄的差異
diff -rq dir1/ dir2/
# 同步兩個目錄
rsync -av dir1/ dir2/常見問題排查
問題 1:權限不足
# 錯誤:Permission denied
mkdir /root/test
# 解決:使用 sudo
sudo mkdir /root/test
# 或者修改目錄權限
sudo chown $USER:$USER /target/directory問題 2:目錄不為空
# 錯誤:Directory not empty
rmdir non_empty_dir
# 解決:先清空目錄
rm -rf non_empty_dir/*
rmdir non_empty_dir
# 或者直接刪除
rm -rf non_empty_dir問題 3:路徑過長
# 錯誤:File name too long
# 解決:使用相對路徑
cd /very/long/path
ln -s . short_link
# 或者使用變量
LONG_PATH="/very/long/path/to/somewhere"
cd "$LONG_PATH"問題 4:符號鏈接混亂
# 查看符號鏈接
ls -la link_name
# 解析符號鏈接
readlink -f link_name
# 刪除符號鏈接(不刪除目標)
unlink link_name
rm link_name目錄操作最佳實踐
1. 使用引號處理特殊字符
# 不好的做法
cd My Documents # 會被解析為兩個參數
# 好的做法
cd "My Documents"
cd My\ Documents
cd 'My Documents'2. 避免在根目錄執行危險操作
# ❌ 極度危險!
rm -rf /
rm -rf /*
# ✅ 安全的做法
rm -rf ./directory_name # 明確指定相對路徑3. 定期清理臨時目錄
# 清理 /tmp 目錄(7天前的文件)
find /tmp -type f -mtime +7 -delete
# 清理用戶臨時文件
rm -rf ~/.cache/thumbnails/*4. 備份重要目錄
# 使用 tar 備份
tar -czf backup_$(date +%Y%m%d).tar.gz important_dir/
# 使用 rsync 同步備份
rsync -av important_dir/ backup_location/總結
掌握 Linux 目錄結構對於系統管理至關重要:
- 理解 FHS 標準:知道每個目錄的用途
- 熟練使用路徑:絕對路徑和相對路徑靈活運用
- 掌握核心命令:ls、cd、pwd、mkdir、rmdir
- 注意安全操作:謹慎使用 rm -rf
- 善用高級技巧:Tab 補全、目錄棧、權限管理
關鍵命令速查:
ls -lah # 詳細列出所有文件
cd ~/projects # 切換到主目錄下的 projects
pwd # 顯示當前目錄
mkdir -p a/b/c # 遞歸創建目錄
rmdir -p a/b/c # 遞歸刪除空目錄下一步學習:
理解目錄結構是成為 Linux 高手的第一步!🚀