【问题标题】:Script command: separate input and output脚本命令:输入输出分离
【发布时间】:2020-10-11 09:52:06
【问题描述】:

我正在尝试监视 shell 上的命令执行。 我需要将输入命令分开,例如:

input: 
   ls -l /
output: 
   total 76
   lrwxrwxrwx   1 root root     7 Aug 11 10:25 bin -> usr/bin
   drwxr-xr-x   3 root root  4096 Aug 11 11:18 boot
   drwxr-xr-x  17 root root  3200 Oct 11 11:10 dev
   ...

另外,如果我打开另一个 shell,例如,在通过 ssh 连接到另一个服务器之后,我也想这样做。 我一直在使用脚本命令来执行此操作,并且效果很好!

即使 shell 更改(例如通过ssh,或输入 msfconsole),它也会记录所有命令输入和输出。

不过,我发现了两个主要问题:

  1. 对于我的项目,我需要将每个命令与其他命令分开(使用解码器),而且能够将命令输入和输出分开也很棒,例如:
    cmd1. pwd  ---> /var/
    cmd2. echo "hello world" ---> "hello world"
    ....
  1. 有时,由于我想过滤掉的 shell 特殊字符(例如颜色),脚本命令会生成带有垃圾的输出。

所以我一直在考虑这个问题,我想我可以创建一个简单的脚本,从“script”命令写入的文件中读取并处理数据。 不过,我不确定执行此操作的最佳方法是什么。

我正在评估不同的解决方案,我想了解来自社区的不同建议。 也许我失去了一些东西,你知道一个更好的工具而不是脚本命令,或者有一些我没有考虑过的想法。

最好的问候,

【问题讨论】:

标签: linux shell monitoring


【解决方案1】:

用于区分 stdoutstderr 的有用工具是 annotate-output,(安装 "devscripts" package),它发送 stderr 和 stdin 和 stdout 以及有用的小前缀。例如,让我们尝试计算一个存在的文件的字符数,加上一个不存在的字符数:

annotate-output wc -c /bin/bash /bin/nosuchshell

输出:

00:29:06 I: Started wc -c /bin/bash /bin/nosuchshell
00:29:06 E: wc: /bin/nosuchshell: No such file or directory
00:29:06 O: 1099016 /bin/bash
00:29:06 O: 1099016 total
00:29:06 I: Finished with exitcode 1

可以使用sedawk,甚至是tee 和一些greps 单独解析该输出。

【讨论】:

  • 我一直在考虑做类似的事情,重定向控制台模拟器 STDIN 和 STOUT/STDERR 以分离用户输入和输出。但是在做了一些测试之后,我决定这不适合我的目的,因为它可能源于流程本身的许多问题。例如,您提出的程序看起来非常有用,但可能会改变用户与 shell 交互的方式,我希望所有这些对用户透明。无论如何,我很感谢你的帮助,非常感谢。
猜你喜欢
  • 1970-01-01
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多