Estoy buscando una manera rápida de encontrar el punto de montaje del sistema de archivos que contiene un ARCHIVO dado. ¿Hay algo más simple o más directo que mi solución a continuación?
df -h FILE |tail -1 | awk -F% '{print $NF}' | tr -d ' '
Una pregunta similar " ¿Hay un comando para ver dónde está montado un disco? " Utiliza el nodo del dispositivo del disco actual como entrada, y no un archivo arbitrario del disco ...
shell
filesystems
mount
Stu
fuente
fuente
tr
llamada final usandoawk -F'% '...
Respuestas:
Podrías hacer algo como
o incluso
Dado que se
awk
divide en espacios en blanco de forma predeterminada, no es necesario especificar el-F
y tampoco es necesario recortar el espacio en blancotr
. Finalmente, al especificar el número de línea de interés (NR==2
) también puede eliminarlotail
.fuente
-P
derecho? En todos los casos, el último campo impreso porawk
debería ser el disco.-P
opción que Gilles acaba de agregar.-P
. Sin embargo, recomiendo usar siempre-P
cuando esté analizando la salida dedf
, es más fácil que verificar que este uso en particular sea seguro.mount | grep " on $(df -P ${FILE} | awk 'END{print $NF}') type" | awk '{print $1}'
En GNU / Linux, si tiene GNU
stat
de coreutils 8.6 o superior, puede hacer lo siguiente:De otra manera:
Su enfoque es válido, pero supone que el punto de montaje no contiene espacios,%, nueva línea u otros caracteres no imprimibles, puede simplificarlo ligeramente con las versiones más nuevas de GNU
df
(8.21 o superior):fuente
df
no reconoce la--output
opción.df
> = 8.21.Para Linux tenemos findmnt de util-linux hecho exactamente para esto
Tenga en cuenta que se puede devolver algún tipo de punto de montaje aleatorio en caso de que haya varios montajes de enlace. Usar
df
tiene el mismo problema.fuente
Como
stat
devuelve un campo "Dispositivo", tenía curiosidad por ver cómo lastat()
llamada a la biblioteca subyacente podría usarse para obtener esta información mediante programación de una manera compatible con POSIX.Este fragmento de código C:
Le dará las ID de los dispositivos principales y secundarios para el dispositivo que contiene el archivo que figura en la línea de comando (
argv[1]
). Desafortunadamente,major()
yminor()
no son POSIX, aunque la página del manual afirma que están "presentes en muchos otros sistemas" además de GNU / linux.A continuación, puede obtener una correspondencia entre el número mayor / menor del dispositivo y el nodo del dispositivo, por ejemplo
/proc/diskstats
, y asignarlo para montar puntos desde/proc/mounts
, también conocido como./etc/mtab
.Entonces, una utilidad de línea de comandos para hacer esto sería bastante simple.
fuente
/proc/diskstats
es solo para dispositivos de bloque, perderá el NFS, el proceso, el fusible ... Al menos en Linux, diferentes puntos de montaje pueden tener el mismo maj + minst_dev
no puede proporcionar una manera de distinguir una partición NFS de otra. Quien realmente quiera escribir esto tendrá que tenerlo en cuenta;)Aquí hay más código de C ++ si desea hacer esto desde C ++ ...
Más enlaces para formas programáticas
fuente