GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la mejor manera de verificar si un volumen está montado en un script Bash?

Solución 1:

Evite usar /etc/mtab porque puede ser inconsistente.

Evite las tuberías mount porque no tiene por qué ser tan complicado.

Simplemente:

if grep -qs '/mnt/foo ' /proc/mounts; then
    echo "It's mounted."
else
    echo "It's not mounted."
fi

(El espacio después del /mnt/foo es evitar la coincidencia, p. /mnt/foo-bar .)

Solución 2:

if mountpoint -q /mnt/foo 
then
   echo "mounted"
else
   echo "not mounted"
fi

o

mountpoint -q /mnt/foo && echo "mounted" || echo "not mounted"

Solución 3:

findmnt -rno SOURCE,TARGET "$1" evita todos los problemas en las otras respuestas. Hace el trabajo limpiamente con solo un comando.

Otros enfoques tienen estas desventajas:

  • grep -q y grep -s son un paso adicional innecesario y no se admiten en todas partes.
  • /proc/\* no es compatible en todas partes. (mountpoint también se basa en proc).
  • mountinfo se basa en /proc/..
  • cut -f3 -d' ' desordena los espacios en los nombres de las rutas
  • Análisis de montaje El espacio en blanco de es problemático. Su página man ahora dice:

.. el modo de listado se mantiene solo por compatibilidad con versiones anteriores.

Para una salida más robusta y personalizable, use findmnt (8), especialmente en sus guiones.

Funciones bash:

#These functions return exit codes: 0 = found, 1 = not found

isMounted    () { findmnt -rno SOURCE,TARGET "$1" >/dev/null;} #path or device
isDevMounted () { findmnt -rno SOURCE        "$1" >/dev/null;} #device only
isPathMounted() { findmnt -rno        TARGET "$1" >/dev/null;} #path   only

#where: -r = --raw, -n = --noheadings, -o = --output

Ejemplos de uso:

if isPathMounted "/mnt/foo bar";      #Spaces in path names are ok.
   then echo "path is mounted"
   else echo "path is not mounted"
fi

if isDevMounted "/dev/sdb4"; 
   then echo "device is mounted"
   else echo "device is not mounted"
fi

#Universal:
if isMounted "/mnt/foo bar"; 
   then echo "device is mounted"
   else echo "device is not mounted"
fi

if isMounted "/dev/sdb4";
   then echo "device is mounted"
   else echo "device is not mounted"
fi

Solución 4:

Un script como este nunca será portátil. Un secreto sucio en Unix es que solo el núcleo sabe dónde están los sistemas de archivos y, a falta de cosas como /proc (no portátil), nunca le dará una respuesta directa.

Normalmente uso df para descubrir cuál es el punto de montaje de un subdirectorio y en qué sistema de archivos se encuentra.

Por ejemplo (requiere posix shell como ash/AT&T ksh/bash/etc)

case $(df  $mount)
in
  $(df  /)) echo $mount is not mounted ;;
  *) echo $mount has a non-root filesystem mounted on it ;;
esac

Un poco te dice información útil.

Solución 5:

lo siguiente es lo que uso en uno de mis trabajos cron de copia de seguridad de rsync. verifica si /backup está montado e intenta montarlo si no lo está (puede fallar porque la unidad está en una bahía de intercambio en caliente y es posible que ni siquiera esté presente en el sistema)

NOTA:lo siguiente solo funciona en Linux, porque greps /proc/mounts; una versión más portátil ejecutaría 'mount | grep /backup', como en la respuesta de Matthew..

  if ! grep -q /backup /proc/mounts ; then
    if ! mount /backup ; then
      echo "failed"
      exit 1
    fi
  fi
  echo "suceeded."
  # do stuff here

Linux
  1. ¿Cuál es la mejor manera de detectar (a partir de un script) si el software está instalado?

  2. Bash Echo ¿La línea de comando se ejecutó en la propia línea de comando (no en un script)?

  3. ¿Cuál es la mejor manera de enviar una señal a todos los miembros de un grupo de procesos?

  4. ¿Cuál es la mejor manera de garantizar que solo se ejecute una instancia de un script Bash?

  5. Bash Shell Script:busque una bandera y tome su valor

Cualquier forma de salir del script bash, pero sin salir de la terminal

¿Cuál es la mejor manera de manejar las condiciones de falta de memoria en Java?

¿Cuál es la mejor manera de aprender SELinux?

¿Cuál es la forma más segura y portátil de invocar el binario de eco?

¿Cuál es la forma más rápida de ejecutar un script?

¿Cuál es la mejor manera de establecer una variable de entorno en .bashrc?