Znajdź pakiet, do którego należy plik w Ubuntu / Debian?

299

Podczas pracy w systemie Ubuntu 8.04 często brakuje mi programu, strony podręcznika lub innego pliku. Czy istnieje prosty sposób sprawdzenia, który pakiet zawiera dany plik (czy jest już zainstalowany, czy nie)? Może jakaś niejasna opcja dla apt lub dpkg?

Jay Conrod
źródło
To samo na Ubuntu: askubuntu.com/questions/481/…
Ciro Santilli 21 改造 中心 法轮功 六四 事件 事件
25
dpkg -S /path/to/filejeśli masz zainstalowany pakiet.
Zaz

Odpowiedzi:

247
apt-file search filename

lub

apt-file search /path/to/file


Aby zainstalować apt-file, użyj:

sudo apt-get install apt-file

Będziesz musiał zaktualizować jego bazę danych, zanim będziesz mógł z niej korzystać:

sudo apt-file update
John T.
źródło
7
FYI: plik apt wydaje się zależeć od Contents-amd64.gz dostarczanych przez repozytoria. I nie wszystkie repozytorium podmiotów zewnętrznych zawierają ten plik.
Jokester
3
Nie działało to dla mnie. Zaktualizowałem bazę danych, ale nic nie zwraca. dpkg -Sdziała jak opisano poniżej.
Northys
404

(Debian / Ubuntu) Odkryj, do którego pakietu należy plik :

dpkg -S /usr/bin/ls

„dpkg -S” po prostu pasuje do dostarczonego ciągu, więc użycie „ls” jako argumentu pasuje do dowolnego pliku z dowolnego pakietu, który ma „ls” w dowolnym miejscu w nazwie pliku. Zwykle dobrym pomysłem jest użycie ścieżki bezwzględnej. W drugim przykładzie widać, że 12 tysięcy plików, które są znane z dpkg, pasują do samego ciągu „ls”.

splattne
źródło
33
Dzieje się tak tylko wtedy, gdy pliki są już zainstalowane
John T
19
W przeciwieństwie do apt-filetego znajduje to również pakiet do pliku, jeśli został zainstalowany ręcznie za pośrednictwem dpkg -i!
tanius
4
Jeśli masz dpkg-zapytanie: nie znaleziono ścieżki pasujące do wzorca spróbuj tego : dpkg -S "$(readlink -fn "$(which rename)")".
Pablo A,
1
Dziwne, to nie dla mnie dpkg-query: no path found matching pattern /usr/bin/java, choć nie jest to plik w/usr/bin/java
nnyby
@nnyby Zobacz komentarz Pablo A
vog
19

Package.debian.org jest tym, czego zawsze używam do wykonania tego zadania. Jest lepszy od apt-file, ponieważ może także znaleźć części nazw plików. Jest również powiązany z główną listą pakietów, która zawiera opisy, błędy itp. W sumie dobra strona internetowa. Nie tak przydatne z linii poleceń, ale wciąż całkiem przydatne.

Ze względu na szybkość dodałem do zakładek adres URL:

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

w Firefoksie i dodałem słowo kluczowe „debfind” jako słowo kluczowe (kliknij „więcej” w menedżerze zakładek z podświetleniem), więc mogę po prostu wpisać „debfind” i zadziała. Możesz zmienić „pakiet” z niestabilnego na stabilny lub testowy, jeśli chcesz, dla innych wersji dystrybucji.

jamuraa
źródło
Nie działa jednak z niestandardowymi repozytoriami.
Ctrl-C
Zły wybór w zakresie automatyzacji.
Alexander Shcheblikin
11

Możesz także użyć dlocate. Ze strony podręcznika;

$ dlocate [ PATTERN ]
List all records where either the package name or the filename matches PATTERN.
jeremiah
źródło
1
dlocateto także moja ulubiona metoda, bardzo niezawodna.
Avio
2
@Avio dlocatenie znajdzie ostatnio zainstalowanego pakietu, chyba że uruchomisz go jako sudo update-dlocatedbpierwszy. Polecenie jest uruchamiane codziennie codziennie w /etc/cron.daily/dlocate
jarno
4

Znalazłem Wajiga ...

wajig whichpackage /path/to/file 

na przykład.

wajig whichpackage /etc/apt/sources.list

Wajig to przydatne narzędzie wiersza poleceń lub konsoli, które otacza wszystkie zalety apt-get, dpkg, których nigdy nie chciałeś się uczyć. .

Aby zainstalować Wajig użyj:

apt-get install wajig

Samo polecenie „Który pakiet” zależy od apt-file

nadal będziesz musiał zaktualizować bazę danych, zanim będziesz mógł z niej korzystać: - Nie wiem jeszcze, czy aktualizacja wajig, która wykonuje aktualizację apt-get, aktualizuje również pamięć podręczną plików, ale spodziewam się, że tak.

sudo wajig update

sudo apt-file update

(i Super Cow, Wielkanocny egss?!)

pete_m
źródło
2

Podobnie do odpowiedzi Jamuraa dla Debiana, możesz także przejść do http://packages.ubuntu.com/ dla Ubuntu. Musisz przewinąć nieco w dół, aby znaleźć pole wyszukiwania „Przeszukaj zawartość paczek”, w którym możesz wpisać ścieżkę do pliku.

kiri
źródło
Teraz, jeśli tylko Raspbian też miał jeden :)
XTL
0

Spróbuj wyszukać pliki przy użyciu http://www.kodkast.com/applications/find-which-package-file-belongs-to

Jest to aplikacja do wyszukiwania plików zawartych w różnych pakietach rpms / linux, i jest bardzo przydatna, gdy nawet nie masz zainstalowanej rpm na twoim komputerze.

Ravi Agarwal
źródło
Downvote: Link jest zepsuty i wydaje się, że link dotyczy przede wszystkim pakietów RPM.
tripleee
0

Pakiet „nie znaleziono komendy” zawiera wskazówki na temat potencjalnych komend i nazwy pakietu debian. Działa poprzez wpisanie polecenia w powłoce bash i sprawdzenie jego wyniku.

Na przykład, jeśli nazwa polecenia jest znana:

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

a jeśli polecenie nie jest znane, stosowane są pewne domysły:

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
erwing
źródło
Nie działa to jednak w przypadku dowolnych plików, takich jak wymagane PO.
CVn
Jest to problematyczna wskazówka, jeśli program robi szkodliwe rzeczy i jest zainstalowany. Dodanie -hlub --helpna końcu trochę by pomogło. Jeśli dodanie -hna końcu zapewniłoby to bezpieczeństwo, zaleciłbym to, ale mimo to nie jest to dobry sposób na osiągnięcie tego, o co prosi OP.
Dr Beco