web-dev-qa-db-fra.com

Comment puis-je supprimer les anciennes versions du noyau pour nettoyer le menu de démarrage?

Chaque fois que j'installe un nouveau noyau Linux, il reste dans grub_config, ce qui allonge le menu de démarrage plus longtemps.

Je sais que je peux rechercher manuellement dans les packages installés et les supprimer.

Ubuntu fournit-il un moyen plus simple de les nettoyer ou de les empêcher de s'afficher dans la liste de démarrage?

691
ImaginaryRobots

16.04 et versions plus récentes d'Ubuntu

Sudo apt autoremove

Cette commande supprime les packages qui ont été installés automatiquement pour résoudre une dépendance, mais dont ils ne dépendent plus. Cela inclut les anciennes versions de linux-headers-* et linux-image-*. (Ce processus est également intelligent, laissant une version de secours du noyau comme solution de secours!)

11.10 et versions plus récentes d'Ubuntu

GRUB2 et son affichage de tous les noyaux

Les dernières versions de Grub2 installé dans Ubuntu affichent automatiquement le dernier noyau et masquent les anciens noyaux que vous avez éventuellement installés.

GNU GRUB

Si vous ne voyez pas votre grub - souvenez-vous d'appuyer sur Shift lors du démarrage.

Comme vous pouvez le constater, seul le dernier noyau est affiché.

Si vous sélectionnez l’option affichée (appuyez sur Enter) puis tous les anciens noyaux deviennent visibles et disponibles pour démarrer.

GNU GRUB Previous versions

Comment supprimer définitivement les anciens noyaux

Commencez par démarrer avec le dernier noyau disponible.

Il existe plusieurs façons de supprimer les anciens noyaux. Personnellement, je ne toucherais pas à Computer Janitor car il est reconnu que cela casserait l'ordinateur avec ses suggestions.

synaptique

Une alternative est Synaptic (Sudo apt install synaptic)

recherchez linux-image , cliquez avec le bouton droit de la souris sur un noyau et choisissez la suppression complète, puis cliquez sur le bouton Appliquer pour supprimer le noyau.

Synaptic Package Manager

Répétez la recherche mais cette fois pour linux-header - vous pouvez supprimer les en-têtes associés pour l'image du noyau choisie précédemment.

Synaptic ne tentera toutefois pas de vérifier ce que vous essayez de supprimer ... vous pourriez supprimer par inadvertance votre dernier noyau - ou même supprimer tous vos noyaux via cet outil, vous laissant avec unbootable Ubuntu !.

N'oubliez pas de vérifier quel noyau vous utilisez, tapez:

uname -r

Le résultat serait similaire à:

Terminal <uname -r>

Rappelez-vous le résultat et le nombre - assurez-vous de ne pas supprimer l'image ou l'en-tête correspondant.

Recommandation

Ma recommandation est de conserver au moins deux ou de préférence trois noyaux, y compris le dernier. La raison de la recommandation est que vous aurez au moins un/deux autres noyaux avec lesquels démarrer, si pour quelque raison que ce soit, le dernier noyau que vous ne parvenez pas à démarrer ou à introduire une fonctionnalité régressée telle que le sans fil cassé.

595
fossfreedom

Tout d’abord, redémarrez votre système pour vous assurer qu’il utilise le dernier noyau. Ensuite, ouvrez le terminal et vérifiez votre noyau actuel:

uname -r 

NE RETIREZ PAS CE KERNEL!

Ensuite, tapez la commande ci-dessous pour afficher/répertorier tous les noyaux installés sur votre système.

dpkg --list 'linux-image-*'

Trouvez tous les noyaux inférieurs à votre noyau actuel. Lorsque vous savez quel noyau supprimer, continuez ci-dessous pour le supprimer. Exécutez les commandes ci-dessous pour supprimer le noyau sélectionné.

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

Enfin, lancez les commandes ci-dessous pour mettre à jour grub2

Sudo update-grub2 

Redémarrez votre système.

377
penreturns

Mon one-liner pour supprimer les anciens noyaux (cela libère également de l'espace disque)

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

Explication (rappelez-vous, | utilise la sortie de la commande précédente comme entrée de la suivante)

  • dpkg --list liste tous les packages installés
  • grep linux-image recherche les images linux installées
  • awk '{ print $2 }' sort juste la 2ème colonne (qui est le nom du paquet)
  • sort -V met les éléments en ordre par numéro de version
  • sed -n '/'`uname -r`'/q;p' affiche les lignes avant le noyau actuel
  • xargs Sudo apt-get -y purge purge les noyaux trouvés

Dénouement de l'invocation sed:

  • -n indique à sed d'être silencieux
  • `uname -r` affiche la version actuelle du noyau installé - nous l'incluons dans des backticks afin que la sortie soit incluse avec la commande (vous pouvez également voir ceci sous la forme $(uname -r)
  • /something/q dit que vous arrêtez lorsque vous faites correspondre quelque chose (dans ce cas, quelque chose est sorti de uname -r) - le / entoure une expression régulière
  • p is print
  • le ; est le séparateur de commande, donc /something/q;p dit quit quand vous correspondez quelque chose, sinon print

sed -n '/'`uname -r`'/q;p' affiche les lignes jusqu'à ce qu'elles correspondent au nom du noyau actuel.

Si vous êtes paranoïaque (comme moi), vous pouvez créer la dernière partie xargs echo Sudo apt-get -y purge afin que la commande de purge des anciens noyaux soit imprimée, puis vous pouvez vérifier qu'aucun élément inattendu n'est inclus avant de l'exécuter.


Version modifiée pour supprimer les en-têtes:

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

Remarque: l'invocation sed est modifiée. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")" extrait uniquement la version (par exemple "3.2.0-44"), sans "-generic" ou similaire de uname -r


Version tout-en-un pour supprimer les images et les en-têtes (combine les deux versions ci-dessus):

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
279
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 et inférieur:

Je trouve que c'est le moyen le plus simple et le plus rapide. Il conserve le dernier noyau ainsi que deux autres:

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

Pour changer le nombre de noyaux supplémentaires conservés:

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

Supprimer des entrées de Grub 2 Les entrées doivent être supprimées en modifiant ou en supprimant des fichiers du dossier /etc/grub.d. Le fichier /boot/grub/grub.cfg est en lecture seule et ne doit normalement pas être modifié.

Trop de noyaux?

  • Si vous n'êtes pas sûr du noyau que vous utilisez actuellement, dans un type de terminal , uname -r .

  • Les noyaux supprimés via APT (Synaptic, "apt-get remove", etc.) met automatiquement à jour grub.cfg et aucune action de l'utilisateur n'est requise.

  • Ubuntu-Tweak est un excellent outil pour supprimer les noyaux (et les entrées de menu). Il s'agit d'une application à interface graphique sûre et facile à utiliser.

  • Installez Ubuntu Tweak

  • Ubuntu-Tweak sera disponible sous Applications> Outils système.

Supprimer les anciennes entrées du noyau

  • Sélectionnez "Package Cleaner" sur la gauche et "Nettoyer le noyau" dans le panneau de droite.

  • Appuyez sur le bouton "Déverrouiller" en bas à droite, entrez votre mot de passe.

  • Sélectionnez dans la liste affichée les images du noyau et les en-têtes que vous souhaitez supprimer. Le noyau utilisé n'est pas répertorié.

  • Appuyez sur le bouton "Nettoyage" en bas à droite pour supprimer les images du noyau et les en-têtes sélectionnés.

Supprimez Operating Systems du menu Grub

  • Les autres systèmes d'exploitation qui ont été supprimés de l'ordinateur le seront également une fois que "update-grub" sera exécuté en tant que root.

  • Les éléments de menu sont placés dans le menu Grub2 par des scripts. Si vous ne souhaitez pas que d'autres systèmes d'exploitation soient entrés dans le menu, désactivez /etc/grub.d/30_osprober.

  • Exécutez cette commande pour arrêter l'exécution du script.
    Sudo chmod -x /etc/grub.d/30_os-prober

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

Supprimez Memtest86 + du menu Grub
Sudo chmod -x /etc/grub.d/20_memtest86+

  • Exécutez la commande update-grub pour permettre l’incorporation des modifications dans grub.cfg.

Source

Remarque: Après la mise à jour du noyau, une nouvelle entrée est ajoutée au menu GRUB. Vous pouvez supprimer l'ancienne si vous le souhaitez. Cependant, , la plupart des utilisateurs expérimentés vous conseilleront de conserver au moins une entrée de secours en cas de problème lors d’une mise à niveau et d’amorcer une version antérieure du noyau à des fins de dépannage.

Autre moyen de supprimer les entrées du noyau (avant 10.04)

pour GRUB pas GRUB2

startupmanagerInstall startupmanager

Vous pouvez le trouver sous Système >> Administration >> alt text
alt text
Vous voyez dans la deuxième capture d'écran que vous pouvez choisir le nombre de noyaux à afficher? En général, je ne le garde que sur 1, mais lorsque je reçois une mise à niveau du noyau, je la modifie toujours en 2 avant de redémarrer afin de pouvoir sélectionner l'ancien noyau si le nouveau noyau a des problèmes avec mon matériel. Une fois que je sais que le nouveau noyau fonctionne bien, je le repasse à 1.

43
karthick87

Purement en ligne de commande, cela supprimera tout sauf le courant et le deuxième courant (via le "-2" dans la commande head ci-dessous):

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

Mise à jour: purge-old-kernels est obsolète aujourd'hui.

J'ai créé un script pour purger les noyaux, même dans des conditions difficiles. Il s’appelle linux-purge et vous pouvez le trouver ici .

Si vous souhaitez simplement purger les noyaux (et les packages associés) plus anciens que le noyau actuellement utilisé, lorsque le système n'est pas endommagé, vous pouvez utiliser ce script .

Il existe également une page de documentation Ubuntu à laquelle j'ai contribué à la suppression des anciens noyaux ici .

34
jarno

Vous pouvez suivre le Utilisation de la section de package "Unattended-upgrades" de Mises à jour de sécurité automatiques sur Ubuntu Wiki pour effectuer cette opération.

Vous devez modifier la ligne suivante dans le fichier /etc/apt/apt.conf.d/50unattended-upgrades ;

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

avec

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

pour supprimer automatiquement les anciens paquets, y compris les noyaux.

Supprimez ou commentez également la ligne

"^linux-image.*"; 

dans la section "NeverAutoRemove" du fichier /etc/apt/apt.conf.d/01autoremove.

29
Qwerty

Le moyen le plus rapide/simple (applicable au moins depuis le 12.04) qui existe déjà avec Ubuntu est apt-get. Procédez comme suit si vous souhaitez supprimer toutes les anciennes versions du noyau qui ne sont pas utilisées (à l’exception de la précédente que vous n’utilisez plus. C’est pour vous assurer que si la version actuelle du noyau échoue d’une manière ou d’une autre, vous avez encore du chemin à faire. retour à un état antérieur). Faites ce qui suit:

Sudo apt-get autoclean

Cela éliminera tous les anciens fichiers (y compris les versions du noyau) que vous pourriez avoir. Notez que si vous avez beaucoup d'anciennes versions, cela prendra un certain temps puisqu'il faut s'assurer que la suppression de la version du noyau ne pose aucun problème. Pour moi, la suppression des 12 dernières versions du noyau a pris environ 2 minutes. Vous pouvez également faire ce qui suit:

Sudo apt-get clean

Ce qui éliminera tout ce qui est téléchargé et stocké dans le dossier cache d'apt. Enfin vous avez:

Sudo apt-get autoremove

qui vérifierait tous les paquets non utilisés et les éliminerait si nécessaire. C'est parfait pour les bibliothèques et les paquets de dépendance qui ne sont plus nécessaires depuis l'application installée.

27
Luis Alvarado

Pour savoir quels noyaux et en-têtes sont installés, utilisez

dpkg -l | grep linux-image

dpkg -l | grep linux-headers

Vous pouvez ensuite les supprimer un par un ou ensemble, assurez-vous de conserver le plus récent.

Il existe également des commandes et des scripts utiles pour automatiser la suppression.

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

Les revendications suivantes prétendent supprimer tous les noyaux et en-têtes non utilisés:

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

Voici ce qui se passe lors de l'exécution du 18.04.1:

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

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

10.04 Méthode de l'interface graphique

Computer Janitor peut nettoyer les anciens noyaux et je crois qu’il est installé par défaut dans Ubuntu (mais pas Kubuntu).

GRUB 1, si vous l'utilisez, a une option dans /boot/grub/menu.lst pour spécifier le nombre de noyaux qu'il doit afficher au maximum. GRUB 2, autant que je sache, ne le fait pas.

25
maco

Afin de supprimer les anciens noyaux d'images Linux, commencez par le noyau que vous souhaitez conserver.

Vous pouvez également vérifier la version du noyau à l'aide de la commande uname -r afin de ne pas supprimer le mauvais par erreur.

Maintenant, allez dans le gestionnaire de paquets synaptic, recherchez linux-image et supprimez les anciennes versions, à l'exception de celle indiquée par la commande supérieure. Généralement, je préfère aller avec le dernier.

Maintenant, lorsque vous redémarrez, vous verrez un menu plus propre.

16
anurag-jain

Vous pouvez installer buntu-Tweak , puis aller dans Applications -> Outil système -> Ubbuntu Tweak et

enter image description here cliquez sur le nettoyeur de paquet et nettoyez les noyaux. il ne montre pas le noyau actuellement utilisé, vous serez donc toujours en sécurité.

14
Lincity

Personnellement, j'aime bien utiliser Synaptic. Cela me rend plus sûr de ce qui se passe. La seule application que j'ai utilisée et qui dispose d'une option pour supprimer les anciens noyaux est buntu Tweak .

Comment supprimer les noyaux que vous n'utilisez pas:

  • Ouvrez UbuntuTweak
  • Cliquez sur 'Package Cleaner' sous 'Applications' dans le volet de gauche.
  • Sur le côté droit de la vue "nettoyage", appuyez sur "Nettoyer les grains".
  • Sélectionner tous les noyaux - Je pense que celui qui est utilisé n'est pas listé, mais juste au cas où, exécutez uname -a dans un terminal
8
Alan Featherston

Vous pouvez désinstaller les anciens noyaux (packages linux-image-...) à l’aide de Synaptic, ce qui les supprimera du menu de démarrage. Veillez à ne pas supprimer le noyau en cours d’exécution (vous pouvez vérifier sa version avec uname -r).

N'oubliez pas qu'avoir une ou deux versions plus anciennes peut vous aider à résoudre les problèmes éventuels.

Vous pouvez également modifier/supprimer les entrées manuellement (gksu gedit /boot/grub/grub.cfg), mais elles seront régénérées lorsque vous effectuez une mise à jour vers un noyau plus récent. Si vous envisagez de supprimer les options recovery mode - ne le faites pas. Ils peuvent être utiles si vous cassez quelque chose qui vous empêche de démarrer.


Voir cette page.

6
evgeny

Ceci est une solution pure en ligne de commande.

Commencez par générer une liste de toutes les versions de noyau installées, à l'exception du noyau en cours d'exécution:

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

Vous pouvez également générer une liste de toutes les versions de noyau installées, à l'exception des deux dernières:

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

Examiner la liste. Assurez-vous que les versions du noyau que vous souhaitez conserver ne font pas partie de la liste. Utilisez la commande uname -r pour voir la version du noyau en cours d’exécution.

Si les résultats vous conviennent, vous pouvez utiliser apt-get pour supprimer les packages.

D'abord un essai à sec (en utilisant le premier générateur comme exemple):

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

Puis une vraie course:

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

Si vous souhaitez automatiser le processus, ajoutez le paramètre --yes:

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

L'avantage de cette réponse est que Ubuntu Bash natif est utilisé sans installer d'applications tierces. Les utilisateurs de noyaux personnalisés qui n'ont pas utilisé apt ou dpkg peuvent modifier ce script bash en fonction de leurs besoins. Cette réponse est basée sur ( Comment purger sélectivement tous les anciens noyaux à la fois ).

Solution basée sur Zenity

Zenity fournit au terminal une interface graphique conviviale permettant de traiter une liste et de sélectionner des éléments avec des boutons radio :

rm-kernels 1

Comme le titre l'indique, le noyau actuel avec lequel vous avez démarré ne peut pas être supprimé et n'est pas inclus dans la liste. La taille indiquée est la quantité qui sera enregistrée dans le répertoire /boot. Plus est enregistré sur votre disque, car les fichiers binaires du noyau résident également dans d’autres domaines. Remarque du 27 juillet 2017: Les répertoires /usr/src/*kernel_version* et /lib/modules/*kernel_version* sont également inclus.

La date de modification est découverte à l'aide de la commande stat. Sur mon système, cette date est "touchée" chaque fois que le noyau est démarré à l'aide de cette méthode ( Comment savoir quand une version spécifique du noyau a été démarrée? =) cron redémarrez le script. Cependant, sur votre système, la date sera la date de publication du noyau, et non la dernière fois que vous l’avez initialisé.

apt-get purge vous donne une chance d'abandonner

Vous avez enfin la possibilité de voir tout ce qui sera purgé et de voir l’espace disque total (quelque peu trompeur) qui sera récupéré:

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] 

Le code

Copiez ce code dans un fichier exécutable nommé rm-kernels dans /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

REMARQUE: Vous devez disposer de l'autorisation de Sudo pour créer le fichier, utilisez donc:

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

Pour rendre le fichier exécutable, utilisez:

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

Version du serveur

rm-kernels-server est la version du serveur permettant de supprimer sélectivement les noyaux en une seule fois. Au lieu d’une boîte de dialogue graphique (graphique), une boîte de dialogue textuelle est utilisée pour sélectionner les noyaux à purger.

  • Avant d'exécuter le script, vous devez installer la fonction de dialogue à l'aide de:

    Sudo apt install dialog

La boîte de dialogue est dans l'installation par défaut du bureau Ubuntu, mais pas dans Ubuntu Server.

Exemple d'écran

rm-kernels-server 1

rm-kernels-server code bash

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

REMARQUE: Dans l'appel à dialog, la directive --ascii-lines est transmise pour remplacer le jeu de caractères étendus dessiné à la ligne (que ssh n'aime pas) par "+ - ---- + "pour les boîtes à dessin. Si vous n'aimez pas cette apparence, vous pouvez utiliser la directive --no-lines sans zone.


28 juillet 2017 Mises à jour

La taille calculée de chaque noyau a été prise à partir de /boot/*kernel_version* qui consistait en 5 fichiers totalisant environ 50 Mo. La formule a été modifiée pour inclure les fichiers dans /usr/src/*kernel_version* et /lib/modules/*kernel_version*. La taille calculée pour chaque noyau est maintenant d’environ 400 Mo. Le code ci-dessus pour rm-kernels et rm-kernels-server a été mis à jour. Toutefois, les exemples d'écrans ci-dessus ne reflètent pas encore ces modifications.

La valeur par défaut consiste à estimer la taille des fichiers pour les en-têtes linux à 125 Mo et celle de linux-image à 220 Mo, car du peut être extrêmement lent, sauf si les fichiers sont en cache. Pour obtenir la taille réelle à l'aide de du, transmettez un paramètre au script.

Le total de toutes les tailles de noyau (à l'exception de la version en cours d'exécution qui ne peut pas être supprimée) est maintenant affiché dans la barre de titre.

La boîte de dialogue utilisée pour afficher la date de dernier accès de chaque noyau . Cette date peut être écrasée en masse pour tous les noyaux lors d'une sauvegarde ou d'opérations similaires. La boîte de dialogue affiche maintenant la date modifiée .

4
WinEunuuchs2Unix

La réponse acceptée utilisant sed pour supprimer les anciens noyaux de façon permanente présente certaines failles. Si quelqu'un n'a pas redémarré l'ordinateur après la mise à niveau du noyau, la commande supprimera également le noyau le plus récent.

Voici une solution alternative qui prend en compte toutes les situations pour supprimer uniquement les anciens noyaux:

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

Si vous avez une version plus récente que la version actuelle, un avertissement vous avertira de redémarrer votre ordinateur en premier. Notez également que les anciens noyaux sont préservés pour une bonne raison: si vous gâchez votre noyau actuel pour rendre votre système instable, vous devriez pouvoir démarrer dans n’importe quel noyau plus ancien.

2
heemayl

Un moyen simple de supprimer presque tous les paquets obsolètes, les paquets qui ne figurent plus dans une liste de paquets, ainsi que les noyaux obsolètes, consiste à effectuer l'une des opérations suivantes:

dpkg --purge $(aptitude search ?obsolete)

Cependant, cela manquera des packages qui sont toujours recommandés par d'autres packages et l'argument -R/- without-recommend ne résout pas ce problème.

dselect après le changement de mode de tri avec 'o' affichera tous les paquets obsolètes, y compris ceux manquant à aptitude, mais certaines personnes n'aiment pas l'utiliser.

2
Chris Cheney

ailurus a pour fonction de supprimer les anciens noyaux ainsi que les configurations inutilisées. Personnellement, je l'enlève manuellement de synaptic. Vous pouvez installer ailurus à partir de getdeb ainsi que ppa

1
sagarchalise

Vous pouvez utiliser ukuu - c'est tout l'interface graphique - pour mettre à jour et supprimer les anciens noyaux. Travaille pour moi!

Rappelez-vous simplement de laisser les 2 derniers installés et évidemment le noyau "en cours d'exécution".

Vous pouvez également configurer ukuu pour n’afficher que les versions principales, même les noyaux RC, les versions masquées.

ukuu

Vous pouvez trouver ukuu dans Synaptic, ou les instructions sont ici:

Instructions d'installation OMG! Ubuntu uk

1
sprocketoctopus

Je donne deux variantes plus sûres des méthodes dans d’autres réponses: l’une en utilisant le gestionnaire synaptique et l’autre en utilisant terminal .

Avec ces variantes, vous ne supprimez que les packages que le système identifie comme amovibles. Vous ne risquez pas de supprimer les noyaux Linux qui sont actuellement utilisés - comme cela m'est arrivé il y a quelques semaines ;

Utilisation de Synaptic Manager

Au lieu de rechercher linux-image sur tous les packages installés, sélectionnez les packages autoremovable (voir l’ellipse rouge dans l’image). au dessous de). Maintenant, dans cette liste, supprimez linux-image que vous voulez.

--- (enter image description here

Utilisation du terminal

De même, si vous supprimez des noyaux sur un terminal, affichez uniquement les noyaux autoremovable en lançant

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

Puis supprimez le noyau linux-image-x.x.x-x-generic que vous souhaitez supprimer de la liste en exécutant

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

J'utilise unattended-upgrades donc j'ai vraiment aimé la réponse de Qwerty qui le configure pour désinstaller automatiquement les anciens paquets du noyau.

Cependant, il y avait un problème: après l'installation d'un nouveau noyau, ce processus désinstallerait le paquet pour le noyau en cours d'exécution!

Cela ne casse pas complètement le système d'exploitation. En fait, j’ai rarement remarqué que c’était arrivé, jusqu’à ce que j’ai eu besoin de charger à chaud un module (par exemple, en branchant un périphérique USB), puis le module est introuvable.

Pour résoudre ce problème, j'ai créé un script afin de générer un paquet virtuel currently-installed-kernel qui épingle efficacement le paquet de noyau actuel jusqu'au prochain démarrage.

Le script s'appelle pin-current-kernel-with-package.sh. Voici le dernière version (probablement) et le première version (définitivement).

Sauvegardez ce script quelque part, et ajoutez-le à votre processus de démarrage . Par exemple, enregistrez-le dans /root/bit/pin-current-kernel-with-package.sh puis éditez /etc/rc.local et ajoutez la ligne suivante:

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

Maintenant, votre paquet de noyau en cours d’exécution ne sera jamais désinstallé!

0
joeytwiddle

Si vous utilisez ansible pour contrôler les machines, ce manuel peut être utile.

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

La prochaine fois, lors de la suppression de vieux noyaux, ouvrez un terminal et utilisez cette commande:

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

Vous pouvez utiliser Synaptic pour obtenir le nom exact du noyau que vous souhaitez supprimer. Il suffit d’ouvrir Synaptic et de rechercher "linux-headers", puis de sélectionner l’entrée du noyau à supprimer. L'entrée correspondante sera étiquetée avec "-generic" à la fin.

Pour effacer toutes les dépendances inutilisées (restantes) du système, utilisez cette commande seule:

Sudo apt-get autoremove
0
Chad--24216

J'utilise un ordinateur de bureau KDE et l'option la plus simple que j'ai trouvée consistait à utiliser l'application kde-config-grub2 comme suggéré ici: https://www.kubuntuforums.net/showthread.php?58075-remove-old -linux-versions (que j'avais déjà installé pour configurer l'image d'arrière-plan, l'option de démarrage par défaut, etc.). En regard de la liste déroulante dans laquelle vous pouvez choisir l'entrée par défaut, vous trouverez un bouton "Supprimer les anciennes entrées". En cliquant sur ce bouton, vous obtenez une liste de tous les noyaux installés et vous pouvez sélectionner ceux à supprimer. Lorsque vous appliquez les modifications, dpkg sera utilisé pour les supprimer du système, ainsi que du menu GRUB.

0
Ben

La chaîne de commandes suivante purgera tous les noyaux Linux installés, à l'exception de celui en cours d'exécution (grep -v uname -r) et du dernier noyau disponible (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

J'utilise ceci pour garder les volumes de démarrage du bureau relativement propres, mais dans le cas d'un serveur, vous voudrez probablement développer la logique et écrire des scripts supplémentaires pour conserver une liste des derniers noyaux X démarrés par le serveur.

Quelque chose comme un script de démarrage qui fait:

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

et ensuite utiliser:

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
Alexander Thompson

Essaye ça. Exécutez-le en tant que root.

Enregistrez ce script sous le nom ./ keep-n-kernels.sh

Transmettez, en tant qu'argument de ligne de commande, le nombre de noyaux les plus récents que vous souhaitez conserver.

    
 #!/bin/bash 
 
 # passer n comme argument de ligne de commande, et il trouvera tous les noyaux 
 installés et ne conservera que les n plus. les plus récents => désinstaller tous les anciens 
 
 # dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "(uname -r | sed" s /\(.*\)-\([ 0-9]\+ \)/\ 1/")" '/ d; s/^ [^] * [^] *\([^] * \). */\ 1 /;/[0-9] /! d '
 # cette commande donne la liste des tous les paquets SAUF pour le dernier noyau. 
 # source: https://help.ubuntu.com/community/Lubuntu/Documentation/RemoveOldKernels
.. ] 
 # trouver les versions de noyau installées: 
 # dpkg-query -W -f = '$ {Version}\n' 'linux-image- *' | grep. | sort -n 
 # donne les numéros de version, un dans chaque ligne 
 # dpkg-query -W -f = '$ {Version}\n' 'linux-image- *' | grep. | sed 's /\...$// g' | grep -v '\ ... $' | sort -u 
 # ne donne que ceux qui apparaissent dans le suffixe linux-image 
 
 #, par ex. -generic-pae 
 # le type de noyau que vous démarrez avec le suffixe 
 = $ (uname -r | sed's: ^ [0-9] \. [0-9] \. [. 0-9]\- [0-9]\{2 \} :: g ') 
 
 Command = "apt-get purge" 
 
 Pour 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} $ {suffixe} "
 terminé 
 
 $ command 

Exemple d'utilisation:

 # ./keep-n-kernels.sh 4 # lancez la commande apt-get pour supprimer tous les noyaux les plus récents, sauf les 4 plus récents 

Si vous voulez [AND AT VOTRE PROPRE RISQUE], vous pouvez ajouter un -y (ou un indicateur de force) à la commande apt-get et la rendre non interactive.

0
Sankalp

Installez le gestionnaire de paquets synaptic et allez dans l’onglet filtres (je pense filtres, sinon essayez tous les 5) et sélectionnez "local". Cela vous montrera des paquets orphelins sur votre système, tels que les noyaux. Une fois que vous les avez désinstallés, exécutez update-grub. Cette commande met à jour la liste des options de démarrage pour grub.

Si cela échoue, vous pouvez toujours essayer apt-get remove linux-image-version-generic.

0
Relish

J'ai un script pour cela qui n'a pas besoin d'analyse syntaxique de chaînes très sophistiquée.

Supprime les en-têtes et les images, à l'exception de l'image actuelle, pour libérer de l'espace

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)+
0
Paulo Santos

Pour supprimer les noyaux automatiquement installés via les mises à jour système régulières, ouvrez le terminal et exécutez:

Sudo apt autoremove --purge

Pour connaître votre version actuelle du noyau, exécutez uname -r et vous pourrez également exécuter uname --help pour en savoir plus sur toutes les commandes uname .

Vous pouvez également exécuter df -h pour vous montrer les pilotes du système de fichiers. De la même manière, vous pouvez exécuter df --help pour en savoir plus.

Pour activer la suppression automatique des anciens noyaux: Editez le fichier de configuration en utilisant gksu

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

Lorsque le fichier s'ouvre, supprimez la mise en commentaire de la ligne suivante et remplacez la valeur par true :

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

Si vous devez installer gksu , vous pouvez exécuter Sudo apt install gksu

Pour effacer les anciens paquets, nous pouvons utiliser Sudo apt-get clean

Pour plus d'informations, visitez le site http://ubuntuhandbook.org/index.php/2016/05/remove-old-kernels-ubuntu-16-04/

0
Abdallah Okasha

Juste pour sonner, vous pouvez aussi émettre

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

en tant que racine, et le travail sera fait.

0
Severo Raz

Basé sur une réponse précédente de David Kemp, le script suivant purgera tous les en-têtes et les images sauf les versions les 2 dernières.

#!/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 -y purge
0
Mark

voici un aperçu de ce que j'ai fait. Attention, je ne suis pas un expert en Linux. Assurez-vous de savoir ce que vous faites et de sauvegarder tous les fichiers que vous modifiez.

gedit /boot/grub/grub.cfg

puis trouver les entrées que vous souhaitez conserver, nous les mettrons en surbrillance et les copierons

cd /etc/grub.d
ls

vous verrez une liste de fichiers comme 10_linux et 30_os-prober

Sudo chmod -x 10_linux

cela arrêtera automatiquement l’ajout de toutes les entrées linux dans le menu de démarrage de grub.

gksudo gedit 40_custom

ouvrez le fichier de menu de démarrage personnalisé, puis retournez dans le fichier grub.cfg (qui devrait toujours être ouvert dans gedit) et copiez les entrées à conserver, telles que

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
}

collez-les dans 40_custom, puis enregistrez-le.

Sudo chmod 755 40_custom

le rend exécutable, puis finalement nous mettons à jour grub qui changera le fichier grub.cfg:

Sudo update-grub

Maintenant, ATTENTION, si vous mettez à jour votre noyau ou votre système d'exploitation, votre menu de démarrage ne sera probablement pas mis à jour ... vous devrez le faire manuellement. Mais cette procédure vous permettra de personnaliser un peu plus le menu de démarrage, comme supprimer la version du noyau et simplement mettre le nom ubuntu ... c.-à-d. Ubuntu Lucid 10.04, etc ...

J'espère que quelqu'un trouve cela utile, car il m'a fallu un certain temps pour comprendre ... je n'ai vu cette solution nulle part ...

0
Joe

Utilisez plutôt apt, l'interface cliente de cli pour les humains, que apt-get pour purger les anciennes images du noyau:

$ 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

Pour avoir un peu plus de contrôle sur les versions à conserver, sélectionnez explicitement celles que vous souhaitez supprimer. Par exemple, si vous souhaitez supprimer les versions du noyau 3.2.0. [49-53], utilisez une simple boucle for:

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

Ajustez la liste des versions du noyau en conséquence.

0
NeilNjae