Как узнать, из какого пакета 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
вызовом в сценарии postinst, который запускается после установки.
Это работает так, потому что /bin/nc
в netcat-traditional
пакете предусмотрена другая версия .
Я не думаю, что есть общий способ поиска таких сгенерированных файлов. В конкретном случае альтернативных символических ссылок мы можем просто перейти по ссылке с readlink -f
:
dpkg -S "$(readlink -f /bin/nc)"
Не будучи знакомым с 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:~$