So überprüfen Sie, ob / proc / gemountet ist

7

Wie kann ich überprüfen, ob / proc / gemountet ist?

  • Von der Verwendung von / etc / mtab wird abgeraten, da dies möglicherweise inkonsistent ist.

  • Die Verwendung von / proc / mounts ist ebenfalls keine Option, da sie möglicherweise nicht vorhanden ist, wenn / proc / nicht bereitgestellt ist (obwohl die Überprüfung auf ihre Existenz eine Möglichkeit sein kann, diese Überprüfung durchzuführen.

Was ist der beste Weg, um diese Prüfung durchzuführen?

Freddie
quelle

Antworten:

8

Sie können das mountohne Argumente ausführen , um eine Liste der aktuellen Bereitstellungen abzurufen. Die /etc/mtabDatei sollte ähnliche Daten haben, aber wie Sie sagten, ist es möglich, dass dies nicht mit dem übereinstimmt, was tatsächlich gemountet wird, falls das /etcDateisystem durcheinander ist, nicht beschreibbar ist oder ein anderes Programm es durcheinander gebracht hat. Sie können spezifische Informationen zu den Proc-Reittieren erhalten, indem Sie mountalle Reittiere des Typs procwie folgt auflisten :

mount -l -t proc

Bearbeiten: Es sieht so aus, als könnten Sie statdas Gerät des /procOrdners mit dem Gerät von vergleichen /, um zumindest festzustellen, ob dort etwas anderes als das Root-Dateisystem bereitgestellt ist:

[[ $(stat -c %d%D /proc) != $(stat -c %d%D /) ]] && echo "Something is mounted at /proc"
Caleb
quelle
Dies ist in der Tat eine Möglichkeit, dies zu tun. Hier besteht das Risiko, dass das Ausführen des Mount-Befehls auf verschiedenen problematischen Mounts wie NFS / CIFS-Freigaben hängen bleibt, die nicht verbunden sind.
Freddie
1
@freddie: Bleibt es tatsächlich hängen, wenn du es bittest, Reittiere vom Typ proc aufzulisten, wie ich es gezeigt habe? Ich habe noch keinen Fall, den ich testen kann, aber wenn er anständig implementiert ist, sehe ich nicht, warum er beim Scannen des Status von NFS-Mounts hängen bleibt, wenn er aufgefordert wird, nur Proc-Mounts aufzulisten. Beachten Sie, dass ich mount | grep procaus diesem Grund NICHT empfohlen habe, zu laufen .
Caleb
Ich muss es testen, aber ich stimme zu, wenn es richtig implementiert ist, sollte mount -l nicht hängen bleiben und in diesem Fall ist dies eine gute Lösung. Mount -l gibt jedoch den Rückkehrcode 0 zurück, wenn ein Mountpunkt (oder mehr) gefunden wird oder wenn er nicht gefunden wird. Die Prüfung wird also noch komplizierter, indem mount -l -t proc | wc -l verwendet und überprüft wird, wie viele Dateisysteme zurückgegeben werden :(
freddie
@freddie: siehe meine Bearbeitung für eine andere Lösung. Sie können auch einen Stringtest auf dem Mount verwenden, ohne wc auszuführen:[[ -n $(mount -l -t proc) ]]
Caleb
3

Test auf die Existenz von /proc/mounts. Das Ausführen mountist nicht gut, da es, wenn /proces nicht gemountet ist, möglicherweise veraltete Daten von zurückgibt /etc.

Theoretisch könnte es noch etwas anderes geben /proc. In der Praxis ist dies jedoch äußerst unwahrscheinlich: Wenn das Dateisystem /proc/mountsvorhanden ist und /procnicht vorhanden ist proc, können Sie Ihrer Umgebung ohnehin nichts anvertrauen. Wenn Sie wirklich besorgt sind, können Sie überprüfen, ob der Dateisystemtyp lautet proc: df -PT /proc | awk 'NR==2 && $2=="proc" {print 1}'(erfordert die Linux-Dienstprogramme df, es gibt keine entsprechende Option in Busybox). Umgekehrt könnte theoretisch ein proc-Dateisystem an einem anderen Ort installiert sein. Es gibt keine einfache Möglichkeit, dies mit Shell-Befehlen zu finden ( dfLesevorgänge /proc/mountszum Auflisten von Dateisystemen). In der Praxis einfach nachsehen /proc/mounts.

Gilles 'SO - hör auf böse zu sein'
quelle
2

Wenn Sie eine (mehr oder weniger) Garantie wünschen, dass das Dateisystem auf / proc tatsächlich proc ist, anstatt eines anderen Dateisystems oder einer Verzeichnisstruktur, die so aussieht, können Sie statfs()den Typ aufrufen und überprüfen, 0x9fa0ist der Wert für proc.

Random832
quelle
0

mountpointIn vielen Linux-Installationen ist ein Tool namens verfügbar. Der Exitcode ist 0, wenn das erste Argument ein Mountpoint ist.

abraXxl
quelle