Menu Close

设备文件

设备文件包括系统的物理设备和虚拟设备,如硬盘、显卡、显示屏、键盘。虚拟设备的一个例子是控制台,用“/dev/console”来描述。

设备文件有两种类型。

  • 字符设备
    • 每次访问一个字符
    • 一个字符等于一个字节
    • 如键盘、串口…
  • 块设备
    • 通过更大的单元–块,进行访问
    • 一个块>一个字节
    • 如硬盘等…

你可以读写块设备文件,尽管该文件可能包含二进制数据,读取后显示出无法理解的乱码。向文件写入数据,有时可以帮助定位硬件连接故障。比如,你可以将文本文件导入打印机设备“/dev/lp0”,或者将调制解调命令发送到合适的串口“/dev/ttyS0”。但是,除非这些操作都小心完成,否则可能会导致一场大灾难。所以要特别小心。

常规访问打印机,使用lp(1)

设备的节点数可以通过执行ls(1)得到,如下所示。

$ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero
brw-rw---T  1 root disk     8,  0 Oct 16 20:57 /dev/sda
brw-rw---T+ 1 root cdrom   11,  0 Oct 16 21:53 /dev/sr0
crw-rw---T  1 root dialout  4, 64 Oct 16 20:57 /dev/ttyS0
crw-rw-rw-  1 root root     1,  5 Oct 16 20:57 /dev/zero
  • /dev/sda“的主设备号是8,次设备号是0。它可以被disk群组的用户读写。
  • /dev/sr0“的主设备号是11,次设备号是0。它可以被cdrom群组的用户读写。
  • /dev/ttyS0“的主设备号是4,次设备号是64。它可以被dailout群组的用户读写。
  • /dev/zero“的主设备号是1,次设备号是5。它可以被任意用户读写。

在现代Linux系统中,处在”/dev“之下的文件系统会自动被udev()机制填充。

特殊设备文件

还有一些特殊的设备文件。

表 1.10. 特殊设备文件列表

设备文件 操作 响应描述
/dev/null 读取 返回“文件结尾字符(EOF)“
/dev/null 写入 无返回(一个无底的数据转存深渊)
/dev/zero 读取 返回”\0空字符”(与ASCII中的数字0不同)
/dev/random 读取 从真随机数产生器返回一个随机字符,供应真熵(缓慢)
/dev/urandom 读取 从能够安全加密的伪随机数产生器返回一个随机字符
/dev/full 写入 返回磁盘已满(ENOSPC)错误

这些特别设备文件经常和shell数据重定向联合使用