hash
hash命令负责显示与清除命令运行时系统优先查询的哈希表(hash table)。
linux系统下会有一个hash表,每个SHLL独立,当你新开一个SHELL的时候,这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找。
当系统刚刚开启的时候,哈希值为空
[root@linus ~]# hash
hash: 哈希表为空
hash表的作用:大大提高命令的调用速率。
语法
hash 【选项】 【参数】
选项
-d:在哈希表中清除记录
-l:显示哈希表中的命令
-p:<指令> 将具有完整路径的命令加入到哈希表中
-r:清除哈希表中的记录
-t:显示哈希表中命令的完整路径
常用实例
当使用了一条ls命令之后,再次使用hash或hash -l查看哈希表
[root@linus ~]# hash
命中 命令
1 /usr/bin/ls
查看hash表中命令的路径
注:若无对应的命令记录,则无法查询命令路径
[root@linus /]# hash -t ls
/usr/bin/ls
将命令改名使用
[root@linus /]# hash -t ifconfig
/usr/sbin/ifconfig
[root@linus /]# hash -p /usr/sbin/ifconfig ens33 #添加ifconfig命令更名记录
[root@linus /]# ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.123 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::3862:c096:ecb8:495b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:2d:ba:9a txqueuelen 1000 (Ethernet)
RX packets 1105 bytes 94846 (92.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 659 bytes 86743 (84.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
.....
删除哈希表其中一条记录
[root@linus /]# hash
命中 命令
1 /usr/sbin/ifconfig
[root@linus /]# hash -d ifconfig
[root@linus /]# hash
hash: 哈希表为空
清除哈希表记录
[root@linus /]# hash -r
[root@linus /]# hash
hash: 哈希表为空