当我ls -l /dev
在 Ubuntu 上运行时,我得到如下输出:
$ ls -l /dev
total 0
crw-r--r-- 1 root root 10, 235 Aug 24 16:36 autofs
drwxr-xr-x 2 root root 340 Aug 24 16:40 block
crw------- 1 root root 10, 234 Aug 24 16:36 btrfs-control
drwxr-xr-x 2 root root 2660 Aug 24 16:37 char
第 5列10, 235
显示主设备号和次设备号,指定使用哪个设备驱动程序来管理文件。
当我在 macOS 上运行相同的命令时,我得到以下输出:
% ls -l /dev
total 1
crw-rw-rw- 1 root wheel 0x16000000 14 Aug 22:16 aes_0
crw------- 1 root wheel 0x15000001 14 Aug 22:16 afsc_type5
brw------- 1 root operator 0x2000000 24 Aug 19:39 apfs-raw-device.2.0
crw------- 1 root wheel 0xb000001 14 Aug 22:16 auditpipe
我得到的不是主/次编号,而是一个十六进制数。我的问题是 -这些十六进制数代表什么?
我尝试/研究过什么
不同的文件共享相同的十六进制数。所以它似乎不代表主/次编号,因为据我所知,该组合应该是唯一的?
brw-r----- 1 root operator 0x1000001 14 Aug 22:16 disk0s1 crw-r----- 1 root operator 0x1000001 14 Aug 22:16 rdisk0s1
ChatGPT 试图说服我,十六进制数是主数和次数的打包格式,但对于如何解释它却不太清楚。如果我将 32 位分成两半,将前 16 位解释为主数,将后 16 位解释为次数,则主数似乎异常大(例如
0x1d000000
给出7424
为主数)。coreutils
在我的 Mac 上安装该包并使用ls
后,我得到了熟悉的主/次要对。$ /opt/homebrew/Cellar/coreutils/9.5/libexec/gnubin/ls -l /dev total 1 crw-rw-rw- 1 root wheel 22, 0 Aug 14 22:16 aes_0 crw------- 1 root wheel 21, 1 Aug 14 22:16 afsc_type5 brw------- 1 root operator 2, 0 Aug 24 21:02 apfs-raw-device.2.0 crw------- 1 root wheel 11, 1 Aug 14 22:16 auditpipe ... brw-r----- 1 root operator 1, 1 Aug 14 22:16 disk0s1 ... crw-r----- 1 root operator 1, 1 Aug 14 22:16 rdisk0s1