Jak mohu najít balíček, který poskytuje soubor?

385

Jednoduchá otázka: existuje nějaký příkaz shellu (nebo metoda GUI), kterou mohu použít, vzhledem k cestě k souboru na mém systému, řekne mi, jaký balíček to tam dal? Za předpokladu, že soubor skutečně pochází z balíčku, tedy.

Bonusová otázka: co když je to soubor, který není nainstalován v mém systému? Existuje, řekněme, webová stránka, která mi umožní podívat se na soubor a zjistit, jaké balíčky, pokud vůbec nějaké, poskytují?

    
dané David Z 30.07.2010 10:10

8 odpovědí

363

Pomocí příkazudpkg zjistíte, který nainstalovaný balíček vlastní soubor:

Odman dpkg:

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

Příklad:

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

Můžete buď hledat úplnou cestu, nebo pouze s názvem souboru.

Pokud chcete vyhledat soubory, které dosud nebyly nainstalovány v počítači, můžete použít Vyhledávání balíčků Ubuntu

    
odpověděl Ressu 30.07.2010 10:42
189

Příkaz apt-file to může udělat pro vás z příkazového řádku. Používám to často při vytváření balíků ze zdroje. U souborů poskytovaných balíčky, které jsou již nainstalovány ve vašem systému, je apt-cache dalším volba.

Chcete-li nainstalovatapt-file, postupujte takto:

sudo apt-get install apt-file

Potřebujete aktualizovat databázi:

apt-file update

A nakonec vyhledejte soubor:

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

Nicméně mnohem přívětivější je použít web vyhledávání balíčků Ubuntu . Mají možnost "vyhledat obsah balíků" pro konkrétní název souboru.

    
odpověděl jbowtie 11.08.2010 04:43
35

Existuje také apt-soubor pro vyhledávání souborů v balících, které nejsou nainstalovány. Například:

apt-file list packagename
    
odpověděl ptman 30.07.2010 10:49
16

Můžete vyhledávat obsah balíčků zahrnutých v různých vydáních Ubuntu na webových stránkách Ubuntu Packages . Pod hlavičkou " vyhledejte obsah balíků ".

Například zde jsou výsledky hledání pro libnss3.so v lucid (10.04):

Odkaz

    
odpověděl moberley 11.08.2010 04:42
10

Myslíte, který balíček a ne kterou aplikaci. Aplikace je váš správce balíčků, např. Software Center.

Použitídpkg:

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

Příklad

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

Použitíapt-file:

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

nebo také možné:

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

Příklad

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

Nebo online zde v sekciSearch the contents of packages.

Příklad

    
odpověděl A.B. 29.11.2015 16:57
2

Pokusil jsem se zjistit, co instalovalwhich v mém systému. Po malé práci jsem vytvořil 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%:*}

I když pro většinu věcí můžete použít pouze

apt-file search $(realpath $(which THING))|grep 'THING$'
    
odpověděl Alexx Roche 17.03.2018 16:25
2

Jedná se o rozšíření o vynikající odpověď společnosti Alexx Roche . Snažil jsem se tuto odpověď upravit, ale byl odmítnut (ale ne Alexx)

Pokusil jsem se zjistit, co instalovalwhich v mém systému. Po malé práci jsem vytvořil/usr/local/bin/apt-whatprovides

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

BINARY="$(realpath $(which $@) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="$@"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

Přestože je pro většinu nainstalovaných funkcí jen:

apt-file search $(realpath $(which THING)) | grep 'THING$'

Pokud nemáte nainstalované THINGy, můžete použít:

apt-file search THING | grep '/THING$'

Skriptapt-whatprovides funguje pro soubory, které jsou a nejsou ve vašem systému. Například můj systém postrádaldig, ale mělping, takže to bylo výsledkem:

pi@raspberrypi:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

pi@raspberrypi:~ $ apt-whatprovides dig
Searching for dig
dnsutils: /usr/bin/dig
epic4: /usr/share/epic4/script/dig
epic4-help: /usr/share/epic4/help/8_Scripts/dig
knot-dnsutils: /usr/bin/dig

Všimněte si, žeSearching for je kompletní cesta proping (nainstalováno) a pouze binární jméno prodig není nainstalováno. To mi pomohlo zjistit, že jsem potřeboval nainstalovatdnsutils, aniž by musel jít hledat Odkaz

    
odpověděl Bruno Bronosky 18.07.2018 07:45
1

Jedním z důvodů, proč byste to museli udělat, je, pokud kompilaci softwaru, který již obsahuje balíček ubuntu, můžete spustitapt-get build-dep $PACKAGENAME. Tím se nainstalují všechny balíky, které potřebujete k sestavení$PACKAGENAME.

    
odpověděl Rory 11.08.2010 21:31