文件系统
一、Linux 文件系统视角
应用层 open / read / write / close / lseek / stat ...
↓ VFS (Virtual File System)
↓
具体文件系统:ext4 / vfat / proc / sysfs / tmpfs / nfs ...
↓
通用块设备层 / 网络层
↓
驱动 + 硬件
二、关键概念
1. 一切皆文件
- 普通文件、目录、socket、管道、设备、链接 → 都是 file descriptor
/dev/null、/dev/zero、/dev/random、/dev/ttyX都是设备/proc/<pid>/、/sys/是虚拟文件系统
2. 文件描述符(fd)
- 进程打开文件后获得的小整数
- 0 = stdin,1 = stdout,2 = stderr
- 由
dup/dup2/fcntl复制
3. Inode
- 文件元数据(大小、权限、时间、块位置)
- 不含文件名(文件名在目录项中)
ls -i查看 inode 号stat file查看 inode 信息
4. 链接
- 硬链接:同一 inode,多个文件名
- 软链接(符号链接):文件名指向另一路径(独立 inode)
三、重要目录
/ 根
/bin 基础命令
/sbin 系统管理命令
/etc 配置
/home 用户家目录
/root root 家目录
/lib, /lib64 库
/usr 用户程序
/usr/local 本地安装
/opt 可选应用
/var 变化的数据(日志、缓存)
/tmp 临时
/dev 设备
/proc 进程 / 内核信息
/sys 内核对象(设备树运行时)
/mnt, /media 挂载点
/boot 启动文件
四、挂载
mount /dev/mmcblk0p1 /mnt
mount -t vfat /dev/sda1 /mnt/usb
mount -t nfs 192.168.1.10:/share /mnt/nfs
mount -t tmpfs tmpfs /tmp -o size=64M
mount -o remount,ro / # 重新挂载为只读
umount /mnt
查看:cat /proc/mounts 或 mount 或 findmnt
五、嵌入式常用文件系统
| FS | 特点 | 场景 |
|---|---|---|
| ext4 | Linux 主力 | 通用 |
| vfat | FAT32,Windows 兼容 | U盘、SD卡 |
| tmpfs | 内存 | /tmp, /run |
| procfs | 进程信息 | /proc |
| sysfs | 内核对象 | /sys |
| devtmpfs | 设备节点 | /dev |
| squashfs | 压缩只读 | rootfs |
| jffs2 / ubifs | 闪存专用 | NAND |
| nfs | 网络 | 开发调试 |
| cramfs | 压缩只读(旧) | |
| overlayfs | 联合挂载 | Docker / OTA |
六、文件权限
-rwxr-xr-- 1 user group 4096 Jul 20 12:00 file
↑ │ │ │ │ │ │
│ │ │ │ │ │ └─ 大小
│ │ │ │ │ └─ 所有者
│ └─┴─┴─┴─ 所有者/组/其他 rwx
└─ 类型(- 普通,d 目录,l 链接,c/b 设备,p 管道,s socket)
特殊位:
- setuid (4):执行时继承文件所有者权限
- setgid (2):同上,组
- sticky (1):目录中只能删自己的文件(如 /tmp)
七、procfs 与 sysfs
1. /proc 重点
/proc/cpuinfo CPU 信息
/proc/meminfo 内存
/proc/loadavg 负载
/proc/uptime 运行时间
/proc/<pid>/ 进程信息
cmdline 命令行
status 进程状态
fd/ 打开的文件描述符
maps 内存映射
stat 调度信息
io IO 统计
/proc/interrupts 中断统计
/proc/devices 已注册字符/块设备
/proc/filesystems 支持的文件系统
/proc/partitions 磁盘分区
/proc/version 内核版本
2. /sys 重点
/sys/class/net/ 网络接口
/sys/class/gpio/ GPIO(已废弃,新 API 在 /dev/gpiochipX)
/sys/block/ 块设备
/sys/bus/ 总线
/sys/devices/ 设备
/sys/kernel/ 内核参数