Wie erhalte ich den Mount-Punkt des Flash-Laufwerks mithilfe von uuid?

7

Ich bin Anfänger in Ubuntu Linux und ich muss ein einfaches Bash-Skript schreiben, das das erforderliche Flash-Laufwerk (das nur eine vfat- Partition enthält) mithilfe der UUID dieser Partition identifizieren und den Mount-Punkt dieses Flash-Laufwerks ermitteln kann. Die / etc / fstab Die Datei enthält keine Mountig-Regel für dieses Laufwerk. Lassen Sie zum Beispiel die Partitions-UUID als 7DCD-9380. Mit dem Readlink-Tool kann ich einen Geräte-Link im / dev- Katalog erhalten:

teddy@st1:~$ readlink -f /dev/disk/by-uuid/7DCD-9380  
/dev/sdc1

Aber wie kann ich den Mount-Punkt des Geräts / dev / sdc1 ermitteln ?

teddypickerfromul
quelle
Sie können es montieren, wo immer Sie möchten, zum Beispiel am /mnt/flashdrive(nach mkdir /mnt/flashdrivenatürlich). Welchen spezifischen Montagepunkt suchen Sie?
Eduardo Ivanec

Antworten:

9

Was Sie suchen, ist findmnt. Zum Beispiel:

$ findmnt -rn -S UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

oder

$ findmnt -rn -S PARTUUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -o TARGET
/mnt/mountpoint

Wenn nichts mit dieser UUID gemountet ist, wird nichts ausgegeben und der Rückkehrcode ist 1 (Fehler), andernfalls wird der Mountpunkt ausgegeben und der Rückkehrcode ist 0 (Erfolg).

Erläuterung der Optionen

-r, --raw              use raw output format
-n, --noheadings       don't print column headings
-S, --source <string>  the device to mount (by name, maj:min, 
                         LABEL=, UUID=, PARTUUID=, PARTLABEL=)
-o, --output <list>    the output columns to be shown

Available columns:
      ...
      TARGET  mountpoint
      ...
lukejjh
quelle
2

mount weiß das.

Beispiel:

mount | grep /dev/sdc1

Oder (wahrscheinlich schneller):

grep '/dev/sdc1' /etc/mtab
Bart De Vos
quelle
2
Ah, ich hatte die Frage damals nicht verstanden. Sie können auch verwenden /etc/mtab.
Eduardo Ivanec
Wusste das nicht, fügte hinzu :-)
Bart De Vos
Vielen Dank für Ihren Rat. Ich hatte gehofft, einen einfacheren Weg zu finden, um den Pfad zum Katalog zu finden, in dem mein Flash bereitgestellt ist (ohne awk / sed zu verwenden), aber es scheint, dass es keinen so einfachen Weg gibt (wie das Abrufen der Partitionsverknüpfung im / dev-Katalog) mit ihm uuid) :)
teddypickerfromul
2

Die Mount-Tabelle des Kernels befindet sich bei /proc/mounts. Dies ist etwas zuverlässiger als /etc/mtab, da ein System- / Softwarefehler dazu führen kann, dass das mtabProdukt beschädigt oder nicht zum richtigen Zeitpunkt geschrieben wird.

jmtd
quelle
1
Systemfehler oder / wird montiert schreibgeschützt.
Dennis Nolte
2

Das tatsächliche Gerät blkidanhand der UUID zu finden, ist möglicherweise besser als Ihre readlinkLösung, die auf udev basiert.

myuuid="7DCD-9380"
mydev=$(blkid -l -o device -t UUID="$myuuid")

Um den Einhängepunkt für dieses Gerät zu erhalten, können Sie Folgendes verwenden:

grep $mydev /proc/mounts | cut -d' ' -f 2

oder

df -P | grep $mydev | awk '{print $6}'

Letzteres ist portabler, da / proc nur für Linux verfügbar ist. Die dfLösung mit der -POption (POSIX) sollte auch auf Mac und anderen Unix-Systemen funktionieren.

Natürlich würden beide brechen, wenn Ihr Einhängepunkt Leerzeichen enthält. Aber niemand montiert Sachen in "/ mnt / evil mount point /", oder?

Wenn Sie befürchten, dass Ihr Vorgänger genau das getan hat, können Sie Perl anstelle von awk verwenden:

df -P | grep $mydev | perl -pe 's/^(\S+\s+){5}//'

(Das Grep könnte auch von Perl gehandhabt werden, aber für einige ist es möglicherweise schwieriger zu lesen.)

Der Perl-Regex ersetzt 5 Gruppen von Nicht-Leerzeichen + Leerzeichen durch nichts und lässt nur den Rest der Zeile übrig. Welches ist der Einhängepunkt einschließlich aller möglichen Leerzeichen.

mivk
quelle