यह निर्धारित करें कि क्या फाइल सिस्टम या विभाजन आरओ या आरडब्ल्यू को बैश स्क्रिप्ट के माध्यम से माउंट किया गया है?


37

क्या यह निर्धारित करने का एक आसान तरीका है कि क्या एक माउंटेड फाइल सिस्टम रीड-ओनली या रीड-राइट के रूप में माउंट किया गया है? मैं सिर्फ पाइप करने के लिए सोच रहा था mountलेकिन मुझे लगा कि एक आसान तरीका हो सकता है।


1
इसके लिए आदर्श प्रणाली कॉल वह होगा statvfsजो अन्य बातों के अलावा एक ध्वज फ़ील्ड के साथ एक ध्वज फ़ील्ड लौटाता है जो केवल पढ़ने के लिए माउंट को इंगित करता है। दुर्भाग्य से मुझे सीधे तौर पर ऐसा करने का कोई शेल कमांड नहीं पता है। मैंने इस्तेमाल किया होगा stat -f, लेकिन वह आदेश झंडे को छोड़कर सब कुछ दिखाता है।
कास्परड

2
नोट: जैसा कि @Travis कैंपबेल ने serverfault.com/a/277449/236916 पर अपनी टिप्पणी में स्पष्ट रूप से बताया है , mountहमेशा आपको यह नहीं बताता है कि आप क्या चाहते हैं: paraphrase के लिए, यह पढ़ता है /etc/mtab, जो डेटा का कैश्ड संस्करण है, और हो सकता है कुछ मामलों में पुराना हो। इस जानकारी में /proc/mountsहै कि आप वास्तव में क्या चाहते हैं।
mwfearnley

जवाबों:


50

यह एक छोटा-लाइनर कुछ पॉप-आउट करेगा यदि कोई आरओ फाइल सिस्टम मौजूद है।

grep "[[:space:]]ro[[:space:],]" /proc/mounts 

मान लें कि आपके पास ड्राइव में सीडी की तरह आमतौर पर एक आरओ फाइल सिस्टम नहीं है, यह कुछ बुनियादी निगरानी प्रकार के सामान के लिए पर्याप्त है और वर्तमान स्थिति को खोजने के लिए फाइल सिस्टम को बदलने की आवश्यकता नहीं है। यह आपके फ़ाइल सिस्टम प्रकार को भी नहीं मानता है। यदि आप अपनी सीडी को रिकॉर्ड से बाहर रखना चाहते हैं तो इसे grep -v iso9660 में पाइप करें।


1
मैं का इस्तेमाल किया था grep -P "\sro[\s,]" /proc/mountsयाgrep " ro[ ,]" /proc/mounts
Whiteknight

3
यह "थैंक्यू" फ़ाइल बनाने और बनाने की तुलना में बहुत बेहतर उत्तर है।
वाग्नेर

क्या यह केवल आपको उन विकल्पों के बारे में नहीं बताता जो माउंट करने के लिए उपयोग किए गए थे, वर्तमान स्थिति नहीं? उदाहरण के लिए विकल्पों के साथ एक प्रविष्टि ext4 rw,noatime,nobarrier,errors=remount-ro,data=ordered 0 0केवल एक त्रुटि की स्थिति में पढ़ने के लिए रीमाउंट करने के लिए सेट की गई है, इसलिए बिना जांच किए mountकि आपको पता नहीं है कि क्या रिमाउंट हुआ है, इसलिए यदि यह वास्तव में वर्तमान में है ro
1

वह मेरा अनुभव नहीं रहा।
झिलमिलाहट

3
मेरा आज बस एक ही था। यह आरओ में रूट फाइल-सिस्टम है, लेकिन जब इसे शुरू किया गया था तो यह आरडब्ल्यू था। $ grep "\sro[\s,]" /proc/mountsआउटपुट:/dev/mapper/root / ext4 ro,relatime,errors=remount-ro,user_xattr,acl,barrier=1,data=ordered 0 0
झिलमिलाहट

11

पुराना सवाल है, लेकिन मैं उसी मदद की तलाश में आया हूं और ऐसा लगता है कि फाइल बनाने की आवश्यकता के बिना और भी आसान तरीका मिल गया।

    [ -w /root-rw ] && echo "rw" || echo "ro"
    rw
    [ -w /root-ro ] && echo "rw" || echo "ro"
    ro

बेशक, रूट-आरओ आरओ माउंटेड एफएस है और रूट-आरडब्ल्यू आरडब्ल्यू एफएस है।


3
ऐसा लगता है कि फ़ाइल सिस्टम अनुमति का परीक्षण करता है, लेकिन माउंट की स्थिति नहीं।
रॉबर्ट कैलहॉन

1
सच है, लेकिन यह बहुत सरल है और कुछ मामलों (जैसे मेरा) के लिए काम कर सकता है।
येजो

से man dashके लिए -wविकल्प - 'फ़ाइल केवल पढ़ने के लिए फाइल सिस्टम इस परीक्षण सही का संकेत देता है, भले ही पर लिखने योग्य नहीं है।' AFAIK यह अन्य गोले के लिए समान है।
ग्रीम

7

यदि फ़ाइल सिस्टम आरोहित है, तो मैं एक अस्थायी निर्देशिका और एक फ़ाइल बनाने का प्रयास करूँगा। रिटर्न कोड आपको बताएगा कि फ़ाइल सिस्टम रीड-ओनली या रीड-राइट है या नहीं, बशर्ते कि फाइल सिस्टम पूर्ण न हो (धन्यवाद विलेम)।


1
यदि आप केवल यह देखने के लिए जाँच कर रहे हैं कि एक फाइलसिथम कैसे माउंट किया गया है, तो माउंट से आउटपुट प्राप्त करना पर्याप्त होना चाहिए। लेकिन मुझे सहमत होना होगा, यह जांचने का एक अधिक संपूर्ण तरीका है। ऐसे अवसर होते हैं कि माउंट रिपोर्ट कर सकता है कि यह पढ़ा / लिखा हुआ है, लेकिन वास्तव में केवल पढ़ने के लिए है। इसका एक सामान्य उदाहरण डिवाइस पर SCSI त्रुटियों की एक बड़ी संख्या है, जो इसे केवल पढ़ने के लिए जाने से बचाने के लिए है। एक फ़ाइल बनाने से एक संदेह के बिना केवल पढ़ने / लिखने / पढ़ने को सत्यापित किया जाएगा।
एलेक्स

1
यह साफ होगा:touch afile && { rm afile; echo "read-write"; } || echo "read-only"
ग्लेन जैकमैन 14

लिखित रूप में स्क्रिप्ट में एक दौड़ की स्थिति है। मैं mktemp -p /filesystem/of/interest/फ़ाइल और फ़ाइल नाम जनरेट करने के लिए 'afile' का उपयोग करने के बजाय FILE = का उपयोग करूंगा। सर्वश्रेष्ठ
रिक श्नाइडर

1
यह पूरी तरह से केवल-पढ़ने के लिए एक पूर्ण फ़ाइल सिस्टम की रिपोर्ट करेगा।
विलेम

@ डेविड, यह एक सच्चे समाधान के बजाय एक स्टॉपगैप हैक की तरह लगता है।
पचेरियर

4

मेरा बस यही मुद्दा था और ये असली अतीत हैं ...

पर एक नज़र डालें / proc / mounts -

egrep " ro,|,ro " /proc/mounts 
/dev/sda3 / ext4 ro,seclabel,relatime,barrier=1,data=ordered 0 0    
/dev/sda5 /var ext4 ro,seclabel,relatime,barrier=1,data=ordered 0 0

FYI करें - ये दो विभाजन आरडब्ल्यू के माउंट होने पर आरडब्ल्यू के घुड़सवार होने के रूप में दिखाते हैं।


2
यह काम नहीं करेगा यदि 'आरओ' एकमात्र माउंट विकल्प है
विलेम

3

एक झिलमिलाहट के जवाब के आधार पर, व्हाइटकनाइट की एक टिप्पणी से प्रभावित

एक डिटेक्टर समारोह मक्खी बनाएँ।

eval "function is_readonly () {
          $( grep -P "\sro[\s,]" /proc/mounts | awk '{print "if echo $1 | grep -q \""$2"\"; then return 0;fi"}' )
      return 1;}";    

यह निर्धारित करने के लिए इसका उपयोग करें कि क्या कोई पथ केवल fs पर है

is_readonly /path/to/file/on/read/only/fs && echo "sorry. can't delete that"

और जब किया तो उसका निस्तारण कर दिया

#dump temp function
unset -f is_readonly;


0

उदाहरण के लिए, यह जांचने के लिए कि रूट विभाजन रीड-ओनली मोड में है:

if [[ ! -z `mount | grep "on / type ext3 (ro,"` ]]
then
   echo "It's in read-only mode"
fi

2
यह सभी मामलों को नहीं पकड़ता है। / sbin / Mount वर्तमान में माउंट किए गए फ़ाइल सिस्टम के कैश्ड संस्करण (और उनके वर्तमान विकल्प) के लिए / etc / mtab को देखेगा। यदि / किसी कारण से आरओ को रिमूव करने का प्रबंधन करता है, तो mtab को सही ढंग से अपडेट नहीं किया जा सकता है, इसलिए / rw अभी भी दिखाई दे सकता है। / proc / mounts को हमेशा सही मान दिखाना चाहिए।
ट्रैविस कैंपबेल

1
मैं उपयोग / खरीद / आरोह की आवश्यकता से सहमत हूं। मुझे लगता है कि इस परीक्षण को एक शेल में कम किया जाना चाहिए (क्योंकि ओपी पूछता है कि) फ़ंक्शन जो सुनिश्चित करता है कि स्ट्रिंग को संदर्भित किया जा रहा है, दूसरे पथ का विकल्प नहीं है।
Skaperen

0

एंटोनियो के समान, आप एक ही काम करने के लिए / खरीद / mounts का उपयोग कर सकते हैं। Sda4 के स्थान पर अपनी स्वयं की ड्राइव का उपयोग करें।

cat / proc / mounts | grep / देव / sda4 | awk '{प्रिंट पदार्थ ($ 4,1,2)}'

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