এই উত্তরের সুবিধাটি হ'ল দেশীয় উবুন্টু বাশ তৃতীয় পক্ষের অ্যাপ্লিকেশন ইনস্টল না করে ব্যবহৃত হয়। কাস্টম কার্নেলের ব্যবহারকারীরা যারা তাদের প্রয়োজন অনুসারে এই ব্যাশ স্ক্রিপ্টটি ব্যবহার করেন না apt
বা dpkg
পরিবর্তন করতে পারেন। এই উত্তরটির উপর ভিত্তি করে ( কীভাবে নির্বাচিতভাবে পুরানো কার্নেলগুলি একবারে একসাথে পরিষ্কার করতে হয় )।
Zenity ভিত্তিক সমাধান
জেনিটি একটি তালিকা প্রক্রিয়া করতে এবং রেডিও-বোতামের সাহায্যে আইটেম নির্বাচন করার জন্য টার্মিনালে একটি দুর্দান্ত জিইউআই ইন্টারফেস সরবরাহ করে :
শিরোনামটি বর্তমান কার্নেলটি দিয়ে বোঝায় যে আপনি বুট করেছেন সেটিকে সরানো যাবে না এবং তালিকায় অন্তর্ভুক্ত করা হবে না। রিপোর্ট করা আকারটি /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
একসাথে সমস্ত কার্নেলগুলি নির্বাচন করে মুছতে সার্ভার সংস্করণ। জিইউআই (গ্রাফিকাল) ডায়ালগ বক্সের পরিবর্তে শোধন করার জন্য কার্নেল নির্বাচন করতে একটি পাঠ্য-ভিত্তিক ডায়ালগ বাক্স ব্যবহার করা হয়।
ডায়ালগটি ডিফল্ট উবুন্টু ডেস্কটপ ইনস্টলেশনতে রয়েছে তবে উবুন্টু সার্ভারে নেই।
নমুনা পর্দা
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 এমবি মোট 5 ফাইল ছিল। সূত্রে ফাইল অন্তর্ভুক্ত পরিবর্তিত হয়েছে /usr/src/*kernel_version*
এবং /lib/modules/*kernel_version*
। প্রতিটি কার্নেলের জন্য গণনা করা আকারটি এখন 400 এমবি। জন্য উপরের কোড rm-kernels
এবং rm-kernels-server
আপডেট করা হয়েছে। তবে উপরে বর্ণিত নমুনা পর্দা এই পরিবর্তনগুলি প্রতিফলিত করে না।
ডিফল্টটি হল লিনাক্স-শিরোলেখগুলির জন্য 125 এমবি এবং লিনাক্স-চিত্রের 220 এমবিতে ফাইলের আকারের অনুমান করা কারণ du
ফাইলগুলি ক্যাশে না থাকলে যন্ত্রণাদায়কভাবে ধীর হতে পারে। du
স্ক্রিপ্টের কোনও প্যারামিটার ব্যবহার করে আসল আকার পেতে ।
মোট কার্নেল আকার (বর্তমান চলমান সংস্করণ বাদ দিয়ে যা সরানো যায় না) এখন শিরোনাম বারে প্রদর্শিত হবে।
প্রতিটি কার্নেলের শেষ অ্যাক্সেসের তারিখ প্রদর্শন করতে ডায়ালগ বাক্স ব্যবহৃত হয় । এই তারিখটি ব্যাকআপ বা অনুরূপ ক্রিয়াকলাপের সময়ে সমস্ত কার্নেলের জন্য ভর ওভাররাইট করতে পারে। ডায়ালগ বাক্সে পরিবর্তে পরিবর্তিত তারিখটি দেখায় ।