历史命令与实时记录(redhat6.8)
历史命令与实时记录(redhat6.8)
2018年02月13日 10时58分53秒
默认情况下,我们在命令行指定的命令,在我们退出当前用户之后,内存中存储的历史命令会记录到家目录的.history文件中,日志的格式以及这种记录的方法都是根据一系列的参数决定的,我们可以修改这些参数,定制日志记录。
参数
HISTTIMEFORMAT
决定历史记录的格式,是否加时间。


我们为本次脚本定制一个更加直观的样式:
# 后面的%F %T是c函数strftime的格式化,可以通过man strftime查看
export HISTTIMEFORMAT="[%F %T][$USER][`who am i 2> /dev/null | gawk '{printf $NF}' | sed -e 's/[()]//g'`]"

HISTSIZE
控制内存中的历史命令的条数
如:系统的默认1000条,当退出系统的时候会将内存中的历史命令写到文件中
HISTFILESIZE
文件中存储的历史的条数,如果想禁用写多少条,可以使用HISTFILESIZE=0来禁止写入
HISTFILE
默认历史记录会写到用户的家目录的.bash_history文件中,我们可以使用这个变量来修改命令被写入的位置
HISTCONTROL
使用这个变量来控制历史命令的去重
export HISTCONTROL=ignoredups # (去除连续的重复指令)
export HISTCONTROL=erasedups # (去除所有的重复命令)
# 命令:history -c清除所有的历史命令
HISIGNORE
在存储的时候忽略某些指令,如果写ls,只会忽略ls,而不会忽略ls -l
例子:export HISIGNORE="pwd:ls:history"
实时记录参数(PROMPT_COMMAND)
上面的记录方式会有一个限制的地方,那就是我们必须要的等到用户退出的时候才能将历史命令写到文件中去,如果有人history -c 命令就被清空了, 下面提供一种实时写入的方法。
配置PROMPT_COMMAND参数
export PROMPT_COMMAND='{ date "+%F %T ##### $(who am i | gawk "{print $NF}") #### $(history 1|{ read x cmd;echo "$cmd"; })"; } >> /tmp/history.txt'
# 在PROMPT_COMMAND中虽然可以添加时间与获得ip但是由于单引号与双引号的问题,特别的麻烦,拆分为下面的
export HISTTIMEFORMAT="[$USER][`who am i 2> /dev/null | gawk '{printf $NF}' | sed -e 's/[()]//g'`]"
export PROMPT_COMMAND='{ date "+%F %T ##### $(history 1 | { read x cmd;echo "$cmd"; })"; } >> /tmp/history.txt'
实例脚本
最后附上一个实例脚本,只要放到初始化文件中保证能够刷到环境变量之中即可。
注:下面脚本在设置忽略命令之后,由于缓冲区保存有一个命令,每次执行命令时会触发写入,此时便会重复写入缓冲区的这个命令
#设置历史文件条数
export HISTSIZE=2000
#设置过滤连续重复指令
export HISTCONTROL=ignoredups
#设置忽略指令
export HISIGNORE="pwd:ls:history:cd"
#设置history格式
export HISTTIMEFORMAT="[%F %T][$USER][`who am i 2> /dev/null | gawk '{printf $NF}' | sed -e 's/[()]//g'`]"
#创建用户日志目录与用户日志文件
##################################################
#
#声明日志目录变量与日志文件变量(不导出为全局变量,子shell会报错)
export mlogdir=/tmp/history/${USER}
export tlogfile=/tmp/history/${USER}/history.$(date +%F).log
#
#判断目录的是否存在、权限和文件是否存在、权限
#
if [ -d "${mlogdir}" ]
then
if [ -f "${tlogfile}" ]
then
if [ -w "${tlogfile}" ]
then
echo -n
else
chmod a+w ${tlogfile}
fi
else
touch ${tlogfile}
chmod a+w ${tlogfile}
fi
else
mkdir -p ${mlogdir}
touch ${tlogfile}
chmod a+w ${tlogfile}
fi
#记录shell执行的每一条命令
export PROMPT_COMMAND='{ echo "##### $(history 1 | { read x cmd;echo "$cmd"; })"; } >> ${tlogfile}'
历史命令与实时记录(redhat6.8)的更多相关文章
- history 清空历史记录 或 history不记录历史命令
# vi ~/.bash_history 清空里面的记录,并退出当前shell # exit(一定要退出当前shell) # history 1 vi ~/.bash_history 2 histor ...
- 记录用户操作历史命令history
我们知道可以使用history命令,查看自己的操作记录,但如果你是root用户,如何查看其它用户的操作记录呢? 其实history命令只是把当前用户目录下的~/.bash_History文件内容列 ...
- Windows7运行无法记录历史命令问题解决
Windows7运行无法记录历史命令,每次都需要手动敲命令,解决方法如下: 1.任务栏中右键,选择"属性"菜单: 2.在弹出框中的"[开始]菜单"选项卡的隐私区 ...
- bash如何向上向下移动历史命令记录
bash如何在 历史命令记录 中上下移动? 通过bash本身的设置,就可以做到! : 用shift+up , shift+down 来上下移动 : 单纯的up/down是调用历史命令
- linux历史命令
"忘记历史的Linux用户注定要输入很多信息.” 这也让强有力的历史命令(包括Bash shell的历史变体)不仅在援引之前执行命令而不需重新输入它们时有用,在调用其它很少用到的命令时也有用 ...
- 强有力的Linux历史命令 你还记得几个
列出所有出现到的命令:(所有一下信息都可以通过man history得到,而且还更多) history:列出历史中执行过的命令(-c清除所有的命令历史) !N:执行编号为N的历史命令 !-N:执行倒数 ...
- 历史命令history
历史命令在用户注销之后会保存在用户家目录下的-/.bash_history中 history #查看系统中实时缓存的历史命令,与.bash_history中的内容并不完全相同 history -c # ...
- vim显示历史命令
[vim显示历史命令] q: 进入命令历史编辑.类似的还有 q/ 可以进入搜索历史编辑.注意 q 后面如果跟随其它字母,是进入命令记录. 可以像编辑缓冲区一样编辑某个命令,然后回车执行.也可以用 ct ...
- linux 历史命令用法(转)
许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...
随机推荐
- Hadoop-Impala学习笔记之SQL参考
参考:Apache Impala Guide--Impala SQL Language Reference. Impala使用和Hive一样的元数据存储,Impala可以访问使用原生Impala CR ...
- 使用pynlpir增强jieba分词的准确度
在使用jieba分词时,发现分词准确度不高.特别是一些专业词汇,比如堡垒机,只能分出堡垒,并不能分出堡垒机.这样导致的问题是很多时候检索并不准确. 经过对比测试,发现nlpir进行分词效果更好.但是n ...
- CefSharp浏览器网页中文语言设置
设置浏览器语言而非cef语言 ChromiumWebBrowser browser = new ChromiumWebBrowser(url); BrowserSettings browserSett ...
- Spring 学习——Spring AOP——AOP配置篇Advice(有参数传递)
声明通知Advice 配置方式(以前置通知为例子) 方式一 <aop:config> <aop:aspect id="ikAspectAop" ref=" ...
- 破解360doc个人图书馆网站的右键、复制方法
chrome浏览器如下做法: 右上角菜单按钮→设置→显示高级设置→隐私设置下的 内容设置按钮→javascript下的管理例外情况→添加 [*.]360doc.com 设置为禁止 →完成
- [minecraft]mcCoder制作有感
mcCoder是一个minecraft-forge-mod制作库,力图让mod制作者可以更简单的制作mod,减少mod制作者的mod制作难度. 在GitHub上关注这个项目: 原理 mcCoder主要 ...
- 用JSON.stringify处理循环引用对象
通常,我们会用JSON.stringify把Javascript对象序列化成JSON格式,这在大多数情况下是够用的.但是,当你要转换的对象里存在循环引用时,问题就来了. js对象循环引用导致内存泄漏 ...
- ArcGIS JS API4 With VueJS集成开发
1.USING VUEJS WITH ARCGIS API FOR JAVASCRIPT,集成VUE到ArcGIS JS开发中. 2.ARCGIS API 4 FOR JS WITH VUE-CLI ...
- java @FunctionalInterface
public class Worker { private String doWork(String job) { return "Job " + job + " don ...
- Ajax+setInterval定时异步刷新页面
这个是之前一个项目中用到的功能,现在记录一下他的使用步骤. 现在讲解一下具体的关键代码: 1. window.onload:是指等待页面html和css都执行完毕以后才开始执行js文件,因为我这个 ...