当包管理器无法确定相应命令是从哪个包安装时,这意味着什么。
当我做 -
$ sudo dpkg -S /usr/bin/passwd
passwd: /usr/bin/passwd
从输出中,我可以推断它passwd
是从passwd
包中安装的
但对于像 - ftp
、bash
、cat
等少数命令ls
,源信息没有提供有关包的信息。以下输出适用于,但其他命令(如 、等)bash
的输出完全相同。ftp
cat
ls
$ sudo dpkg -S /usr/bin/bash
dpkg-query: no path found matching pattern /usr/bin/bash
所以,我很困惑上面的输出意味着什么。这些命令是否内置于 shell 或内核中(我认为情况并非如此,因为命令/utilsls
是cat
coreutils 包的一部分,并且 man ls 或 cat 确认了这一点。)
那么,包管理器是什么意思无法确定命令是从哪个包安装的。
观察笔记:
$ sudo apt list coreutils
Listing... Done
coreutils/focal,now 8.30-3ubuntu2 amd64 [installed,automatic]
和
apt show coreutils | grep -Ew "ls|cat"
提炼
具体来说,这个包包括:
arch base64 basename猫chcon chgrp chmod chown chroot cksum comm cp csplit 剪切日期 dd df dir dircolors dirname du echo env 展开 expr 因子 false 羊群 fmt 折叠组头主机 ID id 安装加入链接 ln 日志名LSmd5sum mkdir mkfifo mknod mktemp mv 不错 nl nohup nproc numfmt
编辑-遵循斯蒂芬斯的回应。 (也作为单独的问题发布 -如何在linux中有效追踪硬链接?
软链接更容易处理,但硬链接不容易追踪到原始文件 -
$ ll -i /usr/bin/bash /bin/bash
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /bin/bash*
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /usr/bin/bash*
以上符合预期 - 酷
$ find / -samefile /bin/bash 2>/dev/null
/usr/bin/bash
再次符合预期 - 所以没有问题
find / -samefile /usr/bin/bash 2>/dev/null
/usr/bin/bash
这是不是凉爽的。现在我如何跟踪 org 文件
奇怪 - 下面也没有帮助。
$ find / -inum 1310813 2>/dev/null
/usr/bin/bash
答案1
dpkg-query: no path found matching pattern /usr/bin/bash
意味着没有包裹/usr/bin/bash
(直接)运送。dpkg -S
搜索已发货的包内容,忽略替代项、符号链接等。
dpkg -S /bin/bash
会找到包裹,因为它发货了/bin/bash
。
也可以看看:
$ dpkg -L bash|grep bin/bash
/bin/bash
/usr/bin/bashbug
这同样适用于cat
和ls
— 它们以/bin
.在这种情况下查找命令的最佳方法是查找前缀为 的命令bin/
:
$ dpkg -S bin/bash
bash: /usr/bin/bashbug
bash: /bin/bash
ftp
是但/usr/bin
它是一个替代方案;要找到它,请使用readlink
:
$ dpkg -S $(readlink -f /usr/bin/ftp)
ftp: /usr/bin/netkit-ftp