Como os vários comandos de remoção de pacotes do APT diferem?

17

Qual é a diferença entre esses comandos?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove
sajjad
fonte

Respostas:

24

Resposta rápida

  • remove desinstala pacotes com o seu nome.
  • autoremovedesinstala todos os pacotes instalados automaticamente que não são mais necessários. É incorreto listar os nomes dos pacotes depois autoremove; eles serão ignorados (e todos os pacotes elegíveis serão removidos), o que provavelmente não é o que você pretende.
  • --purgefaz com que os arquivos de configuração em todo o sistema associados aos pacotes sendo removidos também sejam removidos. Deve ser acompanhado por um comando, como removeou autoremove. O --purgesinalizador modifica a ação de um comando; não age por si só.
  • purgesignifica a mesma coisa que --purge remove(que é a mesma que remove --purge). É incorreto dizer purgeduas vezes; o segundo purgeé interpretado como o nome de um pacote a ser purged, o que provavelmente não é o que você pretende.

Resposta Completa

Para entender o que esses comandos fazem e como são diferentes, ajuda (e provavelmente é essencial) entender dois conceitos:

  1. a distinção entre pacotes instalados manualmente e instalados automaticamente
  2. a distinção entre os arquivos de pacote de um pacote e seus arquivos de configuração

Instalado manualmente vs. instalado automaticamente

Um pacote instalado é instalado manual ou automaticamente .

Quando você especifica um pacote para instalação e ele é instalado, ele é instalado manualmente .

Mas outros pacotes também podem ser instalados. A maioria dos pacotes possui dependências - outros pacotes que devem ser instalados para que o pacote funcione conforme o planejado. Quando você instala um pacote, suas dependências (ou seja, os outros pacotes dos quais depende) são instaladas, exceto as que foram instaladas anteriormente.

Quando um pacote não é especificado por você para ser instalado, mas é instalado como uma dependência de um pacote que você especificou para instalar, ele é instalado automaticamente .

Observe que quando você tem dois pacotes instalados e um deles é uma dependência de outro, isso não significa que a dependência é instalada automaticamente. Também é possível que a dependência tenha sido instalada manualmente (ou seja, especificada por você, por exemplo, instalada antes ou ao mesmo tempo que o pacote que depende dela).

Finalmente:

  • Se você tentar instalar manualmente um pacote que já está instalado, ele permanecerá instalado. Mas se ele foi instalado automaticamente, uma alteração é feita - tentar instalar manualmente o marcará como instalado manualmente.
  • Você pode marcar qualquer pacote como instalado manual ou automaticamente (com o apt-markcomando), independentemente de como ou sob que circunstâncias eles foram realmente instalados.
  • Os pacotes que vêm pré-instalados com o sistema Ubuntu não são todos instalados automaticamente; alguns deles são marcados como instalados automaticamente e outros são marcados como instalados manualmente. Isso serve para satisfazer a lógica por trás da distinção entre pacotes instalados manualmente e automaticamente - a idéia de que alguns pacotes são necessários apenas a serviço de outros.

Normalmente, para cada pacote instalado automaticamente, você terá pelo menos um pacote instalado manualmente que depende dele (e que causou a instalação automática). No entanto, se você remover todos os pacotes instalados manualmente que dependem de um pacote instalado automaticamente, o pacote instalado automaticamente não será mais necessário, mas ainda será instalado.

apt-get autoremove remove os pacotes instalados automaticamente que não possuem mais pacotes instalados manualmente, dependendo deles.

Arquivos de pacote e arquivos de configuração

Um pacote fornece arquivos que devem ser e permanecem os mesmos em todos os sistemas em que a versão desse pacote está instalada. Esses arquivos fornecem executáveis, recursos, documentação e outros "ativos" para programas instalados. Geralmente chamamos esses "arquivos" que um pacote fornece.

Mas um pacote também fornece outros arquivos, que devem (possivelmente) ser alterados. Esses são chamados de arquivos de configuração global (ou em todo o sistema). Eles quase sempre são instalados no /etcdiretório e podem ser modificados automática e manualmente para alterar o comportamento dos programas instalados. Por exemplo, sudopossui um arquivo de configuração /etc/sudoerse um diretório para mais arquivos de configuração /etc/sudoers.d. Esse arquivo e quaisquer arquivos adicionados a esse diretório especificam quem tem permissão para usar sudode que maneiras.

Normalmente, é desejável que desinstalar um pacote e instalá-lo novamente não mude a maneira como ele se comporta (a menos que os arquivos do pacote estejam corrompidos e é por isso que você o reinstalou, é claro). Portanto, normalmente quando um pacote é desinstalado, seus arquivos são excluídos, mas seus arquivos de configuração em todo o sistema são deixados intocados.

Quando você desinstala um pacote sem especificar que seus arquivos de configuração em todo o sistema também devem ser excluídos, isso é chamado "removendo" o pacote.

Se você também deseja excluir os arquivos de configuração em todo o sistema de um pacote ao desinstalá-lo, isso é chamado de "limpeza" do pacote.

apt-get removeirá remover um pacote; ou seja, ele desinstalará o pacote, mas deixará seus arquivos de configuração em todo o sistema.

apt-get purgeirá limpar um pacote; ou seja, ele desinstalará o pacote e também excluirá os arquivos de configuração em todo o sistema.

Outra maneira de limpar os pacotes é usar o --purgesinalizador. Isso não diz apt-geto que fazer; em vez disso, modifica quais termos (ou "comandos") removedizem para ele fazer. O --purgesinalizador faz com que qualquer desinstalação de pacote seja acompanhada pela exclusão de arquivos de configuração em todo o sistema dos pacotes sendo desinstalados. Em outras palavras, a --purgebandeira transforma remoções em expurgos.

Por que temos a --purgebandeira quando temos o purgecomando? Afinal, não é sudo apt-get --purge remove packagenameequivalente a sudo apt-get purge packagename. Eles são equivalentes. Onde --purgeé útil é quando você deseja modificar o comportamento de comandos diferentes de remove.

Por exemplo, suponha que você queira desinstalar os pacotes instalados automaticamente que não são mais necessários (porque não existem mais pacotes instalados manualmente dependendo deles), mas você não deseja apenas remover esses pacotes instalados automaticamente, mas também excluir seus arquivos de configuração em todo o sistema. Então você pode executar:

sudo apt-get --purge autoremove

Vamos considerar mais um uso de --purge. Há um sinalizador chamado --reinstall, que transforma instalações em reinstalações. Isso significa que, normalmente, quando você tenta instalar um pacote que já está instalado, nada acontece ou (se o pacote for marcado como instalado automaticamente), o pacote será marcado como instalado manualmente. Mas com o --reinstallsinalizador, a instalação de um pacote que já está instalado faz com que seja removido e, em seguida, instalado novamente :

sudo apt-get --reinstall install packagename

Mas suponha que você queira excluir os arquivos de configuração em todo o sistema do pacote que está reinstalando. Isso é algo comum; quando um pacote não está funcionando e você não sabe o porquê, tente reinstalá-lo e também excluir seus arquivos de configuração para que sua configuração seja redefinida para o padrão. Para conseguir isso, você pode executar:

sudo apt-get --purge --reinstall install packagename

A --reinstallinstalação voltas em reinstalação (isto é, remoção seguido de instalação), e a --purgetransforma a parte de remoção de reinstalação em purga.

O comportamento de seus exemplos

Agora deve ficar claro exatamente o que cada um dos seus apt-getcomandos de exemplo faz:

  • sudo apt-get autoremove --purge packagenames

    Isso elimina pacotes instalados automaticamente que não possuem mais pacotes instalados manualmente que dependem deles. Ou seja, desinstala esses pacotes (o que implica a exclusão dos arquivos dos pacotes) e também os arquivos de configuração em todo o sistema.

    Aqui, packagenamesnão faz nada. Em particular, se você pretendia apenas remover pacotes cujos nomes estão listados lá, isso não se comportará como você pretende.

  • sudo apt-get remove --purge packagenames

    Isso limpa packagenames; supondo que packagenamesseja uma lista de nomes de pacotes separados por espaços em branco, ele limpará todos eles. Ou seja, ele os desinstalará (o que implica a exclusão de seus arquivos de pacote) e também os arquivos de configuração em todo o sistema.

    Se algum dos pacotes listados packagenamesnão estiver instalado, sua presença na lista não terá efeito (exceto que você será informado de que não foi instalado). Se você listar nomes de pacotes que não são o nome de nenhum pacote real, o comando falhará com um erro.unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Se você removesse uma das ocorrências purgedesse comando, seria equivalente à anterior. Tal como está, ele tenta limpar um pacote chamado purgee também limpar os pacotes listados em packagenames. Como purgenão é o nome de nenhum pacote, ele falhará com uma mensagem de erro.

  • sudo apt-get remove packagenames

    Isso remove os pacotes listados em packagenames, o que implica a exclusão de seus arquivos de pacote. Isso não exclui seus arquivos de configuração em todo o sistema (porque é apenas uma remoção, não uma limpeza).

  • sudo apt-get autoremove

    Isso desinstala pacotes instalados automaticamente que não possuem mais pacotes instalados manualmente que dependem deles. Isso implica excluir os arquivos de pacote, mas não os arquivos de configuração em todo o sistema (ou seja, é uma remoção, mas não uma limpeza).

Para mais informações sobre como usar apt-get, recomendo a página do manual . Para informações mais gerais, consulte este guia .

Eliah Kagan
fonte