Respuestas:
Como Stephane dice "no hay una respuesta universal de Unix a eso".
La mejor solución que he encontrado para mi pregunta:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
devolverá el tipo de sistema de archivos, por ejemplo: nfso ext3.
La -Topción no es estándar , por lo que puede no funcionar en otros sistemas Unix / Linux ...
Según el comentario de Gilles a continuación: "Esto funciona en cualquier Linux no incorporado, pero no en BusyBox, * BSD, etc."
/etc/mtabo los resultados de en mountlugar de usar dfpodrían funcionar en algunos casos más.
/proc/mounts
mount, ni /etc/mtab, ni siquiera /proc/mountsson estándar, por lo que no hay garantía sobre lo que se puede encontrar allí ...
-Ttiene un significado diferente aquí
Podrías usar GNU stat.
%m para descubrir el punto de montaje.
$ stat --format=%m /usr/src/linux
/usr/src
%T (en modo de sistema de archivos) para averiguar el nombre del sistema de archivos.
$ stat --file-system --format=%T /usr/src/linux
reiserfs
Por lo tanto, sabe que /usr/src/linux, en mi sistema, está almacenado en un sistema de archivos que está montado /usr/srcy tiene el tipo de sistema de archivos reiserfs.
Consulte también man statpara más referencias. Es un comando muy versátil, útil casi siempre cuando necesita información sobre archivos y no desea volver a la grep | awkprotección.
statno tiene la %mopció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 -ly use grep, sedo awkpara buscar la línea que hace referencia al directorio en cuestión.
/my/path/to/the/directoryrealidad es algo desde el punto de montaje /my/pathcon su respuesta. Tal vez usted puede dar algunos detalles más sobre el grep, sed, awkcomandos 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, he stat --printfgenerado la on <mountpoint> typeparte.
Desafortunadamente, no hay una respuesta universal de Unix a eso.
Una cosa que puede hacer, para un archivo dado /a/b/c/des recorrer el camino:
... y hacer un stat(2)en cada nivel, hasta que los st_devcambios. Entonces sabrás dónde está el punto de montaje. Luego puede buscar la ruta canónica de ese punto de montaje en /etc/mtabo en la salida de mountpara 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.davfsson evidentes, pero ¿qué pasa, por ejemplo, fuse.gvfs-fuse-daemono fuse.avfsdque pueden tener los dos archivos de la red y fuera de la red?
stat(2), creo que te estás refiriendo a la función C, pero estoy usando shell. Sin embargo, se st_devrefiere a la identificación del dispositivo mayor y menor (¿es específico de Linux?), Y el comando de shell stat(1)tiene (no estándar) %ty %Tcon las --formatopciones para números mayores y menores respectivamente, pero siempre devuelve "0" (local y nfs ) Probé con Debian Squeeze y Lenny.
--file-systemopció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:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
dffallarí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".
Puede usar los df -tsistemas Linux y df -TBSD.
Del hombre df :
-t, --type = TYPE
limitar el listado a los sistemas de archivos de tipo TIPO
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
-topció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!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
o showmountque se requiere instalar en cualquier sistema que realmente monte recursos NFScompartidos (parte del nfs-commonpaquete):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
Otra opción sería algo así como:
$ mount -l -t nfs | grep 'my mount point'
mountpointutilidad 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, mountpointno es estándar (no está en esta lista ).
mountpointes estándar en este caso.
find . -type d -name nfs -exec mountpoint {} \; | grep not
comprobará todas las carpetas llamadas 'nfs' si están montadas
nfs.