Як дізнатися, який пакет має файл?


Відповіді:


44

У 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

Бінго! Це пакет.


Перше посилання в цій відповіді ( debianhelp.co.uk/findfile.htm ), здається, зараз не працює.
rogpeppe

123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Де bash - назва пакету.


4
Ця відповідь набагато краща за прийняту!
Бекс

Правильно. Прикро, що "прийнята відповідь" отримує зелену галочку, яка є позначкою, яка також передає "правильну відповідь". У цьому випадку прийнята відповідь пропускає dpkg-query -SІ він посилає вас неправильним шляхом встановлення додаткових пакетів ..
Scott Prive

42

Ще одна альтернатива:

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

Принаймні, на моєму Ubuntu обидва, здається, є в dpkgпакеті, тому жодної реальної переваги перед будь-яким конкретним ...


14

Файли генеруватися ні знайдено 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)"

2

Не будучи знайомим з Дебіаном, мене збивали з пантелику, коли я спробував це:

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:~$ 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.