历史命令history的用法

实验环境

[root@centos7 ~ 22:55:22]$cat /etc/centos-release
CentOS Linux release 7.5.1804 (Core) 
[root@centos7 ~ 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: 执行参数中的命令,但是不保存到历史列表中。这个可以试试。

[root@CentOS6 ~ 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的参数

好了,笔记终于写完了,排版和归纳能力不怎么好,如果你有好的建议的话,可以告诉我。

猜你喜欢

转载自www.cnblogs.com/yuanhonli-xin/p/9393463.html