我有一堆文件,我经常需要 tar,用 gpg 加密,然后压缩。这是在 Linus VPS 服务器上,所以内存比执行速度更重要(我真的不关心)。
如果我将这三个步骤作为一个命令 (tar | gpg | bzip2 > output.tar.gpg.bzip2) 执行,是否会比我先调用 tar,然后调用 gpg,然后调用 bzip2 消耗更多内存?
这些文件可能非常大(数百兆字节/千兆字节)
小智 5
同时运行的程序越多,需要的内存就越多。但这是一种权衡,使用管道而不是单独运行每个程序往往需要更少的磁盘空间。您只需要存储初始输入和最终输出。如果您通过 ssh 或类似方式将数据存储在其他地方,则您甚至可能不需要输入文件以外的初始磁盘空间。使用管道的另一个特点是数据在任何阶段的处理速度都不会比管道中最慢的阶段快。
GnuPG 使用的 OpenPGP 格式本身支持压缩。这发生在加密之前,因此它比加密后压缩更安全、更高效。此外,它将在解密时自动检测到,因此您不必担心将其添加到管道中。与运行单独的压缩程序相比,它还可能需要更少的内存。GnuPG 支持 Zip、Zlib (Gzip) 和 Bzip2 压缩。
当您执行此操作 ( tar | gpg | bzip2 > output.tar.gpg.bzip2) 时,您是管道 命令,这意味着您同时运行所有命令并将每个命令的输出重定向到以下命令的输入(直到您重定向到文件中的最后一个输出)。因此tar,输出到gpg输入,输出到bzip2输入,最终输出到文件中。
因此,当您使用管道时,您会使用更多内存,因为您同时运行所有命令。您还可以使用更多的处理能力,因为gpg和bzip2是两个占用 cpu 的程序。