Yanıtlar:
As Stephane diyor "buna hayır evrensel Unix cevabı yoktur".
Soruma bulduğum en iyi çözüm:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
dosya sistemi türünü döndürür, örneğin: nfsveya ext3.
Bu -Tseçenek standart değildir , bu nedenle diğer Unix / Linux sistemlerinde çalışmayabilir ...
Gilles'un aşağıdaki yorumuna göre : "Bu, gömülü olmayan Linux'larda çalışır, ancak BusyBox, * BSD, vb."
/etc/mtabveya sonuçlarını görüntülemek bazı durumlarda daha iyi olabilir. mountdf
/proc/mounts
mount, ne de standart /etc/mtabbile değil /proc/mounts, bu yüzden orada bulunabilecekleri konusunda hiçbir garanti yok ...
-T
GNU’yu kullanabilirsiniz stat.
%m Bağlantı noktasını bulmak için.
$ stat --format=%m /usr/src/linux
/usr/src
%T (dosya sistemi modunda) dosya sisteminin adını bulmak için.
$ stat --file-system --format=%T /usr/src/linux
reiserfs
Böylece /usr/src/linux, benim sistemimde, üzerine kurulu /usr/srcve dosya sistemi türünde bir dosya sisteminde depolandığını biliyorsunuz reiserfs.
Ayrıca man statdaha fazla referans için bakınız . Çok yönlü bir komuttur, neredeyse her zaman dosyalar hakkında bilgiye ihtiyaç duyduğunuzda ve grep | awkservise geri dönmek istemediğinizde yararlıdır.
statyok . Yani, bu çözüm çok güvenilir değil sanırım. %m--format
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file. Neredeyse 3 yıl önceydi. Şaşırtıcı Debian hala buna sahip değil.
mount -lve kullanımı grep, sedya da awksöz konusu dizine başvuran satırı bulmak için.
/my/path/to/the/directoryaslında başlangıç noktasından bir şey olduğunu anlamak karmaşık görünüyor /my/path. Belki biraz daha ayrıntılı verebilir grep, sed, awksen (tam bir cevap) önermek komutları ?.
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'sistemdeki tüm nfs bağlantı noktalarının bir listesini vermelidir.
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The mount` komutu, tüm mount noktalarını <device> on <mountpoint> type <type>biçiminde basar . Bunu anlamak stat --printfiçin, on <mountpoint> typeparçayı ben oluşturdum .
Ne yazık ki, bunun için evrensel bir Unix cevabı yoktur.
Belirli bir dosya için yapabileceğiniz şeylerden biri /a/b/c/dyolu yürümek:
... değişinceye stat(2)kadar her seviyede bir a yapın st_dev. O zaman bağlama noktasının yerini bileceksiniz. Ardından , dosya sistemi türünü bulmak /etc/mtabiçin bu bağlama noktasının kurallı yolunu çıkışın içinde veya içinde mountbulabilirsiniz. Sonra neyin uzak olduğunu ve neyin olmayacağını özellikle sigorta tipi olanlar için zor olacağını keşfedin. Örneğin, nfs, cifs, fuse.sshfs, fuse.davfsortada, ama ne hakkında mesela fuse.gvfs-fuse-daemonya fuse.avfsdher iki ağ ve ağ dışı dosyaları olabilir?
stat(2), ben C fonksiyonunu refering, ancak ben kabuğu kullanıyorum düşünüyorum. Bununla birlikte, st_devbüyük ve küçük aygıt kimliğine atıfta bulunur (Linux belirli midir?) Ve shell komutunda stat(1)(standart dışı) %tve sırasıyla büyük ve küçük sayılar %Tiçin --formatseçenekler bulunur, ancak her zaman "0" (yerel ve nfs) döndürür. ). Debian Squeeze ve Lenny'yi denedim.
--file-systemseçeneği seçenekli veya seçeneksiz olarak mı deniyorsunuz ?
--file-system.
"-L" - df (1) yerel olmayan dosya sistemlerinde bir hatayla başarısız olur, bu nedenle dosya sisteminin uzak olup olmadığını bilmek için bu davranışı kullanabilirsiniz:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
Ancak, -lseçenek standart değildir .
dfbaşarısızlığa uğrayacağına dair başka birçok neden vardır ve bu tek başına bunu çok iyi bir cevap değildir, ancak soruyu cevaplamaya çalışıyor, bu yüzden neden "cevap değil" dediğini anlayamıyorum.
Sen kullanabilirsiniz df -tLinux ve df -TBSD sistemlerinde.
Gönderen adam df :
-t, --type = TİP
TYPE türündeki dosya sistemlerinde listeyi sınırlandır
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
-tseçeneğin POSIX / SUS'ta farklı bir anlamı vardır. Bu nedenle, bu seçeneğin kullanılması, araç / UNIX'teki farklı sürümlerde tutarsız sonuçlar verebilir.
Şahsen kullanırdım mountpoint(Linux'ta çok taşınabilir!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
ya showmountda gerçekte NFShisse senetlerini bağlayan herhangi bir sisteme kurulması zorunludur ( nfs-commonpaketin bir parçası ):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
Başka bir seçenek gibi bir şey olurdu:
$ mount -l -t nfs | grep 'my mount point'
mountpointprogram size bağlama noktasının uzak olup olmadığını söylemez. Ayrıca, uzak dosya sistemleri NFS dosya sistemleriyle sınırlı değildir. Son olarak, mountpointstandart değildir ( bu listede değil ).
mountpoint, bu durumda standart bir yöntemdir.
find . -type d -name nfs -exec mountpoint {} \; | grep not
eğer monte edilmişlerse 'nfs' adlı tüm klasörleri kontrol edecek
nfs.