Linux 目录不建议硬背,先按“它主要放什么东西”来记。排查问题时,目录结构其实是在帮你快速判断:配置去哪找、日志去哪看、应用放在哪、运行状态在哪、临时文件能不能保留。

一句话:

1
2
3
4
5
6
配置去 /etc
日志去 /var/log 或 journalctl
应用去 /home、/opt、/srv
运行状态去 /run
临时文件去 /tmp
手工安装工具去 /usr/local 或 /opt

常用目录

/etc:配置文件

系统和服务配置大多放在这里。

常见例子:

1
2
3
4
5
/etc/nginx/
/etc/mysql/
/etc/wireguard/
/etc/squid/squid.conf
/etc/systemd/system/

常见用途:

  • 查服务配置。
  • 修改 systemd unit。
  • 查 WireGuard peer 配置。
  • 查 Nginx、MySQL、Squid 等服务配置。

排查服务异常时,通常先看:

1
2
systemctl status 服务名
systemctl cat 服务名

systemctl cat 可以直接看到服务实际加载了哪些 unit 文件。

/var:运行过程中变化的数据

/var 放的是运行过程中会持续变化的数据,例如日志、缓存、数据库数据、队列、spool 文件。

常见例子:

1
2
3
4
5
/var/log/
/var/lib/
/var/lib/mysql/
/var/cache/
/var/spool/

常见用途:

  • 查日志。
  • 查数据库文件。
  • 查缓存和运行数据。
  • 查服务在系统默认位置保存的数据。

/var/log:日志

排查问题的第一站之一。

常见例子:

1
2
3
4
5
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/syslog
/var/log/messages
/var/log/auth.log

注意:

  • Debian / Ubuntu 常见 /var/log/syslog
  • CentOS / RHEL 常见 /var/log/messages
  • SSH 登录日志常见 /var/log/auth.log/var/log/secure
  • 很多 systemd 服务日志不一定直接写文件,而是进 journalctl

常用命令:

1
2
3
journalctl -u 服务名 -n 100 --no-pager
journalctl -u 服务名 -f
tail -f /var/log/nginx/error.log

/usr:系统安装的软件和共享资源

/usr 里有大量系统命令、库、头文件和共享资源。大多数包管理器安装的软件会把文件放到这里。

常见例子:

1
2
3
4
/usr/bin/
/usr/sbin/
/usr/lib/
/usr/share/

注意:

  • 不建议把业务数据放在 /usr
  • 不建议手工随意修改 /usr 下由包管理器安装的文件。

/usr/local:本机手工安装的软件

/usr/local 常用于放本机管理员手工安装的软件、脚本和二进制。

常见例子:

1
2
3
/usr/local/bin/
/usr/local/sbin/
/usr/local/lib/

适合放:

  • 本机自写脚本。
  • 不通过包管理器安装的小工具。
  • 运维脚本。

例如:

1
/usr/local/sbin/indeep-wireguard-watchdog.sh

经验规则:

1
2
普通用户命令放 /usr/local/bin
系统管理命令放 /usr/local/sbin

/bin/sbin:基础命令

/bin 偏普通基础命令,/sbin 偏系统管理命令。

常见例子:

1
2
3
4
/bin/sh
/bin/bash
/sbin/ip
/sbin/iptables

现在很多发行版已经采用 usr-merge,/bin/sbin 可能只是链接到:

1
2
/usr/bin
/usr/sbin

所以看到链接是正常的。

/home:普通用户目录

普通用户自己的文件、源码、应用部署目录经常在这里。

常见例子:

1
2
3
4
/home/celestrong/
/home/celestrong/src/
/home/celestrong/test/
/home/celestrong/workspace/

适合放:

  • 普通用户源码。
  • 用户级配置。
  • 非 root 运行的应用。
  • 开发和测试部署目录。

注意:

  • 生产长期部署可以放 /home/<app-user>/app,但要明确用户和权限。
  • 不要让 root 和普通用户混着维护同一个目录。

/root:root 用户家目录

/root 是 root 用户自己的家目录。

常见用途:

  • root 临时文件。
  • 临时备份。
  • 管理员临时材料。

不建议:

  • 长期作为业务部署目录。
  • 放团队协作材料。
  • 放需要普通用户访问的文件。

/tmp:临时文件

/tmp 用于临时文件。系统重启、定期清理策略或 tmpfiles 规则可能会清理这里。

适合放:

  • 临时下载。
  • 临时脚本。
  • 一次性排查材料。

不适合放:

  • 重要配置。
  • 长期日志。
  • 长期运行脚本。
  • 需要保留的业务数据。

如果临时文件需要跨重启保留,可以考虑 /var/tmp

/run:运行时状态

/run 放运行时状态,重启会丢。

常见内容:

1
2
3
4
PID 文件
socket 文件
lock 文件
临时状态目录

例子:

1
2
3
/run/docker.sock
/run/sshd.pid
/run/indeep-wireguard-watchdog/

适合放:

  • 服务启动后生成的状态。
  • watchdog 状态。
  • 当前运行周期内才有意义的文件。

不适合放:

  • 配置文件。
  • 永久数据。
  • 需要跨重启保留的内容。

/opt:第三方或独立软件包

/opt 常用于放独立安装的软件包,尤其是不走系统包管理器的软件。

常见例子:

1
2
3
/opt/frp/
/opt/app/
/opt/java/

适合放:

  • 官方 release 解压的软件。
  • 独立部署包。
  • 第三方工具。

比如 frp 常见结构:

1
2
3
4
/opt/frp/frps
/opt/frp/frpc
/opt/frp/frps.toml
/opt/frp/frpc.toml

/srv:服务对外提供的数据

/srv 规范上用于放服务对外提供的数据。

常见例子:

1
2
3
/srv/www/
/srv/ftp/
/srv/git/

实际项目里不一定常用,有些团队会用 /opt/home/www 替代。关键是团队内部统一。

/mnt:临时挂载点

/mnt 常用于手动挂载磁盘、网络盘或临时挂载目录。

常见例子:

1
2
3
4
/mnt/data
/mnt/backup
/mnt/c
/mnt/d

在 WSL 中,Windows 盘通常挂在:

1
2
/mnt/c
/mnt/d

注意:

  • WSL 长期开发不建议把主力项目放在 /mnt/c/mnt/d
  • 临时挂载可以用 /mnt,长期业务数据建议规划到明确目录。

/media:自动挂载外接设备

/media 常用于桌面环境自动挂载 U 盘、移动硬盘等外接设备。

服务器上通常不常用。

/dev:设备文件

/dev 是设备文件目录。

常见例子:

1
2
3
4
5
6
/dev/null
/dev/zero
/dev/random
/dev/urandom
/dev/sda
/dev/tty

用途:

  • 磁盘设备。
  • 终端设备。
  • 随机数设备。
  • 特殊输入输出设备。

常见命令:

1
2
3
lsblk
blkid
df -h

/proc:内核运行信息

/proc 是虚拟文件系统,不是真实磁盘文件。它暴露进程、内核、CPU、内存、网络等运行时信息。

常见例子:

1
2
3
4
/proc/cpuinfo
/proc/meminfo
/proc/net/
/proc/<pid>/

常用查看:

1
2
3
4
cat /proc/cpuinfo
cat /proc/meminfo
cat /proc/net/nf_conntrack
ls /proc/$(pidof nginx | awk '{print $1}')

注意:

  • /proc 里的很多内容是内核动态生成的。
  • 不要把它当普通文件目录理解。

/sys:硬件和内核对象信息

/sys 也是虚拟文件系统,用于暴露硬件、设备、驱动、内核对象等信息。

常见用途:

  • 查看网卡、磁盘、设备信息。
  • 排查硬件和驱动相关问题。
  • 被系统工具读取。

一般排查业务问题时不常直接改 /sys

排查问题时按场景找目录

服务配置

优先看:

1
2
3
/etc
/etc/systemd/system
/usr/lib/systemd/system

命令:

1
2
systemctl cat 服务名
systemctl status 服务名

服务日志

优先看:

1
2
/var/log
journalctl

命令:

1
2
journalctl -u 服务名 -n 100 --no-pager
journalctl -u 服务名 -f

业务部署

常见位置:

1
2
3
4
/home/<user>
/opt
/srv
/www

排查时要先确认:

  • 应用实际部署在哪。
  • 运行用户是谁。
  • systemd unit 的 WorkingDirectory 是什么。
  • 日志输出到文件还是 journal。

运行状态

常见位置和命令:

1
2
3
4
/run
systemctl
ss
ps

命令:

1
2
3
systemctl status 服务名
ss -ltnp
ps -ef | grep 进程名

数据文件

常见位置:

1
2
/var/lib
业务自定义 data 目录

例子:

1
2
3
/var/lib/mysql
/var/lib/docker
/var/lib/redis

注意不要在不了解服务的情况下直接删除 /var/lib 下的内容。

临时脚本

优先放:

1
/tmp

如果希望跨重启保留:

1
/var/tmp

如果脚本要长期使用,放:

1
2
/usr/local/bin
/usr/local/sbin

手工安装工具

常见位置:

1
2
/usr/local
/opt

建议:

  • 小脚本放 /usr/local/bin/usr/local/sbin
  • 完整 release 包放 /opt/<tool>
  • systemd unit 放 /etc/systemd/system

当前环境重点目录

结合当前运维和网络工具文档,重点熟悉这些目录:

1
2
3
4
5
6
7
8
9
10
/etc/systemd/system/              systemd 服务配置
/etc/wireguard/ WireGuard 配置
/etc/squid/squid.conf Squid 出网代理配置
/www/server/nginx/conf/ 宝塔 Nginx 配置
/home/celestrong/test/ indeepTest 的 test 应用部署目录
/home/celestrong/src/ indeepTest 的源码目录
/home/celestrong/test/terminal/ test 应用日志
/var/log/ 系统和服务日志
/run/indeep-wireguard-watchdog/ watchdog 运行状态
/opt/frp/ frp release 安装目录

速查表

目录 主要用途
/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
2
3
4
5
6
7
8
9
10
改配置:/etc
看日志:/var/log 或 journalctl
找应用:/home、/opt、/srv、/www
找数据:/var/lib 或业务 data 目录
找运行状态:/run、systemctl、ss、ps
放临时文件:/tmp
放长期脚本:/usr/local/bin、/usr/local/sbin
放独立工具:/opt
看内核状态:/proc、/sys
看设备:/dev