dpkg-S 命令得出“dpkg-query:未找到匹配模式的路径”

dpkg-S 命令得出“dpkg-query:未找到匹配模式的路径”

为什么dpkg -S某些命令会产生标题错误?

例如:

dpkg -S /usr/bin/firefox
   firefox: /usr/bin/firefox

但接下来是这样的:

dpkg -S /usr/bin/ls
   dpkg-query: no path found matching pattern /usr/bin/ls

答案1

/usr合并需要数年才能实现,并且仍在继续。特别是今天:

  • bash,,,,,,base-filescoreutilsdashglibcutil-linux 不应将文件从 移动//usr

    • 这些包的上传需要同步。

ls曾经是 中的“重要”命令的一部分,/bin而不是/usr/bin。现在/bin只是 的一个符号链接/usr/bin

$ ls -ld /bin /sbin
lrwxrwxrwx 1 root root 7 Nov 17  2020 /bin -> usr/bin
lrwxrwxrwx 1 root root 8 Nov 17  2020 /sbin -> usr/sbin

区别不是很明显。通常的PATH环境变量是(我稍微删减了一下):

$ printenv PATH
/usr/local/bin:/usr/bin:/bin

/usr/bin/ls/bin/ls即使两条路径都提供了该命令,也会先被发现。

然而,提供命令的软件包ls仍然将其安装/bin/ls在 Debian、Ubuntu 和 Linux Mint 中(后两者是前者的衍生产品)。最后,由于符号链接,它变成了/usr/bin/ls。因为:

$ dpkg -S /usr/bin/ls
dpkg-query: no path found matching pattern /usr/bin/ls
$ dpkg -S /bin/ls
coreutils: /bin/ls

因此,您必须在两个路径中搜索 中的任何命令/usr/bin。对于 、 也是如此/sbin/usr/sbin过去被认为足以将系统引导至 状态(如果需要可以挂载)的“基本”命令/usr最终会在/bin和中找到/sbin,其他命令则会在/usr/bin和中找到/usr/sbin

可以想象,在未来(尚不清楚)的 Debian、Ubuntu 和 Linux Mint 版本中,从 到 安装的各种软件包的同步移动//usr完成,dpkg -S /usr/bin/ls然后会产生结果而不是dpkg -S /bin/ls

答案2

dpkg -S /usr/bin/ls不起作用,因为ls命令是别名命令。要检查这一点,您可以使用以下命令:

$ type -t ls
alias

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
ls is /bin/ls

ls命令属于coreutils包含许多基本命令的包:

arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false flock fmt fold groups head hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir runco​​n sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink users vdir wc who whoami yes

dpkg -S将与以下对象配合使用:

$ dpkg -S /bin/ls
coreutils: /bin/ls

它与所有基本 Linux 命令(touch、、、等…… )mv的行为相同。cpmkdirdd

相关内容