设备文件包括系统的物理设备和虚拟设备,如硬盘、显卡、显示屏、键盘。虚拟设备的一个例子是控制台,用“/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数据重定向联合使用