%20%D0%BD%D0%B0%D1%80%D1%83%D1%88%D0%B0%D0%B5%D1%82%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%83%20dpkg%20-S.%20%D0%9A%D0%B0%D0%BA%20%D0%BE%D0%B1%D0%BE%D0%B9%D1%82%D0%B8%3F.png)
Я привык использовать его, dpkg -S /path/to/file
чтобы выяснить, откуда что-то взялось в Debian. ~новый"всё-в-usr"Политика AKA usrmerge часто нарушает это. Например:
> dpkg -S /bin/systemd
systemd: /bin/systemd
> readlink -f /bin/systemd
/usr/lib/systemd/systemd
> dpkg -S /usr/lib/systemd/systemd
dpkg-query: no path found matching pattern /usr/lib/systemd/systemd
Это отстой, потому что фактически исполняемый файл запущен в /usr/lib/systemd/systemd, поэтому я, скорее всего, захочу узнать, из какого пакета он пришел в любом конкретном использовании dpkg -S
. Есть ли другая альтернатива, поддерживающая usrmerge, которую dpkg -S
я мог бы использовать для простого и надежного отслеживания исполняемого файла до его пакета?
решение1
Я не знаю ни одного /usr
эквивалента с поддержкой слияния dpkg -S
, но есть способ обойти эту проблему: dpkg -S
не нужен полный путь, поэтому
dpkg -S lib/systemd/systemd
и
dpkg -S bin/systemd
даст вам ответ(ы), которые вы ищете. Если вы хотите избежать перечисления всех файлов, соответствующих заданным шаблонам как подстрокам, добавьте *
:
dpkg -S '*lib/systemd/systemd' '*bin/systemd'
Смотрите такжеdpkg-query: не найден путь, соответствующий шаблону /usr/bin/bash, иэто описание /usr
слияния(написано сопровождающим dpkg
), в котором объясняются некоторые из имеющихся ограничений и перечисляется ряд dpkg
функций, которые нарушаются usrmerge
подходом пакета (включая dpkg -S
).