我认为,如果您在 bash 中调用一个命令,则会在 $PATH 中设置的所有目录中搜索该命令。
(以 root 身份运行)
$ clamscan ./
-bash: /usr/bin/clamscan: No such file or directory
/usr/bin/ 中没有 clamscan,但在 /usr/local/bin/ 中(如果我从那里调用它可以工作):
$ ls -hail /usr/local/bin/
62259565 drwxr-xr-x 2 root root 4.0K Jul 21 14:19 .
62259561 drwxr-xr-x 11 root root 4.0K Apr 11 19:55 ..
62260816 -rwxr-xr-x 1 root root 1.1K Jul 21 14:19 clamav-config
62260819 -rwxr-xr-x 1 root root 75K Jul 21 14:19 clambc
62260817 -rwxr-xr-x 1 root root 79K Jul 21 14:19 clamconf
62260821 -rwxr-xr-x 1 root root 141K Jul 21 14:19 clamdscan
62260823 -rwxr-xr-x 1 root root 137K Jul 21 14:19 clamdtop
62260822 -rwxr-xr-x 1 root root 95K Jul 21 14:19 clamscan
62260818 -rwxr-xr-x 1 root root 148K Jul 21 14:19 freshclam
我从未更改过 $PATH。目录 /usr/local/bin/ 已声明。
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
如果我将文件从 /usr/local/bin/ 复制到 /usr/bin/,它就可以工作,但我想知道为什么 bash 似乎只询问这个目录。
答案1
Bash 保留了查找缓存PATH
。我推测您/usr/bin/clamscan
在 Bash 实例的生命周期内删除了缓存,因此该文件仍存在于其缓存中。使用以下hash
命令重建缓存:hash clamscan
仅针对一个名称或hash -r
清除缓存并重新开始。