Mount-Informationen für das aktuelle Verzeichnis

20

Ich kann tun df ., um einige Informationen zu dem Mount abzurufen, in dem sich das aktuelle Verzeichnis befindet, und ich kann alle gewünschten Informationen abrufen mount, aber zu viele Informationen (Informationen zu anderen Mounts). Ich kann es nach unten greifen, frage mich aber, ob es einen besseren Weg gibt.

Gibt es einen Befehl mountinfo, mountinfo .der Informationen gibt, die ich möchte (wie df ., aber mit den Informationen, die mountgibt.)


Ich benutze Debian Gnu + Linux.

Strg-Alt-Delor
quelle
1
Ich glaube, statBefehl kann auch verwendet werden. Ich bin mir jedoch nicht sicher, ob die %mOption, die den Einhängepunkt angibt, in Ihrer Version des Systems unterstützt wird. Ich habe mein System eingecheckt und es schien den Mount-Punkt nicht zurückzugeben.
Ramesh
1
@Ramesh, Yes ruft stat "--printf=%m\n" .den Mount-Punkt des Dateisystems ab, in dem sich das aktuelle Verzeichnis befindet. Auf diese Weise können wir einige der Antworten vereinfachen. Vielen Dank.
Strg-Alt-Delor

Antworten:

18

Ich denke du willst so etwas:

findmnt -T .

Bei Verwendung der Option

-T, --target Pfad
Wenn der Pfad keine Mountpoint-Datei oder kein Mountpoint-Verzeichnis ist, werden findmntdie Pfadelemente in umgekehrter Reihenfolge überprüft, um den Mountpoint abzurufen. Sie können nur bestimmte Felder über drucken -o, --output [list].
Eine findmnt --helpListe der verfügbaren Felder finden Sie unter.


Alternativ können Sie auch Folgendes ausführen:

(until findmnt . ; do cd .. ; done)

Das Problem, auf das Sie stoßen, ist, dass alle Pfade relativ zu irgendetwas sind, also müssen Sie nur über den Baum laufen. Jedes Mal.

findmntist ein Mitglied des Util-Linux-Pakets und das schon seit ein paar Jahren. Unabhängig von Ihrer Distribution sollte es jetzt bereits auf Ihrem Linux-Computer installiert sein, wenn Sie auch über das mountTool verfügen .

man mount | grep findmnt -B1 -m1
For  more robust and customizable output use
findmnt(8),  especially  in  your   scripts.

findmntGibt alle Mount-Informationen ohne Mount-Point-Argument aus, und nur die für das Argument mit einem. Das -Dist die emulierendf Option. Ohne -Dseine Ausgabe ist ähnlich wie mount's - aber weitaus konfigurierbarer. Probieren Sie es aus findmnt --helpund überzeugen Sie sich.

Ich stecke es in eine Subshell, damit sich das aktuelle Verzeichnis der aktuellen Shell nicht ändert.

So:

mkdir -p /tmp/1/2/3/4/5/6 && cd $_ 
(until findmnt . ; do cd .. ; done && findmnt -D .) && pwd

AUSGABE

TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw
SOURCE FSTYPE  SIZE   USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G 839.7M   11G   7% /tmp
/tmp/1/2/3/4/5/6

Wenn Ihnen die -DOption nicht zur Verfügung steht (nicht in älteren Versionen von util-linux) , brauchen Sie sich keine Sorgen zu machen - es ist in jedem Fall nur ein praktischer Schalter. Beachten Sie die Spaltenüberschriften, die es für jeden Aufruf erzeugt - Sie können diese für jeden Aufruf mit der -oOption utput einschließen oder ausschließen . Ich kann die gleiche Ausgabe erhalten -Dwie:

 findmnt /tmp -o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET

AUSGABE

SOURCE FSTYPE  SIZE  USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G  1.1G 10.6G  10% /tmp
mikeserv
quelle
Ich mag es, außer das bisschen -D, ich habe diese Option nicht. (Ich bin auf Debian7, util-linux 2.20.1-5.3)
ctrl-alt-delor
Ich werde in ein paar Tagen √ Sie, ich werde etwas Zeit lassen, um zu sehen, ob jemand eine perfektere Antwort hat. Obwohl dies nahezu perfekt ist (wenn es wie df funktioniert hat: brauchte die Schleife nicht, dann wäre es perfekt).
Strg-Alt-Delor
@richard - das ist eine gute Idee - mir gefällt es nicht, wenn Antworten zu früh angenommen werden. in Bezug auf die Schleife und df- ich bin bereit zu wetten, dass es eine Schleife macht, Sie müssen es nur nicht dazu auffordern.
mikeserv
1
Dank @ramesh können wir auchfindmnt $(stat "--printf=%m\n" .)
Strg-Alt-Delor
2
Meine Version von findmnthat eine -TOption, die die cd ..Schleife umgehen kann . Könnte jemand anderem nützlich sein.
Stickstoff
1

Die Linux / Unix-Methode besteht darin, eine Toolbox mit kleinen Dienstprogrammen bereitzustellen, die in Kombination die gewünschten Ergebnisse liefern.

Sie neigen nicht dazu, für jede Gelegenheit einen Nutzen zu haben. Stattdessen haben Sie viele kleine nützliche Hilfsprogramme, die mit Pipes usw. kombiniert werden. Der Vorteil ist, dass Sie Ihr eigenes Hilfsprogramm ganz einfach schreiben können, wenn keines verfügbar ist.

Um beispielsweise die gewünschten Informationen abzurufen, können Sie Folgendes verwenden:

mount | grep $(df  --output=source . | tail -1)

Wenn Sie das Obige mit verschiedenen Verzeichnissen wiederverwenden möchten, erstellen Sie ein Skript:

#!/bin/bash
mount | grep $(df  --output=source $1 | tail -1)

Speichern Sie es als mountinfound machen Sie es ausführbar ( chmod +x mountinfo). Sie können es dann verwenden als:

mountinfo .

Wenn Sie ein System wollen, das ein Dienstprogramm für alles hat, von dem keines miteinander interoperiert, kann Ihnen ein gewisser Mr Gates vielleicht helfen ;-)

garethTheRed
quelle
--outputexistiert nur in sehr neuen Versionen von GNU coreutils (≥8.22).
Gilles 'SO- hör auf böse zu sein'
Dies ist so ziemlich das, was ich getan habe, es ist nur so, dass mountohne Optionen ein bisschen nachgedacht zu sein scheint: Mit Optionen, die Sie Mount-Punkte erstellen, ohne sie aufzulisten, hoffte ich auf ein besseres Listen-Tool. Wie wir sehen, hat uns @mikeserv gezeigt findmnt.
Strg-Alt-Delor
1

Es kann etwas chaotisch sein, wenn die Einhängepunkte Leerzeichen enthalten, dies sollte jedoch funktionieren, außer in Fällen, in denen die Einhängepunkte Zeilenumbrüche enthalten:

#!/bin/sh
mountpoint="$(df -P "$1" | awk '{
    if (NR==1)
        i=index($0,"Mounted on");
    else
        print substr($0,i);
    }')"
mount|grep " on ${mountpoint} type "

df -Pgibt eine Zeile für das Dateisystem aus; Ohne diese Option dfkönnen zwei Zeilen ausgegeben werden, wenn der Einhängepunkt lang ist. Der Name des Einhängepunkts beginnt in derselben Spalte wie die Bezeichnung "Eingehängt in" in der Kopfzeile.

Nachdem wir den Einhängepunkt erhalten haben, suchen wir ihn in der Ausgabe von mount.

Mark Plotnick
quelle
1

Ich kenne keinen Befehl, aber Sie könnten eine Funktion erstellen. Sie können das Folgende zu Ihrem hinzufügen .bashrc:

mountinfo () {
  mount | grep $(df -P "$1" | tail -n 1 | awk '{print $1}')
}

Dadurch wird der mountBefehl ausgeführt und die Ausgabe an übergeben grep. grepwird nach der Ausgabe von suchen df -P "$1" | tail -n 1 | awk '{print $1}'und sie aufschlüsseln:

  • df -P "$1"wird dfauf das Argument ausgeführt, das an die Funktion übergeben wurde,
  • tail -n 1gibt nur die zweite Zeile aus, die die partitionInformationen enthält .
  • awk '{print $1}'Gibt den ersten Teil dieser Zeile aus, z /dev/sda5. B. die Festplatten- / Partitionsnummer . Das ist es, wonach grepim Befehl mount gesucht und ausgegeben wird.

Geben Sie eine Quelle für Ihre .bashrcDatei ein, um die Änderungen anzuwenden, oder melden Sie sich ab und wieder an.

Wenn Sie jetzt ausführen mountinfo ., erhalten Sie die gewünschte Ausgabe.

Alaa Ali
quelle
Dies ist so ziemlich das, was ich getan habe (aber ohne die Funktion mache ich es nicht genug, wenn ich es auf anderen Systemen mache, z. B. Antworten auf dieser Site.), Es ist nur so, dass mountohne Optionen ein bisschen von scheinen Ein nachträglicher Gedanke: Mit Optionen, die Sie erstellen, ohne sie aufzulisten, erhoffte ich mir ein besseres Listen-Tool. Wie wir sehen, hat uns @mikeserv gezeigt findmnt.
Strg-Alt-Delor
0

Wenn Sie eine nicht ganz alte Version der GNU-Coreutils df verwenden, echo $(df . --output=target | tail -n 1)funktioniert dies. Ebenso mit stat -c '%m' ., obwohl ich bemerke, dass https://linux.die.net/man/1/stat die Dokumentation der Formatoption fehlt %m.

Es ist mühsam, dies tragbar zu machen: Keine der oben genannten Funktionen funktioniert mit den BSD- oder Cygwin-Versionen von stat oder df. Wenn nicht die Möglichkeit von Leerzeichen in den Pfaden der Einhängepunkte df -P . | tail -1 | awk '{ print $NF}'bestünde , wäre das gut, aber häufig haben USB-Flash-Laufwerke Leerzeichen im Datenträgernamen, die wahrscheinlich im Einhängepfad erscheinen und diesen aufheben. Für die Portabilität ist Perl praktisch überall installierbar und CPAN verfügt über das Modul Sys :: Filesystem :: MountPoint , das die gewünschte Funktionalität bietet.

Charles Stewart
quelle
Können Sie uns sagen, was echo $()der Befehl hinzufügt?
Strg-Alt-Delor