取得已連接USB隨身碟的裝置名稱

取得已連接USB隨身碟的裝置名稱

我需要取得所有連接的 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 總線以及連接到它們的裝置的資訊。

相關內容