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

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

3
アーカイブをダウンロードして、アーカイブをディスクに保存せずに抽出する方法は?
特定のディレクトリにあるアーカイブをダウンロードして抽出したいのですが。ここに私がこれまでやってきた方法があります: wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz tar zxf dbt2-0.37.50.3.tar.gz mv dbt2-0.37.50.3 dbt2 代わりに、ディスクに書き込まずにアーカイブをその場でダウンロードして抽出したいと思いますtar.gz。wgetto の出力をパイピングし、ターゲットtarを与えることでこれが可能だと思いますtarが、実際には、ピースをどのように組み合わせるかわかりません。
62 shell  pipe  tar  wget 

5
mknodコマンドは何に使用されますか?
私はメインOSとしてUbuntuを使い始めたばかりで、やってはいけないことについて学び、人々が過去にした悪いことから学びたかった。UNIXとLinuxのシステム管理者が新しい場所で自分のシステムで行った恐ろしい話についてのメールに出会いました。それらの多くは、mknodコマンドを使用して、問題の解決と修正の両方を行いました。このコマンドについて聞いたことがありませんし、Ubuntuのmanページはあまり役に立ちません。だから私の質問は、このコマンドは何のために使われ、日々の使用に役立ついくつかの例ですか?

4
名前なしパイプよりも名前付きパイプを使用する利点は何ですか?
私は、Unixの管理者から尋ねられるインタビューの質問のセットをレビューしていました。「名前付きパイプ」というトピックを見つけました。 トピックをグーグルで検索しました。ある程度までは理解できました:- 名前付きパイプ|| FIFO しかし、この特定のタイプのパイプをいつ使用するかについての知識が不足していると感じています。名前のないパイプが機能しない特別な状況はありますか?
51 pipe 

3
コマンド/プログラムのパイプチェーンでwatchコマンドを使用する方法
私は通常、watchLinuxユーティリティを使用して、次のようにn秒ごとにコマンドの出力を繰り返し監視しますwatch df -h /some_volume/ しかしwatch、次のような一連のパイプコマンドでは使用できないようです。 $ watch ls -ltr|tail -n 1 私がそれをすると、watch本当に見ていて、何も出力しない出力ls -ltrが渡されtail -n 1ています。 これを試してみると: $ watch (ls -ltr|tail -n 1) 私は得る $ watch: syntax error near unexpected token `ls' そして、次のいずれかが何らかの理由で失敗します。 $ watch &lt;(ls -ltr|tail -n 1) $ watch &lt; &lt;(ls -ltr|tail -n 1) $ watch $(ls -ltr|tail -n …
51 linux  bash  pipe  watch 

4
不要な猫を気にする必要がありますか?
多くのコマンドラインユーティリティは、パイプまたはファイル名引数から入力を取得できます。長いシェルスクリプトのcat場合、特に最初のコマンドに複数行の引数が必要な場合は、チェーンを開始すると読みやすくなります。 比較する sed s/bla/blaha/ data \ | grep blah \ | grep -n babla そして cat data \ | sed s/bla/blaha/ \ | grep blah \ | grep -n babla 後者の方法は効率が悪いですか?その場合、スクリプトが実行されるかどうか、たとえば1秒間に1回実行されるかどうかを考慮するのに十分な違いはありますか?読みやすさの違いはそれほど大きくありません。

2
Bash:コマンドの出力から一度に1行を読み取る方法は?
を使用してbashでコマンドの出力を読み取ろうとしていwhile loopます。 while read -r line do echo "$line" done &lt;&lt;&lt; $(find . -type f) 私が得た出力 ranveer@ranveer:~/tmp$ bash test.sh ./test.py ./test1.py ./out1 ./test.sh ./out ./out2 ./hello ranveer@ranveer:~/tmp$ この後、私は試しました $(find . -type f) | while read -r line do echo "$line" done しかし、それはエラーを生成しましたtest.sh: line 5: ./test.py: Permission denied。 だから、私は現在それが一度に行全体を丸lurみしていると思うので、どのように行ごとに読むのですか? 必要な出力: ./test.py …
49 bash  shell  find  pipe 

10
パイプが空であるかどうかを確認し、空でない場合はデータに対してコマンドを実行する方法は?
bashスクリプトで行をパイプし、プログラムに渡す前にパイプにデータがあるかどうかを確認したいと思います。 私が見つけた検索ですが、test -t 0ここでは機能しません。常にfalseを返します。では、パイプにデータがあることを確認する方法は? 例: echo "string" | [ -t 0 ] &amp;&amp; echo "empty" || echo "fill" 出力: fill echo "string" | tail -n+2 | [ -t 0 ] &amp;&amp; echo "empty" || echo "fill" 出力: fill 前述のパイプラインが出力を生成したかどうかをテストする標準/標準的な方法とは異なりますか?入力をプログラムに渡すために保存する必要があります。これは、あるプロセスから別のプロセスに出力をパイプする方法を一般化しますが、最初のプロセスに出力がある場合にのみ実行しますか?電子メールの送信に焦点を当てています。
42 bash  shell  pipe 

2
プロセス置換により、パイプである/ dev / fd / 63というファイルが作成されるのはなぜですか?
この特定の例のコンテキストで名前付きパイプを理解しようとしています。 私が入力し&lt;(ls -l)、私の端末にとのような出力を得ますbash: /dev/fd/63: Permission denied。 と入力するcat &lt;(ls -l)と、ディレクトリの内容が表示されます。私が交換した場合catにecho、私は端末名を取得すると思います(またはそれを何ですか?)。 echo &lt;(ls -l)出力をとして与えます/dev/fd/63。 また、この出力例は私には不明確です。 ls -l &lt;(echo "Whatever") lr-x------ 1 root root 64 Sep 17 13:18 /dev/fd/63 -&gt; pipe:[48078752] ただし、指定するとls -l &lt;()、ディレクトリの内容が一覧表示されます。 名前付きパイプの場合はどうなりますか?

7
条件付きパイプライン
次のパイプラインがあるとしましょう。 cmd1 &lt; input.txt |\ cmd2 |\ cmd4 |\ cmd5 |\ cmd6 |\ (...) |\ cmdN &gt; result.txt 特定の条件下で、cmd3間にcmd2and を追加したいと思いcmd4ます。cmd2の結果を一時ファイルに保存せずに、親切な条件付きパイプラインを作成する方法はありますか?私は次のようなものを考えるだろう: cmd1 &lt; input.txt |\ cmd2 |\ (${DEFINED}? cmd3 : cat ) |\ cmd4 |\ cmd5 |\ cmd6 |\ (...) |\ cmdN &gt; result.txt
39 pipe 

3
パイプされたxargsの後のパイプコマンド
HP-UX ***** B.11.23 U ia64 ****無制限ユーザーライセンス find . -type d -name *log* | xargs ls -la ディレクトリ名(ディレクトリ名に含まlogれる名前)に続いて、そのディレクトリ内のすべてのファイルが表示されます。 ディレクトリは /var/opt/SID/application_a/log/、 /var/opt/SID/application_b/log/、 /var/opt/SID/application_c/log/などのログファイルが含まれています。 lsコマンドで最新の2つのログファイルのみを一覧表示したいので、通常はを使用して見つけますls -latr | tail -2。 出力はこのようなものでなければなりません。 /var/opt/SID/application_a/log/ -rw-rw-rw- 1 user1 user1 59698 Jun 11 2013 log1 -rw-rw-rw- 1 user1 user1 59698 Jun 10 2013 log2 /var/opt/SID/application_b/log/ -rw-rw-rw- 1 user1 …
38 shell  find  pipe  xargs 

6
コマンドをだまして、出力が端末に送信されると考えるようにする方法
出力が端末に送信されるときに動作を変更するコマンド(色付き出力の生成など)が与えられた場合、変更された動作を維持しながら、その出力をパイプラインでどのようにリダイレクトできますか?そのためのユーティリティが存在する必要がありますが、私は知りません。 などの一部のコマンドにはgrep --color=always、動作を強制するオプションフラグがありますが、問題は出力ファイル記述子のテストのみに依存するプログラムの回避方法です。 問題があれば、私のシェルはbashLinux上にあります。
38 shell  pipe  utilities  stdout  pty 

3
パイプラインはメモリ使用量をどのように制限しますか?
ブライアン・カーニハンは、このビデオで、メモリ制限に基づいている小さな言語/プログラムに対する初期のベル研究所の魅力について説明しています 大きなマシンは64 Kバイト(MまたはGではなくK)であるため、個々のプログラムはあまり大きくできず、小さなプログラムを作成する傾向があり、次にパイプメカニズム、基本的に入出力のリダイレクトにより、あるプログラムを別のプログラムにリンクすることが可能になりました。 しかし、プログラム間でデータを転送するためにデータをRAMに保存する必要があるという事実を考慮すると、これがどのようにメモリ使用を制限するのか理解できません。 ウィキペディアから: ほとんどのUnixライクなシステムでは、パイプラインのすべてのプロセスが同時に開始されます[強調鉱山]、ストリームが適切に接続され、マシン上で実行されている他のすべてのプロセスとともにスケジューラーによって管理されます。これの重要な側面は、Unixパイプを他のパイプ実装とは別に設定することです。バッファリングの概念です。たとえば、送信プログラムは毎秒5000バイトを生成し、受信プログラムは毎秒100バイトしか受け入れられませんが、データが失われます。代わりに、送信プログラムの出力はバッファに保持されます。受信プログラムがデータを読み取る準備ができると、パイプラインの次のプログラムがバッファから読み取ります。Linuxでは、バッファーのサイズは65536バイト(64KB)です。必要に応じて、より大きなバッファを提供するために、bfrと呼ばれるサードパーティのオープンソースフィルターを使用できます。 これは小さなプログラムの目的を完全に無効にするため、さらに混乱します(ただし、それらは一定の規模までモジュール化されます)。 私の最初の質問(メモリの制限はサイズデータに依存する問題)の解決策として考えることができる唯一のことは、当時大きなデータセットが単に計算されておらず、実際の問題パイプラインは解決することでしたプログラム自体が必要とするメモリ量。しかし、Wikipediaの引用文の太字のテキストを考えると、これでも混乱します。1つのプログラムが一度に実装されないためです。 一時ファイルが使用されている場合、これは非常に理にかなっていますが、パイプがディスクに書き込まれないことは私の理解です(スワップが使用されない限り)。 例: sed 'simplesubstitution' file | sort | uniq &gt; file2 sedファイルを読み込んで行ごとに吐き出しているのは明らかです。しかしsort、リンクされたビデオでBKが述べているように、完全に停止しているので、すべてのデータをメモリに読み込む必要がありますか(またはそれを行いますか?)、それはに渡されますuniq(私にとっては) -ラインアットアタイムプログラム。しかし、最初のパイプと2番目のパイプの間では、すべてのデータがメモリ内にある必要がありますか?
36 pipe  history 

4
なぜ「tail -f…| テール」は出力を生成できませんか?
次のコマンドで出力が生成されないのはなぜですか? $ tail -f /etc/passwd | tail バッファリングについて読んだ後、私は次のことを試してみました: $ tail -f /etc/passwd | stdbuf -oL tail 以下が出力を生成することに注意してください。 $ tail /etc/passwd | tail これもそうです: $ tail -f /etc/passwd | head テールバージョン8.21(GNU coreutils)を使用しています。
36 pipe  tail 

2
別のプロセスにパイプすると、ANSIエスケープコードはどこに移動しますか?保管してもいいですか?
プロセス用に色分けされた出力をパイプしたい場合があります。grep ...しかし、私がそれを別のプロセスにパイプするとき、例えば。sed、カラーコードは失われます... コードをそのまま保持する方法はありますか? 色付きの出力が失われる例を次に示します。 echo barney | grep barney | sed -n 1,$\ p

2
/ proc / PID / fd / Xリンク番号
Linuxでは、で/proc/PID/fd/X、パイプまたはソケットであるファイル記述子のリンクには、次のような番号があります。 l-wx------ 1 user user 64 Mar 24 00:05 1 -&gt; pipe:[6839] l-wx------ 1 user user 64 Mar 24 00:05 2 -&gt; pipe:[6839] lrwx------ 1 user user 64 Mar 24 00:05 3 -&gt; socket:[3142925] lrwx------ 1 user user 64 Mar 24 00:05 4 -&gt; socket:[3142926] lr-x------ 1 user user 64 …

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