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/

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.


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.


danke, aber wie kann ich das in meinem for loopBeispiel verwenden?
Martin Vegter
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.