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?

Jay Conrod
fonte
O mesmo no Ubuntu: askubuntu.com/questions/481/…
Ciro Santilli escreveu:
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
John T
fonte
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'.

splattne
fonte
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.

jamuraa
fonte
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.
jeremiah
fonte
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?!)

pete_m
fonte
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.

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

Tente pesquisar arquivos usando http://www.kodkast.com/applications/find-which-package-file-belongs-to

Esta é uma aplicação para procurar arquivos contidos em diferentes pacotes rpms / linux, e é muito útil quando você não possui o rpm instalado em sua máquina.

Ravi Agarwal
fonte
Downvote: O link está quebrado e o link parece ser para pacotes RPM em primeiro lugar.
Tripleee 17/0418
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
erwing
fonte
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