Debian Everything-in-usr 目录方案 (usrmerge) 破坏了 dpkg -S。工作?

spi*_*kus 4 debian dpkg

我习惯于dpkg -S /path/to/file在 Debian 上找出某些东西的来源。~new "everything-in-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

Run Code Online (Sandbox Code Playgroud)

这很糟糕,因为实际运行的可执行文件是 /usr/lib/systemd/systemd 所以我更有可能想知道在任何给定的dpkg -S. 是否有另一个 usrrerge 感知替代品dpkg -S可以用来轻松可靠地将可执行文件跟踪回其包?

Ste*_*itt 5

我不知道有任何/usr等价于的 -merge-aware dpkg -S,但有一种方法可以避免这个问题:dpkg -S不需要完整路径,所以

dpkg -S lib/systemd/systemd
Run Code Online (Sandbox Code Playgroud)

dpkg -S bin/systemd
Run Code Online (Sandbox Code Playgroud)

会给你你正在寻找的答案。如果要避免将与给定模式匹配的所有文件列为子字符串,请添加*

dpkg -S '*lib/systemd/systemd' '*bin/systemd'
Run Code Online (Sandbox Code Playgroud)

另请参阅dpkg-query: no path found matching pattern /usr/bin/bash,以及/usr合并说明(由dpkg维护者编写),其中解释了所涉及的一些约束,并列出了许多dpkgusrmerge软件包破坏的功能方法(包括dpkg -S)。