Linux shell编程之shell命令历史记录

目录

shell的命令历史记录

需求

相关参数

实现步骤

 


 

shell的命令历史记录

 

需求

>>>系统需要一个目录用来记录所有用户的命令历史记录,来做安全保护。

>>>创建一个目录/var/history,该目录会创建文件记录所有登录用户的历史命令

      文件以 username-userid.log 格式命名;(默认用于记录用户历史命令的文件是当前用户家目录下的.bash_history)

>>>所有用户执行过的命令都会被追加到对应的文件中 ,并且不能删除和修改 ——>特殊属性a

>>>用户输入的命令要实时刷入硬盘 ——> 特殊属性s

目录格式如下:

[bei@localhost ~]$ ls -al /var/history/

dr-xr-xrwx.  2 root      root       4096 Aug  7 22:43 .

drwxr-xr-x. 22 root      root       4096 Jul 22 00:05 ..

-rw-------.  1 bei       bei       76219 Sep 18 20:18 bei-507.log

-r--------.  1 root      root      12815 Sep 18 20:17 root-0.log

文件格式如下:

[bei@localhost ~]$ cat -n /var/history/bei-507.log | tail -5

  4363  ls -al

  4364  #1537327334

  4365  history

  4366  #1537327341

  4367  ifconfig

 


 

相关参数

参数

描述

HISTFILE

用于指定保存命令历史记录的路径及文件名称(默认~/.bash_history

HISTFILESIZE

用于指定保存命令记录文件中的最大行数(默认值500,建议设置为null

HISTSIZE

命令历史记录中的记录的命令最大行数(默认值500,建议设置为100000
定义了
history命令输出的行数

HISTTIMEFORMAT

在历史记录文件中,使用注释符来区分时间戳和相关命令

可设置history命令显示的历史记录条目关联的时间戳输出格式
例:
readonly HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[{}]//g'     ` `whoami ` "

history命令输出为:

[bei@localhost ~]$ history | tail -5

 2188  2018-09-18 20:22:14 (192.168.20.xxx) bei history

 2189  2018-09-18 20:22:21 (192.168.20.xxx) bei ifconfig

 2190  2018-09-18 20:22:49 (192.168.20.xxx) bei cat -n /var/history/bei-507.log | tail -5

 2191  2018-09-18 20:27:45 (192.168.20.xxx) bei history | tail -10

 2192  2018-09-18 20:27:51 (192.168.20.xxx) bei history | tail -5

HISTCONTROL

控制命令在历史列表中记录方式

ignorespace:以空格开头的行不会记录在历史中

ignoredups:忽略重复的命令

ignoreboth:参数ignorespaceignoredups同时生效

关于readonly

变量前写上readonly,非root用户变量不可更改

 


 

实现步骤

>>>创建目录/var/history ——> mkdir /var/history

给目录/var/history赋予所有人的写权限 ——> chmod a+w /var/history

给目录/var/history赋予特殊属性a         ——> chattr +a /var/history

>>>编辑/etc/profile修改shell命令记录的参数

readonly HISTFILE=/var/history/$USER-$UID.log      #设置保存命令历史记录的路径及文件名称

readonly HISTSIZE=null

readonly HISTFILESIZE=500000

readonly HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[{}]//g'     ` `whoami ` "

shopt -s histappend                                                         #一个用户可以同时打开多个终端

readonly PROMPT_COMMAND="history -a"             #实时追加当前历史命令到history文件

 

if [ "$HISTCONTROL" = "ignorespace" ] ; then

    export HISTCONTROL=ignoreboth

else

    export HISTCONTROL=ignoredups

fi

 

export HISTSIZE HISTCONTROL

 

 


 

说明:

>>>以上内容是本人学习的总结

>>>如还有错误,请留言,指正

>>>亦可分享自己的想法,互相学习

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值