linux目录结构遵循 FHS 规范,以用途和权限 / 生命周期为理解主线:根目录 / 为起点,/home 存用户目录,/etc 存配置,/var存变动数据,/usr 存只读系统资源,/tmp 和 /run 分担临时数据,/bin 与 /usr/bin 按启动与运行阶段分工,/lib 与 /lib64 依 架构 存放动态库,排查时聚焦“谁建、谁用、多久变”。

Linux 目录结构不是随意设计的,而是遵循 Filesystem Hierarchy Standard(FHS) 规范,目的是让不同发行版保持基本一致,方便管理、维护和协作。理解它不靠死记硬背,而要抓住“用途驱动”和“权限 / 生命周期”两条主线。
根目录 / 是所有路径的起点,不是“ c 盘”
windows习惯把系统、程序、用户数据分在不同盘符,Linux 全从 / 开始展开。比如:
- /home 存用户主目录(类似 Windows 的 Users),每个普通用户有自己的子目录(如 /home/alice)
- /etc 放全局配置文件(如 /etc/nginx/nginx.conf),只有 root 能改
- /var 存运行时变化的数据:日志(/var/log)、数据库 文件(/var/lib/mysql)、邮件队列等
- /usr 是“只读”的系统资源区(实际可写,但不建议手动改),包含命令(/usr/bin)、库(/usr/lib)、文档(/usr/share)
- /tmp 和 /run 都是临时空间,但 /tmp 重启可能清空,/run 是内存中的运行时状态(如 PID 文件)
/bin 与 /usr/bin 的分工:启动阶段 vs 运行阶段
早期 Linux 把所有命令塞进 /bin,后来为精简启动镜像,把基础命令(ls、cp、bash)保留在 /bin 和 /sbin(管理员命令如 fdisk、iptables),其余归到 /usr/bin。现代发行版(如 ubuntu 20.04+、Fedora)已合并两者(通过符号链接),但逻辑仍存在:
- 系统刚开机、/usr 还没挂载时,/bin 和 /sbin 必须能独立工作
- 日常使用的 工具(git、python3、curl)默认装在 /usr/bin
- 自己编译安装的软件,通常走 /usr/local/bin,避免和包管理器冲突
/lib 与 /lib64:别乱放,要看架构和依赖
动态库不是随便扔一个目录就能用的。关键看三点:
- 64 位系统一般用 /lib64 存 64 位库,/lib 存通用或 32 位兼容库(部分发行版如 debian 用 /lib/x86_64-linux-gnu 更细分)
- 程序启动时通过 ld.so.cache(由 ldconfig 生成)查库路径,不是遍历整个文件系统
- 新增库别直接拷进 /lib —— 应放 /usr/local/lib 或自定义路径,再用 ldconfig -n /path 临时加载,或写入 /etc/ld.so.conf.d/xxx.conf
实际排查时,按“谁建的?谁在用?多久变一次?”三问定位目录
遇到问题别先翻手册,先观察:
- 谁建的? —— ls -ld /opt 看属主和权限;rpm -qf /opt(RHEL 系)或 dpkg -S /opt(Debian 系)查归属包
- 谁在用? —— lsof +D /var/log 看哪些进程正写日志;find /etc -name “*.conf” -mmin -5 找最近改过的配置
- 多久变一次? —— stat /tmp 看 access/Modify/Change 时间;journalctl –disk-usage 判断 /var/log/journal 是否占满
基本上就这些。FHS 不是铁律,但它是共识的骨架。真正用起来,结合发行版特点(如 systemd 把很多状态挪到 /run)、部署方式(容器常挂载 /app 或 /data 自定义路径)灵活理解,比硬背路径表管用得多。