当在 linux tcsh 中重定向到文件时,如何将写入缓冲区大小改得更大?

当在 linux tcsh 中重定向到文件时,如何将写入缓冲区大小改得更大?

在 linux tcsh 中,如果我创建一个类似这样的日志文件:

CMD > cmd.log

如何使写入缓冲区(在将数据发送到磁盘之前对其进行缓存)大于默认值?如何缓冲更多写入数据cmd.log并减少写入该文件句柄的频率?

编辑:我还没搞清楚如何做到这一点,但我们发现我们的系统存在问题。有人多次写入相同的数据,破坏了 NFS 磁盘文件管理器。他们甚至没有使用本地磁盘来增量生成文件,然后将结果复制到 NFS。

另外,您可以使用

CMD_BLAH | gzip --stdout > log.gz

这会在主内存中执行一些缓存并减少最终输出文件的大小(通常)。

答案1

您可以使用 '光伏' 来 '限制' 正在传输的内容。

-B BYTES, --buffer-size BYTES
   Use a transfer buffer size of BYTES bytes. A suffix of 
   "k", "m", "g", or "t" can be added to denote kilobytes (*1024),
   megabytes, and so on. The default buffer size is the block
   size of the input file's filesystem multiplied by 32 (512kb max),
   or 400kb if the block size cannot be determined.

应用于您给出的示例它将看起来像:

% CMD | pv -B 1m > cmd.log

答案2

您可以尝试设置一个命名管道(人mkfifo)。将命令的输出写入命名管道。设置另一个进程定期读取。这不会改变读/写缓冲区,但它将根据您指定的时间间隔控制刷新到磁盘的数据流。如果您想控制写入缓冲区的大小,您可以编写一个简单的 C 程序,使用设置缓冲区

相关内容