我如何覆盖 /bin 和 /usr/local/bin 路径之间的优先级?

我如何覆盖 /bin 和 /usr/local/bin 路径之间的优先级?

今天我想运行ss -tpla命令来查看网络连接,令我惊讶的是,我得到了。然后我检查了命令error: unknown option -t的位置:ss

 ~$ whereis ss
 ss: /bin/ss /usr/local/bin/ss /usr/share/man/man8/ss.8.gz

如您所见,我有两个ss命令,一个在/bin/ss,另一个在/usr/local/bin/ss

我可能将另一个同名的应用程序从源代码安装到了/usr/local/bin/ss。我不记得它是什么时候使用的,但它不是我想要运行的命令。奇怪的是,当我运行

 ss -tpla  

它将命令重定向到/usr/local/bin/ss 我可以使用以下方式运行实际ss命令

 /bin/ss  -tpla

我认为/bin它比其他路径优先。

我的问题是什么决定了系统路径的优先级以及我如何覆盖它们。

答案1

您可以/bin/ss通过创建符号链接来赋予优先级。

sudo mkdir /opt/ss
sudo ln -s /bin/ss /opt/ss/

并添加/opt/ss到你的路径中 /usr/local/bin

export PATH=/opt/ss:$PATH
$ echo $PATH
/opt/ss:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

为了使此永久生效,请添加到~/.profile

PATH=/opt/ss:$PATH

答案2

你的 PATH 确实如此。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/games:/usr/local/games

请不要只更改路径(它可能会更改的不仅仅是“ss”)。使用

/bin/ss  -tpla

相关内容