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

linuxshell

2018年02月13日 10时58分53秒


  • 参数

    • HISTTIMEFORMAT
    • HISTSIZE
    • HISTFILESIZE
    • HISTFILE
    • HISTCONTROL
    • HISIGNORE
  • 实时记录参数(PROMPT_COMMAND)
  • 实例脚本

默认情况下,我们在命令行指定的命令,在我们退出当前用户之后,内存中存储的历史命令会记录到家目录的.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}" ]
thenif [ -f "${tlogfile}" ]thenif [ -w "${tlogfile}" ]thenecho -nelsechmod a+w ${tlogfile}fielsetouch ${tlogfile}chmod a+w ${tlogfile}fi
elsemkdir -p ${mlogdir}touch ${tlogfile}chmod a+w ${tlogfile}
fi
#记录shell执行的每一条命令
export PROMPT_COMMAND='{ echo "##### $(history 1 | { read x cmd;echo "$cmd"; })"; } >> ${tlogfile}'

转载于:https://www.cnblogs.com/h-zhang/p/10706737.html

历史命令与实时记录(redhat6.8)相关推荐

  1. linux中Shell历史命令记录文件的路径是什么

    Bash shell在"~/.bash_history"("~/"表示用户目录)文件中保存了500条使用过的命令,这样能使你输入使用过的长命令变得容易.每个在系 ...

  2. Python命令行自动补全和记录历史命令

    2019独角兽企业重金招聘Python工程师标准>>> ~$ cat .pythonstartup import os import readline import rlcomple ...

  3. mysql禁用历史命令_如何禁止mysql记录历史命令

    如何禁止mysql记录历史命令?在执行 SQL命令时,mysql会将历史命令记录到~/.mysql_history文件中,因此我们用上下键就可以翻阅历史命令了. 也许某些特殊需要我们可能需要不让它记录 ...

  4. history 历史命令记录功能如何防坏人(高级)

    在 Linux 下面可以使用 history 命令查看用户的所有历史操作,同时 shell 命令操作记录默认保存在用户目录的 .bash_history 文件中.通过这个文件可以查询 shell 命令 ...

  5. centos查看历史指令记录_CentOS清除SSH登录记录、历史命令及日志缓存

    清除 SSH 登录记录 SSH 登录日志以二进制方式存储在以下文件内,需要使用对应命令查看,不然会显示乱码. 日志文件 查看命令 日志内容 /var/log/wtmp last 登录成功日志,包含用户 ...

  6. 记录linux历史命令,如何将Linux系统的历史操作命令删除,并不再记录

    1.修改/etc/profile将histsize=1000改成0或1 清除用户home路径下.bash_history 2.立即清空里的history当前历史命令的记录 history -c 3.b ...

  7. linux 登陆 历史,linux记录每次登陆的历史命令

    编辑/etc/profile,增加如下代码 #Record history operation USER_IP=`who -u am i >/dev/null |awk '{print $NF} ...

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

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

  9. linux 查看网络 历史,Linux历史命令操作记录查询

    前言 使用Linux系统时,我们经常使用history来查询曾经执行过的指令.如果使用适当,将会极大提升操作效率. 1. 查询历史记录 [root@zcwyou ~]# history 2. 查看每条 ...

最新文章

  1. AMD:浏览器中的模块规范
  2. Linux下载交通图片数据集CityScapes Dataset
  3. 让ASP.NET5在Jexus上飞呀飞
  4. netflix数据处理2(转)
  5. 农场js_通过销售农场商品来解释Web API
  6. java.lang.math.trunc,java – JPA/Hibernate返回BigDecimal不长
  7. resnet结构_来聊聊ResNet及其变种
  8. HBase编程 API入门系列之HTable pool(6)
  9. 【转】最快让你上手ReactiveCocoa之基础篇
  10. 【十三】Jmeter:“CSV 数据文件设置”参数化请求中出现带有逗号的参数值
  11. 从git仓库获取源码_微软开源Scalar,提升操作巨型Git仓库的速度
  12. c++ to_string 指定字符位数_你不知道的ES6字符串的扩展
  13. tl wn322g linux驱动下载,TP-Link TL-WN322G+网卡驱动
  14. 【硬石科技】电机系列教学(基于STM32)——舵机的控制
  15. LimeSDR官方系列教程(六):使用Pothos和GNU Radio接收ASK/OOK信号
  16. Word文档转换:如何使用Aspose.words在Java中将Word和图像转换为PDF
  17. EasyNLP 发布融合语言学和事实知识的中文预训练模型 CKBERT
  18. canvas 实现图片局部模糊_HTML5 Canvas图片马赛克模糊动画
  19. Python plotly保存图片
  20. gpg 的加密与解密

热门文章

  1. 网络流(3)——找到最小st-剪切
  2. BZOJ.2597.[WC2007]剪刀石头布(费用流zkw)
  3. 你好同窗,我们开始吧,这是我们的第3次见面
  4. mac 安装 python 配置||虚拟环境
  5. 100+经典Java面试题及答案解析
  6. 《高级软件测试》实践作业4学习记录12月25日
  7. VMware找不到父磁盘 父虚拟磁盘在子虚拟磁盘创建之后被修改过。父虚拟磁盘的内容 ID 与子虚拟磁盘中对应的父内容 ID 不匹配
  8. 编译bluez-utils-3.36,死活找不到bluez D-bus的解决方法
  9. k8s单节点部署(master ,node部分)
  10. java控制语句案例_Java基础语法—流程控制语句