時折何らかのクライアント端末のテストのために、モックサーバとでもいうべき受信して定型を返すだけのサーバを用意することがあります。web系ではHTTP通信が主になるためおおよそ静的ページを返すのみ、決まったJSONを返すのみといった本番同然のサーバ + 完成済みの1ファイルとなります。これがweb系から離れるともう通信さえできれば後はなんでもいい、といった要求も現れます。そういった際に一々サーバを用意するのは手間です。この記事ではそういった要求にこたえるワンライナを紹介します。
記事の主役のコマンドは次です。
while : ; do (nc -l -p リッスンするポート番号 >> 受け取った信号.txt) ; done 例. while : ; do (nc -l -p 12345 >> in_port_12345.txt) ; done
使うのはnetcatというネットワークの万能屋ともいわれるCLIソフトです。
Netcat – Wikipedia
これの l オプションはLISTENするサーバになるというオプションで、p オプションはポート番号の指定です。nc -l では受け取った信号が標準出力されるのでそれをリダイレクトしてテキストファイルに追記します。whileでくくるのはコネクションが切れる度にnetcatも終了するためです。whileでくくれば複数回の通信にも耐えます。
Linuxは何かと暗号染みた略語まみれのコマンドとオプションだらけですが、慣れたり意味が分かったりしてくると簡易に処理が作れるようになり便利です。
追記:
時刻別にファイルを分けるなら次の様にします。
while : ; do (nc -l -p 12345 >> in_port_12345_`date "+%Y%m%d_%H%M%S"`.txt) ; done