bash 审计(写入日志文件)
Audit of bash (writing to logfile)
我想将我的 bash shell 的内容写入日志文件。日志文件应包含 STDIN、STDOUT 和 STDERR.
最明显的解决方案是使用 script
-可执行文件:
script --flush audit.log
但是有两个缺点:
- 日志文件包含难看的字符,例如:^M
- 创建了一个新进程
我正在寻找没有这些缺点的解决方案。
我想知道 ^M 的来源及其含义。
没找到^M
在 infocmp
.
的输出中
要启动 shell,它将所有内容写入 audit.log,您可以这样做:
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 重定向到一个文件。 >)
管道到发球台,然后写入 STDOUT 和 audit.log
.
我想将我的 bash shell 的内容写入日志文件。日志文件应包含 STDIN、STDOUT 和 STDERR.
最明显的解决方案是使用 script
-可执行文件:
script --flush audit.log
但是有两个缺点:
- 日志文件包含难看的字符,例如:^M
- 创建了一个新进程
我正在寻找没有这些缺点的解决方案。 我想知道 ^M 的来源及其含义。
没找到^M
在 infocmp
.
要启动 shell,它将所有内容写入 audit.log,您可以这样做:
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 重定向到一个文件。 >)
管道到发球台,然后写入 STDOUT 和 audit.log
.