Como descubro de que pacote Debian veio um arquivo?
Como descubro de que pacote Debian veio um arquivo?
Respostas:
Existem vários utilitários no Debian que executam esta tarefa; verifique esta página para obter uma descrição. Vou mencionar dois deles, apt-file
e dlocate
.
apt-file
pesquisa seu cache interno, permitindo que você não instale todos os pacotes que deseja pesquisar. Abaixo você encontrará um guia mais detalhado.
dlocate
é uma alternativa rápida a dpkg -L
(o comando que lista o conteúdo do pacote) e, portanto, pesquisa apenas pacotes instalados. A pesquisa é realizada por dlocate -S file.name
.
Além disso, você pode pesquisar pacotes online usando o servidor packages.debian.org (a seção Pesquisar o conteúdo dos pacotes ).
apt-file
É uma boa ideia atualizar primeiro:
sudo apt-get update
Veja o que apt-file
é para:
apt-cache show apt-file
Instale-o:
sudo apt-get install apt-file
Leia os dados dos repositórios (isso funciona também sem, sudo
mas cria o cache do usuário; com sudo
o cache em todo o sistema):
sudo apt-file update
Realize a pesquisa. Neste exemplo, queremos saber em qual pacote xrandr
executável é:
apt-file search xrandr
Ele lista muitos pacotes com unxrandr
, lxrandr.mo
ou source_lxrandr.py
. Não é muito útil no nosso caso. Pesquisa mais inteligente:
apt-file search -x /xrandr$
( $
indica o fim da linha). Exemplo de saída:
bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr
O primeiro resultado não parece executável, o segundo parece. Podemos investigar mais. Corre:
apt-cache show x11-xserver-utils
Bingo! Este é o pacote.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Onde bash é o nome do pacote.
dpkg-query -S
E o envia pelo caminho errado da instalação de pacotes opcionais.
Outra alternativa:
$ dpkg -S /bin/bash
bash: /bin/bash
No meu Ubuntu, pelo menos, ambos parecem estar no dpkg
pacote, então não há vantagem real para nenhum específico ...
Os arquivos gerados pela instalação não serão encontrados por dpkg -S
, como mencionado em: https://askubuntu.com/a/667227/52975
Por exemplo, /bin/nc
aparece quando você instala o pacote netcat-openbsd
.
Mas depois:
dpkg -S /bin/nc
nós recebemos dpkg-query: no path found matching pattern /bin/nc
.
Isso acontece porque /bin/nc
é gerado pela update-alternatives
chamada no script postinst que é executado após a instalação.
Funciona assim porque outra versão /bin/nc
é fornecida pelo netcat-traditional
pacote.
Eu não acho que exista uma maneira geral de encontrar esses arquivos gerados. No caso específico de links simbólicos alternativos, podemos apenas seguir o link com readlink -f
:
dpkg -S "$(readlink -f /bin/nc)"
Não conhecendo o Debian, fiquei perplexo quando tentei o seguinte:
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$
Um pouco de investigação e encontrei o pacote:
kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$