* নিক্সে, কোন ফাইল ফাইল চালু আছে তা নির্ধারণ করবেন?


12

জেনেরিক, আধুনিক ইউনিক্স পরিবেশে (বলুন, জিএনইউ / লিনাক্স, জিএনইউ / সোলারিস, বা ম্যাক ওএস এক্স) কোনও নির্দিষ্ট পরম ফাইল পাথটি কোন মাউন্টপয়েন্ট এবং ফাইল-সিস্টেম-টাইপের রয়েছে তা নির্ধারণ করার জন্য কি ভাল উপায়?

আমি মনে করি আমি কমান্ডটি কার্যকর করতে পারি mountএবং ম্যানুয়ালি তার আউটপুটকে পার্স করতে পারি এবং আমার ফাইলের সাথে এটি স্ট্রিং-তুলনা করতে পারি, তবে আমি এটি করার আগে আমি ভাবছিলাম যে এর চেয়ে আরও দুর্দান্ত উপায় আছে কিনা।

আমি একটি বেস স্ক্রিপ্ট বিকাশ করছি যা বর্ধিত বৈশিষ্ট্যগুলির ব্যবহার করে এবং বিভিন্ন ফাইল সিস্টেম এবং হোস্ট এনভায়রনমেন্টের জন্য এটি সঠিক জিনিসটি (এটি সম্ভব যে ছোট পরিমাণে সম্ভব) করতে চাই।

উত্তর:


19

কমান্ডটি df(1)এক বা একাধিক আর্গুমেন্ট নেয় এবং মাউন্টপয়েন্ট এবং ডিভাইসটি সেই ফাইল বা ডিরেক্টরিতে উপস্থিত রয়েছে, সেইসাথে ব্যবহারের তথ্যও ফিরিয়ে দেবে। তারপরে আপনি আউটপুট mount -vবা অনুরূপ আউটপুটে ফাইল সিস্টেমের ধরণটি অনুসন্ধান করতে পাথ বা ডিভাইস ব্যবহার করতে পারেন ।

দুর্ভাগ্যক্রমে, উভয়ের আউটপুট ফর্ম্যাট dfএবং mountসিস্টেম-নির্ভর; কোনও আপাত মান নেই, কমপক্ষে আমি সোলারিস, নেটবিএসডি এবং ম্যাক ওএস এক্স এর মধ্যে দেখতে পাচ্ছি


1
df -Pযে কোনও POSIX কমপ্লায়েন্ট সিস্টেমে মানযুক্ত আউটপুট উত্পাদন করা উচিত। কিছু গোফিয়ার সিস্টেমে একটি পজিশন এনভায়রনমেন্ট ভেরিয়েবলের দরকার হতে পারে যেমন POSIXLY_CORRECT, এছাড়াও সেট করা যেতে পারে।
ড্যান মোল্ডিং

উদাহরণ df /path-to-the-directoryআপনাকে সেই ডিরেক্টরিটির অন্তর্ভুক্ত পার্টিশনটি দেবে
হাসানুজ্জামান সাত্তার

7

আপনি স্ট্যাট ব্যবহার করতে পারে । কমান্ড স্ট্যাট - প্রিন্টফ '% d' ফাইলের নাম.txt ডিভাইস নম্বরটি হেক্স / দশমিক হিসাবে ফিরিয়ে দেবে।


সুতরাং, কীভাবে এটিতে ডিভাইসের নাম বেসটি সন্ধান করবেন?
ডেইজি

আপনার সমস্ত ডিভাইস ফাইল / dev / এ থাকা সত্ত্বেও এবং স্ট্যাট রিপোর্ট অনুযায়ী একই সংখ্যালঘু সংখ্যার সাথে একটি সন্ধান করতে হবে।
Wiesław Herr

stat --printf "%d"আপনাকে কোনও ডিভাইসের সংখ্যালঘু সংখ্যা জানায়, তবে ডিভাইসের নাম এবং এটির মাউন্ট করা ফাইল সিস্টেম পাওয়ার জন্য আরও কাজ করার দরকার আছে।
ক্রেগ ম্যাককুইন

2
সম্ভবত এটি সাম্প্রতিক সংযোজন তবে stat --format '%m' $fileআপনাকে মাউন্ট পয়েন্ট stat --file-system --format '%T' $mountদেবে এবং ফাইল সিস্টেমের নাম সরবরাহ করবে।
রোয়াইমা

1
@ টমহেল: মনে রাখবেন না, সত্যি বলতে হবে। তবে আমার মনে আছে এটি কার্যকর হয়নি। স্বীকার্যভাবে আমার ডিসট্রো, কার্নেল সংস্করণ ইত্যাদি বর্ণনা করা উচিত ছিল তবে আপনি এটির কাজটি উল্লেখ করে বলতে পারেন যে এটি ইতিমধ্যে স্থির হয়ে গেছে। যদি নেট ফলাফলটি এটি কার্যকর হয় তবে দুর্দান্ত :)
0xC0000022L


2

হুঁ। মাউন্ট পয়েন্টের জন্য, st_dev পরিবর্তন না হওয়া অবধি আপনি শ্রেণিবিন্যাসের উপরে যেতে পারবেন (তারপরে আপনি সবেমাত্র একটি মাউন্ট সীমানা পেরিয়ে গেছেন); statবাশ স্ক্রিপ্টগুলির জন্য জিএনইউ রয়েছে ; তবে, আমি জানি না আপনি কীভাবে পার্সিং ছাড়াই /proc/mountsবা পরীক্ষার মাধ্যমে এবং ত্রুটি করে ফাইল সিস্টেমের ধরণটি অনুমান করতে পারেন (যেমন বর্ধিত বৈশিষ্ট্য নির্ধারণের পরে ব্যর্থতাগুলি পরিচালনা করবেন)


2

ব্যবহারের সাথে একটি গ্যাচা dfহ'ল যদি আউটপুটে ডিভাইসের নাম দীর্ঘ হয় তবে এটির রেখাটি মোড়ানো হবে যাতে আপনি কেবল শেষ লাইনটি ধরে নিতে পারবেন না। পরিবর্তে প্রথম লাইনটি ছড়িয়ে দিন এবং তারপরে নতুন প্রথম লাইনটি ধরুন এবং তারপরে প্রথম ক্ষেত্রটি মুদ্রণ করুন:

#!/usr/bin/env bash

path=$1
curdir=$(pwd)
cd $path
df . | tail -n +2 | head -1 | awk '{print $1}'
cd $curdir

3
POSIX ফর্ম্যাটে আউটপুট পেতে এবং লাইন-ব্রেকিং ছাড়াই 'df -P' ব্যবহার করে এই গোটচাকে এড়িয়ে চলুন।
মাইকিবি

2

লিনাক্সে ডিএফ এবং বিটিআরএফের সাথে একটি ধরা আছে বলে মনে হচ্ছে। আপনি যখন df কে মাউন্ট করা বিটিআরএফস ভলিউমের জন্য মাউন্ট পয়েন্টটি সনাক্ত করতে বলবেন, এটি সঠিক কাজ করবে thing এক্ষেত্রে জো / এম / তিমি / ব্যাকআপের একটি উপ-ডিরেক্টরি।

# df /srv/backup/joe
Filesystem      1K-blocks      Used  Available Use% Mounted on
/dev/md126     2930135488 307676684 2619663252  11% /m/whale/backup

তবে ডিরেক্টরিটি যদি উল্লেখ করা হয় তবে এটি একটি উপ-ভলিউম, এটি আপনাকে আর মাউন্ট পয়েন্টটি বলবে না।

# df /srv/backup/joe/code
Filesystem      1K-blocks      Used  Available Use% Mounted on
-              2930135488 307676684 2619663252  11% /a/whale/backup/joe/code

/ A / তিমি / ব্যাকআপটি কার্নেল অনুসারে একমাত্র মাউন্ট পয়েন্ট।

# mount | grep whale
/dev/md126 on /a/whale/backup type btrfs (rw,relatime,space_cache)

FWIW, স্ট্যাট একই কাজ করে:

# stat --printf '%m\n' /srv/backup/joe/code
/a/whale/backup/joe/code

1

Https://stackoverflow.com/questions/2167558/give-the-mount-Point-of-a-path থেকে :

 df -P $path  | tail -1 | awk '{ print $NF}'

আমি * বিএসডি এবং এসআইএসভি উভয়ই এবং ন্যূনতম স্বয়ংক্রিয়ভাবে পরিচালিত ডিরেক্টরিগুলির জন্য যেখানে পরীক্ষা করেছি সেখানেই কাজ করে। এটি ব্যর্থ হয় এমন একটি ঘটনা শুনে আমি আনন্দিত হব।


1
প্রস্তাবিত কোড df -P $ পথ | লেজ -1 | awk '{মুদ্রণ $ এনএফ}' সোলারিসের আমি যে সমস্ত সংস্করণ চেষ্টা করেছি তার সমস্ত সংস্করণে ব্যর্থ (2.5), 8, 9, এবং 10) কারণ সোলারিস "" ডিএফ "" -পি "বিকল্পটি সমর্থন করে না।
পিটার জন আকলাম

@ পিটার: আমি ভেবেছিলাম যে আমি হব তার চেয়ে কম আনন্দিত। তবে এটি জেনে রাখা আকর্ষণীয় যে সমস্যাটি অনানুষ্ঠানিক। আমি মনে করি সঠিক জিনিস হ'ল একটি স্ক্রিপ্টিং ভাষায় একটি কমান্ড লিখুন যার গ্রন্থাগারটি সমস্যার যথাযথভাবে সমাধান করেছে যেমন, পাইথনের কাছে os.path.splitunc () ফাংশন রয়েছে যা মাউন্ট পয়েন্ট দেয় এবং আমি ধরে নিই যে সোলারিসে কাজ করে।
চার্লস স্টুয়ার্ট

@ চার্লসস্টেয়ার্ট: দুঃখের বিষয়, পাইথনে আমার জ্ঞানের তেমন কোনও কাজ নেই। os.path.splitunc()শুধুমাত্র ইউএনসি পাথের জন্য কাজ করে এবং এটি কেবল উইন্ডোতে উপলব্ধ
আলেক্সি তোড়হামো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.