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行,只占用少量资源。