历史命令history的用法
Posted yuanhonli-xin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了历史命令history的用法相关的知识,希望对你有一定的参考价值。
实验环境
[[email protected] ~ 22:55:22]$cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core)
[[email protected] ~ 22:55:32]$
1. history命令:
Display or manipulate the history list.
显示或操作历史列表
默认情况下,登录shell后执行的命令都会记录在缓存中,当用户注销或者退出时追加到命令历史文件中(默认是.bash_profile),当用户再次登录后,将读取历史文件中的命令到内存缓存中。
语法:
?history [-c] [-d offset] [n]
?history -anrw [filename]
?history -ps arg [arg...]
选项:
-c: 清空命令历史
-d offset: 删除历史中指定的第offset个命令
-a: 追加本次会话新执行的命令历史列表至历史文件
-r: 读历史文件附加到历史列表
-w: 保存历史列表到指定的历史文件
-n: 读历史文件中未读过的行到历史列表
-p: 执行参数中的命令,但是不保存到历史列表中。这个可以试试。
[[email protected] ~ 08:24:15]$history -p `hostname` `pwd`
CentOS6.10
/root
-s: 保存命令到历史列表,但不实际执行,用于伪造历史。
history -s "rm -rf /*" 嘿嘿,你懂得
2. 相关变量:
? HISTSIZE:命令行记录的历史条数
? HISTFILE:指定历史文件,默认为~/.bash_history
? HISTFILESIZE:历史的配置文件记录历史的条数
? HISTTIMEFORMAT=“%F %T “ 显示时间
另外还有一些变量,可能对你有用
? 控制命令历史的记录方式:默认是ignoredups
环境变量:HISTCONTROL
ignoredups 默认,忽略连续、重复执行的命令,连续且相同为“重复”
ignorespace 忽略所有以空白开头的命令
ignoreboth 相当于ignoredups, ignorespace的组合
erasedups 删除重复命令
我个人感觉ignorespace其实挺好的,可以在执行一些命令的时候不记录历史中,比如mysql指定密码登录的时候。
对于这些变量,只要了解即可,可以在man bash中查找到相关解释。
如果以上变量有你中意的一个,想要永久保存(默认在命令行中设置的都是临时的哦),可以在 ~/.bash_profile或者etc/profile.d/下创建一个文件后缀为.sh的文件,添加:export 变量名="值"
即可.
3. 命令小技巧
3.1 如何重复前一个命令
? 重复前一个命令使用上方向键,并回车执行
? 按 !! 并回车执行
? 输入 !-1 并回车执行
? 按 Ctrl+p 并回车执行
?!:0 执行前一条命令(去除参数)
3.2 执行指定序号的命令
?!n 执行history命令输出对应序号n的命令
?!-n 执行history历史中倒数第n个命令
3.3 搜索历史命令
ctrl-r来在命令历史中搜索命令
Ctrl+g:从历史搜索模式退出
3.4 调用前一个命令的最后一个参数
? !$ 表示
? Esc, .(点击Esc键后松开,然后点击 . 键)
? Alt+ .(按住Alt键的同时点击 . 键)
注意:有的时候alt会和其他键发生冲突。
3.5 调用历史参数
只有你想不到,没有做不到。
?command !^ 利用上一个命令的第一个参数做cmd的参数
?command !$ 利用上一个命令的最后一个参数做cmd的参数
?command !* 利用上一个命令的全部参数做cmd的参数
?command !:n 利用上一个命令的第n个参数做cmd的参数
好了,笔记终于写完了,排版和归纳能力不怎么好,如果你有好的建议的话,可以告诉我。
以上是关于历史命令history的用法的主要内容,如果未能解决你的问题,请参考以下文章