【问题标题】:Bash Command LoggerBash 命令记录器
【发布时间】:2011-11-03 20:09:17
【问题描述】:

出于好奇,我想知道是否可以编写 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更可靠地记录命令的任何东西

干杯

【问题讨论】:

    标签: linux bash logging terminal


    【解决方案1】:

    历史记录对您来说似乎不可靠的原因是它只在 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,顺便说一句,也可以将HISTFILE 设置为,例如,拥有每个日期的历史文件。
    【解决方案2】:

    签出脚本:http://bashshell.net/commands/using-the-script-command/

    它将终端上出现的所有内容记录到一个文件中,iirc 可以回放记录的会话。

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

    【讨论】:

    【解决方案3】:

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

    您也可以不使用 syslog 直接写入日志文件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      相关资源
      最近更新 更多