【问题标题】:How to redirect output of a running process to a file in Linux Shell如何将正在运行的进程的输出重定向到 Linux Shell 中的文件
【发布时间】:2014-02-01 10:10:43
【问题描述】:

我正在尝试在 Linux 中使用 airmon-ng 脚本进行一些实验。同时,我想将进程“airodump-ng mon0”的输出重定向到文件。我可以在屏幕上看到瞬时输出。这个进程的特点是它不会停止执行(实际上它是一个扫描AP和客户端的脚本,它会继续扫描),除非我们使用ctrl+c。 每当我尝试

    airodump-ng mon0 > file.txt

我不会得到文件中的输出。 我的主要假设是 shell 只有在完成执行后才会将其写入文件。但在上述情况下,我停止了执行(因为执行不会完成)。

所以概括地说,我不能将正在运行的进程的输出通过管道传输到文件。我怎样才能做到这一点? 或者有没有其他方法可以停止进程的执行(例如 5 秒后)并将当前输出重定向到文件?

【问题讨论】:

  • 您是否检查过您是否仍然在终端上看到输出?如果你这样做了,那么你就没有捕捉到它。可能是程序实际上打印到 stderr 而不是 stdout,那么您必须改为 2>file.txt。据我所知,重定向应该或多或少立即起作用(无需等到程序完成)
  • 你用的是什么外壳?重击? zsh? tcsh? csh?
  • 发现这可能对realtime reading有帮助

标签: piping output-redirect


【解决方案1】:

进程可以将输出发送到标准输出或标准错误以将其发送到终端。一般来说,前者用于信息,后者用于错误,但在某些情况下,一个过程可能会混淆它们。

我假设在您的情况下,正在使用标准错误。要将这两个都放入输出文件,您可以使用:

airmon-ng mon0 > file.txt 2>&1

这表示将标准输出发送到file.txt 并将2(标准错误的文件ID)重新路由到1(标准输出的文件ID),以便它也转到文件。

【讨论】:

  • 我怎样才能覆盖文件而不是追加?
  • @DDR 上面的> 应该覆盖文件。追加将是>>
  • 但我得到了一个附加文件。当它每次扫描时,我都会将每次扫描的结果附加到文件中。
  • 如果数据都发生在airmon-ng mon0 的同一个“运行”上,那么它将全部附加。当上述命令完成或被取消时,它将覆盖,然后重新启动。如果您需要 airmon-ng mon0 的内部迭代来覆盖文件,则需要在该命令或脚本中完成。
猜你喜欢
  • 1970-01-01
  • 2011-01-09
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2012-11-01
相关资源
最近更新 更多