información de montaje para el directorio actual

20

Puedo hacer df .para obtener parte de la información sobre el montaje en el que se encuentra el directorio actual, y puedo obtener toda la información que quiero mount, pero obtener mucha información (información sobre otras monturas). Puedo agotarlo, pero me pregunto si hay una mejor manera.

¿Hay algún comando mountinfotal que mountinfo .proporcione la información que quiero (como df ., pero con la información que mountproporciona)?


Estoy usando Debian Gnu + Linux.

ctrl-alt-delor
fuente
1
Creo que el statcomando también se puede usar. Sin embargo, no estoy seguro si la %mopción que proporciona el punto de montaje es compatible con su versión del sistema. Revisé mi sistema y parecía no devolver el punto de montaje.
Ramesh
1
@Ramesh, Yes stat "--printf=%m\n" .obtiene el punto de montaje del sistema de archivos en el que se encuentra el directorio actual. De este modo, podemos simplificar algunas de las respuestas. Gracias.
ctrl-alt-delor

Respuestas:

18

Creo que quieres algo como esto:

findmnt -T .

Al usar la opción

-T, - ruta de destino
si la ruta no es un archivo o directorio de punto de montaje, findmntverifica los elementos de la ruta en orden inverso para obtener el punto de montaje. Puede imprimir solo ciertos campos mediante -o, --output [list].
Consulte findmnt --helpla lista de campos disponibles.


Alternativamente, puede ejecutar:

(until findmnt . ; do cd .. ; done)

El problema con el que te encuentras es que todos los caminos son relativos a algo u otro, por lo que solo tienes que caminar por el árbol. Cada vez.

findmntes miembro del paquete util-linux y lo ha sido durante algunos años. Por ahora, independientemente de su distribución, ya debería estar instalada en su máquina Linux si también tiene la mountherramienta.

man mount | grep findmnt -B1 -m1
For  more robust and customizable output use
findmnt(8),  especially  in  your   scripts.

findmntimprimirá la información de todos los montajes sin un argumento de punto de montaje, y solo eso para su argumento con uno. La -Des la opción de emulacióndf . Sin -Dsu salida es similar a la de mount's, pero mucho más configurable. Intenta findmnt --helpver por ti mismo.

Lo pego en un subshell para que el directorio actual del shell actual no cambie.

Entonces:

mkdir -p /tmp/1/2/3/4/5/6 && cd $_ 
(until findmnt . ; do cd .. ; done && findmnt -D .) && pwd

SALIDA

TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw
SOURCE FSTYPE  SIZE   USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G 839.7M   11G   7% /tmp
/tmp/1/2/3/4/5/6

Si no tiene la -Dopción disponible (no en versiones anteriores de util-linux) , nunca debe temer, en cualquier caso, es poco más que un interruptor de conveniencia. Observe los encabezados de columna que produce para cada llamada; puede incluirlos o excluirlos para cada invocación con el -oconmutador de utput. Puedo obtener el mismo resultado que -Dpodría proporcionar como:

 findmnt /tmp -o SOURCE,FSTYPE,SIZE,USED,AVAIL,USE%,TARGET

SALIDA

SOURCE FSTYPE  SIZE  USED AVAIL USE% TARGET
tmpfs  tmpfs  11.8G  1.1G 10.6G  10% /tmp
mikeserv
fuente
Me gusta, excepto un poco -D, no tengo esa opción. (Estoy en Debian7, util-linux 2.20.1-5.3)
ctrl-alt-delor
Te √ en unos días, te dejaré un tiempo para ver si alguien tiene una respuesta más perfecta. Aunque esto es casi perfecto (si funcionó como df: no necesitaba el bucle, entonces sería perfecto).
ctrl-alt-delor
@richard, es una buena idea, no me gusta cuando las respuestas se aceptan demasiado pronto. con respecto al bucle y df, estoy dispuesto a apostar que lo hace, simplemente no tiene que decirle que lo haga.
mikeserv
1
Gracias a @ramesh también podemos hacerfindmnt $(stat "--printf=%m\n" .)
ctrl-alt-delor
2
Mi versión de findmnttiene una -Topción que puede evitar el cd ..bucle. Puede ser útil para alguien más.
nitrógeno
1

La forma de Linux / Unix es tener una caja de herramientas de pequeñas utilidades que, cuando se combinan, le brindan los resultados que busca.

Tienden a no tener una utilidad para cada ocasión. En cambio, tiene muchas pequeñas utilidades útiles que se combinan con tuberías, etc. La ventaja de esto es que puede escribir su propia utilidad con bastante facilidad si no hay ninguna disponible.

Por ejemplo, para obtener la información que busca, puede usar:

mount | grep $(df  --output=source . | tail -1)

Si desea reutilizar lo anterior con diferentes directorios, cree un script:

#!/bin/bash
mount | grep $(df  --output=source $1 | tail -1)

Guárdelo como mountinfoy hágalo ejecutable ( chmod +x mountinfo). Luego puede usarlo como:

mountinfo .

Si desea un sistema que tenga una utilidad para todo lo que no interactúa entre sí, entonces cierto Sr. Gates puede ayudarlo ;-)

garethTheRed
fuente
--outputsolo existe en versiones muy recientes de GNU coreutils (≥8.22).
Gilles 'SO- deja de ser malvado'
Esto es más o menos lo que he estado haciendo, es solo que mountsin opciones parece un poco pensado: con las opciones creas puntos de montaje, sin que los enumere, esperaba una mejor herramienta de lista. Como vemos, @mikeserv nos lo ha mostrado findmnt.
ctrl-alt-delor
1

Puede ser un poco complicado si los puntos de montaje contienen espacios en blanco, pero esto debería funcionar, excepto en los casos en que los puntos de montaje contengan nuevas líneas:

#!/bin/sh
mountpoint="$(df -P "$1" | awk '{
    if (NR==1)
        i=index($0,"Mounted on");
    else
        print substr($0,i);
    }')"
mount|grep " on ${mountpoint} type "

df -Pgenera una línea para el sistema de archivos; sin esa opción, dfpuede generar dos líneas si el punto de montaje es largo. El nombre del punto de montaje comienza en la misma columna que la etiqueta "Montado en" en la línea del encabezado.

Después de obtener el punto de montaje, lo buscamos en la salida de mount.

Mark Plotnick
fuente
1

No conozco un comando, pero podrías crear una función. Puede agregar lo siguiente a su .bashrc:

mountinfo () {
  mount | grep $(df -P "$1" | tail -n 1 | awk '{print $1}')
}

Esto ejecuta el mountcomando y pasa la salida a grep. grepbuscará el resultado de df -P "$1" | tail -n 1 | awk '{print $1}'y desglosarlo:

  • df -P "$1"se ejecutará dfen el argumento pasado a la función,
  • tail -n 1solo mostrará la segunda línea, la que contiene la partitioninformación.
  • awk '{print $1}'imprimirá la primera parte de esa línea, que es el número de disco / partición, por ejemplo /dev/sda5. Eso es lo grepque buscará en el comando mount y lo generará.

Obtenga su .bashrcarchivo para aplicar los cambios, o cierre la sesión y vuelva a iniciarla.

Ahora, si ejecuta mountinfo ., obtendrá la salida que desea.

Alaa Ali
fuente
Esto es más o menos lo que he estado haciendo (pero sin la función, no lo hago lo suficiente, cuando lo hago está en otros sistemas, por ejemplo, respuestas en este sitio), es solo que mountsin opciones parece un poco un pensamiento posterior: con las opciones de crear puntos de montaje, sin que los enumere, esperaba una mejor herramienta de lista. Como vemos, @mikeserv nos lo ha mostrado findmnt.
ctrl-alt-delor
0

Si usa una versión no completamente antigua de GNU coreutils df, entonces echo $(df . --output=target | tail -n 1)funciona. Del mismo modo stat -c '%m' ., aunque observo que https://linux.die.net/man/1/stat carece de documentación de la %mopción de formato.

Hacer esto de forma portátil es agotador: ninguno de los anteriores funcionará con las versiones BSD o Cygwin de stat o df. Si no fuera por la posibilidad de espacios en las rutas de los puntos de montaje, df -P . | tail -1 | awk '{ print $NF}'sería bueno, pero a menudo las unidades flash USB tienen espacios en el nombre del volumen, que probablemente aparecerán en la ruta de montaje y lo romperán. Para la portabilidad, Perl es instalable prácticamente en todas partes y CPAN tiene el módulo Sys :: Filesystem :: MountPoint que proporciona la funcionalidad deseada.

Charles Stewart
fuente
¿Puedes decirnos qué echo $()agrega al comando?
ctrl-alt-delor