bash 审计(写入日志文件)

Audit of bash (writing to logfile)

我想将我的 bash shell 的内容写入日志文件。日志文件应包含 STDINSTDOUTSTDERR.

最明显的解决方案是使用 script-可执行文件:

script --flush audit.log

但是有两个缺点:

  1. 日志文件包含难看的字符,例如:^M
  2. 创建了一个新进程

我正在寻找没有这些缺点的解决方案。 我想知道 ^M 的来源及其含义。

没找到^Minfocmp.

的输出中

要启动 shell,它将所有内容写入 audit.log,您可以这样做:

bash -i 2>&1 | tee "audit.log"

有了这个 audit.log 不再包含 ^M.

2>&1STDERR 重定向到 STDOUT,然后通过管道传输到 tee。 Tee 写文字, 它从管道接收到 STDOUT 和文件 audit.log.

要避免启动新进程,您可以使用 bash 内置命令 exec:

exec > >(tee  "audit.log" )                                                                                                                               
exec 2>&1                                                                                                                                                 

exec 允许将当前进程的 STDOUT 重定向到一个文件。 >) 管道到发球台,然后写入 STDOUTaudit.log.