一、 Ubuntu 根目录
Plaintext
/ (根目录)
├── bin -> usr/bin # 基础命令
├── boot # 启动与内核
├── cdrom # 光驱挂载点
├── dev # 硬件设备文件
├── etc # 系统与软件配置文件
├── home # 用户主目录
├── lib -> usr/lib # 共享库文件
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── media # 可移动介质自动挂载点
├── mnt # 手动临时挂载点
├── opt # 第三方附加软件
├── proc # 内存中的进程与内核信息
├── root # root管理员主目录
├── run # 运行时临时数据
├── sbin -> usr/sbin # 系统管理命令
├── srv # 服务数据目录
├── sys # 内核硬件树
├── tmp # 临时文件
├── usr # 用户级程序与资源(体积庞大)
└── var # 动态可变数据(日志、数据库、Docker)二、 各目录详细作用与关键子结构拆解
下面对每一个目录进行说明,并为其中最常用、最重要的目录展开其内部子结构。
1. /etc (配置中心 - 极其重要)
系统的“大脑”,几乎所有通过包管理器(apt)安装的软件和系统核心配置都在这里。
Plaintext
/etc
├── apt/ # 包管理器的配置,如 sources.list (定义去哪里下载软件)
├── nginx/ # Nginx Web 服务器的全局和站点配置文件
├── ssh/ # SSH 服务的配置,如 sshd_config (修改SSH端口号在这里)
├── systemd/ # 系统服务管理器的配置 (控制哪些软件开机自启)
├── fstab # 记录开机自动挂载的磁盘分区信息 (加新硬盘必改)
└── passwd # 存储系统所有用户的基本信息 (不要去随便改动)2. /var (动态数据区 - 极易爆盘,需重点关注)
Variable 的缩写,存放系统运行过程中经常发生变化的数据。
Plaintext
/var
├── cache/ # 应用程序的缓存数据 (如 apt 下载的临时 deb 包)
├── lib/ # 软件运行时产生的状态信息或数据库核心文件
│ ├── docker/ # Docker 的镜像、容器、挂载卷默认存储点 (吃硬盘大户!)
│ └── mysql/ # MySQL/MariaDB 数据库的默认数据存放点
├── log/ # 系统的核心日志阵地 (排错必看)
│ ├── syslog # 系统主日志记录
│ ├── auth.log # 登录验证日志 (查看是否有黑客在暴力破解你的密码)
│ └── nginx/ # Nginx 的访问(access)和错误(error)日志
└── www/ # Web 网站的传统默认根目录 (如 /var/www/html)3. /usr (用户系统资源 - 体积最大)
Unix System Resources 的缩写,包含了操作系统的大部分核心应用程序、库文件和共享资源。它就像 Windows 的 C:\Windows 和 C:\Program Files 的结合体。
Plaintext
/usr
├── bin/ # 普通用户可执行的大部分应用程序命令 (如 node, python)
├── lib/ # 应用程序运行所需的动态链接库 (.so 文件)
├── local/ # 管理员手动编译/下载安装的软件默认目录 (极其重要)
│ ├── bin/ # 手动安装软件的执行命令存放处
│ └── ...
├── sbin/ # 仅限 root 执行的系统级管理命令
└── share/ # 共享的只读数据,如文档、man帮助手册、时区数据4. /home (普通用户区)
普通用户的私人领地,存放个人文件和个性化配置。
Plaintext
/home
└── username/ # 你的具体账号名目录 (如 /home/ubuntu)
├── .bashrc # 用户的终端环境变量配置文件 (配置 alias 或系统路径)
├── .config/ # 用户级软件的配置文件存放处
└── .ssh/ # 存放用户的 SSH 公钥和私钥 (用于免密登录服务器或Git)5. /dev (硬件设备映射区)
Linux “一切皆文件”,所有硬件都在此有一个对应的设备文件。
Plaintext
/dev
├── null # 著名的"黑洞"设备,丢入其中的数据会被直接销毁
├── zero # 会无限输出空字符(0)的设备,常用于创建大文件或覆写磁盘
├── sda (或 vda) # 第一块物理硬盘 (vda 通常指虚拟机的虚拟硬盘)
│ ├── sda1 # 第一块硬盘的第一个分区
│ └── sda2 # 第一块硬盘的第二个分区
└── tty # 终端设备终端6. 其他基础与临时目录
/boot: 包含系统启动的核心文件。千万别删里面的vmlinuz(内核)和grub/(引导程序配置),否则系统直接变砖。/bin&/sbin: (目前通常软链接到/usr/bin和/usr/sbin)存放系统最底层的紧急维护命令,如ls,mkdir,reboot。/opt(Optional): 用于安装第三方提供的、“绿色版”或自带完整运行环境的大型附加软件(如商业数据库、手动下载的监控 Agent)。/root: 最高权限管理员root的专属/home目录。/tmp&/run:/tmp存放普通临时文件,/run存放系统启动以来的进程 PID 和运行态数据。两者都在系统重启后会被清空。/proc&/sys: 这两个是存在于内存中的伪文件系统。/proc存放当前运行的进程和 CPU/内存状态;/sys存放内核设备树信息。不占用实际硬盘空间。/mnt&/media:/mnt用于系统管理员手动挂载新的数据盘或网络存储;/media用于桌面版系统自动挂载 U 盘。
三、 目录结构的逻辑分类
将这些庞杂的目录按“职责”进行归类,更容易在脑海中建立心智模型:
| 分类阵营 | 包含的目录 | 核心特征描述 |
|---|---|---|
| 控制与配置枢纽 | /etc | 控制系统和所有服务行为的“大脑”。运维改动最频繁的地方。 |
| 可变数据与日志 | /var | 存放日志、数据库、Docker数据。监控磁盘报警的重灾区。 |
| 软件与环境仓库 | /usr,/opt | 系统的肉体,占据绝大部分磁盘空间。应用软件和运行库的聚集地。 |
| 内核与硬件状态 | /boot,/dev,/sys,/proc | 底层基石。普通用户绝对不要去擅自修改这些目录下的文件。 |
| 用户与挂载点 | /home,/root,/mnt,/tmp | 存放人的数据、临时中转数据以及外接存储设备的对接点。 |
四、 实际场景应用说明(结合子目录)
场景 1:排查 Web 服务故障(以 Nginx 为例)
- 检查配置: 进入
/etc/nginx/nginx.conf及其子目录检查你写的反向代理或域名配置是否正确。 - 查看报错: 当 Nginx 启动失败或报 500 错误时,第一时间去
/var/log/nginx/error.log查看具体的错误详情。 - 服务控制: Nginx 的自启动控制文件存放在
/etc/systemd/system/或相关子目录中。
场景 2:安全与审计
- SSH 端口修改: 为了防止默认 22 端口被无脑扫描,去
/etc/ssh/sshd_config修改端口号。 - 免密登录: 将你的公钥放入
/home/用户名/.ssh/authorized_keys中。 - 排查入侵: 如果觉得服务器被暴力破解过,去
/var/log/auth.log查看所有的登录尝试记录。
场景 3:Docker 环境防爆盘部署策略
- 痛点: 默认情况下,Docker 会把拉取的所有镜像(动辄几GB)和容器产生的数据一股脑塞进
/var/lib/docker/。如果你的根目录/只有 50G,很快就会写满导致系统崩溃。 - 标准操作: 1. 购买/挂载一块 500GB 的数据盘。 2. 将其挂载到
/mnt/data或在根目录新建/data。 3. 在/etc/docker/daemon.json(如果不存在则创建)中配置"data-root": "/data/docker"。 4. 这样所有的 Docker 重负荷数据都会安全地放在独立的大硬盘里。