1. CentOS Stream 10目录结构全景解析
刚拿到一台新装的CentOS Stream 10服务器时,面对密密麻麻的目录是不是有点无从下手?作为RHEL上游版本的滚动发行版,其目录结构既继承了传统Linux的规范性,又融入了现代系统管理的新特性。今天我们就用运维老兵的视角,带大家走遍这个系统的每个角落。
记得我第一次接触CentOS时,花了整整两周才弄明白各个目录的用途。现在我把这些经验整理成结构化知识,帮你节省摸索时间。我们会从根目录开始逐层解剖,重点标注与CentOS 7/8的区别点,特别是那些Stream版本特有的目录变化。
2. 根目录核心结构解析
2.1 基础目录布局
/ ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp ├── usr └── var与早期版本最大的不同在于/bin、/sbin等目录现在都是指向/usr目录下对应位置的符号链接。这是Fedora引入的"UsrMove"变更,旨在简化文件系统层次结构。实测这种设计让软件包管理更统一,但也需要注意:
在编写脚本时,建议直接使用/usr/bin路径而非/bin,避免符号链接可能带来的解析问题
2.2 关键系统目录详解
- /boot:内核文件存放处。Stream 10采用GRUB2引导,目录内vmlinuz-5.xx.x-x.el10.x86_64文件命名格式与RHEL对齐
- /etc:配置文件大本营。重点关注:
- /etc/yum.repos.d/:软件源配置(Stream特有的centos-stream.repo)
- /etc/sysconfig/:系统服务配置
- /etc/systemd/:systemd单元配置
- /var:动态数据目录。需要特别监控:
- /var/log/:日志文件(journalctl日志存储在/var/log/journal/)
- /var/lib/dnf/:DNF包管理器数据库
- /var/lib/containers/:Podman容器存储位置
3. 用户空间与应用程序目录
3.1 /usr目录深度剖析
/usr ├── bin # 用户命令 ├── lib # 共享库 ├── lib64 # 64位共享库 ├── libexec # 辅助程序 ├── sbin # 管理命令 ├── share # 架构无关数据 └── local # 本地安装软件Stream 10在/usr/share目录下新增了modulefiles目录,用于Environment Modules系统。这是与旧版的重要区别:
# 查看可用模块 $ module avail # 加载GCC 11 $ module load gcc-toolset-113.2 第三方软件目录规范
- /opt:大型商业软件首选位置
- /opt/rh/:Red Hat Software Collections安装目录
- /opt/remi/:Remi仓库PHP版本安装位置
- /etc/alternatives:命令多版本管理
- 通过update-alternatives管理Python/PHP等多版本
4. 特殊文件系统与虚拟目录
4.1 运行时目录结构
/run ├── user/ # 用户级运行时文件 ├── systemd/ # systemd运行时数据 └── containers/ # 容器运行时数据与CentOS 7不同,Stream 10将/var/run完全迁移到/run,这是tmpfs内存文件系统,重启后数据会丢失。编写服务时需要特别注意:
# 错误的传统写法(CentOS 7) RuntimeDirectory=/var/run/myservice # 正确的Stream 10写法 RuntimeDirectory=/run/myservice4.2 系统信息接口
- /proc:进程与内核信息
- /proc/cpuinfo:处理器详情
- /proc/meminfo:内存使用情况
- /sys:设备与驱动接口
- /sys/class/net/:网络接口信息
- /sys/block/:块设备信息
5. 目录权限管理实践
5.1 SELinux上下文管理
Stream 10默认启用SELinux,关键目录上下文:
$ ls -Z /var/www/html system_u:object_r:httpd_sys_content_t:s0 index.html # 修改上下文 $ semanage fcontext -a -t httpd_sys_content_t "/webapp(/.*)?" $ restorecon -Rv /webapp5.2 目录权限设置规范
- 系统目录应保持root:root所有权
- 共享目录建议使用setgid位:
$ chmod g+s /shared $ chgrp devteam /shared - 临时目录应添加sticky位:
$ chmod +t /tmp/upload
6. 新旧版本目录结构对比
6.1 CentOS 7 vs Stream 10主要差异
| 目录 | CentOS 7 | Stream 10 |
|---|---|---|
| /bin | 独立目录 | /usr/bin符号链接 |
| /sbin | 独立目录 | /usr/sbin符号链接 |
| /usr/libexec | 较少使用 | 核心组件位置 |
| /var/run | 持久化存储 | /run符号链接(tmpfs) |
| /etc/os-release | 简单版本信息 | 包含STREAM标识 |
6.2 兼容性注意事项
- 脚本中避免硬编码路径,改用which或command -v查找命令位置
- 服务单元文件中使用RuntimeDirectory而非WorkingDirectory
- 容器挂载点优先选择/var/lib/containers/而非传统/var/lib/docker/
7. 目录监控与维护技巧
7.1 空间占用分析
# 快速定位大目录 $ du -h --max-depth=1 / 2>/dev/null | sort -h # 监控关键目录变化 $ inotifywait -m -r /etc /var/log7.2 自动化清理策略
对于/var/log/journal/建议配置日志轮转:
# /etc/systemd/journald.conf [Journal] SystemMaxUse=1G MaxFileSec=1month临时文件清理可创建cron任务:
0 3 * * * find /tmp -type f -atime +7 -delete8. 疑难问题排查指南
8.1 常见目录相关错误
- 软件安装失败:检查/var/lib/dnf/history.log和/var/log/dnf.log
- 服务启动失败:查看/run/ /目录是否存在
- 权限拒绝:使用getenforce检查SELinux状态
8.2 修复损坏的符号链接
# 查找所有损坏链接 $ find / -xtype l 2>/dev/null # 重建基础链接(示例) $ ln -sf /usr/bin/bash /bin/bash经过多年运维实践,我发现理解目录结构是掌握Linux系统的基石。建议新人先在测试环境执行tree -L 2 /命令生成目录树,对照本文逐个研究重要目录。当遇到问题时,先思考"这个文件应该放在哪个目录",这种思维训练会让你快速成长为合格的系统管理员。