Linux history 命令
history 命令作用:用于显示历史记录和执行过的命令.
history命令读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件。该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令。例如,要执行第2个历史命令,则输入!2。
history命令:是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令,该数量是由环境变量 HISTSIZE进行控制。默认是不显示命令的执行时间,命令的执行时间,history 已经记录,只是没有显示。
注:如想查询某个用户在系统上执行了什么命令,可以使用root用户身份登录系统,检查Home目录下的用户主目录下的“.bash_history”文件,该文件记录了用户所使用的命令和历史信息。
语法:
history (选项) (参数)
常用选项:
-c:清空当前内存里的历史命令;
-a:将缓存在内存的历史命令写入历史命令文件中【~/.bash_history】
-n:指定读取命令历史的最近记录条数,这个"n"代表的是阿拉伯数字。
!+字母:以最后一次往上查找第一个以此字母开头的命令【倒序查找,第一个查找到的显示出来并再次执行】
!+数字:表示查找出历史记录的第几条命令且再次执行
!!: 表示再次执行最后一次执行的命令
history默认记录一千条命令历史,这些历史命令保存在用户家目录下的".bash_history"文件中,但这是用户层次的,还有一个系统层数的则保存在"/etc/profile"文件中,在查看历史命令显示时,只有序号和命令,并没显示执行的时间,也就是说具体是什么时候执行了这个命令,这时要是需要显示执行的时间出来,则需要修改一下"~/.bash_profile"文件,建议尽量少点修改系统层数的配置文件,所以,只对用户层次的配置文件进行修改。做任何修改,第一时间应要先备份将要被修改的文件。
具体修改方法:
1、临时修改,如图1所示。
图1 临时修改命令历史显示具体执行时间
2、永久修改命令历史显示时间,如图2所示。
这里只修改用户层次的,不做全局修改,所以使用"vim"编辑的是用户家目录下的".bash_profile"文件,在内容"PATH=$PATH:$HOME/bin"下加入全局变量"export HISTTIMEFORMAT='%F %T '"或者 "export HISTTIMEFORMAT= '%Y%m%d-%H%M%S '" 或者"export HISTTIMEFORMAT='%Y%m%d %T '" ,不过使用哪一种方式,它们的后面一定要加个空格,比如使用"%F %T".则"T"后边要加上一个空格,以便时间与命令显示时清晰区分开。
图2 加入全局变量定义命令历史显示时间
编辑完成保存后,需要重新加载一次配置文件才生效,如图3所示已成功完成显示出日期时间。
图3 定义显示命令历史记录的格式变量并验证是成功
切记:一定要在秒后边加个空格,不然时间的秒与命令变得连在一起了,如图4所示。
图4 最后面没加空格定义的显示格式
示例:
1、"history"查看最近执行过的历史命令记录,如图5所示。
图5 不使用选项来查看最近执行过的历史命令记录
在不使用选项查看命令历史,默认是全部显示出来,如果没修改保存命令历史的条数它默认只能保存一千条,但为什么有时显示会多处一千条呢,那是因为它显示出来的并不是保存命令历史记录文件上的,而是显示缓存在内存当中的。
2、"history -c"清空当前缓存在内存中的命令历史,如图6所示。
图6 清空缓存在内存的命令历史
注意:"history -c"并不会清空~/.bash_history 中的记录。只是清空内存中的记录。退出终端时,内存中的命令记录会存储到~/.bash_history 中。但是必须是正常退出终端,强制关闭终端时,内存中的历史记录,也不会记录在~/.bash_history中,即使记录了也会有丢失。
3、"history -a"将缓存在内存当中的命令历史写入到命令历史记录文件中,如图7所示。
图7 把缓存在内存的命令历史写入记录文件中
在执行图3那条命令时,之前已经"cat"记录文件了,最后一条记录就是"history -a",先在我门再看看"~/.bash_history"命令历史记录文件,如图8所示。
图8 命令历史记录不区分正确与错误的命令
可以得出,不管你敲的命令是否正确,只要按回车执行后,它都会被记录下来。
4、"hsitory -n","n"代表的是阿拉伯数字.指定行数来显示命令历史记录,它是以最后一次命令历史再往上查找行数,按着顺序排序出来。如图9所示。
图9 按指定的条数显示出命令历史
5、"!+字母"查找最近执行过的某个命令切再次执行一次,如图10所示。
图10 指定对应字母的历史记录再次
6、"!+数字"查找出历史记录的第几条命令且再次执行,如图11所示。
图11 "!+数字"查找某条历史命令且再次执行
需要注意的是"!"与"数字"之间是不需要空格,如果不小心加了空格会抱错的喔,如图12所示。
图12 "!+"组合的命令均不能使用空格
所以"!+字母"或者"!+数字"均不能使用空格,不然就报错。
7、"!!"再次执行最后一次执行过的命令,如图13所示。
图13 再次执行最后一次执行过的命令