复习之命令历史
1.命令历史
使用bash shell,会将执行过的命令记录到history对应的缓冲区中。当用户注销时,会将history缓存区的命令历史追加保存到~/.bash_history文件中。当下次登录shell时,系统会读取命令历史文件中记录的命令到命令缓冲区。利用命令历史,不仅可以了解之前所作的操作,也可以方便重复执行。
2.history命令
Bash shell中提供一个内部命令history,可以显示和管理曾经执行过的命令列表。
history命令语法格式:
history [-c] [-d offset] [n] or history -anrw [filename] or history -psarg [arg...]
history命令常用选项说明:
-c 表示清空历史命令 -d offset 删除历史中指定的第offset个命令 n 显示最近n条命令 -a 追加本次会话新执行的命令历史列表至历史文件 -r 读历史文件附加到历史列表 -w 保存历史列表到指定的历史文件 -n 读取历史文件中未读过的行到历史列表 -p 展开历史参数成多行,但不存在历史列表中 -s 展开历史参数成一行,附加在历史列表中
范例:history查看命令历史
#显示命令历史列表 [root@centos8 ~ 7]#history 1 pwd 2 ls 3 hostname 4 who 5 whoami 6 w 7 history #显示最近三条命令历史 [root@centos8 ~ 18]#history 3 16 echo -1 -1 -2 -3 -123123 123 123 | grep -E '?[0-9]+' 17 echo -1 -1 -2 -3 -123123 123 123 | grep -E '\-?[0-9]+' 18 history 3 #清除历史列表 [root@centos8 ~ 19]#history -c [root@centos8 ~ 1]#history 1 history
3.history命令相关的shell变量
history命令有一些相关的shell变量。所谓变量就是一个代号,可以表示和代表一些字符的集合。Linux中有一些内置的变量,将之设置不同的值会影响其执行的结果。
设置shell变量: 变量名=“值” 示例:HISTTIMEFORMAT=“%F %T” 查看变量: echo $变量名 示例:echo $HISTTIMEFORMAT
控制历史列表的变量如下表:
HISTSIZE 命令历史记录的条数 HISTFILE 指定历史文件,默认为~/.bash_history HISTFILESIZE 命令历史文件记录历史的条数 HISTTIMEFORMAT 显示时间,示例:HISTTIMEFORMAT=“%F %T” HISTIGNORE 指定历史中不记录的命令,示例:HISTIGNORE"str1:str2*....",忽略str1命令,str2开头的历史
HISTCONTROL 控制命令历史的记录方式,可设置的值如下:
ignoredups:默认,忽略重复的命令,连续且相同认为重复
ignorespace:忽略所有以空白开头的命令
ignoreboth:相当于ignoredups和ignorespace的组合
erasedups:删除重复命令
提示:如果要持久保存上述变量,需要将上面指令放在/etc/profile或者~/bash_profile中
范例:history相关变量
#修改历史列表为时间格式 [root@centos8 ~ 4]#history 1 history 2 ls 3 hostname 4 history [root@centos8 ~ 5]#HISTTIMEFORMAT="%F %T" [root@centos8 ~ 6]#echo $HISTTIMEFORMAT %F %T [root@centos8 ~ 7]#history 1 2022-02-17 17:13:00history 2 2022-02-17 17:43:30ls 3 2022-02-17 17:43:36hostname 4 2022-02-17 17:43:41history 5 2022-02-17 17:44:30HISTTIMEFORMAT="%F %T" 6 2022-02-17 17:44:45echo $HISTTIMEFORMAT 7 2022-02-17 17:44:55history #退出当前终端,重新登录 [root@centos8 ~ 8]#exit logout #history格式无法保存 [root@centos8 ~ 6]#history 1 ls 2 hostname 3 history 4 HISTTIMEFORMAT="%F %T" 5 echo $HISTTIMEFORMAT 6 history 7 exit 8 history #修改~/.bash_profile文件,在最后一行增加HISTTIMEFORMAT设置 [root@centos8 ~ 7]#echo 'export HISTTIMEFORMAT="%F %T"' > ~/.bash_profile [root@centos8 ~ 8]#cat ~/.bash_profile export HISTTIMEFORMAT="%F %T"
4.命令历史的快捷方式使用
利用历史的快捷键可以提高输入命令的速度,提高工作效率,也可以避免错误。常见的命令历史快捷键如下:
重复前一个命令有三种方法:
1)使用向上的方向键并回车执行 2)按!!并回车执行 3)输入!-1并回车执行
执行前一个不包含参数的命令:!:0
执行history命令输出对应序号n的命令:!n
执行history命令历史中倒数第n个命令:!-n
重复前一个以string开头的命令:!string
重复前一个包含string的命令:!?string
仅打印命令历史,并不执行:!string:p
打印输出!$(上一个命令的最后一参数)的内容:!$:p
打印输出!*(上一个命令的所有参数)的内容:!*:p
删除上一个命令的第一个string:^string
将上一个命令的第一个string1替换为string2:^string1^string2
将上一个命令的所有的string1都替换为string2:!:gs/string1/string2
使用up(向上)和down(向下)键来上下浏览从前输入的命令
在命令历史中搜索命令:ctrl+r
从历史搜索中模式中退出:ctrl+g
要重新调用前一个命令中最后一个参数,三种方式:
1)!$ 2) esc,.(单击esc键后松开,再单击.键 3) alt+. (按住alt键同时单击.键)
调用历史参数:
利用上一个命令的第一个参数做cmd的参数:cmd!^
利用上一个命令的最后一个参数做cmd的参数:cmd!$
利用上一个命令的全部参数做cmd的参数:cmd!*
利用上一个命令的第n个参数做cmd的参数:cmd!:n
调用第n条命令的第一个参数:cmd!n:^
调用第n条命令的最后一个参数:cmd!n:$
调用第n条命令的第m个参数:cmd!n:m
调用第n条命令的所有参数:cmd!n:*