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


701

Ne zaman yeni bir Linux çekirdeği kurduğumda, grub_config içinde kalıyor ve açılış menüsünü her seferinde daha uzun yapıyor.

Yüklü paketleri manuel olarak arayabilir ve kaldırabilirim.

Ubuntu onları temizlemek veya önyükleme listesinde görünmelerini engellemek için daha kolay bir yöntem sunuyor mu?


10
İşi yapmak için temizleme-yaşlı-çekirdek adı verilen bir ubuntu komutu var. Daha fazla bilgi için cevabımı gör .
jarno

29
sudo apt-get autoremoveUbuntu 14.04+ üzerinde bir numara yapmalı
Ocak

1
Eski çekirdeklerin birikimi, devam etmekte olan bir hatadır: bugs.launchpad.net/bugs/1357093 . Düzeltme serbest bırakıldığında, eski çekirdekler varsayılan olarak otomatik olarak kaldırılır.
user535733

1
@hobs Komut, çekirdekler otomatik olarak kurulmamışsa, ancak Yazılım Güncelleyici tarafından Ubuntu Studio 14.04'te benim için numara yapmaz.
jarno

1
Ben bu sayfayı dönmeye devam ... @hobs tarafından açıklama sadece çekirdekleri olsaydı işleri otomatik olarak yüklenir - Yaptığınız ancak sudo apt-get autoremove --purge cevap izleyerek apt-marktavsiye https://help.ubuntu.com/community/RemoveOldKernels
earcam

Yanıtlar:


602

16.04 ve daha yeni Ubuntu sürümleri

sudo apt autoremove

Bu komut, bir bağımlılığı çözmek için otomatik olarak kurulan paketleri kaldırır ancak artık bağımlı değildir. Bu linux-headers-*ve eski sürümlerini içerir linux-image-*. (Çekirdeğin bir yedek versiyonunu bir geri dönüş olarak bırakarak bu işlem için de akıllıca!)

11.10 ve daha yeni Ubuntu sürümleri

GRUB2 ve tüm çekirdekleri göstermesi

Son sürümleri Grub2 yüklü Ubuntu otomatik olarak en son çekirdeği görüntülemek ve yüklediğiniz eski çekirdeklerde gizler.

GNU GRUB

Eğer göremiyorsanız grub - o zaman basmayı unutmayın Shiftönyükleme iken.

Görebileceğiniz gibi, yalnızca en son çekirdek görüntülenir.

Gösterilen seçeneği seçerseniz (düğmesine basın Enter), eski çekirdeğin tümü görünür ve önyüklenebilir duruma gelir.

GNU GRUB Önceki versiyonlar

Eski çekirdekleri kalıcı olarak silme

Mevcut en son çekirdeğe sahip ilk açılış.

Eski çekirdekleri silmenin birkaç yolu vardır. Şahsen, bilgisayar önerileri ile bilgisayarınızı kırdığı kabul edildiğinden, Bilgisayar Bağlantısı'na dokunmam .

sinaptik

Bir alternatif ise Synaptic ( sudo apt install synaptic).

linux-image için arama yapın , bir çekirdeğe sağ tıklayın ve tamamen kaldırılmayı seçin ve nihayet çekirdeği silmek için Apply (Uygula) düğmesine tıklayın.

Sinaptik Paket Yöneticisi

Aramayı linux-header için tekrarlayın, ancak bu kez tekrarlayın - daha önce seçilen çekirdek görüntü için ilgili başlıkları silebilirsiniz.

Yine de sinaptik , çıkarmaya çalıştığınız şeyi doğrulamaya çalışmaz ... ... yanlışlıkla en yeni çekirdeğinizi silebilir - hatta bu aracı kullanarak tüm çekirdeğinizi silebilir, bu şekilde sizi yenilmez bir Ubuntu !

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

uname -r

Sonuç şuna benzer olurdu:

Terminal <uname -r>

Sonucu ve numarayı hatırlayın - ilgili resmi veya başlığı silmediğinizden emin olun.

Öneri

Benim tavsiyem, en son da dahil olmak üzere en az iki veya tercihen üç tane çekirdek tutmaktır. Tavsiyenin nedeni, en son hangi çekirdeğin önyükleme yapamayacağınız veya kırılmış kablosuz gibi gerilimli bir kabiliyete sahip olamayacaksanız, önyüklenecek en az bir / iki çekirdeğe sahip olmanızdır.


3
Eski "linux-image *" paketlerini sinaptik kullanarak kaldırmak, 10.04 ile de işe yaradı. (
Bahsetmiştim

4
-ysonunda anahtar apt-gethattı, önemlidir, yoksa apt-get girdi bir boru olduğundan, sadece iptal sadece onay sorar ve. Bu yüzden bitmeli:| xargs sudo apt-get purge -y
Josh

37
Makinemde yaklaşık 20 eski linux-imageve linux-headersserbest 4.5 GB'lık alanın kaldırılması .
Andrew Mao

16
Bu yöntem iyi çalışır, ancak her çekirdeğin silinmesi aşırı zaman alan grub.cfg'yi yeniler. Toplu silme işlemi için bunu devre dışı bırakmanın ve ardından bir kez yeniden oluşturmanın bir yolu var mı?
spacediver

15
@ Spacediver'dan gelen soruyu ikinci olarak soruyorum - bu 38 gereksiz çekirdeğiniz olduğunda çılgınca yavaş bir işlemdir, çünkü her biri kaldırıldığı için yeni bir grub.cfg oluştururken kalanlar arasından geçer. Buna N ^ 2 işlemi diyoruz - yaklaşık (38 ^ 2/2) = 722 kez bir çekirdeği işler ve çok yavaştır. Elbette Ubuntu daha iyi bir şey bulabilir ....
nealmcb

384

İlk olarak, 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!

Sonra, sisteminizde kurulu tüm çekirdekleri görüntülemek / listelemek için aşağıdaki komutu yazın.

dpkg --list 'linux-image-*'

Şu anki çekirdeğinizden daha düşük olan bütün çekirdeği bulun. Hangi çekirdeğin kaldırılacağını bildiğinizde, 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.


34
Bunu 10.04 ve 12.04'te yaparken, güncelleme grubunun temizleme işlemi sırasında otomatik olarak çalıştırıldığını gördüm.
Aidan

93
bash ayraç genişlemesi kullanılabilir, örneğin sudo apt-get purge linux-image-3.2.0-3{0..5}-generic(kaldırır 30,31, .., 35)
ajo

12
Daha sonra sistemi yeniden başlatmaya gerek yok. Aslında, bu adımları uygulamadan önce sistemi yeniden başlatmalısınız, muhtemelen sadece indirdiğiniz ve kurduğunuz en yeni çekirdek sürümünü kullandığınızdan emin olun (bundan önce bir apt-get güncellemesi yaptınız & & apt-get yükseltme yaptınız, doğru mu ??)
Ricket,

4
Ayrıca linux-signed-imageUEFI sistemlerine kurulabilecek paketleri de kaldırmak isteyebilirsiniz : sudo apt-get purge linux-signed-image-3.11.0-{12,14,24}-genericki bu 12, 14 ve 24'ü
kaldıracak

1
@ jarno İmzalı bir çekirdek kullanıp kullanmadığımı bilmiyorum, ancak sistemimde uname -rherhangi bir signeddize yok . Ben imzalı resim yüklenmiş ve bu çıkışı var gibi lskomutun geçerli: /boot/vmlinuz-3.19.0-16-generic.efi.signed.
devius

283

Eski çekirdekleri kaldırmak için tek astarım (bu aynı zamanda disk alanını boşaltır)

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

Açıklama (unutmayın, |önceki komutun çıktısını diğerine girdi olarak kullanır)

  • dpkg --list Tüm kurulu paketleri listeler
  • grep linux-image yüklü linux görüntülerini arar
  • awk '{ print $2 }' sadece 2. sütunu (paket adı olan) çıkarır
  • sort -V öğeleri sürüm numarası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

Çağrının sedçözülmesi:

  • -nsedsessiz olduğunu söyler
  • `uname -r` Geçerli yüklü çekirdek sürümünü çıktılar - çıktıyı komutun bir parçası olarak içerecek şekilde backticks'e ekleriz (bunu ayrıca $(uname -r)
  • /something/q'bir şey' ile eşleştiğin zaman dur diyor (bu durumda, bir şeyin çıktısı var uname -r) - /surround bir ifade
  • p yazdırıldı
  • ;böylece, komut separtor olan /something/q;psen, başka baskı şey eşleştiğinde çıkmak diyor

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

Paranoyaksanız (benim gibi), xargs echo sudo apt-get -y purgeeski kısmı temizleme komutunun basılması için son kısmı yapabilirsiniz, ardından çalıştırmadan önce beklenmeyen bir şeyin bulunmadığını kontrol edebilirsiniz.


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

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

Not: sedçağrı değiştirilir. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")""-generic" olmadan veya yalnızca benzer olan, yalnızca sürüm (örneğin "3.2.0-44") ayıklaruname -r


Görüntüleri ve başlıkları 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 $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
Şu anki çekirdek versiyonunun aşağıdaki gibi normal ifade ile eşleştirilmesinin biraz tehlikeli olduğunu unutmayın: Noktalar herhangi bir karakterle eşleşir ve 3.1.2-23 3.1.2-2 ile eşleşir (veya başka bir yolla). Ayrıca cevabımı gör .
jarno

19
İşte ayarlanmış bir hepsi bir arada versiyonu: 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)Ayrıca cevabımı gör .
jarno

1
Bana çok büyük bir uzatma için yardım etti @ jarno ... Bir liner Kudos
Clain Dsilva

5
Karşılanmayan bağımlılıklar nedeniyle onunla kullanmam gerekiyordu dkpg -P. İşte tam sürüm: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
Sebastian Sastre

3
HAYIR BU YAPMAYIN! “Bu oneliner biraz tehlikeli görünüyor, ancak kesinlikle 220 yükselen yanılmıyor!” Kendi kendime düşündüm ve körü körüne kopyaladım. Doğrudan GRUB'a yeniden başlatıldı. Bu komut, kullandığım da dahil tüm çekirdeğimi sildi. Belki gerçek zamanlı bir çekirdekten kaçıyordum, hatırlayamıyorum bile. Şu anda Ubuntu Live CD'sini yüklemek için bir USB bellek kullanarak evime bakıyordum :(
Andreas Jansson

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

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

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

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

sudo purge-old-kernels --keep 3

1
Bu komut, yerini bulabileceğiniz bir kabuk betiğidir which purge-old-kernels.
jarno

16.04'te bunu çok kolaylaştırdıklarına sevindim! Umarım bu cevap yoluna devam ediyor ...
Toby J

Ubuntu purge-old-kernels16.04'te bisikletsiz ( kalıcı bir eve sahip olmayan rastgele faydalı araçlar ) veya herhangi bir özel pakete sahip değildim apt-get -y. Ayrıca burada , autoremove kaç tane eski çekirdeğin tutulacağına karar verir.
Pablo A,

2
16.04 'te tasfiye-çekirdeği byobu paketi tarafından temin edilmektedir (ipucu:) apt-file search purge-old-kernels. Üzerinde anlaştık, apt-get -ykaldıracağım.
bmaupin

1
@ LTS olmayan sürümleri kullanmadığımdan beri tam olarak ne zaman başladığından emin değildim. Fakat bunun sudo apt-get autoremove14.04'te çekirdekleri çıkarmayacağından eminim . Ne olduğunu biliyorsanız, belirli bir sürümle cevabı güncellemekten çekinmeyin!
bmaupin

43

Girişleri Grup 2'den Çıkarma Girişler, /etc/grub.d klasöründeki dosyaları düzenleyerek veya kaldırarak çıkarılmalıdır. /Boot/grub/grub.cfg dosyası salt okunurdur ve normalde düzenleme gerektirmemelidir.

Çok fazla çekirdek var mı?

  • Kullanmakta olduğunuz çekirdekten emin değilseniz, uname -r terminal tipinde .

  • APT ile kaldırılan çekirdekler (Synaptic, "apt-get remove", vb.) Otomatik olarak grub.cfg dosyasını günceller ve kullanıcı işlemi gerektirmez.

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

  • Ubuntu tweak'ı yükleyin

  • Ubuntu-Tweak, Uygulamalar> Sistem Araçları altında bulunabilecek.

Eski Çekirdek Girdileri Kaldır

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

  • Sağ alt kısımdaki "Kilit Aç" düğmesine basın, şifrenizi girin.

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

  • Seçilen çekirdek görüntülerini 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

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

  • Menü öğeleri Grub2 menüsüne komut dosyaları ile yerleştirilir. Menüye başka İşletim Sistemlerinin girilmesini istemiyorsanız /etc/grub.d/30_osprober işlevini devre dışı bırakın.

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

  • DISABLE_30_OS-PROBER = / etc / default / grub içinde 'true'

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

  • Değişikliklerin grub.cfg içine dahil edilmesine izin vermek için update-grub komutunu çalıştırın.

Kaynak

Not: Çekirdek güncelleme yaptıktan sonra GRUB menüsüne yeni bir giriş eklenir. İsterseniz daha eski olanı kaldırabilirsiniz. Ancak, en deneyimli kullanıcılar, yükseltme işleminde bir sorun çıkması durumunda en az bir yedek giriş yapmanızı öneriyor sorun giderme amacıyla daha eski bir çekirdek sürümü başlatmanız gerekir.

Çekirdek girdilerini kaldırmanın alternatif yolu (10.04'ten önce)

GRUB için GRUB2 değil

başlangıç ​​Yöneticisi Startupmanager yükleyin

Sistem >> Yönetim >> altında alt metin
alt metin
görebilirsiniz. İkinci ekran görüntüsünde kaç tane çekirdek göstereceğinizi seçebilirsiniz? Genelde sadece 1'de tutuyorum, ancak bir çekirdek yükseltme aldığımda, yeniden başlatmadan önce her zaman 2 olarak değiştiririm, böylece yeni çekirdek donanımımla ilgili sorunlar yaşarsa eski çekirdeği seçebilirim. Bir keresinde yeni çekirdeğin iyi çalıştığını öğrendiğimde 1 olarak değiştiriyorum.


2
Aslında, startmanager dint, Ubuntu 10.04'te bana böyle bir pencere verdi, bunun yerine iki sekme içeren bir pencere verdi -> Önyükleme seçenekleri ve Gelişmiş .. ve gelişmiş durumda çekirdek sayısını sınırlama seçeneğine sahipti. . Yani Ubuntu 10,04 için cevap güncellemek (Ve bu aşağı-olarak neden & ..) lütfen
Sen

GUI kurulu olmayan bir makinede "sunucu sayısı" ne şekilde tanımlanabilir?
sylvainulg

startupmanager modası geçmiş. Bkz. Grup-customizer
muhasturk

39

Tamamen komut satırı, bu mevcut ve ikinci en güncel olanların hepsini kaldıracaktır (aşağıdaki kafa komutundaki "-2" ile):

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
oradan tek gömlek :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
Dmitry Verkhoturov 19

@DmitryPaskal, Bunu yeni bir cevap olarak eklemelisiniz.
saji89

10
@DmitryPaskal Her zaman olduğu gibi, bunları anlamadan sadece kopyala yapıştırmayın. Makinemde bu bir astar aynı zamanda linux-libc-dev:amd64sökülmemesi gereken eşleşir .
jamesadney

1
@Kees Cook, awk argümanı sadece tek tırnak işareti ile çevrelenmemeli midir? Amacınız boru hatlarına "linux-image-" hazırlamaksa, bu sadece kullanırsanız işe yarar awk '{print "linux-image-" $0}'.
Mark

bu benim için işe yaramıyor, benim özel yüklü çekirdeğimi içeriyor (Ubuntu 14.04, 3.17 ile)
Alex R

35

Güncelleme: purge-old-kernelsedilir kaldırılmış bugünlerde.

Zor koşullarda bile çekirdekleri temizlemek için bir senaryo hazırladım. Aradı linux-purgeve burada bulabilirsiniz .

Yalnızca şu anda kullanılan çekirdekten daha eski olan çekirdekleri (ve ilgili paketleri) temizlemek istiyorsanız, sistem bozulduğunda, bu komut dosyasını kullanabilirsiniz .

Burada, eski çekirdeğin kaldırılmasıyla ilgili katkıda bulunduğum bir Ubuntu dokümantasyon sayfası da var .


Görünüşe purge-old-kernelsgöre bisikletin kesin versiyonunda (1.22) yok. Kesin olarak daha yeni bir bisiklet almanın makul / güvenli bir yolu var mı? Yoksa sadece betiği yüklemek daha kolay / güvenli midir? Uzun bir bağımlılık listesine rağmen, bir repo kullanmayı tercih ederim ..
drevicko

1
@drevicko Bkz burada .
jarno

1
@drevicko, elbette,dlocate -lsbin bikeshed
Jarno

1
@drevicko, ayrıca bkz başka bir soru
Jarno

1
@ChrisW evet var. Ben sadece senaryo üzerinde küçük bir iyileştirme yaptım, bu yüzden en son sürümünü kullanmak en iyisidir.
jarno

29

Sen takip edebilirsiniz "gözetimsiz-yükseltmeleri" Paket bölümünü kullanarak bir Otomatik Güvenlik Güncellemeleri Bu gerçekleştirmek için Ubuntu Wiki üzerinde makale.

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

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

ile

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

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

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

"^linux-image.*"; 

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


2
Bunu yaptım ama yine de 100 MB'leri tüketen 3+ çekirdeği topluyordu. Bu yüzden apt-get autoremove, her zaman dahili güncelleme yöneticisinden geçmediği için güncellemeleri yapan günlük cron işime ekledim .
Marcos

Bunun yalnızca otomatik olarak yüklenmiş olan çekirdekler için Güvenilir olarak çalıştığını düşünüyorum.
Jarno

Bu, örneğin katılımsız yükseltme ile paketleri otomatik olarak yükseltirken eski çekirdeklerin birikmesini önlemek için mükemmeldir. Ancak yeniden başlatmazsanız, o anda çalışan çekirdeğin paketinin kaldırıldığını görebilirsiniz! Bunun nedeni bir sorun olabilir: Taktığınız yeni aygıtlar çalışmayabilir, çünkü bunlar için modül sıcak yüklenemez, çünkü artık diskinizde değildir. (Bunun için hızlı bir düzeltme, yalnızca çekirdek paketini yeniden yüklemek ve ardından aygıtın fişini
çekip yeniden takmaktır

Yukarıda belirtilen konuya otomatik bir çözüm yarattım . Bunun iyi bir yaklaşım olduğunu düşünüyorsanız, onu Qwerty'nin cevabına eklemekten çekinmeyin.
joeytwiddle

27

Ubuntu ile gelen en hızlı / daha basit yol (en az 12.04'ten beri uygulanabilir) mümkün apt-get. Kullanılmayan tüm eski çekirdek sürümlerini kaldırmak istiyorsanız, aşağıdakileri yapın (Kullanılmayan önceki sürüm hariç). önceki durumuna geri 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ıracaktır. Birçok eski sürümünüz varsa, çekirdek sürümünün kaldırılmasının sorun yaşamadığından emin olmak için bir süre alacağını unutmayın. Benim için, son 12 çekirdekli sürümleri kaldırmak yaklaşık 2 dakika sürdü. Ayrıca aşağıdakileri yapabilirsiniz:

sudo apt-get clean

Bu da apt'nin önbellek klasöründe indirilen ve saklanan her şeyi ortadan kaldıracaktır. Son olarak:

sudo apt-get autoremove

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


1
Bunun 14.04'teki yeni sürümlerde değiştiğini farz ediyorum, bu sadece paket önbelleğini temizliyor ve kurulu paketleri veya grubları etkilemiyor.
jarno

2
sudo apt-get autoremove14.04'te eski (birden fazla sürümden önce) çekirdekleri çıkardığını onaylayabilirim . Çekirdeğinizi yükselttikten önce ve sonra çalıştırmanız gerekebilir. Yükseltmeden önce kaçtığımda, yalnızca eski çekirdeğin genel sürümünü kaldırdı. Sonra çekirdeğimi yükselttikten sonra, eski çekirdeğin alçaklık versiyonunu da kaldırdı.
tekNorah

sudo apt-get autocleanEmri kastetmiştim . @tekNorah Birkaç eski çekirdek kurdum ve ardından sudo apt-get autoremoveUbuntu Studio 14.04 'te koştum . Çekirdeği çıkarmadı. Sadece düşük çekirdekli çekirdekler kurulu. Neden hem generic hem de lowlatency çekirdeğe sahipsiniz?
jarno

5
Evet, bu benim için güzelce çalıştı, tüm eski çekirdekleri düzgün bir şekilde temizledi ve çılgın tek satırlı komut dosyalarına güvenmiyor! Tavsiye, keşke bunu bir kereden fazla yenebilseydim!
Jeff Atwood

1
@JeffAtwood, güvenli olan daha fazla çekirdekleri kaldırabilir. Hata raporuna
jarno

25

10.04 GUI Yöntemi

Computer Janitor eski çekirdekleri temizleyebilir ve varsayılan olarak Ubuntu'da (fakat Kubuntu'da) kurulu olmadığını düşünüyorum.

GRUB 1, eğer kullanıyorsanız, /boot/grub/menu.lstmaksimum çekirdeği göstermesi gerektiğini belirtme seçeneğine sahiptir . GRUB 2, söyleyebileceğim kadarıyla yok.


4
Computer Janitor kullanılmamalıdır - bu adamcağız ve şimdi natty / oneiric / precise varsayılan bir uygulama olarak bırakılmıştır.
fossfreedom

2
Aksine, "Ubuntu Tweak" i başka bir cevabında (kendi ppa'sında), kendi "bilgisayar haddecisi" olan (eski ubuntu sürümlerinde geçici olarak mevcut olan "bilgisayar haddecisi" ile karıştırılmamalıdır) açıklandığı şekilde kurun
michael

25

Hangi çekirdeklerin ve başlıkların yüklü olduğunu bulmak için

dpkg -l | grep linux-image

dpkg -l | grep linux-headers

Onları birer birer ya da bir arada kaldırabilirsiniz, sadece en son kullandığınızdan emin olun.

Kaldırma işlemini otomatikleştirmek için bazı kullanışlı komutlar ve komut dosyaları da vardır.

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

Aşağıdakiler kullanılmayan tüm çekirdekleri ve başlıkları kaldırmayı talep eder:

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 -ysoru olmadan kaldırmak için kullanın )

18.04.1'de çalıştırıldığında ne olur:

~$ 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

Forumda bulduğun komut dosyası hatalı. İstenen bazı başlık paketlerini kaldıramayabilir (bazı eski-pae çekirdeği kullanıyorsanız) ve diğer yandan, saklamak istediğiniz bazı paketleri kaldırabilir.
jarno

Yorum için teşekkürler. Senaryo mükemmel olmayabilir, ancak ben bunu 12.04 ve 14.04, 32 ve 64 bitlerinde yıllardır kullanıyorum ve herhangi bir problem yaşamadım. ... ve evet, linux-libc-devyüklü.
mikewhatever,

linux-libc-devO zamanki çekirdeğin sürüm numarası ile eşleşen geçerli sürüm varsayalım . Burada dpkg -l linux-libc-dev | sed '/^ii/!d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'linux-libc-dev
yazıyor

Bulgularınızı yine de çoğaltamıyorum, ancak güvenli tarafta olmak için, ek bir filtre ekleyerek komutu değiştirdim - grep -E "(image|headers)".
mikem ne olursa olsun

1
Öncelikle -ybayrağı temizlemeyle çıkarmaya çalışın lütfen ..!
tehlike89

16

Eski Linux imaj çekirdeğini kaldırmak için, ilk önce çekirdeğin içinde saklamak istediğini çiz.

Ayrıca kernel versiyonunu komut kullanarak da kontrol edebilirsiniz, uname -rböylece yanlış olanı yanlışlıkla kaldırmazsınız.

Şimdi sinaptik paket yöneticisine gidin ve linux-imageüst komutta gösterilenler dışında eski sürümleri arayın ve kaldırın. Genellikle en son olanı tercih ederim.

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


Bu muhtemelen Computer Janitor yüklü olmayan kullanıcılar için olacak en temel yöntemdir.
34'te Broam

1
Ubuntu 11.04'ten grub menüsü sadece mevcut çekirdeği varsayılan olarak gösterir, eski çekirdeği 'Önceki çekirdekler' menüsünde gizlenir. Bu yöntem eskileri temizlemek için hala çalışacaktır.
Andy

14

Ubuntu-tweak'ı yükleyebilir ve ardından Uygulamalar -> Sistem aracı -> ubuntu tweak

görüntü tanımını buraya girinpaket temizleyici ve temiz çekirdekleri tıklayın. şu anda kullanılan çekirdeği göstermediğinden daima güvende olursunuz.


8

Şahsen ben kullanmayı seviyorum Synaptic. Olanlar konusunda kendimi daha güvende hissettiriyor. Eski çekirdekleri kaldırma seçeneği olan, kullandığım tek uygulama Ubuntu Tweak .

Kullanmadığınız çekirdeklerin çıkarılması:

  • UbuntuTweak’i açın.
  • Sol bölmedeki 'Uygulamalar' altındaki 'Paket Temizleyici'yi tıklayın.
  • 'Temizlik görünümünün' sağ tarafında 'Temiz Çekirdeğe' basın
  • Tüm çekirdeği seçin - Kullanımda olanın listelenmemiş olduğunu düşünüyorum, sadece uname -aterminalde kontrol edildiğinde

Synaptic'te, tüm çekirdekleri içeren 'Bileşenler' -> 'Çekirdek ve modüller' üzerine filtre uygulayabilirsiniz. Ve ilk sütuna göre sıralayın: 'S' (Durum), böylece yüklü olan tüm çekirdekleri en üste alırsınız. Gerçekten update-grubde tavsiye edilir.
tehlike89

6

Eski çekirdekleri ( linux-image-...paketler) Synaptic kullanarak kaldırabilirsiniz ve bu önyükleme menüsünden bunları kaldıracaktır. Çalışan çekirdeği çıkarmamaya dikkat edin (versiyonunu ile kontrol edebilirsiniz uname -r).

Bir veya iki eski sürüme sahip olmanın, bir şeyler ters giderse sorun gidermenize yardımcı olabileceğini unutmayın.

Alternatif olarak, girişleri el ile düzenleyebilir / kaldırabilirsiniz ( gksu gedit /boot/grub/grub.cfg), ancak daha yeni bir çekirdeğe güncellediğinizde bunlar yeniden oluşturulur. recovery modeSeçenekleri kaldırmayı düşünüyorsanız - yapma. Sizi açmanızı engelleyen bir şeyi kırarsanız kullanışlı olabilirler.


Bu sayfaya bakınız .


Grub2 şimdi yeni bir çekirdeğin kurulu olduğu her seferinde grub girişini oluşturuyor. ile update-grubhangi tüm bu tanelerini yeniden yazacak.
Marco Ceppi

4

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

İlk önce, halihazırda çalışan çekirdek haricinde kurulu tüm ç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 ikisi 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. uname -rÇalışmakta olan çekirdeğin sürümünü görmek için komutu kullanın .

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

İlk önce kuru çalışma (örneğin 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)))

O zaman gerçek bir koşu:

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, --yesparametreyi ekleyin :

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

@ jarno Komut satırımı birleştirmek ve optimize etmek için gösterdiğiniz çaba için teşekkür ederim. Komut satırınızı kaldırdım çünkü okunabilirliği ve basitliği tercih ediyorum. Okunabilirlik ve basitlik emrimi kasıtlı olarak uyarladım. En azından beynim için okunabilir ve basit. Lütfen komut satırınızı yorum olarak veya kendi cevabınızı kullanarak gönderin.
lesmana

1
Bu iki hedefi birleştirir: Son iki çekirdeği saklayın ve çekirdeği mevcut olandan daha yeni tutun 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/.*/-&($|-)/'). Gerek yoktur dpkg-queryçünkü apt-getnormal ifadeleri işleyebilir. Lütfen nasıl noktalardan kaçtığımı not edin ve normal ifadeye önek ve sonek ekleyin. Senaryoyu kendi cevabımda kullanarak, şimdikilerden daha eski olan bazı çekirdekleri de tutabilirsiniz.
jarno

4

Bu cevabın avantajı yerli Ubuntu Bash üncü parti uygulamalar kurmadan kullanılıyor. Bu bash betiğini kendi gereksinimlerine göre kullanmayan aptveya dpkgdeğiştirmeyen özel çekirdek kullanıcıları . Bu cevabı temel alır ( Eski çekirdeğin tümü bir kerede seçici olarak nasıl temizlenir ).

Zenity tabanlı çözüm

Zenity, bir listeyi işlemek ve radyo düğmeleriyle öğeleri seçmek için terminale hoş bir GUI arayüzü sağlar :

rm-çekirdekleri 1

Başlığın gösterdiği gibi, başlattığınız çekirdeğin kaldırılması mümkün değildir ve listeye dahil edilmez. Bildirilen boyut, /bootdizine ne kadar tasarruf sağlanacağıdır . Çekirdek ikili dosyaları diğer alanlarda da bulunduğundan diskinize daha çok şey kaydedilir. 27 Temmuz 2017 not: Rehberler /usr/src/*kernel_version*ve /lib/modules/*kernel_version*şimdi de eklenmiştir.

Modifiye Tarihi kullanarak keşfedilir statkomutu. Sistemimde, o tarih kullanılarak çekirdeğin her açılışında tarihin "dokunulduğunu" ( belirli bir çekirdeğin en son ne zaman başlatıldığını nasıl anlarsınız? ) Cron yeniden başlatılmasını sağlar. Ancak, sisteminizde tarih, en son başlattığınız zaman değil çekirdek yayın tarihi olacaktır.

apt-get purge iptal etme şansını veriyor

Temizlenecek her şeyi görmek ve kurtarılacak toplam disk alanını (biraz yanıltıcı) görmek için son bir fırsat verilir:

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

Adlı bir yürütülebilir dosya için bu kodu kopyalayın rm-kernelsiçinde /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

NOT: Dosyayı oluşturmak için sudo iznine ihtiyacınız var.

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

Dosyanın çalıştırılabilir kullanımını sağlamak için:

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

Sunucu Sürümü

rm-kernels-serverÇekirdeklerin tümünü bir kerede seçici olarak silmek için kullanılan sunucu sürümüdür. Bir GUI (grafiksel) iletişim kutusu yerine, temizlenecek çekirdeği seçmek için metin tabanlı bir iletişim kutusu kullanılır.

  • Komut dosyasını çalıştırmadan önce, aşağıdakileri kullanarak iletişim işlevini yüklemeniz gerekir :

    sudo apt install dialog

İletişim kutusu varsayılan Ubuntu Masaüstü kurulumunda, ancak Ubuntu Sunucusunda değil.

Örnek ekran

rm-çekirdekleri-sunucusu 1

rm-kernels-server 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 $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

NOT:dialog Yönerge çağrısında, çizim kutuları için --ascii-linesçizgi çizme genişletilmiş karakter setini ( sshbeğenmeyen) "+ ----- +" ile değiştirmek için geçirilir . Bu görünümü sevmiyorsanız, --no-linesyönergeyi hiçbir kutu için kullanabilirsiniz .


28 Temmuz 2017 Güncellemeleri

Her bir çekirdeğin hesaplanan büyüklüğü, /boot/*kernel_version*toplamda ~ 50 MB olan 5 dosyadan alınmıştır . Formül, /usr/src/*kernel_version*ve içindeki dosyaları içerecek şekilde değiştirildi /lib/modules/*kernel_version*. Her bir çekirdek için hesaplanan boyut şimdi ~ 400 MB'dir. Yukarıdaki kod rm-kernelsve rm-kernels-servergüncellendi. Ancak, yukarıdaki örnek ekranlar bu değişiklikleri henüz yansıtmamaktadır.

Varsayılan değer, 125 MB’daki linux başlıklarının dosya boyutunu ve 220 MB’da linux görüntüsünü tahmin etmektir, çünkü dudosyalar önbellekte olmadığı sürece acı verici bir şekilde yavaşlayabilir. Gerçek büyüklüğü kullanmak duiçin betiğe herhangi bir parametre iletin.

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

Her Çekirdeğin Son Erişim Tarihini görüntülemek için kullanılan iletişim kutusu . Bu tarih, yedekleme veya benzeri işlemler sırasında tüm çekirdeğin üzerine kitlenin üzerine yazılabilir. İletişim kutusu şimdi bunun yerine Değiştirme Tarihi'ni gösteriyor .


2

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

dpkg --purge $(aptitude search ?obsolete)

Ancak bu, diğer paketler tarafından hala tavsiye edilen paketleri kaçıracak ve -R / - önerileri olmadan argüman bu sorunu çözmüyor.

sıralama modunu 'o' ile değiştirdikten sonra dselect, yetenek özlilikleri de dahil olmak üzere tüm eski paketleri gösterecektir, ancak bazı kişiler onu kullanmayı sevmiyor.


Verilen komut benim tecrübelerime göre eski çekirdekleri temizlemiyor ve grub menüsünü etkilemiyor.
jarno

2

sedEski çekirdeği kaldırmak için kullanılan kabul edilen yanıtta bazı kusurlar vardır; birisi çekirdeği yükselttikten sonra bilgisayarı yeniden başlatmamışsa, komut yeni çekirdeği de kaldırır.

Yalnızca gerçek eski çekirdeği kaldırmak için tüm durumları dikkate alacak 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

Mevcut sürümden daha yeni bir sürüme sahipseniz, bu işlem ilk önce bilgisayarınızı yeniden başlatmanız için bir uyarı verecektir. Ayrıca eski çekirdeğin iyi bir nedenden ötürü korunduğunu unutmayın; mevcut çekirdeğinizi bir şekilde karıştırırsanız, sisteminizi dengesiz hale getirirseniz, eski çekirdeğe önyükleme yapabilmeniz gerekir.


Bu, alçak kernerli çekirdekleri veya jenerik olandan başka hiçbir çeşidin çekirdeğini çıkarmaz.
jarno

Sanırım bu sed çözümlere başvuruyorsunuz .
jarno

@jarno: Nasıl değiştirilmesi konusunda grep -Po "^linux-image-[^-]+-[^-]+-generic\b"birlikte grep -Eo "^linux-(image|headers|tools)-[^-]+-[^-]+(|-generic)\s" | sed -e "s/\s//g"ve grep -Po ".*(?=-[a-z]*$)"birlikte grep -Eo "^[0-9]+\.[0-9]+\.[0-9]+-[0-9]+"ve grep -Po "[0-9].*(?=-[a-z]*)"birlikte grep -Eo "[0-9]+\.[0-9]+\.[0-9]+-[0-9]+"?
Sadi

@Sadi, wel, ben düşük çekirdekli çekirdekleri bulamazdım.
Jarno

1
Teşekkürler. Diğer yöntemler benim için işe yaramadı. Seninki işi yaptı.
Philippe Delteil

1

ailurus , kullanılmayan konfigürasyonların yanı sıra eski çekirdekleri de silme özelliğine sahiptir. Ben şahsen el ile sinaptikten kaldırdım. Şunlar arasından ailurus yükleyebilirsiniz getdeb yanı sıra ppa


“Ailurus, kurulu yazılımın bir isim listesini yedeklemeye yarayan bir araçtır.
jarno

1

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

Boşluk bırakmak için geçerli olan hariç başlıkları ve resimleri kaldır

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

Eski Çekirdekleri güncellemek ve silmek için ukuu'yu kullanabilirsiniz. Benim için çalışıyor!

Sadece son 2'yi ve belli ki 'çalışan' çekirdeği bıraktığınızı unutmayın.

Ayrıca ukuu'yu yalnızca ana hat bültenlerini, hatta RC çekirdekleri bile, nokta bültenlerini gizleyecek şekilde ayarlayabilirsiniz.

ukuu

Ukuu'yu Synaptic'te bulabilir veya talimatlar buradadır:

OMG! Ubuntu ukuu kurulum talimatları


1

David Kemp'in daha önceki bir cevabına dayanarak, aşağıdaki komut son 2 sürüm hariç tüm başlıkları ve resimleri temizleyecektir .

#!/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 -ysoru olmadan kaldırmak için kullanın )


Bunun neden aşağı çekildiğinin bir nedeni var mı? Birisi için işe yaramadı mı? Kopyalarken / yapıştırırken yapıştırırken uzun çizgiler sarmadığınızdan emin olun. Çalışırken hiçbir sorun yaşamadım.
Mark

Makinemdeki en yeni çekirdek sürümü 3.13.0-43-lowlatency'dir. Bu komut dosyası linux-headers-3.13.0-43-lowlatency’yi temizliyor.
jarno

@jarno bunu nasıl belirlediniz? Aslında hiçbir şey yapmadan denemek için apt-get komutuna bir "-s" bayrağı ekleyin (ya da | xargs sudo apt-get -y purgetamamen kaldırın ). 3.13.0-43-lowlatency çıktısı varsa, o zaman belki sisteminizde kurulu olandan daha yeni sürümlere sahip olabilirsiniz.
Mark

Ben simülasyonu denedim. Hayır, fakat daha önceki bazı çekirdek sürümlerini kaldırdım, temizlemedim ve ilgili başlık paketleri temizlendi.
jarno,

Her neyse, Sankalp'in cevabı fikrine dayanan bir senaryo geliştiriyorum.
Jarno

0

işte yaptığım işin kaba taslakları, linux konusunda uzman olmadığım için dikkatli olun, ne yaptığınızı bildiğinizden ve değiştirdiğiniz dosyaları yedeklediğinizden emin olun.

gedit /boot/grub/grub.cfg

sonra saklamak istediğiniz girişleri bulun, bunları vurgulayıp kopyalayacağız.

cd /etc/grub.d
ls

10_linux ve 30_os-prober gibi dosyaların bir listesini göreceksiniz

sudo chmod -x 10_linux

bu, tüm linux girişlerini grub önyükleme menüsüne otomatik olarak eklemeyi durduracaktır.

gksudo gedit 40_custom

Özel önyükleme menüsü dosyasını açın, ardından grub.cfg (ki hala gedit'te açık olması gerekir) 'e dönün ve saklamak istediğiniz girişleri kopyalayın ...

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
}

Onları yapıştırın 40_customve sonra kaydedin.

sudo chmod 755 40_custom

yürütülebilir hale getirir, sonra nihayet grub.cfg dosyasını değiştirecek grubu güncelleriz:

sudo update-grub

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

Umarım birileri bunu faydalı bulur, anlaması biraz zaman aldı ... bu çözümü hiçbir yerde görmedim ...


3
Bu cevap fazlaca görünüyor. Sadece eski çekirdekleri çıkarmak daha iyidir.
Scott Severance

Kurtarma durumlarında ekstra çekirdeklerin yararlı olabileceğini okudum. Ayrıca, önyükleme girişinin metnini düzenlemenin basit bir yoludur. Yani "Ubuntu, Linux çekirdeği xxxx-yy --text1 -text2 -t3 - t4 --t5 vb. Vb." Yerine (ki --text girişleri sadece anlamadığım bazı seçenekleri / parametreleri belirtir) değiştirebilir "Ubuntu xx.yy" 'a gitmeme rağmen "{" dirsekim olmamıştı.
Joe

1
En eski çekirdeğin düzgün çalıştığını doğrulayana kadar önceki çekirdeği etrafında tutarım. İşe yararsa, çalışmayı bırakmayacak. Bu yüzden, en son çekirdeği doğruladıktan sonra (bir hafta kadar sonra), eski çekirdeği etrafında tutmak için hiçbir nedenim yok. İşe yaramazsa, geri çekilecek en son bilinen iyi çekirdeğe sahibim. Aslında, şu anki çekirdeklerdeki bir gösterici hatası nedeniyle eski bir çekirdeği çalıştırıyorum. Fakat bu benim genel politikamı değiştirmiyor. Sadece iyi bilinen bir çekirdeğe ihtiyacınız var.
Scott Severance

0

Sinaptik paket yöneticisini kurun ve filtreler sekmesine gidin (5'in hepsini denemezseniz, sanırım filtreler) ve "yerel" i seçin. Bu, sisteminizde çekirdekler gibi yetim paketleri gösterecektir. Onları kaldırdıktan sonra çalıştırın update-grub. Bu komut grub için önyükleme seçeneklerinin listesini günceller.

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


Synaptic'te, tüm çekirdekleri içeren 'Bileşenler' -> 'Çekirdek ve modüller' üzerine filtre uygulayabilirsiniz. Ve ilk sütuna göre sıralayın: 'S' (Durum), böylece yüklü olan tüm çekirdekleri en üste alırsınız. Gerçekten update-grubde tavsiye edilir.
tehlike89

0

Hangi sürümlerin tutulacağı konusunda biraz daha kontrol sahibi olmak için, kaldırmak istediklerinizi açıkça seçin. Örneğin, çekirdeğin 3.2.0. [49-53] sürümlerini kaldırmak istiyorsanız, basit bir fordöngü 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ığacak şekilde ayarlayın.


0

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

Bu betiği olduğu gibi kaydedin, ./keep-n-kernels.sh

Komut satırı argümanı olarak, korumak istediğiniz en son çekirdek sayısını girin.

    
#! / Bin / bash

Bir komut satırı argümanı olarak # pass n ve bütün kurulu olanları bulur
# kernels ve sadece en yenilerini sakla => tüm eski olanları kaldır

# dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "$ (unr -r | sed" s /\(.*\)-\(-)^ 0-9] \ + \) / \ 1 / ")" '/ d; s / ^ [^] * [^] * \ ([^] * \). * / \ 1 /; / [0-9] /! d '
# bu komut, en son çekirdek için EXCEPT paketlerinin listesini verir.
# kaynak: https://help.ubuntu.com/community/Lubuntu/Documentation/RemoveOldKernels

n = 1 $

# yüklü olan çekirdek sürümlerini bulun:
# dpkg-query -W -f = '$ {Sürüm} \ n' 'linux-image- *' | grep. | sıralama
# her satıra bir tane olmak üzere sürüm numaraları verir
# dpkg-query -W -f = '$ {Sürüm} \ n' 'linux-image- *' | grep. | sed 's /\...$// g' | grep -v '\ ... $' | sıralama
# sadece linux resimde görünenleri verir

# suffix, örneğin -generic-pae
# çizdiğin çekirdek türü
sonek = $ (uname -r | sed 's: ^ [0-9] \. [0-9] \. [0-9] \ - [0-9] \ {2 \} :: g')

command = "apt-get purge"

$ 'daki sürüm için (dpkg-query -W -f =' $ {Sürüm} \ n '' linux-image- * '| grep. | sed' s /\...$// g '| grep -v' \ ... $ '| sort -u | head -n - $ {n})
yap
    command = $ {command} "^ linux-image - $ {version} $ {suffix}"
tamam

$ komutu

Örnek kullanım:

# ./keep-n-kernels.sh 4 # en son 4 çekirdeğin dışındaki hepsini kaldırmak için apt-get komutunu başlat

[VE KENDİ RİSKİNİZDE] istiyorsanız, apt-get komutuna bir -y (veya zorlama bayrağı) ekleyebilir ve etkileşimli olmayabilir.


./Keep-n-kernels.sh 0 komutunu çalıştırdığınızda tüm çekirdeği kaldırır. Ben soneki = $ (uname -r | sed -r 's / ^ [0-9.] * (- [0-9.] +) * //') veya sonek = $ (uname -r | egrep - -only-matching - '- [[: alpha:] -] + $') yapar.
jarno

Ama bence bu fikir güzel. Senaryoyu geliştirmek için çalışıyorum ve belki de yeterince hazır olduğumu düşündüğüm zaman buraya gönderirim.
jarno

Lütfen paylaşın, @jarno. Fikir yararlı görünüyor bilmek sevindim.
Sankalp

Tamam, işte orada: link
jarno

0

KDE masaüstünü kullanıyorum ve bulduğum en kolay seçenek burada önerildiği gibi kde-config-grub2 uygulamasını kullanmaktı: https://www.kubuntuforums.net/showthread.php?58075-remove-old-linux-versions (hangi arka plan resmi, varsayılan önyükleme seçeneği ve benzeri ayarlamak için zaten yüklü). Varsayılan girişi seçebileceğiniz açılır kutunun yanında bir "Eski Girdileri Kaldır" düğmesi bulunur. Bu düğmeyi tıkladığınızda, yüklü tüm çekirdeklerin bir listesi sunulur ve hangilerinin kaldırılacağını seçebilirsiniz. Değişiklikleri uyguladığınızda, sistemden ve GRUB menüsünden gerçekten kaldırmak için dpkg kullanacaktır.


0

Sadece chime için, ayrıca sorun olabilir

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

kök olarak ve iş yapılacaktır.


0

Makineleri kontrol etmek için ansible kullanıyorsanız, bu oyun kitabı yardımcı olabilir.

---
 - 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.