Questions tagged «pipe»

Unix管道连接两个进程的文件描述符。使用在<unistd.h>中声明的POSIX pipe()函数创建管道。外壳程序使用“ |”在进程之间提供管道创建。

3
如何将“时间”输出和命令输出重定向到同一管道?
假设我有一个名为的二进制文件foo。 如果我想将输出重定向foo到其他进程bar,我可以写./foo | bar。 另一方面,如果我想对timefoo进行重定向,然后重定向其输出,则time可以编写time (./foo) | bar。 我的问题是,我如何将输出的内容粘贴到输出time的末尾foo并通过同一管道传输? 以下解决方案不是我想要的解决方案,因为它启动了流程的两个单独实例bar,而我希望将单个共享管道连接到的单个实例bar。 time (./foo | bar) | bar 对于任何好奇的人,不想启动两个实例的bar原因是因为它bar可以是网络客户端,所以我希望将定时信息http POST作为与过程输出相同的消息的一部分发送到服务器。

1
查找并rsync?
我希望能够搜索超过14天和超过10k的文件,而不是将那些找到的文件rsync到目的地。 有没有办法组合这两个命令? find ./ -mtime +14 -size +10k rsync --remove-sent-files -avz /src /dest
24 bash  shell  find  pipe  rsync 

6
如何使python程序的行为像适当的unix工具?
我周围有一些Python脚本,我正在重写它们。我对他们所有人都有同样的问题。 对于我来说,如何编写程序以使其像适当的unix工具一样运作尚不明显。 因为这 $ cat characters | progname 和这个 $ progname characters 应该产生相同的输出。 我在Python中找到的最接近的东西是fileinput库。不幸的是,我并没有真正看到如何重写我的Python脚本,所有这些看起来像这样: #!/usr/bin/env python # coding=UTF-8 import sys, re for file in sys.argv[1:]: f = open(file) fs = f.read() regexnl = re.compile('[^\s\w.,?!:;-]') rstuff = regexnl.sub('', fs) f.close() print rstuff 如果有标准输入,fileinput库处理标准输入,如果有文件,则处理文件。但是它遍历单行。 import fileinput for line in fileinput.input(): process(line) 我真的不明白。我想如果您要处理的是小文件,或者您对文件的处理不多,这似乎很明显。但是,就我的目的而言,这比仅打开整个文件并将其读取为字符串要慢得多,如上所述。 …

3
管道STDERR与STDOUT
根据“ Linux:完全参考第六版 ”(第44页),您只能使用|&amp;重定向符号通过管道传输STDERR 。 我已经编写了一个非常简单的脚本来对此进行测试: #!/bin/bash echo "Normal Text." echo "Error Text." &gt;&amp;2 我这样运行此脚本: ./script.sh |&amp; sed 's:^:\t:' 大概只有缩进STDERR的行会缩进。但是,正如我所看到的,它实际上并不像这样工作: Normal Text. Error Text. 我在这里做错了什么?

4
运行管道命令时,Linux实用程序是否聪明?
我只是在终端中运行一些命令,然后开始思考,在运行管道命令时,Unix / Linux是否采用快捷方式? 例如,假设我有一个包含一百万行的文件,其中前十行包含hello world。如果运行该命令grep "hello world" file | head,第一个命令找到10行后会立即停止,还是先继续搜索整个文件?


1
将搜索字词(而非文件名)管道传输到grep
我想从文件中挑选出包含给定数字的某些行。我要搜索的文件称为os_clusters/piRNA_clusters.bed。 awk '{if (a[$0]++ == 0) {split($0,b,"."); ;split(b[1],c,"r"); print c[3]}};' test_non_enriched | xargs grep {} os_clusters/piRNA_clusters.bed 第一部分在管道之前起作用,它产生要搜索的术语,例如8707、8824等。但是,后一部分没有。 awk '' ... | xargs grep {} os_clusters/piRNA_clusters.bed 它没有在目标文件中搜索管道产生的术语,而是将搜索术语视为输入文件。因此,我收到如下错误消息: grep: 8707: No such file or directory grep: 8824: No such file or directory 我需要更改什么以在文件中搜索os_clusters/piRNA_clusters.bed管道产生的术语?
23 bash  grep  pipe 

5
即时流压缩不会溢出到硬件资源中吗?
我有200 GB的可用磁盘空间,16 GB的RAM(其中约1 GB被台式机和内核占用)和6 GB的交换空间。 我有一个240 GB的外部SSD,其中70 GB已使用1,其余的则免费,我需要备份到磁盘上。 通常,我会dd if=/dev/sdb of=Desktop/disk.img先将磁盘压缩,然后再压缩它,但首先制作映像不是一个选择,因为这样做会比我需要更多的磁盘空间,即使压缩步骤会导致压缩可用空间,因此最终存档可以轻松放入我的磁盘中。 dd默认情况下会写入STDOUT,并且gzip可以从STDIN读取,因此从理论上讲,我可以进行写入dd if=/dev/sdb | gzip -9 -,但是gzip读取字节所需的时间比dd产生字节的时间长得多。 来自man pipe: 写入管道写入端的数据由内核缓冲,直到从管道读取端读取数据为止。 我将一个|虚拟的管道想象成一个真实的管道-一个应用程序将数据放入管道,另一个应用程序将数据尽快从管道队列中取出。 当左侧的程序比管道的另一端希望更快地写入更多数据时,怎么办?它会导致过多的内存使用或交换使用,还是内核会尝试在磁盘上创建FIFO,从而填满磁盘?还是SIGPIPE Broken pipe如果缓冲区太大会失败? 基本上,这可以归结为两个问题: 将更多数据放入管道中比一次读取更多的含义和结果是什么? 将数据流压缩到磁盘而不将整个未压缩的数据流放在磁盘上的可靠方法是什么? 注意1:由于碎片等原因,我不能完全复制前70个已使用的GB并期望得到一个工作系统或文件系统,这需要完整的内容。
23 pipe  dd  compression  gzip 

4
`curl |有什么区别?sh`和`sh -c“ $(curl)”`?
这个问题是从Server Fault 迁移过来的,因为可以在Unix&Linux Stack Exchange上回答。 迁移 2年前。 例如,一种简单的Docker安装方法是: curl -sSL https://get.docker.com/ | sh 但是,我也看到了一些类似于Docker的示例: sh -c "$(curl -sSL https://get.docker.com/)" 它们在功能上似乎相同,但是是否有理由在一个之上使用一个?还是仅仅是偏爱/审美? (值得注意的是,运行来自未知来源的脚本时要格外小心。)

2
管道,数据如何在管道中流动?
我不了解数据在管道中的流动方式,希望有人可以澄清其中的情况。 我认为命令管道以逐行方式处理文件(文本,字符串数组)。(如果每个命令本身一行一行地工作。)文本的每一行都通过管道,命令不必等待前一个命令完成对整个输入的处理。 但似乎并非如此。 这是一个测试示例。有几行文字。我将它们大写,并重复每行两次。我这样做cat text | tr '[:lower:]' '[:upper:]' | sed 'p'。 要遵循此过程,我们可以“交互式”运行它-跳过中的输入文件名cat。管道的每一部分都逐行运行: $ cat | tr '[:lower:]' '[:upper:]' alkjsd ALKJSD sdkj SDKJ $ cat | sed 'p' line1 line1 line1 line 2 line 2 line 2 但是完整的管道确实在等我完成输入,EOF然后才打印结果: $ cat | tr '[:lower:]' '[:upper:]' | sed 'p' I am writing... …

2
在bash中,管道未设置值后读取
编辑:原始标题为“ bash读取失败” 使用ksh时,我将read用作分隔值的便捷方法: $ echo 1 2 3 4 5 | read a b dump $ echo $b $a 2 1 $ 但是它在bash中失败了: $ echo 1 2 3 4 5 | read a b dump $ echo $b $a $ 我没有在手册页中找到失败的原因,知道吗?
22 bash  shell  pipe  read 

7
意外使用了输出重定向>而不是管道|
一个月前,我写了一个Python脚本来映射来自stdin的MAC和IP地址。两天前,我记得它并曾经过滤过输出,tcpdump但由于输入错误而出错。我打过 tcpdump -ne &gt; ./mac_ip.py 输出什么也没有。但是,如果无法解析输入,则输出应为“未知”,因此我cat ./mac_ip.py找到了所有tcpdump数据而不是程序。然后我意识到我应该使用 tcpdump -ne | ./mac_ip.py 有什么办法可以让我的程序恢复原状吗?无论如何,我都可以再次编写程序,但是如果在更重要的程序中再次发生该程序,我应该可以做一些事情。或有什么办法告诉输出重定向以检查文件并警告它是否是可执行文件?

2
较少的file1 file2 | 猫-为什么起作用?
当我使用时,less file1 file2两个文件都显示在“较少缓冲区查看器”中,但是less file1 file2 | cat打印了两个文件的内容并附加到stdout中。怎么不知道它是否应该显示“较少的缓冲区查看器”或为下一命令生成输出到stdout?什么机制用于执行此操作?
21 pipe  cat  less 

3
ls命令减少了彩色输出
如果我运行,ls我将获得彩色输出,对于快速浏览文件类型,我发现它非常方便。当我尝试less使用-r和-R标志将其传递到偶数时,颜色总是会丢失。我正在使用zsh5.0.7版。有任何想法吗?谢谢。 编辑:我在OS X上。
21 osx  pipe  ls  colors  less 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.