linux目录结构遵循 FHS 规范,核心逻辑是“谁用、谁管、谁改”:/ 为挂载总入口;/bin、/sbin 存基础命令;/etc 管配置;/var存可变数据;/usr 为只读系统软件区;/opt 供第三方独立软件;/home、/root、/run 体现运行态;实际存储常通过挂载和符号链接分离。

Linux 目录结构不是随意设计的,而是遵循 FHS(Filesystem Hierarchy Standard) 规范,目的是让不同发行版保持一致、便于管理、安全隔离和软件兼容。理解它,关键不是死记硬背,而是抓住“谁用、谁管、谁改”这三条逻辑线。
根目录 / 是一切的起点,但不等于“ c 盘”
windows习惯把系统、程序、用户文件全塞进一个盘符,而 Linux 的 / 是挂载点总入口——它本身通常不存大量数据,而是组织其他实际存储位置(比如 /home 可能单独挂载在另一块 硬盘 上)。刚装完系统时 / 下只有十几个标准子目录,每个都有明确职责:
- /bin 和 /sbin:存放所有用户(/bin)和管理员(/sbin)都能直接运行的基础命令,如 ls、cp、ifconfig。现代发行版常软链接到 /usr/bin 和 /usr/sbin(见下文)
- /etc:纯文本配置中心。服务开关、网络设置、用户账号(/etc/passwd)、权限策略(/etc/sudoers)全在这里。修改前建议备份,别直接 vim /etc/shadow
- /var:记录“会变”的东西——日志(/var/log)、邮件队列(/var/spool/mail)、数据库 数据(/var/lib/mysql)、网页内容(/var/www)等。它的存在就是为了和只读的系统目录分开
/usr 和 /opt 不是“用户目录”,而是“软件分发区”
新手最易混淆的是 /usr —— 它名字像“user”,实则代表“unix System Resources”。它是只读的系统级软件仓库:
- /usr/bin:绝大多数终端命令所在地(比如 python、gcc、curl),普通用户日常使用
- /usr/lib:对应二进制的库文件和模块(如 /usr/lib/python3.11/),程序运行时动态加载
- /usr/share:架构 无关的资源,比如文档(/usr/share/man)、图标(/usr/share/icons)、字体(/usr/share/fonts)
- /opt:留给第三方大型独立软件,比如 google chrome、JetBrains ide。它们自成目录(/opt/google/chrome/),不混入 /usr,方便整体卸载
注意:/usr 本应只读,但部分发行版(如 ubuntu)允许写入;而 /opt 始终由管理员手动管理,包管理器一般不管它。
/home、/root、/run:三个真实“活”的地方
这三个目录体现 Linux 的“运行态”思维:
- /home/ 用户名:每个普通用户的私人空间,桌面、下载、配置文件(以 . 开头,如 ~/.bashrc)全在此。权限默认为 755,他人不可写
- /root:超级用户 root 的家目录,不是 /!它独立存在,保障 root 配置与系统隔离,也避免误操作波及根文件系统
- /run:内存中的临时运行时数据(tmpfs),每次开机重建。存放 PID 文件(/run/nginx.pid)、套接字(/run/docker.sock)、已登录用户信息(/run/utmp)等。关机即清空,比 /var/run 更轻量、更及时
进阶要点:挂载、符号链接与实际存储分离
真正掌握目录结构,要跳出“目录 = 文件夹”的直觉,学会看背后的实际挂载:
- 执行 findmnt 或 df -h,能看到 /、/home、/boot 各自在哪个物理设备或 LVM 卷上
- 很多目录是符号链接,例如 ls -l /bin 常显示 → /usr/bin,说明命令实际从 /usr 分发,/bin 只是兼容入口
- /proc 和 /sys 是虚拟文件系统,不占磁盘空间,而是内核实时生成的 接口(如 /proc/cpuinfo 看 CPU 信息,/sys/class/net/ 查网卡状态)
- 容器环境里,/ 某些子目录可能被覆盖(如 docker 中 /etc/hosts 是容器专属),这是 mount Namespace 的效果,不是目录错了
基本上就这些。不需要背全,遇到新目录先查 man hier,再看它属于哪个 FHS 类别(配置?可变数据?架构相关?),逻辑就稳了。