bashスクリプトファイルで行が何を意味するかを理解しようとしています:
mkfifo mypipe
nc -l 12345 < mypipe | /home/myprogram > mypipe
私が理解していることは次のとおりです。
私の質問は、まず私の分析は正しいですか?次に、mkfifo とは正確には何ですか。たとえば、どのようなファイルですか? また、 myprogram にパイプするために nc -l が正確に出力するものもわかりません。
助けてくれてありがとう。
mkfifo
パイプファイルを作成します。ここでFIFOとは「先入れ先出し」を意味します。1 つのプロセスがパイプに書き込むものは何でも、2 番目のプロセスは読み取ることができます。これは「実際の」ファイルではありません。データがディスクに保存されることはありません。しかし、Linux はそのメカニズムの多くをファイルとして抽象化し、物事を単純化しています。
nc -l 12345
ソケット 12345 にバインドしてリッスンします。着信接続をキャッチすると、標準入力をリモート ホストに渡し、リモート ホストの着信データを標準出力に渡します。
したがって、ここでのアーキテクチャは次のとおりです。
remote host -> nc -> regular pipe -> myprogram
myprogram -> mypipe -> nc -> remote host
myprogram は stdin から読み込んで stdout に書き込むように設計されていましたが、myprogram とリモート ホストを効果的に通信させます。
bash パイプ ( |
) は一方向の通信のみを処理するため、双方向のプロセス間接続を行うには明示的な 2 番目のパイプを作成する必要があります。