使用Bash shell,会执行过的命令记录到history对应的缓冲区中。当用户注销时,会将history缓存区中的命令历史追加保存到~/.bash_history文件中。当下次登录shell时,系统会读取命令历史文件中记录的命令到命令缓存区。利用命令历史,不仅可以了解之前所做的操作,也可以方便重复执行。
1. history命令
Bash Shell中指供一个内部命令history,可以显示和管理曾经执行过的命令列表。
语法 :
history [n]history -chistory -d offsethistory -anrw [filename]history -p arg [arg ...]history -s arg [arg ...]
OPTIONS
-c: 清空命令历史-d offset: 删除历史中指定的第offset个命令n: 显示最近的n条历史-a: 追加本次会话新执行的命令历史列表至历史文件-r: 读历史文件附加到历史列表-w: 保存历史列表到指定的历史文件-n: 读历史文件中未读过的行到历史列表-p: 展开历史参数成多行,但不存在历史列表中-s: 展开历史参数成一行,附加在历史列表后
2. history命令相关的shell变量
控制历史列表的变量如下:
HISTSIZE: 命令历史记录的条数HISTFILE: 指定历史文件,默认为~/.bash_historyHISTFILESIZE: 命令历史文件记录历史的条数HISTTIMEFORMAT="%F %T ": 显示时间HISTIGNORE="str1:str2*:… ": 忽略str1命令,str2开头的历史HISTCONTROL: 控制命令历史的记录方式,可设置的值如下:ignoredups: 默认,忽略重复的命令,连续且相同为“重复”ignorespace: 忽略所有以空白开头的命令ignoreboth: 相当于ignoredups,ignorespace的组合erasedups: 删除重复命令
提示: 如果要持久保存上述变量,需要将上面指令存放在
/etc/profile或者~/.bash_profile中
[root@node01 ~]# HISTTIMEFORMAT="%F %T "
[root@node01 ~]# echo $HISTTIMEFORMAT
%F %T
[root@node01 ~]# history
1 2020-08-04 02:42:14 init 0
2 2020-08-04 02:42:14 ip a
3 2020-08-04 02:42:14 lsblk
4 2020-08-04 02:42:14 df -h
5 2020-08-04 02:42:14 df -hT
6 2020-08-04 02:42:14 init 0
7 2020-08-04 02:42:14 ping baidu.com3. 命令历史的快捷方式使用
利用历史的快捷键可以提高输入命令的速度,提高工作效率,也可以避免错误。常见的命令历史快捷键如下
重复前一个命令。有4种方法
重复前一个命令使用上方向键,并回车执行
按
!!并回车执行输入
!-1并回车执行按
Ctrl+p并回车执行
调用命令快捷键
!:0: 执行前一条不包含参数的命令!n: 执行history命令输出对应序号n的命令!-n: 执行history历史中倒数第n个命令!string: 重复前一个以string开头的命令!?string: 重复前一个包含string的命令!string:p: 仅打印命令历史,而不执行!$:p: 打印输出!$(上一条命令的最后一个参数)的内容!*:p: 打印输出!*(上一条命令的所有参数)的内容^string: 删除上一条命令中的第一个string^string1^string2: 将上一条命令中的第一个string1替换为string2!:gs/string1/string2: 将上一条命令中所有的string1都替换为string2使用
up(向上)和down(向下)键来上下浏览从前输入的命令ctrl-r来在命令历史中搜索命令,会出现以下内容。输入记忆中的历史命令来搜索命令历史(reverse-i-search)`' :Ctrl+g: 从历史搜索模式退出
调用前一个命令中最后一个参数
!$Esc, .(点击Esc键后松开,然后点击.键)Alt+ .(按住Alt键的同时点击.键)
调用历史参数(
command表示命令主体,连接后面参数)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开头的命令,并获取它的所有参数
注:
command表示命令主体 . 后面快捷键表示调用的参数