পুরানো কার্নেলগুলি মুছে ফেলার জন্য এই আদেশটি ব্যবহার করা নিরাপদ?


21

উবুন্টু নিবন্ধগুলির জন্য ইন্টারনেট ব্রাউজ করার সময়, আমি এই আদেশটি পেলাম:

sudo dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

লেখক বলেছেন যে এটি একটি একক লাইন কমান্ড যা লিনাক্সের সমস্ত পূর্ববর্তী সংস্করণগুলি মুছে ফেলবে, কেবলমাত্র বর্তমানটি রেখে যাবে !

আমি আসলে এই জাতীয় আদেশ খুঁজছি, তবে এটি কতটা নিরাপদ তা নিয়ে আমি এতটা নিশ্চিত নই। আমি জানতে চাই:

  • এই আদেশটি কার্যকর করা নিরাপদ কিনা?
  • এই আদেশটি কীভাবে কাজ করে? যেমন একটি বড় কমান্ডের ছোট অংশের ব্যাখ্যা
  • যদি এই আদেশটি কিছু ভিন্ন উদ্দেশ্যে কাজ করে, তবে লেখক এটি করার দাবি করার জন্য সঠিক আদেশটি কী হবে?

আমি নিজের দ্বারা সমস্ত কিছু বের করার চেষ্টা করার সময় আমি খুব বিভ্রান্ত ও হতাশ হয়ে পড়েছি। কিভাবে এই কমান্ড কাজ করে এটা রয়েছে অসংখ্য /, |, \, *, এবং ^অক্ষর, যার জন্য গুগল কঠিন।

আমি এই কমান্ডটির জন্য ধাপে ধাপে অনুবাদ এবং ব্যাখ্যাটি খুঁজছি যা আমি ইন্টারনেটে খুঁজে পেতে পারি না!


1
আপনি যে উদ্ধৃতিটি উদ্ধৃত করেছেন এটি একই কমান্ড বলে মনে হচ্ছে না, তবে আমি কোনও সমস্যা ছাড়াই পুরানো কার্নেলগুলি সরাতে tuxtweaks.com/2010/10/… কমান্ডটি ব্যবহার করছি । এই পৃষ্ঠাটিও আদেশটি কী করে তাও ব্যাখ্যা করে।
ব্যবহারকারী 68186

4
@ উরিহেরা apt-get autoremoveআমার জন্য পুরানো কার্নেলের কোনও অপসারণের পরামর্শ দেয় না। আমি যদি এগুলি মুছতে না পারি তবে আমার /bootস্থানের বাইরে চলে যাওয়া এবং আপডেটগুলি ব্যর্থ হওয়া পর্যন্ত তারা কেবল স্তূপ করবে । এটি করা উচিত সে সম্পর্কে আপনার কাছে কি কোনও রেফারেন্স রয়েছে?
জার্মটভিডিজক

1
এটি আমার জন্য করে, কার্নেলের জন্য যখনই কোনও নতুন আপডেট আসে তখন এটি বলে যে নিম্নলিখিত প্যাকেজগুলি ইত্যাদির আর প্রয়োজন হয় না এবং এটি আমার পূর্ববর্তী কার্নেলটি তালিকাভুক্ত করে।
উরি হেরেরার

আমার উত্তর একজন মডারেটর দ্বারা মুছে ফেলা হয়েছে, তাই আমি এখানে মন্তব্য করছি: স্ক্রিপ্টের ব্যাখ্যার জন্য এই নিবন্ধটি দেখুন । আমি স্ক্রিপ্টের একটি অংশ সরল s/^[^ ]* [^ ]* \([^ ]*\).*/\1/পরিবর্তে কেন তা দেখছি না s/^[^ ]* \([^ ]*\).*/\1/। স্ক্রিপ্টটি খুব মজবুত বা মার্জিত নয়। উদাহরণস্বরূপ আউটপুট থেকে প্যাকেজের নাম বের করার আগে বর্তমান কার্নেলটি কেন পরীক্ষা করে দেখুন? বিকল্প হিসাবে sudo apt-get autoremove --purge, জুবুন্টু 15.10 এর মতো উবুন্টুর সাম্প্রতিকতম রিলিজে সর্বাধিক পুরানো কার্নেলগুলি শুদ্ধ করে।
জার্নো

উত্তর:


27

আমি বলব: এটি বর্তমান ফর্মটিতে ব্যবহার করবেন না

  1. এটি আপনাকে জিজ্ঞাসা না করে পরিবর্তন করে। apt-get -y purgeঅংশ আপনার সম্মতি ছাড়াই, এক মাছ ধরার নৌকা শুদ্ধিকরণ প্যাকেজ নির্বাহ শুরু করতে পারবেন। স্ক্রিপ্টে যদি কোনও ত্রুটি উপস্থিত থাকে তবে আপনি স্ক্রু হতে পারেন ।

  2. কোনও উত্স, কোনও লেখক দেওয়া হয়নি। এটির উত্সটি এখানে একটি পার্থক্য করে। যদি এটি একটি পুরোপুরি পরীক্ষিত সিস্টেম প্যাকেজ থেকে আসে তবে আমরা এটির উপর দিয়ে টেস্টিং করা হচ্ছে তা ট্রেস করতে পারি। একটি এলোমেলো উত্স থেকে, আমরা এটি বিশ্বাস করতে পারি না।

  3. dpkg -lছাড়া জরিমানা sudo। মূল লেখক কেন এটি প্রয়োজনীয় বলে মনে করলেন তা আমি দেখতে পাচ্ছি না।

সাধারণ বুদ্ধি ব্যবহার কর

ক্ষতিকারক অংশগুলি সরান এবং মূল হিসাবে চলমান যে কোনও কিছু রেখে দিন।

উদাহরণস্বরূপ, এটি এটিকে কেটে দিন:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

যা কেবলমাত্র স্টাফ আউটপুট করে এবং নিয়মিত ব্যবহারকারীর অনুমতি নিয়ে চলে । একবার আপনি এই কার্নেলগুলি অপসারণের সাথে একমত হয়ে গেলে আপনি নিজেকে যুক্ত করতে পারেন | xargs sudo apt-get purge। এটি -yইচ্ছাকৃতভাবে বিকল্প ব্যতীত , সুতরাং আপনাকে আপনার সিস্টেমে কী পরিবর্তন করা হবে সে সম্পর্কে নিশ্চিতকরণের জন্য জিজ্ঞাসা করা হবে।

ব্যাখ্যা

  • dpkg -lসমস্ত প্যাকেজের তালিকা আউটপুট করে। এই ক্ষেত্রে এটি শুধুমাত্র প্যাকেজ তালিকা প্রস্তুত করা যাবে শুরু সঙ্গে linux-নামের।
  • |(একটি পাইপ) বাম দিকে কমান্ডের আউটপুট পাইপ করে (আমরা তাকে কল করি stdout) ডানদিকে কমান্ডের ইনপুটটিতে (আমরা এটি কল করি stdin)।
  • sedনিয়মিত এক্সপ্রেশন ব্যবহার করে স্ট্রিংগুলি ম্যানিপুলেট করার একটি সরঞ্জাম । এই ক্ষেত্রে এটি পাইপের বামদিকে কমান্ডের আউটপুট এবং ইনস্টল করা প্যাকেজগুলির জন্য ফিল্টারগুলি সরবরাহ করে ( iiপ্রদত্ত অনুসারে নির্ভর করে dpkg)। এমনকি এক্ষেত্রে বাসা বাঁধছে। sedএখানে সম্পূর্ণ ব্যবহার ব্যাখ্যা করা খুব কঠিন হবে কারণ জটিল নিয়মিত প্রকাশের সাথে এর ব্যবহার খুব জটিল। (এটি \(.*\)-\([^0-9]\+\)"একটি নিয়মিত প্রকাশের উদাহরণ।
  • তারা প্রতিনিধিত্ব করে এমন ভাবের ভিত্তিতে মিলগুলি খুঁজে পেতে নিয়মিত প্রকাশগুলি খুব বিস্তৃতভাবে ব্যবহৃত হয়। \1হ'ল এক ধরণের সার্বজনীন অনুসন্ধান-ও-প্রতিস্থাপনের প্রতিস্থাপনের রেফারেন্স (এর সাথে প্রথম 'হিট'কে রেফারেন্সিং 1)। নিয়মিত প্রকাশটি তাদের কোনও ক্ষতি করতে পারে না। তবে, যদি তারা কোনও ভুল উপায়ে ইনপুটটি চালিত করে, তবে তারা আপনাকে ভুল প্যাকেজগুলি সরাতে বা শেল ইঞ্জেকশনও করতে পারে। এই ক্ষেত্রে এটির দ্বারা উপলব্ধ সংস্করণটির উপর ভিত্তি করে কার্নেল প্যাকেজটির নাম সন্ধান করার উপায় মনে হয় uname -r
  • uname -r কার্নেল চলমান বর্তমান সংস্করণ আউটপুট দেয়।
  • xargsপাইপের বাম ইনপুটটির লাইনগুলি কমান্ডের আর্গুমেন্ট হিসাবে যুক্ত করে। এই ক্ষেত্রে, প্রতিটি লাইনের কার্নেল সংস্করণগুলি একটি অনুভূমিক স্থান-বিভাজিত তালিকায় রূপান্তরিত হয় এবং sudo apt-getকমান্ডের সাথে যুক্ত হয় ।
  • sudo apt-get -y purge [packagename] প্রদত্ত প্যাকেজগুলির (আর্গুমেন্ট হিসাবে) মুছে দেয় (সমস্ত কিছু সরিয়ে দেয়)।

বিকল্প

বেশ কিছু প্রশ্ন সম্ভবত ইতিমধ্যে এটি সম্পর্কে জিজ্ঞাসা করা হয়েছে। প্রাসঙ্গিক আমি এ পর্যন্ত খুঁজে পেয়েছি:


1
এই কমান্ডের ভীতিজনক লুকিং নোডের ব্রেকআপ কী হবে যা এইরকম কিছু হতে পারে /(.*)-(sel^0-9 ভাষা\+)/\1/")"'/d; এস /^ील^ ] * [^] * ([[^] *)। * / \ 1 /; /
ভবেশ দেওয়ান

এই উত্তরে উপরোক্ত আদেশটি কি পুরানো কার্নেলগুলি সুন্দরভাবে পরিষ্কার করবে ?? বা এখনও স্বতঃপরিচালনা ভাল ভাল ??
ভবেশ দেওয়ান

4
@ Z9iT এগুলি নিয়মিত প্রকাশ হয়। তারা এর উপর ভিত্তি করে মিল খুঁজে ব্যবহার করছি অভিব্যক্তি তারা প্রতিনিধিত্ব করেন এবং \1সার্বজনীন অনুসন্ধান-এবং-প্রতিস্থাপন কেমন করতে প্রতিস্থাপন কন্ট্রোল। যে কোনও প্যাকেজ অপসারণের জন্য আমি আমার উত্তরে নিজেকে স্পষ্ট প্রকাশ করেছি (আমার মতামত): সাধারণ জ্ঞান ব্যবহার করুন। কোনও স্ক্রিপ্ট আপনার সিস্টেমে স্বয়ংক্রিয়ভাবে পরিবর্তন করতে দেবেন না। এটি কী করবে তা যাচাই করুন। সর্বদা.
জার্মটভিডিজক

আপনার বৈশিষ্ট্যযুক্ত বিকল্পটি संबंधित লিনাক্স-শিরোনাম প্যাকেজগুলিকে শুদ্ধ করে না।
জার্নো

তারপরে কেবল একটি উপযুক্ত-গেট অটোমোমও করুন, যা সনাক্ত করা উচিত যে এই শিরোনামগুলির আর দরকার নেই।
বেন-নবি ডেরুশ

7

আপনি ধাপে ধাপে ধাপের ব্যাখ্যা চেয়েছিলেন যাতে এখানে যায়:

sudo dpkg -l 'linux-*'

linux-প্যাকেজ নাম দিয়ে শুরু প্যাকেজ তালিকা

| sed

এবং তালিকাটি পাইপ করুন sed

"s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

যা তালিকা সম্পাদনা করতে খুব জটিল নিয়মিত অভিব্যক্তি ব্যবহার করবে

| xargs

যা নতুন তালিকায় পাইপ দেবে xargs, এটি এটিকে যুক্তি হিসাবে প্রেরণ করবে

sudo apt-get -y purge

যা আপনাকে আপনার মতামত পরিবর্তন করার সুযোগ না দিয়ে এই প্যাকেজগুলি মুছে ফেলবে।

অথবা সম্ভবত এটি বলার অপেক্ষা রাখে না যে এটি সেই তালিকাটি খাঁটি কমান্ডের মধ্যে প্রেরণ করবে এবং এটিকে এটি ছেড়ে দেবে। কিছুই মুছে ফেলা হয়েছে কি না - এবং গুরুত্বপূর্ণভাবে - ঠিক কী শুদ্ধ হয় তা পূর্ববর্তী কমান্ডগুলির আউটপুটের উপর নির্ভর করে।

এটি নিরাপদ? এক্ষেত্রে যে সমস্ত পোস্ট আপনি খুঁজে পেয়েছেন সেখানে নিয়মিত প্রকাশ এবং sedবাক্য গঠন বোঝে কতটা নির্ভর করে তার উপর নির্ভর করে । এবং সেই দুটি বিষয়েরই পুরো বই রয়েছে।


6

কমান্ডগুলি বিচ্ছিন্ন করে manপ্রত্যেকটির জন্য পৃষ্ঠাটি পড়ে শুরু করেছি ।

  • dpkg -l: dpkg -l linux-*প্যাকেজগুলি তালিকাভুক্ত করুন , সুতরাং linux-(সাধারণত কার্নেল) দিয়ে শুরু হওয়া সমস্ত প্যাকেজ তালিকাবদ্ধ করে ।

  • sed: এর আউটপুটটি বেশ কয়েকটি নিয়মিত এক্সপ্রেশন দিয়ে dpkg -l linux-*পাইপ করা sedহয় যা sedডিকোড হয়।

  • uname -r unameসিস্টেম তথ্য মুদ্রণ

uname - মুদ্রণ সিস্টেম তথ্য

-rহাতল বিশেষভাবে কার্নেল রিলিজ ছাপে:

-r, --kernel- রিলিজ কার্নেল রিলিজ প্রিন্ট করুন

এর আউটপুটটি আরও নিয়মিত এক্সপ্রেশন দিয়ে uname -rপাইপ করা sedহয়, যার আউটপুট এর কাছে চলে যায়xargs

সুতরাং আউটপুটটিকে প্যাকেজের নামগুলিতে xargsঅনুবাদ করে sedসেগুলিতে প্রেরণ করে sudo apt-get purge -yযা স্বয়ংক্রিয়ভাবে সমস্ত হ'ল 'হ্যাঁ' উত্তর দেয়:

-y, --yes, --assume-Yes স্বয়ংক্রিয় হ্যাঁ প্রম্পটে; সমস্ত অনুরোধের জবাব হিসাবে "হ্যাঁ" ধরে নিন এবং আন্তঃ-ইন্টারেক্টিভভাবে চালান। যদি কোনও অনাকাঙ্ক্ষিত পরিস্থিতি, যেমন একটি হোল্ড প্যাকেজ পরিবর্তন করা, একটি অযৌক্তিক প্যাকেজ ইনস্টল করার চেষ্টা করা বা একটি প্রয়োজনীয় প্যাকেজ অপসারণের ঘটনা ঘটে তবে অ্যাপি-গেটটি বাতিল হয়ে যাবে। কনফিগারেশন আইটেম: এপিটি :: পান :: অনুমান-হ্যাঁ।

পুরাপুরি এটি এই কমান্ড মনে হয় হবে কি আপনি করতে পারেন, যদিও নিশ্চিত জানি আমরা অনুবাদ করতে চাই sed'র রেগুলার এক্সপ্রেশনের।

আমি কেবল দৌড়েছি:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'  

এখানে একটি স্ক্রিন শট হয়:

এখানে চিত্র বর্ণনা লিখুন

সমস্ত পুরানো কার্নেল সংস্করণ iirc।


এই ছদ্মবেশটির অভিব্যক্তিটি অনুবাদ করার জন্য অনুশীলন কী?
ভবেশ দেওয়ান

2
আমি এখনই এটি বোঝার চেষ্টা করছি, সম্ভবত আমাদের কিছুটা সময় লাগবে;)
শেঠ


@ জেড 9 আইটি আমি লিঙ্কিত নিবন্ধ থেকে উত্তরের লিপিটির ব্যাখ্যাটি অনুলিপি করতে খুব অলস ছিলাম, তাই আমার ধারণা সে কারণেই শেঠ আমার উত্তরটি মুছে ফেললেন। তবে আমি মনে করি যে লিঙ্কিত নিবন্ধটি আপনি ইন্টারনেট থেকে সন্ধান করেছিলেন। আমি আপনাকে পুরানো কার্নেলগুলি অপসারণের একটি নিরাপদ উপায়ও বলেছি, যদিও এটি 2-3 কার্নেল ঠিক রাখে, এবং বর্তমানের সমস্ত উবুন্টু রিলিজে কাজ নাও করতে পারে।
জার্নো

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