O que o código a seguir faz?
Eu o encontrei na internet, então copiei e colei no terminal, mas quando instalei um novo kernel, ele detectou apenas o antigo.
sudo apt-get remove --purge $(dpkg -l 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d')
command-line
apt
kernel
sed
medo_alouane
fonte
fonte
dpkg -l 'linux-image-*'
, que lista todos os pacotes de kernel instalados e filtra alguns deles para exclusão porapt-get remove
.update-grub
(package postinst) mais lento. Se você está preocupado que você não chegou a inicializar o kernel que você estava tentando atualizar para, em seguida, executaruname -a
, ou mesmodmesg | less
Respostas:
Vamos quebrar o código um por um (para o meu sistema):
Portanto, isso não faria nada:
Como você pode ver , estava muito perto de remover o meu meta pacote atual do kernel
linux-image-generic 3.13.0.32.38 amd64 Generic Linux kernel image
(graças a esta últimased '/[0-9]/!d'
linha), o que está errado.Em poucas palavras, este pedaço de
sed
tem vários problemas. Você deve evitá-lo para remover seus kernels mais antigos.EDITAR:
Eu já disse que o
sed
comando tem problemas. Por uma questão de extensão, vou remover as duas últimas linhas com o formulário que realmente deve estar funcionando no meu cenário atual.As duas últimas linhas em uma forma modificada:
Assim:
Outpus:
Isso é muito vingativo !!
Agora, mostrando o que isso faria com o meu sistema,
--dry-run
ning oapt-get remove
comando completo :Como você vê, ele removerá todos os meus kernels atuais; observe também que isso é apenas uma simulação para corresponder ao meu cenário atual e que o original
sed
pode ser aprimorado.** Observe que o código real funcionará se fizer uma
reboot
atualização posterior ao kernel, como o Oli já mencionou .EDIT2:
Aqui está um script simples, porém robusto, que considerará todas as situações e removerá os kernels mais antigos reais:
Se você possui uma versão mais recente que a atual, isso fornecerá um aviso para reiniciar o computador primeiro. Observe também que os kernels mais antigos são preservados devido a uma boa razão: se você, de alguma forma, atrapalhar o seu kernel atual, tornando o sistema instável, poderá inicializar qualquer kernel mais antigo.
fonte
apt-get
peça e que saída você obteve?(([a-z]|-)*
, que é) sem aapt-get
parte antes de criticá-lo. No meu sistema, ele exibe as seguintes linhas:linux-image-3.13-
,linux-image-3.13-
,linux-image-extra-3.13-
,linux-image-extra-3.13-
,linux-image-3.13.0.49-generic
. É isso mesmo que você pretendia? (Além disso, pontos de bônus se você pode descobrir qual kernels eu realmente ter instalado.)Este é um esforço para remover os kernels que não são o atual.
Existem muitos bits de código por aí que fazem algo assim e este não é um bom exemplo . Ele poderia remover facilmente os kernels mais recentes que o atual e, portanto, o meta-pacote que instala (
linux-generic
et al) se você tivesse uma atualização e não reiniciasse.fonte