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

   我们可以通过history命令查看命令历史:
spacer.gif wKiom1NeJpXzpHMBAAA9Pbl2ANY056.jpg
那么,这些历史命令保存在哪里呢?
历史命令保存在~/.bash_history文件中:
spacer.gif wKioL1NeJnnhmDzRAAAl9HzHrsA420.jpg
为什么文件是空白的?那是因为执行过的命令暂时保存在一段命名空间为HISTFILE的内存中,当正确的登出bash后,
内存中的历史命令就会保存到~/.bash_history中。
我们正确logout,再login进来,查看此文件:
spacer.gif wKiom1NeJrbi234JAABEQv7pu_E263.jpg
我们也可以使用history命令手动将暂时保存在内存中的命令历史记录保存到~/.bash_history中:
history -w :将当前内存中的history保存并覆盖~/.bash_history。
   查看~/.bash_history:
spacer.gif wKioL1NeJpfjiW81AABP5yhcylw026.jpg
     查看当前history:
spacer.gif wKioL1NeJqWhrpekAAA43mMzfM4463.jpg
   执行history -w,并查看historyfile:
spacer.gif wKiom1NeJt7R59ycAABeiIwMeSM503.jpg
history n:列出最近的n次命令。
spacer.gif wKioL1NeJsuDXGG2AACPsCoHkno866.jpg
history -c:清空当前history列表。
spacer.gif wKiom1NeJwrigZg4AAAzSKU5HoY254.jpg
history -r :读取histfile到内存中。
spacer.gif wKioL1NeJumgbX1FAAEFcGqjWyY941.jpg
1问:命令历史为什么保存在~/.bash_history中?
bash中有一个环境变量HISTFILE,此变量保存的是命令历史文件的路径,查看此变量:
spacer.gif wKiom1NeJyLzl4dQAAArf9pkBCg603.jpg
如果我们更改HISTFILE的值,命令历史应该就保存到新的位置了吧!
spacer.gif wKioL1NeJweiOG6VAABo46oQeXU585.jpg
执行history -w,查看/tmp/root.history内容:
spacer.gif wKiom1NeJ0HABVoxAAB_r0hHrvM206.jpg
果然命令历史保存到此文件。
2问:当前history可以保存多少条命令历史呢?
spacer.gif wKioL1NeJyeiuEjqAAAgBgG6poI396.jpg
查看HISTSIZE得知,当前history最多保存1000条命令历史。
3问:histfile最多保存多少条命令历史呢?
spacer.gif wKiom1NeJ1-CVanbAAAi7f_gle8436.jpg
查看HISTFILESIZE得知,当前histfile最多保存1000条命令历史。
4问:
spacer.gif wKioL1NeJ0WgjkXRAAA9BO3ZKrw459.jpg
由上图可以看出,重复执行的命令被bash记录了多次和以空格开始的命令也被记录,如何控制bash的记录方式?
HISTCONTROL就是用来控制只记录重复命令1次和忽略以空格开头的命令,它有3个值:
ignorespace:忽略空格开头的命令
spacer.gif wKioL1NeJ06S75C-AACOhm6a3Zk187.jpg
   可以看出,以空格开头的history命令没有被记录,但是重复执行的命令被重复记录。
ignoredups:重复的命令只记录一次
spacer.gif wKioL1NeJ1fxDiKbAAC5503DvKE510.jpg
   重复执行的命令不再重复记录,但是以空格开头的命令被记录。
ignoreboth:兼有上面两个功能
spacer.gif wKiom1NeJ4mSctGjAABZeZZXCyU494.jpg
   重复执行的命令不再重复记录,而且以空格开头的history命令没有被记录。
几个常用的快捷命令:
!num:history中第num个命令
spacer.gif wKioL1NeJ3Pj1o-VAAChb9028GY508.jpg
!!:上一个命令
spacer.gif wKiom1NeJ6WiAbykAADdpja0NwI696.jpg
!-num:从倒数第num个命令
spacer.gif wKiom1NeJ67wMABtAADHDlVZO9A374.jpg
!string:最近一次以string开始的命令
spacer.gif wKioL1NeJ5DhN8eQAADbDR5Chgs481.jpg