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

 

 


 

说明:

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

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

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

你可能感兴趣的:(Linux,shell编程)