Önyükleme menüsünü temizlemek için eski çekirdek sürümlerini nasıl kaldırırım?

658

Her yeni Linux çekirdeği kurduğumda, grub_config dosyasında kalıyor, her defasında önyükleme menüsünü daha uzun yapıyor.

Biliyorum yüklü paketleri el ile arayabilir ve kaldırabilirsiniz.

Ubuntu bunları temizlemenin veya önyükleme listesinde gösterilmelerini engelleyecek daha kolay bir yol sağlar mı?

    
sordu Hans 22.01.2016 16:20

30 cevap

567

16.04 ve Ubuntu'nun daha yeni sürümleri

sudo apt autoremove

Bu komut, bağımlılığı gidermek için otomatik olarak yüklenen paketleri kaldırır, ancak artık bağlı değildir. Bu, linux-headers-* ve linux-image-* 'nin eski sürümlerini içerir. (Ayrıca, bu işlem hakkında da zekice, çekirdeğin bir yedek kopyasını geri dönüş olarak bırakıyor!)

11.10 ve Ubuntu'nun yeni sürümleri

GRUB2 ve tüm çekirdeklerin gösterimi

Ubuntu 'da yüklenen Grub2 ' nin en son sürümleri, en son çekirdeği otomatik olarak görüntüler ve yüklemiş olduğunuz eski çekirdekleri gizler.

grubunuzu görmüyorsanız - önyükleme yaparken Üst Karakter 'e basmayı unutmayın.

Gördüğünüz gibi, sadece en yeni çekirdek görüntülenir.

Gösterilen seçeneği seçerseniz ( Enter 'a basın) tüm eski çekirdekler görünür hale gelir ve önyükleme için kullanılabilir.

Eski çekirdekleri nasıl kalıcı olarak silebilirim

İlk kullanılabilir çekirdekle ilk açılış.

Eski çekirdekleri silmenin birkaç yolu vardır. Kişisel olarak, Bilgisayar Hizmetçisi 'ye dokunmayacağım çünkü bu, bilgisayarınızı önerileriyle kırmak için onaylandı.

sinaptik

Bir alternatif Synaptic ( sudo apt install synaptic )

linux-image için arama yapın, bir çekirdeği sağ tıklayın ve tam kaldırmayı seçin ve sonunda çekirdeği silmek için Uygula düğmesini tıklayın.

Aramayı tekrarlayın, ancak bu sefer linux-header için - daha önce seçilen çekirdek görüntüsü için ilgili üstbilgileri silebilirsiniz.

Synaptic , neyi kaldırmaya çalıştığınızı doğrulamaya çalışmaz ... en yeni çekirdeğinizi yanlışlıkla silebilir - hatta bu araçla tüm çekirdeklerinizi silemezsiniz. em> Ubuntu !.

Hangi çekirdeği kullandığınızı kontrol etmeyi unutmayın:

uname -r

Sonuç şuna benzer:

Sonucu ve sayıyı unutmayın - ilgili resmi veya başlığı silmediğinizden emin olun.

Öneri

Benim tavsiyem en son iki dahil olmak üzere en az iki veya tercihen üç çekirdek tutmaktır. Önerinin sebebi, en az çekirdek önyükleme yapamayacağınız ya da kırık kablosuz gibi geri yüklenen bir özelliği tanıtamayacağınız herhangi bir sebepten ötürü, önyükleme için en az bir tane / iki çekirdek daha alacağınızdır.

    
verilen cevap fossfreedom 08.05.2018 18:09
365

Öncelikle, en son çekirdeği kullandığından emin olmak için Sisteminizi yeniden başlatın. Ardından terminali açın ve mevcut çekirdeğinizi kontrol edin:

uname -r 

BU KERNELİ ÇIKARMAYIN!

Ardından, sisteminizdeki tüm yüklü çekirdekleri görüntülemek / listelemek için aşağıdaki komutu yazın.

dpkg --list | grep linux-image 

Mevcut çekirdeğinizden daha düşük olan tüm çekirdekleri bulun. Hangi çekirdeğin kaldırılacağını biliyorsanız, kaldırmak için aşağıdan devam edin. Seçtiğiniz çekirdeği kaldırmak için aşağıdaki komutları çalıştırın.

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

Son olarak, grub2'yi güncellemek için aşağıdaki komutları çalıştırın

sudo update-grub2 

Sisteminizi yeniden başlatın.

    
verilen cevap penreturns 11.07.2018 10:33
261

Tek çekirdekli eski çekirdekleri kaldırmak için (bu ayrıca disk alanını boşaltır)

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

Açıklama (hatırlayın, | önceki komutun çıkışını sonraki giriş olarak kullanır)

  • dpkg --list , kurulu tüm paketleri listeler
  • grep linux-image yüklü linux görüntülerini arar
  • awk '{ print }' sadece 2. sütunu çıkarır (paket adı)
  • sort -V , öğeleri sürüm sayısına göre sıraya koyar
  • sed -n '/''uname -r''/q;p' , geçerli çekirdekten önceki satırları yazdırır
  • xargs sudo apt-get -y purge bulunan çekirdekleri temizler

sed çağrısının açılması:

  • -n , sed öğesinin sessiz olmasını söyler
  • 'uname -r' mevcut kurulu kernel sürümünü verir - çıktıyı komutun bir parçası olarak içerecek şekilde backticks'e dahil ederiz (bunu $(uname -r)
  • olarak da görebilirsiniz)
  • /something/q , "bir şey" ile eşleştiğinde durur (bu durumda, bir şey uname -r çıktısıdır) - / , normal bir ifadeyi çevreler
  • p yazdırıldı
  • ; komutu separtor, bu yüzden /something/q;p bir şeyle eşleştiğinde çıkmayı bırakıyor, başka bir şey yazıyor

, toplam sed -n '/''uname -r''/q;p' , geçerli çekirdek adıyla eşleşene kadar satırları yazdırır.

Eğer paranoyaksan (benim gibi), son bölümü xargs echo sudo apt-get -y purge yapabilirsin, böylece eski çekirdekleri temizlemenin emri basılır, o zaman bunu çalıştırmadan önce beklenmedik bir şey olmadığını kontrol edebilirsin.

Başlıkları kaldırmak için değiştirilmiş sürüm:

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

Not: sed çağrısı değiştirildi. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)//")" , yalnızca "-generik" veya uname -r

ile benzer olmayan sürümü (ör. "3.2.0-44") çıkarır.

Resimleri ve üstbilgileri kaldırmak için hepsi bir arada sürüm (yukarıdaki iki sürümü birleştirir):

echo $(dpkg --list | grep linux-image | awk '{ print  }' | sort -V | sed -n '/''uname -r''/q;p') $(dpkg --list | grep linux-headers | awk '{ print  }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)//")"'/q;p') | xargs sudo apt-get -y purge
    
verilen cevap David Kemp 21.07.2015 08:27
55

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 ve altı:

Bunu en kolay ve hızlı şekilde buluyorum. En son çekirdeğin yanı sıra iki tane daha tutar:

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

Tutulan ek çekirdeklerin sayısını değiştirmek için:

sudo purge-old-kernels --keep 3
    
verilen cevap bmaupin 21.05.2017 20:34
41

Grubun 2. Girişlerini Kaldırma Girişler, /etc/grub.d klasöründeki dosyaları düzenleyerek veya kaldırarak kaldırılmalıdır. /Boot/grub/grub.cfg dosyası salt okunurdur ve normalde düzenleme gerektirmemelidir.

Çok Fazla Çekirdek?

  • Şu anda kullandığınız çekirdeğin uname -r türünde olduğundan emin değilseniz.

  • APT (Synaptic, "apt-get remove" vb.) aracılığıyla kaldırılan çekirdekler, grub.cfg dosyasını otomatik olarak günceller ve kullanıcı eylemi gerekmez.

  • Çekirdekleri (ve menü girişlerini) kaldırmak için harika bir araç Ubuntu-Tweak, güvenli ve kullanımı kolay bir GUI uygulamasıdır.

  • Ubuntu ayarını yükle

  • Ubuntu-Tweak, Uygulamalar & gt; Sistem Araçları.

Eski Çekirdek Girişlerini Kaldırma

  • Soldaki "Paket Temizleyici" yi ve sağ panelden "Temiz Çekirdek" i seçin.

  • Sağ alttaki "Kilit açma" düğmesine basın, şifrenizi girin.

  • Görüntülenen listeden kaldırmak istediğiniz çekirdek görüntüleri ve başlıkları seçin. Kullanılan çekirdek listelenmiyor.

  • Seçilen çekirdek resimlerini ve başlıklarını kaldırmak için sağ alt kısımdaki "Temizleme" düğmesine basın.

İşletim Sistemini Grub menüsünden kaldırın

  • Bilgisayardan kaldırılmış olan diğer İşletim Sistemleri de "update-grub" root olarak çalıştırıldıktan sonra menüden kaldırılacaktır.

  • Menü öğeleri, scriptler ile Grub2 menüsüne yerleştirilir. Diğer İşletim Sistemlerinin menüye girilmesini istemiyorsanız, /etc/grub.d/30_osprober

    devre dışı bırakın.
  • Komut dosyasının çalışması için bu komutu çalıştırın. sudo chmod -x /etc/grub.d/30_os-prober

  • DISABLE_30_OS-PROBER="true" / etc / default / grub

    içinde

Memtest86 + 'yı Grub Menüsünden Kaldır
sudo chmod -x /etc/grub.d/20_memtest86+

  • Değişikliklerin grub.cfg'ye eklenmesine izin vermek için update-grub komutunu çalıştırın

Kaynak

Not: Çekirdek güncellemelerinden sonra GRUB menüsüne yeni bir giriş eklenir. İsterseniz daha büyük olanı kaldırabilirsiniz.Ancak, en deneyimli kullanıcılar, yükseltme ile ilgili bir sorun olduğunda en az bir yedek girişi tutmanızı tavsiye eder. Sorun giderme amacıyla eski bir çekirdek sürümünün önyüklenmesi.

Çekirdek girişlerini kaldırmanın alternatif yolu (10.04'ten önce)

GRUB değil GRUB2 için

startupmanager

Sistem & gt; & gt; Yönetim & gt; & gt;

İkinci ekran görüntüsünde, kaç tane kernelin gösterileceğini seçebilirsiniz. Genelde sadece 1'de kalıyorum, fakat bir çekirdek yükseltmesi aldığımda, yeniden başlatmadan önce her zaman 2'ye değiştiririm, böylece yeni çekirdek donanımımla ilgili sorunları varsa eski çekirdeği seçebilirim. Yeni çekirdeğin iyi çalıştığını öğrendiğimde, onu 1 olarak değiştirdim.

    
38

Tamamen komut satırı, bu, geçerli ve ikinci en güncel olanı (aşağıdaki başlık komutunda "-2" aracılığıyla) kaldıracaktır:

OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |
    awk '{print "linux-image-" %pre% " linux-headers-" %pre%}' )
if [ -n "$OLD" ]; then
    apt-get -qy remove --purge $OLD
fi
apt-get -qy autoremove --purge
    
verilen cevap Kees Cook 08.05.2015 19:01
34

Güncelleme: purge-old-kernels , günümüzde kullanımdan kaldırıldı .

Zorlu koşullarda bile çekirdekleri temizlemek için bir senaryo yaptım. % Co_de% olarak adlandırılır ve burayı bulabilirsiniz.

Sadece kullanılmayan çekirdeklerden daha eski olan çekirdeği (ve ilgili paketleri) boşaltmak isterseniz, sistem bozuk değilse, bu komut dosyası .

Ayrıca, eski çekirdeklerin kaldırılmasına katkıda bulunduğum bir Ubuntu dokümantasyon sayfası da var. burada .

    
verilen cevap jarno 19.11.2017 16:00
29

"katılımsız yükseltmeler" paket bölümünü Otomatik Güvenlik Güncelleştirmeleri makalesi.

Aşağıdaki satırı /etc/apt/apt.conf.d/50unattended-upgrades dosyasında değiştirmeniz gerekir;

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

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

Çekirdek dahil eski paketleri otomatik olarak kaldırmak için.

Ayrıca satırı kaldırın veya yorum yapın

"^linux-image.*"; 

Dosyanın "NeverAutoRemove" bölümünde /etc/apt/apt.conf.d/01autoremove.

    
verilen cevap Qwerty 01.03.2013 13:44
27

Ubuntu ile gelen en hızlı / basit yol (en az 12.04'ten beri geçerlidir) mümkündür apt-get . Kullanılmayan tüm eski çekirdek sürümlerini kaldırmak istiyorsanız aşağıdakileri yapın (Kullanmakta olduğunuz bir önceki hariç) .Bu çekirdek çekirdeği sürümü bir şekilde başarısız olursa, gitmek için bir yol olduğundan emin olun. önceki bir duruma dönüş). Aşağıdakileri yapın:

sudo apt-get autoclean

Bu, sahip olabileceğiniz tüm eski dosyaları (Çekirdek sürümleri dahil) ortadan kaldırır. Birçok eski sürümünüz varsa, çekirdek sürümünün kaldırılmasının sorun olmaması gerektiğinden, bir süre alacaktır. Benim için, son 12 çekirdek sürümlerini kaldırmak yaklaşık 2 dakika sürdü. Aşağıdakileri de yapabilirsiniz:

sudo apt-get clean

apt'in önbellek klasörüne indirilen ve saklanan her şeyi ortadan kaldıracak. Sonunda sahip olduğunuz:

sudo apt-get autoremove

kullanılmayan paketleri kontrol eder ve gerekirse bunları kaldırır. Bu, yüklenen herhangi bir uygulamanın artık ihtiyaç duymadığı kütüphaneler ve bağımlılık paketleri için harika bir özelliktir.

    
verilen cevap Luis Alvarado 22.08.2017 21:44
25

10.04 GUI Yöntemi

Computer Janitor eski çekirdekleri temizleyebilir ve Ubuntu'da (ancak Kubuntu değil) varsayılan olarak kurulu olduğuna inanıyorum.

GRUB 1, bunu kullanıyorsanız, en fazla kaç tane çekirdek göstermesi gerektiğini belirlemek için /boot/grub/menu.lst seçeneğine sahiptir. GRUB 2, söyleyebileceğim kadarıyla değil.

    
verilen cevap maco 26.03.2012 10:58
23

Çekirdeklerin ve başlıkların nasıl kullanıldığını öğrenmek için

dpkg -l | grep linux-image

dpkg -l | grep linux-headers

Daha sonra bunları tek tek veya birlikte kaldırabilir, yalnızca en güncel kaldığınızdan emin olun.

Ayrıca, kaldırmayı otomatik hale getirmek için bazı kullanışlı komutlar ve komut dosyaları da vardır.

İşte

Kullanılmayan tüm çekirdeklerin ve başlıkların kaldırılmasıyla ilgili aşağıdaki iddialar:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d'|grep -E "(image|headers)" | xargs sudo apt-get purge
    
verilen cevap mikewhatever 24.04.2018 22:59
16

Daha eski Linux görüntü çekirdeklerini kaldırmak için, önce tutmak istediğiniz çekirdeğe önyükleme yapın.

Ayrıca, yanlış sürümü yanlışlıkla kaldırmamak için uname -r komutunu kullanarak çekirdek sürümünü de kontrol edebilirsiniz.

Şimdi sinaptik paket yöneticisine gidin ve linux-image için arama yapın ve üst komutun gösterdiği dışında eski sürümleri kaldırın. Genel olarak en yeni olanı seçmeyi tercih ederim.

Şimdi yeniden başlattığınızda daha temiz bir grup menüsü göreceksiniz.

    
verilen cevap anurag-jain 03.03.2011 14:10
14

ubuntu-tweak ve ardından Uygulamalara Git - & gt; Sistem aracı - & gt; ubuntu tweak ve

paket temizleyicisini tıklayın ve çekirdekleri temizleyin. Şu anda kullanılan çekirdeği göstermez, böylece her zaman güvende olacaksınız.

    
verilen cevap Lincity 03.03.2011 14:26
7

Şahsen, Synaptic kullanmayı seviyorum. Bana neler olduğu konusunda daha güvende hissettiriyor. Eski çekirdekleri kaldırma seçeneğim olan tek uygulama Ubuntu Tweak .

Kullanmadığınız çekirdeği nasıl temizlerim:

  • UbuntuTweak'yi Aç
  • Sol taraftaki bölmedeki 'Uygulamalar' bölümünün altındaki 'Paket Temizleyici'yi tıklayın
  • 'Temizlik görünümünün' sağında 'Temiz Çekirdeklere basın'
  • Tüm çekirdekleri seçin - kullanımda olanın listelenmediğini düşünüyorum, ancak bir terminalde uname -a çalışmasının kontrol edilmesi durumunda
verilen cevap Alan Featherston 08.04.2013 02:24
6

Synaptic kullanarak eski çekirdekleri ( linux-image-... paketleri) kaldırabilir ve bu onları önyükleme menüsünden kaldıracaktır. Çalışan çekirdeği çıkarmamaya dikkat edin ( uname -r ile sürümünü kontrol edebilirsiniz).

Bir veya iki eski sürüme sahip olmanız sorun gidermenize yardımcı olabilir, bir şeyler ters giderse.

Alternatif olarak, girişleri manuel olarak düzenleyebilir / kaldırabilirsiniz ( gksu gedit /boot/grub/grub.cfg ), ancak daha yeni bir çekirdeğe güncellediğinizde bunlar yeniden oluşturulur. % Co_de% seçeneğini kaldırmayı düşünüyorsanız - yapma. Önyüklemenizi engelleyen bir şeyi kırdığınızda kullanışlı olabilirler.

Bu sayfaya bakın.

    
verilen cevap evgeny 13.04.2017 14:14
4

Bu tam bir komut satırı çözümü.

İlk olarak şu anda çalışan çekirdek dışında tüm yüklü çekirdek sürümlerinin bir listesini oluşturun:

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

Alternatif olarak, son iki hariç tüm yüklü çekirdek sürümlerinin bir listesini oluşturun:

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

Listeyi inceleyin. Saklamak istediğiniz çekirdek sürümlerinin listenin bir parçası olmadığından emin olun. Şu anda çalışan çekirdeğin sürümünü görmek için uname -r komutunu kullanın.

Sonuçlardan memnunsanız, paketleri kaldırmak için apt-get kullanabilirsiniz.

Önce bir kuru çalışma (örnek olarak ilk jeneratörü kullanarak):

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)))

Sonra gerçek bir çalışma:

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)))

İşlemi otomatikleştirmek istiyorsanız, --yes parametresini ekleyin:

sudo apt-get --yes purge $(
  ...)
    
verilen cevap lesmana 16.05.2015 18:18
3

Bu cevabın avantajı, Ubuntu Bash'in üçüncü taraf uygulamaları kurmadan kullanılır. % Co_de% veya apt kullanmayan özel çekirdeklerin kullanıcıları, bu bash komut dosyasını gereksinimlerine göre değiştirebilir. Bu cevap ( nasıl seçilir? Seçmeli olarak nasıl temizlenir? hepsi bir kerede eski çekirdekler.)

Zenite tabanlı çözüm

Zenity, bir listeyi işlemek ve radyo düğmeleri ile öğeleri seçmek için terminale güzel bir GUI arayüzü sunar:

Başlık, yüklediğiniz mevcut çekirdeğin kaldırılamayacağını ve listeye dahil edilmediğini gösterir. Rapor edilen boyut, dpkg dizininde ne kadar kaydedileceğidir. Daha fazla diskinizde kaydedilir, çünkü çekirdek ikilileri de diğer alanlarda bulunur. 27 Temmuz 2017, not: /boot ve /usr/src/*kernel_version* dizinleri şimdi de dahil edilmiştir.

Değiştirilen Tarih , /lib/modules/*kernel_version* komutu kullanılarak keşfedildi. Sistemimde bu tarih, çekirdeğin her açılışında "dokunuldu" ( Belirli bir çekirdek sürümü son booted ne zaman öğreneceksiniz? ) cron yeniden komut dosyası. Ancak, sisteminizde tarih, önyüklemeyi son kez değil, çekirdek çıkış tarihi olacaktır.

stat , iptal etme şansı veriyor

Temizlenecek olan her şeyi görüntülemeniz ve kurtarılacak toplam disk alanını (biraz yanıltıcı) görmeniz için son bir fırsat sunulur:

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] 

Kod

Bu kodu apt-get purge adlı rm-kernels adlı bir yürütülebilir dosyaya kopyalayın:

#!/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 }')

    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 }')
        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 }')
    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

NOT: Dosyayı oluşturmak için sudo iznine ihtiyacınız var, bu yüzden kullan:

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

Dosyayı çalıştırılabilir yapmak için:

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

Sunucu Sürümü

/usr/local/bin , kernelleri bir kerede seçici olarak silmek için kullanılan sunucu sürümüdür. Bir GUI (grafiksel) iletişim kutusu yerine, temizlemek için çekirdekleri seçmek için metin tabanlı bir iletişim kutusu kullanılır.

  • Komut dosyasını çalıştırmadan önce iletişim işlevini kullanmanız gerekir:

    rm-kernels-server

İletişim kutusu, Ubuntu Masaüstü yüklemesinde değil, Ubuntu Sunucusunda bulunur.

Örnek ekran

sudo apt install dialog bash kodu

#!/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 }')

    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 }')
        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 }')
    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

NOT: rm-kernels-server çağrısında dialog 'si, line-draw genişletilmiş karakter kümesinin ( --ascii-lines sevmediği) yerine "+ ---" ile değiştirilir. Çizim kutuları için - + ". Bu görünümü sevmiyorsanız, ssh direktifini hiç kutu kullanmadan kullanabilirsiniz.

28 Temmuz 2017 Güncellemeler

Her bir çekirdeğin hesaplanan boyutu% 50'den toplam 5 dosya olan --no-lines 'sinden alındı. Formül, dosyaları /boot/*kernel_version* ve /usr/src/*kernel_version* içerecek şekilde değiştirildi. Her çekirdeğin hesaplanan boyutu şimdi ~ 400 MB. Yukarıdaki /lib/modules/*kernel_version* ve rm-kernels kodu güncellendi. Ancak, yukarıdaki örnek ekranlar henüz bu değişiklikleri yansıtmamaktadır.

Varsayılan değer, linux başlıkları için 125 MB boyutundaki dosyaların boyutunu ve 220 MB hızında linux görüntüsünü tahmin etmektir çünkü dosyalar önbelleğe alınmadığı sürece rm-kernels-server 'si ağrılı şekilde yavaş olabilir. % Co_de% kullanarak gerçek boyutu almak için komut dosyasına herhangi bir parametre aktarın.

Tüm çekirdek boyutlarının toplamı (kaldırılamayan geçerli çalışan sürüm hariç) artık başlık çubuğunda gösteriliyor.

Her Kernel'in Son Erişim Tarihi 'ni görüntülemek için kullanılan iletişim kutusu. Bu tarih, yedekleme veya benzer işlemler sırasında tüm çekirdekler için kütle üzerine yazılabilir. İletişim kutusu artık Değiştirilmiş Tarih 'i gösteriyor.

    
verilen cevap WinEunuuchs2Unix 29.07.2017 00:35
2

Hemen hemen tüm eski paketlerden kurtulmanın kolay bir yolu, artık hiçbir paket listesinde olmayan paketler, eski çekirdekler aşağıdakilerden birini yapmaktır:

dpkg --purge $(aptitude search ?obsolete)

Ancak, bu, diğer paketler tarafından hala tavsiye edilen paketleri özleyecektir ve -R / - önerilmeyen argüman bu sorunu çözmez.

sıralama modunu "o" ile değiştirdikten sonra dselect, yetenek eksiklikleri de dahil olmak üzere tüm eski paketleri gösterir, ancak bazı insanlar bunu kullanmayı sevmez.

    
verilen cevap Chris Cheney 06.04.2013 05:03
2

Eski çekirdekleri kaldırmak için sed 'yı kullanan kabul edilen yanıtın bazı kusurları vardır, eğer birisi çekirdeği yükselttikten sonra bilgisayarı yeniden başlatmazsa, komut daha yeni çekirdeği de kaldıracaktır.

İşte, tüm eski durumları yalnızca eski çekirdekleri kaldırmak için dikkate alacağınız alternatif bir çözüm:

#!/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

Geçerli olandan daha yeni bir sürümünüz varsa, bu, önce bilgisayarı yeniden başlatmanız için size bir uyarı verecektir. Ayrıca eski çekirdeklerin iyi bir sebepten dolayı korunduğuna dikkat edin, ki eğer şu anki çekirdeğinizi bozmadan sisteminizi kararsız hale getirirseniz o zaman eski çekirdeğe önyükleme yapabilirsiniz.

    
verilen cevap heemayl 17.04.2015 21:21
1

ailurus eski çekirdeklerin yanı sıra kullanılmayan yapılandırmaların kaldırılmasına da olanak tanır. Ben şahsen onu elle sinaptikten kaldırırım. getdeb adresinden ve ayrıca ppa'dan ailurus'u yükleyebilirsiniz.

    
verilen cevap sagarchalise 17.09.2010 12:53
1

Ukuu'yu kullanabilirsiniz - eski Kernel'leri güncellemek ve silmek için hepsi GUI'sidir. Benim için çalışıyor!

Sadece son 2 yüklü ve açıkçası 'çalışan' kernel'den ayrılmayı unutmayın.

Ayrıca, ukuu'yu yalnızca ana hatları, hatta RC çekirdeklerini, nokta yayınlarını gösterecek şekilde ayarlayabilirsiniz.

Synaptic'te ukuu'yu bulabilir veya talimatlar burada:

OMG! Ubuntu ukuu yükleme yönergeleri

    
verilen cevap sprocketoctopus 07.09.2017 12:39
0

Burada yaptığım şeyin kaba bir taslağıdır, linux konusunda uzman olmadığımdan emin olun, ne yaptığınızı bildiğinizden ve değiştirdiğiniz dosyaları yedeklediğinizden emin olun.

gedit /boot/grub/grub.cfg

sonra tutmak istediğiniz girişleri bulunuz, vurgulayıp kopyalayacağız

cd /etc/grub.d
ls

10_linux ve 30_os-prober

gibi dosyaların listesini görürsünüz.
sudo chmod -x 10_linux

Bu, tüm linux girişlerinin grup önyükleme menüsüne otomatik olarak eklenmesini durduracaktır.

gksudo gedit 40_custom

Özel önyükleme menüsü dosyasını açın, sonra grub.cfg'ye geri dönün (hala gedit'te açık olmalıdır) ve tutmak istediğiniz girişleri kopyalayın ... gibi

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
}

% co_de içine yapıştırın ve sonra kaydedin.

sudo chmod 755 40_custom

çalıştırılabilir hale getirir, son olarak grub.cfg dosyasını değiştirecek olan grubunu güncelleriz:

sudo update-grub

Şimdi, DİKKAT, çekirdeğinizi veya işletim sisteminizi güncellerseniz, önyükleme menünüz muhtemelen güncellenmez ... bunu elle yapmanız gerekir. Ama bu prosedürü yapmak, çekirdek sürümünü kaldırmak ve sadece ubuntu ismini koymak gibi önyükleme menüsünü biraz daha özelleştirmenize izin verecektir ... yani Ubuntu Lucid 10.04, vb ...

Birisinin bunu faydalı bulduğunu umuyorum, çünkü anlamaya karar vermem biraz zaman aldı ... Bu çözümü hiçbir yerde görmedim ...

    
verilen cevap Joe 09.01.2012 00:31
0

Synaptic paket yöneticisini yükle ve filtreler sekmesine git (tüm filtreleri, 5'i denemezse) ve "yerel" yi seç. Bu, sisteminizde çekirdekler gibi yetim paketleri gösterecektir. Onları kaldırdıktan sonra update-grub dosyasını çalıştırın. Bu komut grubun önyükleme seçenekleri listesini günceller.

Bu başarısız olursa, her zaman apt-get remove linux-image-version-generic 'yi deneyebilirsiniz.

    
verilen cevap Relish 29.05.2013 18:41
0

David Kemp'ın önceki bir yanıtına dayanarak, aşağıdaki betik son 2 sürümleri dışında tüm üstbilgileri ve resimleri temizler.

#!/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  }' | sort -r -n | sed '/^[^0-9]\+$/d' | sed 's/^.*-\([0-9\.]\+-[0-9]\+\).*//' | 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  | awk '{ print  }' | 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 -y purge
    
verilen cevap Mark 12.06.2013 20:42
0

Aşağıdaki komut dizeleri, şu anki çalışan (grep -v uname -r ) ve en son kullanılabilir çekirdek (dpkg -l | .... | kuyruk -1) haricinde yüklü linux çekirdeklerini temizler:

dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | grep -v 'dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | tail -1' | grep -v 'uname -r' | xargs apt-get -y purge

Bunu, masaüstünün önyükleme hacimlerini nispeten temiz tutmak için kullanıyorum, ancak bir sunucu durumunda, mantığı genişletmek ve sunucunun önyükleme yaptığı son X çekirdeğinin listesini korumak için bazı ek komut dosyaları yazmak isteyebilirsiniz.

Başlangıç ​​betiği gibi bir şey yapar:

uname -r >> /root/bootedkernels
cat /root/bootedkernels | sort -u | tail -3 > /root/bootedkernels # Keep the last 3 booted kernels

ve sonra kullan:

dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | grep -vf /root/bootedkernels | grep -v 'dpkg -l | grep -E linux-image-.*-generic | cut -d ' ' -f3 | tail -1' | grep -v 'uname -r' | xargs apt-get -y purge
    
verilen cevap Alexander Thompson 30.06.2013 20:37
0

Hangi sürümlerin saklanacağı konusunda biraz daha fazla kontrole sahip olmak için, kaldırmak istediğinizi açıkça seçin. Örneğin, çekirdek sürümlerini 3.2.0. [49-53] kaldırmak istiyorsanız, basit bir for döngüsü kullanın:

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

Çekirdek sürümlerinin listesini sığdırmak için ayarlayın.

    
verilen cevap NeilNjae 08.11.2013 13:51
0

Bunu dene. Kök olarak çalıştır.

Bu komut dosyasını şöyle kaydedin: ./ keep-n-kernels.sh

Bir komut satırı argümanı olarak, korumak istediğiniz en son çekirdeklerin sayısı.

    
#!/bin/bash

# pass n as a command line argument, and it will find all the installed
# kernels and keep only the n most recent ones => uninstall all older ones

# dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d'
# this command gives the list of all packages EXCEPT for the latest kernel.
# source : https://help.ubuntu.com/community/Lubuntu/Documentation/RemoveOldKernels

n=

# find the installed kernel versions :
# dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sort -n
# gives version numbers, one in each line
# dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sed 's/\...$//g' | grep -v '\...$'| sort -u
# gives only the ones that appear in linux-image

# suffix, e.g. -generic-pae
# the kind of kernel you boot into
suffix=$(uname -r | sed 's:^[0-9]\.[0-9]\.[0-9]\-[0-9]\{2\}::g')

command="apt-get purge "

for version in $(dpkg-query -W -f='${Version}\n' 'linux-image-*' | grep . | sed 's/\...$//g' | grep -v '\...$'| sort -u | head -n -${n})
do
    command=${command}"^linux-image-${version}${suffix} "
done

$command

Örnek kullanımı:

# ./keep-n-kernels.sh 4 # launch the apt-get command to remove all but the 4 most recent kernels

[VE KENDİSİNİZİ RİSKİNİZE] isterseniz, apt-get komutuna -y (veya kuvvet bayrağı) ekleyebilir ve etkileşimli olamazsınız.

    
verilen cevap Sankalp 28.01.2014 21:47
0

KDE masaüstü kullanıyorum ve bulduğum en kolay seçenek kde-config-grub2 uygulamasını burada önerildiği gibi kullanıyordu: İşte (önceden arkaplan görüntüsü, varsayılan önyükleme seçeneği ve benzerlerini ayarlamak için zaten yüklemiştim). Varsayılan girişi seçebileceğiniz açılır kutunun yanında, "Eski Girişleri Kaldır" düğmesi vardır. Bu düğmeye tıkladığınızda, yüklü tüm çekirdeklerin bir listesi bulunur ve hangisinin kaldırılacağını seçebilirsiniz. Değişiklikleri uyguladığınızda, onları sistemden ve GRUB menüsünden kaldırmak için dpkg kullanacaktır.

    
verilen cevap Ben 06.07.2014 19:44
0

Sadece zil çalmak için de yayınlayabilirsiniz

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

root olarak ve iş yapılacaktır.

    
verilen cevap Severo Raz 27.11.2014 03:26
0

Bunun için çok süslü bir dizge ayrıştırma gerektirmeyen bir komut dosyası var.

Alanı serbest bırakmak için geçerli olanın dışındaki başlıkları ve resimleri kaldırın

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)+
    
verilen cevap Paulo Santos 16.05.2015 11:40

Etiketlerdeki diğer soruları oku