タグ付けされた質問 「pipe」

Unixパイプは、2つのプロセスのファイル記述子を接続します。パイプは、<unistd.h>で宣言されたPOSIX pipe()関数で作成されます。シェルは、「|」を使用してプロセス間にパイプを作成します。

3
「time」出力とコマンド出力を同じパイプにリダイレクトするにはどうすればよいですか?
というバイナリがあるとしfooます。 出力をリダイレクトしたい場合 foo他のプロセスbar、次のように記述できます./foo | bar。 一方、私がしたい場合 time FOO、およびリダイレクトの出力timeIは、書くことができますtime (./foo) | bar。 私の質問は、どのように出力を出力のtime最後に貼り付けることができますかfoo、同じパイプにパイプする方法はありますか? 次の解決策は私が探しているものではありません。プロセスの2つの別々のインスタンスを開始するのbarに対し、1つの共有パイプを1つのインスタンスにbar。 time (./foo | bar) | bar 好奇心旺盛で、誰のために、2つのインスタンスを開始したくない理由barISがあるためbar、ネットワーククライアントにすることができ、私はタイミング情報が同じの一部としてサーバーに送信したいhttp POSTプロセス出力としてメッセージ。

1
見つけてrsync?
14日以上10k以上のファイルを検索し、見つかったファイルを宛先にrsyncしたいのですが。 これらの2つのコマンドを組み合わせる方法はありますか? 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 ファイル入力ライブラリは、stdinがある場合はstdinを処理し、ファイルがある場合はファイルを処理します。しかし、それは単一行にわたって反復します。 import fileinput for line in fileinput.input(): process(line) 私は本当にそれを得ません。あなたが小さなファイルを扱っている場合、またはあなたがファイルに多くのことをしていないなら、これは明白に見えるかもしれません。しかし、私の目的では、上記のようにファイル全体を開いて文字列に読み込むよりもはるかに遅くなります。 …

3
STDERRの配管とSTDOUT
" Linux:The Complete Reference 6th Edition "(pg。44)によれば、リダイレクトシンボルを使用してSTDERR のみをパイプできます|&amp;。 これをテストするための非常に単純なスクリプトを作成しました。 #!/bin/bash echo "Normal Text." echo "Error Text." &gt;&amp;2 このスクリプトを次のように実行します。 ./script.sh |&amp; sed 's:^:\t:' おそらく、STDERRに出力された行だけがインデントされます。ただし、実際には次のように機能しません。 Normal Text. Error Text. ここで何が間違っていますか?

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 

4
パイプコマンドを実行する場合、Linuxユーティリティはスマートですか?
ターミナルでいくつかのコマンドを実行していましたが、パイプコマンドを実行するときにUnix / Linuxがショートカットを取得しますか? たとえば、100万行のファイルがあり、最初の10行にが含まれてhello worldいるとします。コマンドを実行するとgrep "hello world" file | head、最初のコマンドが10行を検出するとすぐに停止しますか、それともファイル全体を最初に検索し続けますか?

8
あるプロセスから別のプロセスに出力をパイプし、最初のプロセスに出力がある場合にのみ実行する方法は?
からの出力がある場合、このコマンドを電子メールのみに書き換えるにはどうすればよいmailq | grepですか? mailq | egrep 'rejected|refused' -A 5 -B 5 | mail -s 'dd' email@email これは1行でも可能ですか? パイプが空かどうかを確認し、電子メールの送信よりも一般的なケースでない場合は、データに対してコマンドを実行するをご覧ください。
23 shell  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: パイプの書き込み側に書き込まれたデータは、パイプの読み取り側から読み取られるまでカーネルによってバッファリングされます。 を|実際のパイプのように視覚化します。1つのアプリケーションがデータを押し込み、もう1つのアプリケーションがパイプのキューからデータをできるだけ早く取り出します。 左側のプログラムがパイプの反対側が処理を期待できるよりも多くのデータをより速く書き込むとどうなりますか?それは極端なメモリまたはスワップの使用を引き起こしますか、またはカーネルはディスク上にFIFOを作成しようとし、それによりディスクをいっぱいにしますか?それともSIGPIPE Broken pipe、バッファが大きすぎると失敗しますか? 基本的に、これは2つの質問に要約されます。 一度に読み取られるよりも多くのデータをパイプに押し込むことの意味と結果は何ですか? 圧縮されていないデータストリーム全体をディスクに配置せずに、データストリームをディスクに圧縮する信頼できる方法は何ですか? 注1:最初の70個の使用済みGBを正確にコピーすることはできません。断片化など、コンテンツ全体を完全に維持する必要があるため、動作中のシステムまたはファイルシステムを取得します。
23 pipe  dd  compression  gzip 

4
`curl | sh`と `sh -c“ $(curl)”`?
この質問は、UnixおよびLinux Stack Exchangeで回答できるため、Server Faultから移行されました。 2年前に移行され ました。 (たとえば)Dockerの簡単なインストール方法の1つは次のとおりです。 curl -sSL https://get.docker.com/ | sh ただし、次のようなものも見ました(Dockerの例を使用): sh -c "$(curl -sSL https://get.docker.com/)" 機能的には同じように見えますが、一方を他方よりも使用する理由はありますか?それとも、単に好み/美学のものですか? (注意してください、未知の起源からスクリプトを実行するとき、非常に注意してください。)

2
パイプ、データはパイプラインでどのように流れますか?
パイプラインでデータがどのように流れるのか理解していないので、誰かがそこで何が起こっているのかを明確にしたいと思っています。 コマンドのパイプラインは、ファイル(テキスト、文字列の配列)を1行ずつ処理します。(各コマンド自体が行ごとに機能する場合。)テキストの各行がパイプラインを通過する場合、コマンドは前の入力が入力全体の処理を完了するまで待機しません。 しかし、そうではないようです。 これがテスト例です。テキストのいくつかの行があります。それらを大文字にして、各行を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 $ 失敗した理由は、manページで見つけられませんでした。
22 bash  shell  pipe  read 

2
以下file1 file2 | 猫—なぜ機能するのですか?
I USSときless file1 file2、私は「少ないバッファビューア」に示されている両方のファイルを取得しますが、less file1 file2 | catstdoutに付加し、両方のファイルの内容を印刷します。「less buffer viewer」を表示するか、次のコマンドの出力をstdoutに生成する必要があるかどうかは、どのようにしてわかりませんか?これを行うためにどのメカニズムが使用されますか?
21 pipe  cat  less 

7
誤ってパイプの代わりに出力リダイレクトを使用しました|
1か月前に、標準入力からMACアドレスとIPアドレスをマップするPythonスクリプトを作成しました。そして2日前、私はそれを覚えていて、出力のフィルタリングに使用しtcpdumpていましたが、タイプミスのために間違っていました。入力しました tcpdump -ne &gt; ./mac_ip.py 出力は何もありません。しかし、入力を解析できない場合、出力は「不明」になるはずです。そのため、プログラムではなくcat ./mac_ip.pyすべてのtcpdumpデータを見つけて見つけました。その後、私は使用する必要があることに気付きました tcpdump -ne | ./mac_ip.py プログラムを元に戻す方法はありますか?とにかく私は自分のプログラムを再び書くことができますが、より重要なプログラムで再び起こった場合、私は何かをすることができるはずです。または、出力リダイレクトにファイルをチェックし、実行可能ファイルであるかどうかを警告する方法はありますか?

3
lsコマンドのlessにカラー出力なし
実行するlsと、色付きの出力が得られ、ファイルの種類をすばやく確認するのに非常に便利です。and フラグを使用しlessてパイプしようとする-rと-R、カラーリングは常に失われます。zshバージョン5.0.7 を使用しています。何か案は?ありがとう。 編集:私はOS Xを使用しています。
21 osx  pipe  ls  colors  less 

4
コマンドの出力を複数のコマンドにリダイレクトすることは可能ですか?
私の知る限り、teeコマンドを使用して、標準出力を画面とその他のファイルに分割できます。 command -option1 -option2 argument | tee file1 file2 file3 teeを使用してファイルの代わりにコマンドに出力をリダイレクトすることは可能ですか?理論的にはコマンドのチェーンを作成できますか?
21 command-line  pipe  tee 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.