Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe
allgemeine Kategorie => Allgemeine Diskussionen => Thema von: Sebastian am 08. Januar 2023, 18:54:43

Titel: findtmnt - der bessere weg um Dateisysteme zu finden
Beitrag von: Sebastian am 08. Januar 2023, 18:54:43

Viele alte Linux Hasen kennen den Befehl mount.

Dieser wird häufig nicht nur zum mounten von Dateisystemen verwendet, sondern auch oft, um eine Auflistung der momentan gemounteten Dateisysteme zu bekommen. Diese Auflistung wird dann auch häufig noch mit grep gefiltert. Dabei wissen bestimmt viele nicht, dass mount die Auflistung der gemounteten Dateisysteme nur aus Kompatibilitätsgründen noch auflistet:

MOUNT(8) (https://man.archlinux.org/man/mount.8)
Zitat:
...
Listing the mounts
The listing mode is maintained for backward compatibility only.

For more robust and customizable output use findmnt(8), especially in your scripts. Note that control characters in the mountpoint name are replaced with
'?'.
...



Diesen Job übernimmt heutzutage das viel besseres Tool, um Dateisysteme ausfindig zu machen findmnt.

Es listet zum einen die eingehängten Dateisysteme viel besser lesbar in einer Baumstruktur auf, und zum anderen bietet es gleich Filter Funktionen um bestimmte Dateisysteme zu suchen gleich mit an, so das ein grep damit überflüssig wird.

Es folgen ein paar Beispiele. Zum besseren Verständnis verwende ich die langen Optionen, diese sind häufig auch nur Optional anzugeben die genaue Syntax entnimmt bitte dem Handbuch FINDMNT(8) (https://man.archlinux.org/man/findmnt.8):

Zeigt die Gerätedatei an, dass unter / eingehängt ist:

Code:

$ findmnt --target /
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mapper/vg0-lvroot ext4 rw,noatime


Umgekehrt, unter welchem Verzeichnis das Dateisystem eingehängt wurde:


Code:

$ findmnt --source /dev/mapper/vg0-lvroot
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mapper/vg0-lvroot ext4 rw,noatime


Listet nur Read Only Dateisysteme auf:


Code:

$ findmnt --options ro
TARGET SOURCE FSTYPE OPTIONS
/run/credentials/systemd-sysctl.service none ramfs ro,nosuid,nodev,noexec,relatime,mode=700
/run/credentials/systemd-tmpfiles-setup-dev.service none ramfs ro,nosuid,nodev,noexec,relatime,mode=700
/run/credentials/systemd-tmpfiles-setup.service none ramfs ro,nosuid,nodev,noexec,relatime,mode=700


Der Option --options kann auch eine Komma separierte Liste mitgegeben werden, um den Filter auszuweiten.


Code:

findmnt --options ro,noexec,mode=755 # etc.


Suche nach Dateisystemen eines bestimmten Typen:


Code:

$ findmnt --types ext4
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mapper/vg0-lvroot ext4 rw,noatime
└─/home /dev/mapper/vg0-lvhome ext4 rw,noatime


Inventiert die Suche nach einem Dateisystem, Beispiel Listet alle auf bis auf swap Dateisysteme:


Code:

$ findmnt --types swap --invert


Listet die Einträge in der /etc/fstab auf.


Code:

$ findmnt --fstab
TARGET SOURCE FSTYPE OPTIONS
/ UUID=333621d0-0a8b-4682-aa5a-9332316f7d0e ext4 defaults,noatime
/home UUID=b0351c7c-e128-4287-8201-c227c12fd3d4 ext4 defaults,noatime
/tmp tmpfs tmpfs defaults,noatime,mode=1777
none /swapfile swap defaults


Lösst alle Bezeichnungen wie UUIDs, Labels etc. zu ihren Gerätedateien auf. Lässt sich auch gut verwenden um seine fstab zu konvertieren.


Code:

$ findmnt --fstab --evaluate
TARGET SOURCE FSTYPE OPTIONS
/ /dev/mapper/vg0-lvroot ext4 defaults,noatime
/home /dev/mapper/vg0-lvhome ext4 defaults,noatime
/tmp tmpfs tmpfs defaults,noatime,mode=1777
none /swapfile swap defaults


Sollen Abstände in der Tabelle nicht zu groß sein, z.B. um die Zeilen in einem Script besser verarbeiten zu können, kann man die Option --raw verwenden, dann werden die Felder mit nur einem Leerzeichen seperatisiert.

Und zu guter Letzt kommen wir zu den Optionen, die grep komplett überflüssig machen:


Code:

$ findmnt --type ext4 --noheadings --output SOURCE
/dev/mapper/vg0-lvroot
/dev/mapper/vg0-lvhome


Es war die rede von --noheadings und --output. Das zum einen die Überschriften entfernt und zum anderen nur angegebe Spalten/Felder anzeigt.


Und wenn das nicht schon gut genug ist um wahr zu sein, legt findmnt noch einen drauf. Es unterstützt nähmlich noch polling.

Ja genau, es kann die Datei /proc/self/mountinfo auf Veränderungen überwachen und sich zu Wort melden, wenn eine bestimmte Aktion eintritt:

Wartet bis ein Mount unter /mnt stattfindet, und gibt dann das Feld SOURCE aus

Code:

$ findmnt --target /mnt --poll=mount --output SOURCE --noheadings --first-only


In einem Skript so eingesetzt, sorgt es dafür, dass, dass Skript an der Stelle erst einmal nicht weiterläuft bis die Aktion stattgefunden hat. Auf diese weiße kann man sich eine Schleife in seinem Skript und Systemressourcen sparen.

findmnt kennt dabei verschiedene poll Aktionen


  • mount
  • unmount
  • remount
  • move


  • Zudem kann man mit


    • --first-only
    • --timeout X


    • Steuern wie lange die /proc/self/mountinfo überwacht werden soll.

      Hoffe dem ein oder anderen, konnte ich mit diesem Tipp bzw. Ideen, seine Skripte ein wenig Optimieren.

      LG
      Sebastian

Titel: Re:findtmnt - der bessere weg um Dateisysteme zu finden
Beitrag von: Andreas am 09. Januar 2023, 07:30:26

... das wusste auch ich noch nicht - DANKE!

LG
Andreas


Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.