Linux 目录结构速查
Linux 目录不建议硬背,先按“它主要放什么东西”来记。排查问题时,目录结构其实是在帮你快速判断:配置去哪找、日志去哪看、应用放在哪、运行状态在哪、临时文件能不能保留。
一句话:
1 | 配置去 /etc |
常用目录
/etc:配置文件
系统和服务配置大多放在这里。
常见例子:
1 | /etc/nginx/ |
常见用途:
- 查服务配置。
- 修改 systemd unit。
- 查 WireGuard peer 配置。
- 查 Nginx、MySQL、Squid 等服务配置。
排查服务异常时,通常先看:
1 | systemctl status 服务名 |
systemctl cat 可以直接看到服务实际加载了哪些 unit 文件。
/var:运行过程中变化的数据
/var 放的是运行过程中会持续变化的数据,例如日志、缓存、数据库数据、队列、spool 文件。
常见例子:
1 | /var/log/ |
常见用途:
- 查日志。
- 查数据库文件。
- 查缓存和运行数据。
- 查服务在系统默认位置保存的数据。
/var/log:日志
排查问题的第一站之一。
常见例子:
1 | /var/log/nginx/access.log |
注意:
- Debian / Ubuntu 常见
/var/log/syslog。 - CentOS / RHEL 常见
/var/log/messages。 - SSH 登录日志常见
/var/log/auth.log或/var/log/secure。 - 很多 systemd 服务日志不一定直接写文件,而是进
journalctl。
常用命令:
1 | journalctl -u 服务名 -n 100 --no-pager |
/usr:系统安装的软件和共享资源
/usr 里有大量系统命令、库、头文件和共享资源。大多数包管理器安装的软件会把文件放到这里。
常见例子:
1 | /usr/bin/ |
注意:
- 不建议把业务数据放在
/usr。 - 不建议手工随意修改
/usr下由包管理器安装的文件。
/usr/local:本机手工安装的软件
/usr/local 常用于放本机管理员手工安装的软件、脚本和二进制。
常见例子:
1 | /usr/local/bin/ |
适合放:
- 本机自写脚本。
- 不通过包管理器安装的小工具。
- 运维脚本。
例如:
1 | /usr/local/sbin/indeep-wireguard-watchdog.sh |
经验规则:
1 | 普通用户命令放 /usr/local/bin |
/bin 和 /sbin:基础命令
/bin 偏普通基础命令,/sbin 偏系统管理命令。
常见例子:
1 | /bin/sh |
现在很多发行版已经采用 usr-merge,/bin 和 /sbin 可能只是链接到:
1 | /usr/bin |
所以看到链接是正常的。
/home:普通用户目录
普通用户自己的文件、源码、应用部署目录经常在这里。
常见例子:
1 | /home/celestrong/ |
适合放:
- 普通用户源码。
- 用户级配置。
- 非 root 运行的应用。
- 开发和测试部署目录。
注意:
- 生产长期部署可以放
/home/<app-user>/app,但要明确用户和权限。 - 不要让 root 和普通用户混着维护同一个目录。
/root:root 用户家目录
/root 是 root 用户自己的家目录。
常见用途:
- root 临时文件。
- 临时备份。
- 管理员临时材料。
不建议:
- 长期作为业务部署目录。
- 放团队协作材料。
- 放需要普通用户访问的文件。
/tmp:临时文件
/tmp 用于临时文件。系统重启、定期清理策略或 tmpfiles 规则可能会清理这里。
适合放:
- 临时下载。
- 临时脚本。
- 一次性排查材料。
不适合放:
- 重要配置。
- 长期日志。
- 长期运行脚本。
- 需要保留的业务数据。
如果临时文件需要跨重启保留,可以考虑 /var/tmp。
/run:运行时状态
/run 放运行时状态,重启会丢。
常见内容:
1 | PID 文件 |
例子:
1 | /run/docker.sock |
适合放:
- 服务启动后生成的状态。
- watchdog 状态。
- 当前运行周期内才有意义的文件。
不适合放:
- 配置文件。
- 永久数据。
- 需要跨重启保留的内容。
/opt:第三方或独立软件包
/opt 常用于放独立安装的软件包,尤其是不走系统包管理器的软件。
常见例子:
1 | /opt/frp/ |
适合放:
- 官方 release 解压的软件。
- 独立部署包。
- 第三方工具。
比如 frp 常见结构:
1 | /opt/frp/frps |
/srv:服务对外提供的数据
/srv 规范上用于放服务对外提供的数据。
常见例子:
1 | /srv/www/ |
实际项目里不一定常用,有些团队会用 /opt、/home 或 /www 替代。关键是团队内部统一。
/mnt:临时挂载点
/mnt 常用于手动挂载磁盘、网络盘或临时挂载目录。
常见例子:
1 | /mnt/data |
在 WSL 中,Windows 盘通常挂在:
1 | /mnt/c |
注意:
- WSL 长期开发不建议把主力项目放在
/mnt/c、/mnt/d。 - 临时挂载可以用
/mnt,长期业务数据建议规划到明确目录。
/media:自动挂载外接设备
/media 常用于桌面环境自动挂载 U 盘、移动硬盘等外接设备。
服务器上通常不常用。
/dev:设备文件
/dev 是设备文件目录。
常见例子:
1 | /dev/null |
用途:
- 磁盘设备。
- 终端设备。
- 随机数设备。
- 特殊输入输出设备。
常见命令:
1 | lsblk |
/proc:内核运行信息
/proc 是虚拟文件系统,不是真实磁盘文件。它暴露进程、内核、CPU、内存、网络等运行时信息。
常见例子:
1 | /proc/cpuinfo |
常用查看:
1 | cat /proc/cpuinfo |
注意:
/proc里的很多内容是内核动态生成的。- 不要把它当普通文件目录理解。
/sys:硬件和内核对象信息
/sys 也是虚拟文件系统,用于暴露硬件、设备、驱动、内核对象等信息。
常见用途:
- 查看网卡、磁盘、设备信息。
- 排查硬件和驱动相关问题。
- 被系统工具读取。
一般排查业务问题时不常直接改 /sys。
排查问题时按场景找目录
服务配置
优先看:
1 | /etc |
命令:
1 | systemctl cat 服务名 |
服务日志
优先看:
1 | /var/log |
命令:
1 | journalctl -u 服务名 -n 100 --no-pager |
业务部署
常见位置:
1 | /home/<user> |
排查时要先确认:
- 应用实际部署在哪。
- 运行用户是谁。
- systemd unit 的
WorkingDirectory是什么。 - 日志输出到文件还是 journal。
运行状态
常见位置和命令:
1 | /run |
命令:
1 | systemctl status 服务名 |
数据文件
常见位置:
1 | /var/lib |
例子:
1 | /var/lib/mysql |
注意不要在不了解服务的情况下直接删除 /var/lib 下的内容。
临时脚本
优先放:
1 | /tmp |
如果希望跨重启保留:
1 | /var/tmp |
如果脚本要长期使用,放:
1 | /usr/local/bin |
手工安装工具
常见位置:
1 | /usr/local |
建议:
- 小脚本放
/usr/local/bin或/usr/local/sbin。 - 完整 release 包放
/opt/<tool>。 - systemd unit 放
/etc/systemd/system。
当前环境重点目录
结合当前运维和网络工具文档,重点熟悉这些目录:
1 | /etc/systemd/system/ systemd 服务配置 |
速查表
| 目录 | 主要用途 |
|---|---|
/etc |
系统和服务配置 |
/var |
运行过程中变化的数据 |
/var/log |
日志 |
/var/lib |
服务数据 |
/usr |
系统安装的软件和资源 |
/usr/local |
本机手工安装的软件和脚本 |
/bin |
基础普通命令 |
/sbin |
基础系统管理命令 |
/home |
普通用户目录 |
/root |
root 用户家目录 |
/tmp |
临时文件,可能被清理 |
/var/tmp |
跨重启保留时间更长的临时文件 |
/run |
运行时状态,重启丢失 |
/opt |
第三方或独立软件包 |
/srv |
服务对外提供的数据 |
/mnt |
手动或临时挂载点 |
/media |
自动挂载外接设备 |
/dev |
设备文件 |
/proc |
进程和内核运行信息 |
/sys |
硬件、设备、驱动和内核对象信息 |
记忆方式
按问题记,比按目录背更快:
1 | 改配置:/etc |
