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

你可能感兴趣的:(history记录操作命令,history命令,Linux)