命令历史的管理及用法

  bash可以保存的过去曾经执行过的命令。当某个用户登录到shell中,会读取该用户家目录中的~/.bash_history文件,并将历史命令列表保存到内存中。当用户退出当前shell时,会将内存中的历史命令列表覆盖至~/.bash_history文件。

  我们可以通过# histroy 来查看历史命令。history是bash的内部命令。通过# help history获取帮助。

 

一、history的常见选项

# history
。。。  # 省略前面
  994  man poweroff
  995  poweroff --reboot
  996  man poweroff
  997  man shutdown
  998  shutdown +2 "Goodbye SB"
  999  shutdown -c
 1000  man rm
 1001  info rm
 1002  man history
 1003  enable 
 1004  enable  | grep history
 1005  help history
 1006  history 
 1007  history -d  1000
 1008  history 
 1009  echo $HISTORYSIZE
 1010  history

# history -c        清空命令历史记录

# history -d N      N为整数,删除历史中序号是N的命令

# history N         N为整数,显示最近N条历史

# history -a        追加本次回话新执行的命令历史列表至~/.bash_history文件

# history -r        读历史文件附加到历史列表

# history -w        保存历史列表到指定的历史文件

# history -n        读历史文件中未读过的行到历史列表

# history -p        展开历史参数成多行,但不存在历史列表中

# history -s        展开历史参数成一行,附加在历史列表后

 

二、调用命令历史的方法

  1、重复前一个命令,有4种方法

  • 使用方向键↑选中命令,按↑↓调整,并回车执行
  • 输入!! 并回车执行
  • 输入!-1 并回车执行
  • 按Ctrl + p,调出命令,并回车执行

  2、 !:0 执行前一条命令(去除参数)

  3、 Ctrl + n显示当前历史中的下一条!命令,但不执行

  4、 Ctrl + j执行当前命令

  5、 !n 执行history命令输出对应序号为n的命令

  6、 !-n执行history历史中倒数第n个命令

  7、 !string 重复前一个以“string”字符串开头的命令

  8、 !?string 重复前一个包含string字符串的命令

  9、 !string:p   仅打印命令历史,而不执行

10、 !$:p 打印输出!$(上一条命令的最后一个参数)的内容

11、 !*:p 打印输出!*(上一条命令的所有参数)的内容

12、 ^string 删除上一条命令中的第一个string

13、 ^string1^string2将上一条命令中的第一个string1替换为string2

14、 !:gs/string1/srting2 将上一条命令中所有的string1都替换为string2

15、使用方向键↑↓键来上下浏览从前输入的命令

16、Crtl + r来在命令历史中搜索命令

    进入(reverse-i-search)`':模式

17、 Crtl + g 从历史搜索模式退出

18、 重新调用前一个命令中最后一个参数,3种方法

  !$

  Esc . (点击Esc键后松开,然后点击.键)

   Alt+. (按住Alt键的同时点击.键),在一些终端软件中屏蔽了Alt功能键,需要开启

19、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 !srting:^   从命令历史中搜索string开头的命令,并获取它的第一个参数

  command !srting:$   从命令历史中搜索string开头的命令,并获取它的最后一个参数

  command !srting:n   从命令历史中搜索string开头的命令,并获取它的第n个参数

  command !srting:*   从命令历史中搜索string开头的命令,并获取它的所有参数

 

三、命令历史相关的环境变量

  HISTSIZE:命令历史中可以保存的命令的个数,默认值为1000

  HISTFILE:命令历史保存在哪个文件,默认为当前用户家目录中的.bash_history文件

  HISTFILESIZE:命令历史文件可以保存的命令的个数,默认值为1000

  HISTIGNORE='command1:command2:...',让历史命令不记录执行过的命令,默认为NULL

举例:HISTIGNORE='ls'  #让历史文件不记录ls命令,但是如果ls命令后接任何参数(包括空格)都会记录起来。所以要完全不记录任何与ls相关的命令,需要赋值为'ls *',即 HISTIGNORE='ls *'

  HISTTIMEFORMAT="%F %T-->"   执行history 命令显示的时候,带有此格式时间。

                                          让~/.bash_history带有相对时间如:#1560378603

  HISTCONTROL=[ignoredups|ignoredups|ignoreboth|erasedups],控制命令历史的生成

    ignoredups:忽略记录重复的命令:连续相同的命令为重复命令(默认的变量值)

    ignorespace:不记录以空白字符开头的命令

    ignoreboth:相当于上面两个参数ignoredups,ignorespace的组合

    erasedups:  删除重复命令

 

注意:修改环境变量建议在/etc/profile.d/中创建***.sh文件,便于日后的查看和管理

 

猜你喜欢

转载自www.cnblogs.com/ysuwangqiang/p/11336121.html