ফোল্ডারটি মাউন্ট করা দূরবর্তী ফাইল সিস্টেম কিনা তা পরীক্ষা করুন


44

শেল স্ক্রিপ্টের মধ্যে কোনও প্রদত্ত ফোল্ডার মাউন্ট করা রিমোট (এনএফএস) ফাইল সিস্টেমের মধ্যে রয়েছে কিনা তা যাচাই করার সর্বোত্তম উপায় (নির্ভরযোগ্য, পোর্টেবল, ইত্যাদি) কী?

আমি এমন একটি কমান্ড খুঁজছি যা এরকম দেখতে পাবে:

chk-remote-mountpoint /my/path/to/folder 

উত্তর:


34

স্টিফেন যেমন বলেছিলেন যে "এর কোনও সর্বজনীন ইউনিক্সের উত্তর নেই"।

আমার প্রশ্নের সেরা সমাধানটি আমি খুঁজে পেয়েছি:

df -P -T /my/path/to/folder | tail -n +2 | awk '{print $2}'

ফাইল সিস্টেমের ধরণটি প্রদান করবে, উদাহরণস্বরূপ: nfsবা ext3

-Tবিকল্প নয় মান , তাই এটি অন্য ইউনিক্স / লিনাক্স অপারেটিং সিস্টেমে কাজ নাও করতে পারে ...

গিলসের নীচে মন্তব্য অনুসারে : "এটি কোনও এমবেডেড লিনাক্সে কাজ করে না, তবে ব্যাসিবক্স, * বিএসডি ইত্যাদিতে নয়" "


1
এটি কোনও অ-এমবেডেড লিনাক্সে কাজ করে তবে ব্যাসিবক্স, * বিএসডি ইত্যাদিতে নয়। এটি যথেষ্ট ভাল কিনা তা সিদ্ধান্ত নেওয়া আপনার পক্ষে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

ব্যবহারের পরিবর্তে দেখার /etc/mtabবা ফলাফল দেখার ফলাফল আরও কিছু ক্ষেত্রে করতে পারে। mountdf
TNW

1
@ টিএনডাব্লু বা এমনকি/proc/mounts
ল্যাবশেড

1
স্পষ্টতই, উভয়ই mountবা নাও /etc/mtab, এমনকি /proc/mountsমানসম্পন্ন নয় তাই সেখানে কী পাওয়া যাবে তার কোনও গ্যারান্টি নেই ...
টোটার

1
এটি OSX 10.8 এ কাজ করে না কারণ -Tএখানে আলাদা অর্থ রয়েছে
ডেভএলপিআই

13

আপনি জিএনইউ ব্যবহার করতে পারেন stat

%m মাউন্টপয়েন্ট খুঁজে পেতে।

$ stat --format=%m /usr/src/linux
/usr/src

%T (ফাইল-সিস্টেম মোডে) ফাইল সিস্টেমের নাম জানতে।

$ stat --file-system --format=%T /usr/src/linux
reiserfs

সুতরাং আপনি জানেন যে /usr/src/linux, আমার সিস্টেমে এমন একটি ফাইল সিস্টেমে সঞ্চিত আছে যা মাউন্ট করা থাকে /usr/srcএবং এতে ফাইল সিস্টেমের ধরণ থাকে reiserfs

এছাড়াও পড়ুন man statআরও রেফারেন্সের জন্য। এটি একটি বহুমুখী কমান্ড, প্রায়শই কার্যকর যখন আপনার ফাইল সম্পর্কিত তথ্য প্রয়োজন হয় এবং grep | awkওয়ার্ডনেসে ফিরে যেতে চান না ।


আমার সংস্করণ statনেই %mজন্য বিকল্প --format(ডেবিয়ান কুঈজ ব্যবহার করে, coreutils 8.5)। সুতরাং, আমি অনুমান করি যে এই সমাধানটি খুব নির্ভরযোগ্য নয়।
টোটার

আমি এটি বিশ্বাস করি নি, তবে কোর্টিলস 8.5 এবং 8.13 (ডেবিয়ান হুইজি) এর মধ্যে পার্থক্য জানিয়েছে আপনি ঠিক বলেছেন, যদিও। আমাকে খুব অবাক করে বিবেচনা করুন:
স্কুইজটি

1
coreutils থেকে পরিবর্তণের: 2010-08-27 <Aaron Burgemeister> stat: add %m to output the mount point for a file। সেটা প্রায় years বছর আগের কথা। আশ্চর্যজনক যে ডেবিয়ানের এখনও এটি নেই।
frostschutz

এমনকি 2011-02-06 এ যদি দেবিয়ান স্কুইজ মুক্তি পেয়েছিল তবে এই কোর্টিলগুলি পরিবর্তনের আগে এটি 2010-08-06 এ হিমায়িত হয়েছিল ... আমি বরং সম্ভব হলে একটি "স্ট্যান্ডার্ড" সমাধানের সন্ধান করছি।
টোটার

ঠিক আছে, আপনি কেবল ফাইল-সিস্টেম% T কমান্ডটি ব্যবহার করতে পারেন, যদি এটি পুরানো স্ট্যাটে কাজ করে। যদি এটি কোনওরূপে কার্যকর না হয় এবং আপনার স্ট্যাটাসের সংস্করণটি আপনার প্রয়োজনীয় তথ্য সরবরাহ না করে তবে এটির বিশ্রী সমাধান back
frostschutz

4

mount -lএবং ব্যবহার করুন grep, sedবা awkপ্রশ্নে ডিরেক্টরি উল্লেখ করে এমন লাইনটি সন্ধান করুন।


এটি আপনার জবাবের সাথে /my/path/to/the/directoryমাউন্টপয়েন্ট থেকে আসলে কিছু মনে করা জটিল মনে হচ্ছে looks /my/pathহতে পারে আপনি সম্পর্কে আরো কিছু বিবরণ দিতে পারেন grep, sed, awkআপনার প্রস্তাবিত কমান্ড (সম্পূর্ণ উত্তর) ?.
টোটার

mount -l | grep 'type nfs' | sed 's/.* on \([^ ]*\) .*/\1/'আপনাকে সিস্টেমের সমস্ত nfs মাউন্টপয়েন্টগুলির একটি তালিকা দেওয়া উচিত।
অ্যান্ডি শুলমান

এটি স্ট্যাট এর সাথে একত্রিত হতে পারে: mount | fgrep "`stat --printf=" on %m type" /var/log/`". The মাউন্ট` কমান্ডটি সমস্ত মাউন্ট পয়েন্টগুলি, <device> on <mountpoint> type <type>ফর্ম্যাটে মুদ্রণ করবে । এটি গ্রেপ করার জন্য, আমি অংশটি stat --printfতৈরি করেছি on <mountpoint> type
এমএসএলটার্স

অনেক স্থানীয় এবং দূরবর্তী ফাইল সিস্টেম মাউন্ট প্রকার আছে। সেগুলির একটি মানচিত্র থাকা চ্যালেঞ্জ হতে পারে। (উদাহরণস্বরূপ drvfs স্থানীয় বা দূরবর্তী?)
এরিক অ্যারোনস্টি

হ্যাঁ, তবে প্রশ্নটি বিশেষত
এনএফএস

2

দুর্ভাগ্যক্রমে, এর কোনও সার্বজনীন ইউনিক্স উত্তর নেই।

একটি কাজ আপনি করতে পারেন, একটি প্রদত্ত ফাইলের /a/b/c/dজন্য পথ চলা:

  • / একটি / বি / সি /।
  • / একটি / বি / সি / ..
  • /a/b/c/../ ..
  • ...

... এবং পরিবর্তন stat(2)না হওয়া পর্যন্ত প্রতিটি স্তরে একটি করুন st_dev। তারপরে আপনি জানতে পারবেন মাউন্ট পয়েন্টটি কোথায়। তারপরে আপনি ফাইল সিস্টেমের ধরণের সন্ধানের জন্য সেই মাউন্ট পয়েন্টের /etc/mtabআউটপুটটিতে আধ্যাত্মিক পথটি সন্ধান করতে পারেন mount। তারপরে রিমোটটি কী এবং কী নয় তা সন্ধান করা বিশেষত ফিউজ-টাইপযুক্তদের জন্য জটিল to উদাহরণস্বরূপ, nfs, cifs, fuse.sshfs, fuse.davfsসুস্পষ্ট, কিন্তু কী উদাহরণস্বরূপ fuse.gvfs-fuse-daemonবা fuse.avfsdউভয় নেটওয়ার্ক এবং অ নেটওয়ার্কের ফাইল থাকতে পারে?


ভাল, আমি এখানে এনএফএস ব্যবহার করছি (আমার প্রশ্ন সম্পাদিত) হিসাবে stat(2), আমি মনে করি আপনি সি ফাংশনটি রিফ্রেশ করছেন তবে আমি শেলটি ব্যবহার করছি। যাইহোক, st_devপ্রধান ও অপ্রধান ডিভাইস ID উল্লেখ করে, এবং শেল কমান্ড (লিনাক্সের নির্দিষ্ট? যে হয়) stat(1)আছে (অ-মানক) %tএবং %Tসঙ্গে --formatযথাক্রমে প্রধান ও অপ্রধান সংখ্যার জন্য বিকল্প, কিন্তু এটা সবসময় "0" ফেরৎ (স্থানীয় এবং NFS )। আমি দেবিয়ান স্কিজ এবং লেনির চেষ্টা করেছিলাম।
টোটার

আপনি --file-systemবিকল্পটি দিয়ে বা না করে এটি চেষ্টা করছেন ?
frostschutz

নিবন্ধন করুন এটির সাথে ব্যবহার করা থাকলে এর অন্য অর্থ রয়েছে --file-system
টোটার

2

"-L" থেকে df (1) অ স্থানীয় লোকাল ফাইল সিস্টেমে একটি ত্রুটি নিয়ে ব্যর্থ হবে, তাই আপনি ফাইল সিস্টেমটি দূরবর্তী কিনা তা জানতে এই আচরণটি ব্যবহার করতে পারেন:

df -l /path 2> /dev/null | grep -q "File"
rc=$?
if [ "$rc" = "0" ]
then
   echo "local mount, do stuff"
fi

তবে -lবিকল্পটি মানসম্মত নয়


এটি কোনও উত্তর নয়
টোটার

@ টোটার কেন নয়? মঞ্জুর, dfব্যর্থ হবার অন্যান্য বিভিন্ন কারণ রয়েছে এবং এটিই কেবল এটিকে খুব ভাল উত্তর দেয় না, তবে এটি প্রশ্নের উত্তর দেওয়ার চেষ্টা করছে যাতে আপনি কেন এটিকে "উত্তর না বলে" ডাকবেন তা আমি দেখতে পাচ্ছি না।
টেরডন

@terdon আমি সম্মত আমি যথেষ্ট মনোযোগ দিয়ে পড়িনি। এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। আমি সম্পাদনা করব এবং ভোট দেব। :)
টোটার

এটি মূলত একমাত্র যা লিনাক্সের উপর নির্ভরযোগ্যভাবে কাজ করে।
এরিক অ্যারোনস্টি

1

df /pathএটি আপনাকে /pathএকটি মাউন্ট পয়েন্ট বলে দিবে যদি এটি বলে যে মাউন্ট পয়েন্টটি নয় /


1
প্রশ্নটি প্রত্যন্ত মাউন্ট পয়েন্টকে বোঝায় ।
টোটার

1

শুধু কর

df /me/path/to/folder

যদি প্রথম ক্ষেত্রটি (ফাইল সিস্টেম) হোস্ট: / পথে বিন্যাসে থাকে তবে আপনি জানেন যে এটি এনএফএস


0

আপনি df -tঅন ​​লিনাক্স এবং df -Tবিএসডি সিস্টেমে ব্যবহার করতে পারেন ।

ম্যান ডিএফ থেকে :

-t, - টাইপ = টিওয়াইপি

টাইপ TYPE ফাইল সিস্টেমের মধ্যে তালিকা সীমাবদ্ধ করুন

if df -t nfs | grep -q /path/to/folder$; then
  # it is an NFS
fi

খুব সুন্দর. তবে, এবং দুর্ভাগ্যক্রমে, পসিক্স / এসইউসে -tবিকল্পটির আলাদা অর্থ রয়েছে। সুতরাং, এই বিকল্পটি ব্যবহার করা সরঞ্জাম / ইউনিক্সের বিভিন্ন সংস্করণে অসঙ্গতিপূর্ণ ফলাফল সরবরাহ করতে পারে।
টোটার

-2

আমি ব্যক্তিগতভাবে ব্যবহার করব mountpoint(লিনাক্সে খুব বহনযোগ্য!):

NAME
       mountpoint - see if a directory is a mountpoint

SYNOPSIS
       mountpoint [-d|-q] directory

বা showmountযা আসলে এমন কোনও সিস্টেমে ইনস্টল করা দরকার যা প্রকৃতপক্ষে NFSশেয়ারগুলি মাউন্ট করে ( nfs-commonপ্যাকেজের অংশ ):

NAME
       showmount - show mount information for an NFS server

SYNOPSIS
       showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]

অন্য বিকল্পটি কিছু হবে:

$ mount -l -t nfs | grep 'my mount point'

1
mountpointউপযোগ আপনাকে বলতে না করলে বিন্দু মাউন্ট রিমোটে পরিণত হয়। তদুপরি, দূরবর্তী ফাইল সিস্টেমগুলি এনএফএস ফাইল সিস্টেমের মধ্যে সীমাবদ্ধ নয়। শেষ অবধি mountpointমানসম্মত নয় ( এই তালিকায় নেই )।
টোটার

আপনি বিশেষত লিনাক্স এবং এনএফএসের জন্য একটি সরঞ্জামের জন্য অনুরোধ করেছেন, mountpointএই ক্ষেত্রে এটি আদর্শ।
মালাত

এটি যাইহোক আমার প্রথম পয়েন্টটির উত্তর দেয় না।
টোটার

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