一、hash表概述
在 Linux 系统第一次执行外部命令时,hash 缓存表是空的;
这时,系统会先从 PATH 路径下寻找命令,找到后会将路径加入到 Hash 缓存中;
当再次执行此命令时,会直接从 hash 表的路径下执行;
如果存在则直接执行,如果不存在将继续从 PATH 下的路径查找;
因此,hash 表可以提高命令的调用速率。
二、hash缓存表的位置
在 Linux 系统上执行命令,有个执行优先级,hash缓存表的位置如下:
alias -------------------------------------别名
builtin------------------------------内部命令
hash-------------------------缓存表
$PATH---------------可执行程序或脚本(外部命令)
关于 Linux 内部命令和外部命令的区别,有兴趣可以戳 《 Linux 内部命令 和 外部命令 》 了解。
三、hash命令使用简介
hash
命令,可以用来显示和配置 hash缓存表;
执行命令的时候,系统将先查询 hash缓存表。
hash
命令主要参数:
-l 显示哈希表所有的项目
-r 清除哈希表所有项
-d <名称> 删除哈希表其中的一项
-p <路径> 向哈希表中增加一项内容,添加后就可以使用了
-t <命令> 显示hash表中命令的完整路径,如果没有就会报not found错误
四、hash命令用法示例
:~> bash # 进入一个全新的 shell
:~> hash
hash: hash table empty # 由于是新建 shell,所以hash表为空,符合预期
:~> ls -l
:~> hash
hits command
1 /usr/bin/ls
:~> top
:~> hash
hits command
1 /usr/bin/ls
1 /usr/bin/top
:~> uptime
17:56:40 up 1138 days, 7 min, 1 user, load average: 0.47, 0.36, 0.28
:~> hash # 可以看到hash表在不断更新
hits command
1 /usr/bin/uptime
1 /usr/bin/ls
1 /usr/bin/top
:~> hash -l
builtin hash -p /usr/bin/uptime uptime
builtin hash -p /usr/bin/ls ls
builtin hash -p /usr/bin/top top
:~> hash -p /tmp/mydate date # 手动添加hash表
:~> hash -l
builtin hash -p /usr/bin/uptime uptime
builtin hash -p /tmp/mydate date # 添加成功
builtin hash -p /usr/bin/ls ls
builtin hash -p /usr/bin/top top
:~> date
bash: /tmp/mydate: No such file or directory # 由于手动添加的hash表指向执行文件不存在,所以报错,这说明新增的hash表确实在work
:~> hash -d date # 手动清楚刚加的hash表,使用 -r 则全部清除
:~> hash -l
builtin hash -p /usr/bin/uptime uptime
builtin hash -p /usr/bin/ls ls
builtin hash -p /usr/bin/top top
:~> date # 恢复
Sun Jan 19 18:02:45 CST 2020