顯示具有 log 標籤的文章。 顯示所有文章
顯示具有 log 標籤的文章。 顯示所有文章

2017年6月29日

Linux 保存和即時顯示所有使用者的操作記錄及過程

因為某些需求、必須針對權限加強控管

因為記錄下使用者登入後的每個指令就是必須的動作

系統 centos 6.9 x64
在 /etc/profile 最後新增下面三行
export HISTORY_FILE=/var/log/command_history/$USER-$UID-`date '+%Y-%m-%d'`.log
export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >> $HISTORY_FILE'

exec /usr/bin/script -t 2>> /var/log/command_history/$USER-$UID-`date +%Y%m%d%H%M`.date -a -f -q /var/log/command_history/$USER-$UID-`date +%Y%m%d%H%M`.log


這樣會記錄下所有使用者登入後操作的每一個命令

記錄檔存放的地方需要有其他使用者可以寫的權限
chmod 743 /var/log/command_history

第一二行:將使用者本機操作指令存到記錄檔中
第三行:利用 script 指令將使用者所有操作存到檔案中,如果用 tail -f 去存取.log檔的話,可以即時看到使用者的行為

另外 script 記錄的檔案會把含控制碼都記錄下來、可以用 less -r file.log 或是 more file.log 去看


reference:
Linux利用script命令儲存使用者操作記錄的方法
用 Script 指令來紀錄輸出及輸入

2017年6月15日

篩選出 log 內 keyword 之前或是之後的內容

假設檔案內為
001
020
030
050
999
002
020
035
055
999


可以用下面的指令來抓 999 之後的內容
sed '1,/002/d' filenme
輸出
020
035
055
999


抓之前的內容
sed '/002/,$d' 123
輸出
001
020
030
050
999



包含 keyword 一起抓
之後
sed -n '/002/,$ p' 123
002
020
035
055
999


之前
sed -n '1,/002/ p' 123
001
020
030
050
999
002


另外可以用其他指令來配合

cat -n filename 可以顯示行數
grep -n keyword filename 抓出keyword並顯示行數
split -l filename output 每五行切割成一個檔案