魏蓝

以梦为马

导航

复习之命令历史

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:*

posted on 2022-02-17 18:24  魏蓝  阅读(44)  评论(0编辑  收藏  举报