it-swarm.dev

Jak najdu balíček, který obsahuje soubor?

Je to dost jednoduchá otázka: existuje nějaký příkaz Shell (nebo metoda GUI), který mohu použít, že vzhledem k cestě k souboru v mém systému mi řekne, jaký balíček tam je? Předpokládejme, že soubor skutečně pochází z balíčku, to je.

Bonusová otázka: co když je to soubor, který není nainstalován v mém systému? Existuje například webová stránka, která mi umožní vyhledat soubor a zjistit, jaké balíčky, pokud existují, jej poskytují?

510
David Z

Pomocí příkazu dpkg můžete zjistit, který nainstalovaný balíček vlastní soubor:

Z man dpkg:

 - S, --vyhledat název-souboru-vzor-vyhledávání ... 
 Vyhledat název souboru z nainstalovaných balíčků. 

Příklad:

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

Můžete hledat s úplnou cestou nebo pouze s názvem souboru.

Pokud chcete hledat soubory, které ještě nejsou nainstalovány ve vašem počítači, můžete použít buntu Packages Search

463
Ressu

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

Instalovat apt-file, udělejte:

Sudo apt-get install apt-file

Pak je třeba aktualizovat jeho databázi:

apt-file update

A nakonec prohledejte soubor:

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

Mnohem přátelštějším způsobem je však použití webu buntu Packages Search . Mají možnost "vyhledat obsah balíčků" pro konkrétní název souboru.

252
jbowtie

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

apt-file list packagename
44
ptman

Na stránkách buntu Packages můžete prohledat obsah balíčků zahrnutých v různých vydáních Ubuntu. Pod nadpisem " Prohledat obsah balíčků ".

Zde jsou například výsledky hledání libnss3.so v lucid (10.04):

http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&Arch=any

17
moberley

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

Pomocí 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ím 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 sekci Search the contents of packages.

enter image description here

Příklad

enter image description here

13
A.B.

Toto je rozšíření na vynikající odpověď Alexx Roche . Pokusil jsem se udělat odpověď na tuto odpověď, ale zamítlo se (i když ne Alexxem)


Snažil jsem se zjistit, co je v mém systému nainstalováno which. 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 [email protected]) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="[email protected]"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"

Přestože pro většinu nainstalovaných věcí můžete použít:

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

U věcí, které nejsou nainstalovány, můžete použít:

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

The apt-whatprovides skript funguje pro soubory, které jsou a nejsou ve vašem systému. Například můj systém postrádal Dig, ale měl ping, takže to mělo za následek:

[email protected]:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping

[email protected]:~ $ 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, že Searching for je úplná cesta pro ping (nainstalovaná) a není nainstalován pouze binární název pro Dig. To mi pomohlo zjistit, že jsem potřeboval nainstalovat dnsutils, aniž bych musel hledat https://packages.ubuntu.com/#search_contents

4
Bruno Bronosky

Snažil jsem se zjistit, co nainstalovalo which 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 [email protected]))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}

Ačkoli pro většinu věcí můžete použít

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

Jedním z důvodů, proč to budete muset udělat, je, pokud kompilujete software, který již existuje balíček Ubuntu, můžete spustit apt-get build-dep $PACKAGENAME. To nainstaluje všechny balíčky, které potřebujete kompilovat $PACKAGENAME.

2
Rory