/dev目录本质是内核设备驱动的入口节点,通过主/次设备号唯一标识硬件,由udev动态管理设备文件,支持open/read/write等标准操作访问字符设备(c)和块设备(b)。

Linux 通过 /dev 目录管理硬件设备,本质是把硬件抽象成可读写的特殊文件,用户空间程序用标准文件操作(open()、read()、write()、ioctl())与设备交互。它不是简单“放设备文件的地方”,而是一套动态、分层、有权限控制的硬件访问机制。
/dev 是怎么和真实硬件挂钩的
- 设备文件本身不存数据,只是内核设备驱动的入口节点
- 每个设备文件由主设备号(major)和次设备号(minor)唯一标识,内核靠这两个号找到对应驱动和具体设备实例
- 类型靠文件首字符区分:
b表示块设备(如/dev/sda),c表示字符设备(如/dev/ttyS0),l是软链接(如/dev/cdrom → /dev/sr0) - 真实设备插入时,
udev守护进程监听内核uevent,自动创建或删除/dev下的节点,不再依赖手动mknod
常见设备识别与查看方法
- 查看所有设备节点:
ls /dev(数量多,适合快速浏览) - 查看块设备结构(含分区):
lsblk(清晰显示磁盘→分区→挂载点关系) - 查看详细设备信息:
lshw -class disk或lspci(PCI设备)、lsusb(USB设备) - 查看设备类型与编号:
ls -l /dev/sd* /dev/tty*(注意第一列b/c和第5–6字段的8,0这类数字)
设备使用的关键操作流程
-
存储类设备(块设备)需先挂载才能访问文件系统
- 创建挂载点:
sudo mkdir -p /mnt/mydisk - 挂载分区:
sudo mount /dev/sdb1 /mnt/mydisk - 卸载:
sudo umount /mnt/mydisk - 永久挂载:在
/etc/fstab中添加一行,例如:/dev/disk/by-uuid/abcd... /mnt/mydisk ext4 defaults 0 2
(推荐用UUID或/dev/disk/by-id/路径,避免因插拔顺序变化导致/dev/sdb变成/dev/sdc)
- 创建挂载点:
-
字符设备通常直连驱动,无需挂载
- 读串口数据:
sudo cat /dev/ttyS0(需先配置波特率等,常用stty或screen) - 清空输出到空设备:
echo "test" > /dev/null - 生成随机字节流:
head -c 100 /dev/urandom > file.bin
- 读串口数据:
权限与安全控制要点
- 默认多数设备归
root或特定组(如disk、dialout、input)所有 - 普通用户要访问串口,需加入
dialout组:sudo usermod -aG dialout $USER - 访问 USB 设备(如
/dev/ttyACM0)常需uucp或plugdev组 - 自定义规则可写入
/etc/udev/rules.d/99-mydevice.rules,例如:SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", MODE="0666", GROUP="dialout"
(保存后运行sudo udevadm control --reload-rules && sudo udevadm trigger生效)
不复杂但容易忽略











