GNU/Linux >> Linux の 問題 >  >> Linux

Linux Bash での名前付きパイプの使用例

名前付きパイプの実用的な使用の最良の例の 1 つ...

http://en.wikipedia.org/wiki/Netcat から:

<ブロック引用>

別の便利な動作は netcat を使用することです プロキシとして。ポートとホストの両方をリダイレクトできます。この例を見てください:

nc -l 12345 | nc www.google.com 80

ポート 12345 はリクエストを表します。

これは nc を開始します サーバーをポート 12345 に接続すると、すべての接続が google.com:80 にリダイレクトされます . Web ブラウザが nc にリクエストした場合 、リクエストは Google に送信されますが、レスポンスは Web ブラウザに送信されません。これは、パイプが単方向であるためです。これは、名前付きパイプを使用して入力と出力をリダイレクトすることで回避できます。

mkfifo backpipe
nc -l 12345  0<backpipe | nc www.google.com 80 1>backpipe

コマンドは次のとおりです:

$ mkfifo named_pipe

$ echo "Hi" > named_pipe &

$ cat named_pipe

最初のコマンドはパイプを作成します。

2 番目のコマンドはパイプに書き込みます (ブロッキング)。 & これをバックグラウンドに置くので、同じシェルでコマンドを入力し続けることができます。次のコマンドで FIFO が空になると終了します。

最後のコマンドはパイプから読み取ります。


2 つの異なるシェルを開き、それらを並べたままにします。両方とも、/tmp/ に移動します。 ディレクトリ:

cd /tmp/

最初のタイプ:

mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe

2 番目に、次のように入力します。

while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe

最初のシェルは、2 番目のシェルでコードの 2 番目の部分を実行するまでプロンプトを返しません。 fifo の読み取りと書き込みがブロックされているためです。

ls -al myPipe を実行して、FIFO タイプを確認することもできます。 この特定の種類のファイルの詳細を確認してください。

次のステップは、コードをスクリプトに組み込むことです!


Linux
  1. LinuxでのBash履歴の解析

  2. LinuxでのBash履歴での単語修飾子の使用

  3. Linux OS サービス「名前付き」

  1. Linux カーネルで getnstimeofday を使用する例

  2. Linux で Bash を使用してすべての出力をファイルにリダイレクトしますか?

  3. Linuxでbashスクリプトを使用してインターネットアクセスをチェックするには?

  1. Linuxでパイプと名前付きパイプを使用する方法(例付き)

  2. BashスクリプトでのLinuxスリープコマンドの使用

  3. BashスクリプトでのLinuxBasenameコマンドの使用