我们有一个常见的Linux测试环境,其中有多个人工作(使用Putty通过ssh连接), 我们需要存储从所有终端发出的命令,以便我们可以跟踪由哪个IP /用户以及从哪个TTY触发的每个命令,以便我们可以使用' last'来验证它。命令。
我已相应更改了我的.bash_profile
# Will Give me ip of person logged in
WHOAMI=`who -m | cut -d '(' -f 2| cut -d ')' -f1`
# Will give me tty ID
MYTTY=`who -m | awk '{print $2;}' | cut -d '/' -f2`
DATE=`date +"%Y_%m_%d_%H%M%S"`
DAY=`date +"%Y_%m_%d"`
shopt -s histappend
mkdir -p $HOME/HISTORY/${WHOAMI}/${DAY}
touch $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
export HISTTIMEFORMAT='%F %T '
export HISTFILESIZE=100
export HISTSIZE=100
# stores history file per terminal
export HISTFILE=$HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
export PS1='[\[\e[4;32m\]\u@\h\[\e[0m\] \[\e[1;36m\]$PWD\[\e[0m\]]\! $'
# Updates the HISTFILE at real time i.e. when user presses enter
export PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND}"
history -r $HISTFILE
更改.bash_profile
后,history
命令停止显示以前的条目。
当我将PROMPT_COMMAND
更改为"history -a; history -r; ${PROMPT_COMMAND}"
时,它开始工作,但
HISTFILE
未实时更新;它只在激活退出命令时更新。
如果用户通过右键单击并使用disconnect选项断开putty会话,则HISTFILE
根本不会更新。 :(
PS: - 如果我发表评论export HISTFILE
,它会存储到.bash_history
文件,一切顺利,.bash_history
会实时更新,但我不会从中获取tty id或IP哪个命令被解雇
O.S: - 红帽企业Linux服务器版本6.8(圣地亚哥)
答案 0 :(得分:0)
更换
touch $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
与
printf "#`date '+%s'`\nll\n" > $HOME/HISTORY/${WHOAMI}/${DAY}/.HIST_${MYTTY}_${DATE}
诀窍,所以似乎只有在HISTFILE文件中有一些数据时,历史命令才能实时正确地更新它,否则只有在触发exit命令时才更新它。