Linux 通过称为设备节点的特殊文件系统对象公开许多内核设备接口。它们通常出现在 /dev 下,同一目录中还有实用的符号链接和通信端点。打开设备节点会让应用程序连接到内核驱动程序,而不是读取普通文件中存储的字节。
设备 · 第 1 课
/dev 目录
学习 Linux 如何通过 `/dev` 下的节点公开设备接口和伪设备。
探索 `/dev`
列出目录,但不要解引用或读取设备:
$ ls -l /dev
其中的条目可以代表物理存储、终端、输入接口、逻辑设备或内核提供的伪设备。并非每个硬件组件都需要自己的用户可见节点,同一个设备也可能通过多个链接或接口表示。
长列表的第一个字符表示文件系统对象类型。字符设备节点和块设备节点分别显示为 c 和 b;后续课程会介绍这些类型及其主设备号和次设备号。
程序打开 /dev 下的设备节点时会发生什么?
伪设备
有些节点提供内核服务,但不对应物理硬件。/dev/null 会接收并丢弃写入的数据:
$ command > /dev/null
其他常见示例包括产生零字节的 /dev/zero,以及通过内核随机数子系统提供随机字节的 /dev/urandom。每个伪设备都有特定语义;不要只根据文件名推断其行为。
/dev/null 如何处理写入其中的数据?
动态设备管理
在现代 Linux 系统上,内核支持的 devtmpfs 可以随着设备出现而填充基本设备节点。像 udev 这样的用户空间设备管理器会处理事件、应用权限和所有权,并创建实用的符号链接或由策略决定的名称。具体职责因系统而异。
在配置中,/dev/disk/by-id/ 或 /dev/disk/by-uuid/ 下的稳定链接可能比 /dev/sda 这样的探测顺序名称更安全;硬件拓扑或发现顺序变化时,后者可能改变。
为什么管理员可能更愿意在配置中使用 /dev/disk/by-id/... 而不是 /dev/sda?
安全交互
标准工具可以打开设备节点,但这并不意味着任意读写都是安全的。读取可能暴露敏感输入或存储内容;写入磁盘、终端或固件接口则可能破坏数据或干扰用户。设备节点权限、组、ACL、能力和服务中介正是为此限制访问。
应先使用只读发现工具,确认确切节点和设备身份,并遵循该设备的专门文档。绝不要在重要系统上通过向陌生的 /dev 条目重定向数据来进行实验。
为什么应避免向陌生设备节点写入任意数据?
可通过在 Linux 中探索硬件设备,在受控环境中进行只读检查。
课程已完成
你已完成 /dev 目录
现在,你可以将 /dev 描述为一组面向内核的实时接口。
区分设备节点与普通文件。
识别
/dev/null等伪设备。理解动态节点和持久链接与设备管理的关系。
将直接设备访问视为与接口相关且可能具有破坏性的操作。