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?



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

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”.


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.


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.

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?!)


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.


Teraz, jeśli tylko Raspbian też miał jeden :)
XTL


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.