मैं अपने वर्तमान कार्य निर्देशिका की fs प्रकार कैसे निर्धारित कर सकता हूं?


19

मुझे अपने CWD के माउंट प्रकार का पता लगाने के लिए एक प्लेटफ़ॉर्म-स्वतंत्र और हल्के तरीके की आवश्यकता है। विशेष रूप से, मुझे यह निर्धारित करने की आवश्यकता है कि क्या मेरा CWD SSHFS, NFS, CIFS, SMB, या स्थानीय ब्लॉक स्टोर माउंट में है।

मुझे मैक ओएसएक्स 10.6, 10.7 और आरएचईएल 5 (न्यूनतम पर) ऐसा करने की आवश्यकता है।

Df का उपयोग करने की संभावना है, लेकिन df इन दोनों प्लेटफार्मों पर काफी अलग व्यवहार करता है। इसके अलावा, मुझे सीएलआई को अपने आउटपुट को जाग के साथ परिमार्जन करना होगा, जो कि काम करने योग्य है ... नाजुक।

यह जानकारी कुछ स्तर पर उपलब्ध होनी चाहिए। क्या कोई ऐसा उपकरण है जिससे मैं अनभिज्ञ हूँ जो मुझे यह जानकारी प्रदान कर सके?

जवाबों:


17

फाइलसिस्टम प्रकार कुछ ऐसा नहीं है जिसे आप आसानी से ओएस-स्वतंत्र तरीके से एक्सेस कर सकते हैं। फाइलसिस्टम प्रकार के नाम ओएस पर निर्भर हैं, इसलिए मानक विधि स्थापित करने के लिए कोई प्रोत्साहन नहीं दिया गया है।

गैर-एम्बेडेड लिनक्स सिस्टम पर, stat -f -c %T .मौजूदा डायरेक्टरी के फाइलसिस्टम प्रकार को दिखाता है। OSX के statकमांड में ऐसा कुछ नहीं है।

चूँकि आप सभी जानना चाहते हैं कि क्या फाइलसिस्टम का प्रकार एक परिमित सूची में है, लिनक्स के अंतर्गत, आप सूचना के प्रिंट करने के लिए पथों के सेट और फाइलसिस्टम प्रकारों के सेट दोनों को सीमित कर सकते हैं। यदि वर्तमान निर्देशिका की फ़ाइल सिस्टम प्रकार सूची में नहीं है, तो आपको एक त्रुटि मिलेगी ("df: कोई फ़ाइल सिस्टम संसाधित नहीं")।

if df -t sshfs -t nfs -t cifs . >/dev/null 2>/dev/null; then …

OSX पर एक ही वाक्य रचना काम कर सकती है या नहीं भी; अगर यह नहीं है, कोशिश करो df -T sshfs,nfs,cifs .


मुझे ठीक इसी की आवश्यकता थी। गाइल्स तुम महान हो!
ARX

7

आप लिनक्स पर GNU स्टेट का उपयोग कर सकते हैं:

stat --file-system --format=%T /tmp/subdir/whatever
tmpfs

यह बहुत अच्छा है क्योंकि यह उपनिर्देशिकाओं पर काम करता है। धन्यवाद!
अवींद्र गोलचरण

4

लिनक्स पर उपयोग-लाइनक्स 2.18 के बाद से उपलब्ध है।

findmnt -n -o FSTYPE -T /home
nfs4

/ Home / subdir के लिए काम नहीं करता है, इसलिए यह ओपी की मदद नहीं करेगा।
एल्फ

मेरे लिए यह उपखंडों के लिए भी काम करता है, उपयोग-लाइनक्स 2.23 से फाइंडमाउंट का उपयोग करके।
रदिमीयर

3

इसका परीक्षण नहीं किया गया है, लेकिन df -Pअधिकांश प्लेटफार्मों पर एक ही व्यवहार करना चाहिए।

यह लिनक्स पर काम करता है।

$ mount | grep "^$(df -Pk . | head -n 2 | tail -n 1 | cut -f 1 -d ' ') " | cut -f 5 -d ' '

या इसे पुन: प्रयोज्य कार्यों में तोड़ना:

# get_mount <directory>
get_mount() {
    df -Pk "$1" | head -n 2 | tail -n 1 | cut -f 1 -d ' '
}

# get_fs <mountpoint>
get_fs() {
    mount | grep "^$1 " | cut -f 5 -d ' '
}

और फ़ंक्शन को कॉल कर रहा है:

get_fs $(get_mount .)

का उपयोग कर sedया तो थोड़ा तेज होने के लिए फिर से लिखा जा सकता है awk, लेकिन इस तरह से शायद पढ़ने में आसान है।

यदि यह काम नहीं करता है, तो आप इसके /etc/mtabउत्पादन के बजाय कुछ इसी तरह की कोशिश कर सकते हैं mount


Pमें df -P, POSIX के लिए है, इसलिए यह उसी तरह से व्यवहार करना चाहिए। हालाँकि, फ़ाइल सिस्टम पथ से आरोह बिंदु तक पहुँचना अधिक फ़िज़ूल है।
गिलेस एसओ- बुराई को रोकना '

1
यदि निर्देशिका -o लूप के साथ आरोहित होती है तो आपका समाधान सुरक्षित नहीं लगता है। कम से कम मेरे सिस्टम df में उपयोग किए गए लूप डिवाइस को दिखाता है लेकिन माउंट उपयोग की गई छवि फ़ाइल को दिखाता है। मुझे लगता है कि ऐसे और भी मामले हो सकते हैं जहां df माउंट की तरह एक ही डिवाइस नहीं दिखाता है। माउंट के मैन पेज से इस उद्धरण पर ध्यान दें "लिस्टिंग मोड केवल पिछड़ी संगतता के लिए बनाए रखा गया है। अधिक मजबूत और निश्चित आउटपुट के लिए, विशेष रूप से आपकी स्क्रिप्ट्स में खोज (8) का उपयोग करें।"
rudimeier
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.