Bash 如何通过管道传输大量数据?

IQA*_*eas 4 less bash pipe

假设您想要抓取一个非常大的文件的内容,但想要一次查看一些内容。假设一个人要执行以下操作:

$ cat /dev/sda1 | less
Run Code Online (Sandbox Code Playgroud)

作为 Java 和 ActionScript 等语言的程序员,当我查看这些代码时,我想象 Bash 首先运行命令cat /dev/sda1(将命令返回的所有内容加载到 RAM 中),然后运行less可以访问那个非常大的“伪变量”的命令”表示为-

这是 Bash 做事的方式吗(意味着如果文件大于系统上的 RAM 量,该命令是一个非常糟糕的主意,您应该使用另一个命令),或者它是否有优化大型管道的方法?数据量?

slm*_*slm 8

不,它不会将所有内容加载到内存中,这将是一种不切实际的设计方式。它使用缓冲区来缓冲管道左侧的输出,然后将这些缓冲区连接到管道右侧的命令输入。

手册页man 7 pipe包含所有详细信息,以及标题为:管道缓冲区有多大?