ich benutze
mount -o bind /some/directory/here /foo/bar
Ich möchte /foo/bar
jedoch mit einem Bash-Skript überprüfen , ob es gemountet wurde. Wenn nicht, rufen Sie den obigen Befehl mount auf, andernfalls tun Sie etwas anderes. Wie kann ich das machen?
CentOS ist das Betriebssystem.
Antworten:
Wenn Sie den
mount
Befehl ohne Argumente ausführen, werden die aktuellen Bereitstellungen angezeigt. In einem Shell-Skript können Sie mitgrep
und einer if-Anweisung nach dem Einhängepunkt suchen:In meinem Beispiel überprüft die if-Anweisung den Exit-Code von
grep
, der angibt, ob eine Übereinstimmung vorliegt . Da ich nicht möchte, dass die Ausgabe angezeigt wird, wenn eine Übereinstimmung vorliegt, leite ich sie an weiter/dev/null
.quelle
grep
Gibt einen Exit-Status ungleich Null zurück, wenn keine Übereinstimmungen vorliegen. Der Test oder die von $ () erstellte Subshell sind nicht erforderlich.if command | grep -q 'stuff'; then ...
mount | grep ...
, Ihnen zu zeigen, dass Ihre Mount-Bindung noch aktiv ist. Wenn das zugrunde liegende Gerät nicht gemountet und erneut gemountet ist, verbindet die Mount-Bindung die beiden Dateien / Verzeichnisse nicht mehr, obwohlmount
immer noch angezeigt wird , dass es verbunden ist. Und wenn Sie dies tunumount ...
, wird es Ihnen sogar sagen, dass es nicht montiert ist, obwohl esmount
gesagt wurde. RIESIGER Fehler im Linux-Dateisystem.readlink -f
, was nichts zurückgibt, wenn der Pfad / die Datei nicht existiert. Wenn das zugrunde liegende Mount / mount / path / to_file nicht vorhanden ist (per Readlink), ist das zugrunde liegende Mount fehlerhaft (mounten Sie das zugrunde liegende Mount und die Bindung erneut). Wenn die zugrunde liegende Datei vorhanden ist undreadlink -f
besagt, dass die Bindungsversion dieser Datei nicht vorhanden ist, wird die Bindung unterbrochen. Hängen Sie die Bindung einfach erneut ein./mnt/md0xxx
wird, zeigt der Befehl/mnt/md0
als gemountet an, während es nicht sein muss ...Sie haben sich nicht die Mühe gemacht, ein O / S zu erwähnen.
Ubuntu Linux 11.10 (und wahrscheinlich die aktuellsten Linux-Versionen) haben den
mountpoint
Befehl.Hier ist ein Beispiel auf einem meiner Server:
In Ihrem Fall sollten Sie die
-q
Option wie folgt verwenden können:Hoffentlich hilft das.
quelle
Das Handbuch von
mountpoint
sagt, dass es:Das Handbuch von
mount
sagt, dass:So um den richtigen Befehl zu verwenden ist
findmnt
, die selbst Teil desutil-linux
Pakets und, nach dem Handbuch:Es sucht also tatsächlich mehr Dinge als
mountpoint
. Es bietet auch die bequeme Option:Zusammenfassend können Sie Folgendes verwenden, um zu überprüfen, ob ein Verzeichnis mit bash gemountet ist:
Beispiel:
quelle
Ich mag die Antworten, die verwendet werden
/proc/mounts
, aber ich mag es nicht, ein einfaches Grep zu machen. Das kann zu Fehlalarmen führen. Was Sie wirklich wissen möchten, ist "Hat eine der Zeilen genau diese Zeichenfolge für Feld Nummer 2 ? ". Stellen Sie diese Frage. (in diesem Fall überprüfe ich/opt
)quelle
mountpoint
oderfindmnt
existieren. Sehr einfache Antwort, viel Freude, wie UNIX :)Meine Lösung:
Beispiel:
Für Mark J. Bobak Antwort ,
mountpoint
funktioniert nicht , wenn mit Halterungbind
in unterschiedlichen Dateisystem - Option.Für die Antwort von Christopher Neylan muss die Ausgabe von grep nicht nach / dev / null umgeleitet werden,
grep -q
sondern nur verwendet werden.Das Wichtigste ist, den Pfad zu kanonisieren, indem Sie Folgendes verwenden
readlink -f $mypath
:/path/to/dir/
Ende mit Backslash" aktivieren, lautet der Pfad in/proc/mounts
oder diemount
Ausgabe/path/to/dir
/var/run/
ist der Symlink von/run/
. Wenn Sie also bind für mounten/var/run/mypath
und prüfen, ob er gemountet ist, wird er wie/run/mypath
in angezeigt/proc/mounts
.quelle
Eine andere saubere Lösung ist wie folgt:
Natürlich kann "Echo etwas" durch alles ersetzt werden, was Sie für jeden Fall tun müssen.
quelle
Die Antworten hier sind zu kompliziert. Überprüfen Sie einfach, ob die Halterung vorhanden ist, indem Sie:
cat /proc/mounts | tail -n 1
Dies gibt nur den zuletzt gemounteten Ordner aus. Wenn Sie alle anzeigen möchten, entfernen Sie einfach den Befehl tail.
quelle
In meinem .bashrc habe ich folgenden Alias erstellt:
quelle