Questão Como descubro qual pacote possui um arquivo?


Como eu descubro de qual pacote Debian um arquivo veio?


79


origem




Respostas:


Existem vários utilitários no Debian que executam esta tarefa; Verifica esta página para uma descrição. Eu 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 para dpkg -L (o comando que lista o conteúdo do pacote) e, como tal, procura apenas pacotes instalados. A pesquisa é realizada por dlocate -S file.name.

Além disso, você pode pesquisar pacotes on-line usando packages.debian.org servidor (o Pesquise o conteúdo dos pacotes seção).


Instalando e usando 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

Ler dados de repositórios (isso também funciona sem sudo mas cria o cache do usuário então; com sudo o cache é 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$

($ denota 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 ser executável, o segundo. Nós podemos investigar mais. Corre:

apt-cache show x11-xserver-utils

Bingo! Este é o pacote.


38



O primeiro link nesta resposta (debianhelp.co.uk/findfile.htm) parece estar extinto agora. - rogpeppe


user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Onde bash é o nome do pacote.


86





Outra alternativa:

$ dpkg -S /bin/bash
bash: /bin/bash

Pelo menos no meu Ubuntu, ambos parecem estar no dpkg pacote, então não há vantagem real para qualquer um específico ...


31





Arquivos gerados pela instalação não será encontrado por dpkg -Scomo mencionado em: https://askubuntu.com/a/667227/52975

Por exemplo, /bin/nc aparece quando você instala o pacote netcat-openbsd.

Mas sobre:

dpkg -S /bin/nc

Nós temos dpkg-query: no path found matching pattern /bin/nc.

Isso acontece porque /bin/nc é gerado pelo update-alternatives ligue para o script postinst que é executado após a instalação.

Funciona assim porque outra versão do /bin/nc é fornecido pelo netcat-traditional pacote.

Eu não acho que há 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)"

9





Não estando familiarizado com o Debian, fiquei perplexo quando tentei isso:

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:~$ 

1