使用history命令可以使工作更高效。
随着我使用终端的时间越来越多,我一直在寻找一些能让我提高效率的命令。history 是一个可以改变我日常工作的命令。
history 命令保存了从终端会话开始后的所有其他命令的列表,允许你重新使用这些命令,而不是再次输入。如果你是一个经验丰富的终端用户,那么你应该知道 history,但是对于一些新的系统管理员来说,history是一个可以产生即时效益的工具。
首先,history 命令实际上不是一个真正的命令。你可以通过在系统中查找命令来验证这一点:
$ which historywhich: no history in (/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/local/sbin)
你会看到在计算机中找不到 history 命令,因为它是 shell 的一个内置关键字。也正是因为它是写在 shell 中的,所以根据你使用的是 Bash, tcsh, Zsh, dash, fish, ksh 等等,history 会有一些不同。本文是基于Bash来描述的,因此某些函数可能无法在其他 shell 中工作。但大多数的基本功能是相同的。
history 101
要查看 history 历史记录,在linux系统中打开终端,然后输入:
$ history
你会看到:
clearls -alsudo dnf update -yhistory
history 命令显示你启动终端会话以来所输入的命令列表。有意思的是,你可以使用以下命令来重新调用列表中的任何一个(历史命令):
$ !3
这个 !3 命令是告诉 shell 执行历史记录表中的第三行命令。此外也可以通过输入以下命令来访问该命令:
$ !sudo dnf
这个是让 history 搜索与你提供的表达式相匹配的最后一个命令(在上面这个例子中,这个表达式是dnf)并运行它。
查找 history
你还可以使用 history 来重新运行上次输入的命令,方法是键入:!!. 通过将它与 grep 配对,可以搜索与文本模式匹配的命令,或者通过将它与 tail 一起使用,可以找到最后执行的几个命令。例如:
$ history | grep dnf3 sudo dnf update -y5 history | grep dnf$ history | tail -n 34 history5 history | grep dnf6 history | tail -n 3
获取此搜索功能的另一种方法是键入 Ctrl-R 以调用对命令历史记录的递归搜索。键入后,提示变为:
(reverse-i-search)`':
这样你可以通过点击回车(Enter)或者回退(Return)来选择匹配的命令。
修改和执行命令
你还可以通过 history 来修改命令以返回一个新的命令。比如我想要将 history | grep dnf 改为 history | grep ssh, 可以执行以下命令:
$ ^dnf^ssh^
命令将被执行,但会以ssh来替换dnf,也就是说,会执行以下命令:
$ history | grep ssh
删除 history
有时候你可能会要删除部分或者所有的历史命令。如果要删除部分历史命令,使用 history -d <line number>, 如果要清除所有的历史记录,可以执行 history -c.
history列表存储在一个用户可以修改的文件中。Bash用户可以在你的home路径中找到它,文件名是.bash_history.
其他
你还可以用 history 来做一些其他事情:
将 history 缓冲区的大小设置为某一数值;
记录历史记录中每一行的日期和时间;
阻止某些命令被记录在 history 记录中。
有关 history 命令的其他信息或者有意思的用法,可以看一下 Seth Kenlon 关于parsing history, history 搜索修饰符的文章,或者 GNU Bash 的操作手册。
本文作者:Steve Morris,翻译:GLIU
原文地址:https://opensource.com/article/18/6/history-command




