为什么 unix 无法枚举 /sys 下面的所有内容?

为什么 unix 无法枚举 /sys 下面的所有内容?

我想找到 /sys/devices 下具有重新扫描选项/文件的每个设备(以便我可以动态调整磁盘大小),但 UNIX find 似乎找不到它们。例如:

# file /sys/class/block/sda/device/rescan
/sys/class/block/sda/device/rescan: writable, regular file, no read permission

但:

# find /sys/class/block -name 'rescan'

空手而归。

此外,find 仅查找父设备,即

# find /sys/class/block 
/sys/class/block
/sys/class/block/fd0
/sys/class/block/sda
/sys/class/block/sr0
/sys/class/block/dm-0
/sys/class/block/dm-1
/sys/class/block/dm-2
/sys/class/block/sda1
/sys/class/block/sda2
/sys/class/block/sda3

当这些设备下实际上有很多选项/文件时(如果您知道在哪里查找),例如:

# ls -1 /sys/class/block/sda/device/
block
bsg
delete
device_blocked
device_busy
dh_state
driver
eh_timeout
evt_capacity_change_reported
evt_inquiry_change_reported
evt_lun_change_reported
evt_media_change
evt_mode_parameter_change_reported
evt_soft_threshold_reached
generic
inquiry
iocounterbits
iodone_cnt
ioerr_cnt
iorequest_cnt
modalias
model
power
queue_depth
queue_ramp_up_period
queue_type
rescan
rev
scsi_device
scsi_disk
scsi_generic
scsi_level
state
subsystem
timeout
type
uevent
unpriv_sgio
vendor
vpd_pg80
vpd_pg83
wwid

提前致谢,

帕特里克

答案1

下面的内容/系统包含许多符号链接,例如父设备你想搜索/系统/类/块.
find默认情况下不遵循符号链接,这意味着find不会在符号链接的目录中搜索。

可以使用 开关改变此行为,-L使其find遵循符号链接。
由于/系统以及此目录结构中的许多符号链接,find将检测文件系统循环并在命令行上报告stderr。要过滤掉这些消息,您可以find按如下方式运行命令。

find -L /sys/class/block -name 'rescan' 2> /dev/null

相关内容