Как узнать, какому пакету принадлежит файл?

Ответы:

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

Бинго! Это пакет.

Kamil Maciorowski
источник
Первая ссылка в этом ответе ( debianhelp.co.uk/findfile.htm ), кажется, больше не существует.
rogpeppe
123
user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Где bash - это имя пакета.

Студент в университете
источник
4
Этот ответ намного лучше принятого!
Бекс
Верный. К сожалению, «принятый ответ» получает зеленую галочку, которая также передает «правильный ответ». В этом случае принятый ответ пропускается, dpkg-query -Sи он отправляет вас по неправильному пути установки дополнительных пакетов.
Скотт Прайв
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вызовом в сценарии postinst, который запускается после установки.

Это работает так, потому что /bin/ncв netcat-traditionalпакете предусмотрена другая версия .

Я не думаю, что есть общий способ поиска таких сгенерированных файлов. В конкретном случае альтернативных символических ссылок мы можем просто перейти по ссылке с readlink -f:

dpkg -S "$(readlink -f /bin/nc)"
оборота Ciro Santilli 事件 事件 2016 六四 事件 法轮功
источник
2

Не будучи знакомым с Debian, я был озадачен, когда попробовал это:

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:~$ 
Филип Кернс
источник