সঠিক কারণগুলি কীভাবে proc গ্রেপ অন / প্রোক এবং কাঁচা ডিস্কগুলি খারাপ ধারণা?


9

আমি grep -r "searchphrase" /আজ দৌড়েছি এবং এটি কার্যকর হয়নি। আমি কিছু গবেষণা করেছি এবং find / -xdev -type f -print0 | xargs -0 grep -H "searchphrase"সঠিক পদ্ধতির বলে মনে করেছি।

আমি সংগ্রহ করি /procএবং ডিস্কগুলি যেমন /dev/sda1একটি অ-সফল গ্রপের জন্য অপরাধী।

আমি "কেন" এর কিছু গভীর প্রযুক্তিগত পটভূমি পছন্দ করব। আমি মনে করি যে কিছু লিঙ্কগুলি /procযখন ট্র্যাশ করা হয় তখন অসীম লুপ তৈরি করে এবং আমি আরও পড়ি এর আরও কারণ রয়েছে তবে নির্দিষ্ট কিছু নেই।

এছাড়াও, যখন কোনও কাঁচা ডিস্ক গ্রিপড হয় তখন কী ঘটে? বাইনারি ডেটা (যেটা /dev/sda1আমি জানি যতক্ষণ পর্যন্ত এটি অ্যাক্সেসযোগ্য ?) এর অর্থ ব্যাখ্যা করা যায় না, কেবল যেমন mountএকটি ফাইল-সিস্টেম-টাইপযুক্ত একটিই ডিস্ক থেকে ডেটা বোধগম্য করে তোলে? সুতরাং কি এখনও বাইনারি স্ট্রিংয়ের জন্য গ্রেপ করা সম্ভব হবে?

উত্তর:


11

হ্যাঁ, আপনি পারেন grep /dev/sda1এবং /procতবে আপনি সম্ভবত এটি করতে চান না। আরো বিস্তারিত:

  1. হ্যাঁ, আপনি বাইনারি বিষয়বস্তু গ্রেপ চালাতে পারেন /dev/sda1। তবে, আধুনিক বড় হার্ড ডিস্কগুলির সাথে, এটি খুব দীর্ঘ সময় নিবে এবং ফলাফলটি কার্যকর হবে না বলে সম্ভবত।

  2. হ্যাঁ, আপনি এই বিষয়বস্তুগুলি গ্রেপ করতে পারেন /procতবে সচেতন হন যে আপনার কম্পিউটারের মেমরিটি ফাইল হিসাবে সেখানে ম্যাপ করা আছে। গিগা বাইটের র‌্যাম সহ একটি আধুনিক কম্পিউটারে, এটি গ্রেপ করতে অনেক দিন সময় নেয় এবং, ফলস্বরূপ কার্যকর হওয়ার সম্ভাবনা নেই।

ব্যতিক্রম হিসাবে, আপনি যদি কোনও ক্ষতিগ্রস্থ ফাইল সিস্টেমের সাথে একটি হার্ড ডিস্কে ডেটা খুঁজছেন, তবে আপনি grep something /dev/sda1ফাইলটির ডেটা পুনরুদ্ধারের প্রচেষ্টা হিসাবে চালাতে পারেন।

অন্যান্য সমস্যাযুক্ত ফাইল /dev

হার্ড ডিস্ক এবং হার্ড ডিস্কের অধীনে পার্টিশনগুলি /devযদি কারও পর্যাপ্ত ধৈর্য থাকে তবে গ্রেপ করা যেতে পারে। অন্যান্য ফাইল (টুপি টিপ: ব্যবহারকারী 2313067 ) তবে সমস্যার কারণ হতে পারে:

  1. /dev/zeroঅসীম দৈর্ঘ্যের একটি ফাইল। ভাগ্যক্রমে, grep(কমপক্ষে জিএনইউ সংস্করণ) এড়াতে যথেষ্ট স্মার্ট:

    $ grep something /dev/zero
    grep: input is too large to count
    
  2. /dev/randomএবং /dev/urandomঅসীম হয়। কমান্ড grep something /dev/randomচিরকালের জন্য চলবে যদি না grepথামার সিগন্যাল দেওয়া হয়।

    /dev/urandomপাসওয়ার্ড তৈরি করার সময় গ্রেপ করা কার্যকর হতে পারে । উদাহরণস্বরূপ, পাঁচটি এলোমেলিক অক্ষর পেতে:

    $ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
    G
    4
    n
    X
    2
    

    এটি অসীম নয় কারণ এটি পর্যাপ্ত অক্ষর পাওয়ার পরে, headগ্রেপকে বন্ধ করার জন্য পাইপটি বন্ধ করে দেয়।

অসীম লুপস

"... লিঙ্কগুলি ... যখন ট্র্যাভার করা হয় তখন অসীম লুপ তৈরি করুন ..."

গ্রেপ (কমপক্ষে জিএনইউ সংস্করণ) এটি না করার জন্য যথেষ্ট স্মার্ট। আসুন দুটি ক্ষেত্রে বিবেচনা করা যাক:

  1. সঙ্গে -rবিকল্প,, grep নেই সিম্বলিক লিঙ্ক অনুসরণ যদি না তারা স্পষ্টভাবে কমান্ড লাইন নির্দিষ্ট আছে। অতএব, অসীম লুপগুলি সম্ভব নয়।

  2. সঙ্গে -Rবিকল্প,, grep করে সিম্বলিক লিঙ্ক অনুসরণ তা সবই তাদের পরীক্ষা এবং একটি লুপ ধরা করতে রাজি। বর্ণনা করা:

    $ mkdir a
    $ ln -s ../ a/b
    $ grep -R something .
    grep: warning: ./a/b: recursive directory loop
    

সমস্যাযুক্ত ডিরেক্টরিগুলি বাদ দিয়ে grep -r

একটি সরু হিসাবে, grepনির্দিষ্ট ফাইল বা ডিরেক্টরি অনুসন্ধান থেকে গ্রেপ বন্ধ করার জন্য একটি সীমিত সুবিধা সরবরাহ করে। উদাহরণস্বরূপ, যদি আপনি বাদ আসতে পারে যা সমস্তই ডিরেক্টরি নামে proc, sysএবং devসঙ্গে, grep এর রিকার্সিভ অনুসন্ধান থেকে:

grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /

অন্যথা, আমরা অগ্রাহ্য করতে proc, sysএবং devব্যাশ এর বর্ধিত globs ব্যবহার করছে:

shopt -s extglob
grep -r something /!(proc|sys|dev)

ধন্যবাদ! এটি একটি দুর্দান্ত উত্তর। যদি আজকের রাতের অন্ধকার থেকে আর কোনও নায়ক বের না হয় তবে কালকেই আমি তা মেনে নেব! আমি আরও একটি বিষয় সম্পর্কে ভাবছি, এবং আমি আশা করি এটি খুব বেশি দূরে নয়: যদি grepকোনও ফাইল সন্ধান /procকরে ম্যাপড মেমোরির দিকে নিয়ে যায়, এমন কি ঘটতে পারে যা grepকোনও ইওএফকে (এলোমেলো) স্মৃতিতে আঘাত করে এবং নিম্নলিখিত ডেটাটিকে একটি হিসাবে ব্যাখ্যা করে নতুন ফাইলের নাম অনুসন্ধান করবেন? আমি grepউত্স কোড পড়া শুরু করেছি , তবে আমার ধারণা আমি এতে খুব বেশি দেখতে পাচ্ছি না।
কৌতূহলী_আবার

1
@ ক্রোক সিপি / এম এর মতো কিছু পুরানো অপারেটিং সিস্টেমে একটি ফাইলের শেষটি ইওএফ অক্ষর দ্বারা চিহ্নিত করা হয়েছিল। যেহেতু আধুনিক ফাইল সিস্টেমগুলি কোনও ফাইলের আকারের উপর নজর রাখে, এই জাতীয় অক্ষরগুলি ব্যবহারের বাইরে চলে যায়।
1024

2
গ্রেপ /devস্ক্যান /dev/zeroবা অনুরূপ শুরু হওয়ার সাথে সাথে গ্রেপিং কখনই শেষ হয় না । যদি নিশ্চিত না হন এই ধরণের ফাইলগুলিকে মধ্যে উপস্থিত /procবা /sys
ব্যবহারকারী 2313067

1
@ ব্যবহারকারী 2313067 ভাল পয়েন্ট! জিএনইউ গ্রেপ অনুসন্ধান করতে অস্বীকার /dev/zeroকরবে, /dev/randomতবে এটি বন্ধ না করা চিরতরে অনুসন্ধান করবে। উত্তর আপডেট হয়েছে।
1024

আমি / proc বা / sys এর সাথে খুব বেশি কিছু করি না, তবে যেহেতু এগুলি ভার্চুয়াল ডিরেক্টরি যা কোনও সময়ে আপডেট হতে পারে তাই আপনি একাধিক রান থেকে অপ্রত্যাশিত / অপূরণীয় ফলাফল পেতে পারেন। অবশ্যই এটি নিয়মিত ফাইল সিস্টেমগুলির সাথেও ঘটতে পারে তবে এটি এখানে কিছুটা অবাক করার মতো হতে পারে।
জো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.