apt ou apt-get

Para digitar manualmente no terminal, use apt; em scripts, use apt-get e apt-cache.

A página de manual apt(8) deixa claro: apt foi projetado para o usuário de terminal, e o comportamento pode mudar entre versões; mesmo evitando quebrar a compatibilidade, não há garantia dela se uma mudança for benéfica para o uso interativo. O apt reúne as funcionalidades do apt-get e do apt-cache; apenas altera os valores padrão de algumas opções. Os comandos antigos priorizam a compatibilidade retroativa, por isso devem ser usados em scripts.

Quando a saída de apt é ligada a um pipe, ele mesmo avisa:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Ao ver essa mensagem, verifique primeiro se você chamou apt dentro de um script.

Atualização e upgrade

sudo apt update
sudo apt upgrade

update apenas baixa os índices de pacotes de cada repositório; não instala nem remove nenhum software. upgrade é que realmente atualiza os pacotes instalados, e a página de manual impõe duas condições: para satisfazer dependências, ele pode instalar pacotes novos; mas pacotes já instalados nunca serão removidos por ele. Se a atualização de um pacote exigir a remoção de outro pacote instalado, esse pacote não é atualizado.

full-upgrade faz tudo o que upgrade faz e, além disso, remove pacotes instalados quando a atualização geral exigir. Portanto, a diferença entre os dois é uma só: full-upgrade pode remover pacotes, upgrade não.

Antes de atualizar, veja quais pacotes estão pendentes:

apt list --upgradable

Quando não há pacotes a atualizar, a saída é apenas Listing....

Simule antes de instalar

Com -s (simulate) você não altera o sistema e vê apenas o que o apt pretende fazer:

apt install -s htop

No fim da saída há uma linha de resumo, por exemplo Upgrading: 0, Installing: 1, Removing: 0, Not Upgrading: 0, precedida por linhas começadas em Inst e Remv que listam as ações concretas. Em operações que envolvem remoções ou upgrades em massa, simule antes e confira principalmente se o número em Removing é o que você esperava.

A página de manual também descreve algumas sintaxes:

  • O nome do pacote pode ser o nome exato, uma expressão regular ou um glob; um curinga escrito de qualquer jeito pode casar com muitos pacotes, e a simulação ajuda a perceber isso antes.
  • pacote=versão especifica a versão; pacote/codinome pega a versão de uma determinada distribuição.
  • Acrescentar + depois do nome do pacote significa instalar; - significa remover. Testei em um contêiner com apt install -s cron htop-: o resumo mostrou Removing: 1, ou seja, htop.

Consultas

apt show htop
apt policy htop
apt search palavra-chave
dpkg -S /usr/bin/htop

apt show traz campos como versão, prioridade, seção, origem, mantenedor e tamanho instalado; a página de manual lembra que dá para consultar essas informações antes de remover um pacote. apt policy mostra a versão instalada, a Candidate (versão candidata) e a prioridade da origem; se você suspeita que a versão instalada não é a certa, use-o para ver de qual repositório ela veio. apt search faz busca por expressão regular na lista de pacotes; para buscar o pacote a partir de um arquivo, a página de manual sugere o apt-file. dpkg -S responde "a qual pacote este arquivo pertence"; em teste, dpkg -S /usr/bin/htop produziu htop: /usr/bin/htop.

apt list tem três opções de uso frequente: --installed, --upgradeable (--upgradable também funciona) e --all-versions.

remove, purge e autoremove

remove apaga os arquivos de programa do pacote, mas mantém os arquivos de configuração que você alterou, de modo que uma reinstalação após uma remoção por engano recupera o estado original. purge elimina também esses resíduos, e pode ser executado igualmente em pacotes que já passaram por remove. A página de manual destaca: ele não toca nos dados e configurações do seu diretório home.

Verifiquei com cron em um contêiner:

sudo apt remove cron
dpkg -l cron

A coluna de estado fica rc (removido, arquivos de configuração presentes); executando em seguida sudo apt purge cron, o estado passa a un (não instalado, sem resíduos).

autoremove remove pacotes "instalados automaticamente para satisfazer dependências e que agora ninguém mais precisa". Pacotes que você instalou explicitamente não serão propostos para remoção, mas a página de manual recomenda dar uma olhada na lista, para não apagar por engano um software de costume. Se quiser manter um pacote instalado automaticamente, marque-o como instalação manual com apt-mark manual pacote. Simule antes de executar:

apt autoremove -s

Travar versões

sudo apt-mark hold htop
apt-mark showhold
sudo apt-mark unhold htop

São, respectivamente, travar, listar os pacotes travados e destravar; as saídas são, nessa ordem, htop set on hold., htop e Canceled hold on htop..

Histórico de transações e desfazer

O APT 3.x acrescentou um conjunto de comandos organizados por transação, que muitos tutoriais antigos não cobrem. Verifiquei os usos abaixo em um contêiner Ubuntu 26.04.1 LTS (apt 3.2.0); na sua máquina, confirme primeiro com apt --help se esses comandos existem.

apt history-list
apt history-info 88
sudo apt -y history-undo 88
sudo apt -y history-redo 88

history-list lista as transações do histórico; cada linha traz ID, linha de comando, horário, ação e número de alterações; a linha de comando é truncada, e para ver o conteúdo completo use history-info. No meu caso, o ID 88 era um apt-get install -y -qq htop, e history-info 88 mostrou Install htop:arm64 (3.4.1-5build2). Ao executar history-undo sobre ela, o apt removeu o htop e dpkg -l htop não encontrou o pacote; um history-redo em seguida reinstalou, com estado ii. history-undo, history-redo e history-rollback exigem um ID; sem ele, retornam Error: Incorrect usage, no ID was given.

O desfazer tem limites. Executei history-undo sobre uma transação de "reinstalação do bash": o apt listou que removeria o bash, avisou This should NOT be done unless you know exactly what you are doing! e por fim se recusou a executar:

Error: Essential packages were removed and -y was used without --allow-remove-essential.

Transações que envolvem pacotes essenciais do sistema não são desfeitas só porque -y foi usado. A opção citada na mensagem de erro desativa essa proteção, e não é recomendado acrescentá-la apenas para fazer o comando passar.

A descrição de history-rollback é "rollback transactions"; não executei de fato e não vou me estender. Independente da versão do apt, o /var/log/apt/history.log registra o horário, a linha de comando e as mudanças de versão de pacotes de cada operação; lê-lo pode exigir sudo.

Por que o pacote está instalado: why e why-not

A definição da página de manual para esses dois comandos: apt why pacote explica por que um pacote instalado foi instalado. Pacotes instalados automaticamente recebem uma explicação razoável; pacotes instalados manualmente não têm outra razão a dar; e, se o pacote não está instalado, não há como descobrir a razão. apt why-not pacote explica por que um pacote foi considerado não instalável, e nem sempre há resultado. Os dois comandos aceitam um único nome de pacote.

No meu contêiner mínimo a saída deles é simples: por exemplo, apt why htop resulta em htop:arm64 is selected for install, e para um pacote não instalado, is undecided. Em máquinas com dependências complexas a saída é mais informativa, e aí o why ajuda a julgar se um pacote pode passar por autoremove sem preocupação.

Repositórios

Os repositórios do Ubuntu 26.04.1 ficam em /etc/apt/sources.list.d/ubuntu.sources, no formato deb822, com muitos comentários começados em ## explicando os campos.

sudo apt edit-sources

Abre o arquivo de repositórios no editor de sua preferência e faz uma verificação básica. A página de manual o marca como work-in-progress, ou seja, ainda não está consolidado. A lista de comandos também traz apt modernize-sources, que converte arquivos .list do estilo antigo em arquivos .sources; não o executei, então consulte man apt antes de usar.

Alguns casos comuns

  • Depois do upgrade, alguns pacotes não mudaram: a atualização deles exige remover outros pacotes instalados, e upgrade não faz esse tipo de atualização. Veja primeiro apt list --upgradable e, confirmado isso, use full-upgrade.
  • Depois de remove, o pacote ainda aparece no dpkg -l: o estado rc indica resíduo de arquivos de configuração; purge limpa.
  • Quer desfazer uma instalação que acabou de fazer: se os comandos history existem, use history-undo; se não, faça remove manualmente dos pacotes registrados no history.log.