Jak znaleźć pakiet dostarczający plik?

373

Proste pytanie: czy istnieje jakieś polecenie powłoki (lub metoda GUI) Mogę użyć tego, biorąc pod uwagę ścieżkę do pliku w moim systemie, mówi mi, co pakiet tam umieścił? Zakładając, że plik faktycznie pochodzi z pakietu, to znaczy.

Dodatkowe pytanie: co jeśli jest to plik, który nie jest zainstalowany w moim systemie? Czy jest na przykład witryna internetowa, która pozwoli mi wyszukać plik i zobaczyć, jakie pakiety, jeśli w ogóle, zapewniają?

    
zadawane David Z 30.07.2010, 10:10
źródło

8 odpowiedzi

350

Możesz użyć polecenia dpkg , aby dowiedzieć się, który pakiet instalacyjny jest właścicielem pliku:

Od man dpkg :

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

Przykład:

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

Możesz wyszukiwać z pełną ścieżką lub z samą nazwą pliku.

Jeśli chcesz wyszukać pliki, które nie zostały jeszcze zainstalowane na twoim komputerze, możesz skorzystać z wyszukiwania pakietów Ubuntu

    
odpowiedział Ressu 30.07.2010, 10:42
źródło
181

Polecenie apt-file może zrobić to za Ciebie z wiersza poleceń. Używam go często podczas budowania pakietów ze źródeł. W przypadku plików dostarczanych przez pakiety już zainstalowane w systemie, apt-cache to kolejna wybór.

Aby zainstalować apt-file , wykonaj:

sudo apt-get install apt-file

Następnie musisz zaktualizować bazę danych:

apt-file update

I wreszcie wyszukaj plik:

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

Jednak znacznie bardziej przyjaznym sposobem jest skorzystanie z witryny Wyszukiwanie pakietów Ubuntu . Mają opcję "przeszukać zawartość pakietów" pod kątem określonej nazwy pliku.

    
odpowiedział jbowtie 11.08.2010, 04:43
źródło
32

Istnieje również plik apt do wyszukiwania plików w pakietach, które nie są zainstalowane. Na przykład:

apt-file list packagename
    
odpowiedział ptman 30.07.2010, 10:49
źródło
16

Możesz przeszukiwać zawartość pakietów zawartych w różnych wydaniach Ubuntu na stronie Ubuntu Packages . Zajrzyj pod nagłówek " Wyszukaj zawartość pakietów ".

Na przykład tutaj są wyniki wyszukiwania dla libnss3.so w przejrzystym (10.04):

link

    
odpowiedział moberley 11.08.2010, 04:42
źródło
10

Masz na myśli, która paczka, a nie która aplikacja. Aplikacja to Twój menedżer pakietów, np. Software Center .

Używanie dpkg :

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

Przykład

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

Używanie apt-file :

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

lub też:

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

Przykład

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

Lub online tutaj , w sekcji Search the contents of packages .

Przykład

    
odpowiedział A.B. 29.11.2015, 16:57
źródło
2

Próbowałem wyśledzić, co zainstalowałem which w moim systemie. Po niewielkiej pracy stworzyłem 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%:*}

Chociaż w większości RZECZY można po prostu użyć

apt-file search $(realpath $(which THING))|grep 'THING$'
    
odpowiedział Alexx Roche 17.03.2018, 16:25
źródło
2

To jest rozszerzenie doskonałej odpowiedzi Alexxa Roche'a . Próbowałem edytować tę odpowiedź, ale zostało odrzucone (chociaż nie przez Alexx)

Próbowałem wyśledzić, co zainstalowałem which w moim systemie. Po niewielkiej pracy stworzyłem /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}"

Chociaż w większości zainstalowanych RZECZY można po prostu użyć:

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

Dla RZECZY, które nie są zainstalowane, możesz użyć:

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

Skrypt apt-whatprovides działa dla plików, które są i nie są w twoim systemie. Na przykład mój system nie miał dig , ale miał ping , więc to, co wynikło:

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

Zauważ, że Searching for jest pełną ścieżką dla ping (zainstalowany) i nie jest zainstalowana tylko nazwa binarna dla dig . Pomogło mi to odkryć, że muszę zainstalować dnsutils bez konieczności wyszukiwania linku

    
odpowiedział Bruno Bronosky 18.07.2018, 07:45
źródło
1

Jednym z powodów, dla których możesz to zrobić, jest kompilacja oprogramowania, które już zawiera pakiet ubuntu, możesz uruchomić apt-get build-dep $PACKAGENAME . To zainstaluje wszystkie pakiety potrzebne do kompilacji $PACKAGENAME .

    
odpowiedział Rory 11.08.2010, 21:31
źródło

Przeczytaj inne pytania na temat tagów