更新时间:2021-08-30
当前版本:v1.1
一、命令行历史
命令行历史保存了输入的命令历史,可以用它来重复执行命令。登录 shell 时,会读取命令历史文件(默认为 ~/.bash_history)中记录下的命令;登录进 shell 后,新执行的命令只会记录在缓存中;用户退出 Shell 时命令行历史会从缓存中追加到命令历史文件中。
1.1 语法
history [n]
history -c
history -d offset
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]
1.1.1 选项
参数选项 | 描述 |
---|---|
-c | 清空历史列表,删除所有条目 |
-d offset | 删除 offset 位置的历史条目 |
-a | 将新的历史条目 (自当前 bash 会话开始输入的历史命令) 追加到历史文件中(~/.bash_history) |
-n | 将尚未从历史文件中读取的历史条目读入当前历史列表。这些行是当前 bash 会话开始之后,才追加到历史文件中的行 |
-r | 读取历史文件的内容,使用它们作为当前历史 |
-w | 将当前历史列表写入历史文件,覆盖历史文件的原有内容 |
-p | 展开历史参数成多行,但不存在历史列表中 |
-s | 展开历史参数成一行,附加在历史列表后 |
n | 显示最近的n条历史 |
1.2 变量
历史命令的变量存放在 /etc/profile
或 ~/.bash_profile
文件中。使用 export 变量名=‘值’
进行定义在文件中
变量 | 描述 |
---|---|
HISTSIZE | 命令历史记录的条数,默认1000条历史命令 |
HISTFILE | 指定历史命令文件,默认 ~/.bash_history |
HISTFILESIZE | 命令历史文件记录历史的条数,默认1000条历史命令 |
HISTTIMEFORMAT="%F %T " | 显示历史命令时间,默认为空 |
HISTIGNORE="str1:str2*:… " | 忽略str1命令,str2开头的历史命令 |
HISTCONTROL="[ ignoredups | ignorespace | ignoreboth | erasedups]" | 环境变量 HISTCONTROL 的不同参数可以控制命令历史记录的方式:<1> ignoredups 默认参数,忽略重复的命令,连续且相同为“重复” <2> ignorespace 忽略所有以空白开头的命令 <3> ignoreboth 相当于 ignoredups,ignorespace 的组合 <4> erasedups 删除重复命令 |
1.3 快捷键
快捷键 | 描述 |
---|---|
!! 或 !-1 或 CTRL+p | 重复前一个命令 |
!$ 或 Esc,. 或 Alt+. | 调用前一个命令中最后一个参数 |
CTRL+j | 执行当前命令 |
Ctrl + n | 显示当前历史中的下一条命令,但不执行 |
!:0 | 执行前一条命令(去除参数) |
!n | 执行history命令输出对应序号n的命令 |
!-n | 执行history历史中倒数第n个命令 |
!string | 重复前一个以“string”开头的命令 |
!?string | 重复前一个包含string的命令 |
!string:p | 仅打印命令历史,而不执行 |
!$:p | 打印输出 !$ (上一条命令的最后一个参数)的内容 |
!*:p | 打印输出 !*(上一条命令的所有参数)的内容 |
^string | 删除上一条命令中的第一个string |
string1string2 | 将上一条命令中的第一个string1替换为string2 |
!:gs/string1/string2 | 将上一条命令中所有的string1都替换为 string2 |
CTRL+r | 在命令历史中搜索命令 |
CTRL+g | 从历史搜索模式退出 |
1.4 调用参数
参数 | 描述 |
---|---|
Command !^ | 利用上一个命令的第一个参数做CMD的参数 |
Command !$ | 利用上一个命令的最后一个参数做CMD的参数 |
Command !* | 利用上一个命令的全部参数做CMD的参数 |
Command !:n | 利用上一个命令的第n个参数做CMD的参数 |
Command !n:^ | 调用第n条命令的第一个参数 |
Command !n:$ | 调用第n条命令的最后一个参数 |
Command !n:m | 调用第n条命令的第m个参数 |
Command !n:* | 调用第n条命令的所有参数 |
Command !String:^ | 从命令历史中搜索以 string 开头的命令,并获取它的第一个参数 |
Command !String:$ | 从命令历史中搜索以 string 开头的命令,并获取它的最后一个参数 |
Command !String:n | 从命令历史中搜索以 string 开头的命令,并获取它的第n个参数 |
Command !String:* | 从命令历史中搜索以 string 开头的命令,并获取它的所有参数 |
1.5 示例
将缓存中的命令历史写入到命令历史文件中
history -w
读取命令历史文件到当前命令历史中
history -r
清除命令历史
history -c