Meu one-liner para remover kernels antigos (isso também libera espaço em disco):
dpkg --list | grep linux-image | awk '{ print }' | sort -V | sed -n '/''uname -r''/q;p' | xargs sudo apt-get -y purge
Explicação (lembre-se, |
usa a saída do comando anterior como entrada para a próxima)
-
dpkg --list
lista todos os pacotes instalados
-
grep linux-image
procura as imagens linux instaladas
-
awk '{ print }'
apenas gera a segunda coluna (que é o nome do pacote)
-
sort -V
coloca os itens em ordem pelo número da versão
-
sed -n '/''uname -r''/q;p'
imprime as linhas antes do kernel atual
-
xargs sudo apt-get -y purge
limpa os kernels encontrados
Desvinculando a invocação de sed
:
-
-n
informa sed
para ficar quieto
-
'uname -r'
gera a versão atual do kernel instalado - nós a incluímos em backticks para que a saída seja incluída como parte do comando (você também pode ver isso como $(uname -r)
-
/something/q
diz que parar quando você combina 'algo' (nesse caso, algo é resultado de uname -r
) - o /
envolve uma expressão regular
-
p
é impresso
- o
;
é o comando separtor, então /something/q;p
diz quit quando você combina algo, senão imprime
ao todo, sed -n '/''uname -r''/q;p'
é imprimir as linhas até corresponder ao nome atual do kernel.
Se você é paranóico (como eu), você pode fazer a última parte xargs echo sudo apt-get -y purge
para que o comando para limpar os kernels antigos seja impresso, então você pode verificar se nada inesperado está incluído antes de executá-lo.
Versão modificada para remover cabeçalhos:
dpkg --list | grep 'linux-image' | awk '{ print }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)//")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)//")"'/q;p' | xargs sudo apt-get -y purge
Nota: a invocação sed
é modificada. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)//")"
extrai apenas a versão (por exemplo, "3.2.0-44"), sem "-genérico" ou semelhante de uname -r
Versão all-in-one para remover imagens e cabeçalhos (combina as duas versões acima):
echo $(dpkg --list | grep linux-image | awk '{ print }' | sort -V | sed -n '/''uname -r''/q;p') $(dpkg --list | grep linux-headers | awk '{ print }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)//")"'/q;p') | xargs sudo apt-get -y purge