web-dev-qa-db-fra.com

Comment vérifier si un système de fichiers est monté avec un script

Je suis nouveau dans les scripts ... Je peux faire des trucs très basiques, mais maintenant j'ai besoin d'un coup de main.

J'ai un système de fichiers local qui ne sera monté que lorsque je devrai faire une sauvegarde.

Je commence par ça.

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."; then
  mount $MOUNT;
fi

Comme je l'ai dit, je suis très basique en script. J'ai entendu dire que vous pouvez vérifier l'état de la commande mount en consultant les codes retour.

RETURN CODES
       mount has the following return codes (the bits can be ORed):
       0      success
       1      incorrect invocation or permissions
       2      system error (out of memory, cannot fork, no more loop devices)
       4      internal mount bug
       8      user interrupt
       16     problems writing or locking /etc/mtab
       32     mount failure
       64     some mount succeeded

Je ne sais pas comment vérifier ça. Des conseils?

20
maniat1k

Vous pouvez vérifier le code d'état de mount, et les exécutables les mieux écrits, avec le paramètre spécial Shell ?.

De man bash:

? Expands to the exit status of the most recently executed foreground pipeline.

Après avoir exécuté la commande mount, exécutez immédiatement echo $? imprimera le code d'état de la commande précédente.

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

Tous les exécutables n'ont pas de codes d'état bien définis. Au minimum, il devrait sortir avec un code de réussite (0) ou d'échec (1), mais ce n'est pas toujours le cas.

Pour développer (et corriger) votre exemple de script, j'ai ajouté une construction imbriquée if pour plus de clarté. Ce n'est pas le seul moyen de tester le code d'état et d'effectuer une action, mais c'est le plus facile à lire lors de l'apprentissage.

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

Pour plus d'informations sur "Exit and Exit Status", vous pouvez vous référer au Advanced Bash-Scripting Guide .

20
George M

De nombreuses distributions Linux ont la commande mountpoint. Il peut explicitement être utilisé pour vérifier si un répertoire est un point de montage. Aussi simple que cela:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi
38
grosshat

Encore une façon:

if findmnt ${mount_point}) >/dev/null 2>&1 ; then
  #Do something for positive result (exit 0)
else
  #Do something for negative result (exit 1)
fi
3
Sun

Court déclarations

Cochez si monté :

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

Cochez si non monté :

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"
2
Philippe Gachoud

Le moyen le plus simple qui ne nécessite pas de root est:

if $(df | grep -q /mnt/ramdisk); then

fi

ou pour voir s'il n'est pas monté:

if ! $(df | grep -q /mnt/ramdisk); then

fi
2

J'ai essayé avec le script ci-dessous

#!/bin/bash
echo "enter the file system to check whether its mounted or not"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p is mounted"
else
echo "$p is not mounted"
fi
done

La seule entrée que vous devez donner est le nom du système de fichiers

0
Praveen Kumar BS