====== nc ====== ===== 概要 ===== * 正しくは Netcat コマンド * TCP や UDP のパケットを読み書きするツール * [[https://ja.wikipedia.org/wiki/Netcat | Netcat - Wikipedia]] * 用途としては、対象ホストに対する疎通テストや、ファイル転送に用いる * [[https://orebibou.com/2015/11/ncnetcat%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E4%BD%BF%E3%81%84%E6%96%B98%E5%80%8B/ | nc(netcat)コマンドで覚えておきたい使い方8個 | 俺的備忘録 〜なんかいろいろ〜]] * 一般的にファイルを転送するには、scp や sftp などを使うが、暗号化コストで転送速度が落ちてしまうので、純粋に転送速度を上げたい場合はこのコマンドを使うと良い (ただし、セキュリティは犠牲になるので、その点は注意して使うこと) * 逆に単純な転送のみ行うため、パイプなどでさまざまな圧縮ツールなどを通すことができる ===== インストール ===== * Ubuntu では標準で入っている ===== ファイル転送 ===== ==== シンプルな転送 ==== - サーバ (送信) 側とクライアント (受信) 側で ssh などでログインした状態にしておく - 送受信 * 送信側\\ $ nc -l <ポート番号> < <送信ファイル> * ''<ポート番号>'': [[http://e-words.jp/w/%E3%82%A6%E3%82%A7%E3%83%AB%E3%83%8E%E3%82%A6%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88.html | well-knownポート番号]] 以外のポート番号を指定 (10000 とかそれ以上の数字とか) * 受信側\\ $ nc <ホスト名orIPアドレス> <ポート番号> > <保存パス> * ''<ホスト名orIPアドレス>'': 送信側のホスト名か、IP アドレスを指定 * ''<ポート番号>'': 送信側と同じポート番号を指定 * ''<保存パス>'': 保存するファイルはリダイレクトで保存 - 転送が終了すると、何も表示せずにプロンプトに戻る * 送信側で pv コマンドを使うと、転送の進捗もわかる * pv コマンドのインストール\\ $ sudo apt-get install pv * 送受信 * 送信側\\ $ pv <送信ファイル> | nc -l <ポート番号> * 受信側は同じコマンド * 参考サイト: [[http://blog.glidenote.com/blog/2014/12/02/using-netcat-for-file-transfers-with-pv/ | ncコマンドでファイル転送するときにpvコマンドで進捗を表示する - Glide Note]] ==== 高速な転送 ==== * ファイルを lzop や pigz などで圧縮すると転送速度が上がるらしい * 参考サイト: [[http://ameblo.jp/principia-ca/entry-12023722731.html | 最速を究める! 2つのサーバ間で特盛りデータを30倍速で転送する方法|サイバーエージェント 公式エンジニアブログ]] === lzop を使う転送 === * 計算機に負荷 (CPU 負荷) をあまりかけずに高速に圧縮するなら、lzop を使うのが最適 * [[https://ja.wikipedia.org/wiki/Lzop | lzop - Wikipedia]] * lzop のインストール\\ $ sudo apt-get install lzop * 送受信 * 送信側\\ $ lsop -c <送信ファイル> | nc -l <ポート番号> * pv コマンドを使う場合\\ $ pv <送信ファイル> | lzop -c | nc -l <ポート番号> * 受信側\\ $ nc <ホスト名orIPアドレス> <ポート番号> | lsop -d > <保存パス> === pigz を使う転送 === * 計算機の CPU リソースが豊富でそれらを利用できるなら、gzip の並列版である pigz を使うのが最適 * [[http://qiita.com/itukizora/items/10a9e7fffff857de374b | マルチコアでgzファイルの圧縮解凍ができるpigzの使い方 - Qiita]] * 送受信 * 送信側\\ $ pigz -c <送信ファイル> | nc -l <ポート番号> * pv コマンドを使う場合\\ $ pv <送信ファイル> | pigz -c | nc -l <ポート番号> * 受信側\\ $ nc <ホスト名orIPアドレス> <ポート番号> | pigz -d > <保存パス> {{tag>Linux コマンド}}