本文为你介绍Linux操作系统中的History命令(Bash History),它使你可以查看以前执行的命令列表、搜索列表以及操作历史文件。你可能需要查看以前运行的历史记录,它能使你的日常工作更加轻松并提高生产率,这就是History能派上用场之处,可先参考使用history命令在Linux系统上找到最常用的命令。
使用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记录来查看你之前忘记的长命令,按照以上提供的方法及技巧就能达到目的。
相关主题 |