在linux中知道一个设备特殊文件主要和次要的数字

/dev中的所有文件都是特殊文件…它们代表计算机的设备。 他们是用mknod系统调用创build的。 我的问题是:如何知道用于创build这个特殊文件的小数字和主数字?

该列表被称为LANANA Linux设备列表 ,由Alan Cox管理。

您可以在线查找最新的副本 ( 直接链接 ),也可以在Linux源代码中找到。 它在内核树中的Documentation/devices.txt名是Documentation/devices.txt

要查看在/dev (或任何设备节点)中创建节点的主要和次要数字,只需使用ls-l选项即可:

 22:26 jsmith@undertow% ls -l /dev/xvd? brw-rw---- 1 root disk 202, 0 Nov 1 20:31 /dev/xvda brw-rw---- 1 root disk 202, 16 Nov 1 20:31 /dev/xvdb brw-rw---- 1 root disk 202, 32 Nov 1 20:31 /dev/xvdc 

在这个例子中, 202是三个设备的主号码,0,16和32是未成年人。 左边的b表示该节点是块设备。 替代方案是c ,一个字符设备:

 crw-rw-rw- 1 root tty 5, 0 Nov 22 00:29 /dev/tty 
 $ ls -l / dev / fd0 / dev / null
 brw-rw ---- 1根软盘2,0 11月22日19:48 / dev / fd0
 crw-rw-rw- 1 root root 1,3 Nov 22 19:48 / dev / null
 $ stat -c'%n:%F,major%t minor%T'/ dev / fd0 / dev / null
 / dev / fd0:块专用文件,major 2 minor 0
 / dev / null:字符特殊文件,major 1 minor 3

大多数设备编号是固定的(即/dev/null将始终是字符设备1:3 ),但在Linux上,一些是动态分配的。

 $ cat / proc / devices
字符设备:
 ...
  10其他
 ...

块设备:
 ...
 253 mdp
 254设备映射器
 $ cat / proc / misc
 ...
  57设备映射器
 ...

例如,在这个系统上, /dev/mapper/control将会是c:10:57而其余的/dev/mapper/*将会是b:254:* ,这可能与一个boot循环到另一个模块 – 甚至模块被加载/卸载,设备被添加/删除。

您可以在/sys进一步探索这些设备注册。

 $ readlink / sys / dev / block / 2:0
 ../../devices/platform/floppy.0/block/fd0
 $ cat /sys/devices/platform/floppy.0/block/fd0/dev
 2:0
 $ readlink / sys / dev / char / 1:3
 ../../devices/virtual/mem/null
 $ cat / sys / devices / virtual / mem / null / dev
 1:3

你也可以使用stat。

 $ stat -c 'major: %t minor: %T' <file> 

特别是对于块设备:

 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 90G 0 disk ├─sda1 8:1 0 4G 0 part [SWAP] ├─sda2 8:2 0 4G 0 part / 

替代方案不依赖于stat

 $ cat /sys/class/*/random/dev 1:8