【问题标题】:Audit of bash (writing to logfile)bash 审计(写入日志文件)
【发布时间】:2020-10-25 14:07:18
【问题描述】:

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

最明显的解决方案是使用script-executable:

script --flush audit.log

但是有两个缺点:

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

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

我没有找到^Minfocmp 的输出中。

【问题讨论】:

    标签: bash pipe exec audit tee


    【解决方案1】:

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

    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 重定向到文件。 >) 管道到 tee,然后写入 STDOUTaudit.log

    【讨论】:

    • 问题还询问标准输入,因此您可能需要在输入中添加另一个 tee(到不同的日志文件)。
    猜你喜欢
    • 2012-09-16
    • 2012-10-01
    • 1970-01-01
    • 2018-04-26
    • 2018-01-25
    • 2023-03-31
    • 2015-12-10
    • 1970-01-01
    • 2015-11-26
    相关资源
    最近更新 更多