इस उत्तर का लाभ मूल उबंटू बैश का उपयोग तृतीय-पक्ष एप्लिकेशन को स्थापित किए बिना किया जाता है। कस्टम कर्नेल के उपयोगकर्ता जिन्होंने अपनी आवश्यकताओं के अनुरूप इस बैश स्क्रिप्ट का उपयोग नहीं किया है apt
या dpkg
बदल सकते हैं। यह उत्तर इस पर आधारित है ( एक बार में पुरानी गुठली का चयन कैसे करें )।
ज़ीनिटी आधारित समाधान
ज़ीनिटी एक सूची को संसाधित करने और रेडियो-बटन के साथ आइटम का चयन करने के लिए टर्मिनल को एक अच्छा जीयूआई इंटरफ़ेस प्रदान करता है :
जैसा कि शीर्षक बताता है कि आपके द्वारा बूट किया गया वर्तमान कर्नेल हटाया नहीं जा सकता है और सूची में शामिल नहीं है। बताया गया आकार /boot
निर्देशिका में कितना सहेजा जाएगा । आपकी डिस्क पर अधिक सहेजा जाता है क्योंकि कर्नेल बायनेरिज़ अन्य क्षेत्रों में भी रहते हैं। 27 जुलाई, 2017 नोट: निर्देशिका /usr/src/*kernel_version*
और /lib/modules/*kernel_version*
अब भी शामिल हैं।
संशोधित तिथि का उपयोग कर की खोज की है stat
आदेश। मेरे सिस्टम में वह तारीख हर बार "स्पर्श" की जाती है जब कर्नेल को इस का उपयोग करके बूट किया जाता है ( आप कैसे पता लगा सकते हैं कि किसी विशिष्ट कर्नेल संस्करण को अंतिम बार बूट किया गया था? ) क्रोन रिबूट स्क्रिप्ट। हालाँकि, आपके सिस्टम पर तारीख कर्नेल रिलीज़ की तारीख होगी, न कि पिछली बार जब आपने इसे बूट किया था।
apt-get purge
आपको गर्भपात का मौका देता है
आपको सब कुछ देखने का अंतिम अवसर दिया जाएगा, जिसे शुद्ध किया जाएगा और कुल डिस्क स्थान (कुछ भ्रामक) देखें, जिन्हें पुनर्प्राप्त किया जाएगा:
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]
कोड
इस कोड को एक निष्पादन योग्य फ़ाइल rm-kernels
में कॉपी करें जिसका नाम इसमें है /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
नोट: आपको फ़ाइल का उपयोग करने के लिए sudo अनुमति की आवश्यकता है:
gksu gedit /usr/local/bin/rm-kernels
फ़ाइल निष्पादन योग्य उपयोग करने के लिए:
sudo chmod +x /usr/local/bin/rm-kernels
सर्वर संस्करण
rm-kernels-server
सर्वर संस्करण चुनिंदा रूप से गुठली को एक साथ हटाने के लिए है। GUI (चित्रमय) संवाद बॉक्स के बजाय एक पाठ-आधारित संवाद बॉक्स का उपयोग पर्स को गुठली चुनने के लिए किया जाता है।
डायलॉग डिफ़ॉल्ट उबंटू डेस्कटॉप इंस्टालेशन में है लेकिन उबंटू सर्वर में नहीं है।
नमूना स्क्रीन
rm-kernels-server
बैश कोड
#!/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
नोट:dialog
निर्देश में कॉल करने के लिए ड्राइंग बॉक्स के लिए "+ ----- +" के साथ --ascii-lines
लाइन-ड्रॉ विस्तारित वर्ण सेट (जो ssh
पसंद नहीं करता है) को बदलने के लिए पारित किया गया है । यदि आपको यह रूप पसंद नहीं है, तो आप --no-lines
बिना किसी बॉक्स के निर्देश का उपयोग कर सकते हैं ।
28 जुलाई, 2017 अपडेट
प्रत्येक कर्नेल की परिकलित आकार लिया गया था /boot/*kernel_version*
जिसमें से कुल 5 फाइलें थीं ~ 50 एमबी। सूत्र में फ़ाइलों को शामिल करने से बदल गया है /usr/src/*kernel_version*
और /lib/modules/*kernel_version*
। प्रत्येक कर्नेल के लिए परिकलित आकार अब ~ 400 एमबी है। उपरोक्त कोड rm-kernels
और rm-kernels-server
अपडेट कर दिया गया है। हालाँकि, ऊपर का नमूना स्क्रीन अभी तक इन परिवर्तनों को प्रतिबिंबित नहीं करता है।
डिफ़ॉल्ट रूप से 125 एमबी पर लिनक्स-हेडर के लिए फ़ाइलों का आकार और 220 एमबी में लिनक्स-छवि का अनुमान लगाना है क्योंकि du
जब तक फाइलें कैश में नहीं होती हैं तब तक यह धीमी गति से हो सकता है। du
स्क्रिप्ट के किसी भी पैरामीटर को पास करके वास्तविक आकार प्राप्त करने के लिए ।
सभी कर्नेल आकार (वर्तमान में चल रहे संस्करण को छोड़कर, जिन्हें हटाया नहीं जा सकता) को अब शीर्षक बार में दिखाया गया है।
डायलॉग बॉक्स प्रत्येक कर्नेल की अंतिम एक्सेस तिथि प्रदर्शित करने के लिए उपयोग किया जाता है । यह तिथि बैकअप या समान संचालन के दौरान सभी कर्नेल के लिए बड़े पैमाने पर अधिलेखित हो सकती है। संवाद बॉक्स अब इसके बजाय संशोधित तिथि दिखाता है ।