Skip to content

一、 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:\WindowsC:\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 为例)

  1. 检查配置: 进入 /etc/nginx/nginx.conf 及其子目录检查你写的反向代理或域名配置是否正确。
  2. 查看报错: 当 Nginx 启动失败或报 500 错误时,第一时间去 /var/log/nginx/error.log 查看具体的错误详情。
  3. 服务控制: Nginx 的自启动控制文件存放在 /etc/systemd/system/ 或相关子目录中。

场景 2:安全与审计

  1. SSH 端口修改: 为了防止默认 22 端口被无脑扫描,去 /etc/ssh/sshd_config 修改端口号。
  2. 免密登录: 将你的公钥放入 /home/用户名/.ssh/authorized_keys 中。
  3. 排查入侵: 如果觉得服务器被暴力破解过,去 /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 重负荷数据都会安全地放在独立的大硬盘里。