web-dev-qa-db-fra.com

Comment vérifier si un répertoire particulier est monté?

Comment vérifier un répertoire particulier est monté sur la machine Linux. Par exemple, il y a un dossier nommé test, je veux vérifier s'il est monté ou non.

25
unixx

Si vous voulez vérifier qu'il s'agit du point de montage d'un système de fichiers, c'est à cela que sert la commande mountpoint (sur la plupart des systèmes Linux):

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

Pour ce faire, il vérifie si . Et .. Ont le même numéro de périphérique (st_dev Dans stat() résultat). Donc, si vous n'avez pas la commande mountpoint, vous pouvez faire:

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

Comme mountpoint, il retournera vrai pour / Même si / N'est pas un point de montage (comme dans une prison chroot), ou false pour un point de montage d'un bind montage du même système de fichiers en lui-même.

Contrairement à mountpoint, pour les liens symboliques, il vérifiera si la cible du lien symbolique est un point de montage.

28
Stéphane Chazelas

Comme HalosGhost le mentionne dans les commentaires, les répertoires ne sont pas nécessairement montés en soi. Ils sont plutôt présents sur un appareil qui a été monté. Pour vérifier cela, vous pouvez utiliser la commande df comme ceci:

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

Ici, nous pouvons voir que le répertoire /boot fait partie du système de fichiers, /dev/hda1. Il s'agit d'un appareil physique, sur le système, un disque dur.

Vous pouvez également y parvenir un peu différemment en utilisant la commande mount pour interroger le système pour voir quels périphériques sont actuellement montés:

$ 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)

Ici, vous pouvez voir le type de périphérique et le type de systèmes de fichiers actuellement montés sur votre système. La 3ème colonne indique où ils sont montés sur le système dans son système de fichiers.

15
slm

Eh bien, comme d'autres l'ont dit, vous devriez modifier votre question et clarifier ce que vous essayez de réaliser. Pour autant que je sache, vous devez vérifier si un répertoire est monté sur un périphérique particulier. Vous pouvez également essayer quelque chose comme ci-dessous.

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

Donc, fondamentalement, la commande ci-dessus vous permet de connaître le point de montage du répertoire si le périphérique est monté sur un répertoire.

5
Ramesh

Je cherchais la même question lorsque je voulais vérifier le montage d'un nouveau système de fichiers XFS.

J'ai trouvé la commande findmnt : findmnt /directoryname

[root@CentOS7-Server /]# findmnt /mnt
TARGET SOURCE    FSTYPE OPTIONS
/mnt   /dev/sdb1 xfs    rw,relatime,seclabel,attr2,inode64,noquota
[root@CentOS7-Server /]# 
3
xharx

Agréable et court Python one-liner peut être construit sur la base de réponse de Gilles :

$ 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

J'ai fait une implémentation personnalisée de la commande mountpoint en Python, qui analyse /proc/self/mounts fichier. Un peu le même comportement que mount dans la réponse de Stéphane, sauf que la commande analyse /proc/self/mountinfo. L'utilisation est très simple: 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()

Essai:

$ 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
Sergiy Kolodyazhnyy

Votre question est un peu confuse, mais je suppose que l'une des façons de vérifier que: mount |awk '{print $3}'| grep -w <your_directory>. Si la sortie est vide, aucun périphérique n'est monté dans le répertoire. S'il n'est pas vide, un périphérique est monté dans le répertoire. Une autre façon consiste à utiliser df <your_directory>. Si le dernier champ est égal à votre nom de répertoire - alors certains périphériques y sont montés.

0
gena2x