Linux之history历史命令管理

Linux之history历史命令管理

1.history命令简介

 当使用终端命令输入并执行命令时,Linux会自动把命令记录到历史列表中,一般保存在用户HOME目录下的.bash_history文件中。默认保存1000条,这个值可以更改。 

2.history语法

history(选项)(参数)
选项
-N: 显示历史记录中最近的N个记录;
-c:清空当前历史命令;
-a:将历史命令缓冲区中命令写入历史命令文件中;
-r:将历史命令文件中的命令读入当前历史命令缓冲区;
-w:将当前历史命令缓冲区命令写入历史命令文件中;
-d:删除历史记录中第offset个命令
-n:读取指定文件

3.使用命令历史

举例描述
!!运行上一个命令
!6运行第6个命令
!8/test运行第8个命令并在命令后面加上/test
!?CF?运行上一个包含CF字符串的命令
!ls运行上一个ls命令 (或以ls开头的历史命令)
!ls:s/CF/G运行上一个ls命令,其中把CF替换成G
fc编辑并运行上一个历史
fc 6编辑变运行第6条历史命令
bootroot^快速替换。将最后一个命令的boot替换为root后运行
!-5运行倒数第5个命令
!$运行前一个命令最后的参数

4.搜索历史命令

快捷键描述
↑(向上方向箭)查看上一个命令
↓(向下方向箭)查看下一个命令
Ctrl+p查看历史列表中的上一个命令
Ctrl+n查看历史列表中的下一个命令
Ctrl+r输入单词搜索历史命令
Alt+p输入字符查找与字符相接近的历史命令

5.执行history命令显示用户和执行时间

默认情况下history是这样显示命令的

[root@docker home]# history | head -10
   18  iptables -t filter -vnL INPUT  --line 
   21  iptables -t filter -vnL INPUT --line
   22  iptables -t filter -D INPUT 2
   23  iptables -t filter -D INPUT 1
   24  iptables -t filter -vnL INPUT --line
   26  iptables -t filter -A INPUT  -j REJECT
   27  iptables -vnL INPUT --line

为了方便排查问题,需要在每个执行命令前加上执行时间,添加如下内容到/etc/profile配置文件

vim /etc/profile
HISTTIMEFORMAT="%Y-%m-%d:%H-%M-%S:`whoami`: "
export HISTTIMEFORMAT
source /etc/profile

配置完成后,显示效果如下

[root@docker home]# history |head -10
   22  2019-10-22:10-18-27:root: iptables -t filter -D INPUT 2
   23  2019-10-22:10-18-27:root: iptables -t filter -D INPUT 1
   24  2019-10-22:10-18-27:root: iptables -t filter -vnL INPUT --line
   26  2019-10-22:10-18-27:root: iptables -t filter -A INPUT  -j REJECT
   27  2019-10-22:10-18-27:root: iptables -vnL INPUT --line

6.修改用户history命令保存条数

[root@docker ~]# sed -i 's/^HISTSIZE=1000/HISTSIZE=2000/' /etc/profile
[root@docker ~]# source /etc/profile   
查看当前history命令记录数量
[root@docker home]# echo $HISTSIZE
2000

7.实现脚本方式记录所有用户的history命令

实现功能如下:记录登录ip、登录用户、登录时间、执行命令。

操作方式如下:直接放到/etc/profile文件里,或者编辑脚本放到/etc/profile.d/目录下。

[root@docker root]# vim /etc/profile.d/history.sh
#!/bin/bash

export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
HISTDIR=/var/log/.hist
if [ -z $USER_IP ];then
   USER_IP=`hostname`
fi

if [ ! -d $HISTDIR ];then
   mkdir -p $HISTDIR
   chmod 777 $HISTDIR
fi

if [ ! -d $HISTDIR/${LOGNAME} ];then
   mkdir -p $HISTDIR/${LOGNAME}
   chmod 300 $HISTDIR/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date "+%Y%m%d_%H%M%S"`
export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.hist.$DT"
chmod 600 $HISTDIR/${LOGNAME}/*.hist* 2>/dev/null

[root@docker root]# source /etc/profile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值