Як дізнатись, з якого пакета Debian прийшов файл?
Як дізнатись, з якого пакета Debian прийшов файл?
Відповіді:
У Debian є кілька утиліт, які виконують це завдання; перегляньте цю сторінку для опису. Я згадаю два з них, apt-file
і dlocate
.
apt-file
здійснює пошук у внутрішньому кеші, що дозволяє не встановлювати всі пакунки, які ви хочете шукати. Нижче ви знайдете більш детальний посібник.
dlocate
є швидкою альтернативою dpkg -L
(команда, що містить список вмісту пакету), і тому вона шукає лише встановлені пакети. Пошук здійснює компанія dlocate -S file.name
.
Також ви можете шукати пакети в Інтернеті з допомогою packages.debian.org сервера ( пошук вмісту пакетів розділу).
apt-file
Потрібно спочатку оновити:
sudo apt-get update
Подивіться, що apt-file
таке:
apt-cache show apt-file
Встановіть його:
sudo apt-get install apt-file
Читання даних із сховищ (це також працює без, sudo
але створює кеш користувача тоді; sudo
кеш є загальносистемним):
sudo apt-file update
Провести пошук. У цьому прикладі ми хочемо знати, у якому пакунку xrandr
виконується:
apt-file search xrandr
Він перераховує безліч пакунків з unxrandr
, lxrandr.mo
або source_lxrandr.py
. У нашому випадку не дуже корисно. Більш розумний пошук:
apt-file search -x /xrandr$
( $
позначає кінець рядка). Приклад виводу:
bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr
Перший результат не схожий на виконуваний, а другий. Ми можемо дослідити далі. Виконати:
apt-cache show x11-xserver-utils
Бінго! Це пакет.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Де bash - назва пакету.
dpkg-query -S
І він посилає вас неправильним шляхом встановлення додаткових пакетів ..
Ще одна альтернатива:
$ dpkg -S /bin/bash
bash: /bin/bash
Принаймні, на моєму Ubuntu обидва, здається, є в dpkg
пакеті, тому жодної реальної переваги перед будь-яким конкретним ...
Файли генеруватися ні знайдено dpkg -S
, як уже згадувалося в: https://askubuntu.com/a/667227/52975
Наприклад, /bin/nc
з'являється при встановленні пакета netcat-openbsd
.
Але на:
dpkg -S /bin/nc
ми отримуємо dpkg-query: no path found matching pattern /bin/nc
.
Це відбувається тому /bin/nc
, що породжується update-alternatives
викликом у постінст-скрипті, який запускається після встановлення.
Це працює так, оскільки інша версія пакета /bin/nc
надається netcat-traditional
пакетом.
Я не думаю, що існує загальний спосіб пошуку таких згенерованих файлів. У конкретному випадку альтернативних посилань ми можемо просто перейти за посиланням на readlink -f
:
dpkg -S "$(readlink -f /bin/nc)"
Не будучи знайомим з Дебіаном, мене збивали з пантелику, коли я спробував це:
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$
Трохи розслідування, і я знайшов пакет:
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:~$