एक स्क्रिप्ट के साथ एक फाइलसिस्टम माउंट होने पर कैसे जांचें


19

मैं स्क्रिप्टिंग में नया हूं ... मैं बहुत बुनियादी चीजें कर सकता हूं, लेकिन अब मुझे हाथ की जरूरत है।

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

मैं इसकी शुरुआत कर रहा हूं।

#!/bin/bash
export MOUNT=/myfilesystem

if grep -qs $MOUNT /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."; then
  mount $MOUNT;
fi

जैसा कि मैंने कहा, मैं स्क्रिप्टिंग में बहुत बुनियादी हूं। मैंने सुना है कि आप mountरिटर्न कोड को देखकर कमांड की स्थिति की जांच कर सकते हैं ।

RETURN CODES
       mount has the following return codes (the bits can be ORed):
       0      success
       1      incorrect invocation or permissions
       2      system error (out of memory, cannot fork, no more loop devices)
       4      internal mount bug
       8      user interrupt
       16     problems writing or locking /etc/mtab
       32     mount failure
       64     some mount succeeded

मुझे नहीं पता कि इसे कैसे जांचना है। कोई मार्गदर्शन?


2
; thenआपकी स्क्रिप्ट में एक मजेदार झूलना है।
मैट

हम क्यों MOUNT संस्करण का निर्यात कर रहे हैं और "?"
माइक क्यू

इसी तरह के सवाल सर्वर फाल्ट , स्टैक ओवरफ्लो और यूनिक्स और लिनक्स स्टैक एक्सचेंज पर हैं
साशा

जवाबों:


19

आप mountशेल विशेष पैरामीटर के साथ, और सबसे अच्छी तरह से लिखे गए निष्पादन की स्थिति कोड की जांच कर सकते हैं ?

से man bash:

? Expands to the exit status of the most recently executed foreground pipeline.

आपके द्वारा mountकमांड चलाने के बाद , तुरंत निष्पादित echo $?पिछले कमांड से स्टेटस कोड प्रिंट कर देगा।

# mount /dev/dvd1 /mnt
  mount: no medium found on /dev/sr0
# echo $?
  32

सभी निष्पादनों में अच्छी तरह से परिभाषित स्थिति कोड नहीं होते हैं। कम से कम, यह एक सफलता (0) या विफलता (1) कोड से बाहर निकलना चाहिए, लेकिन हमेशा ऐसा नहीं होता है।

आपके उदाहरण स्क्रिप्ट पर विस्तार (और सही) करने के लिए, मैंने ifस्पष्टता के लिए एक नेस्टेड निर्माण जोड़ा । यह स्थिति कोड का परीक्षण करने और कार्रवाई करने का एकमात्र तरीका नहीं है, लेकिन सीखने के दौरान पढ़ना सबसे आसान है।

#!/bin/bash
mount="/myfilesystem"

if grep -qs "$mount" /proc/mounts; then
  echo "It's mounted."
else
  echo "It's not mounted."
  mount "$mount"
  if [ $? -eq 0 ]; then
   echo "Mount success!"
  else
   echo "Something went wrong with the mount..."
  fi
fi

"बाहर निकलें और बाहर निकलने की स्थिति" के बारे में अधिक जानकारी के लिए, आप उन्नत बैश-स्क्रिप्टिंग गाइड का उल्लेख कर सकते हैं ।


1
निर्यात करने की कोई आवश्यकता नहीं है $MOUNT। यह स्क्रिप्ट भी टूट जाएगी यदि फाइलसिस्टम में कोई भी वर्ण है जो शब्दों के उच्चारण (रिक्त स्थान, आदि) से गुजरेगा। आपको हमेशा अपने विस्तार का उद्धरण देना चाहिए ।
क्रिस डाउन

@ क्रिसडाउन तुम सही हो। मैंने केवल स्पष्ट झूलने को हटा दिया '; फिर'। भविष्य में, इसे और अधिक सही बनाने के लिए मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें।
जॉर्ज एम

एर ... यह अभी भी टूट जाएगा। आपने अभी भी विस्तार को उद्धृत नहीं किया है। आपकी सलाह पर, मैं इसे अभी करूँगा।
क्रिस डाउन

मैं भी कुख्यात "उन्नत" बैश स्क्रिप्टिंग गाइड से जुड़ने की सिफारिश नहीं करूंगा, यह त्रुटियों से भरा है और लोगों को बग लिखने के लिए सिखाएगा, स्क्रिप्ट नहीं। बैशगाइड कहीं बेहतर विकल्प है।
क्रिस डाउन

2
@ क्रिसडाउन "यदि आप चीजों को ठीक से उद्धृत नहीं करते हैं तो शब्द विभाजन आपके बच्चों को खा जाएगा।" शब्दों से जीने के लिए।
जॉर्ज एम

36

कई लिनक्स डिस्ट्रोस के पास mountpointकमांड है। यह स्पष्ट रूप से जांचने के लिए उपयोग किया जाता है कि क्या निर्देशिका एक माउंटपॉइंट है। इस के रूप में सरल:

#!/bin/bash    
if mountpoint -q "$1"; then
    echo "$1 is a mountpoint"
else
    echo "$1 is not a mountpoint"
fi

1
यदि आप किसी एन-रूट उपयोगकर्ता द्वारा चलाए जा रहे हैं, तो यह दृष्टिकोण विफल हो जाएगा यदि आप एक एनएफ़सीफ़ की जांच करने की कोशिश करते हैं, क्योंकि आप एक अनुमति अस्वीकृत त्रुटि में ठोकर खाएंगे।
डेनिस एस।

मेरे समाधान encfs के साथ काम करता है।
थियोडोर आर। स्मिथ

3

एक और तरीका:

if findmnt ${mount_point}) >/dev/null 2>&1 ; then
  #Do something for positive result (exit 0)
else
  #Do something for negative result (exit 1)
fi

नमस्कार @sungtm; ऐसा प्रतीत होता है कि आपने एक नए, अलग खाते से लॉग इन किया है। चूंकि आपके "सन" खाते में बहुत अधिक गतिविधि नहीं है, इसलिए मेरा सुझाव है कि आप अपने नए "sungtm" खाते का उपयोग जारी रखें , क्योंकि यह अधिक सरल है। यदि, फिर भी, आप खातों को मर्ज करना चाहते हैं, तो मुझे इस टिप्पणी को चिह्नित करके बताएं और हम स्टैक एक्सचेंज टीम तक पहुंच जाएंगे। धन्यवाद!
जेफ स्कालर

ध्यान दें कि एनकोफ़्स के लिए, findmntपैरामीटर के साथ आपूर्ति की जानी चाहिए --source encfs, अन्यथा यह हमेशा निर्देशिका को माउंट करने पर विचार करेगा क्योंकि यह मूल माउंट पर वापस आ जाता है।
बर्कर्ट

2

सबसे आसान तरीका है जिसे रूट की आवश्यकता नहीं है:

if $(df | grep -q /mnt/ramdisk); then

fi

या यह देखने के लिए कि क्या यह माउंट नहीं है:

if ! $(df | grep -q /mnt/ramdisk); then

fi

mountआदेश रूट पहुँच की जरूरत नहीं है, dfडिस्क स्थान पर केंद्रित है पर ... अंक माउंट नहीं
फिलिप Gachoud

1

संक्षिप्त कथन

यदि घुड़सवार है तो जांचें :

mount|grep -q "/mnt/data" && echo "/mnt/data is mounted; I can follow my job!"

माउंट न होने पर जांच करें :

mount|grep -q "/mnt/data" || echo "/mnt/data is not mounted I could probably mount it!"

0

मैंने नीचे स्क्रिप्ट के साथ कोशिश की है

#!/bin/bash
echo "enter the file system to check whether its mounted or not"
read p
echo $p
for i in `cat /proc/mounts`
do
if [[ $p =~ $i ]]
then
echo "$p is mounted"
else
echo "$p is not mounted"
fi
done

केवल इनपुट जो आपको देने की आवश्यकता है, वह फाइल सिस्टम का नाम है

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