/dev 是Linux中设备文件目录,将硬件和虚拟设备抽象为可读写文件,通过设备节点(b块设备/c字符设备)提供内核驱动访问入口,由udev动态管理,无需手动创建。

/dev 目录不是存数据的地方,而是系统与硬件(或虚拟功能)对话的“前台窗口”。它把键盘、硬盘、串口、随机数生成器这些五花八门的设备,统一变成一个个可读可写的“文件”,让程序不用懂电路,只用 open()、read()、write() 就能操作硬件。
/dev 里的文件不是普通文件
它们是内核创建的设备节点,没有实际存储内容,本质是访问驱动程序的入口。
- 类型靠
ls -l第一个字符区分:b是块设备(如/dev/sda),c是字符设备(如/dev/ttyS0); - 后面两列数字是主设备号(标识驱动类型)和次设备号(标识具体设备实例),比如
4 64表示第 4 号驱动下的第 64 个串口; - 权限控制谁可以读写,例如
/dev/sr0(光驱)默认只允许 root 挂载,普通用户需加组或改权限。
块设备和字符设备的区别很实在
-
块设备(
b):按固定大小的数据块(如 512 字节或 4KB)读写,支持随机访问、缓存、挂载为文件系统。- 典型例子:
/dev/sda(整块硬盘)、/dev/sda1(分区)、/dev/loop0(镜像挂载用); - 查看方式:
lsblk或fdisk -l更直观反映层级关系。
- 典型例子:
-
字符设备(
c):逐字节流式传输,不缓存,适合实时交互类设备。- 典型例子:
/dev/tty1(虚拟终端)、/dev/ttyS0(物理串口)、/dev/input/event0(鼠标键盘事件); - 特殊伪设备也属此类:
/dev/null(丢弃所有写入)、/dev/zero(无限输出\0)、/dev/random(阻塞式真随机数)。
- 典型例子:
设备文件怎么来的?基本不用手动管
现代 Linux 使用 udev 在用户空间动态管理:
- 内核检测到新硬件(如插 U 盘),通过
sysfs通知udev; -
udev根据规则自动生成/dev/sdb、/dev/sdb1等节点,并设置权限、软链接(如/dev/cdrom → /dev/sr0); - 所以你看到的
/dev是“活”的——拔掉设备,对应文件通常会消失;重启后重新生成,顺序稳定(靠固件 ID 或序列号,不再依赖探测顺序)。
遇到没自动创建的设备?极少数情况才需干预
比如调试旧硬件或 udev 规则未覆盖时,可用 mknod 手动建节点(需 root):
mknod /dev/mydevice c 240 0 # 创建主号 240、次号 0 的字符设备 chmod 600 /dev/mydevice
但绝大多数场景下,直接 ls /dev 就能看到系统已准备好的接口,无需额外操作。
不复杂但容易忽略。


















