Skip to content

文件系统结构

概述

Linux 采用层级式的树状文件系统结构,所有文件和目录都从根目录(/)开始。与 Windows 使用多个盘符(C:、D:)不同,Linux 将所有存储设备统一挂载到这个单一的目录树中。

文件系统层次标准(FHS)

Linux 遵循文件系统层次标准(Filesystem Hierarchy Standard,FHS),定义了目录结构和内容的规范。

目录树概览

/
├── bin       → 基本命令二进制文件
├── boot      → 启动加载器文件
├── dev       → 设备文件
├── etc       → 系统配置文件
├── home      → 用户家目录
├── lib       → 共享库文件
├── media     → 可移动媒体挂载点
├── mnt       → 临时挂载点
├── opt       → 第三方应用程序
├── proc      → 进程和内核信息(虚拟)
├── root      → root 用户的家目录
├── run       → 运行时数据
├── sbin      → 系统管理命令
├── srv       → 服务数据
├── sys       → 内核和设备信息(虚拟)
├── tmp       → 临时文件
├── usr       → 用户程序和数据
└── var       → 可变数据文件

重要目录详解

/ (根目录)

根目录是文件系统的起点,所有目录和文件都是它的子孙。

bash
$ ls /
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

/bin 和 /sbin

存放基本命令的二进制文件。

bash
# /bin - 所有用户可用的基本命令
$ ls /bin
bash  cat  cp  ls  mkdir  mv  rm  ...

# /sbin - 系统管理命令(通常需要 root 权限)
$ ls /sbin
fdisk  fsck  ifconfig  init  ip  reboot  shutdown  ...

注意:在现代 Linux 发行版中,/bin/sbin 通常是指向 /usr/bin/usr/sbin 的符号链接。

/boot

包含启动 Linux 所需的文件。

bash
$ ls /boot
config-5.15.0-generic        # 内核配置
initrd.img-5.15.0-generic    # 初始内存盘
vmlinuz-5.15.0-generic       # 压缩的 Linux 内核
grub/                        # GRUB 引导程序

/dev

设备文件目录。Linux 将硬件设备表示为文件。

bash
$ ls /dev
sda       # 第一块硬盘
sda1      # 第一块硬盘的第一个分区
sdb       # 第二块硬盘
nvme0n1   # NVMe 固态硬盘
tty       # 终端设备
null      # 空设备(丢弃所有输入)
zero      # 零设备(产生空字节)
random    # 随机数生成器

常用设备文件

设备说明
/dev/null丢弃所有写入的数据
/dev/zero提供无限的空字节
/dev/random产生随机数据
/dev/sda第一块 SATA/SCSI 硬盘
/dev/nvme0n1第一块 NVMe 硬盘
/dev/tty当前终端

/etc

系统配置文件目录(Editable Text Configuration)。

bash
$ ls /etc
apt/           # APT 包管理器配置
bash.bashrc    # 系统级 Bash 配置
crontab        # 定时任务
fstab          # 文件系统挂载表
group          # 组信息
hostname       # 主机名
hosts          # 主机名解析
network/       # 网络配置
passwd         # 用户账户信息
shadow         # 加密的用户密码
ssh/           # SSH 配置
sudoers        # sudo 配置

重要配置文件

文件说明
/etc/passwd用户账户信息
/etc/shadow加密的密码
/etc/group用户组信息
/etc/fstab磁盘挂载配置
/etc/hosts本地 DNS 解析
/etc/hostname主机名
/etc/resolv.confDNS 服务器配置
/etc/crontab系统定时任务

/home

普通用户的家目录。

bash
/home
├── maxwell/
   ├── Desktop/
   ├── Documents/
   ├── Downloads/
   ├── .bashrc        # 用户 Bash 配置
   ├── .profile       # 登录配置
   └── .ssh/          # SSH 密钥
├── alice/
└── bob/

每个用户在 /home 下有自己的目录,用于存放个人文件和配置。

bash
# 家目录可用 ~ 表示
$ cd ~
$ cd ~/Documents

/lib 和 /lib64

共享库文件(类似 Windows 的 DLL)。

bash
$ ls /lib
modules/           # 内核模块
x86_64-linux-gnu/  # 64位库文件

/media 和 /mnt

挂载点目录。

  • /media:自动挂载的可移动设备(U盘、光盘)
  • /mnt:临时手动挂载点
bash
# 查看挂载的设备
$ ls /media/$USER/
USB_DRIVE/  CD_ROM/

# 手动挂载
$ sudo mount /dev/sdb1 /mnt

/opt

第三方应用程序安装目录。

bash
/opt
├── google/
   └── chrome/
├── visual-studio-code/
└── lampp/

/proc

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

bash
$ ls /proc
1/              # PID 为 1 的进程信息
self/           # 当前进程
cpuinfo         # CPU 信息
meminfo         # 内存信息
version         # 内核版本

常用文件

bash
# 查看 CPU 信息
$ cat /proc/cpuinfo

# 查看内存信息
$ cat /proc/meminfo

# 查看内核版本
$ cat /proc/version

# 查看系统运行时间
$ cat /proc/uptime

# 查看特定进程信息
$ ls /proc/1234/
cmdline  cwd  environ  exe  fd  maps  status  ...

/root

root 用户(超级用户)的家目录。

bash
# 注意:不是 /home/root
$ sudo ls /root

/run

运行时数据目录,存储系统启动以来的临时数据。

bash
$ ls /run
lock/       # 锁文件
user/       # 用户运行时数据
systemd/    # systemd 数据

/srv

服务数据目录,存储系统提供的服务数据。

bash
/srv
├── ftp/       # FTP 服务数据
├── http/      # Web 服务数据
└── git/       # Git 仓库

/sys

虚拟文件系统,提供内核、设备和驱动信息。

bash
$ ls /sys
block/    # 块设备
bus/      # 总线
class/    # 设备类别
devices/  # 设备
power/    # 电源管理

/tmp

临时文件目录。系统重启后内容可能被清空。

bash
$ ls /tmp
systemd-private-xxx/
  • 所有用户都可以写入
  • 通常配置为定期清理
  • 适合存放临时数据

/usr

用户程序和数据(Unix System Resources)。

bash
/usr
├── bin/        # 用户命令
├── include/    # C 头文件
├── lib/        # 库文件
├── local/      # 本地安装的软件
   ├── bin/
   ├── lib/
   └── share/
├── sbin/       # 系统管理命令
├── share/      # 架构无关的数据
   ├── doc/    # 文档
   ├── man/    # 手册页
   └── icons/  # 图标
└── src/        # 源代码

子目录说明

目录说明
/usr/bin用户命令
/usr/sbin系统管理命令
/usr/lib库文件
/usr/local本地安装的软件
/usr/share共享数据(文档、图标等)
/usr/includeC/C++ 头文件

/var

可变数据文件(Variable)。

bash
/var
├── cache/      # 应用程序缓存
├── lib/        # 程序状态数据
├── log/        # 日志文件
├── mail/       # 邮件
├── run/        # 运行时数据(链接到 /run)
├── spool/      # 队列数据
└── tmp/        # 持久临时文件

重要子目录

bash
# 日志文件
$ ls /var/log/
syslog        # 系统日志
auth.log      # 认证日志
kern.log      # 内核日志
apt/          # APT 日志
nginx/        # Nginx 日志

# 包管理器缓存
$ ls /var/cache/apt/
archives/     # 下载的 deb 包

文件类型

Linux 中一切皆文件。文件类型包括:

符号类型说明
-普通文件文本、二进制、图片等
d目录包含其他文件的容器
l符号链接指向另一个文件
b块设备硬盘、U盘等
c字符设备终端、键盘等
s套接字进程间通信
p管道FIFO,进程间通信

查看文件类型

bash
# 使用 ls -l,看第一个字符
$ ls -l
drwxr-xr-x 2 user user 4096 Jan 1 10:00 Documents    # 目录
-rw-r--r-- 1 user user  123 Jan 1 10:00 file.txt     # 普通文件
lrwxrwxrwx 1 user user    7 Jan 1 10:00 link -> file # 符号链接

# 使用 file 命令
$ file /bin/ls
/bin/ls: ELF 64-bit LSB pie executable...

$ file /etc/passwd
/etc/passwd: ASCII text

$ file /dev/sda
/dev/sda: block special

挂载文件系统

理解挂载

Linux 将不同的存储设备挂载到目录树的特定位置。

bash
# 查看已挂载的文件系统
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   15G   32G  32% /
/dev/sda2       200G   80G  110G  43% /home
/dev/sdb1       500G  100G  400G  20% /data

# 详细的挂载信息
$ mount
/dev/sda1 on / type ext4 (rw,relatime)
/dev/sda2 on /home type ext4 (rw,relatime)

/etc/fstab

定义系统启动时自动挂载的文件系统。

bash
$ cat /etc/fstab
# <设备>          <挂载点>  <类型>  <选项>        <dump> <pass>
/dev/sda1         /         ext4    defaults      0      1
/dev/sda2         /home     ext4    defaults      0      2
/dev/sdb1         /data     ext4    defaults      0      2
UUID=xxx          /boot     ext4    defaults      0      2

手动挂载

bash
# 挂载 U 盘
$ sudo mount /dev/sdb1 /mnt/usb

# 挂载 ISO 文件
$ sudo mount -o loop ubuntu.iso /mnt/iso

# 挂载网络共享
$ sudo mount -t nfs server:/share /mnt/nfs

# 卸载
$ sudo umount /mnt/usb

常见文件系统类型

类型说明
ext4Linux 默认文件系统,稳定可靠
xfs高性能,适合大文件
btrfs支持快照、压缩等高级功能
ntfsWindows 文件系统
fat32/vfat兼容性好,U盘常用
exfat大文件支持,跨平台
nfs网络文件系统
tmpfs内存文件系统

隐藏文件

以点(.)开头的文件或目录是隐藏的。

bash
# 查看隐藏文件
$ ls -a
.  ..  .bashrc  .profile  .config  Documents

# 常见隐藏文件
~/.bashrc        # Bash 配置
~/.profile       # 登录配置
~/.bash_history  # 命令历史
~/.ssh/          # SSH 配置和密钥
~/.config/       # 应用程序配置
~/.local/        # 用户本地数据

查找文件位置

which - 查找命令位置

bash
$ which ls
/usr/bin/ls

$ which python
/usr/bin/python

whereis - 查找命令、源码和手册

bash
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

type - 命令类型

bash
$ type ls
ls is aliased to `ls --color=auto'

$ type cd
cd is a shell builtin

$ type /usr/bin/ls
/usr/bin/ls is /usr/bin/ls

小结

理解 Linux 文件系统结构是使用 Linux 的基础:

  • 根目录 / 是整个文件系统的起点
  • /home 存放用户个人文件
  • /etc 存放系统配置
  • /var 存放可变数据(日志等)
  • /usr 存放用户程序
  • /tmp 存放临时文件
  • /dev/proc/sys 是特殊的虚拟文件系统

熟悉这些目录的用途,能够帮助你更好地管理和维护 Linux 系统。


上一章:终端基础

下一章:文件基本操作