Jak mogę dowiedzieć się, z którego pakietu Debian pochodzi plik?
Jak mogę dowiedzieć się, z którego pakietu Debian pochodzi plik?
Odpowiedzi:
W Debianie istnieje kilka zastosowań, które wykonują to zadanie; sprawdź tę stronę, aby uzyskać opis. Wspomnę o dwóch z nich apt-file
i dlocate
.
apt-file
przeszukuje 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.
dlocate
jest 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 ).
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 sudo
pamięci podręcznej użytkownika, ale tworzy pamięć podręczną użytkownika; sudo
pamięć podręczna obejmuje cały system):
sudo apt-file update
Wykonaj wyszukiwanie. W tym przykładzie chcemy wiedzieć, w którym pakiecie xrandr
wykonywalnym jest:
apt-file search xrandr
Wymienia wiele pakietów z unxrandr
, lxrandr.mo
lub 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.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Gdzie bash jest nazwą pakietu.
dpkg-query -S
ORAZ przesyła cię złą ścieżką instalacji opcjonalnych pakietów.
Inna alternatywa:
$ dpkg -S /bin/bash
bash: /bin/bash
Co najmniej na moim Ubuntu, oba wydają się być w dpkg
pakiecie, więc nie ma żadnej realnej korzyści dla żadnego konkretnego ...
Pliki wygenerowane podczas instalacji nie zostaną znalezione przez dpkg -S
, jak wspomniano na stronie : https://askubuntu.com/a/667227/52975
Na przykład /bin/nc
pojawia 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/nc
jest generowane przez update-alternatives
wywołanie w skrypcie postinst, które jest uruchamiane po instalacji.
Działa to tak, bo kolejna wersja /bin/nc
jest przez netcat-traditional
pakiet.
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)"
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:~$