Jak dowiedzieć się, który pakiet jest właścicielem pliku?

Odpowiedzi:

44

W Debianie istnieje kilka zastosowań, które wykonują to zadanie; sprawdź tę stronę, aby uzyskać opis. Wspomnę o dwóch z nich apt-filei dlocate.

apt-fileprzeszukuje swoją wewnętrzną pamięć podręczną, dzięki czemu nie można zainstalować wszystkich pakietów, które chcesz przeszukać. Poniżej znajdziesz bardziej szczegółowy przewodnik.

dlocatejest szybką alternatywą dla dpkg -L(polecenia wyświetlającego zawartość pakietu) i dlatego przeszukuje tylko zainstalowane pakiety. Wyszukiwanie jest wykonywane przez dlocate -S file.name.

Możesz także wyszukiwać pakiety online za pomocą serwera packages.debian.org ( sekcja Przeszukaj zawartość pakietów ).


Instalowanie i używanie apt-file

Warto najpierw zaktualizować:

sudo apt-get update

Zobacz po co apt-file:

apt-cache show apt-file

Zainstaluj to:

sudo apt-get install apt-file

Odczytaj dane z repozytoriów (działa to również bez sudopamięci podręcznej użytkownika, ale tworzy pamięć podręczną użytkownika; sudopamięć podręczna obejmuje cały system):

sudo apt-file update

Wykonaj wyszukiwanie. W tym przykładzie chcemy wiedzieć, w którym pakiecie xrandrwykonywalnym jest:

apt-file search xrandr

Wymienia wiele pakietów z unxrandr, lxrandr.molub source_lxrandr.py. Niezbyt przydatne w naszym przypadku. Bardziej sprytne wyszukiwanie:

apt-file search -x /xrandr$

( $oznacza koniec linii). Przykładowe dane wyjściowe:

bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr

Pierwszy wynik nie wygląda na wykonywalny, drugi tak. Możemy zbadać dalej. Biegać:

apt-cache show x11-xserver-utils

Bingo! To jest pakiet.

Kamil Maciorowski
źródło
Pierwszy link w tej odpowiedzi ( debianhelp.co.uk/findfile.htm ) wydaje się teraz nieczynny.
rogpeppe
123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Gdzie bash jest nazwą pakietu.

Student na uniwersytecie
źródło
4
Ta odpowiedź jest znacznie lepsza niż zaakceptowana!
Bex
Poprawny. Szkoda, że ​​„zaakceptowana odpowiedź” otrzymuje zielony znacznik wyboru, który jest również znakiem „poprawnej odpowiedzi”. W tym przypadku zaakceptowana odpowiedź jest pomijana dpkg-query -SORAZ przesyła cię złą ścieżką instalacji opcjonalnych pakietów.
Scott Prive
42

Inna alternatywa:

$ dpkg -S /bin/bash
bash: /bin/bash

Co najmniej na moim Ubuntu, oba wydają się być w dpkgpakiecie, więc nie ma żadnej realnej korzyści dla żadnego konkretnego ...

Gert van den Berg
źródło
14

Pliki wygenerowane podczas instalacji nie zostaną znalezione przez dpkg -S, jak wspomniano na stronie : https://askubuntu.com/a/667227/52975

Na przykład /bin/ncpojawia się podczas instalowania pakietu netcat-openbsd.

Ale po:

dpkg -S /bin/nc

dostajemy dpkg-query: no path found matching pattern /bin/nc.

Dzieje się tak, ponieważ /bin/ncjest generowane przez update-alternativeswywołanie w skrypcie postinst, które jest uruchamiane po instalacji.

Działa to tak, bo kolejna wersja /bin/ncjest przez netcat-traditionalpakiet.

Nie sądzę, że istnieje ogólny sposób na znalezienie takich wygenerowanych plików. W konkretnym przypadku alternatywnych dowiązań symbolicznych możemy po prostu użyć linku za pomocą readlink -f:

dpkg -S "$(readlink -f /bin/nc)"
rev Ciro Santilli z 2016 r
źródło
2

Nie znając Debiana, byłem zaskoczony, gdy spróbowałem:

kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$ 

Trochę dochodzenia i znalazłem pakiet:

kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ 
Philip Kearns
źródło