云网牛站
所在位置:首页 > Linux命令 > 使用History命令和History扩展,保存记录列表,清算及修改记录行为

使用History命令和History扩展,保存记录列表,清算及修改记录行为

2019-10-28 10:05:05作者:高出稿源:云网牛站

本文为你介绍Linux操作系统中的History命令(Bash History),它使你可以查看以前执行的命令列表、搜索列表以及操作历史文件。你可能需要查看以前运行的历史记录,它能使你的日常工作更加轻松并提高生产率,这就是History能派上用场之处,可先参考使用history命令在Linux系统上找到最常用的命令

使用History命令和History扩展,保存记录列表,清算及修改记录行为

 

使用History命令和History扩展(History Expansions)

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

以最简单的形式,在不带任何选项或参数的情况下调用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”开头的最新命令。

通常,历史记录会在屏幕上显示很多行的输出,要一次查看输出一页,将其通过管道传送到寻呼机程序,就像more、less命令一样:

$ history | less

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

$ history -5

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

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

$ !!

当你忘记在命令后加上sudo时,这非常有用,你可以键入以下命令:

$ sudo !!

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

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

$ ^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

参考:在Linux系统下使用grep命令搜索文件的详细用法

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

$ !356

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

(reverse-i-search)`':

shell将显示一条匹配的行,要移至下一个匹配的建议,请再次按Ctrl-R。

 

保存历史记录列表

默认情况下,启动新会话时,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-以空格开头的命令未保存在历史记录列表中,-ignoreups-重复的命令不会保存,-ignoreboth-是快捷方式,包括ignorespace和忽略的ups:

HISTCONTROL=ignoreboth

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

例如,如果你设置:

HISTTIMEFORMAT="%F %T: "

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

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

 

结论

history命令显示以前执行的命令的列表,例如,你可以使用history记录来查看你之前忘记的长命令,按照以上提供的方法及技巧就能达到目的。

 

相关主题

显示没有行号的Bash历史记录(使用history、cut、awk、fc、sed命令)

Linux命令子频道
精选文章
热门文章