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 高手的第一步!🚀