在Linux中,shell会将我们曾经执行过的命令保存起来,提供命令历史服务。那么,我们如何查看历史命令、历史命令是如何记录的,命令历史又能够为我们提供什么帮助呢?

  在用户家目录下,我们查看文件列表,可以看到一项.bash_history的文件,在默认情况下,此文件就是用户的历史文件,记录了用户的操作历史。由于每个用户拥有单独的家目录,所以每个用户拥有独立的历史文件。

  [root@luolmcentos7 ~]# ls -al

  total 10476

  -rw-------.  1 root root   14207 Jul 27 22:04 .bash_history

  在正常情况下,历史命令读取与记录的过程如下:

  当我们以bash登录Linux主机之后,系统会主动由~/.bash_history读取以前曾经执行过的命令,至于~/.bash_history会记录几条数据,是由变量HISTFILESIZE的设定值来决定的;登录后新执行的命令只会记录在缓存中,在注销时,系统会将最近的HISTFILESIZE条命令记录到记录文件中。

  我们可以使用history命令来查看、编辑历史命令,具体用法如下:

  history [-c] [-d offset] [n]

  history -anrw [filename]

  history -ps arg [arg...]

  n:数字,列出最近的n条命令行    

    Linux中history详解_第1张图片

  -c:将目前的shell中的所有history内容全部消除

  -d offset:删除历史中指定的命令

    Linux中history详解_第2张图片

  -a:将目前新增的history命令新增入histfiles中,若没有加histfiles,则默认写入~/.bash_history中

  -n:将历史文件中未读取到命令历史中的命令读取到历史列表

  -r:将histfiles的内容读到目前这个shell的history记忆中

  -w:将目前的history记忆内容写入histfiles中

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

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

  命令历史的存在对于用户来说是用途很大的,在执行命令的时候,我们可以通过history配合"!"来引用曾经执行过的命令或命令中的参数。

  !!:重复最后一条命令

  !n:重复历史中编号为n的命令

  !-n:重复倒数第n条命令

  !handle:重复以handle中的字符组成的字符串开始的最后一条命令

  !?handle:重复包含handle中的字符组成的字符串的最后一条命令

  !:0:前一条命令的名称

  !^:前一条命令的第一个参数

  !:n:前一条命令的第n个参数

  !$:前一条命令的最后一个参数,也可用Esc,.或者ALT+.来调用

  !*:前一条命令的所有参数,命令名除外

  Ctrl+r:在命令历史中搜索命令

  各命令历史方式可以合并历史表达式,如:

  !-2:0 -R !^ !-3:2

  表示:倒数第二条命令的名称,加上-R,再加上前一条命令的第一个参数,以及倒数第三条命令的第二个参数。

  !handle1:0 !handle2:2 !-3:*

  表示:以handle1中的字符组成的字符串开始的最后一条命令的名称,加上一handle2中的字符组成的字符串开始的最后一条命令的第二个参数,以及倒数第三条命令的所有参数

  Linux中history详解_第3张图片

  对于history一些属性的设置同样是由一些变量来定义的,history相关的变量主要有以下几个:

  HISTSIZE:命令历史记录的条数

  HISTFILE:指定历史文件,默认为~/.bash_history

  HISTFILESIZE:命令历史文件记录历史的条数

  wKioL1eZZuLihmvAAAAQ_KsImCc541.png

  HISTTIMEFORMAT="%F %T ":命令历史中显示时间

  Linux中history详解_第4张图片

  HISTIGNORE="str1:str2...":忽略string1,string2历史(string需为命令的全部命令行)     HISTCONTROL:控制命令历史的记录方式

    ignoredups:忽略重复的命令(系统默认);连续且相同方为“重复”;

    ignorespace:忽略所有以空白开头的命令;

    ignoreboth:ignoredups+ignorespace;

    erasedups:删除重复命令;

  以上就是与history相关的查看、调用与变量的解释,熟练使用history,是一个有效提升Linux使用效率的方法。