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: nfs
veya ext3
.
Bu -T
seç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/mtab
veya sonuçlarını görüntülemek bazı durumlarda daha iyi olabilir. mount
df
/proc/mounts
mount
, ne de standart /etc/mtab
bile 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/src
ve dosya sistemi türünde bir dosya sisteminde depolandığını biliyorsunuz reiserfs
.
Ayrıca man stat
daha fazla referans için bakınız . Çok yönlü bir komuttur, neredeyse her zaman dosyalar hakkında bilgiye ihtiyaç duyduğunuzda ve grep | awk
servise geri dönmek istemediğinizde yararlıdır.
stat
yok . 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 -l
ve kullanımı grep
, sed
ya da awk
söz konusu dizine başvuran satırı bulmak için.
/my/path/to/the/directory
aslı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
, awk
sen (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 --printf
için, on <mountpoint> type
parç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/d
yolu 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/mtab
için bu bağlama noktasının kurallı yolunu çıkışın içinde veya içinde mount
bulabilirsiniz. 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.davfs
ortada, ama ne hakkında mesela fuse.gvfs-fuse-daemon
ya fuse.avfsd
her 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_dev
büyük ve küçük aygıt kimliğine atıfta bulunur (Linux belirli midir?) Ve shell komutunda stat(1)
(standart dışı) %t
ve sırasıyla büyük ve küçük sayılar %T
için --format
seçenekler bulunur, ancak her zaman "0" (yerel ve nfs) döndürür. ). Debian Squeeze ve Lenny'yi denedim.
--file-system
seç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, -l
seçenek standart değildir .
df
baş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 -t
Linux ve df -T
BSD 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
-t
seç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 showmount
da gerçekte NFS
hisse senetlerini bağlayan herhangi bir sisteme kurulması zorunludur ( nfs-common
paketin 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'
mountpoint
program 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, mountpoint
standart 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
.