जवाबों:
जैसा कि स्टीफ़न कहते हैं, "वहाँ है कि करने के लिए कोई सार्वभौमिक यूनिक्स जवाब है,"।
मेरे सवाल का सबसे अच्छा समाधान है:
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
।