Debian如何定位到命令所在的包

人生必须的知识就是引人向光明方面的明灯。这篇文章主要讲述Debian如何定位到命令所在的包相关的知识,希望能为你提供帮助。
用过Centos的应该都知道,如果我们想知道某个命令是由哪个包提供的,可以通过yum provides commandname来查询到对应的安装包。那么,在Debian里,是否也可以做类似的操作呢?答案是当然可以,不过要比Centos麻烦些。
就以我现在用的Debian/Deepin/Uos为例,我现在想知道nc命令所在的包,方便在另一台没有nc命令的电脑上安装对应包以使用nc命令。
首先,通过whereis确定nc相关命令或文件所在的位置。
我们看下whereis nc返回的结果

lcz@lcz-PC:~/Desktop$ whereis nc
nc: /usr/bin/nc /usr/bin/nc.openbsd /usr/share/man/man1/nc.1.gz
lcz@lcz-PC:~/Desktop$

这里可以看到/usr/bin/nc.openbsd,这个文件带.openbsd看起来有点奇怪,其实这个是可执行命令和nc命令是一样的功能。实际我们这里的nc命令使用的包也是带openbsd的,这里特意说明下,不知道是不是Uos版本特意独行用的这个包。我们来看下Redhat的nc命令所在的包,可以发现,包的命令规则也是不一样的,看起来是Redhat的包名比较简单明了,至于Uos为什么用待openbsd的包名,这个我们暂时不深究。

接着通过dpkg-query确定都有哪些包提供nc相关的命令或者文件。为什么是grep bin/nc?这个算是一个小技巧吧,因为常见的命令默认安装位置一般是在/bin/、/sbin/、/usr/bin/、/usr/sbin/这些目录下,为了提高过滤准确度,我就采用了其中的固定部分路径bin/再加上nc这个命令,不然只grep nc还是会返回很多结果
lcz@lcz-PC:~/Desktop$ dpkg-query -S nc|grep bin/nc
libncurses-dev:amd64: /usr/bin/ncurses5-config
bsdmainutils: /usr/bin/ncal
libncurses-dev:amd64: /usr/bin/ncursesw6-config
libncurses-dev:amd64: /usr/bin/ncurses6-config
libncurses-dev:amd64: /usr/bin/ncursesw5-config
netcat-openbsd: /bin/nc.openbsd
lcz@lcz-PC:~/Desktop$

可以看到,dpkg-query返回的结果里,最有可能的就是最后一个netcat-openbsd包
做了一下测试,卸载netcat-openbsd后,就无法找到nc命令。重新安装netcat-openbsd后,nc命令即可正常使用

【Debian如何定位到命令所在的包】


    推荐阅读