Bu cevabın avantajı yerli Ubuntu Bash üncü parti uygulamalar kurmadan kullanılıyor. Bu bash betiğini kendi gereksinimlerine göre kullanmayan apt
veya dpkg
değiştirmeyen özel çekirdek kullanıcıları . Bu cevabı temel alır ( Eski çekirdeğin tümü bir kerede seçici olarak nasıl temizlenir ).
Zenity tabanlı çözüm
Zenity, bir listeyi işlemek ve radyo düğmeleriyle öğeleri seçmek için terminale hoş bir GUI arayüzü sağlar :
Başlığın gösterdiği gibi, başlattığınız çekirdeğin kaldırılması mümkün değildir ve listeye dahil edilmez. Bildirilen boyut, /boot
dizine ne kadar tasarruf sağlanacağıdır . Çekirdek ikili dosyaları diğer alanlarda da bulunduğundan diskinize daha çok şey kaydedilir. 27 Temmuz 2017 not: Rehberler /usr/src/*kernel_version*
ve /lib/modules/*kernel_version*
şimdi de eklenmiştir.
Modifiye Tarihi kullanarak keşfedilir stat
komutu. Sistemimde, o tarih kullanılarak çekirdeğin her açılışında tarihin "dokunulduğunu" ( belirli bir çekirdeğin en son ne zaman başlatıldığını nasıl anlarsınız? ) Cron yeniden başlatılmasını sağlar. Ancak, sisteminizde tarih, en son başlattığınız zaman değil çekirdek yayın tarihi olacaktır.
apt-get purge
iptal etme şansını veriyor
Temizlenecek her şeyi görmek ve kurtarılacak toplam disk alanını (biraz yanıltıcı) görmek için son bir fırsat verilir:
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]
Kod
Adlı bir yürütülebilir dosya için bu kodu kopyalayın rm-kernels
içinde /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
NOT: Dosyayı oluşturmak için sudo iznine ihtiyacınız var.
gksu gedit /usr/local/bin/rm-kernels
Dosyanın çalıştırılabilir kullanımını sağlamak için:
sudo chmod +x /usr/local/bin/rm-kernels
Sunucu Sürümü
rm-kernels-server
Çekirdeklerin tümünü bir kerede seçici olarak silmek için kullanılan sunucu sürümüdür. Bir GUI (grafiksel) iletişim kutusu yerine, temizlenecek çekirdeği seçmek için metin tabanlı bir iletişim kutusu kullanılır.
İletişim kutusu varsayılan Ubuntu Masaüstü kurulumunda, ancak Ubuntu Sunucusunda değil.
Örnek ekran
rm-kernels-server
bash kodu
#!/bin/bash
# NAME: rm-kernels-server
# PATH: /usr/local/bin
# DESC: Provide dialog checklist of kernels to remove
# Non-GUI, text based interface for server distro's.
# 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
echo "root access required. Use: sudo rm-kernels-server"
exit 99
fi
# Must have the dialog package. On Servers, not installed by default
command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed. Aborting."; exit 99; }
OLDIFS="$IFS"
IFS="|"
item_list=() # Deviate from rm-kernels here.
current_version=$(uname -r)
i=0
for f in /boot/vmlinuz*
do
if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
[[ $f =~ vmlinuz-(.*) ]]
((i++)) # Item List
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
item_list=("${item_list[@]}" "$i" "$v ! $d ! $s" off)
done
cmd=(dialog --backtitle "rm-kernels-server - Total: $t MB excluding: $current_version" \
--title "Use space bar to toggle kernel(s) to remove" \
--column-separator "!" \
--separate-output \
--ascii-lines \
--checklist " Kernel Version --------- Modified Date Size" 20 60 15)
selections=$("${cmd[@]}" "${item_list[@]}" 2>&1 >/dev/tty)
IFS=$OLDIFS
if [ $? -ne 0 ] ; then
echo cancel selected
exit 1
fi
i=0
choices=()
for select in $selections ; do
((i++))
j=$(( 1 + ($select - 1) * 3 ))
choices[i]=$(echo ${item_list[j]} | cut -f1 -d"!")
done
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
NOT:dialog
Yönerge çağrısında, çizim kutuları için --ascii-lines
çizgi çizme genişletilmiş karakter setini ( ssh
beğenmeyen) "+ ----- +" ile değiştirmek için geçirilir . Bu görünümü sevmiyorsanız, --no-lines
yönergeyi hiçbir kutu için kullanabilirsiniz .
28 Temmuz 2017 Güncellemeleri
Her bir çekirdeğin hesaplanan büyüklüğü, /boot/*kernel_version*
toplamda ~ 50 MB olan 5 dosyadan alınmıştır . Formül, /usr/src/*kernel_version*
ve içindeki dosyaları içerecek şekilde değiştirildi /lib/modules/*kernel_version*
. Her bir çekirdek için hesaplanan boyut şimdi ~ 400 MB'dir. Yukarıdaki kod rm-kernels
ve rm-kernels-server
güncellendi. Ancak, yukarıdaki örnek ekranlar bu değişiklikleri henüz yansıtmamaktadır.
Varsayılan değer, 125 MB’daki linux başlıklarının dosya boyutunu ve 220 MB’da linux görüntüsünü tahmin etmektir, çünkü du
dosyalar önbellekte olmadığı sürece acı verici bir şekilde yavaşlayabilir. Gerçek büyüklüğü kullanmak du
için betiğe herhangi bir parametre iletin.
Artık tüm çekirdek boyutlarının (kaldırılamayan geçerli sürüm hariç) toplamı başlık çubuğunda gösteriliyor.
Her Çekirdeğin Son Erişim Tarihini görüntülemek için kullanılan iletişim kutusu . Bu tarih, yedekleme veya benzeri işlemler sırasında tüm çekirdeğin üzerine kitlenin üzerine yazılabilir. İletişim kutusu şimdi bunun yerine Değiştirme Tarihi'ni gösteriyor .