1.2.1 Linux目录层级标准与关键路径
Linux 目录层级标准(FHS)定义了系统中各类文件的存放位置,有助于统一运维管理与故障排查。理解关键路径用途,可避免误删、误改并提升脚本与配置的可移植性。
原理草图(目录层级与用途):
关键路径速览:
- / 根目录:所有文件与目录的起点。
- /bin:基本用户命令(如 ls、cp、mv)。
- /sbin:系统管理命令(如 ip、mount、fsck)。
- /etc:系统与服务配置文件目录。
- /home:普通用户主目录。
- /root:超级用户主目录。
- /var:经常变化的数据。
- /var/log:系统与应用日志核心路径。
- /var/lib:服务运行状态与持久化数据(如数据库、容器元数据)。
- /run:运行时 PID、socket 等临时文件。
- /tmp:临时文件目录,权限通常为 1777。
- /usr:用户层应用与只读共享数据。
- /opt:第三方软件安装路径,适合手动部署。
- /boot:引导程序与内核文件。
- /dev:设备文件。
- /proc:内核与进程信息虚拟文件系统。
- /sys:设备与内核对象虚拟文件系统。
- /mnt 与 /media:临时挂载点。
路径与通配符基础(绝对路径、相对路径、通配符):
- 绝对路径:从根目录 / 开始的完整路径,如 /etc/nginx/nginx.conf。
- 相对路径:相对当前目录的路径,如当前在 /etc,则 nginx/nginx.conf。
- . 表示当前目录,.. 表示上一级目录。
- 通配符常见规则:
- * 匹配任意长度任意字符(不含 /)。
- ? 匹配单个字符。
- [] 匹配集合内任一字符,如 file[1-3]。
- {} 扩展为多个选项,如 {conf,backup}。
示例(路径与通配符的实际效果):
# 当前目录假设为 /etc
pwd
# 预期输出:/etc
# 绝对路径访问
ls -l /etc/nginx/nginx.conf
# 相对路径访问(等价于上面的绝对路径)
ls -l nginx/nginx.conf
# 使用 . 与 .. 组合路径
ls -l ./nginx
ls -l ../var/log
# 通配符:匹配 /var/log 下以 .log 结尾的文件
ls -l /var/log/*.log
# 通配符:匹配 /etc 下以 sshd 开头的配置
ls -l /etc/sshd*
# 通配符:匹配单字符与集合
ls -l /etc/cron.? # cron.d cron.daily cron.hourly 等
ls -l /etc/cron.{d,daily} # 仅展开为 cron.d 与 cron.daily
常用命令与示例(含解释与预期效果):
# 1) 查看根目录结构(-F 显示文件类型,目录末尾加 /)
ls -lF /
# 2) 安装 tree 并查看目录树(适合快速理解层级)
# Debian/Ubuntu
sudo apt update && sudo apt install -y tree
# RHEL/CentOS
sudo yum install -y tree
tree -L 2 /
# 3) 查看磁盘占用情况(用于定位 /var 或 /tmp 是否爆满)
df -hT
# 4) 查看目录大小(-x 不跨文件系统,避免统计挂载点)
sudo du -h --max-depth=1 -x /var
# 5) 查找大文件(用于清理日志或缓存)
sudo find /var -type f -size +200M -printf "%p %kKB\n" | sort -n -k2 | tail -n 10
命令解释与预期效果:
- ls -lF /:直观查看根目录及文件类型,目录以 / 结尾。
- tree -L 2 /:以树形展示两层目录,便于识别关键路径。
- df -hT:输出文件系统类型与容量,快速判断哪个分区空间紧张。
- du -h --max-depth=1 -x /var:统计 /var 下各子目录占用。
- find /var -type f -size +200M:筛选大文件并排序,定位异常日志/缓存。
排错示例:/var 分区爆满导致服务异常
# 1) 发现磁盘满
df -hT | grep -E "/var|/$"
# 2) 定位占用最大的子目录
sudo du -h --max-depth=1 -x /var | sort -h
# 3) 定位大日志文件
sudo find /var/log -type f -size +200M -printf "%p %kKB\n" | sort -n -k2 | tail -n 5
# 4) 处理策略(示例:压缩旧日志,不直接删活跃日志)
sudo gzip -c /var/log/messages > /var/log/messages.$(date +%F).gz
sudo truncate -s 0 /var/log/messages
# 5) 复核空间
df -hT | grep -E "/var|/$"
实践练习:
1. 使用 tree -L 2 /,列出 /etc 与 /var 的二级目录,并说明各自用途。
2. 在 /tmp 创建 3 个 50MB 的测试文件,验证 du 与 df 的差异:
dd if=/dev/zero of=/tmp/test1 bs=1M count=50
dd if=/dev/zero of=/tmp/test2 bs=1M count=50
dd if=/dev/zero of=/tmp/test3 bs=1M count=50
du -h --max-depth=1 /tmp
df -hT /tmp
- 使用
find统计/var/log中大于 100MB 的文件并输出清单,练习排错思路。 - 在
/etc目录内,用相对路径与通配符列出sshd相关配置文件,并解释各匹配结果:
cd /etc
ls -l sshd*
ls -l ./ssh/sshd_*