History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)

这篇具有很好参考价值的文章主要介绍了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有以下几个主要功能:

  1. 显示历史命令:当用户在命令行中输入history并按下回车键时,会显示出当前用户之前执行过的所有命令的列表。这些命令按照执行的时间顺序排列,最新的命令显示在最下面。
  2. 执行历史命令:在命令行中,可以使用符号!加上命令的编号来快速执行历史命令。例如,!100会执行历史记录中的第100条命令。此外,!!命令可以快速执行上一条命令。
  3. 管理历史命令:history命令还提供了一些选项,允许用户管理他们的命令历史记录。例如,
    1. history -c命令可以清除所有的命令历史记录,
    2. history -w命令将当前的命令历史记录写入到历史文件中。

另外,环境变量HISTSIZE控制了内存中能够存储的历史命令的数量,默认值是1000

  1. 查询命令执行时间:虽然默认不显示命令的执行时间,但history命令实际上已经记录了这些信息。如果需要查看命令的执行时间,可以通过设置环境变量HISTTIMEFORMAT来实现。
  2. 按用户分别记录命令:每个用户在都有自己的命令历史记录,这些记录保存在用户主目录下的.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文件中。文章来源地址https://www.toymoban.com/news/detail-816575.html

到了这里,关于History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一篇文章教会你如何编写一个简单的Shell脚本

    Shell脚本概念 Shell 脚本是一种用于自动化执行一系列命令和操作的脚本文件。它使用的是 Shell 解释器(如 Bash、Korn Shell、Zsh 等)来解释和执行其中的命令。Shell 脚本通常用于编写简单的任务和工作流程,可以帮助我们进行系统管理、批量处理、自动化部署等任务。 以.sh后缀

    2024年02月10日
    浏览(48)
  • Docker笔记-搭建Python环境、安装依赖、打包镜像、导入镜像、编写bash脚本灵活调用

    适合无联网的机器及多Python的机器进行部署。 有网络及有docker的,拉取指定版本的python如: 安装好后进入容器: 使用pip安装各种依赖: 千万不要退出,另外启动一个shell,查下目前运行的容器: 制作成新的镜像: 导出新镜像: 找到没联网有docker的机器,导入新的镜像 在新

    2024年02月21日
    浏览(49)
  • Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    在  Linux shell编程学习笔记42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我们提到编写一个在Linux系统下比较两个文件内容是否相同的脚本。 基本思路是: 其中有两个难点: 1.文件的md5值的获取 2.md5值的比较 对于第1个难点,我们的解决办法是

    2024年04月10日
    浏览(72)
  • BASH shell脚本篇2——条件命令

    这篇文章介绍下BASH shell中的条件相关的命令,包括:if, case, while, until, for, break, continue。之前有介绍过shell的其它基本命令,请参考:BASH shell脚本篇1——基本命令 1. If语句 if 语句用于在顺序执行语句的流程中执行条件任务。 If 语句通常用于在Bash脚本中做出决定。它们根据

    2024年02月07日
    浏览(45)
  • 又一个基于 GPT-4 编写、解释代码的工具,诞生了!

    作者:JackTian 来源:公众号「杰哥的IT之旅」 ID:Jake_Internet 链接:又一个基于 GPT-4 编写、解释代码的工具,诞生了! 上周,Open AI 团队正式宣布:GPT-4 来了! GPT-4 的出现,随后 Microsoft 的多个产品就集成了 GPT-4。 紧接着基于 Open AI 公司发布的 GPT-4 编写、编辑和讨论代码新一

    2023年04月18日
    浏览(34)
  • 如何写一个sh脚本将一个本地文件通过 scp命令上传到远程的 centos服务器?

    这篇博文分享如何使用 scp 和 expect 命令写一个脚本来自动填充密码并实现自动登录并上传文件到服务器。 假设目标服务器: 192.168.159.175 远程文件服务器登录账号假设是 root 远程文件服务器登录密码假设是 toor /Users/zhaoqingfeng/downloads/test/dist/ 是前端打包部署文件夹 将 /Users/

    2024年02月09日
    浏览(52)
  • 编写第一个Selenium脚本

    目录 安装Selenium类库 请求对应的程序语言 Pip 下载 在项目中使用 编写第一个Selenium脚本

    2024年02月03日
    浏览(27)
  • 【Linux】编写一个 shell 脚本&执行

    在Linux中编写和执行脚本相对简单。下面是一个基本的步骤指南,帮助你创建一个简单的bash脚本并运行它: 1. 创建脚本文件 首先,你需要使用文本编辑器创建一个新的文件。这个文件通常会有 .sh 的扩展名,以表明它是一个shell脚本。例如,你可以创建一个名为 myscript.sh 的文

    2024年04月26日
    浏览(34)
  • 自动化用例编写思路 (使用pytest编写一个测试脚本)

    目录 一,明确测试对象 二,编写测试用例 构造请求数据 封装测试代码 断言设置 三,执行脚本获取测试结果 四,总结 经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下

    2024年02月16日
    浏览(57)
  • Linux history 命令详解:如何查看、显示时间、清空、重复和控制历史记录

    在 Linux 中,如果你使用终端操作系统(sh、bash、zsh、fish等),那么有一个非常强大且方便的命令叫做 history 。它的作用是让你查看之前终端中输入的所有命令记录,以及可以方便地快速重复执行某个命令或修改一些参数后重新执行。下面我们来看一下Linux history常用命令:

    2024年02月04日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包