So überprüfen Sie das Format eines Dateisystems

11

Ich möchte in einem Bash-Skript überprüfen, welcher Dateisystemtyp ein Verzeichnis ist.

Die Idee ist so etwas wie

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if
Dremor
quelle
Möchten Sie den Einhängepunkt oder den Dateisystemtyp? Was wäre Ihre gewünschte Ausgabe?
Terdon

Antworten:

11

Verwenden Sie df. Sie können ihm einen Pfad übergeben, der Ihnen die Dateisysteminformationen für diesen Pfad gibt. Wenn Sie den Dateisystemtyp benötigen, verwenden Sie den -TSchalter wie folgt:

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

Um den Dateisystemtyp zu extrahieren, können Sie ihn analysieren (verwenden Sie den -PSchalter, um dfZeilenumbrüche zu vermeiden , wenn der Geräteteil zu lang ist):

$ df -PT test | awk 'NR==2 {print $2}'
ext4

Sie können diesen Wert also in einem ifKonstrukt wie dem folgenden verwenden:

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

Beachten Sie, dass die Gerätespalte Leerzeichen enthalten kann (dies ist jedoch selten der Fall). In diesem Fall schlägt die Analyse fehl.

Marinus
quelle
12

Auf einem System, auf dem der Befehl GNU stat installiert ist (wie bei jeder Standard-Linux-Distribution), können Sie den fs-Typ für eine bestimmte Datei abrufen, ohne mit dem folgenden statBefehl analysieren zu müssen :

stat -f -c %T filename

-fweist statan, anstelle der Datei Informationen über das Dateisystem bereitzustellen, und -c %Tlegt fest, dass das Ausgabeformat nur den vom Menschen lesbaren Dateisystemtyp ( %T) enthält.

Sie können das also (in Bash) verwenden als:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat wird weitere Informationen liefern.

Rici
quelle
3

Mit findmnt(Teil von util-linux):

findmnt -no fstype -T /path/to/file

Bei Verwendung der Option

-T, --target Pfad
Wenn der Pfad keine Mountpoint-Datei oder ein Mountpoint-Verzeichnis ist, werden findmntdie Pfadelemente in umgekehrter Reihenfolge überprüft, um den Mountpoint abzurufen. Die beiden anderen Optionen unterdrücken die Kopfzeile: -n, --noheadingund wählen die Spalten aus, die aufgelistet werden sollen:-o, --output


dffrom coreutilshat eine ähnliche Option --output=, um nur bestimmte Felder zu drucken, wie fstypez.

df --output=fstype /path/to/file

Es gibt jedoch keine Möglichkeit, den Header zu entfernen, sodass Sie die Ausgabe an z | sed 1d

don_crissti
quelle
Ein niedliches findmntWerkzeug, auch mit TUI-Ausgabe für Strichzeichnungen. Vielen Dank!
Incnis Mrsi