我需要获取所有连接的 USB 磁盘的设备名称(即sdd
)。
我插入了 3 个 USB 磁盘和 2 个 SATA 磁盘:
$ find /sys/devices/ -name block
/sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block
/sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block
/sys/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block
我想忽略 SATA 磁盘,但我需要列出所有 USB 磁盘。
在终端中,我可以使用它ls
,它会给我sdd
:
$ ls /sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block
sdd
但我需要在脚本中使用它。我需要迭代所有USB磁盘,并且我事先不知道确切的路径,所以我必须使用通配符(*
或?
):
for DISK in $(ls /sys/devices/pci0000:00/0000:00:14.0/usb?/*/*:1.0/host?/target?:0:0/?:0:0:0/block) ; do
echo /dev/$DISK
done
以上仅在插入一个 USB 磁盘时才有效。如果插入两个或更多磁盘,我也会得到sdd
我/sys
不想要的路径,即:
/dev//sys/devices/pci0000:00/0000:00:14.0/usb3/3-7/3-7:1.0/host5/target5:0:0/5:0:0:0/block:
/dev/sdd
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host6/target6:0:0/6:0:0:0/block:
/dev/sde
/dev//sys/devices/pci0000:00/0000:00:14.0/usb4/4-5/4-5:1.0/host4/target4:0:0/4:0:0:0/block:
/dev/sdc
我怎样才能只迭代一遍sdd
sde
sdc
?
我正在寻找一种不使用udev
基础设施的解决方案,即/dev/disk/by-path/
答案1
您可以使用lsblk
命令来完成此操作。
lsblk -l -o name,tran
给出
NAME TRAN
sda sata
sda1
sdb usb
sdc usb
sr0 sata
-l
代表“列表”格式,因此更容易解析。否则,您将得到如下的树格式:
NAME TRAN
sda sata
└─sda1
sdb usb
sr0 sata
指定其他标志将为您提供更多信息,例如 FSTYPE、LABEL、UUID、MOUNTPOINT 等,只需运行lsblk --help
即可查看所有选项。
您可能想使用--paths --noheadings --scsi
标志来打印输出,如下所示:
sata /dev/sda
usb /dev/sdb
usb /dev/sdc
sata /dev/sr0
然后grep
通过输入过滤掉那些在行开头带有 usb 的行。
答案2
执行lsusb
,它给出通过 USB 总线连接的设备的名称。
如:
$ lsusb
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:0802 Nokia Mobile Phones CA-42 Phone Parent
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
也可以看看人 lsusb
描述
lsusb 是一个实用程序,用于显示有关系统中 USB 总线以及连接到它们的设备的信息。