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