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 : 623
Publié par ljere : 30