जवाबों:
जैसा कि स्टीफ़न कहते हैं, "वहाँ है कि करने के लिए कोई सार्वभौमिक यूनिक्स जवाब है,"।
मेरे सवाल का सबसे अच्छा समाधान है:
df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'
फाइलसिस्टम प्रकार को लौटाएगा, उदाहरण के लिए: nfsया ext3।
-Tविकल्प नहीं है मानक , तो यह अन्य यूनिक्स / लिनक्स सिस्टम पर काम नहीं हो सकता है ...
के अनुसार गाइल्स नीचे 'टिप्पणी: "यह किसी भी गैर एम्बेडेड लिनक्स पर काम करता है, लेकिन नहीं बिजीबॉक्स पर, * BSD इत्यादि"
/etc/mtabके mountबजाय देखने या परिणाम dfकुछ और मामलों में कर सकते हैं।
/proc/mounts
mount, न ही /etc/mtab, यहां तक /proc/mountsकि मानक भी नहीं हैं , इसलिए वहां क्या हो सकता है, इस पर कोई गारंटी नहीं है ...
-Tयहाँ एक अलग अर्थ है
आप GNU का उपयोग कर सकते हैं stat।
%m माउंटपॉइंट का पता लगाने के लिए।
$ stat --format=%m /usr/src/linux
/usr/src
%T (फाइल-सिस्टम मोड में) फाइल सिस्टम का नाम पता करने के लिए।
$ stat --file-system --format=%T /usr/src/linux
reiserfs
इस प्रकार आप जानते हैं कि /usr/src/linux, मेरे सिस्टम पर, एक फाइलसिस्टम में संग्रहित किया जाता है, जिस पर फाइल की जाती है /usr/srcऔर उसमें फाइलसिस्टम टाइप होता है reiserfs।
man statआगे के संदर्भ के लिए भी देखें । यह एक बहुत ही बहुमुखी कमांड है, उपयोगी लगभग हमेशा जब आपको फ़ाइलों के बारे में जानकारी की आवश्यकता होती है और वापस grep | awkवार्डन के लिए नहीं गिरना चाहते हैं ।
statलिए %mविकल्प नहीं है --format(डेबियन स्क्वीज़, कोरुटिल्स 8.5 का उपयोग करके)। इसलिए, मुझे लगता है कि यह समाधान बहुत विश्वसनीय नहीं है।
2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file:। यह लगभग 3 साल पहले की बात है। कमाल है कि डेबियन के पास अभी भी यह नहीं है।
mount -lऔर उपयोग grep, sedया awkलाइन है कि प्रश्न में निर्देशिका को संदर्भित करता है खोजने के लिए।
/my/path/to/the/directoryवास्तव में /my/pathआपके उत्तर के साथ माउंटपॉइंट से कुछ है । हो सकता है कि grep, आप sed, awkआपके द्वारा सुझाए गए आदेशों (पूर्ण उत्तर) के बारे में कुछ और जानकारी दे सकते हैं ?
mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'आपको सिस्टम पर सभी nfs माउंटपॉइंट की एक सूची देनी चाहिए।
mount | fgrep "`stat --printf=" on %m type" /var/log/`". The माउंट 'कमांड <device> on <mountpoint> type <type>फॉर्मेट में सभी माउंट पॉइंट्स प्रिंट करेगा । इसे समझने के लिए, मैंने भाग stat --printfतैयार किया है on <mountpoint> type।
दुर्भाग्य से, इसका कोई सार्वभौमिक यूनिक्स उत्तर नहीं है।
एक चीज़ जो आप कर सकते हैं, किसी दिए गए फ़ाइल के /a/b/c/dलिए पथ चलना है:
... और परिवर्तन stat(2)होने तक प्रत्येक स्तर पर करते st_devहैं। फिर आपको पता चल जाएगा कि माउंट प्वाइंट कहां है। तब आप फ़ाइल सिस्टम प्रकार का पता लगाने /etc/mtabके mountलिए आउटपुट में या उस माउंट पॉइंट के कैनोनिकल पथ को देख सकते हैं। फिर यह पता लगाना कि क्या रिमोट है और क्या नहीं, खासकर फ्यूज-टाइप वालों के लिए मुश्किल होने वाला है। उदाहरण के लिए, nfs, cifs, fuse.sshfs, fuse.davfsस्पष्ट हैं, लेकिन क्या बारे में उदाहरण के लिए fuse.gvfs-fuse-daemonया fuse.avfsdकि दोनों नेटवर्क और गैर नेटवर्क फ़ाइलें हो सकती है?
stat(2), मुझे लगता है कि आप सी फ़ंक्शन का उल्लेख कर रहे हैं, लेकिन मैं शेल का उपयोग कर रहा हूं। हालांकि, st_devबड़ी और छोटी डिवाइस आईडी को संदर्भित करता है, और शेल कमांड (लिनक्स विशिष्ट? कि है) stat(1)है (गैर मानक) %tऔर %Tके साथ --formatक्रमश: बड़ी और छोटी संख्या के लिए विकल्प, लेकिन यह हमेशा "0" रिटर्न (स्थानीय और एनएफएस )। मैंने डेबियन स्क्वीज़ और लेनी पर कोशिश की।
--file-systemविकल्प के साथ या इसके बिना प्रयास कर रहे हैं ?
--file-system।
"-L" से df (1) गैर-स्थानीय फाइल सिस्टम पर एक त्रुटि के साथ विफल हो जाएगा, इसलिए आप इस व्यवहार का उपयोग यह जानने के लिए कर सकते हैं कि क्या फाइल सिस्टम दूरस्थ है:
df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
echo "local mount, do stuff"
fi
हालांकि, -lविकल्प मानक नहीं है ।
dfअसफल हो जाते हैं और अकेले यह एक बहुत अच्छा जवाब नहीं है, लेकिन यह सवाल का जवाब देने की कोशिश कर रहा है इसलिए मैं नहीं देखता कि आप इसे "उत्तर नहीं" क्यों कहेंगे।
आप df -tलिनक्स df -Tपर और बीएसडी सिस्टम पर उपयोग कर सकते हैं ।
से आदमी df :
-t, - टाइप = TYPE
टाइप टाइप की फाइल सिस्टम के लिए सीमा लिस्टिंग
if df -t nfs | grep -q /path/to/folder$; then
# it is an NFS
fi
मैं व्यक्तिगत रूप से उपयोग करूँगा mountpoint(लिनक्स पर बहुत पोर्टेबल!):
NAME
mountpoint - see if a directory is a mountpoint
SYNOPSIS
mountpoint [-d|-q] directory
या showmountजो किसी भी सिस्टम पर स्थापित होने के लिए बहुत अधिक आवश्यक है जो वास्तव में NFSशेयर माउंट करता है ( nfs-commonपैकेज का हिस्सा ):
NAME
showmount - show mount information for an NFS server
SYNOPSIS
showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]
एक अन्य विकल्प कुछ इस तरह होगा:
$ mount -l -t nfs | grep 'my mount point'
mountpointइस मामले में मानक है।
find . -type d -name nfs -exec mountpoint {} \; | grep not
यदि वे आरोहित हैं तो 'nfs' नाम के सभी फोल्डर की जाँच करेंगे
nfs।