源本科技 | 码上会

Linux 目录结构

2025/12/23
92
0

Linux 文件系统的核心理念

在 Linux 中,一切皆文件(Everything is a file)——
无论是普通文本、程序、目录,还是键盘、打印机、硬盘等硬件设备,都被抽象为“文件”。

关键区别

  • Windows 使用多个根(如 C:\D:\

  • Linux 只有一个根目录 /,所有内容都挂载在这个统一的树状结构下

这种设计源于 UNIX,并被所有类 UNIX 系统(如 BSD、macOS)继承。


遵循标准:FHS

Filesystem Hierarchy Standard

Linux 目录布局严格遵循 FHS(文件系统层次标准),该标准定义了:

  • 每个顶级目录的用途

  • 应存放哪些类型的文件

  • 系统管理员和开发者应如何组织数据

这确保了不同发行版(Ubuntu、CentOS、Debian 等)之间的一致性。


Linux 中的文件类型

类型

说明

示例

普通文件
(Regular Files)

最常见的文件类型:文本、图片、视频、可执行程序等

report.pdf, script.sh

目录文件
(Directories)

用于组织其他文件的“容器”,可嵌套(子目录)

/home/user/, /etc/

设备文件
(Device Files)

将硬件抽象为文件,便于统一访问

/dev/sda1(硬盘)、/dev/ttyS0(串口)

设备文件分为两类:

  • 块设备(Block):如硬盘(/dev/sda),以块为单位读写

  • 字符设备(Character):如键盘(/dev/input/event0),逐字符传输


根目录 / 下的核心目录详解

以下是 Linux 根目录下的顶级目录及其作用

目录

全称 / 含义

用途说明

/bin

Binaries

存放所有用户都可使用的基本命令(如 ls, cp, bash

/sbin

System Binaries

系统管理员专用命令(如 fdisk, ifconfig, reboot

/etc

Etcetera(配置)

系统配置文件集中地(无二进制文件)

/home

Home directories

普通用户的家目录(如 /home/alice

/root

root 用户的家目录(不在 /home 下!)

/tmp

Temporary

临时文件,通常重启后清空

/usr

Unix System Resources

只读用户程序与数据(类似 Windows 的 Program Files

/var

Variable

经常变化的文件:日志、缓存、邮件、数据库等

/boot

Bootloader & Kernel

启动所需文件:内核(vmlinuz)、GRUB 配置等

/dev

Devices

所有设备文件(硬盘、USB、终端等)

/lib / /lib64

Libraries

系统运行所需的共享库(.so 文件)和内核模块

/opt

Optional

第三方商业软件安装位置(如 Oracle、JetBrains)

/mnt

Mount

临时挂载点(如手动挂载 U 盘)

/media

Media

自动挂载可移动设备(如 USB、CD-ROM)

/proc

Processes

虚拟文件系统,提供运行中进程和内核信息

/sys

System

虚拟文件系统,用于管理设备、驱动、内核参数

/run

Runtime

存放系统启动后的临时运行时数据(如 PID 文件)

/srv

Service

存放本机提供的服务数据(如 Web 站点 /srv/www

/lost+found

文件系统修复时恢复的碎片文件(每个分区都有)

记忆技巧

  • /bin + /sbin → 命令

  • /etc → 配置

  • /var → 变化的数据(日志、缓存)

  • /usr → 用户程序(静态数据)

  • /dev + /proc + /sys → 系统与硬件接口


关键配置文件

文件

作用

/etc/passwd

用户账户基本信息(密码实际在 /etc/shadow

/etc/group

用户组定义

/etc/fstab

开机自动挂载的磁盘和分区列表

/etc/hosts

本地域名解析(IP ↔ 主机名)

/etc/resolv.conf

DNS 服务器配置

/etc/bashrc/etc/bash.bashrc

全局 Bash shell 配置

/etc/profile

登录时执行的全局环境变量脚本

/etc/crontab

定时任务(cron)配置

/etc/hostname

主机名

/etc/network/interfaces

网络接口配置

安全提示:修改 /etc 下的文件前务必备份!错误配置可能导致系统无法启动。


/usr 目录结构

用户程序核心区

子目录

说明

/usr/bin

绝大多数用户命令(如 python, git, gcc

/usr/sbin

非紧急的系统管理命令(如 httpd, sshd

/usr/lib

应用程序依赖的库文件

/usr/include

C/C++ 头文件(供开发使用)

/usr/share

架构无关的共享数据:文档、图标、字体、man 手册等

/usr/local

本地编译安装的软件(避免与系统包冲突)

/usr/src

内核源码(可选)

注意:/usr/bin/X11 通常是 /usr/bin 的符号链接,已逐渐弃用。


虚拟文件系统:/proc/sys

这两个目录不占用磁盘空间,由内核动态生成:

/proc —— 进程与系统信息

cat /proc/cpuinfo    # CPU 详细信息
cat /proc/meminfo    # 内存使用情况
cat /proc/mounts     # 当前挂载的文件系统
ls /proc/1234        # 查看 PID=1234 的进程信息

/sys —— 设备与驱动控制

  • 提供对硬件设备、总线、驱动的统一视图

  • 可通过写入文件来动态修改内核参数(如调节 CPU 频率)


日志文件(位于 /var/log

文件

作用

/var/log/messages

全局系统日志(多数发行版)

/var/log/syslog

Debian/Ubuntu 的主日志

/var/log/auth.log

认证相关日志(登录、sudo)

/var/log/kern.log

内核日志

/var/log/dmesg

系统启动时的硬件检测信息

/var/log/wtmp

用户登录 / 登出历史(用 last 命令查看)

/var/log/lastlog

每个用户最后一次登录时间(用 lastlog 查看)

查看日志技巧

tail -f /var/log/syslog   # 实时跟踪日志
journalctl -u nginx       # systemd 服务日志(现代系统)

如何探索 Linux 目录

步骤 1:获取 root 权限(谨慎操作!)

sudo -s
# 输入当前用户密码

步骤 2:进入根目录并列出内容

cd /
ls -l

你将看到类似以下输出:

drwxr-xr-x   2 root root  4096 Oct 25 10:00 bin
drwxr-xr-x   4 root root  1024 Oct 25 09:30 boot
drwxr-xr-x  20 root root  3860 Oct 25 10:05 dev
drwxr-xr-x 137 root root 12288 Oct 25 10:02 etc
...

警告:不要随意删除 / 下的目录!可能导致系统崩溃。


特殊文件:版本与内核

  • 内核文件/boot/vmlinuz-*(压缩的 Linux 内核)

  • 版本信息

    cat /proc/version      # 内核版本
    cat /etc/os-release    # 发行版信息(推荐)
    uname -a               # 系统与内核详情

Linux 目录结构全景图

/
├── bin/          ← 基础命令
├── boot/         ← 启动文件
├── dev/          ← 设备文件
├── etc/          ← 配置文件
├── home/         ← 普通用户家目录
├── lib/          ← 系统库
├── media/        ← 自动挂载的移动设备
├── mnt/          ← 手动挂载点
├── opt/          ← 第三方软件
├── proc/         ← 进程虚拟文件系统
├── root/         ← root 用户家目录
├── run/          ← 运行时数据
├── sbin/         ← 管理员命令
├── srv/          ← 服务数据
├── sys/          ← 设备与内核虚拟文件系统
├── tmp/          ← 临时文件
├── usr/          ← 用户程序(只读)
└── var/          ← 可变数据(日志、缓存等)

核心思想分而治之 —— 将不同性质的文件分类存放,使系统更清晰、稳定、易维护。


思考题

  1. 为什么 Linux 要把设备也当作文件?这样做有什么好处?

  2. /usr/var 的设计哲学有何不同?为什么不能把日志放在 /usr/log

  3. 如果你要安装一个从源码编译的软件(如 Nginx),应该放在哪个目录?为什么?