Par rapport aux autres réponses GUI ici, l'avantage de cette réponse est l'utilisation du Bash natif d'Ubuntu sans installation d'applications tierces.
Solution basée sur Zenity et Bash
Zenity fournit une belle interface graphique au terminal pour traiter une liste et sélectionner des éléments avec boutons radio :
![rm-kernels 1]()
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 celle qui sera sauvegardée dans le fichier /boot
répertoire. Une plus grande partie est conservée sur votre disque car les binaires du noyau résident également dans d'autres zones. Note du 27 juillet 2017 : Les répertoires /usr/src/*kernel_version*
y /lib/modules/*kernel_version*
sont maintenant inclus également.
Le site Date de modification est découvert en utilisant le stat
commande. Sur mon système, cette date est "touché" à chaque fois que le noyau est démarré en utilisant cette méthode ( Comment savoir quand une version spécifique du noyau a été démarrée pour la dernière fois ? ) cron redémarrer le script. Cependant, sur votre système, la date sera la date de sortie du noyau, et non la dernière fois que vous l'avez démarré.
apt-get purge
vous donne la possibilité d'avorter
Vous avez une dernière possibilité de visualiser 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
en /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
NOTA: Vous avez besoin de la permission sudo pour créer le fichier à utiliser :
gksu gedit /usr/local/bin/rm-kernels
Pour rendre le fichier exécutable, utilisez :
sudo chmod +x /usr/local/bin/rm-kernels
NOTA: Pour une version serveur (basée sur le texte, pas sur l'interface graphique) de ce script, voir : Comment supprimer les anciennes versions du noyau pour nettoyer le menu de démarrage ?
Mises à jour du 28 juillet 2017
La taille calculée de chaque noyau a été tirée de /boot/*kernel_version*
qui étaient 5 fichiers totalisant ~50 MB. La formule a été modifiée pour inclure les fichiers dans /usr/src/*kernel_version*
y /lib/modules/*kernel_version*
. La taille calculée pour chaque noyau est maintenant de ~400 MB. Le code ci-dessus pour rm-kernels
y rm-kernels-server
a été mis à jour. Cependant, les exemples d'écrans ci-dessus ne reflètent pas encore ces changements.
Par défaut, la taille des fichiers est estimée à 125 Mo pour linux-headers et à 220 Mo pour linux-image car du
peut être douloureusement lent, sauf si les fichiers sont dans le cache. Pour obtenir la taille réelle en utilisant du
passer n'importe quel 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 être supprimée) est maintenant affiché dans la barre de titre.
La boîte de dialogue utilisée pour afficher le nom de chaque noyau. Date du dernier accès . 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 le Date de modification à la place.