É possível desfazer um comando apt-get install?

62

Eu instalei o Carpadio na minha instalação do Xubuntu (um Live USB), que então puxou mais de 50 pacotes do, supostamente, o lado do Ubuntu do repositório. Agora eu gostaria de desfazer isso. No entanto, para toda a minha caça, não consigo encontrar nada mais útil do que Como eu posso inverter o comando sudo apt get install , que apenas sugere apt-get purge . Isso não é útil, pois tudo o que faz é remover dois pacotes (carpadio e carpadio-gnomepanel).

/var/log/apt/history.log tem uma lista de todos os pacotes que foram instalados junto com esse comando. Então, eu queria saber se há alguma maneira fácil de remover todos eles ? Senão posso apenas reinstalar, esta foi uma instalação nova de qualquer maneira, mas estou curioso.

Uma pequena amostra do registro de histórico (1 / 5-1 / 10 da lista inteira)

  

Linha de comando: apt-get install cardapio-gnomepanel
  Instale: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, automático), python-packagekit: amd64 (0.7.2-4ubuntu3, automático), cups-pk-helper: amd64 (0.2.1.2-1ubuntu0.1, automático) , geoclue: amd64 (0.12.0-1ubuntu12, automático), unidade: amd64 (5.18.0-0ubuntu1, automático), indicador de impressoras: amd64 (0.1.6-0ubuntu1, automático), libevolution: amd64 (3.2.3- 0ubuntu6, automático), libqt4-declarativo: amd64 (4.8.1-0ubuntu4.3, automático), libmtp9: amd64 (1.1.3-1ubuntu0.1, automático), rastreador-miner-fs: amd64 (0.14.0-2ubuntu1 , automático), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, automático), python-aptdaemon.pkcompat: amd64 (0,43 + bzr805-0ubuntu7, automático), gnome-media: amd64 (3.4.0- 0ubuntu3.1, automático), metacity: amd64 (2.34.1-1ubuntu11, automático), nautilus: amd64 (3.4.2-0ubuntu6, automático), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, automático), compiz- plugins-default: amd64 (0.9.7.12-0ubuntu1, automático), libunistring0: amd64 (0.9.3-5, automático), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, automático), ubuntu-docs: amd64 (12.04.6, automático), python-mako: amd64 (0.5.0-1, automático),

Para todos aqueles que sugeriram autoremove : não tenho certeza do porquê, mas tenho apenas 1 outro pacote relacionado a python (python-keybinder ou algo assim) como "desnecessário" e isso é tudo que autoremove foi capaz de remover.

Entre a instalação e a desinstalação, apenas a principal mudança foi a instalação de xubuntu-restricted-extras .

    
por Karthik T 25.01.2013 / 18:03

9 respostas

71

Basicamente, você terá que apt-get remove (ou apt-get purge) o pacote e executar apt-get autoremove depois disso, para reverter a instalação de package-one .

Vamos analisar todo o processo:

  • sudo apt-get install package-one instala 50 dependências marcadas como "automáticas", como também pode ser visto no extrato de log em sua pergunta

  • sudo apt-get purge package-one remove (expurga) apenas um, mas faz executa isto!

    Todas as ações de instalação a seguir (se você executar alguma) produzirão uma mensagem informativa com os pacotes que não são mais necessários:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    Esta lista é basicamente apenas uma lista de todos os pacotes marcados como "automáticos" sem uma dependência inversa deles. Em outras palavras, não há razão para que eles sejam instalados no que diz respeito ao gerenciamento de pacotes.

    Nota: Nenhuma instalação é necessária! É apenas para demonstrar que o APT é inteligente para falar sobre seus pacotes desnecessários!

  • sudo apt-get autoremove --purge remove (expurga) estes

Mais informações

por gertvdijk 25.01.2013 / 18:13
18

Quando você deseja remover um pacote e suas dependências instaladas no momento, use:

sudo apt-get purge package
sudo apt-get --purge autoremove

mas para desfazer apt actions, você pode usar o script apt-undo . É um script simples que pode desfazer as ações apt realizadas no Ubuntu. É de notar que este script só pode funcionar se você usá-lo em vez de apt-get para instalar / atualizar / remover / limpar / reduzir seus pacotes.

Para instalar o apt-undo no Ubuntu, execute os seguintes comandos no terminal:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

uso:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

Para desfazer, as ações aptitude acima executam os seguintes comandos no terminal:

apt-undo undo
    
por Ramin 25.01.2013 / 18:15
7

Use o poder do Unix. Pegue a linha do arquivo de log que você possui e construa um comando que irá desfazer o que o apt fez. Por exemplo:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

Para que você possa usar esta limpeza todos os pacotes que você instalou acidentalmente, considerando a linha apropriada do seu arquivo de log:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(Eu usei perl em vez de sed porque sed usa um tipo de expressão regular que não suporta correspondências não-gananciosas, que foi a maneira mais fácil de construir o que eu precisava)

    
por Robie Basak 25.01.2013 / 18:46
1

Depois de remover o pacote único, e você pode removê-lo completamente adicionando --purge, para, apt-get remove --purge <package> , ele deve lhe dar uma mensagem de que os pacotes da biblioteca foram instalados automaticamente e não são mais necessários, Em que ponto você pode executar apt-get autoremove para removê-los.

    
por Ken Kinder 25.01.2013 / 18:12
1

Siga o sudo apt-get purge packagename com

sudo apt-get autoremove. 

A menos que seja um metapacote, isso deve resolver isso.

Veja também o faq em Como removo manualmente todos arquivos da Cardapio? .

    
por chaskes 25.01.2013 / 18:13
1
  1. Cole a longa lista de pacotes indesejados do log do apt em um new_file.txt
  2. Executar perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Copie a saída do último comando para a área de transferência ou canalizá-lo em primeiro lugar .
  4. Execute sudo apt-get remove [cole o conteúdo da área de transferência aqui]

Feito.

Basicamente, precisamos formatar a lista de pacotes do log do apt para algo que o apt-get possa entender. Os parênteses, palavras entre aspas e as vírgulas precisam ir, então é para onde o perl entra para tocar. Sim, existem maneiras melhores (mais eficientes) - mas eu fiz isso, é fácil de entender e funciona.

    
por Insperatus 02.02.2013 / 10:59
0

Se você acabou de adicionar um ppa e deseja reverter, é necessário seguir as etapas descritas abaixo. Entenda que isso pode falhar, quando você instalou outros pacotes que não deseja desinstalar. Tenho certeza de que isso pode ser feito com um script. Pessoalmente eu acho que isso deve ser uma parte do apt, e deve haver uma melhor administração de quais pacotes estão instalados por causa das dependências e quais são instalados por solicitação do usuário.

1) remova o ppa do /etc/apt/sources.list Lembre-se da hora que você adicionou o ppa. Se você tiver sorte, não precisa ser preciso.

2) faça uma lista do que reinstalar, a partir do momento em que você instalou o PPA: cat /var/log/dpkg.log | grep 'upgrade'

3) faça uma lista do que remover, a partir do momento em que você instalou o PPA: cat /var/log/dpkg.log | grep 'install'

4) remova todos os pacotes da etapa 3: sudo apt-get remove {lista de pacotes do passo 3}

5) reinstale todos os pacotes do passo 2: sudo apt-get install --reinstall {lista de pacotes da etapa 2}

6) Se as coisas derem errado e você não conseguir pensar em uma solução, devolva o PPA e reinstale todos os pacotes das duas listas.

    
por VincentSC 20.08.2013 / 18:24
0

Eu sei que é uma pergunta bem antiga, mas vim aqui procurando por ajuda e talvez possa ajudar alguém. Eu tive uma situação semelhante à do @Karthik-T após instalar unity8-desktop-session-mir . Eu sei que é um grande problema. Puxou 233 pacotes com ele.

Usando autoremove , sou removido apenas 34 deles. O ponto é que durante a instalação de unity8-desktop-session-mir , ele removeu dois pacotes ( python3-aptdaemon.pkcompat e evolution-data-server-online-accounts ). É declarado em /var/log/apt/history.log , após a seção Install .

Para desfazer completamente a instalação do Unity 8, eu publiquei o seguinte:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (removeu 8 pacotes relacionados ao Unity 8)
  4. sudo apt-get --purge autoremove

Isso não removerá absolutamente tudo que você instalou antes, mas em alguns casos é bom o suficiente.

PS: talvez o autoremove no segundo passo não seja necessário, pois eu lancei novamente no passo quatro.

    
por user536838 03.08.2016 / 12:47
0

Tecnicamente, operações "remover" ou "autoremover" não são "desfazer", embora possam ser feitas para fazer o trabalho de maneira adequada na maioria das vezes.

Por padrão, o apt-get deixará pacotes para trás, a menos que você especifique -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

É mais confiável dar uma olhada no apt history.log e desinstalar todos os pacotes instalados. Eu criei um pequeno script baseado em nó para facilitar o processo:

link

Além disso, aqui está outra abordagem mais manual para "reverter" as alterações:

link

    
por Rolf 12.05.2018 / 12:22

Tags