Linux系统的历史记录添加时间和IP信息

1 系统history记录优化

默认情况下,系统是不会记录我们执行命令的时间等相关信息的。

1.1 HISTCONTROL

  • 介绍

使用HISTCONTROL变量,您可以控制 bash 如何存储您的命令历史记录。您可以告诉它忽略重复的命令和/或忽略具有前导空格的命令。

在命令行工作时,我们经常会多次执行某些命令。默认历史记录大小为 500,相同命令的重复次数太多会填满您的历史记录,并使您的历史记录变得无用。您当然可以使用HISTSIZEHISTFILESIZE增加历史列表的大小。

另一种选择是告诉 bash 不要存储重复项。这是通过HISTCONTROL变量完成的。HISTCONTROL控制 bash 如何存储命令历史记录。目前有两个可能的标志ignorespaceignoredups。ignorespace标志告诉 bash 忽略以空格开头的命令。另一个标志ignoredups告诉 bash 忽略重复项。如果您希望指定两个值,则可以用冒号 ignorespace:ignoredups连接和分隔值,或者您可以只指定``ignoreboth

  • 常用的HISTCONTROL变量有

ignoredups     默认,忽略重复命令

ignorespace     忽略所有一空格开头的命令

ignoreboth     ignoredups 和 ignorespace 的组合

erasedups      删除历史记录中重复命令,相同的指令仅保留最近的一个

如果同时设定多个选项,中间使用冒号。如:HISTCONTROL=ignorespace:erasedups

[root@k8s-master01 ~]# export |grep -i histc
declare -x HISTCONTROL="ignoredups"

1.2 HISTSIZE和HISTFILESIZE

  • 介绍

当 Bash shell 在用户登录时以交互方式加载时,它会将历史文件的内容读入内存。在 shell 会话期间,它将内容添加到 history 的内存副本中。

当我们在终端上执行历史命令时,Bash 会读取内存中的副本以显示已执行命令的历史记录。最后,当 shell 退出时,它会将内存中的内容写回到磁盘上HISTFILE环境变量指向的文件中。

默认情况下,内容存储在位于用户主目录的.bash_history文件中。

[root@k8s-master01 ~]# echo $HISTFILE
/root/.bash_history

HISTSIZE变量中设置的值是我们可以在内存中存储的最大历史行数。

HISTFILESIZE变量控制我们可以写回到磁盘上的历史文件的最大行数。

可以简单理解为HISTSIZE变量定义的是执行history命令时可以看到的命令数,HISTFILESIZE变量定义的是保存到磁盘中的history记录数。

https://www.baeldung.com/linux/bash-histsize-vs-histfilesize

[root@k8s-master01 ~]# echo $HISTSIZE
1000
[root@k8s-master01 ~]#
[root@k8s-master01 ~]# echo $HISTFILESIZE
1000

1.1.3 HISTTIMEFORMAT

  • 介绍

Linux 中的 bash shell 允许我们访问命令历史记录,即使用 history 命令按顺序执行的命令列表。history 命令用于跟踪所有已执行的命令。这在故障排除或审计期间非常重要。没有设置 HISTTIMEFORMAT 的历史命令只显示 command# 和 command 但不显示命令执行的时间。因此,要显示与每个历史条目关联的时间戳信息,必须设置 HISTTIMEFORMAT。

[root@k8s-master01 ~]# HISTTIMEFORMAT="%F %T " #历史记录中加上年月日及时间
[root@k8s-master01 ~]# history |tail
 310  2022-11-21 11:44:58 echo $HISTFILE
 311  2022-11-21 11:45:14 export |less
 312  2022-11-21 12:05:10 vim /etc/profile
 313  2022-11-21 12:05:25 HISTTIMEFORMAT="%F %T "
 314  2022-11-21 12:05:27 history
 315  2022-11-21 12:05:40 ls
 316  2022-11-21 12:05:41 history
 317  2022-11-21 12:06:00 vim /etc/profile
 318  2022-11-21 12:06:11 source /etc/profile
 319  2022-11-21 12:06:45 history |tail

图片

1.3 PROMPT_COMMAND

  • 介绍

在出现 shell 命令输入提示符之前,作为命令来执行这个变量。

https://juejin.cn/post/6844903834003701773

[root@k8s-master01 ~]# export PROMPT_COMMAND="date '+%F %T'"
2022-11-21 13:11:43# 在出现下面的提示符之前执行了 date 命令
[root@k8s-master01 ~]# ls
anaconda-ks.cfg hosts k8s-ha-install kernel-ml-4.19.12-1.el7.elrepo.x86_64.rpm kernel-ml-devel-4.19.12-1.el7.elrepo.x86_64.rpm kubeadm-config.yaml new.yaml rook
2022-11-21 13:11:48# 再次出现
[root@k8s-master01 ~]# a
-bash: a: command not found
2022-11-21 13:11:51# 每次命令行提示符出现之前它都会出现
[root@k8s-master01 ~]#

收集历史命令到文件中

[root@k8s-master01 ~]# mkdir -p /var/log/history.d
[root@k8s-master01 ~]# echo 'export PROMPT_COMMAND="(umask 000; msg=\$(history 1 | { read x y; echo \$y; }); echo [\$(who am i | awk \"{print \\\$(NF-2),\\\$(NF-1),\\\$NF}\")] [\$(whoami)@\`pwd\`]\" \$msg\" >>/var/log/history.d/history)"' >> /etc/profile
[root@k8s-master01 ~]# source /etc/profile
[root@k8s-master01 ~]# tailf /var/log/history.d/history
[2022-11-21 11:36 (172.20.18.152)] [root@/root] 2022-11-21 12:05:27 history
[2022-11-21 11:36 (172.20.18.152)] [root@/root] 2022-11-21 12:05:40 ls
[2022-11-21 11:36 (172.20.18.152)] [root@/root] 2022-11-21 12:05:41 history

图片

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值