![](/img/trans.png)
[英]What is the difference between cat > filename and cat >> filename in Linux Command Line
[英]What is the difference between `cat |` and `<`
我想在命令行some_cmd
filename
的内容发送到some_cmd
。 运行这个有什么区别:
$ cat filename | some_cmd
和
$ some_cmd < filename
有哪些情况我可以或应该使用一个而不是另一个?
cat foo | somecmd
cat foo | somecmd
正在运行两个程序 - /bin/cat
和somecmd
; 并使用FIFO将cat
的stdout连接到somecmd
的stdin, somecmd
只能读取一次。 该FIFO也不会暴露有关原始文件的元数据 - somecmd
既不能发现它的名称也不能发现它的大小(没有,对于大小,一直读到最后;这使得cat foo | tail
for a ridiculously slow for a multi- GB文件)。
somecmd <foo
只运行一个程序 - somecmd
- 将其stdin连接到文件foo
上的直接句柄。 因此,它可以复制该句柄,倒回并重新读取它,将文件的子集分发给不同的线程以并行处理,将文件映射到内存中以便随机访问等。
GNU sort
, wc -c
, tail
和shuf
等常用程序在给定真实的可搜索文件句柄而不是FIFO时可以更有效地运行。
始终使用重定向直接从一个文件,而不是cat
荷兰国际集团这个文件,除非你有一个具体的和令人信服的理由不这样做。”
作为这种令人信服的理由(您可能希望使用cat
)的示例,请考虑您需要流式传输仅由更多特权用户帐户读取的文件的情况。
sudo -u someuser /bin/cat -- /path/to/somefile | somecmd
...让somecmd
以原始的非升级权限运行,因此可以配置/etc/sudoers
以允许原始命令仅运行该单个特定的cat
调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.