linux命令执行遵循环境变量PATH中的路径,但是有时我们会发现这种现象:

# mv /sbin/ls /bin/
[root@xx~]# ls /tmp/
-bash: /sbin/ls: No such file or directory

/sbin和/bin同样是PATH环境变量中的搜索路径,但是移动之后却发现不了命令,这是因为,命令在上次执行之后以key-value形式缓存:

[root@xx~]# hash
hits	command
   2	/bin/mv
   1	/bin/cp
   2	/sbin/ls                    #缓存的命令执行路径

那如果让次命令执行成功呢?

[root@xx~]#hash -d ls   #清除命令缓存
[root@xx~]# ls /tmp/
[root@xx~]# echo $?
0

如果清除全部命令缓存,请用命令:

[root@xx~]#hash -r