मैं बूट मेनू को साफ करने के लिए पुराने कर्नेल संस्करण कैसे निकालूं?


701

हर बार जब मैं एक नया लिनक्स कर्नेल स्थापित करता हूं, तो यह हर बार बूट मेनू को लंबे समय तक बनाते हुए grub_config में छोड़ दिया जाता है।

मुझे पता है कि मैं मैन्युअल रूप से स्थापित पैकेजों के माध्यम से खोज सकता हूं और उन्हें हटा सकता हूं।

क्या उबंटू उन्हें साफ करने या बूट सूची में दिखाने से रोकने का कोई आसान तरीका प्रदान करता है?


10
जॉब करने के लिए प्यूज-ओल्ड-कर्नेल नामक एक ऑबंटु कमांड है। अधिक जानकारी के लिए मेरा जवाब देखें ।
जरनो

29
sudo apt-get autoremoveउबंटू 14.04+
hobs

1
पुरानी गुठली का संचय एक बग है, जिसमें प्रगति जारी है: बग्सलांचपड.नेट / बीग्स / 1357093 । जब फिक्स जारी किया जाता है, तो पुराने कर्नेल डिफ़ॉल्ट रूप से ऑटोरेमोव करेंगे।
user535733 17

1
@hobs कमांड मेरे लिए उबंटू स्टूडियो 14.04 में ट्रिक नहीं करता है, अगर गुठली स्वचालित रूप से स्थापित नहीं की गई है, लेकिन सॉफ़्टवेयर अपडेटर द्वारा।
जर्नो २

1
मैं इस पृष्ठ पर आकर रखना ... @hobs द्वारा टिप्पणी तभी काम करता है अपने कर्नेल थे स्वतः स्थापित किया - लेकिन आप कर sudo apt-get autoremove --purge जवाब का पालन करते हुए apt-markके बारे में सलाह https://help.ubuntu.com/community/RemoveOldKernels
earcam

जवाबों:


602

16.04 और उबंटू के नए संस्करण

sudo apt autoremove

यह आदेश उन पैकेजों को हटाता है जो एक निर्भरता को हल करने के लिए स्वचालित रूप से स्थापित किए गए थे, लेकिन अब उन पर निर्भर नहीं हैं। इस के पुराने संस्करणों में शामिल हैं linux-headers-*और linux-image-*। (यह इस प्रक्रिया के बारे में भी स्मार्ट है, कर्नेल के एक अतिरिक्त संस्करण को एक कमबैक के रूप में छोड़ देता है!)

11.10 और उबंटू के नए संस्करण

GRUB2 और सभी गुठली का प्रदर्शन

उबंटू में स्थापित ग्रब 2 के नवीनतम संस्करण स्वचालित रूप से नवीनतम कर्नेल प्रदर्शित करते हैं और आपके द्वारा स्थापित पुराने कर्नेल को छिपाते हैं।

GNU GRUB

यदि आप अपना ग्रब नहीं देखते हैं - तो Shiftबूटिंग दबाते हुए याद रखें ।

जैसा कि आप देख सकते हैं, केवल नवीनतम कर्नेल प्रदर्शित होता है।

यदि आप दिखाए गए विकल्प (प्रेस Enter) का चयन करते हैं तो सभी पुराने कर्नेल दृश्यमान हो जाते हैं और बूट करने के लिए उपलब्ध होते हैं।

GNU GRUB पिछले संस्करण

पुरानी गुठली को स्थायी रूप से कैसे हटाएं

नवीनतम उपलब्ध कर्नेल के साथ पहला बूट।

पुरानी गुठली को हटाने के कई तरीके हैं। निजी तौर पर, मैं कंप्यूटर Janitor को नहीं छूता क्योंकि यह आपके कंप्यूटर को इसके सुझावों के साथ तोड़ने के लिए स्वीकार किया जाता है।

अन्तर्ग्रथनी

एक विकल्प है सिनैप्टिक ( sudo apt install synaptic)

लिनक्स-छवि के लिए खोज , एक कर्नेल पर राइट-क्लिक करें और पूर्ण निष्कासन चुनें और अंत में कर्नेल को हटाने के लिए लागू करें बटन पर क्लिक करें

सिनैप्टिक पैकेज मैनेजर

खोज को दोहराएं लेकिन इस बार लिनक्स-हेडर के लिए - आप पहले चुने गए कर्नेल छवि के लिए संबंधित हेडर को हटा सकते हैं।

Synaptic हालांकि यह सत्यापित करने का प्रयास नहीं करेगा कि आप क्या हटाने की कोशिश कर रहे हैं ... आप अनजाने में अपने नवीनतम कर्नेल को हटा सकते हैं - या यहां तक ​​कि इस उपकरण के माध्यम से अपने सभी कर्नेल को एक अनबूटे उबंटू के साथ छोड़कर हटा सकते हैं !

यह जांचना याद रखें कि आप किस कर्नेल का उपयोग कर रहे हैं:

uname -r

परिणाम इसके समान होगा:

टर्मिनल <uname -r>

परिणाम और संख्या याद रखें - सुनिश्चित करें कि आप संबंधित छवि या हेडर को नहीं हटाते हैं।

सिफ़ारिश करना

मेरी सिफारिश नवीनतम सहित कम से कम दो या अधिमानतः तीन गुठली रखने की है। सिफारिश करने का कारण यह है कि आपके पास बूट करने के लिए कम से कम एक / दो अन्य कर्नेल होंगे, अगर-कभी किस कारण से नवीनतम कर्नेल के साथ आप बूट करने में असमर्थ हैं या टूटी हुई वायरलेस जैसी प्रतिगामी क्षमता का परिचय दे रहे हैं।


3
Synaptic का उपयोग कर पुराने "linux-image *" संकुल को हटाना, 10.04 के साथ भी अच्छा काम किया। (मैं इसका उल्लेख करता हूं क्योंकि शीर्षक से पता चलता है कि यह केवल ११.१० और उससे अधिक के लिए हो सकता है)
it

4
लाइन -yके अंत में स्विच apt-getकरना आवश्यक है, अन्यथा उपयुक्तता केवल पुष्टि के लिए पूछती है और चूंकि इनपुट एक पाइप है, यह सिर्फ गर्भपात करता है। तो यह समाप्त होना चाहिए:| xargs sudo apt-get purge -y
जोश 16

37
मेरे मशीन पर लगभग 20 संस्करण पुराने linux-imageऔर linux-headersमुक्त किए गए 4.5GB स्थान को हटा रहा है ।
एंड्रयू माओ

16
यह विधि अच्छी तरह से काम करती है, लेकिन हर कर्नेल का विलोपन grub.cfg को अत्यधिक पुन: बनाता है, जिसमें समय लगता है। क्या बैच हटाने के लिए इसे अक्षम करने का कोई तरीका है, फिर इसे एक बार पुनर्जीवित करना?
spacediver

15
मैं @spacediver से दूसरा प्रश्न करता हूं - यह एक पागल-धीमी प्रक्रिया है, जब आपके पास 38 अनावश्यक कर्नेल होते हैं, क्योंकि हर एक की स्थापना रद्द होने के बाद यह एक नया grub.cfg उत्पन्न करते समय सभी शेष लोगों के माध्यम से जाता है। इसे हम N ^ 2 ऑपरेशन कहते हैं - यह कर्नेल को संसाधित करता है (38 ^ 2/2) = 722 बार, और बहुत धीमा है। निश्चित रूप से उबंटू कुछ बेहतर के साथ आ सकता है ....
nealmcb

384

सबसे पहले, अपने सिस्टम को रिबूट करें यह सुनिश्चित करने के लिए कि यह नवीनतम कर्नेल का उपयोग कर रहा है। फिर टर्मिनल खोलें और अपने वर्तमान कर्नेल की जांच करें:

uname -r 

इस तरह से याद मत करो!

इसके बाद, अपने सिस्टम पर सभी स्थापित गुठली देखने / सूचीबद्ध करने के लिए नीचे दी गई कमांड टाइप करें।

dpkg --list 'linux-image-*'

सभी कर्नेल खोजें जो आपके वर्तमान कर्नेल से कम हैं। जब आप जानते हैं कि किस कर्नेल को निकालना है, तो इसे निकालने के लिए नीचे जारी रखें। आपके द्वारा चयनित कर्नेल को निकालने के लिए नीचे दिए गए आदेशों को चलाएँ।

sudo apt-get purge linux-image-x.x.x-x-generic 

अंत में, grub2 को अपडेट करने के लिए नीचे दिए गए कमांड चलाएं

sudo update-grub2 

अपने सिस्टम को रिबूट करें।


34
10.04 और 12.04 में ऐसा करते समय, मैंने पाया कि अपडेट-ग्रब शुद्ध प्रक्रिया के दौरान स्वचालित रूप से चलाया गया था।
एडन

93
बैश के ब्रेस विस्तार का उपयोग किया जा सकता है, उदाहरण के लिए sudo apt-get purge linux-image-3.2.0-3{0..5}-generic(30,31, .., 35 को हटाता है)
ajo

12
बाद में सिस्टम को रिबूट करने की आवश्यकता नहीं है। वास्तव में, आपको इन चरणों को करने से पहले सिस्टम को रिबूट करना चाहिए , यह सुनिश्चित करने के लिए कि आप नवीनतम कर्नेल संस्करण का उपयोग कर रहे हैं जिसे आपने अभी डाउनलोड किया है और इंस्टॉल किया है (आपने इससे पहले apt-get update && apt-get नवीनीकरण किया है, ठीक है?)
Ricket

4
आप उन linux-signed-imageपैकेजों को अनइंस्टॉल करना चाहते हैं sudo apt-get purge linux-signed-image-3.11.0-{12,14,24}-genericजो
यूईएफआई

1
@jarno मुझे नहीं पता कि मैं एक हस्ताक्षरित कर्नेल का उपयोग कर रहा हूं या नहीं, लेकिन मेरे सिस्टम पर uname -rकोई signedस्ट्रिंग नहीं है । मैं एक हस्ताक्षरित छवि स्थापित किया है और इस बात का उत्पादन है लगता है lsआदेश है: /boot/vmlinuz-3.19.0-16-generic.efi.signed
डेविस

283

पुराने कर्नेल को हटाने के लिए मेरा एक-लाइनर (यह डिस्क स्थान को मुक्त करता है)

dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge

स्पष्टीकरण (याद रखें, |पिछले कमांड के आउटपुट को अगले इनपुट के रूप में उपयोग करता है)

  • dpkg --list सभी स्थापित पैकेजों को सूचीबद्ध करता है
  • grep linux-image स्थापित लिनक्स छवियों के लिए लग रहा है
  • awk '{ print $2 }' सिर्फ दूसरा कॉलम आउटपुट करता है (जो पैकेज नाम है)
  • sort -V संस्करण क्रमांक द्वारा आइटमों को क्रम में रखता है
  • sed -n '/'`uname -r`'/q;p' वर्तमान कर्नेल से पहले लाइनों को प्रिंट करता है
  • xargs sudo apt-get -y purge पाया गुठली शुद्ध करता है

sedआह्वान को रद्द करना :

  • -nsedशांत होना बताता है
  • `uname -r` वर्तमान स्थापित कर्नेल रिलीज़ को आउटपुट करता है - हम इसे बैकटिक्स में शामिल करते हैं ताकि आउटपुट कमांड के हिस्से के रूप में शामिल हो (आप इसे भी देख सकते हैं) $(uname -r)
  • /something/qकहते हैं कि रुकें जब आप 'कुछ' (इस मामले में, कुछ का उत्पादन होता है uname -r) से मेल खाते हैं - /चारों ओर एक नियमित अभिव्यक्ति
  • p प्रिंट है
  • ;आदेश separtor है, इसलिए /something/q;pकहते हैं कि जब आप, और प्रिंट कुछ से मेल छोड़ने

कुल मिलाकर, sed -n '/'`uname -r`'/q;p'लाइनों को तब तक प्रिंट करें जब तक कि यह वर्तमान कर्नेल नाम से मेल नहीं खाती।

यदि आप पागल हैं (मेरी तरह), तो आप अंतिम भाग बना सकते हैं xargs echo sudo apt-get -y purgeताकि पुरानी गुठली को शुद्ध करने की कमान मुद्रित हो, तो आप जांच सकते हैं कि इसे चलाने से पहले कुछ भी अप्रत्याशित शामिल नहीं है।


हेडर निकालने के लिए संशोधित संस्करण:

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge

नोट: sedआह्वान को संशोधित किया गया है। "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"केवल संस्करण (जैसे "3.2.0-44") निकालता है, "-Generic" या इसी तरह के बिनाuname -r


ऑल-इन-वन संस्करण छवियों और हेडर को हटाने के लिए (ऊपर दो संस्करणों को जोड़ती है):

echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge

1
ध्यान दें कि वर्तमान कर्नेल संस्करण को रेगुलर एक्सप्रेशन की तरह मैच करना थोड़ा खतरनाक है: डॉट्स किसी भी पात्र से मेल खाते हैं और 3.1.2-23 मैच 3.1.2-2 (या यह अन्य तरह से है)। मेरा जवाब भी देखिए ।
जारो

19
यहाँ एक ट्यूनड ऑल-इन-वन संस्करण है: sudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done)मेरा उत्तर भी देखें ।
जारो

1
@ कर्णो ने मेरी बहुत मदद की। कुंडों से लेकर आपके एक लाइनर तक
क्लेन डीसिल्वा

5
असमत निर्भरता के कारण, मुझे dkpg -Pइसके बजाय इसका उपयोग करने की आवश्यकता थी । यहाँ पूर्ण संस्करण है:dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo dpkg -P
सेबस्टियन सस्त्रे

3
नहीं, यह मत करो! "वह ऑन्लाइनर थोड़ा खतरनाक दिखता है, लेकिन निश्चित रूप से 220 अपवित्र गलत नहीं हो सकता है!" मैंने खुद को सोचा और आँख बंद करके कॉपी-पेस्ट किया। रिबूट किया गया, सीधे GRUB में। उस आदेश ने मेरे सभी कर्नेल को मिटा दिया, जिसमें मैं उपयोग कर रहा था। शायद मैं एक वास्तविक समय कर्नेल चला रहा था, याद भी नहीं कर सकता। वर्तमान में उबंटू लाइव सीडी स्थापित करने के लिए एक यूएसबी स्टिक के लिए मेरे घर के चारों ओर देख रहे हैं :(
एंड्रियास जानसन

60

Ubuntu 16.04+:

$ sudo apt autoremove
...
The following packages will be REMOVED:
  linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic

Ubuntu 15.10 और नीचे:

मुझे यह सबसे आसान और तेज तरीका लगता है। यह नवीनतम कर्नेल के साथ-साथ दो और भी रखता है:

sudo apt-get install bikeshed
sudo purge-old-kernels

रखे गए अतिरिक्त कर्नेल की संख्या को बदलने के लिए:

sudo purge-old-kernels --keep 3

1
वह कमांड एक शेल स्क्रिप्ट है, जिसका स्थान आप पा सकते हैं which purge-old-kernels
जारो

खुशी है कि उन्होंने 16.04 में इसे बहुत आसान बना दिया! आशा है कि यह उत्तर आगे
टोबी जे

उबंटू 16.04 पर मेरे पास purge-old-kernelsबिकेश्ड ( यादृच्छिक उपयोगी उपकरण हैं जिनके पास अभी तक एक स्थायी घर नहीं है ) पैकेज या कोई विशेष एक है। apt-get -yविकल्प का उपयोग करते हुए , आँखें बंद करना और सब कुछ ठीक होने की उम्मीद करना। इसके अलावा यहाँ है कि यह कैसे है autoremove का फैसला करता है कि कितने वर्ष कर्नेल रखने के लिए।
पाब्लो ए

2
16.04 में बटू पैकेज (संकेत:) द्वारा शुद्ध-पुरानी-गुठली प्रदान की जाती है apt-file search purge-old-kernels। पर सहमत apt-get -yहूँ, मैं इसे हटा दूँगा।
बामउपिन

1
@ जब से मैं गैर-एलटीएस संस्करणों का उपयोग नहीं करता हूं, मुझे यकीन नहीं था कि जब यह शुरू हुआ था। लेकिन मैं यह सुनिश्चित करने के लिए कह सकता हूं कि sudo apt-get autoremove14.04 में गुठली नहीं निकालता। विशिष्ट संस्करण के साथ उत्तर को अपडेट करने के लिए स्वतंत्र महसूस करें यदि आप जानते हैं कि यह क्या है!
बेमपिन

43

ग्रब 2 से एंट्रीज को हटाकर /etc/grub.d फोल्डर में फाइल को एडिट करके या हटाकर एंट्रीज को हटा दिया जाना चाहिए। /Boot/grub/grub.cfg फ़ाइल केवल-पढ़ने के लिए है और इसे सामान्य रूप से संपादन की आवश्यकता नहीं है।

बहुत सारे गुठली?

  • यदि आप उस कर्नेल के बारे में सुनिश्चित नहीं हैं, जिसका उपयोग आप वर्तमान में टर्मिनल टाइप uname -r में कर रहे हैं

  • APT (Synaptic, "apt-get remove", आदि) के माध्यम से निकाले गए कर्नेल स्वचालित रूप से grub.cfg को अपडेट कर देंगे और उपयोगकर्ता की कोई कार्रवाई आवश्यक नहीं है।

  • गुठली (और मेनू प्रविष्टियों) को हटाने के लिए एक महान उपकरण Ubuntu-Tweak है, एक सुरक्षित और आसानी से उपयोग होने वाला GUI ऐप है।

  • Ubuntu tweak स्थापित करें

  • Ubuntu-Tweak एप्लीकेशन> सिस्टम टूल्स के तहत उपलब्ध होगा।

पुराने कर्नेल प्रविष्टियाँ निकालें

  • बाईं ओर "पैकेज क्लीनर" चुनें और दाएं पैनल से "क्लीन कर्नेल"।

  • निचले दाईं ओर "अनलॉक" बटन दबाएं, अपना पासवर्ड दर्ज करें।

  • प्रदर्शित सूची से उन कर्नेल छवियों और हेडर का चयन करें जिन्हें आप हटाना चाहते हैं। उपयोग में कर्नेल सूचीबद्ध नहीं है।

  • चयनित कर्नेल छवियों और हेडर को निकालने के लिए निचले दाईं ओर "क्लीनअप" बटन दबाएं।

ग्रब मेनू से ऑपरेटिंग सिस्टम निकालें

  • एक बार "अपडेट-ग्रब" को रूट के रूप में चलाने के बाद कंप्यूटर से हटाए गए अन्य ऑपरेटिंग सिस्टम को भी मेनू से हटा दिया जाएगा।

  • मेनू आइटम स्क्रिप्ट द्वारा Grub2 मेनू पर रखे गए हैं। यदि आप नहीं चाहते कि अन्य ऑपरेटिंग सिस्टम मेनू में प्रविष्ट हों, तो /etc/grub.d/30_osprober अक्षम करें

  • स्क्रिप्ट को चलने से रोकने के लिए यह कमांड चलाएँ
    sudo chmod -x /etc/grub.d/30_os-prober

  • DISABLE_30_OS-PROBER = 'true' in / etc / default / grub

Grub मेनू से Memtest86 + निकालें
sudo chmod -x /etc/grub.d/20_memtest86+

  • Grub.cfg में परिवर्तनों को शामिल करने की अनुमति देने के लिए अद्यतन-ग्रब कमांड चलाएँ

स्रोत

नोट: कर्नेल अपडेट के बाद GRUB मेनू में एक नई प्रविष्टि जोड़ी जाती है। यदि आप चाहें तो पुराने को हटा सकते हैं। हालांकि, अधिकांश अनुभवी उपयोगकर्ता आपको सलाह देंगे कि अपग्रेड के साथ कुछ गलत होने पर कम से कम एक अतिरिक्त प्रविष्टि रखें। समस्या निवारण उद्देश्यों के लिए एक पुराने कर्नेल संस्करण को बूट करने की आवश्यकता है।

कर्नेल प्रविष्टियों को हटाने का वैकल्पिक तरीका (10.04 से पहले)

GRUB के लिए GRUB2 नहीं

स्टार्टअप प्रबंधक स्टार्टअपमैन स्थापित करें

आप इसे सिस्टम के अंतर्गत पा सकते हैं >> प्रशासन >> वैकल्पिक शब्द
वैकल्पिक शब्द
आप दूसरे स्क्रीनशॉट में देखते हैं कि आप कितने कर्नेल दिखा सकते हैं? मैं आमतौर पर इसे केवल 1 पर रखता हूं, लेकिन जब मुझे कर्नेल अपग्रेड मिलता है तो मैं इसे पुनः आरंभ करने से पहले हमेशा 2 में बदल देता हूं ताकि मैं पुराने कर्नेल का चयन कर सकूं अगर नए कर्नेल में मेरे हार्डवेयर की समस्या है। एक बार जब मुझे पता है कि नया कर्नेल अच्छी तरह से काम कर रहा है तो मैं इसे वापस 1 में बदल देता हूं।


2
वास्तव में, स्टार्टअपमैन ने मुझे उबंटू 10.04 पर इस तरह से एक विंडो दी, इसके बजाय उसने सिर्फ दो टैब -> बूट विकल्प और उन्नत .. के साथ एक खिड़की दी और उन्नत में यह गुठली की संख्या को सीमित करने का विकल्प है। तो कृपया उबंटू 10.04 के जवाब को अपडेट करें। (और यही कारण है कि मैंने इसे डाउन-वोट किया ..)
सेन

किसी भी विचार कैसे "गुठली की संख्या" एक मशीन पर परिभाषित किया जा सकता है जिसमें कोई जीयूआई स्थापित नहीं है (सर्वर)?
सिल्वेनुलग

स्टार्टअपमैन पुराना है।
Grup

39

विशुद्ध रूप से कमांडलाइन, यह सभी को हटा देगा लेकिन वर्तमान और दूसरा सबसे वर्तमान (नीचे हेड कमांड में "-2" के माध्यम से):

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |
    awk '{print "linux-image-" $0 " linux-headers-" $0}' )
if [ -n "$OLD" ]; then
    apt-get -qy remove --purge $OLD
fi
apt-get -qy autoremove --purge

9
वहाँ से एक लाइनर :dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e [0-9] | xargs sudo apt-get -y purge
दिमित्री Verkhoturov

@DmitryPaskal, आपको इसे नए उत्तर के रूप में जोड़ना चाहिए।
साजी 89

10
@DmitryPaskal हमेशा की तरह, इन्हें समझे बिना कॉपी-पेस्ट न करें। मेरी मशीन पर यह एक-लाइनर भी मेल खाता है linux-libc-dev:amd64जिसे हटाया नहीं जाना चाहिए।
jamesadney

1
@ केक्स कुक, क्या केवल एकल-उद्धरणों से घिरा हुआ तर्क नहीं होना चाहिए? यदि आपकी मंशा पाइप लाइनों के लिए "linux-image-" प्रस्तुत करने की है, तो यह केवल तभी काम करता है जब आप उपयोग करते हैं awk '{print "linux-image-" $0}'
मार्क

यह मेरे लिए काम नहीं करता है, इसमें मेरा कस्टम स्थापित कर्नेल (3.17 के साथ उबंटू 14.04) शामिल है
एलेक्स आर

35

अपडेट: purge-old-kernelsहै पदावनत आजकल।

मैंने मुश्किल परिस्थितियों में भी गुठली को शुद्ध करने के लिए एक स्क्रिप्ट बनाई। इसे कहा जाता है linux-purgeऔर आप इसे यहां पा सकते हैं ।

यदि आप केवल उन कर्नेल (और संबंधित पैकेज) को शुद्ध करना चाहते हैं जो वर्तमान में उपयोग किए गए कर्नेल से पुराने हैं, जब सिस्टम टूटा नहीं है, तो आप इस स्क्रिप्ट का उपयोग कर सकते हैं ।

एक उबंटू प्रलेखन पृष्ठ भी है जिसे मैंने यहाँ पुरानी गुठली निकालने में योगदान दिया है


ऐसा लगता है कि purge-old-kernelsबिकेश के सटीक संस्करण (1.22) में नहीं है। क्या सटीक के लिए अधिक हालिया बिकेश प्राप्त करने का एक उचित / सुरक्षित तरीका है? या यह सिर्फ स्क्रिप्ट को स्थापित करने के लिए सरल / सुरक्षित होगा? मैं निर्भरता की लंबी सूची के बावजूद, हालांकि एक रेपो का उपयोग करना चाहता हूं ..
drevicko

1
@drevicko देखें यहाँ
जर्नो

1
@drevicko, ज़रूर,dlocate -lsbin bikeshed
jarno


1
@ क्रिस वहाँ हाँ है। मैंने अभी स्क्रिप्ट में थोड़ा सुधार किया है, इसलिए नवीनतम संस्करण का उपयोग करना सबसे अच्छा है।
जारनो

29

आप यह करने के लिए Ubuntu विकी पर स्वचालित सुरक्षा अपडेट लेख के "अनअटेंडेड-अपग्रेड" पैकेज अनुभाग का उपयोग करके अनुसरण कर सकते हैं ।

आपको निम्न पंक्ति को /etc/apt/apt.conf.d/50unattended-upgrades फ़ाइल में बदलना होगा ;

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

साथ में

Unattended-Upgrade::Remove-Unused-Dependencies "true";

स्वचालित रूप से पुराने पैकेज को हटाने के लिए, जिसमें कर्नेल भी शामिल है।

लाइन को हटाएं या टिप्पणी भी करें

"^linux-image.*"; 

फ़ाइल के "NeverAutoRemove" अनुभाग में /etc/apt/apt.conf.d/01autoremove


2
मैंने ऐसा किया, लेकिन यह अभी भी 3 + पुरानी गुठली इकट्ठा कर रहा था जो 100 एमबी का उपभोग कर रहा था। इसलिए मैंने apt-get autoremoveअपने दैनिक क्रॉन जॉब में जोड़ा, जो वास्तव में अपग्रेड करता है, क्योंकि यह हमेशा बिल्ट-इन अपडेट-मैनेजर के माध्यम से नहीं जाता है।
मार्कोस

मुझे लगता है कि यह केवल उन गुठली के लिए काम करता है जो स्वचालित रूप से स्थापित की गई हैं।
जारो

यह पुराने कर्नेल के निर्माण को रोकने के लिए बहुत अच्छा है जब ऑटो-अपग्रेडिंग पैकेज, जैसे कि अनअटेंडेड-अपग्रेड के साथ। हालाँकि, यदि आप रिबूट नहीं करते हैं, तो आप पा सकते हैं कि वर्तमान में चल रहे कर्नेल के लिए पैकेज की स्थापना रद्द कर दी गई है! एक समस्या यह पैदा कर सकती है: नए उपकरण जिन्हें आप प्लग करते हैं वे काम नहीं कर सकते हैं, क्योंकि उनके लिए मॉड्यूल गर्म-लोड नहीं किया जा सकता है, क्योंकि यह अब आपकी डिस्क पर नहीं है। (इसके लिए एक त्वरित समाधान सिर्फ कर्नेल पैकेज को फिर से स्थापित करने के लिए है, और फिर डिवाइस को अनप्लग करें और फिर से
भरें

मैंने उपरोक्त समस्या के लिए एक स्वचालित समाधान बनाया । यदि आपको लगता है कि यह एक अच्छा तरीका है, तो इसे क्वर्टी के जवाब में जोड़ने के लिए स्वतंत्र महसूस करें।
joeytwiddle

27

सबसे तेज़ / सरल तरीका (कम से कम 12.04 के बाद से लागू) संभव है जो पहले से ही उबंटू के साथ आता है apt-get। यदि आप उपयोग में नहीं आने वाले सभी पुराने कर्नेल संस्करणों को निकालना चाहते हैं, तो निम्नलिखित कार्य करें (पिछले एक को छोड़कर, जिसका आप उपयोग नहीं कर रहे हैं। यह सुनिश्चित करने के लिए है कि यदि वर्तमान कर्नेल संस्करण किसी तरह से विफल हो जाता है, तो आपके पास जाने का एक तरीका है एक पिछली स्थिति में वापस)। निम्न कार्य करें:

sudo apt-get autoclean

इससे आपके पास मौजूद कोई भी पुरानी फ़ाइल (कर्नेल संस्करण सहित) समाप्त हो जाएगी। ध्यान दें कि यदि आपके पास कई पुराने संस्करण हैं, तो कुछ समय लगेगा क्योंकि यह सुनिश्चित करना होगा कि कर्नेल संस्करण को हटाने से कोई समस्या नहीं है। मेरे लिए, पिछले 12 कर्नेल संस्करणों को हटाने में लगभग 2 मिनट लगे। आप निम्न कार्य भी कर सकते हैं:

sudo apt-get clean

जो apt के कैश फोल्डर में डाउनलोड और स्टोर की गई सभी चीजों को खत्म कर देगा। अन्त में आपके पास है:

sudo apt-get autoremove

जो किसी भी अप्रयुक्त पैकेज के लिए जाँच करेगा और यदि आवश्यक हो तो उन्हें हटा देगा। यह उन पुस्तकालयों और निर्भरता पैकेजों के लिए बहुत अच्छा है जिन्हें अब किसी भी ऐप को इंस्टॉल करने की आवश्यकता नहीं है।


1
मुझे लगता है कि यह 14.04 के रूप में नए रिलीज में बदल गया है यह केवल पैकेज कैश को साफ करता है और स्थापित पैकेज या ग्रब को प्रभावित नहीं करता है।
जारो

2
मैं पुष्टि कर सकता हूं कि sudo apt-get autoremove14.04 में पुरानी (एक संस्करण से अधिक) गुठली को हटा दें। अपनी कर्नेल को अपग्रेड करने से पहले और बाद में आपको इसे चलाना पड़ सकता है। जब मैं उन्नयन से पहले भागा, तो इसने पुराने कर्नेल के सामान्य संस्करण को ही हटा दिया। फिर, मेरे कर्नेल को अपग्रेड करने के बाद, इसने पुराने कर्नेल की कमता संस्करण को भी हटा दिया।
टेकनोराह

मेरा मतलब था sudo apt-get autocleanकमान। @tekNorah I ने पुराने कर्नेल के एक जोड़े को स्थापित किया और उसके बाद sudo apt-get autoremoveउबंटू स्टूडियो 14.04 में भाग गया। इसने कोई गुठली नहीं निकाली। मेरे पास केवल न्यूनता गुठली है। आपके पास -Generic और -lolatency kernels दोनों क्यों स्थापित हैं?
जर्नो

5
हां, यह मेरे लिए खूबसूरती से काम करता है, सभी पुरानी गुठली को ठीक से साफ करता है, और पागल एक-लाइन स्क्रिप्ट पर भरोसा नहीं करता है! अनुशंसित, काश मैं इसे एक से अधिक बार बढ़ा सकता!
जेफ एटवुड

1
@JeffAtwood अच्छी तरह से, यह अधिक गुठली निकाल सकता है जो सुरक्षित है। बग रिपोर्ट
jarno

25

10.04 जीयूआई विधि

कंप्यूटर Janitor पुरानी गुठली को साफ कर सकता है और मेरा मानना ​​है कि यह उबंटू में डिफ़ॉल्ट रूप से स्थापित है (लेकिन कुबंटु नहीं)।

GRUB 1, यदि आप इसका उपयोग कर रहे हैं, तो /boot/grub/menu.lstयह निर्दिष्ट करने का विकल्प है कि इसे अधिकतम कितने कर्नेल को दिखाना चाहिए। GRUB 2, जहां तक ​​मैं बता सकता हूं, नहीं।


4
कंप्यूटर Janitor का उपयोग नहीं किया जाना चाहिए - यह छोटी गाड़ी है और अब इसे natty / oneiric / सटीक में एक डिफ़ॉल्ट एप्लिकेशन के रूप में हटा दिया गया है।
जीवाश्म

2
बल्कि, एक अन्य उत्तर (अपने स्वयं के ppa) में वर्णित "Ubuntu Tweak" स्थापित करें, जिसका अपना "कंप्यूटर चौकीदार" है (अस्थायी रूप से पुराने ubuntu संस्करणों में उपलब्ध "कंप्यूटर चौकीदार" के साथ भ्रमित नहीं होने के लिए)
microsoft

25

यह पता लगाने के लिए कि क्या गुठली और हेडर स्थापित हैं

dpkg -l | grep linux-image

dpkg -l | grep linux-headers

फिर आप उन्हें एक या एक करके हटा सकते हैं, बस सबसे हाल ही में रखना सुनिश्चित करें।

हटाने को स्वचालित करने के लिए कुछ आसान कमांड और स्क्रिप्ट भी हैं।

http://ubuntuforums.org/showthread.php?t=1658648

सभी अप्रयुक्त कर्नेल और हेडर को हटाने के निम्नलिखित दावे:

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

( apt-get -yप्रश्न के बिना हटाने के लिए उपयोग करें)

18.04.1 को चलने पर क्या होता है:

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

\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*
  linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*
0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.
After this operation, 671 MB disk space will be freed.
(Reading database ... 227403 files and directories currently installed.)
Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...
Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...
Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...
Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-image-4.15.0-33-generic (4.15.0-33.36) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-36-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Found linux image: /boot/vmlinuz-4.15.0-34-generic
Found initrd image: /boot/initrd.img-4.15.0-34-generic
Adding boot menu entry for EFI firmware configuration
done
Removing linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...
Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...
I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-generic
I: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-36-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Adding boot menu entry for EFI firmware configuration
done
Removing linux-modules-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...
(Reading database ... 156180 files and directories currently installed.)
Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...
dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removed
Purging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...
Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...
~$ uname -r
4.15.0-36-generic

फ़ोरम में मिली स्क्रिप्ट दोषपूर्ण है। यह कुछ वांछित हेडर पैकेज को नहीं हटा सकता है (यदि आप कुछ पुराने-केप कर्नेल का उपयोग करने के लिए होते हैं), और दूसरी ओर, यह आपके द्वारा रखे जाने वाले कुछ पैकेजों को हटा सकता है।
जारो

टिप्पणी के लिये आपका धन्यवाद। स्क्रिप्ट सही नहीं हो सकती है, हालांकि, मैं इसे वर्षों से उपयोग कर रहा हूं, मुख्य रूप से 12.04 और 14.04, 32 और 64 बिट्स पर, और कोई समस्या नहीं हुई है। ... और हाँ, linux-libc-devस्थापित है।
mikewhatever 3

मुझे लगता है कि linux-libc-devवर्त्तमान वर्जन की वर्जन संख्या वर्जन की वर्जन संख्या से मेल खाती है। यहाँ पर dpkg -l linux-libc-dev | sed '/^ii/!d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'linux-libc-dev: amd64
jarno

मैं अभी भी आपके निष्कर्षों को पुन: पेश नहीं कर सकता, हालांकि, सुरक्षित पक्ष पर होने के लिए, मैंने एक अतिरिक्त फ़िल्टर जोड़कर कमांड को संशोधित किया है - grep -E "(image|headers)"
mikewhatever

1
पहले -yप्लीज के साथ झंडे को बाहर करने की कोशिश करो ..!
खतरे '

16

पुरानी लिनक्स छवि कर्नेल को हटाने के लिए, जिस कर्नेल को आप रखना चाहते हैं, उसमें पहले बूट करें।

आप कमांड का उपयोग करके कर्नेल संस्करण की जांच भी कर सकते हैं uname -rताकि आप गलत को गलती से न हटाएं।

अब सिंटैप्टिक पैकेज मैनेजर पर जाएं और linux-imageऊपरी कमांड द्वारा दिखाए गए को छोड़कर पुराने संस्करणों को खोजें और निकालें। आम तौर पर मैं नवीनतम के साथ जाना पसंद करता हूं।

अब जब आप पुनः आरंभ करते हैं तो आपको एक अधिक स्वच्छ ग्रब मेनू दिखाई देगा।


यह संभवतः सबसे बुनियादी तरीका है जो उन उपयोगकर्ताओं के लिए होगा जिन्होंने w / o कंप्यूटर Janitor स्थापित किया है।
ब्रोम

1
उबंटू 11.04 से ग्रब मेनू केवल वर्तमान कर्नेल को डिफ़ॉल्ट रूप से दिखाता है, पुराने कर्नेल 'पिछले कर्नेल' मेनू में छिपे हुए हैं। यह विधि अभी भी पुराने लोगों को साफ करने के लिए काम करेगी।
एंडी

14

आप ubuntu-tweak को स्थापित कर सकते हैं और फिर एप्लिकेशन पर जाएं -> सिस्टम टूल -> ubuntu tweak और

यहां छवि विवरण दर्ज करेंपैकेज क्लीनर और स्वच्छ गुठली पर क्लिक करें। यह वर्तमान में उपयोग किए गए कर्नेल को नहीं दिखाता है जिससे आप हमेशा सुरक्षित रहेंगे।


8

व्यक्तिगत रूप से, मुझे उपयोग करना पसंद है Synaptic। यह मुझे इस बारे में अधिक सुरक्षित महसूस कराता है कि क्या हो रहा है। एकमात्र ऐप जिसका मैंने उपयोग किया है, जिसमें पुरानी गुठली को हटाने का विकल्प है, वह है Ubuntu Tweak

आपके द्वारा उपयोग नहीं की जा रही गुठली कैसे निकालें:

  • UbuntuTweak खोलें
  • बाएं हाथ के फलक में 'एप्लीकेशन' के तहत 'पैकेज क्लीनर' पर क्लिक करें
  • 'सफाई दृश्य' प्रेस 'क्लीन कर्नेल' के दाईं ओर
  • सभी गुठली का चयन करें - मुझे लगता है कि उपयोग में एक सूचीबद्ध नहीं है, लेकिन सिर्फ uname -aएक टर्मिनल में चल रहा है

सिनैप्टिक में आप 'अवयव' -> 'कर्नेल और मॉड्यूल' पर फ़िल्टर कर सकते हैं, जिसमें सभी कर्नेल शामिल हैं। और पहले कॉलम के आधार पर छाँटें: 'S' (स्थिति), इसलिए आपको सभी स्थापित कर्नेल ऑन-टॉप मिलते हैं। वास्तव update-grubमें सलाह दी जाती है।
खतरे '

6

आप linux-image-...Synaptic का उपयोग करके पुरानी गुठली ( संकुल) की स्थापना रद्द कर सकते हैं , और जो उन्हें बूट मेनू से हटा देगा। ध्यान रखें कि चल रहे कर्नेल को न निकालें (आप इसके संस्करण की जांच कर सकते हैं uname -r)।

ध्यान रखें कि एक या दो पुराने संस्करण होने से आपको समस्या का निवारण करने में मदद मिल सकती है, कुछ गलत होना चाहिए।

वैकल्पिक रूप से, आप प्रविष्टियों को मैन्युअल रूप से संपादित (/) हटा सकते हैं gksu gedit /boot/grub/grub.cfg, लेकिन जब आप एक नए कर्नेल में अपडेट करते हैं तो वे फिर से उत्पन्न होंगे। यदि आप recovery modeविकल्पों को हटाने के बारे में सोच रहे हैं - नहीं। वे काम में आ सकते हैं यदि आप कुछ तोड़ते हैं जो आपको बूट करने से रोकता है।


इस पेज को देखें


Grub2 अब बनाता है यह ग्रब प्रविष्टि है हर बार एक नया कर्नेल स्थापित किया गया है। update-grubजिसके साथ उन सभी गुठली को फिर से लिखेंगे।
मार्को Ceppi

4

यह एक शुद्ध कमांड लाइन समाधान है।

सबसे पहले वर्तमान में चलने वाले कर्नेल को छोड़कर सभी स्थापित कर्नेल संस्करणों की एक सूची तैयार करें:

dpkg-query -W -f='${Package}\n' |
  grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
    grep -v $(uname -r | cut -d- -f1,2))

वैकल्पिक रूप से अंतिम दो को छोड़कर सभी स्थापित कर्नेल संस्करणों की एक सूची तैयार करें:

dpkg-query -W -f='${Package}\n' |
  grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
    sort -V | head -n -2)

सूची का परीक्षण करें। सुनिश्चित करें कि आप जो कर्नेल संस्करण रखना चाहते हैं, वह सूची का हिस्सा नहीं है। uname -rवर्तमान में चल रहे कर्नेल के संस्करण को देखने के लिए कमांड का उपयोग करें ।

यदि आप उन परिणामों से खुश हैं जिनका उपयोग आप apt-getसंकुल को हटाने के लिए कर सकते हैं ।

पहले एक सूखा रन (उदाहरण के रूप में पहला जनरेटर का उपयोग करके):

sudo apt-get --dry-run purge $(
  dpkg-query -W -f='${Package}\n' |
    grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
      grep -v $(uname -r | cut -d- -f1,2)))

फिर एक वास्तविक रन:

sudo apt-get purge $(
  dpkg-query -W -f='${Package}\n' |
    grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
      grep -v $(uname -r | cut -d- -f1,2)))

यदि आप प्रक्रिया को स्वचालित करना चाहते हैं तो --yesपैरामीटर जोड़ें :

sudo apt-get --yes purge $(
  ...)

@jarno मैं अपनी कमांड लाइन को संयोजित और अनुकूलित करने के आपके प्रयास की सराहना करता हूं। मैंने आपकी कमांड लाइन हटा दी क्योंकि मैं पठनीयता और सरलता पसंद करता हूं। मैंने जानबूझकर पठनीयता और सरलता के लिए अपनी आज्ञा का पालन किया। मेरे मस्तिष्क के लिए कम से कम पठनीय और सरल। कृपया अपनी कमांड लाइन को टिप्पणी के रूप में या अपने स्वयं के उत्तर में पोस्ट करें।
lesmana

1
यह दो उद्देश्यों को जोड़ती है: अंतिम दो गुठली रखें और गुठली को वर्तमान की तुलना में नया रखें sudo apt-get purge -- $(ls -1U /boot/vmlinuz* | cut -d- -f2,3 | sort -uV | head -n -2 | awk -v c=$(uname -r | cut -d- -f1,2) '($0==c){exit} //' | sed -r -e 's/\./\\./g' -e 's/.*/-&($|-)/')। के लिए कोई जरूरत नहीं है dpkg-queryके बाद से apt-getनियमित अभिव्यक्ति संभाल कर सकते हैं। कृपया ध्यान दें कि मैं डॉट्स से कैसे बचता हूं, और नियमित अभिव्यक्ति में उपसर्ग और प्रत्यय जोड़ें। अपने स्वयं के उत्तर में स्क्रिप्ट का उपयोग करके आप कुछ गुठली भी रख सकते हैं जो वर्तमान से अधिक पुरानी हैं।
जारो

4

इस उत्तर का लाभ मूल उबंटू बैश का उपयोग तृतीय-पक्ष एप्लिकेशन को स्थापित किए बिना किया जाता है। कस्टम कर्नेल के उपयोगकर्ता जिन्होंने अपनी आवश्यकताओं के अनुरूप इस बैश स्क्रिप्ट का उपयोग नहीं किया है aptया dpkgबदल सकते हैं। यह उत्तर इस पर आधारित है ( एक बार में पुरानी गुठली का चयन कैसे करें )।

ज़ीनिटी आधारित समाधान

ज़ीनिटी एक सूची को संसाधित करने और रेडियो-बटन के साथ आइटम का चयन करने के लिए टर्मिनल को एक अच्छा जीयूआई इंटरफ़ेस प्रदान करता है :

rm-kernels १

जैसा कि शीर्षक बताता है कि आपके द्वारा बूट किया गया वर्तमान कर्नेल हटाया नहीं जा सकता है और सूची में शामिल नहीं है। बताया गया आकार /bootनिर्देशिका में कितना सहेजा जाएगा । आपकी डिस्क पर अधिक सहेजा जाता है क्योंकि कर्नेल बायनेरिज़ अन्य क्षेत्रों में भी रहते हैं। 27 जुलाई, 2017 नोट: निर्देशिका /usr/src/*kernel_version*और /lib/modules/*kernel_version*अब भी शामिल हैं।

संशोधित तिथि का उपयोग कर की खोज की है statआदेश। मेरे सिस्टम में वह तारीख हर बार "स्पर्श" की जाती है जब कर्नेल को इस का उपयोग करके बूट किया जाता है ( आप कैसे पता लगा सकते हैं कि किसी विशिष्ट कर्नेल संस्करण को अंतिम बार बूट किया गया था? ) क्रोन रिबूट स्क्रिप्ट। हालाँकि, आपके सिस्टम पर तारीख कर्नेल रिलीज़ की तारीख होगी, न कि पिछली बार जब आपने इसे बूट किया था।

apt-get purge आपको गर्भपात का मौका देता है

आपको सब कुछ देखने का अंतिम अवसर दिया जाएगा, जिसे शुद्ध किया जाएगा और कुल डिस्क स्थान (कुछ भ्रामक) देखें, जिन्हें पुनर्प्राप्त किया जाएगा:

The following packages will be REMOVED:
  linux-headers-4.7.1-040701* linux-headers-4.7.1-040701-generic*
  linux-headers-4.7.2-040702* linux-headers-4.7.2-040702-generic*
  linux-headers-4.7.3-040703* linux-headers-4.7.3-040703-generic*
  linux-headers-4.8.1-040801* linux-headers-4.8.1-040801-generic*
  linux-headers-4.8.10-040810* linux-headers-4.8.10-040810-generic*
  linux-headers-4.8.11-040811* linux-headers-4.8.11-040811-generic*
  linux-headers-4.8.4-040804* linux-headers-4.8.4-040804-generic*
  linux-headers-4.8.5-040805* linux-headers-4.8.5-040805-generic*
  linux-image-4.7.1-040701-generic* linux-image-4.7.2-040702-generic*
  linux-image-4.7.3-040703-generic* linux-image-4.8.1-040801-generic*
  linux-image-4.8.10-040810-generic* linux-image-4.8.11-040811-generic*
  linux-image-4.8.4-040804-generic* linux-image-4.8.5-040805-generic*
0 upgraded, 0 newly installed, 24 to remove and 2 not upgraded.
After this operation, 2,330 MB disk space will be freed.
Do you want to continue? [Y/n] 

कोड

इस कोड को एक निष्पादन योग्य फ़ाइल rm-kernelsमें कॉपी करें जिसका नाम इसमें है /usr/local/bin:

#!/bin/bash

# NAME: rm-kernels
# PATH: /usr/local/bin
# DESC: Provide zenity item list of kernels to remove

# DATE: Mar 10, 2017. Modified Jul 28, 2017.

# NOTE: Will not delete current kernel.

#       With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
#       # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
#       First time for `du` 34 seconds.
#       Second time for `du` 1 second.

# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
#       By default `du` is not used and estimated size is displayed.

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    zenity --error --text "root access required. Use: sudo rm-kernels"
    exit 99
fi

OLDIFS="$IFS"
IFS="|"
choices=()

current_version=$(uname -r)

for f in /boot/vmlinuz*
do
    if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
    [[ $f =~ vmlinuz-(.*) ]]
    v=${BASH_REMATCH[1]}        # example: 4.9.21-040921-generic
    v_main="${v%-*}"            # example: 4.9.21-040921

    # Kernel size in /boot/*4.9.21-040921-generic*
    s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')

    if [[ $# -ne 0 ]] ; then    # Was a parameter passed?
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             # Kernel headers size in /usr/src/*4.9.21-040921*
             s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
        else
             s2="0M"            # Linux Headers are not installed
        fi
        # Kernel image size in /lib/modules/4.9.21-040921-generic*
        s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
    else
        # Estimate sizof of optional headers at 125MB and size of image at 220MB
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             s2="125M"
        else
             s2="0M"            # Linux Headers are not installed
        fi
        s3="220M"
    fi

    # Strip out "M" provided by human readable option of du and add 3 sizes together
    s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
    t=$(( t + s ))
    s=$s" MB"
    d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
    choices=("${choices[@]}" false "$v" "$d" "$s")
done

# adjust width & height below for your screen 640x480 default for 1920x1080 HD screen
# also adjust font="14" below if blue text is too small or too large

choices=(`zenity \
        --title "rm-kernels - Total: $t MB excluding: $current_version" \
        --list \
        --separator="$IFS" \
        --checklist --multiple \
        --text '<span foreground="blue" font="14">Check box next to kernel(s) to remove</span>' \
        --width=640 \
        --height=480 \
        --column "Select" \
        --column "Kernel Version Number" \
        --column "Modified Date" \
        --column " Size " \
        "${choices[@]}"`)
IFS="$OLDIFS"

i=0
list=""
for choice in "${choices[@]}" ; do
    if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
    ((i++))

    short_choice=$(echo $choice | cut -f1-2 -d"-")
    header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)

    # If -lowlatency and -generic are purged at same time the _all header directory
    # remains on disk for specific version with no -generic or -lowlatency below.
    if [[ $header_count -lt 3 ]]; then
        # Remove all w.x.y-zzz headers
        list="$list""linux-image-$choice- linux-headers-$short_choice"
    else
        # Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
        list="$list""linux-image-$choice- linux-headers-$choice" 
    fi

done

if [ "$i" -gt 0 ] ; then
     apt-get purge $list
fi

नोट: आपको फ़ाइल का उपयोग करने के लिए sudo अनुमति की आवश्यकता है:

gksu gedit /usr/local/bin/rm-kernels

फ़ाइल निष्पादन योग्य उपयोग करने के लिए:

sudo chmod +x /usr/local/bin/rm-kernels

सर्वर संस्करण

rm-kernels-serverसर्वर संस्करण चुनिंदा रूप से गुठली को एक साथ हटाने के लिए है। GUI (चित्रमय) संवाद बॉक्स के बजाय एक पाठ-आधारित संवाद बॉक्स का उपयोग पर्स को गुठली चुनने के लिए किया जाता है।

  • स्क्रिप्ट को चलाने से पहले आपको डायलॉग फंक्शन को इंस्टॉल करना होगा :

    sudo apt install dialog

डायलॉग डिफ़ॉल्ट उबंटू डेस्कटॉप इंस्टालेशन में है लेकिन उबंटू सर्वर में नहीं है।

नमूना स्क्रीन

rm-kernels-server १

rm-kernels-server बैश कोड

#!/bin/bash

# NAME: rm-kernels-server
# PATH: /usr/local/bin
# DESC: Provide dialog checklist of kernels to remove
#       Non-GUI, text based interface for server distro's.

# DATE: Mar 10, 2017. Modified Jul 28, 2017.

# NOTE: Will not delete current kernel.

#       With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
#       # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
#       First time for `du` 34 seconds.
#       Second time for `du` 1 second.

# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
#       By default `du` is not used and estimated size is displayed.

# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
    echo "root access required. Use: sudo rm-kernels-server"
    exit 99
fi

# Must have the dialog package. On Servers, not installed by default
command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed.  Aborting."; exit 99; }

OLDIFS="$IFS"
IFS="|"
item_list=() # Deviate from rm-kernels here.

current_version=$(uname -r)
i=0
for f in /boot/vmlinuz*
do
    if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
    [[ $f =~ vmlinuz-(.*) ]]
    ((i++)) # Item List
    v=${BASH_REMATCH[1]}        # example: 4.9.21-040921-generic
    v_main="${v%-*}"            # example: 4.9.21-040921

    # Kernel size in /boot/*4.9.21-040921-generic*
    s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')

    if [[ $# -ne 0 ]] ; then    # Was a parameter passed?
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             # Kernel headers size in /usr/src/*4.9.21-040921*
             s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
        else
             s2="0M"            # Linux Headers are not installed
        fi
        # Kernel image size in /lib/modules/4.9.21-040921-generic*
        s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
    else
        # Estimate sizof of optional headers at 125MB and size of image at 220MB
        if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
             s2="125M"
        else
             s2="0M"            # Linux Headers are not installed
        fi
        s3="220M"
    fi

    # Strip out "M" provided by human readable option of du and add 3 sizes together
    s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
    t=$(( t + s ))
    s=$s" MB"
    d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
    item_list=("${item_list[@]}" "$i" "$v ! $d ! $s" off)
done

cmd=(dialog --backtitle "rm-kernels-server - Total: $t MB excluding: $current_version" \
    --title "Use space bar to toggle kernel(s) to remove" \
    --column-separator "!" \
    --separate-output \
    --ascii-lines \
    --checklist "         Kernel Version --------- Modified Date  Size" 20 60 15)

selections=$("${cmd[@]}" "${item_list[@]}" 2>&1 >/dev/tty)

IFS=$OLDIFS

if [ $? -ne 0 ] ; then
    echo cancel selected
    exit 1
fi

i=0
choices=()

for select in $selections ; do
    ((i++))
    j=$(( 1 + ($select - 1) * 3 ))
    choices[i]=$(echo ${item_list[j]} | cut -f1 -d"!")
done

i=0
list=""
for choice in "${choices[@]}" ; do
    if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
    ((i++))

    short_choice=$(echo $choice | cut -f1-2 -d"-")
    header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)

    # If -lowlatency and -generic are purged at same time the _all header directory
    # remains on disk for specific version with no -generic or -lowlatency below.
    if [[ $header_count -lt 3 ]]; then
        # Remove all w.x.y-zzz headers
        list="$list""linux-image-$choice- linux-headers-$short_choice"
    else
        # Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
        list="$list""linux-image-$choice- linux-headers-$choice" 
    fi

done

if [ "$i" -gt 0 ] ; then
    apt-get purge $list
fi

नोट:dialog निर्देश में कॉल करने के लिए ड्राइंग बॉक्स के लिए "+ ----- +" के साथ --ascii-linesलाइन-ड्रॉ विस्तारित वर्ण सेट (जो sshपसंद नहीं करता है) को बदलने के लिए पारित किया गया है । यदि आपको यह रूप पसंद नहीं है, तो आप --no-linesबिना किसी बॉक्स के निर्देश का उपयोग कर सकते हैं ।


28 जुलाई, 2017 अपडेट

प्रत्येक कर्नेल की परिकलित आकार लिया गया था /boot/*kernel_version*जिसमें से कुल 5 फाइलें थीं ~ 50 एमबी। सूत्र में फ़ाइलों को शामिल करने से बदल गया है /usr/src/*kernel_version*और /lib/modules/*kernel_version*। प्रत्येक कर्नेल के लिए परिकलित आकार अब ~ 400 एमबी है। उपरोक्त कोड rm-kernelsऔर rm-kernels-serverअपडेट कर दिया गया है। हालाँकि, ऊपर का नमूना स्क्रीन अभी तक इन परिवर्तनों को प्रतिबिंबित नहीं करता है।

डिफ़ॉल्ट रूप से 125 एमबी पर लिनक्स-हेडर के लिए फ़ाइलों का आकार और 220 एमबी में लिनक्स-छवि का अनुमान लगाना है क्योंकि duजब तक फाइलें कैश में नहीं होती हैं तब तक यह धीमी गति से हो सकता है। duस्क्रिप्ट के किसी भी पैरामीटर को पास करके वास्तविक आकार प्राप्त करने के लिए ।

सभी कर्नेल आकार (वर्तमान में चल रहे संस्करण को छोड़कर, जिन्हें हटाया नहीं जा सकता) को अब शीर्षक बार में दिखाया गया है।

डायलॉग बॉक्स प्रत्येक कर्नेल की अंतिम एक्सेस तिथि प्रदर्शित करने के लिए उपयोग किया जाता है । यह तिथि बैकअप या समान संचालन के दौरान सभी कर्नेल के लिए बड़े पैमाने पर अधिलेखित हो सकती है। संवाद बॉक्स अब इसके बजाय संशोधित तिथि दिखाता है ।


2

लगभग सभी अप्रचलित पैकेजों से छुटकारा पाने का एक आसान तरीका, किसी भी पैकेज सूची में पैकेज नहीं हैं, साथ ही अप्रचलित कर्नेल निम्नलिखित में से एक करना है:

dpkg --purge $(aptitude search ?obsolete)

हालांकि, यह उन पैकेजों को याद करेगा, जो अभी भी अन्य पैकेजों द्वारा अनुशंसित हैं, और -R / - बिना-अनुशंसित तर्क इस समस्या को हल नहीं करता है।

'o' के साथ सॉर्ट मोड को स्विच करने के बाद dselect सभी अप्रचलित पैकेजों को दिखाएगा, जिसमें एप्टीट्यूड मिस भी शामिल है, लेकिन कुछ लोगों को इसका उपयोग करना पसंद नहीं है।


दिए गए आदेश पुरानी गुठली को शुद्ध नहीं करते हैं और न ही मेरे अनुभव में ग्रब मेनू को प्रभावित करते हैं।
जारो

2

sedस्थायी रूप से पुराने कर्नेल को हटाने के लिए स्वीकृत उत्तर में कुछ खामियां हैं, अगर किसी ने कर्नेल को अपग्रेड करने के बाद कंप्यूटर को रिबूट नहीं किया है तो कमांड नए कर्नेल को भी हटा देगा।

यहाँ एक वैकल्पिक समाधान है जो वास्तविक पुरानी गुठली को हटाने के लिए सभी स्थितियों पर विचार करेगा:

#!/bin/bash
kernels=( $(grep -Po "^linux-image-[^-]+-[^-]+-generic\b" < <(dpkg --get-selections)) )
cur_rel=$(grep -Po ".*(?=-[a-z]*$)" < <(uname -r))

for kernel in "${kernels[@]}"; do
    ker_rel=$(grep -Po "[0-9].*(?=-[a-z]*)" <<< "$kernel")
    dpkg --compare-versions "$ker_rel" gt "$cur_rel" && echo "Please Restart your computer first" && break
    dpkg --compare-versions "$ker_rel" lt "$cur_rel" && sudo apt-get remove "$kernel"
done

यदि आपके पास कोई ऐसा संस्करण है जो वर्तमान से नया है तो यह आपको पहले कंप्यूटर को पुनः आरंभ करने की चेतावनी देगा। यह भी ध्यान दें कि पुराने कर्नेल एक अच्छे कारण के कारण संरक्षित हैं जो कि यदि आप किसी तरह अपने वर्तमान कर्नेल को अपने सिस्टम को अस्थिर बना रहे हैं तो आपको किसी भी पुराने कर्नेल में बूट करने में सक्षम होना चाहिए।


यह जेनेरिक की तुलना में किसी भी अन्य स्वाद की कमला गुठली या गुठली नहीं निकालेगा।
जरनो

मुझे लगता है कि आप इस sed समाधान का उल्लेख करते हैं।
जारो

@jarno: कैसे के बारे में जगह grep -Po "^linux-image-[^-]+-[^-]+-generic\b"के साथ grep -Eo "^linux-(image|headers|tools)-[^-]+-[^-]+(|-generic)\s" | sed -e "s/\s//g"और grep -Po ".*(?=-[a-z]*$)"साथ grep -Eo "^[0-9]+\.[0-9]+\.[0-9]+-[0-9]+"और grep -Po "[0-9].*(?=-[a-z]*)"साथ grep -Eo "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+"?
सादी

@ साडी, वेलकम, एल कि लोनली की गुठली भी नहीं मिलेगी।
जर्नो

1
धन्यवाद। अन्य तरीके मेरे लिए काम नहीं करते थे। तुम्हारा काम किया।
फिलिप डेल्टिल

1

अनिलुरस में पुरानी गुठली निकालने के साथ-साथ अप्रयुक्त विन्यास की सुविधा है। मैं व्यक्तिगत रूप से इसे सिनैप्टिक से मैन्युअल रूप से हटा देता हूं। आप से ailurus स्थापित कर सकते हैं getdeb के साथ ही पीपीए


"अनिलुरस बैकअप के लिए एक उपकरण है जो इंस्टॉल किए गए सॉफ़्टवेयर की एक नाम सूची है। ... अतीत में इलुरस के कई कार्य हैं। अब इसका केवल एक ही कार्य है। क्योंकि मुझे लगता है कि एक वास्तव में उपयोगी फ़ंक्शन दर्जनों कम उपयोगी फ़ंक्शन से बेहतर है।"
जरनो

1

मेरे पास इसके लिए एक स्क्रिप्ट है जिसे बहुत फैंसी स्ट्रिंग पार्सिंग की आवश्यकता नहीं है।

स्थान जारी करने के लिए सिवाय शीर्ष लेख और चित्रों को निकालें

sudo apt-get autoremove --purge 'linux-headers-[0-9].*' linux-headers-$(uname -r)+ linux-headers-$(uname -r | cut -d- -f1,2)+ 'linux-image-[0-9].*' linux-image-$(uname -r)+

1

आप पुरानी गुठली को अपडेट और हटाने के लिए ukuu - यह सभी GUI का उपयोग कर सकते हैं। मेरे लिये कार्य करता है!

बस याद रखें कि अंतिम 2 स्थापित है और जाहिर है 'चल रहा है' कर्नेल।

आप ukuu को केवल मेनलाइन रिलीज, यहां तक ​​कि आरसी गुठली दिखाने के लिए, प्वाइंट रिलीज को छिपाने के लिए सेट कर सकते हैं।

ukuu

आप सिनैप्टिक में ukuu पा सकते हैं, या निर्देश यहां हैं:

OMG! Ubuntu ukuu निर्देश स्थापित करें


1

डेविड केम्प द्वारा पिछले उत्तर के आधार पर, निम्न स्क्रिप्ट पिछले 2 संस्करणों को छोड़कर सभी हेडर और छवियों को शुद्ध करेगा ।

#!/bin/sh
# This script assumes that the installed linux-image and linux-headers packages
# share the same versions (i.e. if a linux-image version number is installed,
# the corresponding linux-headers package will also be installed, and vice
# versa.)

SECONDTOLASTVER=$(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -r -n | sed '/^[^0-9]\+$/d' | sed 's/^.*-\([0-9\.]\+-[0-9]\+\).*/\1/' | uniq | sed -n 2p)

# get a list of package names matching the argument passed to the function, and
# return only those package names which should be removed
get_pkgs_to_remove_matching () {
    if [ -n "$SECONDTOLASTVER" ]; then
        echo $(dpkg --list | grep $1 | awk '{ print $2 }' | sort | sed -n '/'"$SECONDTOLASTVER"'/q;p')
    fi
}

echo $(get_pkgs_to_remove_matching linux-image) $(get_pkgs_to_remove_matching linux-headers) | xargs sudo apt-get purge

( apt-get -yप्रश्न के बिना हटाने के लिए उपयोग करें)


किसी भी कारण से इसे डाउनवोट किया गया था? क्या यह किसी के काम नहीं आया? जब आप कॉपी / पेस्ट करते हैं तो सुनिश्चित करते हैं कि आप पेस्ट करते समय लंबी-लंबी लाइनें नहीं लपेट रहे हैं। मुझे इसके काम करने में कोई समस्या नहीं है।
मार्क

मेरी मशीन में नवीनतम कर्नेल रिलीज़ 3.13.0-43-न्यूनता है। इस लिपि से लिनेक्स-हेडर्स-3.13.0-43-न्यूनता का शुद्धिकरण होगा।
जारो

@jarno आपने यह कैसे निर्धारित किया? वास्तव में कुछ भी किए बिना इसे आज़माने के लिए, apt-get कमांड में "-s" ध्वज जोड़ें (या बस | xargs sudo apt-get -y purgeपूरी तरह हटा दें )। यदि यह ३.१३.०-४३-न्यूनता को प्रिंट करता है, तो शायद आपके सिस्टम पर स्थापित की तुलना में आपके पास कुछ बाद के संस्करण हैं।
मार्क

मैंने अनुकरण की कोशिश की। नहीं, लेकिन मेरे पास कुछ पहले कर्नेल संस्करण हटाए गए थे, लेकिन शुद्ध नहीं थे, और संबंधित हेडर पैकेज शुद्ध थे।
जारो

वैसे भी, मैं संकल्प के उत्तर के विचार के आधार पर एक स्क्रिप्ट विकसित कर रहा हूं।
जारो

0

यहाँ मैंने जो कुछ किया है उसकी एक कठिन रूपरेखा है, क्योंकि मैं लिनक्स में कोई विशेषज्ञ नहीं हूं, तो सुनिश्चित करें कि आप जानते हैं कि आप क्या कर रहे हैं और आपके द्वारा संशोधित की जा रही किसी भी फाइल का बैकअप लिया है।

gedit /boot/grub/grub.cfg

फिर उन प्रविष्टियों को ढूंढें जिन्हें आप रखना चाहते हैं, हम उन्हें हाइलाइट और कॉपी करेंगे

cd /etc/grub.d
ls

आपको 10_linux और 30_os-prober जैसी फ़ाइलों की सूची दिखाई देगी

sudo chmod -x 10_linux

यह ग्रब बूट मेनू में सभी लिनक्स प्रविष्टियों को जोड़ने वाले ऑटो को रोक देगा।

gksudo gedit 40_custom

कस्टम बूट मेनू फ़ाइल खोलें, फिर grub.cfg (जो अभी भी gedit में खुली होनी चाहिए) पर जाएं, और उन प्रविष्टियों की प्रतिलिपि बनाएँ जिन्हें आप रखना चाहते हैं ... जैसे

menuentry "My Default Karmic" {
  set root=(hd0,1)
  search --no-floppy --fs-uuid --set cb201140-52f8-4449-9a95-749b27b58ce8
  linux /boot/vmlinuz-2.6.31-11-generic root=UUID=cb201140-52f8-4449-9a95-749b27b58ce8 ro quiet splash
  initrd /boot/initrd.img-2.6.31-11-generic
}

उन्हें पेस्ट करें 40_custom, और फिर इसे बचाएं।

sudo chmod 755 40_custom

यह निष्पादन योग्य बनाता है, फिर अंत में हम ग्रब को अपडेट करते हैं जो grub.cfg फ़ाइल को बदल देगा:

sudo update-grub

अब, BEWARE, यदि आप अपने कर्नेल या OS को अपडेट करते हैं, तो आपका बूट मेनू शायद अपडेट नहीं होगा ... आपको मैन्युअल रूप से ऐसा करना होगा। लेकिन इस प्रक्रिया को करने से आप बूट मेनू को थोड़ा और कस्टमाइज़ कर सकते हैं, जैसे कि कर्नेल संस्करण को हटा दें और सिर्फ ubuntu नाम डाल दें ... यानी उबंटू लुसीड 10.04, आदि ...

आशा है कि किसी को यह उपयोगी लगता है, क्योंकि मुझे यह पता लगाने में थोड़ा समय लगा ... इस समाधान को कहीं भी नहीं देखा ...


3
यह उत्तर ओवरकिल जैसा लगता है। पुरानी गुठली को हटा देना ही बेहतर है।
स्कॉट सेवेरेंस

मैंने पढ़ा था कि अतिरिक्त गुठली वसूली की स्थिति में उपयोगी हो सकती है। साथ ही, बूट प्रविष्टि के पाठ को संपादित करने का यह एक सरल तरीका है। इसलिए कहने के बजाय "उबंटू, लिनक्स कर्नेल xxxx-yy --text1 -text2 -t3 -t4 --t5 इत्यादि इत्यादि" (जहाँ --text प्रविष्टियाँ कुछ विकल्पों / मापदंडों को निरूपित करती हैं जो मुझे समझ में नहीं आते हैं) आप बदल सकते हैं यह "उबंटू xx.yy" के लिए है, हालांकि मेरे पास "{" ब्रैकेट था जिससे मैं छुटकारा नहीं पा सकता था।
जो

1
जब तक मैंने सबसे वर्तमान कर्नेल ठीक से काम नहीं किया है, तब तक मैं तत्काल पिछले कर्नेल को चारों ओर रखता हूं। यदि यह काम करता है, तो यह काम करना बंद नहीं करेगा। इसलिए, जब मैंने सबसे हालिया कर्नेल (एक सप्ताह या उसके बाद) सत्यापित किया है, तो मेरे पास पुराने कर्नेल को रखने का कोई कारण नहीं है। यदि यह काम नहीं करता है, तो मेरे पास वापस जाने के लिए नवीनतम ज्ञात-अच्छा कर्नेल है। दरअसल, मैं वर्तमान में वर्तमान कर्नेल में शोस्टॉपर बग के कारण एक पुरानी कर्नेल चला रहा हूं। लेकिन इससे मेरी समग्र नीति नहीं बदलती। आपको केवल एक ज्ञात अच्छे कर्नेल की आवश्यकता है।
स्कॉट सेवेरेंस

0

सिनैप्टिक पैकेज मैनेजर स्थापित करें और फ़िल्टर टैब पर जाएं (मुझे लगता है कि फिल्टर, यदि सभी 5 की कोशिश न करें) और "स्थानीय" का चयन करें। यह आपको आपके सिस्टम पर अनाथ पैकेज दिखाएगा, जैसे कि गुठली। आपके द्वारा उन्हें अनइंस्टॉल करने के बाद, चलाएं update-grub। यह कमांड ग्रब के लिए बूट विकल्पों की सूची को अपडेट करता है।

यदि यह विफल रहता है, तो आप हमेशा कोशिश कर सकते हैं apt-get remove linux-image-version-generic


सिनैप्टिक में आप 'अवयव' -> 'कर्नेल और मॉड्यूल' पर फ़िल्टर कर सकते हैं, जिसमें सभी कर्नेल शामिल हैं। और पहले कॉलम के आधार पर छाँटें: 'S' (स्थिति), इसलिए आपको सभी स्थापित कर्नेल ऑन-टॉप मिलते हैं। वास्तव update-grubमें सलाह दी जाती है।
खतरे '

0

कौन सा संस्करण रखना है, इस पर थोड़ा और नियंत्रण रखने के लिए, स्पष्ट रूप से उन लोगों का चयन करें जिन्हें आप हटाना चाहते हैं। उदाहरण के लिए यदि आप कर्नेल संस्करण 3.2.0 को हटाना चाहते हैं। [49-53], एक साधारण forलूप का उपयोग करें :

for k in 49 51 52 53 ; do aptitude remove --purge linux-image-3.2.0-${k}-generic ; done

फिट करने के लिए कर्नेल संस्करणों की सूची को समायोजित करें।


0

इसे इस्तेमाल करे। इसे जड़ के रूप में चलाएं।

इस स्क्रिप्ट को इस रूप में सहेजें, कहना ।/keep-n-kernels.sh

पास, एक कमांड लाइन तर्क के रूप में, सबसे हाल की गुठली की संख्या जिसे आप संरक्षित करना चाहते हैं।

    
#! / Bin / bash

# कमांड लाइन तर्क के रूप में n पास करें, और यह सभी स्थापित पाया जाएगा
# गुठली और केवल n सबसे हाल ही में रखें => सभी पुराने को अनइंस्टॉल करें

# dpkg -l 'linux- *' | sed '/ ^ ii / d; /' '$ (uname -r। sed "s /\(.*\)-\( did^ 0-9] \ + \) / \ 1 /") "" / d; s / ^ [^] * [^] * \ ((^ ^ * *)। * / \ 1 / /? / [0-9] /! d! '
# यह कमांड नवीनतम कर्नेल के लिए सभी संकुल EXCEPT की सूची देता है।
# स्रोत: https://help.ubuntu.com/community/Lubuntu/Documentation/RemoveOldKernels

एन = $ 1

# स्थापित कर्नेल संस्करण खोजें:
# dpkg-query -W -f = '$ {Version} \ n' 'linux-image- *' | जीआरपी | सॉर्ट-एन
# संस्करण संख्या देता है, प्रत्येक पंक्ति में एक
# dpkg-query -W -f = '$ {Version} \ n' 'linux-image- *' | जीआरपी | sed 's /\...$// g' | grep -v '\ ... $' | सॉर्ट -यू
# केवल वही देता है जो लिनक्स-इमेज में दिखाई देता है

# प्रत्यय, उदाहरण -generic-pae
# जिस तरह का कर्नेल आप बूट करते हैं
प्रत्यय = $ (uname -r | sed 's: ^ [0-9] \ _ [0-9] \ _ [[0-9] \ - [0-9] \ {2 \} :: g')

कमांड = "एप्टी-गेट पर्ज"

$ (dpkg-query -W -f = '$ {version} \ n' 'linux-image- *' | grep में संस्करण के लिए | sed 's /\...//// g' | grep -v ' \ ... $ '| सॉर्ट -यू | हेड-एन - $ {एन})
करना
    कमांड = $ {कमांड} "^ लिनक्स-छवि - $ {संस्करण} $ {प्रत्यय}"
किया हुआ

$ आदेश

नमूना उपयोग:

# ./keep-n-kernels.sh 4 # सभी को हटाने के लिए apt-get कमांड लॉन्च करें, लेकिन 4 सबसे हाल के केल्स

यदि आप चाहते हैं [और अपने स्वयं के जोखिम पर], तो आप apt-get कमांड में एक -y (या एक बल ध्वज) जोड़ सकते हैं और इसे गैर-संवादात्मक बना सकते हैं।


यह सभी गुठली निकाल देता है, यदि आप चलाते हैं। / प्रशासन- n-kernels.sh 0. प्रत्यय स्ट्रिंग का पता लगाने से काम नहीं चलता है; मुझे लगता है कि प्रत्यय = $ (uname -r | sed -r 's / ^ [0-9।] * (- [[0-9।] +) * //') या प्रत्यय = $ (uname -r | egrep) -साल-मिलान - '- [[: अल्फ़ा:] -] + $') करेंगे।
18

लेकिन मुझे लगता है कि यह विचार अच्छा है। मैं स्क्रिप्ट को बेहतर बनाने पर काम कर रहा हूं और हो सकता है कि मैं इसे किसी समय यहां पोस्ट कर दूं, जब मुझे लगता है कि यह पर्याप्त रूप से तैयार है।
जारनो

कृपया शेयर करें, @jarno विचार उपयोगी होने के लिए खुशी है।
संकल्प

ठीक है, वहाँ यह है: लिंक
जारो

0

मैं एक केडीई डेस्कटॉप का उपयोग कर रहा हूं, और मैंने पाया सबसे आसान विकल्प केडी-कॉन्फिग-ग्रब 2 एप्लिकेशन का उपयोग यहां किया गया है: https://www.kubuntuforums.net/showthread.php?58075-remove-old-linux-versions (जो मैंने पहले से ही बैकग्राउंड इमेज, डिफॉल्ट बूट ऑप्शन और इसी तरह की सेटिंग के लिए इंस्टॉल किया था)। ड्रॉप-डाउन बॉक्स के बगल में जहां आप डिफ़ॉल्ट प्रविष्टि चुन सकते हैं, वहां "पुरानी प्रविष्टियाँ निकालें" बटन है। इस बटन पर क्लिक करना आपको सभी स्थापित गुठली की सूची के साथ प्रस्तुत करता है और आप चयन कर सकते हैं कि किन लोगों को निकालना है। जब आप परिवर्तनों को लागू करते हैं तो यह dpkg का उपयोग वास्तव में सिस्टम से और साथ ही GRUB मेनू को हटाने के लिए करेगा।


0

बस झंकार करने के लिए, आप भी जारी कर सकते हैं

apt-get remove linux-{image,headers}-x.y.z-{1,2,...,n}

जड़ के रूप में, और काम किया जाएगा।


0

यदि आप मशीनों को नियंत्रित करने के लिए ansible का उपयोग कर रहे हैं, तो यह प्लेबुक सहायक हो सकती है।

---
 - hosts: all
   become: yes
   tasks:
    - name: "Run apt-get autoremove"
      apt: 
        name: linux-image-generic
        autoremove: yes
        state: present 
        update_cache: yes
        cache_valid_time: 3600
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.