UOS服务器企业版系统根据命令名查找提供此命令的包的解决方案
应用场景
OS版本信息:服务器企业版及桌面专业版等以dpkg和apt进行包安装管理的系统
场景需求:用户在使用某个命令的时候发现系统中找不到这个命令,需要知道这个命令是由哪个包提供的,以便于安装
需求分析
针对上述场景需求,这里整理了如下两种情况
情况一:如已知命令为nc,且系统中有此命令,用户想要知道这个命令是哪个包提供的,以便于在其他机上安装这个包来使用此命令
情况二:如已知命令为nc,但是当前系统中没有此命令,用户想要知道需要安装哪个包才能使用这个命令
解决方案
以下就以查找nc命令所在的包为例进行说明
-
方案1 仅可用于情况一(如是情况二,请使用方案2)
1 查找命令的绝对路径
执行type nc查到命令所在的绝对路径2 查看上述绝对路径中的文件是否是链接文件,以找到真正的可执行文件
file /usr/bin/nc
发现此文件是链接文件,对链接到的文件使用file继续查找,直到类型不再是链接类型3 使用dpkg -S nc |grep bin/nc #因为系统中可执行的命令大多都在bin或sbin目录下,所以筛选的时候使用grep bin/nc
执行后发现有多个结果,在结果中查找第2步最后找到的文件,冒号前面的名称即为要找的包名如图netcat-openbsd就是要找的包名
-
方案2 需求中的两种情况都适用
1 查找命令的绝对路径
执行type nc查到命令所在的绝对路径2 查看上述绝对路径中的文件是否是链接文件,以找到真正的可执行文件
file /usr/bin/nc
发现此文件是链接文件,对链接到的文件使用file继续查找,直到类型不再是链接类型3 安装apt-file包
sudo apt install apt-file4 更新apt-file数据
apt-file update5 使用apt-file search 命令进行查找
apt-file search nc.openbsd如图所示,也能查到netcat-openbsd就是要找的包名
方案3:
在debian系统中,类似centos的yum whatprovides这条查询系统中某个命令属于哪个安装包的命令我一般用以下两种方法。
第一种,查本机已经存在的命令属于哪个包,
比如我要查netstat命令属于哪个安装包就执行dpkg -S bin/netstat
-S后面的内容会自动在前后补星号的
第二种,查本机没有的命令又不知道要安装哪个包的情况,这在最小化安装的debian系统里尤其有用。同样还是以查询netstat命令所在包为例。走下面这串儿
apt install -y apt-file && apt-file update && apt-file search netstat |grep bin
然后你会看到那么几行。从列出来的包名和后面的绝对路径可以判断出应该安装的是net-tools包,所以执行apt install -y net-tools
如果还是没有办法判断出来,可以结合apt list |grep 你所看到的一些拿不准的包名看看具体的介绍。甚至把你觉得有点像的都装上。