history命令介绍
history命令是用来显示或操作历史命令的一个内置命令。它可以显示用户在当前会话中执行过的所有命令,也可以对历史命令进行搜索、删除、修改等操作。history命令可以帮助用户快速地重复执行之前的命令,或者查看之前执行过的命令有没有错误。history命令还可以通过设置环境变量来控制历史命令的保存方式和数量。
使用权限
history命令是一个普通用户和超级用户都可以使用的命令。
适用的linux版本
history命令是一个通用的linux命令,几乎所有的linux发行版都支持这个命令。但是不同的linux发行版可能会有一些细微的差别,比如历史命令文件的存放位置和默认保存数量等。因此,在使用history命令之前,建议用户先查看自己的linux版本和shell类型,以避免出现意外的结果。
linux history命令的语法格式
history命令的基本语法格式如下:
history [选项] [历史记录数目]
其中,选项可以用来指定对历史命令进行不同的操作,比如搜索、删除、修改等。历史记录数目可以用来指定显示或操作的历史命令的数量。如果不指定选项和历史记录数目,那么history命令默认会显示所有的历史命令。
linux history命令的常用参数
history命令有很多参数可以用来对历史命令进行不同的操作,这里只介绍20个最常用的参数,如果想了解更多参数,请参考[history手册页]。
参数 | 说明 |
---|---|
-c | 清空当前会话中的所有历史记录 |
-d offset | 删除指定偏移量(从1开始)处的一条历史记录 |
-a | 将当前会话中新增加的历史记录追加到历史文件中 |
-n | 从历史文件中读取新增加的历史记录到当前会话中 |
-r | 从历史文件中读取所有的历史记录到当前会话中 |
-w | 将当前会话中所有的历史记录写入到历史文件中 |
-p | 对每个参数进行单独展开,并打印结果 |
-s | 将每个参数作为一条新的历史记录,并追加到当前会话中 |
-p | 对每个参数进行单独展开,并打印结果 |
-s | 将每个参数作为一条新的历史记录,并追加到当前会话中 |
-C | 清除重复出现过的最后一条历史记录 |
-D offset | 删除指定偏移量(从0开始)处及其之后所有重复出现过的历史记录 |
-L | 列出所有可用选项和其含义 |
-M | 从多个文件中读取或写入历史记录 |
-O file | 将当前会话中所有或指定数量(如果有)的历史记录写入到指定文件中 |
-R file | 从指定文件中读取所有或指定数量(如果有)的历史记录到当前会话中 |
-S file | 将当前会话中新增加或指定数量(如果有)的历史记录追加到指定文件中 |
-T timefmt | 设置时间戳格式,timefmt是一个符合strftime函数要求的字符串 |
-E | 启用扩展的历史记录功能,可以使用正则表达式等高级特性 |
-F | 禁用扩展的历史记录功能,恢复默认的历史记录功能 |
linux history命令的实例
下面给出一些常见的history命令的使用实例,结合最后给出的关键词举例子。
- 显示所有的历史命令
history
- 显示最近10条历史命令
history 10
- 搜索包含"grep"的历史命令
history | grep grep
- 删除第5条历史命令
history -d 5
- 清空所有的历史命令
history -c
- 将当前会话中新增加的历史命令追加到历史文件中
history -a
- 从历史文件中读取所有的历史记录到当前会话中
history -r
- 将当前会话中所有的历史记录写入到历史文件中
history -w
- 将"ls -l"作为一条新的历史记录,并追加到当前会话中
history -s ls -l
- 对"!"进行展开,并打印结果(!表示上一条命令的最后一个参数)
history -p !$
- 清除重复出现过的最后一条历史记录
history -C
- 删除第10条及其之后所有重复出现过的历史记录
history -D 10
- 列出所有可用选项和其含义
history -L
- 从多个文件中读取或写入历史记录(假设有file1和file2两个文件)
history -M file1 file2 # 从file1和file2中读取历史记录到当前会话中,如果有重复,则保留最新的一条
history -M file1 file2 20 # 从file1和file2中读取最近20条历史记录到当前会话中,如果有重复,则保留最新的一条
history -M file1 file2 -w # 将当前会话中所有的历史记录写入到file1和file2中,如果有重复,则覆盖旧的一条
history -M file1 file2 20 -w # 将当前会话中最近20条历史记录写入到file1和file2中,如果有重复,则覆盖旧的一条
- 将当前会话中所有或指定数量(如果有)的历史记录写入到指定文件中(假设有file3这个文件)
history -O file3 # 将当前会话中所有的历史记录写入到file3中,如果有重复,则覆盖旧的一条
history -O file3 10 # 将当前会话中最近10条历史记录写入到file3中,如果有重复,则覆盖旧的一条
- 从指定文件中读取所有或指定数量(如果有)的历史记录到当前会话中(假设有file4这个文件)
history -R file4 # 从file4中读取所有的历史记录到当前会话中,如果有重复,则保留最新的一条
history -R file4 10 # 从file4中读取最近10条历史记录到当前会话中,如果有重复,则保留最新的一条
- 将当前会话中新增加或指定数量(如果有)的历史记录追加到指定文件中(假设有file5这个文件)
history -S file5 # 将当前会话中新增加的历史记录追加到file5中
linux history命令的常见技巧
除了基本用法外,linux history命令还有一些常见的技巧,可以让用户更方便地使用历史命令。这里介绍几个常见的技巧:
-
使用"!"符号来重复执行历史命令。"!"符号后面可以跟一个数字、一个字符串或者一个特殊字符,表示要重复执行的历史命令。例如:
!10
表示重复执行第10条历史命令。!grep
表示重复执行最近一条包含"grep"的历史命令。!!
表示重复执行上一条历史命令。
-
使用"^"符号来修改并执行历史命令。"^"符号后面可以跟两个字符串,表示要将第一个字符串替换为第二个字符串,并执行修改后的历史命令。例如:
^ls^ps
表示将上一条历史命令中的"ls"替换为"ps",并执行修改后的历史命令。^a^b^:g
表示将上一条历史命令中所有出现的"a"替换为"b",并执行修改后的历史命令。
-
使用环境变量来控制历史记录的保存方式和数量。linux系统中有一些环境变量可以影响history命令的行为,比如:
HISTFILE
表示保存历史记录的文件名,默认是~/.bash_history
。HISTSIZE
表示保存在当前会话中的历史记录数量,默认是1000。HISTFILESIZE
表示保存在文件中的历史记录数量,默认是2000。HISTCONTROL
表示控制是否保存重复或空白的历史记录,默认是空值。如果设置为ignorespace
,则不保存以空格开头的历史记录;如果设置为ignoredups
,则不保存与上一条相同的历史记录;如果设置为ignoreboth
,则同时应用以上两个规则。HISTTIMEFORMAT
表示显示或保存带有时间戳的历史记录,默认是空值。如果设置为一个符合strftime函数要求的字符串,例如%Y-%m-%d %H:%M:%S
,则可以显示或保存带有时间戳的历史记录。
用户可以通过修改这些环境变量来自定义history命令的行为,例如:
export HISTSIZE=500 # 设置当前会话中的历史记录数量为500
export HISTCONTROL=ignoreboth # 设置不保存重复或空白的历史记录
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S " # 设置显示或保存带有时间戳的历史记录
评论区