文件系统结构
概述
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 → 可变数据文件重要目录详解
/ (根目录)
根目录是文件系统的起点,所有目录和文件都是它的子孙。
$ ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr/bin 和 /sbin
存放基本命令的二进制文件。
# /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 所需的文件。
$ ls /boot
config-5.15.0-generic # 内核配置
initrd.img-5.15.0-generic # 初始内存盘
vmlinuz-5.15.0-generic # 压缩的 Linux 内核
grub/ # GRUB 引导程序/dev
设备文件目录。Linux 将硬件设备表示为文件。
$ 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)。
$ 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.conf | DNS 服务器配置 |
/etc/crontab | 系统定时任务 |
/home
普通用户的家目录。
/home
├── maxwell/
│ ├── Desktop/
│ ├── Documents/
│ ├── Downloads/
│ ├── .bashrc # 用户 Bash 配置
│ ├── .profile # 登录配置
│ └── .ssh/ # SSH 密钥
├── alice/
└── bob/每个用户在 /home 下有自己的目录,用于存放个人文件和配置。
# 家目录可用 ~ 表示
$ cd ~
$ cd ~/Documents/lib 和 /lib64
共享库文件(类似 Windows 的 DLL)。
$ ls /lib
modules/ # 内核模块
x86_64-linux-gnu/ # 64位库文件/media 和 /mnt
挂载点目录。
/media:自动挂载的可移动设备(U盘、光盘)/mnt:临时手动挂载点
# 查看挂载的设备
$ ls /media/$USER/
USB_DRIVE/ CD_ROM/
# 手动挂载
$ sudo mount /dev/sdb1 /mnt/opt
第三方应用程序安装目录。
/opt
├── google/
│ └── chrome/
├── visual-studio-code/
└── lampp//proc
虚拟文件系统,提供进程和内核信息。
$ ls /proc
1/ # PID 为 1 的进程信息
self/ # 当前进程
cpuinfo # CPU 信息
meminfo # 内存信息
version # 内核版本常用文件
# 查看 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 用户(超级用户)的家目录。
# 注意:不是 /home/root
$ sudo ls /root/run
运行时数据目录,存储系统启动以来的临时数据。
$ ls /run
lock/ # 锁文件
user/ # 用户运行时数据
systemd/ # systemd 数据/srv
服务数据目录,存储系统提供的服务数据。
/srv
├── ftp/ # FTP 服务数据
├── http/ # Web 服务数据
└── git/ # Git 仓库/sys
虚拟文件系统,提供内核、设备和驱动信息。
$ ls /sys
block/ # 块设备
bus/ # 总线
class/ # 设备类别
devices/ # 设备
power/ # 电源管理/tmp
临时文件目录。系统重启后内容可能被清空。
$ ls /tmp
systemd-private-xxx/- 所有用户都可以写入
- 通常配置为定期清理
- 适合存放临时数据
/usr
用户程序和数据(Unix System Resources)。
/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/include | C/C++ 头文件 |
/var
可变数据文件(Variable)。
/var
├── cache/ # 应用程序缓存
├── lib/ # 程序状态数据
├── log/ # 日志文件
├── mail/ # 邮件
├── run/ # 运行时数据(链接到 /run)
├── spool/ # 队列数据
└── tmp/ # 持久临时文件重要子目录
# 日志文件
$ 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,进程间通信 |
查看文件类型
# 使用 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 将不同的存储设备挂载到目录树的特定位置。
# 查看已挂载的文件系统
$ 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
定义系统启动时自动挂载的文件系统。
$ 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手动挂载
# 挂载 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常见文件系统类型
| 类型 | 说明 |
|---|---|
| ext4 | Linux 默认文件系统,稳定可靠 |
| xfs | 高性能,适合大文件 |
| btrfs | 支持快照、压缩等高级功能 |
| ntfs | Windows 文件系统 |
| fat32/vfat | 兼容性好,U盘常用 |
| exfat | 大文件支持,跨平台 |
| nfs | 网络文件系统 |
| tmpfs | 内存文件系统 |
隐藏文件
以点(.)开头的文件或目录是隐藏的。
# 查看隐藏文件
$ ls -a
. .. .bashrc .profile .config Documents
# 常见隐藏文件
~/.bashrc # Bash 配置
~/.profile # 登录配置
~/.bash_history # 命令历史
~/.ssh/ # SSH 配置和密钥
~/.config/ # 应用程序配置
~/.local/ # 用户本地数据查找文件位置
which - 查找命令位置
$ which ls
/usr/bin/ls
$ which python
/usr/bin/pythonwhereis - 查找命令、源码和手册
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gztype - 命令类型
$ 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 系统。
上一章:终端基础
下一章:文件基本操作