Linux中的历史记录命令(重击历史记录)
如果您在命令行上花费大量时间,则查看以前运行的命令的历史记录可能是一项有用的功能,可以使您的日常工作更加轻松并提高生产率。
在本文中,我们将讨论 history
命令,您可以查看以前执行的命令的列表,在列表中搜索以及操作历史记录文件。
使用 history
命令和历史扩展
history
是内置的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
显示屏幕上不适合的多行输出。 要一次查看输出一页,请将其通过管道传送到诸如 more
要么 less
命令:
history | less
显示最后一个 n
行,将数字作为参数传递给命令。 例如,要仅查看历史记录列表的最后五行,请输入:
history -5
使用 up
和 down
箭头键浏览列表中的条目。 当显示您搜索的命令时,请按 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)`':
外壳将显示一条匹配的行。 要移至下一个匹配的建议,请按 Ctrl-R
再次。
查看Bash手册,以获取有关历史记录扩展,修饰符和指示符的更多信息。
保存历史记录列表
默认情况下,启动新会话时,Bash会从 .bash_history
文件。 当前会话中执行的命令列表保留在内存中,并在会话关闭时保存到文件中。
如果打开了多个Shell会话,则仅保存最后关闭的会话的历史记录。
的 -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
修改历史记录行为
可以使用几个不同的环境变量来定义Bash历史记录的行为。 修改历史记录行为时,请在以下位置设置变量 ~/.bashrc
或用户登录时加载的任何其他配置文件。
默认情况下,Bash在命令历史记录列表中保留500行。 的 HISTSIZE
变量允许您更改此值。 要将其设置为10000,请将以下行添加到您的 .bashrc
文件:
HISTSIZE=10000
的 HISTCONTROL
变量接受用冒号分隔的值列表,这些值定义了如何在历史记录列表中保存命令:
ignorespace
-以空格开头的命令不会保存在历史记录列表中。ignoredups
-不保存重复的命令。ignoreboth
-是简写,包括两者ignorespace
和ignoredups
。
HISTCONTROL=ignoreboth
当。。。的时候 HISTTIMEFORMAT
设置了变量之后,Bash在每行上为命令添加执行时间戳。
例如,如果您设置:
HISTTIMEFORMAT="%F %T: "
历史记录将以以下格式显示:
413 2019-10-27 21:13:07: sudo nano /etc/hosts
结论#
的 history
命令显示以前执行的命令的列表。 例如,您可以使用历史记录来查看您之前忘记的长命令。
如果您有任何疑问或反馈,请随时发表评论。
历史终端