Odpowiedzi:
Jak mówi Stephane „nie ma na to uniwersalnej odpowiedzi na Uniksa”.
Najlepsze rozwiązanie, jakie znalazłem w moim pytaniu:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
zwróci typ systemu plików, na przykład: nfslub ext3.
Ta -Topcja nie jest standardowa , więc może nie działać na innych systemach Unix / Linux ...
Zgodnie z komentarzem Gillesa poniżej: „Działa to na każdym niewbudowanym Linuksie, ale nie na BusyBox, * BSD itp.”
/etc/mtablub wyniki mountzamiast używania dfmoże zrobić w kilku innych przypadkach.
/proc/mounts
mount, ani /etc/mtabnawet nie /proc/mountssą standardowe, więc nie ma gwarancji, co tam można znaleźć ...
-Tma tutaj inne znaczenie
Możesz użyć GNU stat.
%m znaleźć punkt montowania.
$ stat --format=%m /usr/src/linux
/usr/src
%T (w trybie systemu plików), aby znaleźć nazwę systemu plików.
$ stat --file-system --format=%T /usr/src/linux
reiserfs
W ten sposób wiesz, że /usr/src/linuxw moim systemie jest przechowywany w systemie plików, który jest zamontowany /usr/srci ma typ systemu plików reiserfs.
Zobacz także w celu man statuzyskania dalszych informacji. To bardzo wszechstronne polecenie, przydatne prawie zawsze, gdy potrzebujesz informacji o plikach i nie chcesz wracać do grep | awkczujności.
statnie ma %mopcji dla --format(używając Debian Squeeze, coreutils 8.5). Myślę, że to rozwiązanie nie jest bardzo niezawodne.
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. To prawie 3 lata temu. Zadziwiające, że Debian wciąż tego nie ma.
mount -li użyj grep, sedlub, awkaby znaleźć wiersz, który odnosi się do danego katalogu.
/my/path/to/the/directorypochodzi z punktu montowania /my/path. Być może można dać trochę więcej szczegółów o grep, sed, awkpolecenia, które sugerują (pełną odpowiedź) ?.
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'powinien dać ci listę wszystkich punktów montowania nfs w systemie.
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The mount`, aby wydrukować wszystkie punkty montowania, w <device> on <mountpoint> type <type>formacie. Aby grep to, stat --printfwygenerowałem on <mountpoint> typeczęść.
Niestety nie ma na to uniwersalnej odpowiedzi na Uniksa.
Jedną rzeczą, którą możesz zrobić, dla danego pliku /a/b/c/djest przejście ścieżką:
... i rób stat(2)na każdym poziomie, aż do st_devzmian. Wtedy będziesz wiedział, gdzie jest punkt montowania. Następnie możesz wyszukać kanoniczną ścieżkę tego punktu montowania w /etc/mtablub na wyjściu, mountaby znaleźć typ systemu plików. Następnie sprawdzenie, co jest zdalne, a co nie, będzie trudne, szczególnie w przypadku bezpieczników. Na przykład nfs, cifs, fuse.sshfs, fuse.davfssą oczywiste, ale co na przykład fuse.gvfs-fuse-daemonlub fuse.avfsdktóre mogą mieć zarówno plików sieciowych i niesieciowych?
stat(2), myślę, że odwołujesz się do funkcji C, ale używam powłoki. Jednak st_devodnosi się do dużych i małych identyfikator urządzenia (jest to specyficzne dla Linuksa?), A polecenie shell stat(1)ma (niestandardowa) %ti %Tz --formatopcji dla odpowiednio dużych i małych ilościach, ale zawsze zwraca wartość „0” (lokalny i NFS ). Próbowałem na Debian Squeeze i Lenny.
--file-systemopcją lub bez ?
--file-system.
„-L” do df (1) zakończy się niepowodzeniem z błędem w nielokalnych systemach plików, więc możesz użyć tego zachowania, aby wiedzieć, czy system plików jest zdalny:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
Jednak -lopcja nie jest standardowa .
dfmiałoby się nie powieść, i to samo czyni z tego niezbyt dobrą odpowiedź, ale próbuje odpowiedzieć na pytanie, więc nie rozumiem, dlaczego nazwałbyś to „nie odpowiedzią”.
Możesz używać df -tw systemie Linux i df -TBSD.
Od man df :
-t, --type = TYPE
ogranicz listę do systemów plików typu TYPE
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
-topcja ta ma inne znaczenie w POSIX / SUS. Tak więc użycie tej opcji może zapewnić niespójne wyniki w różnych wersjach narzędzia / UNIX.
Osobiście użyłbym mountpoint(bardzo przenośny w systemie Linux!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
lub showmountktóry jest prawie wymagany do zainstalowania w dowolnym systemie, który faktycznie montuje NFSudziały (część nfs-commonpakietu):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
Inną opcją byłoby coś takiego:
$ mount -l -t nfs | grep 'my mount point'
mountpointNarzędzie nie powiedzieć, czy punkt montowania jest znikome. Ponadto zdalne systemy plików nie są ograniczone do systemów plików NFS. Wreszcie mountpointnie jest standardem (nie na tej liście ).
mountpointw tym przypadku jest to standard.
find . -type d -name nfs -exec mountpoint {} \; | grep not
sprawdzi wszystkie foldery o nazwie „nfs”, jeśli są zamontowane
nfs.