命令历史是bash提供的功能之一,记录之前我们执行过的命令(也包括执行失败的命令)。

   我们可以通过history命令查看命令历史:
spacer.gifLinux命令-history_history_02
那么,这些历史命令保存在哪里呢?
历史命令保存在~/.bash_history文件中:
spacer.gifLinux命令-history_history_04
为什么文件是空白的?那是因为执行过的命令暂时保存在一段命名空间为HISTFILE的内存中,当正确的登出bash后,
内存中的历史命令就会保存到~/.bash_history中。
我们正确logout,再login进来,查看此文件:
spacer.gifLinux命令-history_history_06
我们也可以使用history命令手动将暂时保存在内存中的命令历史记录保存到~/.bash_history中:
history -w :将当前内存中的history保存并覆盖~/.bash_history。
   查看~/.bash_history:
spacer.gifLinux命令-history_history_08
     查看当前history:
spacer.gifLinux命令-history_history_10
   执行history -w,并查看historyfile:
spacer.gifLinux命令-history_history_12
history n:列出最近的n次命令。
spacer.gifLinux命令-history_linux_14
history -c:清空当前history列表。
spacer.gifLinux命令-history_history_16
history -r :读取histfile到内存中。
spacer.gifLinux命令-history_history_18
1问:命令历史为什么保存在~/.bash_history中?
bash中有一个环境变量HISTFILE,此变量保存的是命令历史文件的路径,查看此变量:
spacer.gifLinux命令-history_linux_20
如果我们更改HISTFILE的值,命令历史应该就保存到新的位置了吧!
spacer.gifLinux命令-history_history_22
执行history -w,查看/tmp/root.history内容:
spacer.gifLinux命令-history_linux_24
果然命令历史保存到此文件。
2问:当前history可以保存多少条命令历史呢?
spacer.gifLinux命令-history_linux_26
查看HISTSIZE得知,当前history最多保存1000条命令历史。
3问:histfile最多保存多少条命令历史呢?
spacer.gifLinux命令-history_linux_28
查看HISTFILESIZE得知,当前histfile最多保存1000条命令历史。
4问:
spacer.gifLinux命令-history_linux_30
由上图可以看出,重复执行的命令被bash记录了多次和以空格开始的命令也被记录,如何控制bash的记录方式?
HISTCONTROL就是用来控制只记录重复命令1次和忽略以空格开头的命令,它有3个值:
ignorespace:忽略空格开头的命令
spacer.gifLinux命令-history_history_32
   可以看出,以空格开头的history命令没有被记录,但是重复执行的命令被重复记录。
ignoredups:重复的命令只记录一次
spacer.gifLinux命令-history_history_34
   重复执行的命令不再重复记录,但是以空格开头的命令被记录。
ignoreboth:兼有上面两个功能
spacer.gifLinux命令-history_history_36
   重复执行的命令不再重复记录,而且以空格开头的history命令没有被记录。
几个常用的快捷命令:
!num:history中第num个命令
spacer.gifLinux命令-history_linux_38
!!:上一个命令
spacer.gifLinux命令-history_history_40
!-num:从倒数第num个命令
spacer.gifLinux命令-history_linux_42
!string:最近一次以string开始的命令
spacer.gifLinux命令-history_linux_44