Alguns pacotes têm um Provides:
cabeçalho. Por exemplo, o pacote postfix
no Debian Wheezy possui Provides: mail-transport-agent
.
O pacote mail-transport-agent
que não existe fisicamente é considerado como um pacote "virtual".
Como posso saber, em um sistema baseado no Debian, se um determinado pacote virtual está "instalado" (ou "fornecido")? Posso listar todos os pacotes virtuais "fornecidos"?
Dica : para listar todos os pacotes virtuais existentes, instalados ou não, faça:aptitude search "~v"
Respostas:
Para listar pacotes fornecendo
mail-transport-agent
:Faça isso
aptitude search '~Pmail-transport-agent ~i'
para listar apenas os pacotes instalados (se houver).Para listar todos os pacotes virtuais fornecidos pelos pacotes atualmente instalados:
Veja o manual do aptitude para uma explicação dos padrões de busca.
fonte
aptitude
. Eu gosto da explicação de @ umläute embora.aptitude search '~Pmysql-server ~i'
que dámariadb-server-10.0
emariadb-server-core-10.0
, mas quando eu façoaptitude search '~Rprovides:~i ~v'
, eu não vejomysql-server
na lista ... No entanto, eu vejovirtual-mysql-client
,virtual-mysql-client-core
,virtual-mysql-server
evirtual-mysql-client-core
na lista.o problema aqui é que há uma diferença sutil entre pacotes virtuais e pacotes fornecidos por outros pacotes.
a diferença é que um pacote também pode fornecer um pacote real , não apenas um pacote virtual .
de qualquer maneira, o seguinte pesquisará todos os pacotes que fornecem um pacote e imprimirá o nome do pacote e os pacotes que ele fornece:
para descobrir se algum pacote está instalado no seu sistema que fornece um determinado (por exemplo, mail-transport-agent), use
fonte
grep-available
egrep-status
estão disponíveis após a instalação dodctrl-tools
pacote.Você pode detectar a presença de um determinado pacote virtual, usando
apt-cache showpkg <virtual>
para exibir uma lista de pacotes de candidatos, e, em seguida,dpkg -l <canddate> <candidate> ...
para exibir o status dos candidatos instalação.Por exemplo:
Aqui está uma impressão completa:
Acredito
dpkg
eapt-cache
sou uma ferramenta de nível inferior aaptitude
,grep-available
egrep-status
. O uso de ferramentas de nível inferior pode ou não ser um benefício, dependendo de seus requisitos específicos.fonte
Você pode obter todos os pacotes virtuais na LISTA AUTORITATIVA DE NOMES DE PACOTES VIRTUAIS . Para determinar se um pacote virtual está instalado, eu uso
dpkg -l
e o fato de ter um código de saída 0 se o pacote estiver instalado e um código de saída 1 se não estiver instalado.fonte
dpkg -l mail-transport-agent
pode retornar 0, mesmo se não houver um pacote, desde que esteja instalado atualmente. Eu acho que é baseado na presença,/var/dpkg/lib/available
mas não tenho certeza. Eu verifiquei quedpkg -l foo
retorna 1 para um pacote que eu nunca instalei, mas 0 para um pacote que acabei de limpar.