Ich suche nach einer schnellen Möglichkeit, den Einhängepunkt des Dateisystems zu finden, das eine bestimmte DATEI enthält. Gibt es etwas Einfacheres oder Direkteres als meine unten stehende Lösung?
df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' '
Eine ähnliche Frage " Gibt es einen Befehl, um zu sehen, wo eine Festplatte bereitgestellt ist? " Verwendet den Geräteknoten der aktuellen Festplatte als Eingabe und keine beliebige Datei von der Festplatte ...
shell
filesystems
mount
Stu
quelle
quelle
tr
Anrufawk -F'% '...
Antworten:
Sie könnten so etwas tun
oder auch
Da das
awk
Aufteilen von Leerzeichen standardmäßig erfolgt, müssen Sie das nicht angeben-F
und das Leerzeichen auch nicht mit trimmentr
. Schließlich können Sie durch Angabe der interessierenden Zeilennummer (NR==2
) auch darauf verzichtentail
.quelle
-P
richtig funktionieren ? In allen Fällen sollte das allerletzte Feld, von dem gedruckt wirdawk
, die Festplatte sein.-P
Option, die Gilles gerade hinzugefügt hat, nicht verwendet habe .-P
. Trotzdem empfehle ich, immer zu verwenden,-P
wenn Sie die Ausgabe von analysierendf
. Es ist einfacher, als zu überprüfen, ob diese bestimmte Verwendung sicher ist.mount | grep " on $(df -P ${FILE} | awk 'END{print $NF}') type" | awk '{print $1}'
Wenn Sie unter GNU / Linux GNU
stat
aus Coreutils 8.6 oder höher haben, können Sie Folgendes tun:Andernfalls:
Ihr Ansatz ist gültig, setzt jedoch voraus, dass der Einhängepunkt kein Leerzeichen,%, Zeilenumbruch oder andere nicht druckbare Zeichen enthält. Sie können ihn mit neueren Versionen von GNU
df
(8.21 oder höher) geringfügig vereinfachen :quelle
df
erkennt die--output
Option nicht.df
> = 8.21 ist.Für Linux haben wir findmnt von util-linux genau dafür gemacht
Beachten Sie, dass eine Art zufälliger Mountpunkt zurückgegeben werden kann, falls mehrere Bindungs-Mounts vorhanden sind. Die Verwendung
df
hat das gleiche Problem.quelle
Da
stat
ein "Gerät" -Feld zurückgegeben wird, war ich gespannt, wie der zugrunde liegendestat()
Bibliotheksaufruf verwendet werden kann, um diese Informationen programmgesteuert auf POSIX-kompatible Weise abzurufen.Dieser Ausschnitt aus C-Code:
Gibt die Haupt- und Nebengeräte-IDs für das Gerät an, das die in der Befehlszeile (
argv[1]
) aufgeführte Datei enthält . Leidermajor()
undminor()
nicht POSIX, obwohl die Manpage behauptet, dass sie neben GNU / Linux "auf vielen anderen Systemen vorhanden" sind.Sie können dann eine Korrespondenz zwischen der Haupt- / Nebennummer des Geräts und dem Geräteknoten von z. B.
/proc/diskstats
abrufen und diese zuordnen, um Punkte von/proc/mounts
, auch bekannt als, anzuhängen./etc/mtab
.Ein Befehlszeilenprogramm, um dies zu tun, wäre also ziemlich einfach.
quelle
/proc/diskstats
ist nur für Block-Geräte, Sie werden die NFS, Proc, Fuse vermissen ... Zumindest unter Linux können verschiedene Mountpoints die gleiche Maj + Min habenst_dev
möglicherweise keine Möglichkeit bietet, eine NFS-Partition von einer anderen zu unterscheiden. Wer dies tatsächlich schreiben will, muss dies berücksichtigen;)Hier ist mehr C ++ - Code, wenn Sie dies von C ++ aus tun möchten ...
Weitere Links für programmatische Möglichkeiten
quelle