it-swarm-eu.dev

Wie entferne ich alte Kernelversionen, um das Boot-Menü zu bereinigen?

Jedes Mal, wenn ich einen neuen Linux-Kernel installiere, verbleibt dieser in der grub_config, wodurch das Boot-Menü jedes Mal länger wird.

Ich weiß, dass ich die installierten Pakete manuell durchsuchen und entfernen kann.

Bietet Ubuntu eine einfachere Möglichkeit, sie zu bereinigen oder zu verhindern, dass sie in der Startliste angezeigt werden?

698
ImaginaryRobots

16.04 und neuere Versionen von Ubuntu

Sudo apt autoremove

Dieser Befehl entfernt Pakete, die automatisch installiert wurden, um eine Abhängigkeit aufzulösen, von denen jetzt jedoch keine Abhängigkeit mehr besteht. Dies schließt alte Versionen von linux-headers-* und linux-image-* ein. (Es ist auch klug in Bezug auf diesen Prozess, wenn eine Ersatzversion des Kernels als Fallback übrig bleibt!)

11.10 und neuere Versionen von Ubuntu

GRUB2 und dessen Anzeige aller Kernel

Die neuesten Versionen von Grub2 , die in Ubuntu installiert sind, zeigen automatisch den neuesten Kernel an und verbergen die älteren Kernel, die Sie möglicherweise installiert haben.

GNU GRUB

Wenn Sie Ihre Masche nicht sehen, denken Sie daran, zu drücken Shift beim booten.

Wie Sie sehen, wird nur der neueste Kernel angezeigt.

Wenn Sie die angezeigte Option auswählen (drücken Sie Enter) Dann werden alle alten Kernel sichtbar und stehen zum Booten zur Verfügung.

GNU GRUB Previous versions

So löschen Sie ältere Kernel dauerhaft

Starten Sie zuerst mit dem neuesten verfügbaren Kernel.

Es gibt verschiedene Möglichkeiten, alte Kernel zu löschen. Persönlich würde ich Computer Janitor nicht berühren, da dies anerkanntermaßen Ihren Computer mit seinen Vorschlägen kaputt macht.

synaptisch

Eine Alternative ist Synaptic (Sudo apt install synaptic)

suchen Sie nach Linux-Image , klicken Sie mit der rechten Maustaste auf einen Kernel und wählen Sie die vollständige Entfernung aus. Klicken Sie anschließend auf die Schaltfläche Übernehmen , um den Kernel zu löschen.

Synaptic Package Manager

Wiederholen Sie die Suche, aber diesmal nach linux-header - Sie können die zugehörigen Header für das zuvor ausgewählte Kernel-Image löschen.

Synaptic versucht jedoch nicht zu überprüfen, was Sie entfernen möchten ... Sie könnten versehentlich Ihren neuesten Kernel löschen - oder sogar alle Ihre Kernel über dieses Tool löschen, wodurch Sie ein unbootable Ubuntu !.

Denken Sie daran, zu überprüfen, welchen Kernel Sie verwenden:

uname -r

Das Ergebnis wäre ähnlich wie:

Terminal <uname -r>

Merken Sie sich das Ergebnis und die Zahl - stellen Sie sicher, dass Sie das entsprechende Bild oder die Kopfzeile nicht löschen.

Empfehlung

Meine Empfehlung ist, mindestens zwei oder vorzugsweise drei Kernel, einschließlich des neuesten, beizubehalten. Der Grund für die Empfehlung ist, dass Sie mindestens einen oder zwei andere Kernel zum Booten haben, wenn der neueste Kernel, mit dem Sie booten können, aus irgendeinem Grund nicht booten kann oder eine regressive Funktion einführt, z.

600
fossfreedom

Starten Sie zuerst Ihr System neu, um sicherzustellen, dass es den neuesten Kernel verwendet. Dann öffne das Terminal und überprüfe deinen aktuellen Kernel:

uname -r 

ENTFERNEN SIE DIESEN KERN NICHT!

Geben Sie anschließend den folgenden Befehl ein, um alle auf Ihrem System installierten Kernel anzuzeigen/aufzulisten.

dpkg --list 'linux-image-*'

Finden Sie alle Kernel, die niedriger sind als Ihr aktueller Kernel. Wenn Sie wissen, welchen Kernel Sie entfernen müssen, fahren Sie unten fort, um ihn zu entfernen. Führen Sie die folgenden Befehle aus, um den ausgewählten Kernel zu entfernen.

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

Führen Sie abschließend die folgenden Befehle aus, um grub2 zu aktualisieren

Sudo update-grub2 

Starten Sie Ihr System neu.

382
penreturns

Mein Einzeiler, um alte Kernel zu entfernen (das macht auch Speicherplatz frei)

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

Erläuterung (Denken Sie daran, | verwendet die Ausgabe des vorherigen Befehls als Eingabe für die nächste)

  • dpkg --list listet alle installierten Pakete auf
  • grep linux-image sucht nach den installierten Linux-Images
  • awk '{ print $2 }' gibt nur die 2. Spalte aus (das ist der Paketname)
  • sort -V ordnet die Elemente nach Versionsnummer
  • sed -n '/'`uname -r`'/q;p' druckt die Zeilen vor dem aktuellen Kernel
  • xargs Sudo apt-get -y purge löscht die gefundenen Kernel

Abwickeln des Aufrufs von sed:

  • -n weist sed an, leise zu sein
  • `uname -r` gibt das aktuell installierte Kernel-Release aus - wir nehmen es in die Backticks auf, damit die Ausgabe als Teil des Befehls enthalten ist (Sie sehen dies möglicherweise auch als $(uname -r)
  • /something/q sagt stop, wenn Sie 'etwas' suchen (in diesem Fall wird etwas von uname -r ausgegeben) - der / umgibt einen regulären Ausdruck
  • p wird gedruckt
  • der ; ist der Befehlssepartor, also sagt /something/q;p "Quit", wenn Sie eine Übereinstimmung finden, andernfalls wird gedruckt

insgesamt druckt sed -n '/'`uname -r`'/q;p' die Zeilen, bis sie mit dem aktuellen Kernelnamen übereinstimmen.

Wenn Sie paranoid sind (wie ich), können Sie den letzten Teil xargs echo Sudo apt-get -y purge so machen, dass der Befehl zum Löschen der alten Kernel gedruckt wird. Dann können Sie überprüfen, ob nichts Unerwartetes enthalten ist, bevor Sie ihn ausführen.


Geänderte Version zum Entfernen von Headern:

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

Hinweis: Der Aufruf von sed wird geändert. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" extrahiert nur die Version (z. B. "3.2.0-44") ohne "-generic" oder ähnliches aus uname -r


All-in-One-Version zum Entfernen von Bildern und Kopfzeilen (kombiniert die beiden obigen Versionen):

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
283
David Kemp

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 und niedriger:

Ich finde das der einfachste und schnellste Weg. Es enthält den neuesten Kernel sowie zwei weitere:

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

So ändern Sie die Anzahl der zusätzlichen Kernel, die beibehalten werden:

Sudo purge-old-kernels --keep 3
60
bmaupin

Entfernen von Einträgen aus Grub 2 Einträge sollten durch Bearbeiten oder Entfernen von Dateien im Ordner /etc/grub.d entfernt werden. Die Datei /boot/grub/grub.cfg ist schreibgeschützt und sollte normalerweise nicht bearbeitet werden müssen.

Zu viele Kernel?

  • Wenn Sie sich nicht sicher sind, welchen Kernel Sie gerade verwenden, geben Sie als Terminaltyp uname -r ein.

  • Über APT entfernte Kernel (Synaptic, "apt-get remove" usw.) aktualisieren die Datei grub.cfg automatisch, und es ist keine Benutzeraktion erforderlich.

  • Ein großartiges Tool zum Entfernen von Kerneln (und Menüeinträgen) ist Ubuntu-Tweak, eine sichere und benutzerfreundliche GUI-App.

  • Installieren Sie Ubuntu Tweak

  • Ubuntu-Tweak ist unter Programme> Systemprogramme verfügbar.

Ältere Kernel-Einträge entfernen

  • Wählen Sie links "Package Cleaner" und rechts "Clean Kernel".

  • Klicken Sie auf die Schaltfläche "Entsperren" unten rechts und geben Sie Ihr Passwort ein.

  • Wählen Sie aus der angezeigten Liste die Kernel-Images und Header aus, die Sie entfernen möchten. Der verwendete Kernel ist nicht aufgeführt.

  • Klicken Sie auf die Schaltfläche "Aufräumen" unten rechts, um die ausgewählten Kernel-Images und -Header zu entfernen.

Betriebssysteme aus dem Grub-Menü entfernen

  • Andere Betriebssysteme, die vom Computer entfernt wurden, werden ebenfalls aus dem Menü entfernt, sobald "update-grub" als root ausgeführt wird.

  • Menüelemente werden durch Skripte im Grub2-Menü platziert. Wenn Sie nicht möchten, dass andere Betriebssysteme in das Menü eingegeben werden, deaktivieren Sie /etc/grub.d/30_osprober

  • Führen Sie diesen Befehl aus, um die Ausführung des Skripts zu stoppen
    Sudo chmod -x /etc/grub.d/30_os-prober

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

Memtest86 + aus dem Grub-Menü entfernen
Sudo chmod -x /etc/grub.d/20_memtest86+

  • Führen Sie den Befehl update-grub aus, damit die Änderungen in die Datei grub.cfg übernommen werden können

Quelle

Hinweis: Nach der Aktualisierung des Kernels wird dem Menü GRUB ein neuer Eintrag hinzugefügt. Sie können den älteren Eintrag jedoch entfernen, wenn Sie möchten Die meisten erfahrenen Benutzer raten Ihnen, mindestens einen freien Eintrag zu behalten, falls bei einem Upgrade etwas schief geht und Sie zur Fehlerbehebung eine ältere Kernel-Version booten müssen.

Alternative Methode zum Entfernen von Kernel-Einträgen (vor 10.04)

für GRUB nicht GRUB2

Startup ManagerInstall startupmanager

Sie finden es unter System >> Administration >> alt text
alt text
Wie Sie im zweiten Screenshot sehen, können Sie auswählen, wie viele Kernel angezeigt werden sollen? Ich behalte es im Allgemeinen nur auf 1, aber wenn ich ein Kernel-Upgrade erhalte, ändere ich es immer auf 2, bevor ich neu starte, damit ich den älteren Kernel auswählen kann, wenn der neue Kernel Probleme mit meiner Hardware hat. Sobald ich weiß, dass der neue Kernel gut funktioniert, ändere ich ihn auf 1 zurück.

43
karthick87

Rein auf der Kommandozeile entfernt dies alle bis auf den aktuellen und zweithäufigsten Strom (über das "-2" im Kopfbefehl unten):

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
39
Kees Cook

Update: purge-old-kernels ist veraltet heutzutage.

Ich habe ein Skript erstellt, um Kernel auch unter schwierigen Bedingungen zu bereinigen. Es heißt linux-purge und Sie finden es hier .

Wenn Sie nur die Kernel (und die zugehörigen Pakete) löschen möchten, die älter als der aktuell verwendete Kernel sind, können Sie dieses Skript verwenden, wenn das System nicht kaputt ist.

Es gibt auch eine Ubuntu-Dokumentationsseite, an der ich mitgewirkt habe, um alte Kernel zu entfernen hier .

34
jarno

Sie können dem Verwenden des "Unattended-Upgrades" -Paket-Abschnitts von Automatic Security Updates im Ubuntu-Wiki folgen, um dies durchzuführen.

Sie müssen die folgende Zeile in der Datei /etc/apt/apt.conf.d/50unattended-upgrades ändern.

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

mit

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

um alte Pakete, einschließlich Kernel, automatisch zu entfernen.

Entfernen oder kommentieren Sie auch die Zeile

"^linux-image.*"; 

im Abschnitt "NeverAutoRemove" der Datei /etc/apt/apt.conf.d/01autoremove.

29
Qwerty

Der schnellste/einfachste Weg (Anwendbar mindestens seit 12.04), der bereits mit Ubuntu geliefert wird, ist apt-get. Führen Sie die folgenden Schritte aus, um alle nicht verwendeten älteren Kernel-Versionen zu entfernen (mit Ausnahme der vorherigen, die Sie nicht verwenden). Damit stellen Sie sicher, dass Sie einen Ausweg haben, wenn die aktuelle Kernel-Version ausfällt zurück zu einem früheren Zustand). Mach Folgendes:

Sudo apt-get autoclean

Dadurch werden alle alten Dateien (einschließlich der Kernel-Versionen) entfernt, die Sie möglicherweise haben. Beachten Sie, dass es eine Weile dauern wird, bis Sie viele alte Versionen haben, da sichergestellt werden muss, dass das Entfernen der Kernelversion keine Probleme verursacht. Für mich hat das Entfernen der letzten 12 Kernelversionen ungefähr 2 Minuten gedauert. Sie können auch Folgendes tun:

Sudo apt-get clean

Damit werden alle heruntergeladenen und im Cache-Ordner von apt gespeicherten Daten gelöscht. Zuletzt haben Sie:

Sudo apt-get autoremove

diese prüft, ob nicht verwendete Pakete vorhanden sind und entfernt sie gegebenenfalls. Dies ist ideal für Bibliotheken und Abhängigkeitspakete, die von keiner installierten App mehr benötigt werden.

27
Luis Alvarado

Um herauszufinden, welche Kernel und Header installiert sind, verwenden Sie

dpkg -l | grep linux-image

dpkg -l | grep linux-headers

Sie können sie dann einzeln oder zusammen entfernen. Achten Sie lediglich darauf, die neueste Version beizubehalten.

Es gibt auch einige nützliche Befehle und Skripte, um das Entfernen zu automatisieren.

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

Die folgenden Ansprüche, um alle nicht verwendeten Kernel und Header zu entfernen:

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

(Mit apt-get -y ohne Frage entfernen)

Folgendes passiert, wenn am 18.04.1 ausgeführt wird:

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

10.04 GUI-Methode

Computer Janitor kann alte Kernel bereinigen und ist meines Erachtens standardmäßig in Ubuntu (aber nicht Kubuntu) installiert.

Wenn Sie GRUB 1 verwenden, können Sie in /boot/grub/menu.lst angeben, wie viele Kernel maximal angezeigt werden sollen. GRUB 2, soweit ich das beurteilen kann, nicht.

25
maco

Um ältere Linux-Image-Kernel zu entfernen, starten Sie zuerst den Kernel, den Sie behalten möchten.

Sie können die Kernel-Version auch mit dem Befehl uname -r überprüfen, damit Sie nicht versehentlich die falsche Version entfernen.

Gehen Sie nun zum synaptic package manager und suchen Sie nach linux-image und entfernen Sie die älteren Versionen, mit Ausnahme der vom oberen Befehl angezeigten. Im Allgemeinen bevorzuge ich die neueste.

Wenn Sie jetzt neu starten, sehen Sie ein saubereres Grub-Menü.

16
anurag-jain

Du könntest buntu-Tweak installieren und dann zu Anwendungen -> System-Tool -> ubuntu Tweak und

enter image description here Klicken Sie auf Paketbereinigung und bereinigen Sie die Kernel. Der aktuell verwendete Kernel wird nicht angezeigt, sodass Sie immer auf der sicheren Seite sind.

14
Lincity

Persönlich verwende ich gerne Synaptic. Dadurch fühle ich mich sicherer, was los ist. Die einzige App, die ich verwendet habe und die eine Option zum Entfernen alter Kernel bietet, ist buntu Tweak .

So entfernen Sie die nicht verwendeten Kernel:

  • Öffnen Sie UbuntuTweak
  • Klicken Sie im linken Bereich unter "Anwendungen" auf "Paketbereinigung"
  • Auf der rechten Seite der "Reinigungsansicht" klicken Sie auf "Clean Kernels".
  • Wählen Sie alle Kernel aus - Ich denke, der verwendete Kernel ist nicht aufgeführt, aber überprüfen Sie, ob uname -a in einem Terminal ausgeführt wird
8

Sie können die alten Kernel (linux-image-... -Pakete) mit Synaptic deinstallieren. Dadurch werden sie aus dem Startmenü entfernt. Achten Sie darauf, den laufenden Kernel nicht zu entfernen (Sie können seine Version mit uname -r überprüfen).

Denken Sie daran, dass ein oder zwei ältere Versionen Ihnen bei der Fehlersuche helfen können, falls etwas schief geht.

Alternativ können Sie die Einträge manuell bearbeiten/entfernen (gksu gedit /boot/grub/grub.cfg), sie werden jedoch neu generiert, wenn Sie auf einen neueren Kernel aktualisieren. Wenn Sie überlegen, recovery mode -Optionen zu entfernen, tun Sie dies nicht. Sie können nützlich sein, wenn Sie etwas kaputt machen, das Sie am Booten hindert.


Siehe diese Seite

6
evgeny

Dies ist eine reine Befehlszeilenlösung.

Generieren Sie zunächst eine Liste aller installierten Kernelversionen mit Ausnahme des aktuell ausgeführten Kernels:

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

Alternativ können Sie eine Liste aller installierten Kernelversionen mit Ausnahme der letzten beiden generieren:

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

Überprüfen Sie die Liste. Stellen Sie sicher, dass die Kernel-Versionen, die Sie behalten möchten, nicht in der Liste enthalten sind. Verwenden Sie den Befehl uname -r, um die Version des aktuell ausgeführten Kernels anzuzeigen.

Wenn Sie mit den Ergebnissen zufrieden sind, können Sie die Pakete mit apt-get entfernen.

Zuerst ein Probelauf (am Beispiel des ersten Generators):

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

Dann ein echter Lauf:

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

Wenn Sie den Prozess automatisieren möchten, fügen Sie den Parameter --yes hinzu:

Sudo apt-get --yes purge $(
  ...)
4
lesmana

Der Vorteil dieser Antwort ist, dass natives Ubuntu Bash verwendet wird, ohne Anwendungen von Drittanbietern zu installieren. Benutzer von benutzerdefinierten Kerneln, die apt oder dpkg nicht verwendet haben, können dieses Bash-Skript an ihre Bedürfnisse anpassen. Diese Antwort basiert auf ( Wie man selektiv alte Kernel auf einmal löscht ).

Zenity-basierte Lösung

Zenity bietet eine schöne GUI-Oberfläche für das Terminal, um eine Liste zu verarbeiten und Elemente mit Optionsfeldern auszuwählen:

rm-kernels 1

Wie der Titel zeigt, kann der aktuelle Kernel, mit dem Sie gebootet haben, nicht entfernt werden und ist nicht in der Liste enthalten. Die angegebene Größe gibt an, wie viel im Verzeichnis /boot gespeichert wird. Auf Ihrer Festplatte wird mehr gespeichert, da sich die Kernel-Binärdateien auch in anderen Bereichen befinden. 27. Juli 2017 Hinweis: Die Verzeichnisse /usr/src/*kernel_version* und /lib/modules/*kernel_version* sind jetzt ebenfalls enthalten.

Das Änderungsdatum wird mit dem Befehl stat ermittelt. Auf meinem System wird dieses Datum jedes Mal "berührt" , wenn der Kernel mit diesem Befehl gestartet wird ( Wie erfahren Sie, wann eine bestimmte Kernelversion zuletzt gestartet wurde? =) cron Skript neu starten. Auf Ihrem System ist das Datum jedoch das Veröffentlichungsdatum des Kernels und nicht das Datum, an dem Sie ihn zuletzt gestartet haben.

apt-get purge gibt Ihnen die Möglichkeit, den Vorgang abzubrechen

Sie haben die letzte Möglichkeit, alles anzuzeigen, was gelöscht werden soll, und den gesamten Speicherplatz (etwas irreführend), der wiederhergestellt werden soll:

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] 

Der Code

Kopieren Sie diesen Code in eine ausführbare Datei mit dem Namen rm-kernels in /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

HINWEIS: Sie benötigen die Sudo-Berechtigung, um die Datei zu erstellen. Verwenden Sie dazu:

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

Um die Datei ausführbar zu machen, gehen Sie wie folgt vor:

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

Serverversion

rm-kernels-server ist die Serverversion, mit der Kernel selektiv auf einmal gelöscht werden können. Anstelle eines GUI-Dialogfelds (grafisches Dialogfeld) wird ein textbasiertes Dialogfeld zum Auswählen der zu löschenden Kernel verwendet.

  • Vor dem Ausführen des Skripts müssen Sie die - Dialogfunktion installieren, indem Sie Folgendes verwenden:

    Sudo apt install dialog

Das Dialogfeld befindet sich in der Standardinstallation von Ubuntu Desktop, jedoch nicht in Ubuntu Server.

Beispielbildschirm

rm-kernels-server 1

rm-kernels-server Bash-Code

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

HINWEIS: Beim Aufruf von dialog wird die Direktive --ascii-lines übergeben, um den erweiterten Zeichensatz für Strichzeichnungen zu ersetzen (was ssh nicht tut like) mit "+ ----- +" zum Zeichnen von Boxen. Wenn Ihnen dieses Erscheinungsbild nicht gefällt, können Sie die Direktive --no-lines für kein Feld verwenden.


Updates vom 28. Juli 2017

Die berechnete Größe jedes Kernels wurde aus /boot/*kernel_version* entnommen. Dies waren 5 Dateien mit insgesamt ~ 50 MB. Die Formel wurde geändert, um die Dateien in /usr/src/*kernel_version* und /lib/modules/*kernel_version* aufzunehmen. Die berechnete Größe für jeden Kernel beträgt jetzt ~ 400 MB. Der obige Code für rm-kernels und rm-kernels-server wurde aktualisiert. In den obigen Beispielbildschirmen sind diese Änderungen jedoch noch nicht enthalten.

Standardmäßig wird die Dateigröße für Linux-Header auf 125 MB und für Linux-Image auf 220 MB geschätzt, da du schmerzhaft langsam sein kann, sofern sich keine Dateien im Cache befinden. Um die tatsächliche Größe mit du zu ermitteln, übergeben Sie einen beliebigen Parameter an das Skript.

Die Summe aller Kernelgrößen (mit Ausnahme der aktuell ausgeführten Version, die nicht entfernt werden kann) wird jetzt in der Titelleiste angezeigt.

Das Dialogfeld, in dem die Last Access Date jedes Kernels angezeigt werden. Dieses Datum kann bei Backups oder ähnlichen Vorgängen für alle Kernel überschrieben werden. Das Dialogfeld zeigt jetzt stattdessen Änderungsdatum an.

4

Die akzeptierte Antwort mit sed, um ältere Kernel dauerhaft zu entfernen, weist einige Fehler auf. Wenn jemand den Computer nach dem Upgrade des Kernels nicht neu gestartet hat, entfernt der Befehl auch den neueren Kernel.

Hier ist eine alternative Lösung, die alle Situationen berücksichtigt, um nur ältere Kernel zu entfernen:

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

Wenn Sie eine neuere Version als die aktuelle haben, erhalten Sie eine Warnung, dass Sie den Computer zuerst neu starten müssen. Beachten Sie auch, dass die älteren Kernel aus einem guten Grund erhalten bleiben. Wenn Sie Ihren aktuellen Kernel irgendwie durcheinander bringen und Ihr System instabil machen, sollten Sie in der Lage sein, einen älteren Kernel zu booten.

2
heemayl

Eine einfache Möglichkeit, fast alle veralteten Pakete, Pakete, die nicht mehr in einer Paketliste enthalten sind, sowie veraltete Kernel zu entfernen, besteht darin, einen der folgenden Schritte auszuführen:

dpkg --purge $(aptitude search ?obsolete)

Hierdurch werden jedoch Pakete übersehen, die noch von anderen Paketen empfohlen werden, und das Argument -R/- without-recommends löst dieses Problem nicht.

dWählen Sie nach dem Umschalten des Sortiermodus mit 'o', um alle veralteten Pakete anzuzeigen, einschließlich derjenigen, bei denen die Eignung fehlt. Einige Benutzer verwenden sie jedoch nicht gern.

2
Chris Cheney

Ich habe ein Skript dafür, das nicht sehr ausgefallene String-Analyse benötigt.

Entfernen Sie Überschriften und Bilder mit Ausnahme der aktuellen, um Speicherplatz freizugeben

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
Paulo Santos

ailurus hat die Funktion, alte Kernel sowie nicht verwendete Konfigurationen zu entfernen. Ich persönlich entferne es manuell von synaptic. Sie können ailurus sowohl von getdeb als auch von ppa aus installieren

1
sagarchalise

Basierend auf einer früheren Antwort von David Kemp werden im folgenden Skript alle Header und Bilder mit Ausnahme der letzten 2 -Versionen gelöscht.

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

(Mit apt-get -y ohne Frage entfernen)

1
Mark

Sie können ukuu - es ist alles GUI - verwenden, um alte Kernel zu aktualisieren und zu löschen. Funktioniert bei mir!

Denken Sie daran, lassen Sie die letzten 2 installiert und natürlich den "laufenden" Kernel.

Sie können ukuu auch so einstellen, dass nur Hauptversionen, sogar RC-Kernel, angezeigt werden und Punktversionen ausgeblendet werden.

ukuu

Sie finden ukuu in Synaptic, oder Anweisungen finden Sie hier:

OMG! Ubuntu ukuu Installationsanweisungen

1
sprocketoctopus

Ich gebe zwei sicherere Variationen der Methoden in anderen Antworten an: eine mit synaptischem Manager und die andere mit Terminal .

Mit diesen Varianten entfernen Sie nur Pakete, die das System als entfernbar identifiziert. Es besteht kein Risiko, dass Sie Linux-Kernel entfernen, die derzeit verwendet werden - wie es mir vor einigen Wochen passiert ist ;

Verwenden von Synaptic Manager

Anstatt linux-image über alle installierten Pakete zu durchsuchen, wählen Sie die automatisch entfernbaren Pakete aus (siehe rot) Ellipse im Bild unten). Entfernen Sie nun aus dieser Liste das gewünschte Linux-Image .

--- (enter image description here

Terminal verwenden

Wenn Sie Kernel auf dem Terminal entfernen, zeigen Sie nur die automatisch entfernbaren Kernel an, indem Sie sie ausführen

 Sudo apt-get -s autoremove | grep linux-image

Entfernen Sie dann den Kernel linux-image-x.x.x-x-generic, den Sie aus der angegebenen Liste entfernen möchten, indem Sie ausführen

 Sudo apt-get purge linux-image-x.x.x-x-generic 
0
loved.by.Jesus

Ich benutze unattended-upgrades, also hat es mir sehr gut gefallen Qwertys Antwort dass es so konfiguriert, dass alte Kernelpakete automatisch deinstalliert werden.

Es gab jedoch ein Problem: Nachdem ein neuer Kernel installiert wurde, deinstallierte dieser Prozess das Paket für den aktuell ausgeführten Kernel!

Das bricht das Betriebssystem nicht vollständig. Tatsächlich bemerkte ich selten, dass es passiert war, bis ich ein Modul im laufenden Betrieb laden musste (z. B. durch Einstecken eines USB-Geräts) und dann das Modul nicht gefunden werden konnte.

Als Lösung habe ich ein Skript erstellt, um ein virtuelles Paket currently-installed-kernel zu generieren, das das aktuelle Kernelpaket bis zum nächsten Start effektiv pinnt.

Das Skript heißt pin-current-kernel-with-package.sh. Hier ist das neueste Version (wahrscheinlich) und das erste Version (definitiv).

Speichern Sie das Skript einfach irgendwo und fügen Sie es Ihrem Startprozess hinz . Speichern Sie es beispielsweise in /root/bit/pin-current-kernel-with-package.sh, bearbeiten Sie /etc/rc.local und fügen Sie die folgende Zeile hinzu:

bash /root/bin/pin-current-kernel-with-package.sh

Jetzt wird Ihr laufendes Kernel-Paket niemals deinstalliert!

0
joeytwiddle

Wenn Sie ansible verwenden, um die Maschinen zu steuern, kann dieses Playbook hilfreich sein.

---
 - 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
0
flickerfly

Wenn Sie das nächste Mal alte Kernel entfernen, öffnen Sie ein Terminal und verwenden Sie diesen Befehl:

Sudo apt-get autoremove linux-headers-2.6.38-10-generic

Sie können Synaptic verwenden, um den genauen Namen des Kernels abzurufen, den Sie löschen möchten. Öffnen Sie einfach Synaptic und suchen Sie nach "Linux-Headern" und wählen Sie dann den Kernel-Eintrag aus, den Sie entfernen möchten. Der entsprechende Eintrag wird am Ende mit "-generic" gekennzeichnet.

Verwenden Sie diesen Befehl für sich, um alle nicht verwendeten (verbleibenden) Abhängigkeiten im gesamten System zu löschen:

Sudo apt-get autoremove
0
Chad--24216

Ich verwende einen KDE-Desktop und die einfachste Option, die ich gefunden habe, war die Verwendung der Anwendung kde-config-grub2, wie hier vorgeschlagen: https://www.kubuntuforums.net/showthread.php?58075-remove-old -linux-versions (die ich bereits installiert hatte, um das Hintergrundbild, die Standard-Boot-Option und ähnliches einzustellen). Neben dem Dropdown-Feld, in dem Sie den Standardeintrag auswählen können, befindet sich die Schaltfläche "Alte Einträge entfernen". Wenn Sie auf diese Schaltfläche klicken, wird eine Liste aller installierten Kernel angezeigt, und Sie können auswählen, welche entfernt werden sollen. Wenn Sie die Änderungen anwenden, werden sie mit dpkg aus dem System sowie aus dem Menü GRUB entfernt.

0
Ben

Die folgende Befehlsfolge löscht alle installierten Linux-Kernel mit Ausnahme des aktuell ausgeführten (grep -v uname -r) und des letzten verfügbaren Kernels (dpkg -l | .... | tail -1):

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

Ich verwende dies, um die Startvolumes des Desktops relativ sauber zu halten, aber in einer Serversituation möchten Sie wahrscheinlich die Logik erweitern und zusätzliche Skripte schreiben, um eine Liste der letzten X-Kernel zu erhalten, die der Server gestartet hat.

So etwas wie ein Startskript, das Folgendes ausführt:

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

und dann benutze:

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
0

Versuche dies. Führen Sie es als root aus.

Speichern Sie dieses Skript wie folgt: ./ keep-n-kernels.sh

Übergeben Sie als Befehlszeilenargument die Anzahl der aktuellsten Kernel, die Sie beibehalten möchten.

    
 #!/bin/bash 
 
 # Übergeben Sie n als Befehlszeilenargument, um alle installierten 
 # Kernel zu finden und nur die n am häufigsten zu behalten Neueste => deinstalliere alle älteren 
 
 # dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "$ (uname -r | sed" s /\(.*\)-\([^ 0-9]\+ \)/\ 1/")" '/ d; s/^ [^] * [^] *\([^] * \). */\ 1 /;/[0-9] /! d '
 # Dieser Befehl gibt die Liste von Alle Pakete mit Ausnahme des neuesten Kernels. ] 
 # Finde die installierten Kernel-Versionen: 
 # dpkg-query -W -f = '$ {Version}\n' 'linux-image- *' | grep. | sort -n 
 # gibt eine Versionsnummer in jeder Zeile an 
 # dpkg-query -W -f = '$ {Version}\n' 'linux-image- *' | grep. | sed 's /\...$// g' | grep -v '\ ... $' | sort -u 
 # gibt nur die in linux-image 
 
 # erscheinenden Suffixe an, z. -generic-pae 
 # die Art von Kernel, den Sie in 
 Suffix = $ booten (uname -r | sed 's: ^ [0-9] \. [0-9] \. [ 0-9]\- [0-9]\{2 \} :: g ') 
 
 Command = "apt-get purge" 
 
 Für 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} "
 erledigt 
 
 $ Befehl 

Beispielnutzung:

 # ./keep-n-kernels.sh 4 # Starten Sie den Befehl apt-get, um alle bis auf die 4 neuesten Kernel zu entfernen. 

Wenn Sie [UND AT IHR EIGENES RISIKO] wünschen, können Sie dem Befehl apt-get ein -y (oder ein Force-Flag) hinzufügen und ihn nicht interaktiv machen.

0
Sankalp

Installieren Sie den Synaptic Package Manager und gehen Sie zur Registerkarte Filter (ich denke Filter, wenn nicht alle 5) und wählen Sie "local". Dadurch werden verwaiste Pakete auf Ihrem System angezeigt, z. B. die Kernel. Führen Sie nach der Deinstallation update-grub aus. Dieser Befehl aktualisiert die Liste der Startoptionen für grub.

Wenn dies fehlschlägt, können Sie immer apt-get remove linux-image-version-generic versuchen.

0
Relish

Um die automatisch über regelmäßige Systemaktualisierungen installierten Kernel zu entfernen , öffnen Sie das Terminal und führen Sie Folgendes aus:

Sudo apt autoremove --purge

Um Ihre aktuelle Kernel-Version zu kennen, führen Sie uname -r aus und Sie können uname --help ausführen, um mehr über alle uname Befehle zu erfahren

Sie können auch df -h ausführen, um die Dateisystemtreiber anzuzeigen, und Sie können df --help ausführen, um weitere Treiber anzuzeigen.

So aktivieren Sie das automatische Entfernen alter Kernel: Bearbeiten Sie die Konfigurationsdatei mit gksu .

gksudo gedit /etc/apt/apt.conf.d/50unattended-upgrades

Wenn die Datei geöffnet wird, kommentieren Sie die folgende Zeile aus und ändern Sie den Wert in true :

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

Wenn Sie gksu installieren müssen, können Sie Sudo apt install gksu ausführen.

Um alte Pakete zu löschen, können wir Sudo apt-get clean verwenden.

Weitere Informationen finden Sie unter http://ubuntuhandbook.org/index.php/2016/05/remove-old-kernels-ubuntu-16-04/

0
Abdallah Okasha

Nur um einzuschalten, können Sie auch ausstellen

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

als root, und die Arbeit wird erledigt.

0
Severo Raz

Wie @ jarno und @ earcam in den Kommentaren zu dieser Frage erwähnt, möchten Sie zunächst sicherstellen, dass alle Ihre Linux-Kernelpakete als automatisch installiert markiert sind:

Sudo apt-mark auto '^linux-.*-4\.12\.0-12(-generic)?$'

Dann sollte der normale Befehl apt-get autoremove funktionieren.

Sudo apt-get autoremove --purge

Lesen Sie die docs für weitere Details.

0
hobs

hier ist ein grober Abriss dessen, was ich getan habe. Da ich kein Linux-Experte bin, stellen Sie sicher, dass Sie wissen, was Sie tun, und alle Dateien, die Sie ändern, gesichert haben.

gedit /boot/grub/grub.cfg

suchen Sie dann die Einträge, die Sie behalten möchten. Wir werden sie hervorheben und kopieren

cd /etc/grub.d
ls

sie sehen eine Liste von Dateien wie 10_linux und 30_os-prober

Sudo chmod -x 10_linux

dadurch wird das automatische Hinzufügen aller Linux-Einträge zum Grub-Boot-Menü beendet.

gksudo gedit 40_custom

öffne die benutzerdefinierte Boot-Menü-Datei, gehe dann zurück zu grub.cfg (die noch in gedit geöffnet sein sollte) und kopiere die Einträge, die du behalten möchtest ... wie zum Beispiel

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
}

fügen Sie sie in 40_custom ein und speichern Sie sie.

Sudo chmod 755 40_custom

macht es ausführbar, dann aktualisieren wir endlich grub, was die Datei grub.cfg ändert:

Sudo update-grub

ACHTUNG, wenn Sie Ihren Kernel oder Ihr Betriebssystem aktualisieren, wird Ihr Boot-Menü wahrscheinlich nicht aktualisiert ... Sie müssen dies manuell tun. Mit diesem Verfahren können Sie das Boot-Menü jedoch ein wenig weiter anpassen, z. B. indem Sie die Kernel-Version entfernen und einfach den Ubuntu-Namen eingeben ... d. H. Ubuntu Lucid 10.04 usw.

Hoffe, jemand findet das hilfreich, da ich eine Weile gebraucht habe, um es herauszufinden ... habe diese Lösung nirgendwo gesehen ...

0
Joe

Verwenden Sie lieber apt, das Cli-Frontend für Menschen, als apt-get, um alte Kernel-Images zu löschen:

$ Sudo apt autoremove --purge
...
The following packages will be REMOVED:
  linux-headers-4.4.0-51* linux-headers-4.4.0-51-generic* linux-image-4.4.0-51-generic* linux-image-extra-4.4.0-51-generic*
0
k0pernikus

Um etwas mehr Kontrolle darüber zu haben, welche Versionen beibehalten werden sollen, wählen Sie explizit die Versionen aus, die Sie entfernen möchten. Wenn Sie beispielsweise die Kernel-Versionen 3.2.0 [49-53] entfernen möchten, verwenden Sie eine einfache for -Schleife:

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

Passen Sie die Liste der Kernelversionen an.

0
NeilNjae