Jaki jest najlepszy sposób (niezawodny, przenośny itp.), Aby sprawdzić, czy dany folder znajduje się w zamontowanym zdalnym systemie plików (nfs) w skrypcie powłoki?
Szukam polecenia, które wyglądałoby następująco:
chk-remote-mountpoint /my/path/to/folder
linux
shell-script
filesystems
mount
Totor
źródło
źródło
/etc/mtab
lub wynikimount
zamiast używaniadf
może zrobić w kilku innych przypadkach./proc/mounts
mount
, ani/etc/mtab
nawet nie/proc/mounts
są standardowe, więc nie ma gwarancji, co tam można znaleźć ...-T
ma tutaj inne znaczenieMożesz użyć GNU
stat
.%m
znaleźć punkt montowania.%T
(w trybie systemu plików), aby znaleźć nazwę systemu plików.W ten sposób wiesz, że
/usr/src/linux
w moim systemie jest przechowywany w systemie plików, który jest zamontowany/usr/src
i ma typ systemu plikówreiserfs
.Zobacz także w celu
man stat
uzyskania dalszych informacji. To bardzo wszechstronne polecenie, przydatne prawie zawsze, gdy potrzebujesz informacji o plikach i nie chcesz wracać dogrep | awk
czujności.źródło
stat
nie ma%m
opcji 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 -l
i użyjgrep
,sed
lub,awk
aby znaleźć wiersz, który odnosi się do danego katalogu.źródło
/my/path/to/the/directory
pochodzi z punktu montowania/my/path
. Być może można dać trochę więcej szczegółów ogrep
,sed
,awk
polecenia, 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 --printf
wygenerowałemon <mountpoint> type
część.Niestety nie ma na to uniwersalnej odpowiedzi na Uniksa.
Jedną rzeczą, którą możesz zrobić, dla danego pliku
/a/b/c/d
jest przejście ścieżką:... i rób
stat(2)
na każdym poziomie, aż dost_dev
zmian. Wtedy będziesz wiedział, gdzie jest punkt montowania. Następnie możesz wyszukać kanoniczną ścieżkę tego punktu montowania w/etc/mtab
lub na wyjściu,mount
aby 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ładnfs
,cifs
,fuse.sshfs
,fuse.davfs
są oczywiste, ale co na przykładfuse.gvfs-fuse-daemon
lubfuse.avfsd
które mogą mieć zarówno plików sieciowych i niesieciowych?źródło
stat(2)
, myślę, że odwołujesz się do funkcji C, ale używam powłoki. Jednakst_dev
odnosi się do dużych i małych identyfikator urządzenia (jest to specyficzne dla Linuksa?), A polecenie shellstat(1)
ma (niestandardowa)%t
i%T
z--format
opcji 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-system
opcją 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:
Jednak
-l
opcja nie jest standardowa .źródło
df
miał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ą”.df /path
powie ci, że/path
jest to punkt montowania, jeśli powie, że punkt montowania nie jest/
.źródło
Po prostu zrób
Jeśli pierwsze pole (system plików) ma format host: / ścieżka, to wiesz, że to NFS
źródło
Możesz używać
df -t
w systemie Linux idf -T
BSD.Od man df :
źródło
-t
opcja 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!):lub
showmount
który jest prawie wymagany do zainstalowania w dowolnym systemie, który faktycznie montujeNFS
udziały (częśćnfs-common
pakietu):Inną opcją byłoby coś takiego:
źródło
mountpoint
Narzędzie nie powiedzieć, czy punkt montowania jest znikome. Ponadto zdalne systemy plików nie są ograniczone do systemów plików NFS. Wreszciemountpoint
nie jest standardem (nie na tej liście ).mountpoint
w tym przypadku jest to standard.sprawdzi wszystkie foldery o nazwie „nfs”, jeśli są zamontowane
źródło
nfs
.