Linux 命令速查
Shell内建 man hash

hash

bash 内建的命令路径缓存管理

返回

补充说明

hash 是 bash 的内建命令,用来查看和操作命令查找缓存。bash 第一次执行某个命令时会在 PATH 中搜索并记住其完整路径,后续调用直接命中缓存,省去重复查找。这个缓存就是 hash 表。

当你在当前会话中安装了新程序、移动了二进制文件或修改了 PATH,缓存可能仍指向旧路径,表现为“命令找不到”或执行了错误版本。此时用 hash -r 清空缓存即可,这也是最常见的用法。

注意:hash 只影响当前 shell 进程及其子 shell 的继承状态,不会改变系统范围;脚本中通常不需要关心它,因为非交互 shell 默认不启用或很快退出。command -v、type -a 用于查询,不会像 hash 那样维护缓存表。

语法

hash [-lr] [-p 路径] [-dt] [命令名...]

选项

  • 无参数:打印当前哈希表
  • -r:清空整个哈希表
  • -l:以可重新输入的格式列出,如 builtin hash -p /usr/bin/ls ls
  • -t 名称:显示某命令缓存的路径
  • -p 路径 名称:手工把名称映射到指定路径
  • -d 名称:删除某个命令的缓存项
  • -d(无参数):同 -r,清空

实例

# 查看当前缓存
hash

# 查询 ls 的缓存路径
hash -t ls

# 修改 PATH 或安装新命令后刷新缓存
hash -r

# 以可复现的格式导出缓存
hash -l

# 手工指定命令路径(临时覆盖 PATH 查找)
hash -p /opt/app/bin/tool tool

# 删除单个缓存项
hash -d git

# 验证命令实际解析位置
type -a python3
command -v python3

交互式 shell 中的 hash 表会随命令执行自动增长。若发现 bash: /usr/bin/foo: No such file or directory,优先尝试 hash -r,再检查 PATH 与文件是否真实存在。

参考链接