hash -r命令解析

📅 2026/7/7 3:08:49
hash -r命令解析
目录为什么会有 hash 缓存hash -r 的作用常见使用场景场景 1安装新程序后提示命令不存在场景 2切换命令版本常见相关命令查看缓存列表查看某个命令的缓存路径删除单个命令缓存工作流程示意图一句话理解总结hash -r是 Unix/Linux Shell尤其是bash、zsh等中的一个命令用来清空命令路径缓存hash table。为什么会有 hash 缓存当我们执行一个命令时例如lsShell 并不会立即知道ls在哪里而是会按$PATH环境变量中的目录顺序依次查找echo$PATH示例输出/usr/local/bin:/usr/bin:/binShell 会按顺序搜索/usr/local/bin/ls /usr/bin/ls /bin/ls找到后它会把结果缓存起来ls → /usr/bin/ls这样下一次再执行ls时就不需要重新遍历整个$PATH执行效率会更高。查看当前命令缓存hash示例$hashhitscommand3/usr/bin/ls2/usr/bin/git1/usr/bin/python3其中hits命令被使用的次数command缓存的实际路径hash -r 的作用执行hash-r作用清空 Shell 的命令路径缓存重置 hash table。执行之后$hashhash:hashtable empty此时 Shell 再执行命令时会重新搜索$PATH。常见使用场景场景 1安装新程序后提示命令不存在例如复制了一个可执行文件sudocpmytool /usr/local/bin/然后执行mytool结果commandnot found原因可能是Shell 之前已经缓存过mytool → 不存在所以不会再次搜索。执行hash-r然后重新运行mytoolShell 就会重新扫描$PATH。场景 2切换命令版本假设原来whichpython输出/usr/bin/python后来安装了新版本/usr/local/bin/python并且$PATH已配置为/usr/local/bin:/usr/bin:/bin理论上应该优先使用/usr/local/bin/python但 Shell 可能仍然使用之前缓存的python → /usr/bin/python执行hash-r之后python就会重新查找并使用/usr/local/bin/python常见相关命令查看缓存列表hash查看某个命令的缓存路径hash-tpython示例$hash-tpython /usr/bin/python删除单个命令缓存hash-dpython作用删除 python 的缓存记录工作流程示意图第一次执行命令 输入python ↓ Shell 搜索 PATH ↓ /usr/local/bin /usr/bin /bin ↓ 找到/usr/bin/python ↓ 加入缓存 python → /usr/bin/python 第二次执行命令 输入python ↓ 直接使用缓存 ↓ python → /usr/bin/python 执行 hash -r 后 清空缓存 ↓ 再次执行命令 ↓ 重新搜索 PATH一句话理解可以把hash-r理解成让 Shell 忘掉以前记住的命令位置并重新查找。类似浏览器中的Ctrl F5区别在于浏览器刷新的是网页缓存hash -r刷新的是命令路径缓存总结命令功能hash查看当前缓存hash -r清空所有缓存hash -t cmd查看命令缓存路径hash -d cmd删除指定命令缓存实际开发中当你遇到新安装命令无法找到修改 PATH 不生效更换程序版本仍使用旧版本都可以先试试hash-r很多时候问题就解决了。