【问题标题】:Use nc to write multiple files - how?使用 nc 写入多个文件 - 如何?
【发布时间】:2014-10-14 09:01:07
【问题描述】:

我想使用nc 作为一个简单的 TCP/IP 服务器。到目前为止,我使用以下方式运行它:

$ nc -k -l 3000 > temp.tmp

这可行,但会将所有连接的所有接收数据写入一个文件。但是,我想要单独的文件。

如果我跳过-k 开关,基本上我会得到这个,但是一旦第一个连接消失,nc 就会关闭。

如何保持nc 运行,但为每个传入请求使用单独的文件? (或者,如果这不可能,是否有替代的 *nix 工具能够做到这一点?)

请注意,我确实想要重新启动nc,但我想要一个正在运行的实例。

PS:我知道 SO 不允许关于查找工具的问题,但对我来说,这只是在 nc 无法自行完成的情况下的后备方案。所以,对不起括号中的部分......

【问题讨论】:

    标签: bash netcat


    【解决方案1】:

    在接收器上:

    $ nc -p 3000 -l | tar -x
    

    发件人:

    $ tar -c * | nc <ip_address> 3000
    

    【讨论】:

    • 如此简单而优雅!
    • 很酷,但是文件去哪里了哈哈?如何将它们写入某个位置?
    • @AlexanderMills 这更多的是关于 tar 的工作原理,而不是 nc 的工作原理。如果您在发送方指定相对路径,文件将进入接收方的当前工作目录。要将它们放在特定位置:nc -p 3000 -l | tar -x /the/folder/you/want 请注意 tar 是一个存档实用程序;如果发送方指定了绝对路径,那么接收方会将其扩展为绝对路径并将文件放在那里。您可以使用 tar 选项 --one-top-level 覆盖它。
    【解决方案2】:

    省略-k 并循环运行:

    n=0
    while nc -l 3000 > "$n".txt ; do
       n=$((n+1))
    done
    

    【讨论】:

    • 基本上,这很好用,但我想在不重启nc的情况下做到这一点。 (对不起,我忘了把它放在我的问题中,我现在要添加它)。
    • 好的,明白了。我不确定这是否可能。以后可以仔细看看。
    • @Golo Roden。您使用的是哪种操作系统?
    • OS X 和 Ubuntu,但主要是 OS X。
    • @GoloRoden 那么很可能您使用的是 BSD 版本的 netcat。还有一个可用的版本称为netcat-traditional(在 Ubuntu 上试用,它在 repos 中),它支持-e 选项,可用于在每次连接时启动脚本。你可以看看那个版本的nc。否则可能有使用socat 的解决方案,需要对此进行调查。
    【解决方案3】:

    我认为Cronolog 在这种情况下可以提供帮助

    -p选项可以判断周期选项

    还可以使用文件监视实用程序“incron”,它将日志检查到一个文件并可以拆分到其他一些文件

    【讨论】:

    • 不幸的是,这不起作用,因为输出被并行写入单个文件(因此每个文件都包含所有请求的完全相同的数据)。
    • 从问题中我认为你想要并行写作。那么你应该放松日志轮换方法
    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多