美文网首页
设置linux系统history相关变量,命令时间、保存hist

设置linux系统history相关变量,命令时间、保存hist

作者: xianyunguh | 来源:发表于2019-02-20 10:02 被阅读0次

    一、设置历史记录的时间

    # vi /etc/profile    //在文件末尾添加以下内容,然后保存退出重新登陆即可
    HISTTIMEFORMAT='%F %T '     //注意有个空格,为了显示时日期与命令之间有空格分割。
    HISTSIZE="3000"    //默认保留1000条。
    
     若想同时显示历史命令的时间、日期以及操作者,则这样添加:
    export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S:`whoami` " 或
    export HISTTIMEFORMAT="%F %T:`whoami` "
    
    export HISTTIMEFORMAT='%F %T '
    如果是
    export HISTTIMEFORMAT='%F%T'   //%T少了个空格,日期与命令就连在一起了
    
    

    二、使用 HISTSIZE 控制历史命令记录的总行数

    将下面两行内容追加到.bash_profile文件重新登陆或运行命令[root@Root ~]# source .bash_profile 即可生效,history命令的记录数将变为3000条。
    
    # vi ~/.bash_profile
    HISTSIZE=3000
    HISTFILESIZE=3000
    

    HISTFILESIZE 定义了在 .bash_history 中保存命令的记录总数.
    HISTSIZE 定义了 history 命令输出的记录数.
    如果想禁用history, 可以设置HISTSIZE=0:
    修改.bash_profile,只对当前用户的history有效,如果修改/etc/profile则对所有用户用效!
    三、使用 HISTFILE 更改保存历史记录文件
    默认情况下命令历史存储在 ~/.bash_history 文件中 。 添加下列内容到 .bash_profile 文件并重新登录bash shell, 将使用 /var/history/USER-UID.log 来存储命令历史 :

    # vi ~/.bash_profile   //输入以下内容
    HISTFILE=/var/history/$USER-$UID.log
    

    四、使用 HISTCONTROL 从命令历史中剔除连续重复的条目
    在下面的例子中 ,pwd命令被连续执行了三次。执行history后你会看到三条重复的条目。要剔除这些重复的条目,你可以将HISTCONTROL设置为ignoredups

    # vi ~/.bash_profile
    HISTCONTROL=ignoredups  //保存退出
    

    测试,分别连续3次输入w、who

    # w
    # w
    # w
    # who
    # who
    # who 
    

    可以看到,只有1条w和who命令

    五、使用HISTCONTROL清除整个命令历史中的重复条目
    上例中的ignoredups只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将HISTCONTROL设置成erasedups

    # vi ~/.bash_profile    //将HISTCONTROL修改成erasedups
    HISTCONTROL=erasedups
    

    六、使用 HISTCONTROL 强制 history不记住特定的命令
    将 HISTCONTROL 设置为 ignorespace, 并在不想被记住的命令前面输入一个空格

    # vi ~/.bash_profile   //添加以下内容
    HISTCONTROL=ignorespace
    # pwd
    #  service httpd stop   //不被history记录的命令
    # history | tail -3
    68  pwd
    69  history | tail -3
    

    七、用户打开多个终端(产生多个session)情况下,共享history
    由于bash的history文件默认是覆盖,如果存在多个终端,最后退出的会覆盖以前历史记录,改为追加形式

    # vi ~/.bash_profile   //添加以下内容
    shopt -s histappend
    

    八、实时追加history,不必等用户退出才将内存中的history记录到文件

    # vi ~/.bash_profile   //添加以下内容
    PROMPT_COMMAND=”history -a”
    

    这里补充下,history -a是追加当前session的历史命令记录到history文件,而history -w则是会用当前session的历史命令替换history文件
    实例
    设置uid大于等于500的用户的history安全性
    需求:
    记录统一转移到/var/history目录下;
    用户无法删除自己的history文件,无法清空history;
    多个终端共享history,实时追加;
    限制history文件大小和保存的条数;
    举例用户,lionel;uid=523

    1)配置全局环境变量文件/etc/profile
    # vi /etc/profile       //添加以下内容
    # add by coolnull
    if [ $UID -ge 500 ];then
        readonly HISTFILE=/var/history/$USER-$UID.log
        readonly HISTFILESIZE=50000
        readonly HISTSIZE=10000
        readonly HISTTIMEFORMAT='%F %T '
        readonly HISTCONTROL=ignoredups
        shopt -s histappend
        readonly PROMPT_COMMAND="history -a"
    fi
    
    创建目录结构
    # mkdir /var/history
    
    配置目录权限,使得用户有权限创建自己的history文件
    # chmod 777 /var/history
    # chmod a+t /var/history
    
    2)限制用户删除自己的history文件
    # chattr +a /var/history/lionel-522.log
    
    3)限制用户修改自己主目录的环境变量配置文件
    # chattr +a /home/lionel/.bash*
    
    # lsattr /home/lionel/.bash*
    -----a------- /home/lionel/.bash_logout
    -----a------- /home/lionel/.bash_profile
    -----a------- /home/lionel/.bashrc
    
    4)禁止普通用户切换到系统中其他shell环境(一般包括csh,tcsh,ksh)
    # chmod 750 tcsh(csh是tcsh的软连接,设置tcsh就可以了)
    # chmod 750 /bin/ksh
    
    普通帐号测试
    [zhangfei@node1 ~]$ tcsh
    -bash: /bin/tcsh: Permission denied
    [zhangfei@node1 ~]$ ksh
    -bash: /bin/ksh: Permission denied
    

    相关文章

      网友评论

          本文标题:设置linux系统history相关变量,命令时间、保存hist

          本文链接:https://www.haomeiwen.com/subject/zpjatqtx.html