bash会将在Shell里输入过的一些命令保存在历史命令文件中,保存的命令数量取决于环境变量HISTSIZE(默认保存1000条,可以更改这个值)。
bash执行命令时不会立即将命令写入历史命令文件,而是先存放在内存的缓冲区中,该缓冲区被称为历史命令列表。等bash退出再将历史命令列表写入历史命令文件中,也可以执行 #history –w 命令要求bash立刻将历史命令列表写入历史命令文件。
历史命令文件名由环境变量HISTFILE变量制定,历史命令文件的默认名字是:
.bash_history(以小点开头的文件是隐藏文件),该文件通常在用户主目录中(root用户是/root/.bash_history,普通用户是/home/*/.bash_history)。
当用户登录系统后,历史命令列表会根据当前用户目录下的.bash_history文件进行初始化。
History命令的语法和用法:
history [n]
功能:当history命令没有参数,将显示整个历史命令列表的内容。如果使用n参数,将显示最后n个历史命令。
history [-a|n|r|w] [filename]
history命令各选项及其功能说明
-a:把当前的历史命令记录追加到历史命令文件中
-c:清空历史命令列表
-n:将历史命令文件中的内容加入到当前历史命令列表中
-r:将历史命令文件中的内容更新(替换)当前历史命令列表
-w:把当前历史命令列表的内容写入历史命令文件,并且覆盖历史命令文件的原来内容
Filename 如果filename选项没有被制定,history命令将使用环境变量HISTFILE指定的文件名
执行历史命令最简单的方法就是使用小键盘上的方向键,进行历史命令查询。
按向上箭头向后翻阅历史命令,按向下箭头向前翻阅历史命令,直到找到所需的命令为止,按下Enter键执行命令。
快速执行历史命令也可以使用几种特定的方式进行,如下所示:
!n: n表示序号(执行history命令可以看到),重新执行第n条命令
!-n:重复执行倒数第n条命令
!!:重新执行上一条命令
!string:执行最近用到的以string开始的历史命令
!?string[?]:执行最近用到的包含string的历史命令
!\$:表示获得前面命令行中最后一项内容。例如先执行#cat /etc/sysconfig/network-scripts/ifconfig-eth0,然后想用gedit编辑,可以输入命令#gedit !$
<ctrl+r>在history表中查询某条历史命令