un alias pour ne conserver que les 2 derniers noyaux

Nous avons déjà travaillé sur les alias dans cet article: Bashrc
et j'ai retrouvé une fonction que mon ami nesthib avait écrit sur le forum d'ubuntu-fr, à ajouter dans notre fichier .bashrc juste après les alias.
On a donc quatre commandes que l'on pourrait d'ailleurs utiliser directement mais ça ne serait pas super fonctionnel,
je vais donc reprendre ses explications.
On commence par définir le nombre de noyaux à conserver dans la variable KEEP.

KEEP=2
On crée la liste des noyaux installés.
KERNELS=($(dpkg -l | awk '/ii linux-image-[0-9]\\./{print gensub("-generic","",1,$2)}'))
On va lister tous les paquets du système.
dpkg -l
On va passer la liste à awk pour faire un tri.
| awk '…'
On va permettre de garder seulement les lignes commençant par « ii » c'est à dire les paquets installés et dont le nom de paquet sera de la forme « linux-image-[numéro]… ».
/ii linux-image-[0-9]\\./
On va afficher la second colonne ($2 ; le nom du paquet) après avoir enlevé « -generic » du nom s'il est présent.
En effet les paquets « linux-XXX-…-generic » dépendent des paquets « linux-XXX-… », donc supprimer les seconds entraîne automatiquement la suppression des premiers.
{print gensub("-generic","",1,$2)}
On va placer la liste obtenue dans un tableau bash nommé KERNELS.
KERNELS=($(…))
Ensuite on copie la liste dans une nouvelle variable nommée KERNELS_TO_REMOVE, en omettant les $KEEP derniers éléments (ici 2) pour expliciter la syntaxe barbare, on affiche le contenu de KERNELS « ${KERNELS[@]} » du premier élément « :0 » au n « $ » moins $KEEP
On supprime les paquets définis dans KERNELS_TO_REMOVE (donc les « linux-image-… ») ainsi que les paquets « linux-headers-… ».
KERNELS_TO_REMOVE=(${KERNELS[@]:0:$-$KEEP})
C'est une simple substitution qui remplace « image » par « headers » dans le nom.
${KERNELS_TO_REMOVE[@]/image/headers}
Pour voir la liste de ce qui sera supprimée il nous suffirait de faire
echo "On supprime : ${KERNELS_TO_REMOVE[@]} ${KERNELS_TO_REMOVE[@]/image/headers}"
Ce qui nous donne pour devenir effectif.
sudo apt-get remove ${KERNELS_TO_REMOVE[@]} ${KERNELS_TO_REMOVE[@]/image/headers}
Ce qui pour résumer nous donne donc ces 5 lignes à ajouter après les alias :
function kernel_clean () {
KEEP=2
KERNELS=($(dpkg -l | awk '/ii linux-image-[0-9]\\./{print gensub("-generic","",1,$2)}'))
KERNELS_TO_REMOVE=(${KERNELS[@]:0:$-$KEEP})
sudo apt-get remove ${KERNELS_TO_REMOVE[@]} ${KERNELS_TO_REMOVE[@]/image/headers}
}
On relance notre terminal et on appelle notre fonction avec :
kernel_clean
Vus : 560
Publié par ljere : 30