我知道/dev
目录存储设备文件,但是/dev
目录是唯一可以存储设备文件的地方,还是只是约定将设备文件存储在目录中/dev
?
答案1
这只是惯例。事实上,在chroot
环境或容器(例如docker)中,设备条目可能存在于其他地方。
使设备条目成为设备条目的因素是类型条目,而不是名称
因此,例如:
% ls -ld /dev/vda
brw-rw---- 1 root disk 253, 0 May 26 07:00 /dev/vda
第一个“b”表示这是一个块设备。 “253”是主设备号,“0”是次设备号。在这种情况下
% grep virt /proc/devices
253 virtblk
因此主设备253与虚拟块层相关。
您会注意到名称“vda”在这里并不重要!
我确实可以
sudo mknod /tmp/foo b 253 0
现在/tmp/foo
将访问完全相同的数据:
% sudo dd if=/dev/vda bs=256b count=1 | sum
....
40545 128
% sudo dd if=/tmp/foo bs=256b count=1 | sum
....
40545 128
通用名称对于人类和配置文件很重要(例如,/dev/tty1
是 Linux 计算机上第一个虚拟控制台的通用名称;/dev/ttyS0
是第一个串行端口的通用名称),但它是类型(块/字符)和主/次编号这使它起作用。