跳轉到內容

Linux 目錄結構詳解 | 文件系統佈局與路徑管理完全指南

Linux Directory Structure

Linux 的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。與其他操作系統(如 Windows)不同,Linux 採用單一的文件系統層次結構標準(FHS),所有文件和目錄都從根目錄開始。

其他目錄通過掛載可以將它們添加到樹中,通過解除掛載可以移除他們。理解 Linux 目錄結構是掌握 Linux 系統管理的基礎。

Linux 文件系統層次結構標準(FHS)

核心目錄說明

目錄用途說明重要程度
/根目錄,所有目錄的起點⭐⭐⭐⭐⭐
/bin基本用戶命令二進制文件⭐⭐⭐⭐⭐
/boot引導加載程序文件⭐⭐⭐⭐
/dev設備文件⭐⭐⭐⭐⭐
/etc主機特定的系統配置文件⭐⭐⭐⭐⭐
/home用戶主目錄⭐⭐⭐⭐⭐
/lib共享庫文件⭐⭐⭐⭐
/media可移動媒體設備的掛載點⭐⭐⭐
/mnt臨時掛載文件系統⭐⭐⭐
/opt附加應用程序軟件包⭐⭐⭐
/proc虛擬文件系統,進程和內核信息⭐⭐⭐⭐
/rootroot 用戶的主目錄⭐⭐⭐⭐
/sbin系統管理命令二進制文件⭐⭐⭐⭐
/tmp臨時文件⭐⭐⭐
/usr次要層次結構,用戶程序⭐⭐⭐⭐⭐
/var可變數據文件⭐⭐⭐⭐

重要子目錄詳解

/etc - 配置文件中心

bash
# 查看系統配置文件
ls /etc/

# 常見配置文件
/etc/passwd      # 用戶賬戶信息
/etc/shadow      # 用戶密碼信息
/etc/group       # 用戶組信息
/etc/fstab       # 文件系統表
/etc/hosts       # 主機名解析
/etc/resolv.conf # DNS 配置
/etc/ssh/        # SSH 配置

/var - 可變數據

bash
# 日誌文件
/var/log/         # 系統日誌
/var/log/syslog   # 系統日誌(Debian/Ubuntu)
/var/log/messages # 系統日誌(CentOS/RHEL)

# 其他可變數據
/var/spool/       # 假脫機數據
/var/tmp/         # 重啟後保留的臨時文件
/var/lib/         # 應用程序狀態信息

/usr - 用戶程序

bash
/usr/bin/         # 用戶命令
/usr/sbin/        # 系統管理命令
/usr/local/       # 本地安裝的軟件
/usr/share/       # 共享數據
/usr/include/     # C 頭文件
/usr/lib/         # 庫文件

絕對路徑與相對路徑

絕對路徑相對路徑
由根目錄 / 寫起,例如:/usr/share/doc 這個目錄。不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成:cd ../man 這就是相對路徑的寫法。

路徑示例對比

bash
# 絕對路徑示例(從根目錄開始)
/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 命令高級用法

bash
# 基本用法
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 輸出解讀

bash
$ 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

字段說明:

  1. 文件類型和權限drwxr-xr-x
    • 第1位:文件類型(d=目錄,-=文件,l=鏈接)
    • 2-4位:所有者權限(rwx)
    • 5-7位:組權限(r-x)
    • 8-10位:其他用戶權限(r-x)
  2. 硬鏈接數2
  3. 所有者user
  4. 所屬組group
  5. 文件大小4.0K
  6. 修改時間Jan 15 10:30
  7. 文件名Documents

切換目錄

cdChange Directory 的縮寫,這是用來變換工作目錄的命令。

bash
cd \[相對路徑或絕對路徑\]

cd 命令實用技巧

bash
# 切換到指定目錄
cd /usr/local/bin        # 絕對路徑
cd ../documents          # 相對路徑

# 快捷方式
cd ~                     # 切換到用戶主目錄
cd                       # 同上(不帶參數)
cd -                     # 切換到上一個工作目錄
cd ..                    # 切換到上級目錄
cd ../..                 # 切換到上兩級目錄
cd /                     # 切換到根目錄

# 使用 Tab 補全
cd /us<Tab>loc<Tab>bin   # 自動補全路徑

# 使用變量
cd $HOME                 # 切換到主目錄
cd $OLDPWD               # 切換到上一個目錄

目錄導航最佳實踐

bash
# 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 中查找

顯示當前目錄

pwdPrint Working Directory 的縮寫,也就是顯示目前所在目錄的命令。

bash
# 基本用法
pwd                      # 顯示當前工作目錄

# 顯示物理路徑(解析符號鏈接)
pwd -P

# 示例輸出
$ pwd
/home/user/projects

$ pwd -P
/home/user/real-projects  # 如果當前目錄是符號鏈接

pwd 與 PWD 變量

bash
# shell 內置變量
echo $PWD                # 當前目錄
echo $OLDPWD             # 上一個目錄

# 在腳本中使用
CURRENT_DIR=$(pwd)
echo "Working in: $CURRENT_DIR"

創建目錄

mkdir(make directory) 用來創建新的目錄。

bash
mkdir \[-mp\] 目錄名稱
\-m配置文件的權限,直接配置,不需要看默認權限的臉色
\-p直接將所需要的目錄(包含上一級目錄) 遞歸創建起來!
mkdir --help查看幫助

mkdir 命令詳解

bash
# 創建單個目錄
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}

實際應用場景

bash
# 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 用來刪除空的目錄命令。

bash
rmdir \[-p\] 目錄名稱
\-p連同上一級 \[空的\] 目錄也一起刪除

rmdir 與 rm 的區別

bash
# rmdir - 只能刪除空目錄
rmdir empty_dir

# rm - 可以刪除非空目錄(危險!)
rm -r directory_name      # 遞歸刪除
rm -rf directory_name     # 強制遞歸刪除(謹慎使用!)

安全刪除目錄的最佳實踐

bash
# 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 遞歸刪除示例

bash
# 創建測試目錄結構
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. 查找大目錄

bash
# 查找大於 100MB 的目錄
du -h --max-depth=1 / | sort -hr | head -20

# 查看當前目錄下各子目錄大小
du -sh */

# 查找最大的 10 個目錄
du -ah /home | sort -rh | head -10

2. 目錄權限管理

bash
# 查看目錄權限
ls -ld /etc

# 修改目錄權限
chmod 755 directory
chmod -R 755 directory  # 遞歸修改

# 修改目錄所有者
chown user:group directory
chown -R user:group directory

3. 目錄監控

bash
# 實時監控目錄變化
watch -n 1 'ls -la /path/to/dir'

# 使用 inotifywait(需要安裝 inotify-tools)
inotifywait -m /path/to/dir -e create -e delete -e modify

4. 目錄比較

bash
# 比較兩個目錄的差異
diff -rq dir1/ dir2/

# 同步兩個目錄
rsync -av dir1/ dir2/

常見問題排查

問題 1:權限不足

bash
# 錯誤:Permission denied
mkdir /root/test

# 解決:使用 sudo
sudo mkdir /root/test

# 或者修改目錄權限
sudo chown $USER:$USER /target/directory

問題 2:目錄不為空

bash
# 錯誤:Directory not empty
rmdir non_empty_dir

# 解決:先清空目錄
rm -rf non_empty_dir/*
rmdir non_empty_dir

# 或者直接刪除
rm -rf non_empty_dir

問題 3:路徑過長

bash
# 錯誤:File name too long

# 解決:使用相對路徑
cd /very/long/path
ln -s . short_link

# 或者使用變量
LONG_PATH="/very/long/path/to/somewhere"
cd "$LONG_PATH"

問題 4:符號鏈接混亂

bash
# 查看符號鏈接
ls -la link_name

# 解析符號鏈接
readlink -f link_name

# 刪除符號鏈接(不刪除目標)
unlink link_name
rm link_name

目錄操作最佳實踐

1. 使用引號處理特殊字符

bash
# 不好的做法
cd My Documents      # 會被解析為兩個參數

# 好的做法
cd "My Documents"
cd My\ Documents
cd 'My Documents'

2. 避免在根目錄執行危險操作

bash
# ❌ 極度危險!
rm -rf /
rm -rf /*

# ✅ 安全的做法
rm -rf ./directory_name  # 明確指定相對路徑

3. 定期清理臨時目錄

bash
# 清理 /tmp 目錄(7天前的文件)
find /tmp -type f -mtime +7 -delete

# 清理用戶臨時文件
rm -rf ~/.cache/thumbnails/*

4. 備份重要目錄

bash
# 使用 tar 備份
tar -czf backup_$(date +%Y%m%d).tar.gz important_dir/

# 使用 rsync 同步備份
rsync -av important_dir/ backup_location/

總結

掌握 Linux 目錄結構對於系統管理至關重要:

  1. 理解 FHS 標準:知道每個目錄的用途
  2. 熟練使用路徑:絕對路徑和相對路徑靈活運用
  3. 掌握核心命令:ls、cd、pwd、mkdir、rmdir
  4. 注意安全操作:謹慎使用 rm -rf
  5. 善用高級技巧:Tab 補全、目錄棧、權限管理

關鍵命令速查:

bash
ls -lah              # 詳細列出所有文件
cd ~/projects        # 切換到主目錄下的 projects
pwd                  # 顯示當前目錄
mkdir -p a/b/c       # 遞歸創建目錄
rmdir -p a/b/c       # 遞歸刪除空目錄

下一步學習:

理解目錄結構是成為 Linux 高手的第一步!🚀

最後更新於: