# **history命令管理及用法总结**
**命令历史:**shell进程会在其会话中保存此前用户提交执行过的命令,可以用它来重复执行命令;包括关机之前的指令
~]# history
示例
![](https://s1.51cto.com/images/blog/201903/24/484dc1789ad194fb443ff3b1459a2cf4.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
**定制history的功能,可通过改变环境变量的具体值来实现:**
| 环境变量 | 意义 |
| -------- | -------- |
|HISTSIZE | shell进程可保留的命令历史的条数 |
|HISTFILE | 持久保存命令历史的文件 |
| HISTFILESIZE | 命令历史文件的大小 |
| HISTTIMEFORMAT=“%F %T “ | 显示时间 |
|HISTIGNORE=“str1:str2:… “ | 忽略str1命令,str2开头的历史 |
***控制命令历史记录的方式:***
赋予环境变量 HISTCONTROL不同的值即可改变命令历史记录的方式;
修改变量的值的方式:NAME='VALUE',如HISTCONTROL=ignorespace
| 环境变量值 | 意义 |
| -------- | -------- |
|ignoredups | 忽略重复的命令 |
|ignorespace| 忽略以空白字符开头的命令 |
|ignoreboth| 以上两者同时生效 |
|erasedups| 删除重复命令 |
登录shell时,会读取命令历史文件中记录下的命令,命令历史文件路径为.bash_history
~]# cat.bash_history
登录进shell后新执行的命令只会记录在缓存中;这些命令会用户退出时“追加”至命令历史文件中
**命令用法:**
**history [-c] [-d 偏移量] [n]**
| 选项 | 效果 |
| -------- | -------- |
|-c | 清空命令历史 |
|-d offset| 删除历史中指定的第offset个命令|
|n| 显示最近的n条历史 |
示例:
![](https://s1.51cto.com/images/blog/201903/24/2545784c10d8dc3d0c0bb3d8c9828a39.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
![](https://s1.51cto.com/images/blog/201903/24/0605f40f1cf734b2c505110628c92e2c.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
示例:
![](https://s1.51cto.com/images/blog/201903/24/2f643a4fbc29fce6be4c9c3b07e78297.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
**history -anrw [文件名]**
| 选项 | 效果 |
| -------- | -------- |
|-a | 追加本次会话新执行的命令历史列表至历史文件 |
|-n| 读历史文件中未读过的行到历史列表|
|-r|读历史文件附加到历史列表 |
|-w| 保存缓存中的历史列表到指定的历史文件 |
**history -ps 参数 [参数...]**
| 选项 | 效果 |
| -------- | -------- |
|-p| 展开历史参数成多行,但不存在历史列表中 |
|-s|展开历史参数成一行,附加在历史列表后|
**调用命令历史列表中的命令或命令参数:**
| 按键(键入) | 效果 |
| -------- | -------- |
|↑或↓|上下浏览从前输入的命令 |
|!#|再一次执行历史列表中的第#条命令|
|!:0|执行前一条命令(去除参数)|
|!-n|执行history历史中倒数第n个命令|
|!!|再一次执行上一条命令|
|!STRING|再一次执行命令历史列表中最近一个以STRING开头的命令|
|!STRING:p|仅打印最近一个以STRING开头命令历史,而不执行|
|!?STRING|重复前一个包含STRING的命令|
|!:gs/string1/string2|将上一条命令中所有的string1都替换为 string2|
|Ctrl + p|翻出前一条命令|
|Ctrl + n |显示当前历史中的下一条命令,但不执行|
|Ctrl + j |执行当前命令|
|Ctrl + r|在命令历史中搜索命令|
|Ctrl + g|从历史搜索模式退出|
|!$或先按ESC,再按 .键或Alt+ .(按住Alt键的同时点击.键)|调用上一条命令的最后一个参数|
|!$:p|打印输出 !$ (上一条命令的最后一个参数)的内容|
|!*:p|打印输出!*(上一条命令的所有参数)的内容|
|^string|删除上一条命令中的第一个string|
|^string1^string2|将上一条命令中的第一个string1替换为string2|
*注:Alt+ .的调用方式需在XShell中设置Meta键仿真,如下图所示*
![](https://s1.51cto.com/images/blog/201903/23/185560cf9f9abfa6080c3ad787288f89.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
示例:
!STRING和!STRING:p
![](https://s1.51cto.com/images/blog/201903/24/deadf6ba140c2c775f4f3f2242db6505.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
!:gs/string1/string2
![](https://s1.51cto.com/images/blog/201903/24/a915b82e1338abf35f6b49b4ac0394f3.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
!$:p
![](https://s1.51cto.com/images/blog/201903/24/4d719ca31af27b3c6360e41b16f48b91.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)![](https://s1.51cto.com/images/blog/201903/24/4d719ca31af27b3c6360e41b16f48b91.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
!*:p
![](https://s1.51cto.com/images/blog/201903/24/c49a489ac15ae5955b37dfff26dacac3.png?x-oss-process=image/watermark,size_10,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)