Linux history 命令总结

2018/06/15 Linux

简介

history 翻译成中文是 『历史,历史记录』的意思,工作中也经常使用该命令去查看我们之前执行了哪些命令。

同时在服务器被入侵之后,也可以帮助我们排查问题。在服务器安全方面通过相应的配置也可以做审计使用。

使用方法

$ history [OPTIONS]

接下来介绍一些常用的选项:

选项 作用
-c 清空命令历史,历史文件中不会清除
-a 追加本次会话执行的新命令至命令历史文件中
-d 删除命令历史中指定的条目
-r 取历史文件并将内容追加到历史列表中

除了常用的选项之外,history 命令还有一些可以提高效率的快捷操作:

指令 作用
!# # 代表数字,执行命令历史中第#条命令
!string 调用历史中最近一个以string开头的命令
!! 重复运行上一条命令

环境变量

1、HISTTIMEFORMAT

HISTTIMEFORMAT 用于在历史记录中记录执行命令时的时间,常用的时间格式与 date 命令相同。

export HISTTIMEFORMAT="%F %T "

注意:在设置此变量时最后一个时间单位后面要加一个空格,不然命令和时间是连在一起的;

HISTTIMEFORMAT示例 1

2、HISTSIZE

定义了执行 history 命令时输出多少条命令到屏幕上,默认1000条。

export HISTSIZE="3000"

3、HISTFILESIZE

定义了在储存命令历史的文件中保存命令的记录总数,默认是 ` ~/.bash_history `

export HISTFILESIZE="3000"

4、HISTFILE

定义了存储历史文件的路径和名称,默认是 ~/.bash_history;修改此变量可以定义存储到其它位置;

export HISTFILE="/usr/share/.history/.bash_history"

5、HISTCONTROL

该变量有两个作用:

  1. 将连续执行的同一条命令剔除,仅保留一条记录;
  2. 清除整个命令历史中重复的条目;

export HISTCONTROL="ignoredups|erasedups"
# ignoredups:将连续执行的同一条命令剔除,仅保留一条记录
# erasedups:清除整个命令历史中重复的条目

ignoredups 示例如下:

HISTCONTROL示例1 1

其它参数

1、用户打开多个终端(产生多个session)情况下,共享history

由于bash的history文件默认是覆盖,如果存在多个终端,最后退出的会覆盖以前历史记录,改为追加形式

$ vi ~/.bash_profile   //添加以下内容
shopt -s histappend

2、实时追加history,不必等用户退出才将内存中的history记录到文件

$ vi ~/.bash_profile   //添加以下内容
PROMPT_COMMAND=”history -a

实战命令执行历史加固

通过以上掌握到的知识点,我们可以利用 history 命令的几个环境变量实现命令行历史加固、命令审计的功能,具体实现方式如下:

# vim /etc/profile
# 设置终端空闲超时断开时间
export TMOUT=600
readonly TMOUT

# history 命令历史加固
# 获取当前登录用户的IP地址
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'` 
# 定义存储命令历史的目录位置
HISTDIR=/usr/share/.history

if [ -z $USER_IP ]; then
    USER_IP=`hostname` 
fi

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

# ${LOGNAME} 为系统变量,存储了当前登录用户的名字
if [ ! -d $HISTDIR/${LOGNAME} ]; then
    mkdir -p $HISTDIR/${LOGNAME}
    chmod 300 $HISTDIR/${LOGNAME}
fi

export HISTSIZE=4000
DT=`date +%Y%m%d_%H%M%S`
export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT" export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"
chmod 600 $HISTFILE/${LOGNAME}/*.history* 2>/dev/null

# source /etc/profile

效果:每个帐号每次的登录IP以及运行命令都会记录在该目录,并且普通用户是没有权限查看该历史文件的。

Search

    Table of Contents