/usr/local/bin 中的二进制文件

/usr/local/bin 中的二进制文件

我查看命令位于何处:

xxx:~/mono/mono-2.6.7$ which mono
/usr/local/bin/mono

如果我直接执行,没有问题:

xxx:~/mono/mono-2.6.7$ /usr/local/bin/mono -V
Mono JIT compiler version 2.6.7 (tarball Mon Aug  2 16:01:50 UTC 2010)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
....

但是如果我执行没有路径的命令,它就找不到它:

xxx:~/mono/mono-2.6.7$ mono
bash: /usr/bin/mono: No such file or directory

/usr/bin 中没有 mono 文件:

xxx:~/mono/mono-2.6.7$ ls -l /usr/bin/mono
ls: cannot access /usr/bin/mono: No such file or directory

这是我的路径:

xxx:~/mono/mono-2.6.7$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

它不是搜索每个以冒号分隔的目录吗?那么它不应该在 /usr/local/bin 中找到 mono 吗?

如果我以 root 身份登录,它就可以正常工作。我可以在命令行上执行 mono,它会找到它。权限如下:

xxx:~/mono/mono-2.6.7$ ls -l /usr/local/bin/mono
-rwxr-xr-x 1 root root 8452592 2010-08-02 16:23 /usr/local/bin/mono

我使用的用户不属于正确的组吗?

答案1

Bash 在内存中保留命令位置的缓存,这样它就不必在每次启动命令时都进行整个 PATH 探索。在最初的 bash 会话中,bash 之前已记住了mono/usr/bin/mono然后您删除/usr/bin/mono并添加了/usr/local/bin/mono,但正在运行的 bash 的缓存中仍保留了旧位置。

您可以使用内置命令来操作命令位置缓存hash。特别是hash -r清除缓存。

which是一个外部命令,因此它不使用 bash 的缓存,并且每次都会执行 PATH 查找。您也可以使用type,它是内置命令,因此会使用查找缓存。

答案2

也许你有一个别名是否已为 mono 定义?检查主目录中的以下文件:.bashrc。轮廓。登录或者.bash_配置文件

...不包含这样的内容

 alias mono="/usr/bin/mono"

这也可以位于在 /etc/bashrc 中或者/etc/配置文件

命令别名显示所有当前定义的别名。

答案3

我退出后重新登录,一切正常。我肯定做了什么蠢事。但是,一切正常!

相关内容