it-swarm.com.de

Wie überprüfe ich, ob ein bestimmtes Verzeichnis gemountet ist?

Das Überprüfen eines bestimmten Verzeichnisses ist auf dem Linux-Computer bereitgestellt. Zum Beispiel gibt es einen Ordner namens test, ich möchte überprüfen, ob er gemountet ist oder nicht.

25
unixx

Wenn Sie überprüfen möchten, ob es sich um den Einhängepunkt eines Dateisystems handelt, ist der Befehl mountpoint (auf den meisten Linux-basierten Systemen) genau dafür vorgesehen:

if mountpoint -q -- "$dir"; then
  printf '%s\n' "$dir is a mount point"
fi

Dazu wird überprüft, ob . Und .. Dieselbe Gerätenummer haben (st_dev In stat() result). Wenn Sie also nicht über den Befehl mountpoint verfügen, können Sie Folgendes tun:

Perl -le '$dir = shift; exit(1) unless
  (@a = stat "$dir/." and @b = stat "$dir/.." and
  ($a[0] != $b[0] || $a[1] == $b[1]))' "$dir"

Wie mountpoint wird für / True zurückgegeben, auch wenn / Kein Einhängepunkt ist (wie in einem chroot Gefängnis) oder false für einen Mountpunkt eines bind Mount desselben Dateisystems in sich.

Im Gegensatz zu mountpoint wird bei symbolischen Links geprüft, ob das Ziel des Symlinks ein Mountpoint ist.

28

Wie HalosGhost in den Kommentaren erwähnt, werden Verzeichnisse nicht unbedingt per se gemountet. Sie sind vielmehr auf einem montierten Gerät vorhanden. Um dies zu überprüfen, können Sie den Befehl df wie folgt verwenden:

$ df -h /boot/
Filesystem            Size  Used Avail Use% Mounted on
/dev/hda1              99M   55M   40M  59% /boot

Hier können wir sehen, dass das Verzeichnis /boot ist Teil des Dateisystems, /dev/hda1. Dies ist ein physisches Gerät im System, eine Festplatte.

Sie können dies auch etwas anders angehen, indem Sie mit dem Befehl mount das System abfragen, um festzustellen, welche Geräte derzeit bereitgestellt sind:

$ mount | column -t
/dev/mapper/VolGroup00-LogVol00  on  /                         type  ext3         (rw)
proc                             on  /proc                     type  proc         (rw)
sysfs                            on  /sys                      type  sysfs        (rw)
devpts                           on  /dev/pts                  type  devpts       (rw,gid=5,mode=620)
/dev/hda1                        on  /boot                     type  ext3         (rw)
tmpfs                            on  /dev/shm                  type  tmpfs        (rw)
/dev/mapper/lvm--raid-lvm0       on  /export/raid1             type  ext3         (rw)
none                             on  /proc/sys/fs/binfmt_misc  type  binfmt_misc  (rw)
sunrpc                           on  /var/lib/nfs/rpc_pipefs   type  rpc_pipefs   (rw)
nfsd                             on  /proc/fs/nfsd             type  nfsd         (rw)

Hier sehen Sie den Gerätetyp und den Typ der Dateisysteme, die derzeit auf Ihrem System bereitgestellt sind. Die dritte Spalte zeigt, wo sie innerhalb des Dateisystems auf dem System bereitgestellt sind.

15
slm

Nun, wie andere sagten, sollten Sie Ihre Frage bearbeiten und klarstellen, was Sie erreichen möchten. Soweit ich verstanden habe, müssen Sie überprüfen, ob ein Verzeichnis auf einem bestimmten Gerät bereitgestellt ist. Sie können auch so etwas wie unten ausprobieren.

df -P /test | tail -1 | cut -d' ' -f 1

Mit dem obigen Befehl können Sie also den Einhängepunkt des Verzeichnisses ermitteln, wenn das Gerät überhaupt in ein Verzeichnis eingebunden ist.

5
Ramesh

Ich habe nach der gleichen Frage gesucht, als ich die Bereitstellung eines neuen XFS-Dateisystems überprüfen wollte.

Ich habe den Befehl gefunden findmnt : findmnt /directoryname

[[email protected] /]# findmnt /mnt
TARGET SOURCE    FSTYPE OPTIONS
/mnt   /dev/sdb1 xfs    rw,relatime,seclabel,attr2,inode64,noquota
[[email protected] /]# 
3
xharx

Schön und kurz Python Einzeiler kann basierend auf Gilles 'Antwort : konstruiert werden.

$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /mnt/HDD
True

$ python -c 'import os,sys;print(os.path.ismount(sys.argv[1]))' /etc                
False

Ich habe den Befehl mountpoint in Python benutzerdefiniert implementiert, wodurch /proc/self/mounts Datei. Ähnlich wie mount in Stephanes Antwort, außer dass der Befehl /proc/self/mountinfo. Die Verwendung ist sehr einfach: is_mountpoint.py /path/to/dir.

#!/usr/bin/env python3
from os import path
import sys

def main():

    if not sys.argv[1]:
       print('Missing a path')
       sys.exit(1)

    full_path = path.realpath(sys.argv[1])
    with open('/proc/self/mounts') as mounts:
       print
       for line in mounts:
           if full_path in line:
              print(full_path,' is mountpoint')
              sys.exit(0)
    print(full_path,' is not a mountpoint')
    sys.exit(1)

if __name__ == '__main__':
    main()

Testlauf:

$ python3 ./is_mountpoint.py /mnt/HDD                                          
/mnt/HDD  is mountpoint
$ lsblk | grep HDD
└─sdb6   8:22   0 405.3G  0 part /mnt/HDD
$ python3 ./is_mountpoint.py $HOME                                             
/home/xieerqi  is not a mountpoint
2

Ihre Frage ist etwas verwirrend, aber ich denke, eine der Möglichkeiten, dies zu überprüfen: mount |awk '{print $3}'| grep -w <your_directory>. Wenn die Ausgabe leer ist, wird kein Gerät in das Verzeichnis eingebunden. Wenn nicht leer, wird ein Gerät in das Verzeichnis eingebunden. Eine andere Möglichkeit ist die Verwendung von df <your_directory>. Wenn das letzte Feld Ihrem Verzeichnisnamen entspricht, wird ein Gerät daran angehängt.

0
gena2x