历史命令与实时记录(redhat6.8)

linuxshell

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)的更多相关文章

  1. history 清空历史记录 或 history不记录历史命令

    # vi ~/.bash_history 清空里面的记录,并退出当前shell # exit(一定要退出当前shell) # history 1 vi ~/.bash_history 2 histor ...

  2. 记录用户操作历史命令history

    我们知道可以使用history命令,查看自己的操作记录,但如果你是root用户,如何查看其它用户的操作记录呢?   其实history命令只是把当前用户目录下的~/.bash_History文件内容列 ...

  3. Windows7运行无法记录历史命令问题解决

    Windows7运行无法记录历史命令,每次都需要手动敲命令,解决方法如下: 1.任务栏中右键,选择"属性"菜单: 2.在弹出框中的"[开始]菜单"选项卡的隐私区 ...

  4. bash如何向上向下移动历史命令记录

    bash如何在 历史命令记录 中上下移动? 通过bash本身的设置,就可以做到! : 用shift+up , shift+down 来上下移动 : 单纯的up/down是调用历史命令

  5. linux历史命令

    "忘记历史的Linux用户注定要输入很多信息.” 这也让强有力的历史命令(包括Bash shell的历史变体)不仅在援引之前执行命令而不需重新输入它们时有用,在调用其它很少用到的命令时也有用 ...

  6. 强有力的Linux历史命令 你还记得几个

    列出所有出现到的命令:(所有一下信息都可以通过man history得到,而且还更多) history:列出历史中执行过的命令(-c清除所有的命令历史) !N:执行编号为N的历史命令 !-N:执行倒数 ...

  7. 历史命令history

    历史命令在用户注销之后会保存在用户家目录下的-/.bash_history中 history #查看系统中实时缓存的历史命令,与.bash_history中的内容并不完全相同 history -c # ...

  8. vim显示历史命令

    [vim显示历史命令] q: 进入命令历史编辑.类似的还有 q/ 可以进入搜索历史编辑.注意 q 后面如果跟随其它字母,是进入命令记录. 可以像编辑缓冲区一样编辑某个命令,然后回车执行.也可以用 ct ...

  9. linux 历史命令用法(转)

    许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...

随机推荐

  1. 从事三年java开发后, 我打算转人工智能

    作为一个2015年参加java培训,2016年计算机科学与技术本科毕业后一直从事java开发的程序员来说, 做出这一步真的不容易, 可是我没赶上java最火的时候,反而渐渐感受到了java的没落, 目 ...

  2. 剑指offer 14:链表中倒数第k个节点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. /* public class ListNode { int val; ListNode next = null; ListNode(int va ...

  3. git\CentOS6.5中gitlab安装教程

    一.Git 起源: Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本 ...

  4. vue--js里跳转页面

    我们知道在vue里进行页面跳转的话,我们使用<router-link>这个标签 那在构造函数里我们不能直接操纵DOM元素,我们又该如何进行页面跳转呢? 步骤1: 我们先在DOM里设置三个按 ...

  5. java在window下用cmd (javac、jar)命令行模拟Intellij IDEA软件生成jar包

    @@首先最重要的cmd命令: javac ,jar :使用如下(注意[.]不要输错): 1. javac编译: D:\MyWorkSet\idea_hadoop>javac -d .\out\p ...

  6. HDU 3466 Proud Merchants(背包问题,要好好理解)

    Problem Description Recently, iSea went to an ancient country. For such a long time, it was the most ...

  7. MySQL存储过程 游标

    MySQL存储过程  游标 如何在存储过程中使用MySQL游标来遍历SELECT语句返回的结果集 MySQL游标简介 要处理存储过程中的结果集,请使用游标.游标允许您迭代查询返回的一组行,并相应地处理 ...

  8. ape 文件 转化为mp3 文件

    试了很多软件,最后才发觉 any-audio-converter最好用. 可以吧ape 按 cue切割好,然后转化成 MP3 官网可以免费下载: https://www.any-audio-conve ...

  9. Mysql8 查询事务隔离级别

    Mysql8  查询事务隔离级别 SELECT @@TRANSACTION_ISOLATION REPEATABLE-READ  ---默认隔离级别(可重复读)

  10. Windows下安装和卸载MangoDB服务 --MangoDB

    1.创建存放的数据文件夹和日志文件 2.安装MangoDB服务:(如数据文件夹路径是:d:/MongoDB/db/,日志文件路径:d:/MongoDB/log.txt) mongod --dbpath ...