¿Cómo obtener información del sistema de archivos para un archivo específico?

8

¿Cuál es la mejor manera de averiguar la información del sistema de archivos sobre un archivo?

Por ejemplo, si tengo un archivo

/media/xyz/path/to/file.ext

Y /etc/fstabcontiene

//server1/Share1 /media/xyz cifs option1=value1,...

¿Cómo puedo determinar que el archivo está en un recurso compartido de Samba, que tiene la ruta local /path/to/file.exty con qué opciones se montó el sistema de archivos?

¿Está analizando la salida de mountuna solución portátil? O analizar findmnt? ¿Hay alguna forma compatible con POSIX para lograr eso?

kba está con Monica
fuente
df /path/to/filedebería mostrar la partición o montaje.
thrig
Gracias @thrig, ese es el primer paso. ¿Cuál sería la mejor manera de obtener información como opciones de montaje desde allí?
kba está con Monica
En Linux, puedo analizar /proc/mounts. ¿Hay alguna forma compatible con BSD / OSX para lograr lo mismo?
kba está con Monica
solo mirando los archivos? no puedes! es decir, si la belleza de tipo Unix sistemas operativos, las aplicaciones pueden acceder a ellos mediante el uso de ruta independientemente de su ubicación física
Edward Torvalds
@edwardtorvalds No, no solo mirando los archivos, es por eso que pregunté sobre el análisis, mountetc. para obtener el sistema de archivos y las opciones, etc. Todavía no estoy seguro de la mejor manera de encontrar esta información en * BSD y OSX. No he tenido tiempo de trabajar en la biblioteca que requiere esto, pero recibiré comentarios una vez que lo haga. Por lo que vi, mount -Pparece bastante confiable en Linux / BSD.
kba está con Monica

Respuestas:

1

stat (1) es una forma portátil de encontrar parte de esta información, por ejemplo:

stat --file-system --format="%T" /media/xyz/path/to/file.ext

Todo lo demás es muy específico del sistema operativo, en sistemas Linux recientes que puede usar fácilmente findmnt --outputen un script.

Marco d'Itri
fuente
statTambién es os-específico.
don_crissti
0

Si entendí su necesidad correctamente, y combinando bits de respuestas anteriores, lo siguiente podría ser lo que necesita. definir en script (por ejemplo, en su .bashrc)

findpart ()
{
df -h $1|sed 1d|cut -d" " -f1|xargs findmnt -n
}

y luego puedes ejecutarlo según sea necesario

findpart /foo/file.ext
Gil Shabtai
fuente
findmntno necesita todas esas cosas, puede hacerlo todo por sí mismo
don_crissti
teóricamente sí. en la práctica, no pude hacer que -T funcione en centos 6, mientras que esta solución sí.
Gil Shabtai