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-filee dlocate.
apt-filepesquisa 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, sudomas cria o cache do usuário; com sudoo cache em todo o sistema):
sudo apt-file update
Realize a pesquisa. Neste exemplo, queremos saber em qual pacote xrandrexecutável é:
apt-file search xrandr
Ele lista muitos pacotes com unxrandr, lxrandr.moou 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 -SE 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 dpkgpacote, 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/ncaparece 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-alternativeschamada no script postinst que é executado após a instalação.
Funciona assim porque outra versão /bin/ncé fornecida pelo netcat-traditionalpacote.
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:~$