【Linux】哈希表



前言

hash表,一个对用户执行的命令进行记录的信息表,有点像是缓存,便于系统后续能快速地调出相应命令。


一、简介

当刚开机时,hash表为空,每当执行过一条命令时,hash表就会记录下这条命令的路径,相当于缓存。

每个shell中hash表各自独立,即每当新开一个shell时,其hash表均为空,只有执行过命令后,hash表才会开始记录下这些命令的路径,包括这些命令的命中次数。

[root@asdfv ~]# hash
hits    command
   1    /usr/bin/ls
   1    /usr/bin/clear

第一次执行命令时shell解释器会默认从PATH环境变量的路径下寻找该命令的路径。
当第二次使用该命令时,解释器首先会查看hash表,没有该命令才会去PATH路径下查找。

hash表的主要作用:提高命令的调用效率。

二、常用选项

-l 显示hash表内容
-r 清除hash表
-d 删除表中某一条
-p 给定命令全路径,并起别名
-t 查看hash表中特定别名对应命令的路径

参数-l,会显示hash表中详细内容,包括命令的路径以及别名:

[root@asdfv ~]# hash
hits    command
   1    /usr/bin/ping
   4    /usr/bin/pgrep

# 参数-l,会显示包括shell的builtin命令hash、-p选项、命令的路径以及别名
[root@asdfv ~]# hash -l
builtin hash -p /usr/bin/ping ping
builtin hash -p /usr/bin/pgrep pgrep

清除hash表:

[root@asdfv ~]# hash -r
[root@asdfv ~]# hash
hash: hash table empty

清除完hash表之后,这边来给hash表手动添加一条记录。
使用-p选项,后跟命令的绝对路径,以及该命令的别名(这边取了bbs):

[root@asdfv ~]# hash -l
hash: hash table empty

# hash表中添加一条命令,且取别名为bbs
[root@asdfv ~]# hash -p /bin/ls bbs
[root@asdfv ~]# hash -l
builtin hash -p /bin/ls bbs

此时可通过别名(bbs)执行对应的命令(ls):

[root@asdfv ~]# bbs
anaconda-ks.cfg                     influxdb2-client-2.3.0-linux-amd64.tar.gz
ana.tar.xz                          pwd.txt
b.txt                               swap_file
customISO                           tardic
grafana-7.5.12-1.x86_64.rpm         telegraf-1.21.2-1.x86_64.rpm
influxdb2-2.1.1.x86_64.rpm          test-alias.txt
influxdb2-client-2.3.0-linux-amd64

查询hash表中别名为bbs的命令全路径:

[root@asdfv ~]# hash -t bbs
/bin/ls

# 根据别名df未找到未找到对应的命令,因为hash表里没有该条记录
[root@asdfv ~]# hash -t df
-bash: hash: df: not found

清除hash表中指定别名对应的命令:

[root@asdfv ~]# hash -l
builtin hash -p /bin/ls bbs
[root@asdfv ~]# hash
hits    command
   2    /bin/ls

# 清除hash表中指定别名对应的命令
[root@asdfv ~]# hash -d bbs
[root@asdfv ~]# hash -l
hash: hash table empty
[root@asdfv ~]# hash
hash: hash table empty

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值