- No Linux, as dependências são pacotes ou bibliotecas que outros programas precisam para funcionar e podem ser listadas usando ferramentas como apt-cache, apt-rdepends, rpm, yum, pactree, zypper e ldd, dependendo da distribuição.
- Nos sistemas Debian/Ubuntu, os comandos apt-cache depends, apt-rdepends, dpkg-deb e apt-get build-dep são usados principalmente para inspecionar as dependências de pacotes em repositórios e arquivos .deb independentes.
- No mundo do RPM e do Arch Linux, comandos como rpm -qR, yum deplist, yum provides e pactree permitem visualizar tanto as dependências diretas quanto as árvores de dependências completas e as dependências reversas.
- Quando pacotes quebrados ou dependências não satisfeitas aparecem, eles podem ser reparados com dpkg --configure -a, apt-get -f install, limpeza de cache, Synaptic ou, como último recurso, editando o arquivo /var/lib/dpkg/status.

Se você usa GNU/Linux há algum tempo, provavelmente já se perguntou por que, ao instalar um programa, o gerenciador de pacotes começa a baixar um monte de coisas "extras". Bibliotecas e pacotes adicionais são as dependências mais conhecidas.E compreendê-los faz toda a diferença entre gerenciar seu sistema com tranquilidade ou entrar às cegas, rezando para não quebrar nada.
Além disso, é muito comum ver tutoriais ou vídeos onde alguém instala um aplicativo e, como que por mágica, adiciona mais três ou quatro pacotes sem explicaçãoIsso gera desconfiança: será que são mesmo necessários? O sistema não deveria lidar com isso sozinho? Neste artigo, vamos abordar exatamente esse problema: você verá Como listar as dependências de um pacote no Linux (DEB, RPM, Pacman, Zypper…) e também como verificar quais pacotes dependem de outros, como inspecionar binários e o que fazer quando as dependências são quebradas.
O que é uma dependência e por que ela é tão importante no Linux?
Em termos simples, uma dependência é Um pacote (programa ou biblioteca) que outro programa precisa para funcionar corretamente.Ao instalar o LibreOffice, por exemplo, você não baixa apenas um pacote: o "meta-pacote" principal inclui dezenas de bibliotecas gráficas, fontes, ferramentas de integração de sistema, etc.
Quando um pacote indica que precisa de outros, o gerenciador de pacotes cuida disso automaticamente. resolver essa cadeia de dependências e pré-dependênciasOu seja, ele baixa e instala tudo o que é necessário, incluindo as dependências das dependências, e assim por diante, até que a árvore esteja fechada.
O problema surge quando alguma dessas condições não é atendida: se uma biblioteca necessária não existe mais nos repositórios, se você instalar algo de uma fonte externa mal empacotada ou se Uma instalação ou atualização é interrompida no meio do processo.É aí que aparecem as temidas mensagens de "dependências não satisfeitas" e "pacotes quebrados".
Uma embalagem é considerada rompida quando O estado da sua instalação foi deixado incompleto ou contraditório. com o restante do sistema (por exemplo, descompactado, mas não configurado, ou com dependências não satisfeitas). A partir desse ponto, você poderá encontrar erros ao instalar, atualizar ou remover outros pacotes, porque todo o sistema de dependências se torna instável.
Por isso é fundamental saber Como inspecionar o que depende do quê e como reparar quando algo der errado.Analisaremos primeiro os casos mais comuns em sistemas baseados em Debian/Ubuntu (DEB), depois no mundo RPM (Fedora, CentOS, RHEL, openSUSE) e, por fim, em outras famílias como o Arch Linux.
Listar dependências em sistemas DEB (Debian, Ubuntu e derivados)
No ecossistema Debian e Ubuntu, contar dependências é muito simples porque o conjunto de ferramentas é bastante unificado: apt, apt-cache, dpkg e utilitários complementares Como o apt-rdepends cobre praticamente todos os casos que você precisa no dia a dia.
Listar as dependências de um pacote disponíveis nos repositórios com apt-cache
Se o pacote estiver nos repositórios configurados, você pode ver o que ele precisa com:
apt-cache depende do nome do pacote
Por exemplo, para ver de que o Vim depende:
apt-cache depende do vim
A saída exibirá linhas como "Depende de:", "Pré-depende de:", "Sugere de:", etc., que você pode identificar rapidamente. dependências obrigatórias e recomendadasÉ uma maneira rápida de entender o que será transferido ao instalar um determinado programa.
Se você deseja um nível de detalhamento maior, pode combiná-lo com outros subcomandos do apt-cache, como: showpkgque também mostra as dependências reversas e as versões:
apt-cache showpkg vsftpd
Com esse comando, além dos pacotes dos quais o vsftpd depende, você verá quais outros pacotes Eles dependem do vsftpdEssa informação é muito útil antes de desinstalar um serviço em um servidor de produção.
Veja a árvore de dependências completa com apt-rdepends
Quando você precisa não apenas de uma lista simples, mas a cadeia recursiva de dependências (dependências de dependências, e assim por diante em detalhes), o utilitário principal é o apt-rdepends:
apt-rdepends nome_do_pacote
Essa ferramenta geralmente não vem instalada por padrão, então você precisará adicioná-la primeiro com o seguinte comando:
sudo apt-get install apt-rdepends
Uma vez instalado, o apt-rdepends permite uma navegação bastante poderosa. Algumas opções úteis incluem:
- -b (-construir): mostra as dependências diretas necessárias para compilar o pacote.
- -p (-print-state): inclui o status e a versão do pacote na saída.
- -f (-follow=DEPENDS): segue as dependências e pré-dependências, gerando uma árvore mais completa.
Se em algum momento você se perder na sintaxe, sempre poderá consultar o manual da ferramenta com:
homem apt-rdepende
Instale automaticamente as dependências de compilação com o comando `apt-get build-dep`.
Em ambientes de desenvolvimento, é muito comum precisar de todas as dependências necessárias para compilar um pacote a partir de seu código-fonteÉ para isso que serve o seguinte comando:
sudo apt-get build-dep nome_do_pacote
Este subcomando pesquisa nos repositórios informações sobre o pacote de origem e Ele instala todos os pacotes dos quais seu processo de compilação depende.Mas atenção: ele não instala o programa em si, apenas as dependências de compilação.
Por exemplo, ao executar:
sudo apt-get build-dep gmc
O sistema exibirá um resumo como "Os seguintes NOVOS pacotes serão instalados…", listando todas as bibliotecas de desenvolvimento que serão adicionadas (-dev, ferramentas de compilação, etc.). Em seguida, você poderá importar seu código com:
apt-get source nome_do_pacote
e compilar com as ferramentas usuais. É uma maneira bastante simples de preparar o ambiente sem ter que procurar dependências manualmente.
Listar as dependências dos pacotes DEB (arquivos .deb baixados).
Quando o que você tem é um Arquivo .deb baixado manualmente (por exemplo, de um site de terceiros) e você quiser inspecionar suas dependências antes de instalá-lo, você pode usar a ferramenta de baixo nível dpkg-deb:
dpkg-deb -I mypackage.deb
Este comando exibirá o cabeçalho do pacote, incluindo o campo "Depends:", onde você poderá ver claramente Que outros pacotes o sistema deve ter instalados? para que o arquivo .deb funcione corretamente. Também é útil se você trabalha com pacotes alternativos como o AppImagePorque isso ajuda a comparar quais dependências o sistema irá gerenciar e quais o próprio pacote fornece.
É especialmente útil em ambientes onde Você não quer quebrar o gerenciador de pacotes ao misturar pacotes externos sem verificá-los. O que eles incluem ou se são compatíveis com a sua versão de distribuição.
Outros comandos úteis no DEB: apt, dpkg, dpkg-query, which, whereis e locate.
Além de listar as dependências, é útil dominar alguns comandos de consulta para descobrir... se um pacote estiver instalado e onde ele estiver localizadoIsso ajuda você a verificar se as dependências estão realmente sendo satisfeitas em seu sistema.
- apt -qq listar nome_do_pacoteMostra se um pacote está instalado, juntamente com a versão e a arquitetura.
- apt-cache política nome_do_pacote: Exibe a versão instalada, a versão candidata e o repositório de origem.
- dpkg -l | grep -i nome_do_pacote o dpkg-query –list | grep -i nome_do_pacoteEles listam o pacote, seu status e descrição do banco de dados dpkg.
- qual binárioSe o executável estiver no PATH do usuário, ele retorna o seu caminho (por exemplo, /bin/nano).
- onde é binário: mostra não apenas o executável, mas também documentação e arquivos relacionados (páginas de manual, informações, etc.).
- localizar padrão: busca arquivos no banco de dados de localização, muito rapidamente, embora exija que o Locale esteja instalado e atualizado.
Ao combinar essas ferramentas com apt-cache e apt-rdepends, você pode construir um mapa bastante abrangente de O que está instalado, quem o utiliza e o que está faltando. para que tudo se encaixe.
Listar dependências e dependências reversas no mundo RPM (Fedora, RHEL, CentOS, openSUSE)
As distribuições baseadas em RPM oferecem diversas ferramentas poderosas. A base é rpm, que trabalha diretamente com o banco de dados de pacotes e, acima dele, dependem de gerenciadores de alto nível como yum (em sistemas clássicos) ou dnf (em versões mais modernas do Fedora e derivados).
Verificar dependências de um pacote RPM instalado ou do repositório
Para consultar o rpm sobre as dependências de um pacote instalado, o comando típico é:
rpm -qR nome_do_pacote
a opção -qR (-requer) Indica ao rpm para listar todos os pacotes e funcionalidades dos quais este pacote dependeEm um nível mais baixo, é equivalente ao que o apt-cache depends faz no mundo DEB.
Se o que você tem é um arquivo .rpm solto (não instalado) e você deseja examinar suas dependências antes de instalá-lo no sistema, o comando muda ligeiramente:
rpm -qpR .rpm arquivo
Aqui o -p Ele dá o comando RPM para funcionar. sobre um arquivo de pacote no disco em vez de baseado em pacotes instalados.
Além de -R, o rpm aceita combinações muito úteis para obter mais contexto: por exemplo, -ql Liste os arquivos contidos no pacote. -qi Oferece informações detalhadas (resumo, versão, grupo, etc.) e -V Verificar a integridade do sistema em relação ao banco de dados (proprietários, permissões, hashes...).
Liste dependências, dependências reversas e muito mais com Yum/DNF
Na camada rpm, gerenciadores como yum ou dnf simplificam bastante a consulta e a resolução de dependências, bem como o gerenciamento de repositórios, atualizações e todo o ciclo de vida do software.
No caso do yum, você tem vários subcomandos muito úteis diretamente relacionados a dependências:
- yum deplit nome_do_pacote: mostra as dependências de um pacote específico, se ele está instalado ou disponível nos repositórios.
- yum resolveu dependência ep: retorna os pacotes que satisfazem uma determinada dependência (nome da biblioteca, capacidade virtual, etc.).
- yum fornece caminho_ou_arquivo: te diz A qual pacote pertence um arquivo específico?Muito útil quando você sabe qual binário ou biblioteca está faltando, mas não em qual pacote ele está contido.
Além disso, com yum info nome_do_pacote Você pode ver informações detalhadas sobre o pacote (incluindo um resumo e o repositório de código-fonte) e com yum list nome_do_pacote Você compara a versão instalada com a versão disponível para atualização.
Em cenários mais avançados, o yum também integra um guia rápido para ações como instalar, atualizar, excluir, listar grupos de pacotes, visualizar repositórios ativos, gerenciar o histórico de transações e muito mais, permitindo que você Não apenas para consultar as dependências, mas também para entender o que foi instalado, quando e de onde..
Semelhanças entre os comandos RPM e Yum
Se você estiver alternando entre rpm e yum, é útil ter em mente algumas equivalências básicas para não se perder:
- instalar pacote: rpm -ivh o rpm -Uvh ≈ yum instalar (este último resolve e instala as dependências).
- Remover pacote: rpm -e ≈ yum remover.
- Confira as informações do pacote: rpm -qi ≈ yum informação.
- Pesquisar um pacote pelo nome: string de pesquisa yum ≈ rpm -qa | cadeia grep (Este último indica se está instalado).
A moral da história é que, para perguntas sobre dependências, O rpm fornece os detalhes "brutos" e o yum facilita a resolução de problemas., downloads e operações em lote em pacotes de repositórios remotos.
Listar dependências no Arch Linux e derivados (Pacman / Pactree)
No Arch Linux e em distribuições baseadas em Pacman (Manjaro, EndeavourOS, etc.), você tem uma ferramenta muito poderosa e prática para visualizar relacionamentos: pactreeAo contrário das saídas planas de outros sistemas, o Pactree representa uma árvore de dependência hierárquica, muito mais legível à primeira vista.
Por exemplo, para inspecionar a árvore de dependências do Vim, você pode executar:
pactree vim
O resultado é exibido em um estilo semelhante ao comando `tree`, ramificando cada dependência e suas subdependências:
vitalidade
├─vim-runtime
├─gpm
│ └─bash
│ ├─readline
│ │ ├─glibc
│ │ ├─linux-api-headers
│ │ ├─tzdata
│ │ └─sistema de arquivos
└─acl
└─attr
└─glibc
Como você pode ver, é muito fácil de acompanhar visualmente. quais pacotes estão pendurados em cada nívelSe você quiser inverter a perspectiva e ver quais pacotes dependem de um pacote específico, também pode usar outras ferramentas do pacman, mas para a visão "de cima para baixo", o pactree é difícil de superar.
Se você estiver interessado em tirar o máximo proveito disso, consulte as páginas do manual com:
homem pactree
Listar dependências no SUSE e openSUSE (Zypper)
Em distribuições como openSUSE e SLE, o gerenciador de pacotes de referência é ZíperAlém de instalar, atualizar e remover softwares, ele permite verificar dependências de forma bastante prática.
Para ver o que um pacote específico, por exemplo o vim, requer, você pode usar:
zypper info –requer vim
Este comando exibirá as informações usuais do pacote (nome, versão, repositório, etc.), juntamente com uma lista de requisitos. todas as dependências que devem estar presentes no sistemaÉ o equivalente ao "Depends" no apt-cache ou ao "Requires" no rpm -qR.
Em conjunto com outras opções do zypper (como busca por padrões, listagem de repositórios, etc.), ele permite a manutenção. um controle bastante preciso de quais pacotes contêm quais bibliotecas dentro do ambiente SUSE.
Como ver quais pacotes dependem de outros (dependências reversas)
Tão importante quanto saber do que depende um pacote é saber quais outros pacotes dependem deleEssa verificação de dependências reversas é fundamental antes de desinstalar algo aparentemente "inofensivo" que, na realidade, pode estar sendo usado em metade do sistema.
Em sistemas Debian/Ubuntu, você pode usar:
- apt-cache rdepends nome_do_pacoteExibe a lista de pacotes que dependem do pacote especificado.
- apt-cache showpkg nome_do_pacoteAlém de informações sobre o pacote e suas dependências, inclui uma seção "Dependências Inversas" com os pacotes que o requerem.
No mundo RPM, o Yum também oferece maneiras de visualizá-lo:
- yum deplit nome_do_pacoteCom a saída, você pode ver indiretamente quem contribui para cada dependência.
- yum fornece file_or_capacityIsso indica quais pacotes fornecem uma biblioteca ou arquivo específico, permitindo inferir quais devem ser utilizados. O que seria afetado se você o removesse?.
Combinando essas consultas, fica fácil responder a perguntas como: "Se eu remover esta biblioteca, quais aplicativos deixarão de funcionar?". E isso, em um servidor ou em um ambiente de desktop crítico, é ouro puro.
Inspecione as dependências de arquivos binários com o ldd.
Além dos gerenciadores de pacotes, às vezes você pode estar interessado em descobrir Quais bibliotecas dinâmicas um binário específico utiliza?Por exemplo, para depurar um erro de carregamento ou um problema com as versões da libc.
A ferramenta padrão para isso em sistemas do tipo Unix é lddSeu uso básico é muito simples:
ldd /caminho/para/arquivo_binário
A saída mostrará cada biblioteca compartilhada que o binário precisa, juntamente com o caminho de onde ela está sendo resolvida e a direção de carregamento. Se alguma aparecer como "não encontrada", você saberá que... Uma dependência está faltando no sistema ou não está em um caminho de pesquisa válido..
Se você deseja visualizar as informações com mais detalhes e acompanhar as dependências internas das próprias bibliotecas, pode usar:
ldd -v /caminho/para/arquivo_binário
A opção -v adiciona informações extras e pode ajudar a verificar versões, símbolos exportados e outros detalhes importantes que, em ambientes de produção, muitas vezes fazem a diferença entre um serviço iniciar corretamente ou falhar silenciosamente.
Reparando pacotes corrompidos e dependências não satisfeitas em sistemas Debian/Ubuntu
Por mais cuidadoso que você seja, mais cedo ou mais tarde encontrará um sistema que reclama de algo. pacotes corrompidos, dependências não atendidas ou arquivos de bloqueioAntes de entrar em pânico, é importante entender o conceito e seguir uma ordem de recuperação razoável.
Um pacote corrompido geralmente aparece quando uma instalação ou atualização é interrompida, quando pacotes externos mal construídos são instalados ou quando Repositórios incompatíveis são misturados.O sintoma típico: você não consegue instalar ou atualizar nada porque o apt se recusa a continuar até que o conflito seja resolvido.
Primeira tentativa: dpkg e apt para reconfigurar e reparar
O primeiro passo lógico é pedir ao dpkg para terminar de configurar o que ficou incompleto:
sudo dpkg --configure -a
Este comando força a configuração de todos os pacotes descompactados, mas não configurados. Se houver algum script de pós-instalação pendente, ele será executado agora. Muitas vezes, isso por si só é suficiente. "Estados incoerentes são resolvidos".
Se ainda assim não funcionar, é aconselhável limpar o cache local do pacote .deb para evitar arquivos corrompidos remanescentes. Espaço livre em disco:
sudo apt-get clean && sudo apt-get autoclean
Em seguida, regeneramos as informações do repositório e deixamos o apt tentar reconstruir as dependências usando a opção fix:
sudo apt-get update --fix-missing
sudo apt-get install -f
A combinação de –Fix-ausente y -f (-fix-broken) Isso instrui o sistema a tentar resolver pacotes inconsistentes e dependências não atendidas, instalando ou corrigindo o que for necessário. É um dos recursos mais eficazes antes de recorrer a medidas mais agressivas.
Se você ainda vir uma mensagem de bloqueio como "Não foi possível bloquear", pode haver algum problema. arquivos de bloqueio obsoletosNesse caso, e somente se você tiver certeza de que não há nenhum processo apt ou dpkg em execução, você poderá removê-los:
sudo rm /var/lib/apt/lists/lock && sudo rm /var/cache/apt/archives/lock && sudo rm /var/lib/dpkg/lock
Após isso, repita a sequência de comandos anterior (configure, clean, update, install -f) para verificar se o sistema retorna a um estado saudável.
Remova manualmente o pacote corrompido com o dpkg.
Se o problema persistir, o próximo passo é identificar exatamente o que o está causando. Qual pacote está danificado?. Para isso você pode usar:
sudo dpkg -l | grep ^..r
Pacotes que aparecem com um "r" em seu status indicam instalações incompletas ou danificadasDepois de identificar o nome, você pode tentar removê-lo à força:
sudo dpkg --remove --force-remove-reinstreq nome_do_pacote
Este comando força o dpkg a remover o pacote conflitante, mesmo que seu estado seja inconsistente. Depois disso, ele limpa o cache e atualiza novamente.
sudo apt-get clean && sudo apt-get autoclean
sudo apt-get update && sudo apt-get dist-upgrade
Se o sistema atualizar sem problemas, é muito provável que Você restaurou o banco de dados de pacotes a um estado estável. e você pode continuar trabalhando normalmente.
Use o Synaptic para corrigir pacotes corrompidos graficamente.
Se você prefere uma abordagem mais visual ou está ajudando alguém com menos familiaridade com o terminal, o gerenciador de pacotes pode ser uma opção. Synaptic Continua sendo uma ferramenta muito poderosa.
Primeiro, instale-o (caso ainda não o tenha):
sudo apt-get install synaptic
Em seguida, abra-o e:
- Ative o Filtros e selecione o filtro de Quebrado.
- Localize a embalagem que parece danificada.
- Clique com o botão direito e escolha «Verifique se deseja desinstalar completamente».
- Aplique as alterações para que o Synaptic tente Remova o pacote problemático e reconstrua as dependências..
Além disso, no menu Editar → Reparar pacotes danificadosO Synaptic inclui uma opção automática que tenta resolver inconsistências em lotes, o que pode poupar-lhe vários passos manuais.
Último recurso: editar o arquivo de status do dpkg
Se tudo mais falhar, resta uma opção avançada e delicada: Edite diretamente o arquivo /var/lib/dpkg/status, que é onde o dpkg armazena o estado de cada pacote instalado.
A ideia é abri-lo com um editor de texto em modo superusuário:
sudo nano /var/lib/dpkg/status
Uma vez lá dentro, procure o bloco que descreve o pacote corrompido (ele começa com "Package: nome_do_pacote" e inclui vários campos como "Status:", "Version:", etc.) e remova todo esse blocoÉ como apagar sua existência do banco de dados do dpkg.
Salve as alterações, feche o editor e execute o comando:
sudo apt-get clean && sudo apt-get update && sudo apt-get dist-upgrade
Se não houver mais inconsistências, o sistema deverá estar em estado funcional. Esta técnica deve ser usada com cautela e, se possível, acompanhada de um backup do arquivo de estado, caso seja necessário reverter a alteração.
Com esse arsenal de comandos — apt-cache, apt-rdepends, rpm, yum, pactree, zypper, ldd e as ferramentas dpkg e apt repair — você agora tem uma visão geral bastante abrangente de Como listar as dependências de um pacote no Linux, saber o que depende do quê e como agir quando algo para de funcionar.Dominar essas ferramentas não só lhe dá tranquilidade ao instalar softwares, como também o torna capaz de interpretar o que o sistema está lhe informando a cada erro e tomar decisões informadas sem agir às cegas.
Escritor apaixonado pelo mundo dos bytes e da tecnologia em geral. Adoro compartilhar meu conhecimento por meio da escrita, e é isso que farei neste blog, mostrar a vocês tudo o que há de mais interessante sobre gadgets, software, hardware, tendências tecnológicas e muito mais. Meu objetivo é ajudá-lo a navegar no mundo digital de uma forma simples e divertida.
