As regras para autoremoval são realmente muito simples.
A resposta específica à sua pergunta " abordagem mais segura para remover aplicativos / bibliotecas indesejados no Ubuntu que não envolve a verificação de todos os pacotes e suas dependências, um por um " é: Deixe o Apt fazer seu trabalho . Você pode fazer isso quando entender melhor como o apt faz suas decisões. Para a maioria dos novos usuários, essa é uma parte normal da curva de aprendizado. Então vamos discutir a lógica do Apt ....
Apt não tem idéia se você está usando um pacote ou não. Não é psíquico. Ele só conhece as dependências de cada pacote e o que você diz. Para que qualquer pacote seja elegível para autoremoval (órfão), ele deve atender a dois critérios :
- Deve ser marcado pelo apt como
auto
(em vez demanual
) - Não
manual
package depende - direta ou indiretamente - do pacote.
Existem três comportamentos complicadores que confundem os usuários.
-
O Apt lembra quais pacotes você instala explicitamente e marca esses pacotes
manual
. Todas as outras dependências estão marcadas comauto
. -
O instalador do Ubuntu marca TODOS os pacotes iniciais em uma nova instalação
manual
. Isto é para evitar que novas pessoas removam acidentalmente placas enormes do seu sistema. -
Os pacotes de kernel funcionam de maneira ligeiramente diferente devido a um pouco de script-fu do Ubuntu.
É isso - duas regras e três comportamentos especiais. Todo o resto é simples lógica antiga.
Vamos dar uma olhada em alguns exemplos comuns para ver como essas regras e comportamentos se aplicam.
Exemplo # 1 : sudo apt install foo libfoo
É bastante óbvio que qualquer coisa chamada libfoo
é provavelmente uma dependência de foo
. E o apt sabe disso também. No entanto, explicitamente informamos ao apt para instalar o libfoo
- ele será marcado como manual
e não será qualificado para autoremoval. Se tivéssemos dito apenas sudo apt install foo
e deixado apt calcular as dependências, então libfoo
seria (corretamente) marcado com auto
e se tornaria elegível para autoremoval quando foo
fosse removido.
Exemplo # 2 : sudo apt remove ubuntu-desktop
Se você construir um sistema Ubuntu a partir de uma imagem mínima , ou se você instalar pilhas LAMP ou novo Desktop Ambientes após a instalação inicial, então Metapackages como ubuntu-desktop
são ótimos - a pilha inteira em um comando. Mas olhe para ele do ponto de vista do apt: Um único pacote manual
e dezenas (centenas) de auto
dependencies. No momento em que você desinstala o metapacote devido a tentar um aplicativo diferente ... bem, você tem a idéia.
A saída é simplesmente marcar seus principais aplicativos de nível superior como manual
:
sudo apt install foo // Even if foo is already installed
sudo apt-mark manual foo // Does the same thing
sudo apt-mark auto libfoo // Makes libfoo eligible for autoremoval someday when foo gets removed
sudo apt remove foo // Apt will remove foo *regardless* of apt-mark
Lembre-se de que o apt-marking simplesmente informa quais pacotes são seus aplicativos de nível superior não elegíveis para autoremoval - ele NÃO os protege de insensatez humana.
A maneira mais fácil de navegar em uma lista de autoremoval para a maioria das pessoas é simplesmente procurar pelos principais pacotes de aplicativos - seu cliente de e-mail, seu navegador, seu IDE, seu jogo favorito. Procure foo
, ignore libfoo
. Quando alguém passar e for removido, basta reinstalá-lo - lembre-se de que informar ao sistema para instalar um pacote marca manual
. No entanto, , seu caso de uso específico é mais complicado, pois você compila o software e usa -dev
packages. Não existe uma solução mágica para você (desculpe) - você deve ter tempo para aprender quais pacotes são importantes para você ... assim como o resto de nós fez.
Caveat : Tudo isso se aplica aos pacotes deb dos repositórios do Ubuntu. Se você adicionar muitos pacotes estranhos de algum outro lugar, então há mais tarefas de limpeza que você deve fazer. Lembre-se de que o apt não possui conhecimento nem controle sobre pip, snap, flatpack, software de aplicativos, binários ou scripts baixados ou código compilado.