gunzip < 100terabytes.txt.gz | less
Run Code Online (Sandbox Code Playgroud)
less(1)
根据需要读取尽可能多的行以填满您的屏幕,然后停止到read(2)
. 结果,当管道变满时gunzip(1)
被阻塞write(2)
。
当您向下滚动时,less(1)
问题read(2)
一次又一次,并且随着管道被消耗,gunzip(1)
允许发出write(2)
. 您可以完全灵活地在此处来回切换(假设gunzip < 100terabytes.txt.gz
未完成。)
到目前为止一切都很好。
你可以开始在文本搜索中less(1)
使用/
。但是当在 中找不到搜索字符串时100terabytes.txt
,less(1)
基本上变得无响应。您可以使用 终止搜索Ctrl-C
。但它似乎关闭了gunzip(1)
和之间的管道less(1)
。我不喜欢这个。gunzip(1)
在我放弃文本搜索后,我想手动向下滚动以消耗更多行。这可能吗?
我不是在寻求类似的建议gunzip < 100terabytes.txt.gz | grep pattern | less
你可以尝试 od -v /dev/zero | less
当我们使用 POSIX shell 运行它时,
$ cmd0 | cmd1
Run Code Online (Sandbox Code Playgroud)
cmd0 的 STDOUT 通过管道传输到 cmd1 的 STDIN。
问:除此之外,我还如何将 cmd1 的 STDOUT 通过管道传输到 cmd0 的 STDIN?
必须使用重定向自/进入命名管道 (FIFO) 吗?我不太喜欢命名管道,因为它们占用了一些文件系统路径,我需要担心名称冲突。或者我必须通过 C、Python 或一些通用编程语言调用 pipe(2) 吗?
(cmd0 和 cmd1 都执行一些网络 I/O,因此它们不会永远相互阻塞。)
是来自 coreutils-8.4-37.el6.x86_64 的 touch(1) 还是我的大脑坏了?
$ touch abc
$ LANG=C stat abc
File: `abc'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd04h/64772d Inode: 10485773 Links: 1
Access: (0664/-rw-rw-r--) Uid: (3060399/ nodakai) Gid: ( 418/ quant)
Access: 2016-10-14 18:42:06.189751847 +0800
Modify: 2016-10-14 18:42:06.189751847 +0800
Change: 2016-10-14 18:42:06.189751847 +0800
$ touch -a abc
$ LANG=C stat abc
File: `abc'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd04h/64772d Inode: 10485773 Links: 1
Access: (0664/-rw-rw-r--) Uid: …
Run Code Online (Sandbox Code Playgroud)