¿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?


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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.