myfreax

Linux History 历史命令

如果您在命令行用户,查看以前运行的命令的历史记录一项有用的功能,可提高效率

5 min read
By myfreax
Linux  History 历史命令
Linux History 历史命令

如果您在命令行用户,查看以前运行的命令的历史记录可能是一项有用的功能,可以使您的日常工作更加轻松并提高生产率。

在本教程中,我们将讨论 history  命令, history 命令使您可以查看以前执行的命令的列表,在列表中进行搜索以及操作历史记录文件。

使用 history 命令和历史记录扩展

history 是 shell 内置的命令,每个 shell 的行为可能略有不同。我们将介绍的 Bash内置版本的 history

以最简单的形式,当不带任何选项或参数的情况下调用时,history 命令显示带有行号的整个历史记录列表。

history
...
467  git push
468  tail -f var/logs/error
469  nano +22,5 functions.sh
470  source project-env/bin/activate
471  history

键入 !n 将运行历史记录列表中的第 n 条命令,而 !-n 则将命令 n 行退回。在以下示例中,我们在第 467 行执行的命令:

!467

执行命令的另一种方法是使用 !word 扩展。 word 是指以 word 开头的最新命令。

通常,history 命令会在屏幕显示多行输出。要一次查看输出的一页,请将其通过管道传送到诸如 moreless 命令中:

history | less

要显示最后 n 行,请将数字作为参数传递给命令。例如,要仅查看历史记录列表的最后五行,请运行以下命令:

history -5

使用 updown 箭头键浏览列表中的条目。显示搜索到的命令后,按 Enter 执行。

键入 !! 执行上一条命令:

!!

当您忘记在命令中附加 sudo 时,这非常有用,您可以键入以下命令来代替重新键入命令:

sudo !!

!-1!! 相同,并执行历史记录列表中的最后一个命令,!-2 倒数第二个,依此类推。

^word1^word2^ 扩展允许您重新运行最后一个命令,将 word1 替换为 word2。如果您不小心输入了sduo command 而不是 sudo command,则可以使用正确的单词重复以下命令:

^sduo^sudo^

使用grep 命令来过滤输出。例如,要查看包括 nano 的所有命令,请运行:

history | grep nano
302  sudo nano /etc/resolv.conf
356  nano setup.py
413  sudo nano /etc/hosts
469  nano +22,5 functions.sh

现在,如果您想重新运行 nano setup.py 命令,只需键入以下命令:

!356

搜索命令历史记录的另一种方法是 Ctrl-R。提示将变为以下内容,您可以开始搜索先前执行的命令。

(reverse-i-search)`':

shell 将显示一条匹配线。要移至下一个匹配的建议,请再次按 Ctrl-R 。请阅读 Bash 手册,以获取有关历史扩展,修饰符和指示符的更多信息。

保存历史记录列表

默认情况下,启动新会话时,Bash 从 .bash_history 文件中读取历史记录列表。在当前会话中执行的命令列表保留在内存,并在会话关闭时保存到文件。

如果您打开了几个 Shell 会话,则仅保存最后关闭的会话历史记录。history 命令的 -a 选项可让您将当前会话历史记录列表保存到 .bash_history 文件:

history -a

-w 选项将完整的历史记录列表写入历史记录文件。

history -w

清除历史记录

history 命令允许您清除完整的历史记录列表或删除某些部分。要清除历史记录列表,请使用 -c 选项:

history -c

要从历史记录列表中删除起点和终点之间的一条或多条命令,请使用 -d 选项。例如,要删除 365 和 375 之间行(包括那些行),请运行以下命令:

history -d 365 375

​​如果仅向 -d 选项提供一个数字,则命令将删除指定的行。如果使用负整数,则从历史记录列表的末尾开始倒数。

上面的命令清除历史记录列表,该列表保留在内存,但不会从磁盘上的 .bash_history 文件中删除。要清除文件记录,您需要将历史记录列表写入文件:

history -c
history -w

修改 History 配置

可以使用几个不同的环境变量来定义 Bash 历史记录的行为。修改 history 命令行为时,请在 ~/.bashrc 或用户登录时加载的其他配置文件中设置变量。

默认情况下,Bash 在命令历史记录列表中保留 500 行。 HISTSIZE 变量允许您更改此值。要将其设置为 10000,请在 .bashrc 文件中添加以下行:

HISTSIZE=10000

HISTCONTROL 变量接受用冒号分隔的值列表,这些值定义如何在历史记录列表中保存命令。ignorespace 以空格开头的命令不保存在历史记录列表。

ignoredups 不保存重复的命令。ignorebothignorespaceignoredups 的简写。

HISTCONTROL=ignoreboth

设置 HISTTIMEFORMAT 变量后,Bash 为每行命令的执行加上时间戳。

例如,如果您设置:

HISTTIMEFORMAT="%F %T: "

历史记录将以以下格式显示:

413  2019-10-27 21:13:07: sudo nano /etc/hosts

结论

history 命令显示以前执行的命令的列表。例如,您可以使用历史记录来查看您曾经忘记的长命令。

如果您有任何问题或反馈,请随时发表评论。