Affichages : 2973

avec cette commande

 ls -rt /boot/vmlinuz-* | head -n -4 | sed 's@vmlinuz-@linux-image-@g' | sed 's@/boot/@@' | xargs -I {} apt-get remove -y {}

 sources : http://saintcarre.dyndns.org/saintcarre/content/tux/Supprimer-les-anciens-noyaux-sous-Debian-ou-Ubuntu

détail :

Pour obtenir la liste des noyaux installés, il faut regarder le contenu du dossier /boot. Pour chaque noyau, il y a un fichier vmlinuz-* :

ls -lrt /boot/vmlinuz-*

-rw------- 1 root root 5132688 oct. 19 12:50 /boot/vmlinuz-3.5.0-18-generic
-rw-r--r-- 1 root root 5129040 oct. 19 17:09 /boot/vmlinuz-3.5.0-17-generic

Pour obtenir la liste des noyaux en retirant les 2 derniers, on va utiliser la commande :

ls -rt /boot/vmlinuz-* | head -n -2

La commande head affiche les 10 premières lignes d'un fichier ou de l'entrée stdin, l'option -n permet de spécifier le nombre de ligne à afficher (head -n 3 toto.txt affiche les 3 premières lignes du fichier toto.txt).
En inversant l'option du nombre de lignes (-2) on affiche les premières lignes à l'exception des 2 dernières lignes.

Le résultat obtenu indique le nom du noyau vmlinuz alors que le nom du paquet est linux-image. Il y a également le nom du sossier (/boot) dans le résultat.
Pour corriger cela, on va utiliser la commande sed pour remplacer vmlinuz par linux-image et pour supprimer /tools.
On obtient alors :

ls -rt /boot/vmlinuz-* | head -n -2 | sed 's@vmlinuz-@linux-image-@g' | sed 's@/boot/@@'

Une fois obtenu la liste des paquets à supprimer, il faut passer ce résultat à la commande apt-get remove, pour cela on utilise la commandexargs :

ls -rt /boot/vmlinuz-* | head -n -2 | sed 's@vmlinuz-@linux-image-@g' | sed 's@/boot/@@' | xargs -I {} apt-get remove -y {}

A chaque suppression de noyau, le Grub est mis à jour.
Au final, il reste 2 noyaux dans le dossier /boot :