जांचें कि क्या फ़ोल्डर एक माउंटेड रिमोट फाइल सिस्टम है


44

यह जांचने के लिए सबसे अच्छा तरीका (विश्वसनीय, पोर्टेबल, आदि) क्या है कि किसी दिए गए फ़ोल्डर को शेल स्क्रिप्ट के भीतर माउंटेड रिमोट (nfs) फाइल सिस्टम पर है?

मैं एक ऐसी कमांड की तलाश में हूं, जो ऐसी दिखे:

chk-remote-mountpoint /my/path/to/folder 

जवाबों:


34

जैसा कि स्टीफ़न कहते हैं, "वहाँ है कि करने के लिए कोई सार्वभौमिक यूनिक्स जवाब है,"।

मेरे सवाल का सबसे अच्छा समाधान है:

df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'

फाइलसिस्टम प्रकार को लौटाएगा, उदाहरण के लिए: nfsया ext3

-Tविकल्प नहीं है मानक , तो यह अन्य यूनिक्स / लिनक्स सिस्टम पर काम नहीं हो सकता है ...

के अनुसार गाइल्स नीचे 'टिप्पणी: "यह किसी भी गैर एम्बेडेड लिनक्स पर काम करता है, लेकिन नहीं बिजीबॉक्स पर, * BSD इत्यादि"


1
यह किसी भी गैर-एम्बेडेड लिनक्स पर काम करता है, लेकिन बिजीबॉक्स, * बीएसडी, आदि पर नहीं। यह आपको तय करना है कि क्या यह पर्याप्त है।
गिल्स एसओ- बुराई को रोकना '

उपयोग करने /etc/mtabके mountबजाय देखने या परिणाम dfकुछ और मामलों में कर सकते हैं।
टीएनडब्ल्यू

1
@ टीएनडब्ल्यू या यहां तक ​​कि/proc/mounts
लाएबसेड

1
जाहिर है, न तो mount, न ही /etc/mtab, यहां तक /proc/mountsकि मानक भी नहीं हैं , इसलिए वहां क्या हो सकता है, इस पर कोई गारंटी नहीं है ...
Totor

1
यह OSX 10.8 पर काम नहीं करता है क्योंकि -Tयहाँ एक अलग अर्थ है
दावालपि

13

आप 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 का उपयोग करके)। इसलिए, मुझे लगता है कि यह समाधान बहुत विश्वसनीय नहीं है।
टॉटर

मुझे विश्वास नहीं था, लेकिन 8.5 और 8.13 (डेबियन व्हीज़) कोरुटिल्स के बीच अंतर कहता है कि आप सही हैं, हालांकि। मुझे बहुत आश्चर्यचकित करें :) निचोड़ अभी भी बहुत पुराना है :( गलती से, बहुत स्थिर
frostschutz

1
कोरुटिल्स चेंगलोग से 2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file:। यह लगभग 3 साल पहले की बात है। कमाल है कि डेबियन के पास अभी भी यह नहीं है।
19:30 पर फ्रॉस्ट्सचुटज़

भले ही 2011-02-06 को डेबियन स्क्वीज़ को रिलीज़ किया गया था, यह 2010-08-06 को जमे हुए था , इससे पहले कि यह कोरुटिल बदल जाए ... मैं संभव हो तो "मानक" समाधान ढूंढ रहा हूं।
टोटर

यदि आप पुरानी स्टेट में काम करते हैं, तो आप फ़ाइल-सिस्टम% T कमांड का उपयोग कर सकते हैं। यदि वह काम नहीं करता है और आपका स्टेटमेंट ऑफ़ स्टेटम आपको आवश्यक जानकारी प्रदान नहीं करता है, तो यह अजीब समाधान है।
फ्रॉस्ट्सचुट्ज़

4

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
MSalters

कई स्थानीय और दूरस्थ फ़ाइल सिस्टम माउंट प्रकार हैं। उन सभी का एक नक्शा होना चुनौतीपूर्ण हो सकता है। (उदाहरण के लिए, स्थानीय या दूरस्थ रूप से ड्रवफ़्स हैं?)
एरिक एरोनिटी

हां, लेकिन सवाल विशेष रूप से nfs के बारे में पूछता है: "माउंटेड रिमोट (nfs) फाइलसिस्टम"
jayhendren

2

दुर्भाग्य से, इसका कोई सार्वभौमिक यूनिक्स उत्तर नहीं है।

एक चीज़ जो आप कर सकते हैं, किसी दिए गए फ़ाइल के /a/b/c/dलिए पथ चलना है:

  • / एक / बी / सी /।
  • / एक / बी / सी / ..
  • /a/b/c/../ ..
  • ...

... और परिवर्तन stat(2)होने तक प्रत्येक स्तर पर करते st_devहैं। फिर आपको पता चल जाएगा कि माउंट प्वाइंट कहां है। तब आप फ़ाइल सिस्टम प्रकार का पता लगाने /etc/mtabके mountलिए आउटपुट में या उस माउंट पॉइंट के कैनोनिकल पथ को देख सकते हैं। फिर यह पता लगाना कि क्या रिमोट है और क्या नहीं, खासकर फ्यूज-टाइप वालों के लिए मुश्किल होने वाला है। उदाहरण के लिए, nfs, cifs, fuse.sshfs, fuse.davfsस्पष्ट हैं, लेकिन क्या बारे में उदाहरण के लिए fuse.gvfs-fuse-daemonया fuse.avfsdकि दोनों नेटवर्क और गैर नेटवर्क फ़ाइलें हो सकती है?


खैर, मैं यहाँ nfs का उपयोग कर रहा हूँ (मेरे प्रश्न का संपादन)। के रूप में stat(2), मुझे लगता है कि आप सी फ़ंक्शन का उल्लेख कर रहे हैं, लेकिन मैं शेल का उपयोग कर रहा हूं। हालांकि, st_devबड़ी और छोटी डिवाइस आईडी को संदर्भित करता है, और शेल कमांड (लिनक्स विशिष्ट? कि है) stat(1)है (गैर मानक) %tऔर %Tके साथ --formatक्रमश: बड़ी और छोटी संख्या के लिए विकल्प, लेकिन यह हमेशा "0" रिटर्न (स्थानीय और एनएफएस )। मैंने डेबियन स्क्वीज़ और लेनी पर कोशिश की।
Totor

क्या आप इस --file-systemविकल्प के साथ या इसके बिना प्रयास कर रहे हैं ?
ठंढकुट्ज़

@frostschutz बिना। यदि इसका उपयोग किया जाता है तो इसका एक और अर्थ है --file-system
टोटर

2

"-L" से df (1) गैर-स्थानीय फाइल सिस्टम पर एक त्रुटि के साथ विफल हो जाएगा, इसलिए आप इस व्यवहार का उपयोग यह जानने के लिए कर सकते हैं कि क्या फाइल सिस्टम दूरस्थ है:

df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
   echo "local mount, do stuff"
fi

हालांकि, -lविकल्प मानक नहीं है


इसका उत्तर नहीं है
Totor

@ क्यों नहीं? दी, वहाँ सभी अन्य प्रकार के कारण dfअसफल हो जाते हैं और अकेले यह एक बहुत अच्छा जवाब नहीं है, लेकिन यह सवाल का जवाब देने की कोशिश कर रहा है इसलिए मैं नहीं देखता कि आप इसे "उत्तर नहीं" क्यों कहेंगे।
terdon

@terdon मैं सहमत हूँ। मैंने ध्यान से नहीं पढ़ा। इस बारे में बताने के लिए शुक्रिया। मैं संपादित करता हूं और मतदान करता हूं। :)
टोटर

यह मूल रूप से केवल एक ही है जो लिनक्स पर मज़बूती से काम करता है।
एरिक एरोनिटी

1

df /pathआपको बताएगा कि /pathयह एक माउंट पॉइंट है यदि यह कहता है कि माउंट पॉइंट नहीं है /


1
प्रश्न दूरस्थ आरोह बिंदु को संदर्भित करता है ।
तोटर

1

बस करो

df /me/path/to/folder

यदि पहला फ़ील्ड (फाइलसिस्टम) प्रारूप होस्ट में है: / पथ तो आप जानते हैं कि यह एनएफएस है


0

आप df -tलिनक्स df -Tपर और बीएसडी सिस्टम पर उपयोग कर सकते हैं ।

से आदमी df :

-t, - टाइप = TYPE

टाइप टाइप की फाइल सिस्टम के लिए सीमा लिस्टिंग

if df -t nfs | grep -q /path/to/folder$; then
  # it is an NFS
fi

बहुत अच्छा। हालाँकि, और दुर्भाग्य से, -tविकल्प का POSIX / SUS में एक अलग अर्थ है। इसलिए, इस विकल्प का उपयोग उपकरण / UNIX पर विभिन्न संस्करणों में असंगत परिणाम प्रदान कर सकता है।
टॉटर

-2

मैं व्यक्तिगत रूप से उपयोग करूँगा 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'

1
mountpointउपयोगिता आपको बता नहीं है, तो बिंदु माउंट रिमोट है। इसके अलावा, दूरस्थ फाइल सिस्टम एनएफएस फाइल सिस्टम तक सीमित नहीं हैं। अंत में, mountpointमानक नहीं है ( इस सूची में नहीं )।
तोटर

आपने विशेष रूप से लिनक्स और एनएफएस पर एक उपकरण का अनुरोध किया है, mountpointइस मामले में मानक है।
मलत

यह वैसे भी मेरी पहली बात का जवाब नहीं है।
तोटर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.