Eu diria: não use na forma atual
-
Faz alterações sem perguntar a você. A parte
apt-get -y purge
permite que o one-liner inicie a execução de pacotes de limpeza, sem a sua confirmação. Se algum erro no script existir, você poderá estar aparafusado . -
Nenhuma fonte, nenhum autor dado. A fonte disso faz diferença aqui. Caso venha de um pacote de sistema completamente testado, podemos rastrear o teste que está sendo feito nele. De uma fonte aleatória, não podemos confiar nela.
-
dpkg -l
é executado semsudo
. Não vejo por que o autor original achou que isso fosse necessário.
Use o bom senso
Remova as partes prejudiciais e deixe de fora tudo o que é executado como root.
Por exemplo, reduza para isso:
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)//")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*//;/[0-9]/!d'
que apenas apenas envia material e executa com permissões regulares de usuário . Depois de concordar com a remoção desses kernels, você pode anexar | xargs sudo apt-get purge
a você mesmo. Sem a opção -y
, intencionalmente, você será solicitado a confirmar as alterações a serem feitas em seu sistema.
Explicação
-
dpkg -l
Mostra a lista de todos os pacotes. Neste caso, ele só listará os pacotes começando comlinux-
como nome. -
|
(um canal) canaliza a saída do comando à esquerda (chamamos isso destdout
) para a entrada do comando à direita (chamamos isso destdin
). -
sed
é uma ferramenta para manipular strings usando expressões regulares . Neste caso, ele manipula a saída do comando à esquerda do pipe e filtra os pacotes instalados (dependendo doii
dado pordpkg
). Está até sendo aninhado neste caso. Seria muito difícil explicar todo o uso desed
aqui, pois seu uso é muito complicado com as expressões regulares complexas. (o\(.*\)-\([^0-9]\+\)"
é um exemplo de uma expressão regular. -
Expressões regulares são amplamente usadas para encontrar correspondências com base na expressão que elas representam.
é a referência de substituição para fazer uma espécie de busca e substituição universal (referindo-se ao primeiro 'hit' com
1
). A expressão regular em si não pode causar nenhum dano. No entanto, se eles manipularem a entrada de maneira errada, eles podem remover os pacotes errados ou até mesmo fazer a injeção de shell. Neste caso, parece uma maneira de encontrar o nome do pacote do kernel com base na versão fornecida poruname -r
. -
uname -r
mostra a versão atual do kernel em execução. -
xargs
acrescenta as linhas da entrada esquerda do pipe como argumentos para o comando. Nesse caso, as versões do kernel em cada linha são convertidas em uma lista separada por espaço horizontal e anexadas ao comandosudo apt-get
. -
sudo apt-get -y purge [packagename]
expurga (remove tudo) dos pacotes fornecidos (como argumentos).
Alternativas
Alguma pergunta provavelmente já foi feita sobre isso. Relevantes que encontrei até agora:
- Como "limpar" os kernels anteriores após a atualização?
- Como faço para remover versões antigas do kernel para limpar o menu de inicialização?
-
De esta resposta , o seguinte comando parece fazer o mesmo de uma forma muito mais segura e mais comum:
sudo apt-get purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )