¿Cuál es la mejor manera (confiable, portátil, etc.) de verificar si una carpeta determinada está en un sistema de archivos remoto montado (nfs) dentro de un script de shell?
Estoy buscando un comando que se vea así:
chk-remote-mountpoint /my/path/to/folder
linux
shell-script
filesystems
mount
Totor
fuente
fuente
/etc/mtab
o los resultados de enmount
lugar de usardf
podrían funcionar en algunos casos más./proc/mounts
mount
, ni/etc/mtab
, ni siquiera/proc/mounts
son estándar, por lo que no hay garantía sobre lo que se puede encontrar allí ...-T
tiene un significado diferente aquíPodrías usar GNU
stat
.%m
para descubrir el punto de montaje.%T
(en modo de sistema de archivos) para averiguar el nombre del sistema de archivos.Por lo tanto, sabe que
/usr/src/linux
, en mi sistema, está almacenado en un sistema de archivos que está montado/usr/src
y tiene el tipo de sistema de archivosreiserfs
.Consulte también
man stat
para más referencias. Es un comando muy versátil, útil casi siempre cuando necesita información sobre archivos y no desea volver a lagrep | awk
protección.fuente
stat
no tiene la%m
opción para--format
(usando Debian Squeeze, coreutils 8.5). Entonces, supongo que esta solución no es muy confiable.2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file
. Eso fue hace casi 3 años. Es sorprendente que Debian todavía no tenga esto.mount -l
y usegrep
,sed
oawk
para buscar la línea que hace referencia al directorio en cuestión.fuente
/my/path/to/the/directory
realidad es algo desde el punto de montaje/my/path
con su respuesta. Tal vez usted puede dar algunos detalles más sobre elgrep
,sed
,awk
comandos sugieres (una respuesta completa) ?.mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'
debería darle una lista de todos los puntos de montaje nfs en el sistema.mount | fgrep "`stat --printf=" on %m type" /var/log/`". The
comando mount` imprimirá todos los puntos de montaje, en<device> on <mountpoint> type <type>
formato. Para entender esto, hestat --printf
generado laon <mountpoint> type
parte.Desafortunadamente, no hay una respuesta universal de Unix a eso.
Una cosa que puede hacer, para un archivo dado
/a/b/c/d
es recorrer el camino:... y hacer un
stat(2)
en cada nivel, hasta que losst_dev
cambios. Entonces sabrás dónde está el punto de montaje. Luego puede buscar la ruta canónica de ese punto de montaje en/etc/mtab
o en la salida demount
para averiguar el tipo de sistema de archivos. Entonces descubrir qué es remoto y qué no será complicado, especialmente para los de tipo fusible. Por ejemplo,nfs
,cifs
,fuse.sshfs
,fuse.davfs
son evidentes, pero ¿qué pasa, por ejemplo,fuse.gvfs-fuse-daemon
ofuse.avfsd
que pueden tener los dos archivos de la red y fuera de la red?fuente
stat(2)
, creo que te estás refiriendo a la función C, pero estoy usando shell. Sin embargo, sest_dev
refiere a la identificación del dispositivo mayor y menor (¿es específico de Linux?), Y el comando de shellstat(1)
tiene (no estándar)%t
y%T
con las--format
opciones para números mayores y menores respectivamente, pero siempre devuelve "0" (local y nfs ) Probé con Debian Squeeze y Lenny.--file-system
opción?--file-system
.El "-l" a df (1) fallará con un error en sistemas de archivos no locales, por lo que puede usar este comportamiento para saber si el sistema de archivos es remoto:
Sin embargo, la
-l
opción no es estándar .fuente
df
fallaría y eso solo hace que esta sea una respuesta no muy buena, pero está tratando de responder la pregunta, así que no veo por qué la llamarías "no una respuesta".df /path
le dirá que/path
es un punto de montaje si dice que el punto de montaje no lo es/
.fuente
Solo haz
Si el primer campo (el Sistema de archivos) está en el formato host: / ruta, entonces sabe que es NFS
fuente
Puede usar los
df -t
sistemas Linux ydf -T
BSD.Del hombre df :
fuente
-t
opción tiene un significado diferente en POSIX / SUS. Por lo tanto, el uso de esta opción puede proporcionar resultados inconsistentes en diferentes versiones de la herramienta / UNIX.Yo personalmente usaría
mountpoint
(¡muy portátil en Linux!):o
showmount
que se requiere instalar en cualquier sistema que realmente monte recursosNFS
compartidos (parte delnfs-common
paquete):Otra opción sería algo así como:
fuente
mountpoint
utilidad no le dice si el punto de montaje es remoto. Además, los sistemas de archivos remotos no se limitan a los sistemas de archivos NFS. Finalmente,mountpoint
no es estándar (no está en esta lista ).mountpoint
es estándar en este caso.comprobará todas las carpetas llamadas 'nfs' si están montadas
fuente
nfs
.