History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)
目 录
一、history命令介绍
1、history命令是什么?
2、history的主要功能
二、history命令的用法
1、语法
2、选项说明
3、命令实例
三、history和历史记录文件bash_history
四、history命令的相关配置
1,命令带时间展示-HISTTIMEFORMAT
2,命令行数大小-HISTSIZE
3、设置命令保存的行数
4、历史记录文件名称-HISTFILE
5,管理历史记录的变量 -HISTCONTROL
6、历史记录中需要忽略的命令-HISTIGNORE
7,当前shell开启或关闭历史记录功能
四、编写bash脚本从记录文件中提取history命令
一、history命令介绍
1、history命令是什么?
history命令在Linux系统中用于显示和管理用户在command line界面执行过的命令历史记录。这个命令会读取历史命令文件中的目录到历史命令缓冲区,同时也会将历史命令缓冲区中的目录写入命令文件。
2、history的主要功能
history有以下几个主要功能:
- 显示历史命令:当用户在命令行中输入history并按下回车键时,会显示出当前用户之前执行过的所有命令的列表。这些命令按照执行的时间顺序排列,最新的命令显示在最下面。
- 执行历史命令:在命令行中,可以使用符号!加上命令的编号来快速执行历史命令。例如,!100会执行历史记录中的第100条命令。此外,!!命令可以快速执行上一条命令。
- 管理历史命令:history命令还提供了一些选项,允许用户管理他们的命令历史记录。例如,
- history -c命令可以清除所有的命令历史记录,
- history -w命令将当前的命令历史记录写入到历史文件中。
另外,环境变量HISTSIZE控制了内存中能够存储的历史命令的数量,默认值是1000。
- 查询命令执行时间:虽然默认不显示命令的执行时间,但history命令实际上已经记录了这些信息。如果需要查看命令的执行时间,可以通过设置环境变量HISTTIMEFORMAT来实现。
- 按用户分别记录命令:每个用户在都有自己的命令历史记录,这些记录保存在用户主目录下的.bash_history文件中。只有root用户才能查看其他用户的命令历史记录。
二、history命令的用法
以下是history命令的详细语法说明:
1、语法
history [选项] [参数]
2、选项说明
选项有如下:
-c:清空命令历史。
此选项会清除当前会话中的命令历史记录,但不会影响保存在.bash_history文件中的记录。
-d <offset>:删除历史记录中指定的第<offset>个命令。
<offset>表示命令在历史列表中的位置。
<n> 或 -n:显示最近的<n>条历史命令。
如果不指定<n>,则默认显示当前会话中的所有历史命令。注意,这里的<n>应直接跟在history命令后面,而不是作为选项参数。
-a:追加本次会话新执行的命令历史列表至历史文件。
这会将当前会话中新增的命令追加到.bash_history文件中。
-r:读历史文件附加到历史列表。
此选项会将保存在.bash_history文件中的命令历史读取并加载到当前会话的历史列表中。
-w:保存历史列表到指定的历史文件。
此选项会将当前会话的命令历史保存到指定的文件中,通常是.bash_history文件。
-p:展开历史参数成多行,但不存在历史列表中。
此选项允许用户以多行形式查看历史参数,但并不会将这些参数添加到历史列表中。
-s:展开历史参数成一行,附加在历史列表后。
此选项会将历史参数以单行形式附加到历史列表的末尾。
history命令的选项和参数可能会因不同的操作系统版本或shell类型而有所差异。上述是基于常见的Bash shell进行说明的。
3、命令实例
History的命令介绍很多,后面也会讲到一些命令。这里就不再累述了。若大家有兴趣,可以留言给我,后期我可以再整理一下。
三、history和历史记录文件bash_history
.bash_history文件是Bash shell默认保存命令历史的文件,通常位于用户主目录下。
1、当用户登录shell时,系统会将该文件中的命令历史读取到内存(缓冲区)中,以供history命令查询和显示。用户所操作的所有 Linux 命令,都会记录在 缓冲区 中。包括 history 命 令所执行的历史命令管理,都是在操作 缓冲区 ,而不是直接操作 .bash_history 文件。
2、当用户退出 Shell,比如按下 Ctrl+D 时,Shell 进程会把历史记录缓冲区的内容,写回到 .bash_history 文件中去。
.bash_history文件中的命令历史记录是持久保存的,而history命令操作的是当前会话内存中的历史列表。因此,使用history -c清空当前会话历史记录并不会影响.bash_history文件中的记录。
四、history命令的相关配置
1,命令带时间展示-HISTTIMEFORMAT
[root@localhost ~]# export HISTTIMEFORMAT='%F %T '
2,命令行数大小-HISTSIZE
#若将HISTSIZE设置为0,代表禁用history
[root@localhost ~]# export HISTSIZE=0
[root@localhost ~]# export HISTSIZE=100000
3、设置命令保存的行数
超过的话会自动删除最老的数据
[root@localhost ~]# export HISTFILESIZE=8000
4、历史记录文件名称-HISTFILE
# 设置历史记录的文件名称为/home/history.log
[root@localhost ~]# export HISTFILE=/home/history.log
5,管理历史记录的变量 -HISTCONTROL
HISTCONTROL 是一个环境变量,它决定了如何管理历史记录。它的值可以是以下几种:
ignorespace:忽略以空格开头的命令。
ignoredups:忽略连续重复的命令。
ignoreboth:忽略以空格开头和连续重复的命令。
erasedups:删除连续重复的命令,只保留一个。
ignoreallbutlast:忽略所有命令,只保留最后一个。
比如:
# 去除连续的相同命令的条目,只保留一个。
[root@localhost ~]# export HISTCONTROL=ignoredups
# 在不想被记住的命令前面输入一个空格-就不会被记住
[root@localhost ~]# export HISTCONTROL=ignorespace
6、历史记录中需要忽略的命令-HISTIGNORE
HISTIGNORE 是一个环境变量,用于指定在历史记录中需要忽略的命令。比如:
#忽略pwd、ls命令
[root@localhost ~]# export HISTIGNORE="pwd:ls:"
7,当前shell开启或关闭历史记录功能
set +o history 开启,命令会被记录到历史记录中
set -o history 关闭。命令不会被记录到历史中
五、编写bash脚本从记录文件中提取history命令
查看了,发现.bash_history文件的格式包含时间戳和命令,混在一起不好看,大概格式如下:
#1704944134
tcpdump -i eth0 host 110.43.204.73 -w /home/20240111.pcap
#1704972568
date
因此编写了个bash脚本,从这个文件提取这些时间戳和命令,方便查看。代码如下:
#!/bin/bash # 检查输入参数
if [ "$#" -ne 1 ]; then echo "Usage: $0 <path_to_.bash_history_file>" exit 1
fi # 检查参数文件是否存在
if [ ! -f "$1" ]; then echo "Error: File $1 does not exist." exit 1
fi # 读取.bash_history文件,并输出命令编号和命令
line_number=1
while IFS= read -r line; do # 检查行是否以#开头,如果是,则认为是时间戳 if [[ $line =~ ^\#[0-9]+$ ]]; then timestamp=${line:1} # 去掉#,保留时间戳 else # 输出命令编号和命令 echo "$line_number $line" ((line_number++)) fi
done < "$1"
脚本演示:
[root@ecs-52a1 121yunwei]#
[root@ecs-52a1 121yunwei]#
[root@ecs-52a1 121yunwei]# ./con2.sh /root/.bash_history
1 rpm -qa|grep -i mysql
2 Find / -name mysql
3 find / -name mysql
4 rm -rf /usr/share/selinux/targeted/default/active/modules/100/mysql
5 rm -rf /var/lib/selinux/targeted/active/modules/100/mysql
6 rm -rf /etc/my.cnf
7 cat /etc/my.cnf
8 rpm -qa|grep -i mysql
9 rpm -qa|grep -i mysql
10 rpm -qa|grep -i maridb
11 systemctl stop firewalld
12 systemctl disable firewalld
13 vi /etc/selinux/config
14 netstat -ano | grep 8066
15 netstat -ano|grep 8066
16 netstat -ano|grep 8067
17 netstat -ano|grep 6379
18 netstat -ano|grep 5060
19 netstat -ano|grep 8083
20 netstat -ano|grep 3306
21 cd /home
22 df -h
23 du -h --max-depth=0
24 du -hd0
25 df -hl
26 chmod 777 ivms_deploy.sh
27 sh ivms_deploy.sh
28 exit
[root@ecs-52a1 121yunwei]#
[root@ecs-52a1 121yunwei]#
注意: 1,命令格式为:./con2.sh /root/.bash_history ,后面的是读取的bash_history文件的完整路径;
2,输入的几个命令没有看到,因为这些命令还在缓冲区中,还没有写到bash_history文件中。
相关文章:
History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)
目 录 一、history命令介绍 1、history命令是什么? 2、history的主要功能 二、history命令的用法 1、语法 2、选项说明 3、命令实例 三、history和历史记录文件bash_history 四、history命令的相关配置 1,命令带时间展示-HISTTI…...
apisix 单机部署 linux
安装etcd: cd /home/app rz tar -zxvf etcd-v3.5.4-linux-amd64.tar.gz cd etcd-v3.5.4-linux-amd64 vim start.sh内容: #!/bin/sh nohup etcd --name infra0 --initial-advertise-peer-urls http://127.0.0.1:2380 \--listen-peer-urls http://127.0.…...
Redis 面试题 | 06.精选Redis高频面试题
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
2008年苏州大学837复试机试C/C++
2008年苏州大学复试机试 题目 编写程序充成以下功能: 一、从键盘上输入随机变量x的 10个取样点。X0,X1—X9 的值; 1、计算样本平均值 2、判定x是否为等差数列 3、用以下公式计算z的值(t0.63) 注。请对程序中必要地方进行注释 补充:个人觉得这个题目回忆…...
MySQL笔记-information_schema库中COLUMNS表的一些笔记
mysql建表中可以添加comment,也就是注释,这些注释会写到information_schema库的COLUMNS表中,可以使用如下SQL语句进行查询: SELECT COLUMN_NAME, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA your_data…...
归并排序模板
模板在文末,以下步骤方便理解记忆。 先贴一张快速排序模板步骤,用于对比记忆 归并排序步骤: (0)如果数组左边界L ≥ 数组右边界,则不需要排序,直接return。 (1)直接取…...
【NVIDIA】Jetson Orin Nano系列:安装 Qt6、firefox、jtop、flameshot
1、使用命令安装 sudo apt install qtcreator sudo apt install qt6-* sudo apt install libqt6* sudo apt install qml-qt6 sudo apt install qmlscene-qt6 sudo apt install assistant-qt6 sudo apt install designer-qt62、启动 qtcreator 3、常用工具安装 sudo apt in…...
Fastapi+Jsonp实现前后端跨域请求
文章目录 一、实现方法1.后端部分【Fastapi】2.前端部分【JS】二、测试一、实现方法 1.后端部分【Fastapi】 # coding:utf-8import json from fastapi import FastAPI, Response from fastapi.middleware.cors import CORSMiddlewareapp = FastAPI(...
MacOS受欢迎的数据库开发工具 Navicat Premium 15 中文版
Navicat Premium 15 Mac是一款数据库管理工具,提供了一个全面的解决方案,用于连接、管理和维护各种数据库系统。以下是Navicat Premium 15 Mac的一些主要功能和特点: 软件下载:Navicat Premium 15 中文版下载 多平台支持ÿ…...
helm---自动化一键部署
什么是helm?? 在没有这个helm之前,deployment service ingress helm的作用就是通过打包的方式,把deployment service ingress 这些打包在一块,一键式部署服务,类似于yum 官方提供的一个类似于安装仓库的功能,可以实…...
求助帖(setiosflags)的左右对齐问题:
以后自己要注意,如果两个相互矛盾的标志同时被设置,如先设置 setiosflags(ios::right),然后又设置 setiosflags(ios::left),那么结果可能就是两个标志都不起作用。因此,在设置了某标志,又要设置其他与之矛盾…...
升级8.0:民生手机银行的“内容解法”
数字化浪潮,滚滚来袭。 随着数字中国建设的持续推进,数字经济正在蓬勃发展。中商产业研究院分析师预测,2023年中国数字经济市场规模将增长至56.7万亿元,占GDP的比重将达到43.5%。 在此浪潮下,数字化的触角蔓延到各行…...
Kubernetes多租户实践
由于namespace本身的限制,Kubernetes对多租户的支持面临很多困难,本文梳理了K8S多租户支持的难点以及可能的解决方案。原文: Multi-tenancy in Kubernetes 是否应该让多个团队使用同一个Kubernetes集群? 是否能让不受信任的用户安全的运行不受信任的工作…...
【GEE】GEE反演地表温度相关问题说明(空洞、Landsat9数据集等)
之前分享了基于GEE-Landsat8数据集地表温度反演(LST热度计算),最近有很多小伙伴私信我很多问题,一一回复太慢了,所以今天写篇文章统一回答一下大家的问题。 问题1:数据有很多空洞、某些条带没有数据等 问题…...
【蓝桥备赛】数组分割——组合数学?
题目链接 数组分割 个人思路 两个数组都需要和为偶数,那么就去思考一个数组如何才能和是偶数呢?? 数组里肯定要么是奇数要么是偶数,偶数无论有多少个,都不会改变一个数组的奇偶性。但是奇数个奇数的和还是奇数&…...
iphone5s基带部分电源部分主主电源供电及
时序: 1.,基带电源的供电,基带电源也叫pmu。 首先时序图说电池提供供电,电池是J6接口,视频习惯把接口称之为座子。查U2_RF芯片,发现供电信号为PP_BATT_VCC_CONN,但是没查到跟电池座子有关系,电池座子写的是…...
【每日一题】按分隔符拆分字符串
文章目录 Tag题目来源解题思路方法一:遍历方法二:getline 写在最后 Tag 【遍历】【getline】【字符串】【2024-01-20】 题目来源 2788. 按分隔符拆分字符串 解题思路 方法一:遍历 思路 分隔符在字符串开始和结束位置时不需要处理。 分隔…...
spawn_group_template | spawn_group | linked_respawn
字段介绍 spawn_group | spawn_group_template 用来记录与脚本事件或boss战斗有关的 creatures | gameobjects 的刷新数据linked_respawn 用来将 creatures | gameobjects 和 boss 联系起来,这样如果你杀死boss, creatures | gameobjects 在副本重置之前…...
软考系分之计算机网络规划设计、综合布线、RAID和网络存储等
文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列(RAID)5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层,接…...
使用ElEment组件实现vue表单校验空值
1.绑定表单组件数组rules 2.在data域中设定组件rules 3.设定调用方法函数 提交校验 取消: 测试页面 提交空值 失去焦点 取消重置 提交后重置...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
