64 lines
1.7 KiB
Bash
64 lines
1.7 KiB
Bash
#!/bin/bash
|
|
|
|
# Get currently running kernel version
|
|
current_kernel=$(uname -r)
|
|
echo "Currently running kernel: $current_kernel"
|
|
|
|
# Get all installed kernels
|
|
installed_kernels=$(dpkg --list | grep linux-image | awk '{print $2}')
|
|
|
|
# Determine the latest kernel version installed
|
|
kernel_versions=$(echo "$installed_kernels" | grep -Eo '6.1.0-[0-9]+-cloud-amd64' | sort -V)
|
|
|
|
latest_kernel=$(echo "$kernel_versions" | tail -n 1)
|
|
second_latest=$(echo "$kernel_versions" | tail -n 2 | head -n 1)
|
|
third_latest=$(echo "$kernel_versions" | tail -n 3 | head -n 1)
|
|
|
|
echo -e "\nKernels that will be KEPT:"
|
|
echo "$current_kernel (currently running)"
|
|
echo "$latest_kernel (latest installed)"
|
|
echo "$second_latest (second latest)"
|
|
echo "$third_latest (third latest)"
|
|
|
|
# Prepare a list of kernels to remove
|
|
echo -e "\nKernels that will be REMOVED:"
|
|
kernels_to_remove=()
|
|
for kernel in $installed_kernels; do
|
|
if [[ "$kernel" != *"$current_kernel"* ]] && \
|
|
[[ "$kernel" != *"$latest_kernel"* ]] && \
|
|
[[ "$kernel" != *"$second_latest"* ]] && \
|
|
[[ "$kernel" != *"$third_latest"* ]]; then
|
|
echo "$kernel"
|
|
kernels_to_remove+=("$kernel")
|
|
fi
|
|
done
|
|
|
|
# Confirm before removing
|
|
echo -e "\nDo you want to proceed with the removal? (y/N): "
|
|
read -r confirm
|
|
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
|
|
echo "Aborted."
|
|
exit 0
|
|
fi
|
|
|
|
# Remove old kernels
|
|
if [ ${#kernels_to_remove[@]} -eq 0 ]; then
|
|
echo "No old kernels to remove."
|
|
else
|
|
echo "Removing old kernels..."
|
|
sudo apt-get purge -y "${kernels_to_remove[@]}"
|
|
sudo apt-get autoremove --purge -y
|
|
sudo apt-get clean
|
|
fi
|
|
|
|
# Update GRUB
|
|
echo "Updating GRUB..."
|
|
sudo update-grub
|
|
|
|
# Display remaining disk space
|
|
echo -e "\nDisk space after cleanup:"
|
|
df -h /
|
|
|
|
echo "Cleanup completed!"
|
|
|