博文背景
如果一个命令在本地不存在,那么该知道它的归属并安装它的二进制包?
具体操作
在Ubuntu下默认应该是会有command-not-found的功能的,如果没有这个功能就用apt安装一下这个工具再exec bash
,这个工具能够在命令不存在时给你推荐该安装哪个二进制包,我记得有些精简版的Ubuntu系统比如docker还有lxc应该是没有安装这个玩意的需要手动安装一下,debian和kali默认应该也不具备这个功能,需要手动安装。
但是这个command-not-found用的本质又是apt里面的什么呢?本着溯源的精神我又探究了一波,读者应该使用sudo apt install apt-file
来安装apt-file然后update源,这样就可以使用这个来搜索想要的命令,但是一般情况下的搜索会很难找到你想要的东西因为不是根据命令精准匹配,这时候需要一定的搜索技巧,比如搜索java和ping,一般情况下直接执行的命令都是在PATH里面的某个bin目录下,所以我们搜索时带上bin目录,但是搜索java可能会出现javac搜索ping可能会出现ping6之类的造成干扰,这时候就需要使用grep来过滤了以java结尾就可以了,搜索出来的结果基本和command-not-found给出的结果应该是一致的,下面给出两个示范:
(base) ubuntu@debian:~$ java
Command 'java' not found, but can be installed with:
sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
(base) ubuntu@debian:~$ apt-file search /bin/java | grep /bin/java$
openjdk-11-jre-headless: /usr/lib/jvm/java-11-openjdk-amd64/bin/java
openjdk-8-jre-headless: /usr/lib/jvm/java-8-openjdk-amd64/bin/java
openjdk-8-jre-headless: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
这里的转义字符可能要注意具体我没仔细研究还有个叫apt-cache
的东西可能也可以搜索有兴趣的读者自己尝试一下。