gunzip 对所有现有文件进行内存安全保护

gunzip 对所有现有文件进行内存安全保护

我想查找服务器上所有 gzip 压缩文件中是否存在字符串。我担心如果我运行诸如gunzip -c *.gz | grep "string to be searched"服务器之类的东西,解压缩文件的缓存就会超载。

我还没有运行该脚本,因为这是一个一次性请求,我没有空间进行实验。剧本确定吗?就像它顺序查找并且中间不保存缓存一样?

答案1

由于管道的工作方式,gunzip -c *.gz无法向管道中输入比可以处理的更多的数据grep,因此管道本身不会导致内存问题。gunzip在解压缩数据时流式传输数据,因此同样它不会解压缩超出其可输出的数据,并且不会使用太多内存。

从磁盘读取所有数据将导致数据被缓存,但内核对此进行了很好的管理。那里没什么好担心的。

在我的系统上,

/bin/time sh -c "gunzip -c *.gz | grep test"

3.1GiB 压缩文件(6.1GiB 未压缩)显示整个管道最多消耗 3MiB RAM;缓存使用量增加了 1.3GiB。

答案2

您可以逐个分析文件,并监控其间的系统负载。您还可以使用zgrep更直接的输入方式:

zgrep "string" file.gz

世界上没有什么是“确定的”,但除非你有一个巨大的 zip 文件或机器中的 RAM 非常少,否则应该没问题。运行此程序时请注意 RAM 使用情况。

相关内容