Ich muss die Gerätenamen aller angeschlossenen USB-Festplatten abrufen (d. h. sdd
).
Ich habe 3 USB-Festplatten und 2 SATA-Festplatten angeschlossen:
$ 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 ls
Folgendes eingeben 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 alle USB-Festplatten durchlaufen und kenne den genauen Pfad nicht im Voraus, also 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 eine USB-Festplatte eingesteckt ist. Wenn zwei oder mehr Festplatten eingesteckt sind, erhalte ich sdd
auch den /sys
Pfad, den ich nicht haben möchte, nämlich:
/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 über iterieren sdd
sde
sdc
?
Ich suche nach einer Lösung, die keine udev
Infrastruktur nutzt, d.h./dev/disk/by-path/
Antwort1
Sie können es mit einem Befehl tun lsblk
.
lsblk -l -o name,tran
gibt
NAME TRAN
sda sata
sda1
sdb usb
sdc usb
sr0 sata
-l
steht für das Format „Liste“, sodass es einfacher zu analysieren ist. Andernfalls würden Sie ein Baumformat wie dieses erhalten:
NAME TRAN
sda sata
└─sda1
sdb usb
sr0 sata
Durch die Angabe anderer Flags erhalten Sie weitere Informationen wie FSTYPE, LABEL, UUID, MOUNTPOINT und viele andere. Führen Sie es einfach aus, lsblk --help
um alle Optionen anzuzeigen.
Möglicherweise möchten Sie --paths --noheadings --scsi
Flags verwenden, um eine Ausgabe wie diese auszudrucken:
sata /dev/sda
usb /dev/sdb
usb /dev/sdc
sata /dev/sr0
und dann grep
über den Eingang, um die Zeilen mit „usb“ am Zeilenanfang herauszufiltern.
Antwort2
Hier lsusb
werden die Namen der über den USB-Bus angeschlossenen Geräte angezeigt.
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 auchMann lsusb
Beschreibung
lsusb ist ein Dienstprogramm zum Anzeigen von Informationen über USB-Busse im System und die daran angeschlossenen Geräte.