JB.*_*JB. 11
从常规文件cat
读取时,负责读取数据,随意执行,并可能将其写入管道的方式进行约束.显然,内容本身是保留的,但其他任何东西都可能被污染.例如:块大小和数据到达时间.另外,管道本身并不总是中性的:它作为输入和输入之间的附加缓冲区...
.
快速简便地解决块大小问题:
$ cat large-file | pv >/dev/null
5,44GB 0:00:14 [ 393MB/s] [ <=> ]
$ pv <large-file >/dev/null
5,44GB 0:00:03 [1,72GB/s] [=================================>] 100%
Run Code Online (Sandbox Code Playgroud)
除了其他用户发布的内容之外,当使用来自文件的输入重定向时,标准输入是文件,但是当将 cat 的输出通过管道传输到输入时,标准输入是包含文件内容的流。当标准输入为文件时,文件将能够在文件中查找,但管道不允许。您可以通过找到一个 zip 文件并运行以下命令来查看这一点:
zipinfo /dev/stdin < thezipfile.zip
Run Code Online (Sandbox Code Playgroud)
和
cat thezipfile.zip | zipinfo /dev/stdin
Run Code Online (Sandbox Code Playgroud)
第一个命令将显示 zipfile 的内容,而第二个命令将显示错误,尽管这是一个误导性错误,因为 zipinfo 不会检查 seek 调用的结果和稍后的错误。
总是要避免对 cat的无用使用。这就像手刹行驶。它白白浪费了 CPU 周期,操作系统不断在 cat 进程和管道中的下一个进程之间进行上下文切换。如果世界上所有无用的猫都消失了,不再被发明、重新发明、父子代代相传,我们就不会有全球变暖,因为我们可以轻松地在节省 1.21 吉瓦的电力的情况下生活。
谢谢。我现在感觉好多了。请加入我的行动,以消除在 stackoverflow 上对 cat 的无用使用。在我看来,这个网站对无用猫的扩散做出了重大贡献。我不责怪新手,但我确实想教他们。全世界的工人和新手,松开手刹,拯救地球!!!1!