GNU/Linux >> Tutoriales Linux >  >> Linux

Comprobar si el directorio está montado con bash

No te molestaste en mencionar un O/S.

Ubuntu Linux 11.10 (y probablemente las versiones más actualizadas de Linux) tienen el mountpoint comando.

Aquí hay un ejemplo en uno de mis servidores:

$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint

En realidad, en su caso, debería poder usar el -q opción, así:

mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar

Espero que ayude.


El manual de mountpoint dice que:

comprueba si el directorio o archivo dado se menciona en el archivo /proc/self/mountinfo.

El manual de mount dice que:

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 scripts.

Entonces el comando correcto a usar es findmnt , que es en sí mismo parte del util-linux paquete y, según el manual:

puede buscar en /etc/fstab, /etc/mtab o /proc/self/mountinfo

Así que en realidad busca más cosas que mountpoint . También proporciona la opción conveniente:

-M, --mountpoint ruta

Defina explícitamente el archivo o directorio del punto de montaje. Véase también --objetivo.

En resumen, para verificar si un directorio está montado con bash, puede usar:

if [[ $(findmnt -M "$FOLDER") ]]; then
    echo "Mounted"
else
    echo "Not mounted"
fi

Ejemplo:

mkdir -p /tmp/foo/{a,b}
cd /tmp/foo

sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing

[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"

Mi solución:

is_mount() {
    path=$(readlink -f $1)
    grep -q "$path" /proc/mounts
}

Ejemplo:

is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/

Para la respuesta de Mark J. Bobak, mountpoint no funciona si se monta con bind opción en un sistema de archivos diferente.

Para la respuesta de Christopher Neylan, no es necesario redirigir la salida de grep a /dev/null, solo use grep -q en su lugar.

Lo más importante, canonicalizar la ruta usando readlink -f $mypath :

  • Si marca una ruta como /path/to/dir/ terminar con barra invertida, la ruta en /proc/mounts o mount la salida es /path/to/dir
  • En la mayoría de versiones de Linux, /var/run/ es el enlace simbólico de /run/ , por lo que si monta bind para /var/run/mypath y verifique si se montó, se mostrará como /run/mypath en /proc/mounts .

Ejecutando el mount El comando sin argumentos le dirá los montajes actuales. Desde un script de shell, puede verificar el punto de montaje con grep y una sentencia if:

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi

En mi ejemplo, la instrucción if verifica el código de salida de grep , que indica si hubo una coincidencia. Como no quiero que se muestre el resultado cuando hay una coincidencia, lo redirijo a /dev/null .


Linux
  1. ¿Ejecutar scripts de Bash al ingresar a un directorio?

  2. Bash -c con parámetros posicionales?

  3. ¿Archivos Cat con directorio?

  4. ¿Cómo verificar si una partición está montada como 'noexec'?

  5. The Magic ~:Expansión Bash Tilde con 5 ejemplos

Cómo verificar si existe un archivo o directorio en Bash

Cómo verificar si existe un archivo o directorio en Bash

Comando de CD de Linux con ejemplos

Montar una carpeta remota con sshfs

Cómo verificar si existe un archivo o directorio en Bash Shell

Cómo usar el montaje SSHFS con directorios remotos a través de SSH