एक फाइलसिस्टम के प्रारूप की जाँच कैसे करें


11

मैं एक बैश स्क्रिप्ट में, फ़ाइलसिस्टम टाइप डायरेक्टरी क्या है, इसकी जांच करना चाहूंगा।

विचार कुछ इस तरह है

if [path] is on a [filesystem] filesystem then
   filesystem specific command
end if

क्या आप माउंट बिंदु या फाइलसिस्टम प्रकार चाहते हैं? आपका वांछित आउटपुट क्या होगा?
terdon

जवाबों:


11

का उपयोग करें df। आप इसे एक रास्ता दे सकते हैं, और यह आपको उस रास्ते के लिए फाइल सिस्टम की जानकारी देगा। यदि आपको फ़ाइल सिस्टम प्रकार की आवश्यकता है -T, तो स्विच का उपयोग करें, जैसे:

$ df -T test
Filesystem     Type 1K-blocks     Used Available Use% Mounted on
/dev/sda2      ext4 182634676 32337180 141020160  19% /home

फाइलसिस्टम प्रकार निकालने के लिए, आप इसे पार्स कर सकते हैं ( यदि डिवाइस का भाग बहुत लंबा है तो ब्रेकिंग लाइनों -Pसे बचने के लिए स्विच का उपयोग करें df):

$ df -PT test | awk 'NR==2 {print $2}'
ext4

तो आप इस ifतरह से एक मूल्य का उपयोग कर सकते हैं :

if [ "$(df -PT "$path" | awk 'NR==2 {print $2}')" = "ext4" ] ; then
  it is an ext4 filesystem
fi

खबरदार कि डिवाइस कॉलम में रिक्त स्थान हो सकते हैं (लेकिन यह दुर्लभ है), जिस स्थिति में पार्सिंग विफल हो जाएगी।


12

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

stat -f -c %T filename

-fstatफ़ाइल के बजाय फ़ाइल-सिस्टम के बारे में जानकारी प्रदान करने के लिए कहता है, और -c %Tआउटपुट प्रारूप को केवल मानव-पठनीय फ़ाइल सिस्टम ( %T) शामिल करने के लिए सेट करता है ।

इसलिए आप इसका उपयोग (के रूप में) कर सकते हैं:

if [[ $(stat -f -c %T filename) == ext4 ]]; then
  # ext4 specific command
fi

man stat अधिक जानकारी प्रदान करेगा।


3

के साथ findmnt(का हिस्सा util-linux):

findmnt -no fstype -T /path/to/file

विकल्प का उपयोग करते समय

-टी, --टार्गेट पथ
यदि पथ माउंटपॉइंट फ़ाइल या निर्देशिका नहीं है, findmntतो माउंटपॉइंट प्राप्त करने के लिए रिवर्स ऑर्डर में पथ तत्वों की जांच करता है। अन्य दो विकल्प हेडर लाइन को दबाते हैं: -n, --noheadingऔर सूचीबद्ध होने के लिए कॉलम (एस) का चयन करें:-o, --output


dfसे coreutilsएक समान विकल्प --output=केवल कुछ क्षेत्रों को प्रिंट करने के लिए है, fstypeजैसे:

df --output=fstype /path/to/file

हालांकि हेडर को हटाने का कोई विकल्प नहीं है, इसलिए आपको आउटपुट को उदाहरण के लिए पाइप करना होगा | sed 1d


एक प्यारा findmntउपकरण, यहां तक ​​कि रेखा-ड्राइंग टीयूआई आउटपुट के साथ। धन्यवाद!
इंनिस मिस्सी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.