Rufen Sie den Gerätenamen des angeschlossenen USB-Laufwerks ab

7

Ich muss die Gerätenamen aller angeschlossenen USB-Festplatten (dh sdd) abrufen .

Ich habe 3 USB-Festplatten angeschlossen und 2 SATA-Festplatten:

$ 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

Ich möchte die SATA-Festplatten ignorieren, muss aber alle USB-Festplatten auflisten.

Im Terminal kann ich uns lsund es wird mir geben 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

Aber ich muss dies in einem Skript verwenden. Ich muss über alle USB-Festplatten iterieren, und ich kenne den genauen Pfad nicht im Voraus, daher muss ich Platzhalter ( *oder ?) verwenden:

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

Das obige funktioniert nur, wenn ein USB-Laufwerk angeschlossen ist. Wenn zwei oder mehr Festplatten angeschlossen sind, erhalte ich sddebenso den /sysPfad, den ich nicht möchte, dh:

/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

Wie kann ich nur wiederholen sdd sde sdc?

Ich suche nach einer Lösung, die keine udevInfrastruktur nutzt , dh/dev/disk/by-path/

Martin Vegter
quelle

Antworten:

8

Sie können es mit lsblkBefehl tun .

lsblk -l -o name,tran gibt

NAME TRAN
sda  sata
sda1 
sdb  usb
sdc  usb
sr0  sata

-lsteht für "Listen" -Format, daher ist das Parsen einfacher. Andernfalls erhalten Sie ein Baumformat wie das folgende:

NAME   TRAN
sda    sata
└─sda1
sdb    usb
sr0    sata

Wenn Sie andere Flags angeben, erhalten Sie weitere Informationen wie FSTYPE, LABEL, UUID, MOUNTPOINT und viele andere. Führen Sie einfach lsblk --helpalle Optionen aus.

Möglicherweise möchten Sie --paths --noheadings --scsiFlags verwenden, um die Ausgabe wie folgt drucken zu lassen:

sata   /dev/sda
usb    /dev/sdb
usb    /dev/sdc
sata   /dev/sr0

und dann grepüber den Eingang, um diese Zeilen mit USB am Anfang der Zeile herauszufiltern.

Styroporfliege
quelle
4

Do lsusbgibt den Namen der Geräte an, die über den USB-Bus angeschlossen sind.

Wie in:

$ 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

Siehe auch man lsusb

Beschreibung

lsusb ist ein Dienstprogramm zum Anzeigen von Informationen zu USB-Bussen im System und den daran angeschlossenen Geräten.

Rui F Ribeiro
quelle
danke, aber wie kann ich das in meinem for loopBeispiel verwenden?
Martin Vegter