一、history常用命令

history n# 只显示最近的 n 条历史记录
history -c# 清除缓存区中的历史记录
history -w# 将缓存区的历史记录保存到文件
history -d N# 删除第 N 条历史记录
[dxk@admin ~]$ help history
history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 参数 [参数...]
    显示或操纵历史列表。

    带行号显示历史列表,将每个被修改的条目加上前缀 `*'。
    参数 N 会仅列出最后的 N 个条目。

    选项:
      -c    删除所有条目从而清空历史列表。(保存历史命令的文件.bash_history中记录的历史命令并不会受到影响,而且仅对当前bash有效,重新登录后还会显示出之前的)
      -d 偏移量    删除历史列表中指定的历史命令。(仅删除历史列表中指定行号的,历史文件中相应的并不会删除,同样仅对当前bash有效)

      -a    将当前内存中的历史追加到历史文件中(本次登陆后所输入的命令【本次登录所输入的所有命令是存在内存中的】会在退出后才写入历史命令文件中,使用 history -a命令后直接手动将内存中的历史命令追加到.bash_history文件中)
      -n    从历史文件中读取所有未被读取的行(在历史列表中没有的命令将从历史文件中加载到当前历史列表中)
      -r    读取历史文件并将内容追加到历史列表中(将历史文件中的所有命令追加到当前历史列表中)
        中
      -w    将当前历史写入到历史文件中并追加到历史列表中(相当于是将历史列表中的历史命令和历史文件中的历史命令全部整合同时写入到文件和当前历史列表中)

      -p    对每一个 ARG 参数展开历史并显示结果而不存储到历史列表中
      -s    以单条记录追加 ARG 到历史列表中

    如果给定了 FILENAME 文件名,则它将被作为历史文件。否则
    如果 $HISTFILE 变量有值的话使用之,不然使用 ~/.bash_history 文件。

    如果 $HISTTIMEFORMAT 变量被设定并且不为空,它的值会被用于
    strftime(3) 的格式字符串来打印与每一个显示的历史条目想关联的时
    间戳,否则不打印时间戳。

    退出状态:
    返回成功,除非使用了无效的选项或者发生错误

有关历史命令的几个变量:

①$HISTSIZE
用于设置历史列表的显示数目,不会影响到文件中存储的历史命令数量

[root@admin ~]# echo $HISTSIZE
1000
[root@admin ~]# HISTSIZE=10     #这里对该变量进行临时修改,要想修改后一直有效必须写入环境变量文件中(下同)
[root@admin ~]# echo $HISTSIZE
10
[root@admin ~]# history  #对该变量设置为10,所以历史列表中显示的历史命令只有10条
  347  cat -n .bash_history
  348  echo $HISTSIZE
  349  vim .bash_history
  350  vim /etc/profile
  351  echo $HISTSIZE
  352  source /etc/profile
  353  echo $HISTSIZE
  354  HISTSIZE=10
  355  echo $HISTSIZE
  356  history
[root@admin ~]# 

②$HISTTIMEFORMAT
给历史命令打印时间戳

这里打印的时间只会在历史列表中显示,历史文件中并不会有

[root@admin ~]# echo $HISTTIMEFORMAT  #默认历史命令没有添加时间戳

[root@admin ~]# HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "   #这里我们进行临时修改,并指定要显式的时间格式
[root@admin ~]# echo $HISTTIMEFORMAT
%Y-%m-%d %H:%M:%S
[root@admin ~]# history     #查看效果
  355  2020-07-09 09:42:07 HISTTIMEFORMAT=""
  356  2020-07-09 09:42:18 echo HISTTIMEFORMAT
  357  2020-07-09 09:42:26 echo $HISTTIMEFORMAT
  358  2020-07-09 09:43:18 HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
  359  2020-07-09 09:43:24 echo $HISTTIMEFORMAT
  360  2020-07-09 09:43:34 history

③$HISTFILE
指定存放命令历史的目录文件

每个用户都会拥有各自的存放历史命令的文件,系统默认这个文件是各用户家目录下的.bash_history文件

[root@admin ~]# echo $HISTFILE
/root/.bash_history
[root@admin ~]# cd /etc
[root@admin etc]# touch histfile      #自行创建一个文件,目的是将历史命令保存到这个文件中去
[root@admin ~]# HISTFILE="/etc/historyfile"      #将次变量临时修改为我们刚创建的/etc/historyfile文件,这样后面的历史命令都会保存到这个文件中去
[root@admin ~]# echo $HISTFILE      #这里是为了查看我们修改是否成功
/etc/historyfile
[root@admin ~]# history -a     #将当前内存中的历史命令写入到我们指定的存储历史命令的文件中去
[root@admin ~]# cat -b /etc/historyfile        #查看效果
     1    #1594259004
     2    echo $HISTTIMEFORMAT
     3    #1594259014
     4    history
     5    #1594259204
     6    echo $HISTFILE
     7    #1594259229
     8     cd /etc/file
     9    #1594259243
    10    cd /etc
    11    #1594259257
    12    touch histfile
    13    #1594259259
    14    cd
    15    #1594259292
    16    HISTFILE="/etc/historyfile"
    17    #1594259316
    18    echo $HISTFILE
    19    #1594259334
    20    history -w 

④$HISTFILESIZE
用于设置命令历史文件的大小;超出设置的数量会删除旧的

通俗地讲:用于设置在变量$HISTFIZE定义的文件(默认为.bash_history) 中保存命令的记录总数,可以理解为.bash_history文件中最多只有HISTFILESIZE行

[root@admin ~]# echo $HISTFILESIZE    #改变量系统默认设置为 1000
1000
[root@admin ~]# HISTFILESIZE=3      #这里临时修改大小为3
[root@admin ~]# cat -n .bash_history   #我们查看保存命令历史文件中的历史命令只剩下3条
     1    vim /etc/profile
     2    source /etc/profile
     3    exit
[root@admin ~]# history   #历史列表中不只是3条,因为这次登陆后用过的命令在缓存中存在
    1  source /etc/profile
    2  cat -n .bash_history
    3  vim /etc/profile
    4  source /etc/profile
    5  exit
    6  cat -n .bash_history
    7  HISTFILESIZE=3 
    8  cat -n .bash_history
    9  echo HISTFILESIZE
   10  echo $HISTFILESIZE
   11  history 

⑤$HISTCONTROL
控制命令历史记录的方式

该变量有三个选项可供选择:

ignoredups:忽略重复的命令(重复的命令只记录一次,仅限于连续输入相同的命令)
ignorespace:忽略以空白字符开头的命令(以空白符开头输入的命令将不予以记录)
ignoreboth:以上两者同时生效
# 系统默认为ignoredups
[root@admin ~]# echo $HISTCONTROL
ignoredups

可自行修改变量的值:
NAME=VALUE

[root@admin ~]# HISTCONTROL=ignoredups
[root@admin ~]# HISTCONTROL=ignorespace
[root@admin ~]# HISTCONTROL=ignoreboth

以上就是有关history的相关变量,这里要注意的是要想永久生效必须将变量写入到环境变量文件中。

文档更新时间: 2024-03-06 08:49   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室