将 BASHPID 添加到历史记录中?

将 BASHPID 添加到历史记录中?

我经常在任何给定时间运行多个会话。当尝试使用历史重建作品时,这有时会导致问题。因此,我认为以某种方式包含 $BASHPID 会很有用,这样我就可以按 shell 排序,然后按时间排序。我对此的天真尝试是尝试

export HISTTIMEFORMAT="$BASHPID %Y %m %d - %H:%M:%S| "

但这所做的只是将当前 shell 的 $BASHPID 添加到“history”的输出中。

搜索 HISTTIMEFORMAT 和 $BASHPID 没有返回任何结果。关于如何实现这种行为有什么建议吗?

答案1

你需要像“bash永恒的历史”之类的东西。
有一个好的描述在这里让它发挥作用。

该解决方案仍然缺少 PID,可以使用来自这里的想法

主要是:

export HISTTIMEFORMAT="%s "
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND ; }"' \
               echo $$ $USER "$(history 1)" >> ~/.bash_eternal_history'

这是使用$PROMPT_COMMAND来生成:

$PID $USER $LAST_COMMAND

每个执行命令的输出。

答案2

我的策略是添加到/etc/bash.bashrc以下行:

readonly PROMPT_COMMAND='history -a >(logger -t "cmdline $USER[$PWD] $SSH_TTY $SSH_CONNECTION")'

然后在/etc/rsyslog.conf

*.* @syslogserver:514

我更喜欢这种方法而不是记录到单个文件,如下所示:

  • 文件被旋转(即不会增长太多)
  • 用户无法删除他的“历史记录”
  • 它创建一个远程日志跟踪,防止服务器被篡改/黑客攻击
  • 可以更改远程系统日志服务器中的轮换日志以保留几个月的日志记录
  • syslog-ng 允许您为每个记录 IP 地址拥有单独的文件日志
  • 一切都在一个中心点,您无需进入多个服务器即可了解正在发生的情况
  • 当远程 bash 会话中止时,本地历史记录会丢失,而使用此方法不会丢失
  • 此外,当同一用户打开多个会话时,所有命令都不会进入历史记录,我用这种方法获取它们。

相关内容