* निक्स में, यह कैसे निर्धारित किया जाए कि कौन सी फाइलसिस्टम किसी विशेष फाइल पर है?


12

जेनेरिक, आधुनिक यूनिक्स वातावरण (जैसे, GNU / Linux, GNU / Solaris, या Mac OS X) में, यह निर्धारित करने का एक अच्छा तरीका है कि कौन सा माउंट पॉइंट और फाइल सिस्टम-टाइप एक विशेष निरपेक्ष फ़ाइल पथ पर है?

मुझे लगता है कि मैं कमांड को निष्पादित कर सकता हूं mountऔर मैन्युअल रूप से उस के आउटपुट को पार्स कर सकता हूं और इसे अपने फ़ाइल पथ के साथ तुलना कर सकता हूं, लेकिन इससे पहले कि मैं ऐसा करूं कि मैं सोच रहा हूं कि क्या कोई और अधिक सुंदर तरीका है।

मैं एक BASH स्क्रिप्ट विकसित कर रहा हूं जो विस्तारित विशेषताओं का उपयोग करती है, और इसे विभिन्न प्रकार के फाइल सिस्टम और होस्ट वातावरण के लिए Do The Right Thing (छोटी सीमा तक यह संभव है) बनाना चाहते हैं।

जवाबों:


19

कमांड df(1)एक या अधिक तर्क लेती है और माउंटपॉइंट और डिवाइस को वापस कर देगी, जिस पर वह फ़ाइल या निर्देशिका मौजूद है, साथ ही उपयोग की जानकारी भी। आप तब mount -vया इसी तरह के आउटपुट में फाइलसिस्टम प्रकार को देखने के लिए पथ या डिवाइस का उपयोग कर सकते हैं ।

दुर्भाग्य से, दोनों का आउटपुट स्वरूप dfऔर mountसिस्टम-निर्भर हैं; कोई स्पष्ट मानक नहीं है, कम से कम मैं सोलारिस, नेटबीएसडी और मैक ओएस एक्स के बीच देख सकता हूं।


1
df -Pकिसी भी POSIX आज्ञाकारी प्रणाली पर मानकीकृत उत्पादन का उत्पादन करना चाहिए। कुछ गॉफ़ियर सिस्टम को एक जादुई वातावरण चर की आवश्यकता हो सकती है, जैसे कि POSIXLY_CORRECT, साथ ही सेट किया जाना है।
दान मोल्डिंग

उदाहरण df /path-to-the-directoryआपको उस निर्देशिका का विभाजन प्रदान करेगा
हसनुज्जमान सत्तार

7

आप स्टेट का उपयोग कर सकते हैं । कमांड स्टेटम --printf '% d' filename.txt डिवाइस नंबर को हेक्स / दशमलव के रूप में लौटाएगा।


तो, उस पर डिवाइस का नाम आधार कैसे खोजें?
डेज़ी

आपको हालांकि सभी डिवाइस फ़ाइलों को / dev / में जाने की जरूरत है और एक ही माइनर नंबर के साथ एक को देखना होगा जैसा कि स्टेट रिपोर्ट करता है।
विस्लो हेरे

stat --printf "%d"आपको एक डिवाइस की मामूली संख्या बताता है, लेकिन डिवाइस का नाम और इसके माउंटेड फ़ाइल सिस्टम को प्राप्त करने के लिए और अधिक काम किया जाना है।
क्रेग मैकक्वीन

2
हो सकता है कि यह एक हालिया जोड़ हो लेकिन stat --format '%m' $fileआपको माउंट पॉइंट देगा, और stat --file-system --format '%T' $mountफ़ाइल सिस्टम प्रकार नाम प्रदान करेगा।
रोइमा

1
@TomHale: याद नहीं है, ईमानदार होना। लेकिन मुझे याद है कि यह काम नहीं किया। निश्चित रूप से मुझे डिस्ट्रो, कर्नेल संस्करण आदि के बारे में बताना चाहिए था, लेकिन आप इसे काम करते हुए बताते हैं, इसका मतलब यह भी हो सकता है कि यह इस बीच निश्चित हो गया है। यदि शुद्ध परिणाम यह है कि यह काम करता है, तो महान :)
0xC0000022L


2

हम्म। आरोह बिंदु के लिए, आप पदानुक्रम तक ऊपर जा सकते हैं जब तक कि st_dev बदल नहीं जाता (तब आपने सिर्फ एक माउंट बाउंड्री को पार किया है); statबैश स्क्रिप्ट के लिए GNU है ; हालाँकि, मुझे नहीं पता कि आप फ़ाइलसिस्टम प्रकार को बिना पार्स किए /proc/mountsया परीक्षण और त्रुटि के द्वारा अनुमान लगा सकते हैं (अर्थात विस्तारित एक्सटेंशन सेट करने के बाद विफलताएं संभालना)


2

उपयोग करने के साथ एक गट्टा dfयह है कि यदि आउटपुट में डिवाइस का नाम लंबा है तो यह लाइन लपेटेगा ताकि आप अंतिम लाइन को न पकड़ सकें। इसके बजाय पहली लाइन को स्ट्रिप करें और फिर नई पहली लाइन को पकड़ो और फिर पहली फील्ड को प्रिंट करें:

#!/usr/bin/env bash

path=$1
curdir=$(pwd)
cd $path
df . | tail -n +2 | head -1 | awk '{print $1}'
cd $curdir

3
POSIX प्रारूप में और लाइन-ब्रेकिंग के बिना आउटपुट प्राप्त करने के लिए 'df -P' का उपयोग करके इस गोच से बचें।
मिकीबी

2

ऐसा लगता है कि लिनक्स पर df और btrfs के साथ एक पकड़ है। जब आप माउंटेड btrfs वॉल्यूम के लिए आरोह बिंदु का पता लगाने के लिए df से पूछते हैं, तो यह सही काम करेगा। इस स्थिति में, joe / m / whale / backup की उप-निर्देशिका है।

# df /srv/backup/joe
Filesystem      1K-blocks      Used  Available Use% Mounted on
/dev/md126     2930135488 307676684 2619663252  11% /m/whale/backup

लेकिन अगर निर्देशिका को संदर्भित किया जा रहा है तो यह एक उप-आयतन है, यह आपको माउंट बिंदु और नहीं बताएगा।

# df /srv/backup/joe/code
Filesystem      1K-blocks      Used  Available Use% Mounted on
-              2930135488 307676684 2619663252  11% /a/whale/backup/joe/code

कर्नेल के अनुसार / a / व्हेल / बैकअप एकमात्र आरोह बिंदु है।

# mount | grep whale
/dev/md126 on /a/whale/backup type btrfs (rw,relatime,space_cache)

एफडब्ल्यूआईडब्ल्यू, स्टेट एक ही काम करता है:

# stat --printf '%m\n' /srv/backup/joe/code
/a/whale/backup/joe/code

1

से /programming/2167558/give-the-mount-point-of-a-path :

 df -P $path  | tail -1 | awk '{ print $NF}'

हर जगह मैंने काम किया है, दोनों के लिए * बीएसडी और sysVs, और निराला स्वचालित निर्देशिकाओं के लिए। मैं एक ऐसे मामले के बारे में सुनकर प्रसन्न होता हूँ जहाँ यह विफल हो जाता है।


1
सुझाया गया कोड df -P $ पथ | पूंछ -1 | awk '{$ $ NF}' सोलारिस के सभी संस्करणों (२.५.१, $, ९, और १०) में विफल रहता है क्योंकि सोलारिस का "df" "-२" विकल्प का समर्थन नहीं करता है।
पीटर जॉन एकलाम

@Peter: मैंने जितना सोचा था, मैं उससे कम खुश हूँ। लेकिन यह जानना दिलचस्प है कि समस्या nontrivial है। मुझे लगता है कि सही चीजें एक स्क्रिप्टिंग भाषा में एक कमांड लिखना है, जिसकी लाइब्रेरी ने समस्या को ठीक से हल किया है, उदाहरण के लिए, पायथन के पास os.path.splitunc () फ़ंक्शन है जो माउंट पॉइंट देता है और जिसे मैं सोलारिस पर काम करता हूं।
चार्ल्स स्टीवर्ट

@CharlesStewart: अफसोस की बात है कि पायथन में ऐसा कोई कार्य मेरी जानकारी में नहीं है। os.path.splitunc()केवल UNC रास्तों के लिए काम करता है और केवल विंडोज पर उपलब्ध है
१०:११
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.