Como encontro o pacote que fornece um arquivo?

361

Pergunta bastante simples: existe algum comando shell (ou método GUI) que eu possa usar, dado o caminho para um arquivo no meu sistema, me diz qual pacote colocou lá? Assumindo que o arquivo veio de fato de um pacote, isto é.

Pergunta bônus: e se for um arquivo que não está instalado no meu sistema? Existe, digamos, um site que me permita procurar um arquivo e ver quais pacotes, se houver, fornecem?

    
por David Z 30.07.2010 / 10:10

7 respostas

344

Você pode usar o comando dpkg para descobrir qual pacote instalado possui um arquivo:

De man dpkg :

-S, --search filename-search-pattern...
                  Search for a filename from installed packages.

Exemplo:

$ dpkg -S /bin/ls
coreutils: /bin/ls

Você pode pesquisar com um caminho completo ou apenas com o nome do arquivo.

Se você deseja procurar por arquivos ainda não instalados no seu computador, você pode usar a Pesquisa de Pacotes do Ubuntu

    
por Ressu 30.07.2010 / 10:42
179

O comando apt-file pode fazer isso por você na linha de comando. Eu uso frequentemente quando construo pacotes a partir do código fonte. Para arquivos fornecidos por pacotes que já estão instalados no seu sistema, apt-cache é outro escolha.

Para instalar o apt-file , faça:

sudo apt-get install apt-file

Em seguida, você precisa atualizar o banco de dados:

apt-file update

E, finalmente, pesquise no arquivo:

$ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h

No entanto, uma maneira muito mais amigável é usar o site Search para Ubuntu Packages . Eles têm a opção de "pesquisar o conteúdo dos pacotes" para um nome de arquivo específico.

    
por jbowtie 11.08.2010 / 04:43
32

Existe também o apt-file para procurar arquivos em pacotes que não estão instalados. Por exemplo:

apt-file list packagename
    
por ptman 30.07.2010 / 10:49
16

Você pode pesquisar o conteúdo dos pacotes incluídos nos vários lançamentos do Ubuntu no site Pacotes Ubuntu . Olhe sob o cabeçalho " Pesquise o conteúdo dos pacotes ".

Por exemplo, aqui estão os resultados da pesquisa para libnss3.so em lucid (10.04):

link

    
por moberley 11.08.2010 / 04:42
10

Você quer dizer qual pacote e não qual aplicativo. O aplicativo é seu gerenciador de pacotes, por exemplo, Software Center .

Usando dpkg :

dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs

Exemplo

% dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

Usando apt-file :

apt-file search /usr/lib/tracker/tracker-store

ou também possível:

apt-file search --regex /tracker-extract$
apt-file search --regex /tracker-miner-fs$

Exemplo

% apt-file search /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store

Ou on-line aqui , na seção Search the contents of packages .

Exemplo

    
por A.B. 29.11.2015 / 16:57
1

Uma razão pela qual você pode ter que fazer isso é se você está compilando um software que já existe um pacote do Ubuntu, você pode executar apt-get build-dep $PACKAGENAME . Isso instalará todos os pacotes necessários para compilar $PACKAGENAME .

    
por Rory 11.08.2010 / 21:31
1

Eu estava tentando rastrear o que instalou which no meu sistema. Depois de um pouco de trabalho eu criei o apt-whatprovides

#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"

BINARY=$(realpath $(which $@))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}

Embora para a maioria das COISAS você pode simplesmente usar

apt-file search $(realpath $(which THING))|grep 'THING$'
    
por Alexx Roche 17.03.2018 / 16:25