在Bash的缓存中遇到的问题
你好,我是Youril。如标题所示,我在Bash的缓存中遇到了一些问题,所以我将其作为备忘录记录下来。
总之了解到以下几点概括:
当更改命令并且路径改变时,Bash会缓存先前执行的命令的路径。因此,有时会引用旧路径并显示“找不到命令”的错误信息。
在这种情况下,可以使用以下两个命令来确认和删除Bash缓存,以确定问题是否源自缓存(路径无效等是另一个问题)。
- Bashのキャッシュを確認
$ hash
- Bashのキャッシュを削除
$ hash -r
以下是我上瘾的经历,只有对此感兴趣的人请阅读。
发生了什么事?
正在玩ansible时,发现正在使用的Python版本仍然是2.x系列,所以决定重新安装为3.x系列。
尽管成功删除了旧版本并安装了新版本,但在尝试确认版本时…
$ ansible-playbook --version
-bash: /usr/bin/ansible-playbook: そのようなファイルやディレクトリはありません
文件不存在…
另外,请尝试确认ansible的版本
$ ansible --version
ansible 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.6.8 (default, Apr 2 2020, 13:34:55) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
可以执行。
尝试确认每个命令的路径。
$ which ansible
/usr/local/bin/ansible
$ which ansible-playbook
/usr/local/bin/ansible-playbook
尽管在相同的路径下,ansible可以执行,但ansible-playbook却无法引用另一个路径并执行…
然而在这个时候,我并没有意识到缓存的存在,我错以为是“路径优先级的问题?但为什么每个命令都会有不同的结果呢?”因此我感到非常困惑。
我后来在一个网站上看到的情况几乎和上面的情况一样,所以我试着检查了缓存。
$ hash
hits command
5 /usr/local/bin/ansible
25 /usr/bin/ansible-playbook
...
我发现ansible被缓存在/usr/local/bin中,而ansible-playbook被缓存在/usr/bin中,它们引用了不同的路径。
当我使用hash -r命令清除缓存后,再次检查命令,我发现。
$ ansible-playbook --version
ansible-playbook 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
executable location = /usr/local/bin/ansible-playbook
python version = 3.6.8 (default, Apr 2 2020, 13:34:55) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
顺利执行了。
总结
尽管最终看了几个网站,发现缓存是原因,但我觉得除非有这样的机会,否则我完全不会意识到它,并且很快就会忘记,所以我简单总结了一下。
由于经常执行相同的命令,我意识到缓存容易利用,但同时也意识到如果出现问题会很麻烦(个人经验,经常遇到浏览器和其他缓存问题)。
感谢您一直阅读到最后。