Ubuntu LTS 오래된 커 널 삭제

3845 단어
처음으로 100 줄 이 넘 는 셸 스 크 립 트 를 썼 는데...
우 분투 의 LTS 는 말 그대로 장기간 업 데 이 트 를 위해 유지 되 기 때문에 가상 컴퓨터 설치 추천/boot 는 200 M 만 으로 는 부족 합 니 다.
셸 에서 다음 과 같은 삭제 방법 이 있 습 니 다: command line
이 어 셸 스 크 립 트 를 쓰 는 능력 을 키 우기 위해 스스로 스 크 립 트 를 썼 다.
여기 서 주의해 야 합 니 다. Liux 버 전 문제 로 인해 이 스 크 립 트 는 반드시 당신 의 것 을 사용 하지 않 아 도 됩 니 다. 그러나 전체적인 사 고 는 일치 합 니 다. 정규 표현 식 일치 부분 과 다른 세부 사항 도 있 습 니 다.
현재 커 널 이 최신 버 전이 아니라면 다시 시작 해 야 합 니 다.
다음은 코드 입 니 다. 커 널 을 삭제 하 는 것 이 이렇게 큰 일이 기 때문에 상호작용 알림 부분 에 많은 코드 가 소모 되 었 습 니 다. 진정한 정 수 는 정규 표현 식 이 고 셸 명령 과 스 크 립 트 문법 입 니 다.
많은 문제 에 부 딪 히 면 더 많이 배운다.
다시 한 번 말씀 드 리 지만, 구체 적 인 컴퓨터, 구체 적 인 시스템, 구체 적 인 분석 Linux 철학 은 '위험 에 직면 한 웃음' 입 니 다. 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

좋은 웹페이지 즐겨찾기