Como limpar previamente pacotes removidos apenas? [duplicado]

13

Eu tenho uma lista de pacotes no meu sistema, que foram instalados e removidos novamente, mas não eliminados, ou seja, ainda há muitos conffiles etc. em volta.

A saída de dpkg --get-selections | grep deinstall lista cerca de 85 pacotes diferentes que eu não preciso e não quero ser totalmente eliminados.

Então, minha pequena pergunta, que eu decidi finalmente perguntar depois de experimentar, levou a problema , é:

Como completamente elimino pacotes previamente instalados que já foram removidos?

Reinstalar e limpar não é uma opção, é claro.

    
por Byte Commander 19.10.2015 / 14:44

5 respostas

19

Acabei de encontrar o seguinte comando que funcionou:

sudo apt-get purge $(dpkg -l | grep '^rc' | awk '{print }')
    
por Byte Commander 19.10.2015 / 15:01
10

dpkg --get-selections | grep deinstall produz uma lista de nomes de pacotes com a palavra " deinstall ":

$ dpkg  --get-selections | grep deinstall
account-plugin-windows-live         deinstall
debarchiver                         deinstall
flashplugin-installer               deinstall
    ...

Solicitando que awk imprima apenas o primeiro campo:

$ dpkg --get-selections | awk ' == "deinstall" {print }'
account-plugin-windows-live
debarchiver
flashplugin-installer
    ...

Agora que temos a lista de pacotes, xargs nos permitirá alimentar a lista de pacotes para um comando (ou comandos, se a lista for longa o suficiente):

dpkg --get-selections | awk ' == "deinstall" {print }' | xargs sudo apt-get purge --dry-run

Quando estiver satisfeito com os resultados simulados, remova --dry-run do comando apt-get .

Leia:

for i in awk xargs apt-get ; do
    man $i
done
    
por waltinator 19.10.2015 / 15:01
1

Eu mesmo perguntei isso há alguns dias. Caiu com

apt-get purge $(dpkg -l | awk 'BEGIN{ORS=" "} /^rc/{ print }')

Os pacotes removidos, mas não eliminados, aparecem na saída de dpkg -l com rc no início. awk seleciona a segunda coluna, também conhecida como o nome do pacote, e as imprime separadas por espaço.

    
por Nephente 19.10.2015 / 14:55
1

Se você quiser apenas limpar toda a lista, você pode usar este comando; ele executará uma execução seca, no caso de pacotes essenciais serem removidos, o que você provavelmente não quer que aconteça:

dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs sudo apt-get --dry-run purge

Se nenhum pacote essencial for removido, é seguro executar o comando real:

dpkg --get-selections | sed -n 's/\tdeinstall$//p' | xargs sudo apt-get --yes purge
  • sed -n 's/\tdeinstall$//p' : imprime apenas linhas em stdin , em que uma tabulação seguida por uma string deinstall pode ser removida do final da linha; isso tem o efeito de imprimir somente as linhas contendo uma tabulação seguidas por uma string deinstall no final da linha sem a tabulação real seguida pela string deinstall no final da linha
  • xargs sudo apt-get --yes purge : passa cada linha em stdin como um argumento para sudo apt-get --yes purge
por kos 19.10.2015 / 14:58
1

Meus cinquenta centavos, um simples oneliner:

Primeiro teste com

dpkg --get-selections | awk '=="deinstall" {system("sudo apt-get --dry-run purge ")}'

e tchau tchau

dpkg --get-selections | awk '=="deinstall" {system("sudo apt-get -y purge ")}'

Exemplo

% dpkg --get-selections | grep deinstall
nginx-common                    deinstall

% dpkg --get-selections | awk '=="deinstall" {system("sudo apt-get -y purge ")}'

% dpkg --get-selections | grep deinstall
[no output]
    
por A.B. 19.10.2015 / 15:36