在Linux中使用hash命令
Linux中的hash命令可以让你快速获取当前会话中执行的命令列表。
大多数 Linux 用户使用 History 命令来获取以前使用过的命令的列表,但这不是唯一的方法。
您可以使用 hash 命令,它比历史命令要快得多,并且显示命令的完整路径(存储命令的位置)。
因此,在本教程中,我将引导您了解如何使用 hash 命令。
但在此之前,我们先来看看它与历史命令有什么不同。
历史和哈希的区别
使用 hash 和 History 命令的总体目的是不同的。
当您执行 hash 命令时,它将显示以前执行过的命令的列表,但仅限于当前 shell 会话,因为它将数据存储在哈希表中。
另一方面,历史命令则没有这样的限制,因为它将以前执行的命令存储在 bash_history 文件中。
使用哈希命令的主要优点是它从哈希表中获取数据,与历史命令相比,这最终减少了响应时间。
使用 hash 命令的一大缺点是它不包含内置的 bash 命令,如 echo、cd 等,因此您无法获得先前命令的完整列表。
而历史命令将包括列表中的每个命令、函数和可执行文件。
这就提出了一个问题。你真的应该使用它吗?好吧,如果您正在处理多个 shell 会话并希望独立处理它们,并且响应时间也很重要,那么 hash 命令对您来说是一个不错的选择。
如何使用哈希命令
要学习任何命令的使用,首先了解命令语法是一个好主意,这就是我从 hash 语法开始的原因:
hash [options] [command]
这里,
[options]
用于根据您的喜好更改哈希命令的默认行为,例如清除哈希表。[command]
是您输入要进行哈希处理或取消哈希处理的命令名称的位置。简单来说,您要从哈希表中添加/删除的命令的名称。
现在,我们来一一看一下 hash 命令的使用示例。
1. 访问哈希列表
要访问哈希列表,您只需执行不带任何选项的 hash
命令,如下所示:
hash
如果您在当前 shell 中使用了多个命令,它将显示先前命令的列表:
您会看到两列:点击次数和命令。这里,点击数列将显示该命令的使用次数,而命令列将显示该命令的路径。
但是,如果您在新的 shell 会话中执行 hash 命令,它将显示以下命令:
您还可以使用 type 命令单独检查命令是否经过哈希处理:
type <command>
例如,在这里,我检查了 whoami 命令是否经过哈希处理:
type whoami
如果命令未经过哈希处理,则会显示不同的输出:
2.向哈希表添加命令(不执行)
要将一个或多个命令添加到哈希表,您所要做的就是将命令名称附加到哈希命令,如下所示:
hash command1 command2 command3 commandN
例如,在这里,我向哈希列表添加了 3 个命令:
hash neofetch apt topgrade
我相信您一定想知道为什么上图中的零被突出显示。如果您还记得的话,点击次数列显示了该命令的执行次数。
但由于我添加了命令但没有执行它们,所以这里显示为 0。
3.从哈希表中删除条目
如果要从哈希表中删除命令条目,您所要做的就是使用 -d
标志,后跟一个或多个命令名称,如下所示:
hash -d command_1 command_2 command_3
如果我想从哈希表中删除 xargs 和 grep 命令,那么我将使用以下命令:
hash -d xargs grep
4.重置哈希表
要重置哈希表,您所要做的就是在 hash 命令中使用 -r
标志:
hash -r
5. 设置重命名命令的路径(某种)
这类似于设置别名,您可以在其中执行具有不同名称的命令。
使用 hash 命令,您可以给出命令的路径并使用不同的名称来触发命令。
让我举一个例子。
您可以使用 date 命令来了解当前日期,但如果您执行 d
而不是 date
,则会出现错误:
所以我希望用d
来执行日期命令。
首先,您必须知道要重命名或创建替代命令的路径:
type <command_name>
一旦知道路径,请将其与 hash 命令一起使用,如下所示:
hash -p /path/to/command <renamed-command>
由于我想在执行d
时执行日期命令,所以我使用了以下命令:
hash -p /usr/bin/date d
就这样吧!
我对历史与哈希的看法
我个人使用历史命令,因为我可以牺牲一点速度(甚至不明显),并且它还可以存储内置命令以及脚本执行。
历史命令也是可定制的,因为您可以决定可以存储多少命令,并且还可以轻松执行以前使用过的命令。
让我知道你对此有何看法。
如果您仍有任何疑问,请随时发表评论。