Encontre a que pacote um arquivo pertence no Ubuntu / Debian?


300

Frequentemente, sinto falta de um programa, página de manual ou outro arquivo ao trabalhar no meu sistema Ubuntu 8.04. Existe alguma maneira simples de procurar qual pacote contém um determinado arquivo (se ele já está instalado ou não)? Talvez alguma opção obscura para apt ou dpkg?



25
dpkg -S /path/to/filese você tiver o pacote instalado.
Zaz

Respostas:


247
apt-file search filename

ou

apt-file search /path/to/file


Para instalar apt-file, use:

sudo apt-get install apt-file

Você precisará atualizar seu banco de dados antes de poder usá-lo:

sudo apt-file update

7
FYI: o arquivo apt parece depender do conteúdo-amd64.gz fornecido pelos repositórios. E nem todos os repositórios de terceiros fornecem esse arquivo.
Jokester

3
Não funcionou para mim. Atualizei o banco de dados, mas ele não retorna nada. dpkg -Sfunciona como descrito abaixo.
Northys 28/12/16

404

(Debian / Ubuntu) Descubra a que pacote um arquivo pertence :

dpkg -S /usr/bin/ls

'dpkg -S' corresponde apenas à string que você fornece, portanto, apenas usando 'ls' como argumento corresponde a qualquer arquivo de qualquer pacote que tenha 'ls' em qualquer lugar do nome do arquivo. Portanto, geralmente é uma boa ideia usar um caminho absoluto. Você pode ver no segundo exemplo que 12 mil arquivos conhecidos pelo dpkg correspondem à string simples 'ls'.


33
Isso é apenas se os arquivos já instalado
John T

19
Por outro lado apt-file, isso também localiza o pacote em um arquivo se ele foi instalado manualmente via dpkg -i!
Tanius)

4
Se você receber dpkg-query: no caminho encontrado padrão de correspondência tentar este : dpkg -S "$(readlink -fn "$(which rename)")".
Pablo #

1
Estranho, isso não funcionou para mim: dpkg-query: no path found matching pattern /usr/bin/java, embora haja um arquivo em/usr/bin/java
nnyby

@nnyby Ver comentário de Pablo A
vog

19

packages.debian.org é o que eu sempre uso para realizar esta tarefa. É superior ao apt-file porque também pode encontrar partes de nomes de arquivos. Também está vinculado à lista principal de pacotes, que lista descrições, bugs, etc. No geral, um bom site. Não é tão útil na linha de comando, mas ainda é bastante útil.

Para velocidade, marquei o URL como favorito:

http://packages.debian.org/search?searchon=contents&keywords=%s&mode=filename&suite=unstable&arch=any

no Firefox e adicionei "debfind" como uma palavra-chave (clique em "mais" no gerenciador de favoritos com o nome escurecido), para que eu possa digitar "debfind" e ele funcionará. Você pode alterar 'suite' de instável para estável ou testar, se desejar, para outras versões da distribuição.


Porém, ele não funciona com repositórios personalizados.
Ctrl-C

Má escolha em relação à automação.
Alexander Shcheblikin

11

Você também pode usar o dlocate. Na página do manual;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.

1
dlocatetambém é o meu método favorito, muito confiável.
Avio 16/09

2
O @Avio dlocatenão encontra um pacote instalado recentemente, a menos que você execute sudo update-dlocatedbprimeiro. O comando é executado automaticamente diariamente em /etc/cron.daily/dlocate
Jarno

4

Encontrei Wajig ...

wajig whichpackage /path/to/file 

por exemplo.

wajig whichpackage /etc/apt/sources.list

Wajig é uma linha de comando ou ferramenta de console à mão que reúne todas as qualidades do apt-get, dpkg, que você nunca quis aprender. .

Para instalar o wajig, use:

apt-get install wajig

O próprio comando 'whatpackage' depende do apt-file

você ainda precisará atualizar seu banco de dados antes de poder usá-lo: - Ainda não sei se wajig update whixh faz uma atualização do apt-get também atualiza o cache do arquivo, mas espero que sim.

sudo wajig update

sudo apt-file update

(e Super Cow, Páscoa egss?!)


2

Assim como a resposta de jamuraa para o Debian, você também pode acessar http://packages.ubuntu.com/ para Ubuntu. Você precisará rolar um pouco para baixo para encontrar a caixa de pesquisa "Pesquisar o conteúdo dos pacotes", onde é possível inserir o caminho de um arquivo.


Agora se somente Raspbian também teve um :)
XTL


0

O pacote command-not-found fornece dicas sobre possíveis comandos e o nome do pacote debian. Ele funciona digitando o comando no shell bash e observando sua saída.

Por exemplo, se o nome do comando for conhecido:

zer@ivy:~ 10:45 $ zsh5
The program 'zsh5' is currently not installed.  To run 'zsh5' please ask
your administrator to install the package 'zsh'
zsh5: command not found

e se o comando não for conhecido, algumas suposições serão aplicadas:

zer@ivy:~ 09:46 $ zsh
No command 'zsh' found, did you mean:
 Command 'lsh' from package 'lsh-client' (main)
 Command 'osh' from package 'omake' (main)
 Command 'ysh' from package 'libyaml-shell-perl' (main)
 Command 'ssh' from package 'openssh-client' (main)
 Command 'vsh' from package 'crystalspace' (main)
 Command 'dsh' from package 'dsh' (main)
 Command 'ash' from package 'ash' (main)
 Command 'msh' from package 'nmh' (main)
 Command 'zssh' from package 'zssh' (main)
 Command 'qsh' from package 'gridengine-client' (main)
 Command 'sh' from package 'dash' (main)
 Command 'bsh' from package 'bsh' (main)
zsh: command not found

No entanto, isso não funciona para arquivos arbitrários, como o OP solicitado.
a CVn

Essa é uma dica problemática se o programa fizer coisas perigosas e estiver instalado. Adicionar -hou --helpno final ajudaria um pouco. Se adicionar -hno final tornasse isso seguro o suficiente, eu recomendaria, mas mesmo assim não é uma boa maneira de conseguir o que o OP pede.
Dr Beco
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.