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


Eu frequentemente me sinto perdendo um programa, página man ou outro arquivo quando estou trabalhando no meu sistema Ubuntu 8.04. Existe alguma maneira simples de procurar o pacote que contém um determinado arquivo (se já está instalado ou não)? Talvez alguma opção obscura para o apt ou dpkg?


258


origem


O mesmo no Ubuntu: askubuntu.com/questions/481/… - Ciro Santilli 新疆改造中心 六四事件 法轮功
dpkg -S /path/to/filese você tiver o pacote instalado. - Zaz


Respostas:


apt-file search filename

ou

apt-file search /path/to/file


Para instalar apt-file, usar:

sudo apt-get install apt-file

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

sudo apt-file update

210



FYI: O apt-file parece depender do Contents-amd64.gz fornecido pelos repositórios. E nem todos os repos de terceiros fornecem esse arquivo. - Jokester
Não funcionou para mim. Eu atualizei o banco de dados, mas ele não retorna nada. dpkg -S funciona conforme descrito abaixo. - Northys


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

dpkg -S /usr/bin/ls

'dpkg -S' apenas combina com a string que você   fornecê-lo, então apenas usando 'ls' como um   argumento corresponde a qualquer arquivo de qualquer   pacote que tem 'ls' em qualquer lugar no   nome do arquivo. Então geralmente é uma boa ideia   para usar um caminho absoluto. Você pode ver   no segundo exemplo que 12 mil   arquivos que são conhecidos pelo dpkg correspondem   corda nua 'ls'.


349



Isso é apenas se os arquivos já instalados - John T
Em contraste com apt-file, isso também encontra o pacote em um arquivo se ele foi instalado manualmente via dpkg -i! - tanius
Se você pegar dpkg-query: nenhum caminho encontrado padrão de correspondência  tente isso: dpkg -S "$(readlink -fn "$(which rename)")". - Pablo Bianchi
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


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

Para velocidade, eu marquei o URL:

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

no Firefox, e acrescentou "debfind" como uma palavra-chave (clique em "mais" no gerenciador de favoritos com ele hilighted), para que eu possa digitar "debfind" e vai funcionar. Você pode alterá-lo de unstable para stable ou testando, se desejar, para outras versões da distribuição.


16



Não funciona com repositórios personalizados. - Ctrl-C
Má escolha em relação à automação. - Alexander Shcheblikin


Você também pode usar o dlocate. Da man page;

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

11



dlocate também é meu método favorito, muito confiável. - Avio
@Avio dlocate não encontra um pacote instalado recentemente, a menos que você execute sudo update-dlocatedb primeiro. O comando é executado automaticamente diariamente em /etc/cron.daily/dlocate - jarno


Eu encontrei o Wajig ...

wajig whichpackage /path/to/file 

por exemplo.

wajig whichpackage /etc/apt/sources.list

O Wajig é uma ferramenta de linha de comando ou console prática que envolve toda a bondade do apt-get, dpkg que você nunca quis aprender. .

Para instalar o wajig use:

apt-get install wajig

Esse comando 'whichpackage' depende do apt-file

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

sudo wajig update

sudo apt-file update

(e Super Cow, Easter egss ?!)


4





Igual à resposta do jamuraa para o Debian, você também pode ir http://packages.ubuntu.com/ para o Ubuntu. Você terá que rolar um pouco para encontrar o "Pesquisar o conteúdo dos pacotes" searchbox onde você pode inserir o caminho de um arquivo.


2



Agora, se apenas Raspbian também tivesse um :) - XTL


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

Este é um aplicativo para procurar por arquivos que estão contidos em diferentes pacotes rpms / linux, e é muito útil quando você não tem sequer o rpm instalado em sua máquina.


0



Downvote: O link está quebrado e o link parece ser para pacotes RPM. - tripleee


O pacote command-not-found fornece dicas sobre possíveis comandos e o nome do pacote debian. Ele funciona digitando o comando no bash shell e olhando para 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 é conhecido, algumas suposições sã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

0



Isso não funciona para arquivos arbitrários, como o OP solicitado. - Michael Kjörling
Esta é uma dica problemática se o programa fizer coisas prejudiciais e estiver instalado. Adicionando -h ou --help no final ajudaria um pouco. Se adicionar -h no final deixaria isso seguro o suficiente, eu recomendaria, mas mesmo assim não é uma boa maneira de alcançar o que o OP pede. - Dr Beco