hash命令:显示、添加或清除哈希表

1.linux系统下的hash指令
说明:
linux系统下会有一个hash表,当你刚开机时这个hash表为空,每当你执行过一条命令时,hash表会记录下这条命令的路径,就相当于缓存一样。第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当你第二次使用该命令时,shell解释器首先会查看hash表,没有该命令才会去PATH路径下寻找。


hash表的作用:大大提高命令的调用速率。

语法

hash [-lr] [-p pathname] [-dt] [name ...]
语法中的name就是每个命令的名称,例如:ls、grep、cat等。

 

选项与示例

当不使用任何选项和参数的时候,hash命令可以输出当前所记住的命令以及其缓存命中次数。

一开始没有执行外部命令的时候,hash是空的。

[root@C7 ~]# hash
hash: hash table empty

执行了几个命令之后。如果某些命令有重复执行,那么命中数会大于1。

[root@C7 ~]# hash
hits    command
   1    /usr/bin/grep
   1    /usr/bin/tail
   1    /usr/bin/head
   2    /usr/bin/ls

-d:删除已记住的命令的路径。

 

[root@C7 ~]# hash
hits    command
   1    /usr/bin/grep
   1    /usr/bin/ls
[root@C7 ~]# hash -d grep
[root@C7 ~]# hash
hits    command
   1    /usr/bin/ls

 

-l:也是输出当前缓存中的内容,只不过输出的格式可用于输入或者再执行。

[root@C7 ~]# hash -l
builtin hash -p /usr/bin/ls ls

-p pathname:为某个命令手动设置路径。一般用于当命令的位置发生改变的情况。若出现该情况也可以使用-d删除缓存再重新执行一遍。

注意:如果指定了一个错误的路径的话,那么命令就无法使用了,如下所示。

 

[root@C7 ~]# hash -p /tmp/grep grep
[root@C7 ~]# hash
hits    command
   0    /tmp/grep
   0    /usr/bin/tail
[root@C7 ~]# grep 'root' /etc/passwd
-bash: /tmp/grep: No such file or directory

 

-r:清空缓存列表。


[root@C7 ~]# hash
hits    command
   1    /usr/bin/sort
   1    /usr/bin/cat
   1    /usr/bin/ls
[root@C7 ~]# hash -r
[root@C7 ~]# hash
hash: hash table empty

 

-t:显示在缓存中,命令的对应路径。命令不在缓存中则会报错。

[root@C7 ~]# hash
hits    command
   1    /usr/bin/head
   1    /usr/bin/du
   1    /usr/bin/cat
   1    /usr/bin/less
   1    /usr/bin/ls
[root@C7 ~]# hash -t ls
/usr/bin/ls
[root@C7 ~]# hash -t less
/usr/bin/less
[root@C7 ~]# hash -t ls less grep
ls    /usr/bin/ls
less    /usr/bin/less
-bash: hash: grep: not found

 

hash name:如果仅带参数不带选项的话,hash可用于清空具体命令的缓存命中次数。这个功能是不小心发现的,在“help hash”中并无说明。

 

[root@C7 ~]# hash
hits    command
   1    /usr/bin/head
   5    /usr/bin/wc
[root@C7 ~]# hash wc
[root@C7 ~]# hash
hits    command
   1    /usr/bin/head
   0    /usr/bin/wc

 

Logo

更多推荐