我遇到了这种我无法解释的行为。在 sysfs 中,有一个符号链接,但对我来说似乎不可能:
me@test:/sys/block/sde$ ll
...
lrwxrwxrwx 1 root root 0 Oct 1 2019 device -> ../../../8:0:0:0
...
me@test:/sys/block/sde$ cd ../../../8:0:0:0
me@test:/sys/devices/pci0000:00/0000:00:17.0/usb2/2-1/2-1:1.3/host8/target8:0:0/8:0:0:0$
但显然三级可以让我到达根文件夹,那么这是怎么发生的呢?
me@test:/sys/block/sde$ cd ../../../
me@test:/$
答案1
有同样的问题。符号链接 to/sys/block/sda/device
是相对于的,/sys/devices
因为/sys/block/sda
它本身就是一个符号链接。例子:
连接到 USB 的 SATA 驱动器 -> SATA 适配器
# ls -l /sys/block/sda
/sys/block/sda -> ../devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/
# readlink /sys/block/sda/device
../../../0:0:0:0
# readlink -e /sys/block/sda/device
/sys/devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/0:0:0:0
/sys/block/sda
是 中该设备的符号链接/sys/devices
,因此当您应用../../..../
该完整路径时,它会将您带到/sys/devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/
,其中是符号链接0:0:0:0
后缀引用的目录/sys/block/sda/device
。
旁注:/sys/devices
源自该设备的 UDEV 路径,可以通过以下方式获取udevadm
:
# udevadm info --query=path /sys/block/sda
/devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/0:0:0:0/block/sda
另一个示例,这次是连接到平面(主板)NVMe 端口的 NVME 驱动器:
# ls -l /sys/block/nv*
/sys/block/nvme0n1 -> ../devices/pci0000:00/0000:00:02.1/0000:01:00.0/nvme/nvme0/nvme0n1/
# readlink /sys/block/nvme0n1/device
../../nvme0
# readlink -e /sys/block/nvme0n1/device
/sys/devices/pci0000:00/0000:00:02.1/0000:01:00.0/nvme/nvme0
# udevadm info --query=path /sys/block/nvme0n1
/devices/pci0000:00/0000:00:02.1/0000:01:00.0/nvme/nvme0/nvme0n1