ftpやscp不要でターミナルエミュレータを通してファイル転送ができるlrzszパッケージ | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

クライアントからサーバーにファイル転送をする際に、FTPやSCPのコマンドが利用できなかったり、ネットワークやポートの制限がかかっていて転送できないというような場合があります。

その他にも、踏み台サーバーを経由してアクセスしないといけないなど、直接ファイル転送するのが著しく面倒だったりする環境もあったりします。


そういったときに、lrzszパッケージを利用すればターミナルエミュレータを通してファイルを転送することが出来ます。

これは、TeraTermなどクライアントのターミナル環境を通してつないでいるまさにそのサーバーにファイルを転送したり、そこにあるファイルを受信したりすることができます。



rzコマンドを通してサーバーへファイルを転送する


まず最初に、lrzszパッケージがサーバー上に存在しない場合は、yumコマンドなどを通してインストールしておきましょう。


# yum install lrzsz
- snip -
Installed:
lrzsz.x86_64 0:0.12.20-22.1
Complete!

これだけで準備が整いましたので、早速ファイルを送信してみましょう。

送信したいサーバー上でrzコマンドを実行し、ファイルの転送待ち受け状態にします。


# rz
rz waiting to receive.**B0100000023be50

次に、クライアント環境のターミナルエミュレータ(今回の例ではTeraTerm)からファイルを送信してみます。

転送方法は、「ファイル」→「転送」→「ZMODEM」→「送信」メニューを選択します。


A Day In The Boy's Life-lrzsz-1


すると、送信したいファイルを選択するダイアログが開きますので、該当のファイルを選択します。


A Day In The Boy's Life-lrzsz-2


これだけでファイルの転送が完了しています。

rzコマンドを実行したディレクトリを見てみると、送信したファイルがあるはずです。


# ls
hoge.jpg

ちなみに、ZMODEMはバイナリ転送用のプロトコルでその他にもXMODEMやYMODEMが存在しており、lrzszパッケージでもそれぞれに対応した、rxコマンド(XMODEM用)、rbコマンド(YMODEM用)、rzコマンド(ZMODEM用)が存在します。

ただし、ファイル転送効率などはZMODEが一番優れており、その他のプロトコルを使うメリットはほとんど無いかと思います。



szコマンドを通してサーバーからファイルを受信する


続いて、先ほどと逆のサーバー上にあるファイルをクライアントに転送(ダウンロード)する方法です。

サーバーからファイルを転送する場合は、szコマンドを転送したいファイル名を引数にして実行します。


# sz hoge.txt

受信方法は、先ほどファイルを送信した場合にあったZMODEMの受信メニューから行います。

ファイルはターミナルエミュレータを実行しているフォルダ(TeraTermの場合はC:\Program Files\teratermとか)に保存されます。


複数のファイル転送はできなかったり(といっても、予めファイルをzipやtarで固めておけばおおかた済んだりしますけど)、そのサーバーまで端末がつながっているという前提条件がありますけど、ファイル転送用のコマンドやネットワーク的に制限があったりする場合にすぐにファイルをアップロード・ダウンロードができて便利に使えます。