scripts script programas pasar parametros español ejemplos comandos comando linux bash centos mount

linux - script - Compruebe si el directorio se montó con bash



scripts bash ejemplos (6)

estoy usando

mount -o bind /some/directory/here /foo/bar

Quiero verificar /foo/bar aunque con un script bash, y ver si ha sido montado? De lo contrario, llame al comando de montaje anterior, o haga otra cosa. ¿Cómo puedo hacer esto?

CentOS es el sistema operativo.


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

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

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


El manual de mountpoint dice:

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 para usar es findmnt , que es en sí mismo parte del paquete util-linux y, según el manual:

es capaz de buscar en / etc / fstab, / etc / mtab o / proc / self / mountinfo

Por lo tanto, en realidad busca más cosas que el punto de mountpoint . También proporciona la opción conveniente:

-M, --mountpoint path

Defina explícitamente el archivo o directorio de punto de montaje. Ver también --target.

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"


En mi .bashrc, hice el siguiente alias:

alias disk-list="sudo fdisk -l"


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 , el punto de mountpoint no funciona si se monta con la opción de bind 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 lugar.

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

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

No se molestó en mencionar un O / S.

Ubuntu Linux 11.10 (y probablemente los sabores más actualizados de Linux) tienen el comando mountpoint .

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 tu caso, deberías poder usar la opción -q , como esta:

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

Espero que ayude.


Otra solución limpia es así:

$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted

Por supuesto, ''echo something'' se puede sustituir por lo que sea necesario para cada caso.