Bash命令记录器

时间:2011-08-25 15:53:33

标签: linux bash logging terminal

我想知道,出于好奇,如果可以编码bash脚本,则记录在Bash / SSH会话中运行的所有命令。我知道history假设记录所有运行的命令,但它似乎非常不可靠!

我今天早上一直在搞乱,并提出了以下bash脚本,该脚本会记录用户在终端中运行的内容但不能正确运行所有命令。

prompt_read() {
  echo -n “$(whoami)@$(hostname):$(pwd)~$ “
  read userinput
}

prompt_read

while :; do
  if [[ $userinput != exit ]]; then
    logger "logit $userinput"
    bash -c "$userinput"
    prompt_read
  else
    kill -1 $PPID
  fi
done

是否有人知道比history

更好,更可靠地记录命令的任何事情

干杯

3 个答案:

答案 0 :(得分:8)

历史似乎不可靠的原因是因为它只会在BASH会话结束时写入历史记录,因此您可能会丢失命令。

我的bash配置文件中有一些内容:

HISTFILESIZE=10000 # how many lines of history to store in the history file

HISTSIZE=10000 # how many lines of history to store in a session ( I think )

HISTCONTROL=ignoredups # ignore duplicate commands

shopt -s histappend # append history, rather than having sessions obliterate existing history
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

最后几个是重要的,将PROMPT_COMMAND设置为history -a会使历史记录立即追加,而非会话后追加。设置shopt -s histappend会使bash会话附加到历史记录文件,而不是覆盖现有历史记录。

更多信息:http://linuxcommando.blogspot.com/2007/11/keeping-command-history-across-multiple.html

此外,如果这对您有用,您可以使用HISTFILE环境变量更改用于特定bash会话的历史记录文件的名称。

答案 1 :(得分:4)

查看脚本:http://bashshell.net/commands/using-the-script-command/

它将终端上显示的所有内容记录到文件中,并且iirc可以播放录制的会话。

您可以将其设置为用户的shell,以便在登录时记录所有内容。

答案 2 :(得分:2)

您可以找到一个脚本here,将所有'bash'命令/内容记录到文本文件或'syslog'服务器中,而无需使用补丁或特殊的可执行工具。

您也可以在没有syslog的情况下直接写入日志文件。

部署非常简单,因为它是一个简单的shell脚本,需要在初始化'bash'时调用一次。