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

1 为什么要优化系统历史记录

对于linux系统,默认情况下,系统记录的历史命令比较简单。某些历史记录可能也无法正常保存,因此当服务器出现异常,希望通过历史命令来了解曾经做了哪些操作时,往往非常被动,下面就给大家介绍如何通过系统内置的变量来优化历史记录,使得查看历史记录更加方便。

2 HISTSIZE和HISTFILESIZE

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

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

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

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

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

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

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

3 HISTCONTROL

使用HISTCONTROL变量,我们可以控制 bash 如何存储已执行命令的历史记录。

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

另一种选择是告诉 bash 不要存储重复项。这是通过HISTCONTROL变量完成的。 HISTCONTROL控制 bash 如何存储命令历史记录。目前有两个可能的标志:ignorespace 和ignoredups。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"

4 HISTTIMEFORMAT

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

[root@k8s-master01 ~]# HISTTIMEFORMAT="%F %T "  #历史记录中加上年月日及时间
[root@k8s-master01 ~]# history |head -101  2023-07-16 23:03:51 df2  2023-07-16 23:03:51 yum install vim wget git strace3  2023-07-16 23:03:51 yum install net-tools4  2023-07-16 23:03:51 df5  2023-07-16 23:03:51 top6  2023-07-16 23:03:51 history7  2023-07-16 23:03:51 ls8  2023-07-16 23:03:51 vim ifcfg-eth09  2023-07-16 23:03:51 df10  2023-07-16 23:03:51 vim /etc/selinux/config

可以看到时间都是一样的,是定义变量后的时间,这属于正常现象,因为之前的记录并没有记录时间。后续的历史命令将会记录上执行时间。

5 PROMPT_COMMAND

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

[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
[2023-07-16 23:03 (172.20.15.57)] [root@/root] source /etc/profile
[2023-07-16 23:03 (172.20.15.57)] [root@/root] history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] tailf /var/log/history.d/history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] docker ps
[2023-07-16 23:03 (172.20.15.57)] [root@/root] hsit
[2023-07-16 23:03 (172.20.15.57)] [root@/root] history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] history
[2023-07-16 23:03 (172.20.15.57)] [root@/root] ssh 172.31.250.110
[2023-07-16 23:03 (172.20.15.57)] [root@/root] 2023-07-16 23:05:30 HISTTIMEFORMAT="%F %T "
[2023-07-16 23:03 (172.20.15.57)] [root@/root] 2023-07-16 23:05:41 history |head -10

可以看到,导入变量后,记录了历史命令的执行时间,登录ip、执行用户,以及具体命令等信息。这样完备的历史命令记录对于后期的问题排查是非常有益的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/475299.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战杯 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于CNN实现谣言检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&am…

宜昌博物馆龙文物展,以数据为盾完成文物保护

​一、湖北宜昌博物馆龙文物精品展的独特魅力 近日,在湖北宜昌博物馆举行的甲辰年龙文物精品展上,多件包含“龙元素”的文物正式向社会展出。龙自古以来就是中华民族象征,带有“龙图案”或“龙元素”的物件,广泛存在于中国人“吃…

vue-productionSourceMap作用

当其设置为false时(productionSourceMap: false) 当其设置为true时(productionSourceMap: true) 注:1.当设置为true时,打包后每个文件都有一个.map文件,其目的是为了精确定位代码错误 2.当设置为false时,可减少项目打包大小 3.正式环境禁止使用true,因为其可通过反编译.map文件…

固定资产与总账对账,业务系统出不来数据?

1、【财务会计】-【固定资产】-【与总账对账】 2、【财务会计】-【总账】-【对账执行】 以上两个节点都可以进行 “固定资产与总账” 对账执行 操作。 问题: 固定资产与总账对账,业务系统出不来数据?如下图 : 原因: 固定资产对账要确保,对账月是最早对账月才行,即…

圆筒形正压式采样器

一个人不愿意努力的时候,你怎样帮他也没有用!一个人不愿意被点燃的时候,你怎样燃烧也没有用!自己想醒,没有闹铃也能够醒来!自己想努力,没有帮助也能够成功!自己想点燃梦想&#xff0…

12.QT文件对话框 文件的弹窗选择-QFileDialog

目录 前言: 技能: 内容: 1. 界面 2.信号槽 3.其他函数 参考: 前言: 通过按钮实现文件弹窗选择以及关联的操作 效果图就和平时用电脑弹出的选文件对话框一样 技能: QString filename QFileDialog::ge…

多租户SaaS平台的数据库方案

多租户SaaS平台的数据库方案 1.1 多租户是什么1.2 需求分析1.3 多租户的数据库方案分析1.3.1 独立数据库1.3.2 共享数据库、独立 Schema什么是Schema 1.3.3 共享数据库、共享数据表 1.1 多租户是什么 多租户技术(Multi-TenancyTechnology)又称多重租赁技…

RK3568驱动指南|驱动基础进阶篇-进阶6 内核运行ko文件实验——系统调用

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

个性签名大全

只许一生浮世清欢愿我以孤独作为铠甲,自此不再受伤愿我是阳光,明媚而不忧伤我不敢太勇敢太执着太骄傲,我怕失去开始你是我的天使,最后你是我的唯一姐的霸气,无人能比,哥的傲气,无人能朋唯有万事…

京东平台的行业数据(数据分析报告)在哪里看?如何获取?

京东行业分析数据获取可通过以下途径: 京东官方不定期会发布行业白皮书或市场研究报告,商家可以关注京东官网、官方公众号、官方论坛等渠道获取最新发布的研究报告。 对于有技术开发能力的企业,可以通过申请接入京东开放平台API&#xff…

centos7如何切换到root用户

在 CentOS 7 中,你可以通过几种方式切换到 root 用户。最常用的方法是使用 su (switch user) 命令或者 sudo 命令。这里是如何使用这些命令的详细说明: 使用 su 命令 打开终端。输入以下命令并按下回车键:su -系统会提示你输入 root 用户的…

ADAPT: Action-aware Driving Caption Transformer 一个基于Transformer的驾驶场景理解的算法

ADAPT: Action-aware Driving Caption Transformer 是清华AI Industry Research(AIR 团队)在ICRA 2023发表的一篇自动驾驶领域的文章。 本文提出了一个基于Transformer端到端的框架,能够对于输入的自动驾驶场景流提供比较友好的自然语言描述,以及对自动驾…