linux--历史命令--history

 1.  history 常用于查看 当前用户 命令历史记录,可用于审计和黑客攻击

[root@www ~]# history [n]
[root@www ~]# history [-c]
[root@www ~]# history [-raw] histfiles
选项与参数:
n   :数字,意思是『要列出最近的 n 笔命令行表』的意思!
-c  :将目前的 shell 中的所有 history 内容全部消除
-a  :将目前新增的 history 命令新增入 histfiles 中,若没有加 histfiles ,
      则默认写入 ~/.bash_history
-r  :将 histfiles 的内容读到目前这个 shell 的 history 记忆中;
-w  :将目前的 history 记忆内容写入 histfiles 中!

范例一:列出目前内存内的所有 history 记忆
[root@www ~]# history
# 前面省略
 1017  man bash
 1018  ll
 1019  history 
 1020  history
# 列出的信息当中,共分两栏,第一栏为该命令在这个 shell 当中的代码,
# 另一个则是命令本身的内容喔!至于会秀出几笔命令记录,则与 HISTSIZE 有关!


范例二:列出目前最近的 3 笔数据
[root@www ~]# history 3
 1019  history 
 1020  history
 1021  history 3


范例三:立刻将目前的数据写入 histfile 当中
[root@www ~]# history -w
# 在默认的情况下,会将历史纪录写入 ~/.bash_history 当中!


其余的一些设置可以在.bash_profile文件中设置

export HISTCONTROL=ignoredups                              #忽略重复的命令

export HISTIGNORE=”[ ]*:&:bg:fg:exit”                      #忽略由冒号分割的这些命令

export HISTTIMEFORMAT=' %Y-%m-%d  %H:%M:%S '  #设置时间格式

export HISTTIMEFORMAT=' %F %T '                           #这个方法显示更清晰

HISTFILE=/root/.command_history.txt                        #重新设置保存历史命令的文件 默认.bash_history

export HISTFILESIZE=1000                                       #设置 记录命令文件 中保存命令的记录总数

export HISTSIZE=100                                              # 设置 history 命令输出的记录数


history 工作原理

  1. 登录 session , 输入命令 ,  当session 退出 , 才写入 .bash_history

   2. 一个用户 , 多个session 同时登录,会按照 退出 的 先后次序 ,依次写入 .bash_history

解决方法

实时记录历史命令,默认只有在用户退出之后才会统一记录,很容易造成多个用户间的相互覆盖。

export  PROMPT_COMMAND="history -a"


说明:设置  HISTFILE=/root/.command_history.txt

 cat  /root/.command_history.txt

      #1184649982
  touch 3
  #1184649984
  exit
  #1184650148
  History


  这个时间叫做Unix time,是从1970年1月1日临时起,到现在一共经过了多少秒
  因为1969年是Unix系统诞生,因此1970年1月1日被规定为Unix系统诞生的时间的初始
  Linux系统因为和Unix系统的相似性,也完全采用这种方式来记录时间


补充说明

有经验的 Linux 系统工程师都喜欢把 Bash 的 HISTSIZE/HISTFILESIZE 设置的很大,

这样可以记录更多的历史命令以便以后查阅,这是个好习惯,

但有个小问题就是 history 记录了的大量信息在系统启动后就被 load 到内存里,

并且一直保存在内存里,这样浪费了不少内存,据统计100000条历史记录大概占用 10MB 左右的内存。


#!/bin/bash
# archive linux command history files
 
umask 077
maxlines=2000
 
lines=$(wc -l < ~/.bash_history)
 
if (($lines > $maxlines)); then
    cut=$(($lines - $maxlines))
    head -$cut ~/.bash_history >> ~/.bash_history.sav
    sed -e "1,${cut}d"  ~/.bash_history > ~/.bash_history.tmp
    mv ~/.bash_history.tmp ~/.bash_history
fi

上面脚本所做的事情很简单,检查 .bash_history 文件,

如果行数超过2000行就剪裁2000行记录(这个值可以自定义,修改maxlines参数即可)

并将前 2000 行 转移到 .bash_history.sav 这个文件里,

这样我们就可以保存所有的历史记录,而且当前的历史记录不超过2000行,只占用少量资源。

你可能感兴趣的:(linux)