স্ক্রিপ্ট থেকে / ফাইল সিস্টেমের ইউআইডি পান


11

আমি কীভাবে একটি ভলিউমের ইউইউডি পেতে পারি যাতে /ফাইল সিস্টেম রয়েছে ? আমি আজকের তারিখে এটির জন্য সবচেয়ে ভাল জিনিসটি খুঁজে পেয়েছি blkid -o list। তবে এই আউটপুটটি মানব পাঠযোগ্য এবং পার্স করা শক্ত। আরও ভাল উপায় আছে?

সিস্টেম-নির্দিষ্ট টেম্পলেটগুলির সাথে কনফিগারেশন পরিচালনার পরামিতি করা আমার দরকার I

blkidযারা ভবিষ্যতে আমার প্রশ্নের ফলাফলগুলি পুনরায় ব্যবহার করতে পারেন তাদের জন্য গেটচা সম্পর্কে নোট : blkidপূর্ববর্তী রানগুলির ফলাফলগুলি ক্যাশে /etc/blkid.tab। এর অর্থ হ'ল blkidপ্রথমবারের মতো নন-রুট ব্যবহারকারী হিসাবে চালানো কোনও ডেটা ফেরায় না। এছাড়াও, blkidরুট রান করার পরে অ-রুট ব্যবহারকারী হিসাবে চালনা করা বাসি (সম্ভবত ভুল) ডেটা প্রত্যাবর্তন করবে।


আমার নিজস্ব সিস্টেমে, আমি সমস্ত পার্টিশনে মানব পাঠযোগ্য, অনন্য লেবেল নিযুক্ত করি। তারপরে আমি তাদের লেবেল ব্যবহার করে এবং তাদের সম্পর্কে প্রায় কিছু জানতে পারি /dev/disk/by-label... এটি পার্টিশনের জন্যও কাজ করে যা মাউন্ট করা হয়নি। এটির স্ক্রিপ্টগুলি লেখার পক্ষে সক্ষম হওয়ার সুবিধা রয়েছে যা মূল থেকে শুরু করে রুট-বক পর্যন্ত আরএসইএনসি-র মতো কাজ করে যা "ইউইউআইডিএস" ব্যবহার করে যা কিছু বোঝায় না তার চেয়ে কম ত্রুটিযুক্ত প্রবণতা।
জো

উত্তর:


25

ব্যবহার findmnt:

$ findmnt /        
TARGET SOURCE       FSTYPE OPTIONS
/      /dev/md127p1 ext4   rw,relatime,stripe=256,data=ordered
$ findmnt / -o UUID
UUID
046a554b-d9f5-4b23-82e6-ffaeb98284aa
$ findmnt / -o UUID -n
046a554b-d9f5-4b23-82e6-ffaeb98284aa

এটি কীভাবে তথ্য সন্ধান করে এবং কীভাবে এটি উপস্থাপন করে (জেএসএন আউটপুট সহ!) নিয়ন্ত্রণ করার বিভিন্ন বিকল্প রয়েছে। এটি mountপ্যাকেজের অংশ , তাই কোনও উবুন্টু ইনস্টলেশনতে উপলব্ধ।


এটি 16.04 এ দুর্দান্ত কাজ করে। এটি 14.04 এ আমার পক্ষে কাজ করতে ব্যর্থ হয়েছিল। বিশ্বস্ততার উপর পছন্দসই ফলাফল পেতে আমাকে এই পদ্ধতির ব্যবহার করতে হয়েছিল।
এল্ডার গিক

11

আরেকটি সমাধান:

lsblk -nr -o UUID,MOUNTPOINT | grep -Po '.*(?= /$)'
  • -n শিরোনামকে দমন করে (সত্যিই প্রয়োজন হয় না, তবে পার্সিংয়ের জন্য নিরাপদ)
  • -r কাঁচা আউটপুট তোলে (এটি পার্স করা নিরাপদ করে)
  • -o UUID,MOUNTPOINT শুধুমাত্র প্রয়োজনীয় তথ্য অন্তর্ভুক্ত করুন

5

আপনি lsblkইউআইডি আউটপুট দেওয়ার জন্য কমান্ডটি ব্যবহার করতে পারেন , তবে আপনার পার্টিশনের ডিভাইসের নাম প্রয়োজন (যেমন / dev / sda2)। আপনি dfকমান্ডটি ব্যবহার করে এবং আউটপুটটি ছাঁটাই করে এটি পেতে পারেন । ডিভাইসটির নাম দিতে কমান্ড প্রতিস্থাপন ব্যবহার করুন lsblk। এটি ইউআইডি অ্যাক্সেস করার জন্য আপনাকে সুডো দরকার বলে মনে হচ্ছে, যদিও lsblk এর স্বাভাবিক আউটপুটটির এটির প্রয়োজন হয় না:

sudo lsblk -n -o UUID "$(df -P / | tail -n1 | cut -d' ' -f1)"

2
এটি sudo16.04 এ ছাড়া আমার জন্য কাজ করে।
এলিয়াহ

কেবলমাত্র যদি আপনি (বা কোনও স্ক্রিপ্ট) আগে কখনও এই আদেশটি মূল হিসাবে চালিত করেন। এছাড়াও, এই ক্ষেত্রে
আউটপুটটি

@Dmitriusan আমি 14.04 সিস্টেম ছিল না হয়েছে এই দৌড়ে lsblkবা blkidরুট দ্বারা চালানো এবং এটি পুরোপুরি কাজ করেন। আপনি কি জানেন যে কেন এই কমান্ডটি কেন রোভোর পোস্ট করা সংস্করণে নয় এবং কেন ক্যাচিংয়ের সমস্যা হবে? কাঁচা আউটপুট কি কোনও উপায়ে ক্যাশে আটকায়?
অ্যারোনিকাল

আমি মনে করি যে কোনও কমান্ড যা ডিভাইসের ইউআইডি অ্যাক্সেস করে তার জন্য রুট অ্যাক্সেসের প্রয়োজন হবে (রোভো পোস্ট করা সংস্করণ সহ)। Lsblk সম্পর্কিত, এখানে একটি সম্পর্কিত প্রশ্ন রয়েছে unix.stackexchange.com/questions/210889/… (প্রথম উত্তরটি দেখুন)
দিমিত্রিউসন

আমি সম্মত হই যে সুডো প্রয়োজনীয়, তবে এলএসবিএলসি ক্যাচিংয়ের উপর নির্ভর করে এমন পরামর্শ দেওয়ার মতো কোনও কিছুই পাই না। এমনকি আমি blkidরুট হিসাবে চালিত হলেও /dev/.blkid.tab, ক্যাশে ফাইল তৈরি করা হলেও , অ-সুডো ব্যবহার lsblkইউইউডি কলাম থেকে কিছুই দেখায় না। আমি মনে করি না বাসি আউটপুট ঝুঁকি আছে।
অ্যারোনিকাল

4

আমি যে সমাধানটি পরিচালনা করতে পেরেছি তা হ'ল

blkid -o list | awk '/\/[[:space:]]+/{ print $0 }' | tr -s ' ' | cut -d ' ' -f 4

অনুকূল নয় এমন মনে হয় তবে কাজ করে।

দ্রষ্টব্য: [[: স্পেস:]] এর অর্থSpace


এটি আমার জন্য কাজ করে কিন্তু সাথে কাজ করে sudo
pa4080

4

mountpointপ্রশ্নে থাকা ফাইল সিস্টেমের বর্তমান মাউন্ট পয়েন্টের মানটি সামঞ্জস্য করুন :

dev="$(exec awk -v mountpoint='/' '($2 == mountpoint){ print $1; quit; }' /proc/mounts)" &&
sudo blkid -o export -- "$dev" | sed -ne 's/^UUID=//p'

1

আমি যা ব্যবহার করি তা এখানে:

sudo tune2fs -l $(df  / | tail -1 |awk '{print $1}') |grep UUID|awk '{ print $3 }'

tune2fs e2fsprogs প্যাকেজে রয়েছে, এটি ডিফল্টরূপে ইনস্টল করা হয়েছে কিনা তা আমি মনে করতে পারি না।

sudo apt install e2fsprogs

যদি এটি ইনস্টল না হয়।


আমি পেতে awk: not an option: -eআমি তোমার উত্তরের সম্পাদিত এটা কার্মিক করা। যদি আমি ওভারস্টেপ করে ফেলেছি তবে দয়া করে এটিকে আবার ঘোরান। চিয়ার্স! :-)
বয়স্ক

আশ্চর্যের বিষয়, এটি আমার সাথে-ছাড়া বা ছাড়া কাজ করে বলে মনে হচ্ছে। -আজকের জন্য ম্যান পৃষ্ঠাতে নথিভুক্ত করা হয়েছে। আমি এটি সর্বদা স্ক্রিপ্টগুলিতে ব্যবহার করেছি এবং আমি অবাক হয়েছি এটি ছাড়া এটি ভাল কাজ করেছে :) আমি মনে করি - এটি ইউনিক্সের পুরানো অভ্যাস। তবে, আমার ব্যবহারের ক্ষেত্রে আমার ধারাবাহিক হওয়া উচিত ছিল এবং উভয় জায়গাতেই ব্যবহার করা উচিত বা লোকেরা যাতে বিভ্রান্ত না হয় সেজন্য।
জন

আহ, আমি 14.04 এর মধ্যে আপনার মত একই ফলাফল পেয়েছি যা ব্যবহার করে gawk। আমি 16.04 এর নীচে নির্দিষ্ট ত্রুটিটি পেয়েছি যা mawkপরিবর্তে ব্যবহার করার জন্য প্রদর্শিত হয় ।
বয়স্ক

এটি সেইগুলিতে / ইত্যাদি / বিকল্পগুলির মধ্যে একটি। / ইত্যাদি / বিকল্পগুলি / awk -> / ইউএসআর / বিন / গাওক আমার 16.04 এ আমার জন্য। মওক ইনস্টল করা আছে, তবে / ইত্যাদি / বিকল্পগুলিতে সক্রিয় নয়। আমার 17.04 জিনোমে এটি অর্কের দিকে নির্দেশ করে। আমার তাজা ইনস্টল 17.10 এ makk। গাককে লিঙ্ক পয়েন্টগুলি গাককে ইনস্টল করার পরে, আনইনস্টল করে গোক এটিকে মাককে ফিরিয়ে দেয়।
জন

:-) এটি একই ধরণের প্রোগ্রামগুলির মধ্যে এই সামান্য পার্থক্যগুলির কারণেই সম্ভবত "কম বেশি হয়"
এল্ডার গিক

1

14.04 এবং 16.04 এ কাজ করার জন্য পরীক্ষিত

একটি সরল এক-লাইনের যে সবসময় একটি রুট এর UUID উত্পাদন করা উচিত /নয়

DRIVE = $ (মাউন্ট | গ্রেপ '/' | awk -F "" "{মুদ্রণ $ 1} 'তে) রফতানি করুন; blkid $ DRIVE | কাট-ডি '' '-f2 `

আমরা এখানে যা করছি তা হ'ল মাউন্টের আউটপুটটিকে গ্র্যাপিং করা হচ্ছে /যখন /পাথ এক্সটেনশন প্রতীক হিসাবে ব্যবহৃত হবে তখন ম্যাচটি এড়াতে দু'দিকের ফাঁক দিয়ে মূল প্রতীকটি মেলে, পাইপিংটি কেবল "আউটপুট awk" ক্ষেত্রের বিভাজক হিসাবে ব্যবহার করে ডিভাইসের নাম এবং পরিবেশের পরিবর্তনশীল IV ড্রাইভের ক্ষেত্রে এটি নির্ধারণ করে, তারপরে ফিল্ড বিভাজক হিসাবে blkid $DRIVEকাট দিয়ে পাইপের আউটপুট ব্যবহার করে "এবং কেবল দ্বিতীয় ইউআইডি রেখে কেবল দ্বিতীয় ক্ষেত্রটি বেছে নেয় যা সমস্ত কিছু বাদ দেয়।

নোট করুন যে উপরের কমান্ডটিতে গ্রেপের পরে যা কিছু আছে তা আসলে ' space/ space' এবং '/' এর মতো প্রদর্শিত হবে না।

এটির প্রয়োজন না পড়ার সুবিধা রয়েছে sudoএবং ড্রাইভটি কীভাবে চালিত হয় তা নির্বিশেষে উপযুক্ত ফলাফলটি ফিরিয়ে দেবে।

এটি নিশ্চিত করা বুদ্ধিমানের কাজ হবে যে আপনি echo $DRIVEযদি এই ভেরিয়েবলটি ব্যবহার না করে থাকেন তবে এই পদ্ধতির চেষ্টা করার আগে আপনি $ ড্রাইভ এনভায়রনমেন্ট ভেরিয়েবলটি অন্য কোনও কিছুর জন্য ব্যবহার করছেন না।

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