我已经编译了一个名为xxx的包。现在我已删除与xxx相关的文件并使用存储库进行安装。但是如果我输入命令[root]$ xxx
,则会出现以下消息
-bash: /usr/local/bin/xxx: No such file or directory
如果我尝试,[root]$/usr/bin/xxx -v
它就可以正常工作。我想更改安装位置。或者我想创建一个/usr/bin/
指向的符号链接/usr/local/bin/xxx
答案1
为了加快路径名查找速度,shell 会保留一个内部缓存,将命令的短名称映射到其完整路径名。您可能在这里遇到这种情况。
您可以发出以下命令来检查程序当前的缓存路径:
hash -t xxx
这将指向现在丢失的可执行文件。您可以使用以下命令清除特定名称的缓存:
hash -r xxx
请注意,此问题只会影响在旧位置执行该命令的 shell 会话。任何新的 shell 会话都应具有清除的查找缓存并按预期找到该命令。
答案2
不,你不想做任何这些事情。让我来解释一下原因:
/usr/bin
是安装来自存储库的应用程序的位置。
/usr/local/bin
是默认安装已编译应用程序的位置。
当你make && make install
一个应用程序时,你将需要覆盖存储库应用程序,因此/usr/local/bin
已经在你$PATH
和它先于 /usr/bin
因此它被首先执行。
如果您输入它,which xxx
它仍会输出,/usr/local/bin/xxx
因为它仍然在您安装它的地方。问题rm $(which xxx)
甚至更好,再次编译应用程序,但这次make uninstall
以 root 身份发出。