j'utilise
mount -o bind /some/directory/here /foo/bar
Je veux vérifier /foo/bar
avec un script bash, et voir s'il a été monté? Sinon, appelez la commande mount ci-dessus, sinon faites autre chose. Comment puis-je faire ceci?
CentOS est le système d'exploitation.
Réponses:
L'exécution de la
mount
commande sans arguments vous indiquera les montages actuels. À partir d'un script shell, vous pouvez vérifier le point de montage avecgrep
et une instruction if:Dans mon exemple, l'instruction if vérifie le code de sortie de
grep
, qui indique s'il y avait une correspondance. Puisque je ne veux pas que la sortie soit affichée en cas de correspondance, je la redirige vers/dev/null
.la source
grep
renvoie un statut de sortie différent de zéro s'il n'y a pas de correspondance. Il n'y a pas besoin du test ou du sous-shell créé par $ ().if command | grep -q 'stuff'; then ...
mount | grep ...
vous montrer que votre liaison de montage est toujours active. Si le périphérique sous-jacent est démonté et remonté, la liaison de montage ne connectera plus les deux fichiers / répertoires même simount
elle montre toujours qu'elle est connectée. Et si vous le faites,umount ...
cela vous dira même qu'il n'est pas monté, bienmount
que cela ait été dit. ÉNORME faille dans le système de fichiers Linux.readlink -f
, qui ne renvoie rien lorsque le chemin / fichier n'existe pas. Si le / mount / path / to_file sous-jacent n'est pas là (par readlink), le montage sous-jacent est interrompu (remontez le montage sous-jacent et la liaison). Si le fichier sous-jacent est là etreadlink -f
indique que la version de liaison de ce fichier n'est pas là, la liaison est rompue, remontez simplement la liaison./mnt/md0xxx
alors la commande indiquera/mnt/md0
comme montée alors que ce qu'elle n'a pas à être ...Vous n'avez pas pris la peine de mentionner un O / S.
Ubuntu Linux 11.10 (et probablement les versions les plus récentes de Linux) ont la
mountpoint
commande.Voici un exemple sur l'un de mes serveurs:
En fait, dans votre cas, vous devriez pouvoir utiliser l'
-q
option, comme ceci:J'espère que cela pourra aider.
la source
Le manuel de
mountpoint
dit que:Le manuel de
mount
dit que:La commande correcte à utiliser est donc
findmnt
, qui fait elle-même partie duutil-linux
package et, selon le manuel:Donc, il recherche en fait plus de choses que
mountpoint
. Il fournit également l'option pratique:En résumé, pour vérifier si un répertoire est monté avec bash, vous pouvez utiliser:
Exemple:
la source
J'aime les réponses qui utilisent
/proc/mounts
, mais je n'aime pas faire un simple grep. Cela peut vous donner de faux positifs. Ce que vous voulez vraiment savoir, c'est "si l'une des lignes a cette chaîne exacte pour le champ numéro 2". Alors, posez cette question. (dans ce cas je vérifie/opt
)la source
mountpoint
oufindmnt
n'existe. Réponse très simple, beaucoup de joie, tel UNIX :)Ma solution:
Exemple:
Pour la réponse de Mark J. Bobak ,
mountpoint
ne fonctionne pas si montage avecbind
option dans un système de fichiers différent.Pour la réponse de Christopher Neylan , il n'est pas nécessaire de rediriger la sortie de grep vers / dev / null, utilisez simplement à la
grep -q
place.Le plus important, canonisez le chemin en utilisant
readlink -f $mypath
:/path/to/dir/
fin avec une barre oblique inverse, le chemin dans/proc/mounts
ou lamount
sortie est/path/to/dir
/var/run/
est le lien symbolique de/run/
, donc si vous montez bind pour/var/run/mypath
et vérifiez s'il est monté, il s'affichera comme/run/mypath
dans/proc/mounts
.la source
Une autre solution propre est comme ça:
Bien sûr, «faire écho à quelque chose» peut être remplacé par tout ce que vous devez faire pour chaque cas.
la source
Les réponses ici sont trop compliquées, il suffit de vérifier si le montage existe en utilisant:
cat /proc/mounts | tail -n 1
Cela ne produit que le dernier dossier monté, si vous voulez les voir tous, supprimez simplement la commande tail.
la source
Dans mon .bashrc, j'ai créé l'alias suivant:
la source