bash 操做記錄

 說明藍色=命令名稱shell

      淺綠=命令參數bash

      淺藍=選項app

      紫色=目錄ssh

      系統環境:CentOS  5.8  x86_64ide

最近公司讓搞操做記錄,各類百度、google以後找到了一個比較不錯的方法:post

touch /var/log/command.loggoogle

chattr -a /var/log/command.logspa

/etc/profile/etc/bashrc  中添加以下代碼日誌

 orm

    #判斷是否爲 ssh 127.0.0.1 "ls" 相似的命令 if ! test -z "$BASH_EXECUTION_STRING" ; then
    echo "===== $(date "+%F %T") $USER nologin cmd: $BASH_EXECUTION_STRING" >>/var/log/command.log
    #判斷是否爲su 用戶 elif shopt -q login_shell ; then
    printf "====== $(date "+%F %T") new login the last cmd: ">>/var/log/command.log
    else
    printf "====== $(date "+%F %T") su the last cmd: ">>/var/log/command.log
    fi
    #定義歷史記錄格式
    export HISTTIMEFORMAT="%F %T $USER ${SSH_TTY:5} ${SSH_CLIENT%% *} " #定義輸出格式,並輸出到/var/log/command.log中
    export PROMPT_COMMAND="history 1|tail -1|sed 's/^[ ]\+[0-9]\+ //'>> /var/log/command.log"

效果如圖所示:

補充:

USER  環境變量,登陸的用戶名

SSH_TTY  環境變量,記錄登陸中端

SSH_CLIENT  環境變量,記錄登陸ip

HISTTIMEFORMAT  bash的環境變量用來定義歷史記錄history 的格式

PROMPT_COMMAND 環境變量,這個變量會優先於 PS1 變量執行,屏幕上顯示完PROMPT_COMMAND定義的內容後,纔會顯示 PS1 提示符的內容;也就是說,按回車後,先輸出 PROMPT_COMMAND 的內容到屏幕上,而後才輸出。

BASH_EXECUTION_STRING 環境變量,存放遠程ssh執行的命令。

添加日誌切割:

mkdir -p /var/log/history

將下面腳本保存到/etc/logrotate.d/history 中 /var/log/command.log{     prerotate     /usr/bin/chattr -a /var/log/command.log     endscript     compress     delaycompress     notifempty     olddir /var/log/history     rotate 1000     size 10M     postrotate     chmod 666 /var/log/command.log && /usr/bin/chattr +a /var/log/command.log && chmod 600 /var/log/history/*     endscript }

相關文章
相關標籤/搜索