GNU/Linux >> Tutoriales Linux >  >> Linux

Findmnt - Mejor manera de encontrar sistemas de archivos montados en Linux

He estado trabajando en un proyecto de secuencias de comandos bash para compilar automáticamente Linux desde cero. Cada vez que reviso el código, encuentro la manera de hacerlo más limpio. Tomo una pequeña sección de código y la mejoro.

El otro día estaba haciendo una modificación para comprobar si un sistema de archivos está montado antes de montarlo. Estaba buscando una mejor manera de hacerlo. No quería usar el montaje habitual | grep o cualquier código similar. Quería algo más limpio.

Montar vs Findmnt

No sé por qué, pero en ese momento me encontré preguntándome por qué me conecto a Internet con tanta frecuencia para encontrar información que ya está en mi computadora portátil. Entonces, enciendo mon mount, Rápidamente eché un vistazo a la página del manual y me di cuenta de esto:

Y ahí tuve mi respuesta. Primero, he estado usando el comando incorrecto por un tiempo. En segundo lugar, Google no siempre tiene la mejor respuesta.

La ironía aquí es que esto no se menciona en las páginas de manual en línea que suelo consultar. Compruébelo usted mismo, en la página man de mount, findmnt solo se menciona al final. Si hubiera utilizado mis canales habituales para encontrar una respuesta, no estaría escribiendo este artículo.

De inmediato me dio mucha curiosidad, cuánto mejor es este findmnt ? ¿Cuántas tuberías podré eliminar de mis scripts? Resulta que es mucho mejor que mount listado. Primero, comparemos la salida predeterminada de cada comando.

Montar salida predeterminada

Mirando la lista anterior de sistemas de archivos montados, es fácil ver por qué grep se volvió tan popular. Toda la información está ahí, pero un mejor formato facilitaría la lectura. Para lograr eso, ya necesitaría una tubería y un comando externo. Ahora echemos un vistazo a findmnt .

Salida predeterminada de Findmnt

Eso se ve mucho mejor. Se pone mejor, con findmnt ya no tendrás que usar una combinación de herramientas. Es muy flexible y eso le da la oportunidad de escribir un código más limpio cuando se usa en un script.

Uso práctico del comando findmnt en Linux

Comprobar si un sistema de archivos está montado con findmnt es mucho más fácil Puede buscar una fuente o objetivo sin utilizar ninguna opción. Proporcione un punto de montaje (objetivo ) o dispositivo (fuente ) sin opción y findmnt intentará hacer coincidir el argumento que proporcionaste contra ambos.

findmnt /boot

Findmnt realmente funciona como un comando de búsqueda para el sistema de archivos. Si se encuentran coincidencias, se imprimirán y findmnt devuelve 0. Cuando nada coincide con su consulta, findmnt no imprime nada y devuelve 1.

Una larga lista de opciones viene con findmnt . Tiene 2 categorías principales de opciones, restringiendo su búsqueda y formateando la salida.

Restringiendo su búsqueda

Me gusta buscar para buscar archivos, findmnt es para encontrar el sistema de archivos. Ya sabe cómo limitar su búsqueda al proporcionar una cadena que se comparará con SOURCE y TARGET. Si necesita limitar su búsqueda a una FUENTE o un OBJETIVO, use las opciones -S y -T.

Ya en este punto, estaba convencido de usar findmnt en lugar de montar . Puedo consultar la partición que quiero. Y no uso pipa. Findmnt no se detiene allí, tiene una multitud de opciones diseñadas para brindarle una búsqueda poderosa en el sistema de archivos.

Creo que una de las opciones más interesantes es -O , –opciones . El -O options le permite escribir una lista de opciones para hacer coincidir su búsqueda. Buscar un sistema de archivos de solo lectura ahora es tan fácil como findmnt -O ro.

El -O las opciones también pueden tomar una lista separada por comas. Esto le permite buscar en múltiples opciones y enumerar solo el sistema de archivos que tiene todas las opciones deseadas.

La búsqueda de un tipo de sistema de archivos determinado tampoco requiere el uso de herramientas externas. Simplemente use la -t opciones En el siguiente ejemplo, enumeré todos los tmpfs montar.

En todos los ejemplos anteriores, findmnt buscó /etc/fstab, /etc/mtab y /proc/self/mountinfo. Puede limitar fácilmente esta amplia búsqueda con las siguientes opciones:

  • –fstab (Búsqueda restringida a /etc/fstab solamente)
  • –mtab (Búsqueda restringida a /etc/mtab solamente)
  • –núcleo (Buscar en /proc/self/mountinfo solamente)

Otra opción interesante es -i , –invertir . Que invierten el sentido del emparejamiento. En un ejemplo anterior, enumeramos todos los tmpfs con la -t opción. El siguiente ejemplo enumerará todos los sistemas de archivos de tipo swap solo desde fstab.

findmnt --fstab -t swap

Éste listará todos los sistemas de archivos excepto cualquiera de tipo swap.

findmnt --fstab -t swap -i

Ya con las opciones dadas, puede evitar el uso de muchas tuberías y programas externos. Y no se detiene aquí. Buscar proporciona un buen conjunto de opciones para personalizar la salida de sus resultados de búsqueda.

Personalizar la salida del comando findmnt

No necesitará usar el comando principal para eliminar el encabezado. Simplemente llame a findmnt con -n opción:

No esperaba que la siguiente opción fuera siquiera una opción. Findmnt puede imitar la salida del comando df. Llamando a findmnt con -D o –df se lo dirá a findmnt para mostrar información sobre el espacio para cada sistema de archivos de la lista.

Las opciones se pueden combinar para una búsqueda más específica. En este siguiente ejemplo, uso findmnt para enumerar todo el sistema de archivos de /etc/fstab y solicitar mostrar información df.

findmnt --fstab --df

No sé ustedes, pero estoy empezando a disfrutar de findmnt . Excepto para aquellos UUID con el último comando. Lo entiendo, es una buena manera de identificar el dispositivo para el sistema operativo. Yo, me gustaría una forma más legible para los humanos. Esto se logra con la -e opción.

El -e o –evaluar opción con convertir todas las etiquetas como UUID, LABEL, PARTLABEL, PARTUUID al nombre del dispositivo correspondiente. Ver los resultados cuando ejecuto el mismo comando con -e opciones.

Me gusta la manera findmnt formatee su salida. Es más amigable para los humanos. Por otro lado, este formato cuando se usa en un script puede ser más difícil de manipular. Un conjunto de datos simple, línea por línea, separados por espacios sería más fácil. Esto se hace fácilmente con -r , –crudo opción.

Esta siguiente opción es realmente agradable. Creo que elimina la necesidad de | grep casi completamente. Puedes decirle a findmnt exactamente qué columna imprimir con -o , –salida . Estas opciones toman una lista de columnas separadas por comas para imprimir. Con el siguiente comando, puede obtener solo el espacio disponible de su partición raíz sin encabezados.

findmnt -T / --df -o AVAIL -n

Todo lo que tiene que hacer en sus guiones es eliminar el último carácter. En el comando anterior, di el –df opción. Eso no era necesario, se imprimirán los mismos resultados incluso sin esa opción.

Findmnt proporciona una lista bastante extensa de columnas de salida. Le proporciono a continuación una breve lista de columnas que creo que serán de su interés. Puede ver la lista completa con findmnt –help

  • Dispositivo fuente SOURCE
  • Punto de montaje OBJETIVO
  • Tipo de sistema de archivos FSTYPE
  • OPCIONES todas las opciones de montaje
  • Etiqueta del sistema de archivos LABEL
  • UUID del sistema de archivos UUID
  • MAJ:MIN mayor:número de dispositivo menor
  • SIZE tamaño del sistema de archivos
  • Tamaño de sistema de archivos AVAIL disponible
  • Tamaño del sistema de archivos UTILIZADO utilizado
  • Porcentaje de uso del sistema de archivos USE%
  • Raíz del sistema de archivos FSROOT

La lista predeterminada de columnas impresas se puede ampliar en lugar de reemplazar. Simplemente proporcione una lista usando el siguiente formato:+lista . El siguiente comando proporcionará la misma información que si se usara –df , excepto que las columnas se agregarán al final.

findmnt -T / -o +SIZE,USE%,AVAIL

Ya me estoy enamorando de findmnt . Esto me ahorrará muchas tuberías y largas líneas de comando. Y encontrar no se detiene allí. Hay una funcionalidad más de la que quiero hablar. Encuesta .

Sí, findmnt se puede usar para monitorear cambios en el archivo /proc/self/mountinfo. Esto le permite observar su sistema para detectar actividades relacionadas con el montaje. No más bucles while en scripts bash.

Buscar escuchará las siguientes acciones, montar , montar , volver a montar y mover . Puede limitar esto proporcionando una lista de acciones separadas por comas para escuchar. Por ejemplo, lo siguiente solo monitoreará el montaje del sistema de archivos.

En la imagen de arriba, ve el resultado impreso por findmnt cuando se montó una nueva partición. Observa la nueva columna ACCIÓN ? Con la –encuesta opción tiene 3 nuevas columnas que se pueden mostrar:

  • ACCIÓN:disponible para montar, desmontar, volver a montar y mover
  • OBJETIVO ANTIGUO:Disponible para acción de desmontar y mover.
  • OPCIONES ANTIGUAS:disponible para desmontar y volver a montar.

Cuando se usa en este modo, findmnt bloqueará, si se usa en una secuencia de comandos, la secuencia de comandos se "bloqueará". El momento en que –poll bloqueará y escuchará las acciones se puede limitar con 2 opciones

  • –solo en primer lugar :Findmnt se cerrará después de que se detecte la primera acción.
  • –tiempo de espera X :Findmnt se cerrará después de X milisegundos.

Cuando lo pones todo junto, findmnt es una herramienta poderosa. Cuando se usa en scripts, eliminará una gran cantidad de código adicional. La necesidad de canalizar a un comando externo ha disminuido considerablemente.

Las opciones enumeradas anteriormente también se pueden usar con –poll . En el siguiente ejemplo, findmnt escuchará una acción de montaje e imprimirá el SOURCE, TARGET, SIZE y USE %. Pero solo si el objetivo de montaje coincide con -T opciones.

findmnt -T /mnt/lfs --poll=mount -o SOURCE,TARGET,SIZE,USE%

Consejo adicional:ejemplo de la vida real de findmnt

He estado trabajando en un entorno basado en scripts de bash para compilar Linux desde cero desde hace un tiempo. Uso de findmnt en mis scripts dio como resultado un código mejor y más limpio.

Durante el inicio inicial de mi secuencia de comandos, compruebo si la partición LFS está montada, si no, las secuencias de comandos las montan. El código solía verse así:

if [[ `grep "$pd on $pm" < <(mount) | wc -l` < 1 ]]; 
then   
...   
... 
fi

El proyecto tiene fines educativos, es por eso que utilicé la sustitución de procesos y la canalización en la prueba anterior. A lo largo de mi código, muestro múltiples formas de hacer la misma tarea. Uso de findmnt Se me ocurrió una forma más limpia de hacer lo mismo.

findmnt -S $pd -T $pm > /dev/null || (
  ...
  ...
)

Redirijo la salida a /dev/null, no necesito tener findmnt salida impresa en la consola. Buscar devolverá 1 si la búsqueda falla, lo que hará que se ejecute el código dentro de (...).

Espero que hayas disfrutado y aprendido un nuevo comando. Si tiene un uso interesante para él, por favor comparta en los comentarios. También hay otra versión de este artículo:las búsquedas en línea no siempre son las mejores. Tendemos a olvidar que Linux viene con un manual.


Linux
  1. Use anacron para un mejor crontab

  2. 10 artículos para aprender Linux a tu manera

  3. csplit:una mejor manera de dividir archivos en Linux según su contenido

  4. Encontrar paquetes para Kali Linux

  5. ¿Es mejor un arranque dual o ejecutar una máquina virtual?

11 razones por las que Linux es mejor que Windows

Cómo enumerar los sistemas de archivos en Linux usando Lfs

Cómo encontrar el tipo de sistema de archivos montado en Linux

Una forma sencilla de enumerar enlaces simbólicos en Linux

¿Por qué Linux es tan malo y Windows 11 mejor en todos los sentidos?

Opciones de comando y ejemplos de Tee Command en Linux