Linux命令之history

history

history命令:用于显示历史记录和执行过的指令命令。

[[email protected] ~]# history
1 history
2 cat .bash_history
3 ls
4 history

格式

history: usage: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]

常用指令

-c:清空当前历史命令;对命令历史文件没有影响

示例:
image.png

[[email protected] ~]# history -c
[[email protected] ~]# history  
   1  history  

-d:删除历史记录中第offset个命令;

示例:
我们使用history查看有4条命令,想删除第3条命令,就可以使用history -d 后面更第几个命令,如history -d 3就是删除第三条命令,如图所示:
image.png

n:打印最近的n条历史命令

示例:
历史命令默认存1000行,直接敲history会显得特别长,并且不好找想要的信息,我们可以用history 3这样来查看最近的3条命令。
image.png

-a:append将历史命令缓冲区中命令写入历史命令文件(/root/.bash_history);

示例:
image.png

-r:read将历史命令文件中的命令读入当前历史命令缓冲区;

示例:
将/root/.bash_history中的文件里的命令加到历史命令缓冲区,我们在次查看history就可以看到22-30就是我们前面9条已经提交到文件的命令。
image.png

-w:write将当前历史命令缓冲区命令写入历史命令文件中(/root/.bash_history);
这个就不举例了,history -w后查看历史命令文件就可以看到我们刚写进去的命令了

-s: 展开历史参数成一行,附加在历史列表后。用于伪造命令历史。记录但不操作。

示例:
假装杀死jenkins进程,在历史命令中可以看到我们有kill命令但是因为我们使用history -s,该命令只是我们伪造出来的命令,并没有被执行。
image.png

-p: 展开历史参数成多行,但不记录在历史列表中。操作但不记录历史

示例:
使用-p执行命令,在history中不会被记录
image.png
**

环境变量

HISTSIZE 命令历史记录的条数 默认为1000
image.png
在/etc/profile环境变量中修改,重新加载即可
image.png

HISTFILE 指定历史文件,默认为~/.bash_history
HISTFILESIZE 命令历史文件记录历史的条数

HISTTIMEFORMAT显示时间
一般默认是不显示时间的
在配置文件中添加下面这行
HISTTIMEFORMAT="%F %T " 记得%T后面有个空格
image.png
如果想要更加详细的参数提示可以这么设置
修改历史命令存放的位置并显示时间和用户

HISTDIR=/usr/share/history
DT=`date +%Y%m%d_%H%M%S`
if [ ! -d $HISTDIR ];then
   mkdir -p $HISTDIR
   chmod 777 $HISTDIR
fi
if [ ! -d $HISTDIR/${LOGNAME} ];then  #LOGNAME获取当前登录用户
   mkdir -p $HISTDIR/${LOGNAME}
   chmod 300 $HISTDIR/${LOGNAME}
fi
export HISTFILE="$HISTDIR/${LOGNAME}/history.$DT"
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] [$(whoami)] "
#记录shell执行的每一条命令    
export PROMPT_COMMAND='\
if [ -z "$OLD_PWD" ];then
 export OLD_PWD=$PWD;
fi
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ];then
 logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)"
fi
export LAST_CMD="$(history 1)"
export OLD_PWD=$PWD;'

image.png

image.png

在生产环境中root不是所有人都有的,这样可以在一个文件夹下查看所有用户,并且在用户里也可以看到来源ip,把每个IP 和每个用户都区分记录。

[[email protected] ~]# ls /usr/share/history/
root
[[email protected] ~]# su - www
Last login: Wed Nov 20 03:49:36 EST 2019 on pts/2
[[email protected] ~]$ ls
[[email protected] ~]$ history  
   1  [2019-11-20 04:07:32] [192.168.59.1] [www] ls
   2  [2019-11-20 04:07:34] [192.168.59.1] [www] history  
[[email protected] ~]$ logout
[[email protected] ~]# ls /usr/share/history/
root  www
[[email protected] ~]# ls /usr/share/history/root/
192.168.59.1-20191120_041117

小知识

如何执行上一条历史命令

  1. 使用上方向键,并回车执行。
  2. 按 !! 并回车执行。
  3. 输入 !-1 并回车执行。
  4. 按 Ctrl+P 并回车执行。

执行以前的命令

假如我想执行以前的命令,但是我又不想在敲一遍命令
1.可以使用Ctrl+r的方式进行查找,查找到想要的命令回车就可以执行了。
image.png
2.如果知道这条命令是第几个,也可以直接用!n的方式执行
示例:
我想执行第四条命令,就可以直接!4去执行
image.png

[[email protected] ~]# history  
   1  2019-11-20 02:57:45 ps
   2  2019-11-20 02:57:46 w
   3  2019-11-20 02:57:49 cd
   4  2019-11-20 02:57:51 uptime  
   5  2019-11-20 02:58:02 date
   6  2019-11-20 02:58:08 history  
[[email protected] ~]# !4
uptime  
02:58:17 up  4:16,  3 users,  load average: 0.00, 0.01, 0.05
版权声明:本文为weixin_43931358原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43931358/article/details/103177119

智能推荐

[学习记录,]Mybatis入门

环境: Eclipse 2019 Tomcat 9.0 jdk1.8 开搞 首先创建工程 结构如下 导入Jar包 可在mybatis官网下载 http://www.mybatis.cn/82.html 配置文件mybatis-config.xml 事务管理有两种:JDBC和MANAGED JDBC: MANAGED 数据源类型:UNPOOLED、POOLED、JNDI 创建实体类文件User.ja...

运用for语句来判断数组中值得大小

总结: 1将if语句与数组联合起来判断输入中各组中的最大最小值; 2注意:定义的数组数量是躲多少就要输入多少组数据,少输入就无法输出;...

Bridging signals

Bridging signals Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 10926Accepted: 5982 Description 'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. Once ...

一天一大 leet

一天一大 leet 题目(难度:困难): 示例 抛砖引玉 官方答案 高手在民间 菜鸡的自白 20200606 题目(难度:困难): 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例 示例 抛砖引玉 要求算法的时间复杂度为 O(n),即限制了只能循环一次; 先对数组排序 循环数组记录后一个元素等于前一个元素+1或者等于前一个元素的数量 满足条件++,不然重...

Tensorflow实现的CNN文本分类

https://blog.csdn.net/somtian/article/details/69359498 原博文, github 在这篇文章中,我们将实现一个类似于Kim Yoon的卷积神经网络语句分类的模型。 本文提出的模型在一系列文本分类任务(如情感分析)中实现了良好的分类性能,并已成为新的文本分类架构的标准基准。 本文假设你已经熟悉了应用于NLP的卷积神经网络的基础知识。 如果没有,建议...

猜你喜欢

JDBC新手入门教程

开发工具:idea 数据库:mysql jar包:junit-4.10 mysql-connector-java-8.0.18 junit-4.10下载 mysql-connector-java-8.0.18下载 注意1:jdbc的驱动因为使用的是mysql-connector-java-8.0.18,所以为(“com.mysql.cj.jdbc.Driver”),而不是(...

Lua 排序 table.sort

    正如C#中有Array.Sort(),lua中也有自己的排序方法即table.sort(table,function)。     lua中的排序默认是从大到小的排序;     传入一个方法参数,可以使排序从小到大; 打印结果:  ...

SURF算法简述及Python标记SURF特征检测实践

目录 一、SURF算法 1.算法简介 2.SURF与SIFT的具体差异 二、Python代码实践 1.测试环境 2.测试代码 3.核心函数 4.测试结果 一、SURF算法 1.算法简介 SURF(Speeded-Up Robust Features)加速稳健特征,是一种稳健的局部特征点检测和描述算法。 SURF是对SIFT算法的改进,该算子在保持 SIFT 算子优良性能特点的基础上,同时解决了 S...

Selenium3自动化测试——19.读取数据文件

1. 实现目标 在测试与开发中,经常需要对文件进行各种读取操作。这里介绍针对txt、csv、xml、json文件的读取。 2. 读取TXT文件 2.1 user_info.txt文件 2.2 读取txt文件.py 2.3 实现结果 3. 读取csv文件 3.1 user_info.csv  这里要注意,csv文件本身打开是utf-8的,而不是乱码 3.2 读取csv文件.py 这里,针对...

Flask 介绍

Flask 学习笔记 一、Flask 简介         Flask 是一款非常流行的 Python Web 框架,出生于 2010 年,作者是 Armin Ronacher,本来这个项目只是作者在愚人节的一个玩笑,后来由于非常受欢迎,进而成为一个正式的项目。         Flask 自2010年发布第一个版本以...