ডিরেক্টরি বাশ দিয়ে মাউন্ট করা হয়েছে কিনা তা পরীক্ষা করুন


95

আমি ব্যাবহার করছি

mount -o bind /some/directory/here /foo/bar

আমি /foo/barবাশ স্ক্রিপ্টের সাথে যাচাই করতে চাই , এবং এটি মাউন্ট করা হয়েছে কিনা তা দেখতে চাই? যদি তা না হয় তবে উপরের মাউন্ট কমান্ডটি কল করুন, অন্য কিছু করুন। কিভাবে আমি এটি করতে পারব?

CentOS অপারেটিং সিস্টেম।


"যদি [[$ (মাউন্ট-এল ... | fgrep ... | ডাব্লুসিএল-এল)]] এর মতো কিছু; তবে ..."
বোবাহ

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

উত্তর:


69

mountযুক্তি ছাড়াই কমান্ড চালনা আপনাকে বর্তমান মাউন্টগুলি বলবে। শেল স্ক্রিপ্ট থেকে, আপনি মাউন্ট পয়েন্ট grepএবং যদি একটি বিবৃতি দিয়ে পরীক্ষা করতে পারেন :

if mount | grep /mnt/md0 > /dev/null; then
    echo "yay"
else
    echo "nay"
fi

আমার উদাহরণস্বরূপ, যদি-বিবৃতিটি প্রস্থান করার কোডটি পরীক্ষা করে grepযা কোনও মিল ছিল কিনা তা বোঝায়। যেহেতু আমি চাই না যে কোনও মিল থাকলে আউটপুট প্রদর্শিত হয়, তাই আমি এটিকে পুনর্নির্দেশ করছি /dev/null


4
এটি কোনও স্ট্রিং দেয় কি না তা পরীক্ষা করে দেখার দরকার নেই। grepকোনও মিল না থাকলে একটি শূন্য-বহির্গমন স্থিতি ফিরিয়ে দেয়। পরীক্ষার প্রয়োজন নেই, বা $ () দ্বারা নির্মিত সাবশেল। if command | grep -q 'stuff'; then ...
জর্দানম

32
এটি মাউন্ট বাইন্ডের সাথে কাজ করে না এবং তাই উত্তর হিসাবে গ্রহণ করা উচিত নয়। এই উত্তরটি ভোট দেওয়া উচিত। mount | grep ...আপনার মাউন্ট বাইন্ডটি এখনও সক্রিয় তা আপনাকে দেখানোর উপর নির্ভর করতে পারবেন না । যদি অন্তর্নিহিত ডিভাইসটি আনমাউন্ট এবং পুনরায় মাউন্ট করা হয় তবে মাউন্ট বাইন্ডটি আসলে দুটি ফাইল / ডিরেক্টরি সংযুক্ত করবে না যদিও mountএখনও এটি সংযুক্ত রয়েছে তা দেখায়। এবং যদি আপনি umount ...এটি করেন তা আপনাকে বলবে যে এটি মাউন্ট করা হয়নি, যদিও mountএটি ছিল। লিনাক্স ফাইল সিস্টেমে বিশাল ত্রুটি।
দেব নুল

@ ডেভনুল: আপনি বর্ণনা করেছেন এমন সমস্যাটি আমি ঠিক করছি। এই সমস্যার কোন সমাধান?
আইজাক

@ ইসহাক, প্রতিক্রিয়া বিলম্বের জন্য দুঃখিত। আমি ব্যবহার করার চেষ্টা করব readlink -f, যা পথ / ফাইল উপস্থিত না থাকলে কিছুই ফিরিয়ে দেয় না। যদি অন্তর্নিহিত / মাউন্ট / পাথ / টুফাইলে না থাকে (প্রতি পঠন লিঙ্ক), অন্তর্নিহিত মাউন্টটি ভেঙে গেছে (অন্তর্নিহিত মাউন্ট এবং বাঁধাইয়ের পুনঃসারণ)। যদি অন্তর্নিহিত ফাইলটি সেখানে থাকে এবং readlink -fবলে যে সেই ফাইলটির বাইন্ডিং-সংস্করণটি নেই, তবে বাইন্ডিংটি ভেঙে গেছে, কেবলমাত্র বাঁধাইটিকে পুনরায় গণনা করুন।
দেব নুল

4
যদি কোনও মাউন্ট বলা হয় /mnt/md0xxxতাই কমান্ডটি /mnt/md0মাউন্ট হিসাবে চিহ্নিত হবে যখন এটি হওয়ার দরকার নেই ...
ডেভিড এল।

181

আপনি কোনও ও / এস উল্লেখ করতে বিরক্ত করেন নি।

উবুন্টু লিনাক্স ১১.১০ (এবং সম্ভবত লিনাক্সের সর্বাধিক আপ টু ডেট স্বাদ) এর mountpointকমান্ড রয়েছে।

আমার সার্ভারগুলির একটিতে এটি উদাহরণ:

$ mountpoint /oracle
/oracle is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint

আসলে, আপনার ক্ষেত্রে, আপনার এটি ব্যবহার করতে সক্ষম হওয়া উচিত -q বিকল্পটি :

mountpoint -q /foo/bar || mount -o bind /some/directory/here /foo/bar

আশা করি এইটি কাজ করবে.


7
আপনি 'মাউন্টপয়েন্ট' কমান্ডটি চালানোর সময় আসলে কিছু লাগিয়েছিলেন? এমনকি যদি এটা যদি না তা, একটি mountpoint হতে উদ্দেশ্যে এর আসলে কিছু মাউন্ট হয়েছে, এটা শুধু একটা ডিরেক্টরির না।
মার্ক জে বোবাক

4
+1, উবুন্টু 10.10 তেও কাজ করে। এটি 8.04 সাল থেকে উবুন্টুতে রয়েছে
l0b0


4
মাউন্টপয়েন্টটি উপস্থিত রয়েছে এবং
ডিবান

7
অন্য মন্তব্যে উল্লিখিত হিসাবে মাউন্টপয়েন্টটি বাঁধার মাউন্টগুলির সাথে কাজ করে না। স্নিপেটটি একাধিকবার
দিরকে

42

ম্যানুয়ালটি mountpointবলে যে এটি:

প্রদত্ত ডিরেক্টরি বা ফাইলটি / proc / স্ব / মাউন্টিনফো ফাইলটিতে উল্লেখ করা হয়েছে কিনা তা পরীক্ষা করে দেখুন।

ম্যানুয়ালটি mountবলে যে:

তালিকা মোডটি কেবল পিছিয়ে সামঞ্জস্যের জন্য বজায় রাখা হয়। আরও দৃust় এবং কাস্টমাইজযোগ্য আউটপুট জন্য সন্ধানকারী (8) ব্যবহার করুন, বিশেষত আপনার স্ক্রিপ্টগুলিতে।

সুতরাং সঠিক কমান্ডটি ব্যবহার করা হ'লfindmnt , যা নিজেই util-linuxপ্যাকেজের অংশ এবং ম্যানুয়াল অনুসারে:

/ etc / fstab, / etc / mtab বা / proc / self / Mountinfo এ অনুসন্ধান করতে সক্ষম

সুতরাং এটি আসলে চেয়ে বেশি জিনিস অনুসন্ধান করে mountpoint। এটি সুবিধাজনক বিকল্প প্রদান করে:

-এম, - মাউন্টপয়েন্ট পথ

মাউন্টপয়েন্ট ফাইল বা ডিরেক্টরিটি স্পষ্টভাবে সংজ্ঞায়িত করুন। --তারেটেও দেখুন।

সংক্ষেপে, কোনও ডিরেক্টরি বাশ দিয়ে মাউন্ট করা হয়েছে কিনা তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন:

if [[ $(findmnt -M "$FOLDER") ]]; then
    echo "Mounted"
else
    echo "Not mounted"
fi

উদাহরণ:

mkdir -p /tmp/foo/{a,b}
cd /tmp/foo

sudo mount -o bind a b
touch a/file
ls b/ # should show file
rm -f b/file
ls a/ # should show nothing

[[ $(findmnt -M b) ]] && echo "Mounted"
sudo umount b
[[ $(findmnt -M b) ]] || echo "Unmounted"

2

আমি যে উত্তরগুলি ব্যবহার /proc/mountsকরি তা পছন্দ করি তবে আমি সাধারণ গ্রেপ করা পছন্দ করি না। এটি আপনাকে মিথ্যা ইতিবাচক দিক দিতে পারে। তুমি কি সত্যিই জানতে চান "সারির কোনো ক্ষেত্র সংখ্যা 2 জন্য ঠিক এই স্ট্রিং আছে" হয়। সুতরাং, যে প্রশ্ন জিজ্ঞাসা করুন। (এই ক্ষেত্রে আমি পরীক্ষা করছি /opt)

awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts

# and you can use it in and if like so:

if awk -v status=1 '$2 == "/opt" {status=0} END {exit status}' /proc/mounts; then
  echo "yes"
else
  echo "no"
fi

4
এটি খুবই সুন্দর! আপনি একটি ছোট এমবেডেড সিস্টেমের জন্য অবশ্যই যা চান সেখানে চটকদার সরঞ্জামগুলির মতো mountpointবা findmntঅস্তিত্ব নেই। খুব সাধারণ জবাব, অনেক আনন্দ, যেমন ইউনিক্স :)
২g

1

আমার সমাধান:

is_mount() {
    path=$(readlink -f $1)
    grep -q "$path" /proc/mounts
}

উদাহরণ:

is_mount /path/to/var/run/mydir/ || mount --bind /var/run/mydir/ /path/to/var/run/mydir/

জন্য মার্ক জে Bobak এর উত্তর , mountpointযদি সঙ্গে মাউন্ট কাজ করে নাbind বিভিন্ন ফাইল সিস্টেম বিকল্পটি।

জন্য ক্রিস্টোফার Neylan এর উত্তর , এটা পুনর্নির্দেশ, grep এর আউটপুট করার দরকার নেই / dev / নাল শুধু ব্যবহার করতে grep -qপরিবর্তে।

সর্বাধিক গুরুত্বপূর্ণ, ব্যবহার করে পাথটিকে ক্যানোনিকালাইজ করুনreadlink -f $mypath :

  • যদি আপনি /path/to/dir/ব্যাকস্ল্যাশের সাথে শেষের মতো পাথটি পরীক্ষা করেন তবে পাথটি ইনপুট /proc/mountsবা mountআউটপুট/path/to/dir
  • সবচেয়ে লিনাক্স রিলিজে, /var/run/এর সিমবলিক লিঙ্ক হয় /run/, তাই যদি আপনার জন্য বেঁধে মাউন্ট /var/run/mypathএবং এটি যদি মাউন্ট করা, এটি হিসাবে প্রদর্শন করা হবে পরীক্ষা /run/mypathমধ্যে /proc/mounts

4
আমি মনে করি "গ্রেপ-কি" "$ পাথ" / প্রোক / মাউন্টস "(স্পেস সহ) আরও ভাল ... অন্যথায় যদি অ্যাবসি মাউন্ট করা থাকে তবে সত্যই ফিরে আসবে ?!
alfonx

0

আর একটি পরিষ্কার সমাধান এরকম:

$ mount | grep /dev/sdb1 > /dev/null && echo mounted || echo unmounted

নিশ্চিতভাবেই, প্রতিটি প্রতিবেদনের জন্য আপনার যা কিছু করা দরকার তা দ্বারা 'কিছু কিছু প্রতিধ্বনি' প্রতিস্থাপন করা যেতে পারে।


এটি @ ক্রিস্টোফেরনেইলানের উত্তর হিসাবে ঠিক একই জিনিস করছে।
জোনাথন এইচ

0

এখানে উত্তরগুলি খুব জটিল, মাউন্টটি ব্যবহার করে উপস্থিত রয়েছে কিনা তা পরীক্ষা করে দেখুন:

cat /proc/mounts | tail -n 1

এটি কেবলমাত্র সর্বশেষ মাউন্ট করা ফোল্ডারটিকে আউটপুট দেয়, আপনি যদি তাদের সমস্তটি দেখতে চান তবে কেবল টেল কমান্ডটি সরিয়ে ফেলুন।


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