首页 > 解决方案 > bash 审计(写入日志文件)

问题描述

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

实现此目的最明显的解决方案是使用script-executable:

script --flush audit.log

但是有两个缺点:

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

我正在寻找没有这些缺点的解决方案。我想知道^M来自哪里以及它的含义。

没有 在infocmp.

标签: bashpipeexecaudittee

解决方案


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

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

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

2>&1将STDERR重定向到STDOUT,然后通过管道传送到 tee。Tee 将从管道接收的文本写入STDOUT和文件 audit.log。

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

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

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


推荐阅读