linux-server-cleaner-script/clean_old_kernals.sh

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!"