为何使用dpkg -S命令查询部分文件路径时会返回“dpkg-query: no path found matching pattern”错误?
为何使用dpkg -S命令查询部分文件路径时会返回“dpkg-query: no path found matching pattern”错误?
嗨,这个问题其实挺常见的,我来给你掰扯清楚~
首先得搞懂dpkg -S的本质:它是在dpkg的本地数据库里,查找已经被系统包管理工具注册过的文件路径,然后返回对应的软件包。那为什么查/usr/bin/firefox没问题,查/usr/bin/ls就报错呢?
核心原因在于:ls这个二进制文件的实际注册路径并不是/usr/bin/ls。在Debian、Ubuntu这类系统里,ls属于coreutils包,而这个包在安装时,把ls放在了/bin/ls路径下。现在很多现代系统为了统一目录结构,会把/bin软链接到/usr/bin,或者用文件系统合并的方式让/usr/bin/ls看起来存在,但dpkg的数据库里只记录了软件包安装时的原始路径/bin/ls。
你可以试试这个命令验证一下:
dpkg -S /bin/ls
不出意外的话,会返回coreutils: /bin/ls,这就对上了。
另外还有一种可能:如果某个文件不是通过dpkg/apt这类官方包管理工具安装的(比如你自己编译源码装的程序),那dpkg -S也找不到它——因为这类文件根本没进入dpkg的数据库。不过你例子里的ls显然是系统自带的,所以属于第一种情况。
总结一下:
dpkg -S只会匹配dpkg数据库里记录的原始安装路径,不会自动识别软链接或者目录合并后的路径- 遇到这类报错时,先通过
realpath <文件路径>查看文件的真实路径,再用真实路径去查询
备注:内容来源于stack exchange,提问作者Yosyp
相关产品推荐
相关产品推荐

