在我们系统操作时,我们的行为都会被系统记录下来,方便我们故障排查。那么命令历史这一机制便被我们使用,下文将介绍历史命令的相关操作。
操作环境:centos6.8 centos7.2
一.命令行历史
保存你输入的命令,可以用它来重复执行命令
登录shell时,会读取命令历史文件中记录下来的命令 ~/.bash_history
登录进shell后新执行的命令只会记录在内存缓存中;这些命令会在用户退出时追加至命令
历史文件中,这就要求我们一定要正确退出shell,否则不能正常保存历史命令
1.重复执行命令
重复执行上一条命令
重复前一个命令使用 上方向键 找到该条命令,并回车执行
按!!并回车执行
输入!-1并回车执行,查看history 查看命令历史编号
按ctrl-P并回车执行
!字符串:重复前一个以“字符串”开头的命令 例:!ser
!num:按照history命令输出中的序号重复对应命令执行
!?字符串:重复前一个包含ADC的命令
!-n:重复n个命令之前的那个命令
Ctrl-r在历史命令中搜索命令
重新调用前一个命令中的最后一个参数
!$:最后一个参数
esc+。
alt+。
调用历史参数
!n:^:调用第n条命令的第一个参数
!n:$:调用第n条命令的最后一个参数
!m:n:调用第m条命令的第n个参数
!n:*:调用第n条命令的全部参数
#cmd !^ :利用上一个命令的第一个参数做cmd的参数
#cmd !* :利用上一个命令的全部参数做cmd的参数
#cmd !$ :利用上一个命令的最后一个参数做cmd的参数
#cmd !:n :利用上一个命令的第n个参数做cmd的参数
!string:^ 从命令历史中搜索以string开头的命令,并获取他的第一个参数
!string:$ 从命令历史中搜索以string开头的命令,并获取他的最后一个参数
!string:n 从命令历史中搜索以string开头的命令,并获取他的第N个参数
!string:* 从命令历史中搜索以string开头的命令,并获取他的所有参数997 cat /etc/issue
998 history
[root@wen-7 ~]# stat !997:$ #方法一:
stat /etc/issue
文件:"/etc/issue"
大小:41 块:8 IO 块:4096 普通文件
设备:fd00h/64768dInode:38424098 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2016-07-27 08:51:42.424658209 +0800
最近更改:2016-07-26 09:47:25.763319552 +0800
最近改动:2016-07-26 09:47:25.765319604 +0800
创建时间:-
[root@wen-7 ~]# which !^ #方法二
which /etc/issue
/usr/bin/which: no issue in (/etc)
[root@wen-7 ~]# stat !cat:$ #方法三
stat /etc/issue
文件:"/etc/issue"
大小:41 块:8 IO 块:4096 普通文件
设备:fd00h/64768dInode:38424098 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2016-07-27 08:51:42.424658209 +0800
最近更改:2016-07-26 09:47:25.763319552 +0800
最近改动:2016-07-26 09:47:25.765319604 +0800
创建时间:-
2.history命令:
1.用法:
history: history [-c] [-d offset] [n]
history -anrw [filename]
history -ps arg [arg...]
2.Options:
#:显示最近的前#条记录
-c:清除历史列表,只清除缓存列表,不修改命令历史文件
-d:删除历史中指定的命令
-a:追加新执行的命令至命令历史文件
-n:读取历史文件中未读取过的历史到历史列表 (只追加没有的列表,重复的不添加)
-r:读取历史文件加载历史列表(重新附加,不管重复)
-w:保存历史列表至指定的历史文件(可以存放到别的文件)
-p:展开历史参数成多行,但不保存在历史列表中
-s:展开历史参数成一行,保存在历史列表中(伪造历史)
例:history -s rm -rf /
3.相关环境变量: man bash 可以查看相关环境变量
HISTSIZE:命令历史记录的条数 默认为1000,为0,表示不再记录命令历史
HISTFILE:指定历史文件,默认为~/.bahs_history ;
HISTFILESIZE:命令历史文件记录历史的条数
HISTTIMEFORMAT=“%F %T” 显示时间
HISTIGNORE="str1:str2:.." 忽略str1,str2历史 多条命令用冒号分隔 值为空表示取消定义
4.控制命令历史的记录方式:
环境变量:HISTCONTROL
ignoredups:忽略重复的命令;连续且相同方为“重复”
ignorespace:忽略所有以空白开头的命令
ignoreboth:ignoredups, ignorespace
erasedups:删除重复命令
HISTCONTROL=“ “ 临时取消变量,要想永久取消,修改配置文件
export 变量名=“值”
存放在/etc/profile(全局)或~/.bash_profile(用户个人)
修改配置文件后,必须重新登录当前shell 才能使环境变量生效,或 使用source命令
命令:source 更改的配置文件名
这个命令可以让系统不用重启而使新的配置生效。
二 bash快捷键:
ctrl+l:清屏;相当于clear命令
ctrl+c:取消命令的执行
ctrl+a:会移动到命令行的最前面
ctrl+e:会移动到命令行的最后面
ctrl+u:会删除到行首
ctrl+k:会删除到行尾
arrow ctrl+b ctrl+f 会向左或向右移动一个字符
esc+b :光标左移一个单词 按键松手
esc+f:光标右移一个单词 按键松手
ctrl+d:删除光标后一个字符