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 {}
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 :