Ubuntu LTS 删除旧内核

庆祝第一次写了个100多行的shell脚本...

Ubuntu的LTS顾名思义,会长期为你更新维持,因此虚拟机安装推荐的/boot只用200M是不够的

在shell中有以下的删除方法:command line

随后也当时为了锻炼自己写shell脚本的能力,自己写了一份脚本

此处一定要注意,因为linux版本问题,此脚本不一定使用你的,但是整体思路是一致的,区别在于正则表达式匹配部分,还有一些其他细节

还要注意,如果你当前内核并非最新版本,需重启

下面是代码,毕竟是删除内核这么大的事情,于是交互提示部分耗费了不少代码,真正的精髓还是正则表达式,以及shell命令以及脚本语法

遇到很多问题,也学到更多

再次提醒,具体电脑,具体系统,具体分析
The Linux philosophy is 'Laugh in the face of danger'. Oops. Wrong One. 'Do it yourself'. Yes, that's it. --Linus

#!/bin/bash
# This is a shell script used to purge the unused old kernel 
# to save the space for the boot

# Functions
WannaContinue(){
    printf "Wanna continue?[y/n]>"
    read OPT
    case $OPT in
        y|yes|Y|YES|Yes);;
        n|no|N|NO|No) exit 0;;
        *) exit 1
    esac

    return 0
}
WannaPurge(){
    printf "Wanna purge ${1}[y/n]>"
    read OPT
    case $OPT in
        y|yes|Y|YES|Yes) echo "ready to purge ${1}"
            sudo apt-get purge "${1}"
            ;;
        n|no|N|NO|No) ;;
        *) exit 1
    esac
}
ClearDeinstall(){
    printf "Wanna purge ${1}[y/n]>"
    read OPT
    case $OPT in
        y|yes|Y|YES|Yes) echo "ready to clear deinstall ${1}"
            sudo dpkg -P "${1}"
            ;;
        n|no|N|NO|No) ;;
        *) exit 1
    esac

    return 0
}
dpkg --get-selections | grep '^linux-' | nl
WannaContinue

echo "Check the condition of ur mount"
df -h
WannaContinue

echo "This is the currently used kernel"
CUR_U_CORE=$(uname -r | grep -P -o -e '.*(?=-generic)')
echo $CUR_U_CORE
WannaContinue

echo "These are the file which may be the trash"
echo "And this sh doesn't purge all of them, u can be purged by yourself"
dpkg --get-selections | grep -P -o -e 'linux-(modules|image|headers)[^[:space:]]*'  | egrep -v "(generic-hwe-|$CUR_U_CORE)"  | nl
WannaContinue

echo "This is the part this shell will purge."
dpkg --get-selections | grep -P -o -e 'linux-(image|headers)[-0-9.]{3,}generic'  | egrep -v "(generic-hwe-|$CUR_U_CORE)" 
DEL_FILE_SET=($(dpkg --get-selections | grep -P -o -e 'linux-(image|headers)[-0-9.]{3,}generic'  | egrep -v "(generic-hwe-|$CUR_U_CORE)" ))
# echo $DEL_FILE_SET
echo "The following action may cause some dangerous, u have to be really careful"
WannaContinue

if [ -n "$DEL_FILE_SET" ]; then
    for FILE_DEL in "${DEL_FILE_SET[@]}"; do
        WannaPurge $FILE_DEL
    done
else
    echo "There is nothing to purge use sudo perge"
fi

echo "Wanna exec autoremove?[y/n]>"
read OPT
case $OPT in
    y|yes|YES|Y)
        sudo apt autoremove
        ;;
    n|no|NO|N) ;;
    *) exit 1
esac

# dpkg --get-selections | grep -P -o -e '^linux-(modules|image|headers)[^[:space:]]*(?=\s*deinstall)' | egrep -v "(generic-hwe-|$CUR_U_CORE)"
dpkg --get-selections | grep '^linux-.*deinstall'
echo "Here are the packages are deinstall, wanna clear that>"
WannaContinue

DE_INSTL=($(dpkg --get-selections | grep -P -o -e '^linux-(modules|image|headers)[^[:space:]]*(?=\s*deinstall)' | egrep -v "(generic-hwe-|$CUR_U_CORE)"))
if [ -n "$DE_INSTL" ]; then
    for DE_FILE in "${DE_INSTL[@]}"; do
        ClearDeinstall "$DE_FILE"
    done
else
    echo "There is nothing to purge use sudo perge"
fi

sudo update-grub

dpkg --get-selections | grep '^linux-' | nl
echo "Check the condition of ur mount"
df -h
posted @ 2020-04-13 15:23  IdiotNe  阅读(213)  评论(0编辑  收藏  举报