স্ক্রিপ্টের সাথে কোনও ফাইল সিস্টেম মাউন্ট করা আছে কিনা তা কীভাবে পরীক্ষা করবেন


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আপনার স্ক্রিপ্টে একটি মজার ঝাঁকুনি আছে।
মাদুর

কেন আমরা মাউন্ট ভার্সেট রফতানি করছি এবং "" "অপসারণ করছি?
মাইক কিউ

অনুরূপ প্রশ্নগুলি সার্ভার ফল্ট , স্ট্যাক ওভারফ্লো এবং ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জে রয়েছে
সাশা

উত্তর:


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
@ ক্রিসডাউন "যদি আপনি জিনিসগুলি যথাযথভাবে উদ্ধৃত না করেন তবে শব্দ বিভাজন আপনার বাচ্চাগুলি খাবে।" কথার মধ্যে বেঁচে থাকা.
জর্জি এম

35

অনেক লিনাক্স ডিস্ট্রো-র mountpointকমান্ড রয়েছে। ডিরেক্টরিটি কোনও মাউন্টপয়েন্ট রয়েছে কিনা তা স্পষ্ট করে পরীক্ষা করতে ব্যবহার করতে পারেন। এই হিসাবে সহজ:

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

1
আপনি যদি কোনও এনএফএস চেক করার চেষ্টা করেন তবে এই পদ্ধতির ব্যর্থতা হবে, যেহেতু আপনি কোনও অ-রুট ব্যবহারকারী দ্বারা চালিত হওয়ার সময় কোনও অনুমতি অস্বীকৃত ত্রুটিতে আটকে যাবেন।
অস্বীকার করুন এস

আমার সমাধান এনএফএস দিয়ে কাজ করে।
থিওডোর আর স্মিথ

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

হ্যালো @ সুংটিএম; এটি প্রদর্শিত হয় আপনি একটি নতুন, পৃথক অ্যাকাউন্ট দিয়ে লগ ইন করেছেন। যেহেতু আপনার "সান" অ্যাকাউন্টটিতে খুব বেশি ক্রিয়াকলাপ নেই, তাই আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আপনার নতুন "সংঙ্গম" অ্যাকাউন্টটি ব্যবহার করা চালিয়ে যান , কারণ এটি সহজ। তবে, আপনি যদি অ্যাকাউন্টগুলিকে মার্জ করতে চান তবে এই মন্তব্যটি পতাকাঙ্কিত করে আমাকে জানান এবং আমরা স্ট্যাক এক্সচেঞ্জের দলে পৌঁছে যাব। ধন্যবাদ!
জেফ স্ক্যালার হলেন

নোট করুন যে এনএফএসের জন্য, findmntপ্যারামিটার সরবরাহ করতে হবে --source encfs, অন্যথায় এটি সর্বদা ডিরেক্টরিটিকে মাউন্ট হিসাবে বিবেচনা করবে কারণ এটি প্যারেন্ট মাউন্টে ফিরে আসে।
বুর্ক্ট

2

সবচেয়ে সহজ উপায় যা মূলের প্রয়োজন হয় না তা হ'ল:

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

fi

বা এটি মাউন্ট করা হয়নি কিনা তা দেখতে:

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

fi

mountকমান্ড root- র অধিকারপ্রাপ্ত প্রয়োজন নেই, 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

আপনার কেবলমাত্র ইনপুট দিতে হবে ফাইল সিস্টেমের নাম

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.