• オデッサ・ファイル

もし、sshで接続できるマシンがあるなら、sftpで接続して、ファイルの交換が行える。sftpでは、リモート側のファイルの一覧やディレクトリの変更、作成といった基本的なファイル操作が可能である。従来、sshといえば、scpコマンドが著名だったが、現在では、sftpが主流で、scpもsftpをベースに実装されている。何よりも簡易ながらファイル関連のコマンド(cd、ls、mkdirなど)が使えるsftpでは、作業効率が大きく異なる。そもそも、ダウンロードするリモート側のファイル名を把握している必要がなく、sftpのコマンドを使い、ファイルを探してダウンロードすることができる。

ftpといっても、sftpが実装するのは最近のLinux上で動作しているftpではなく、昔のftpコマンドに近い。筆者の記憶では、4.2あるいは4.3 BSDの頃に使われていたftpと同等である。

sftpは、起動した後、sftpのコマンドを使って「対話的」に操作する。マクロ(スクリプト)を作って、一連のファイル転送作業を自動化することもできる。

まずは、起動方法だが、(表01)に起動オプションを示す。sftpは、


sftp␣[オプション]␣<ユーザー名>@<ホスト名またはIPアドレス>[:<ポート番号>]

という構造で、ほとんどsshと同じ。オプションの一部は、sshクライアントと同じである。なので、sshクライアントを使い慣れていれば、問題はないだろう。

  • ■表01

sftpコマンドを起動したら、(表02)にあるコマンドが利用できる。基本的には、ローカルで実行されるファイル関連コマンドは、コマンドの前にローカルを意味する小文字のLがつく。逆にリモート側で実行されるコマンドは、bashなどの組み込みコマンドそのままである。つまり、sftpを起動したら、リモート側で簡易シェルが動いていると思えばよい。

  • ■表02

コマンドは、大きく、「汎用」(sftp自体の設定など)、「転送」(ファイルのアップロード、ダウンロードの指示)、「リモート」(リモート側で動作するファイル関連コマンド)、「ローカル」(ローカルで動作するファイル関連コマンド)の4つに分類できる。

「リモート」コマンドに比べると、「ローカル」コマンドの数が少ないが、シェルに抜ける「シェル・エスケープ」コマンドがあり、普通にbashなどのシェルで作業が行える。ファイルを転送するまえに、ちょっとエディタで編集といった作業もできる。これに対して、リモート側は、どのようなプラットフォームになるのかを決められないため、シェル・エスケープ機能がない(そもそもシェルが存在しない可能性さえある)。なので、一通りのファイル関連コマンドが用意されている。

ファイルのアップロード(ローカルからリモートへの転送)は、「put」コマンド、ファイルのダウンロード(リモートからローカルへの転送)には、「get」を使うのは、ftpと同じ。

古くからのユーザーなら、sshといえばscpコマンドというイメージを持っている方もいらっしゃるだろう。現在、scpコマンドは、sftpをベースに実装されている。scpコマンドは、bashのcpコマンドをssh上で実行するものであるため、あらかじめリモート側のファイルパスを知っている必要がある。このため、sshで接続して、ファイルを調べて、といった手順になるが、sftpなら、こうした作業を対話的なコマンド実行でカバーできる。

今回のタイトルネタは、フレデリック・フォーサイス(Frederick Forsyth)の「Odessa File」(1972年。邦訳「オデッサ・ファイル」角川文庫)である。同じタイトルで映画化(1974年)されたので、見たことがある方もいるかもしれない。映画のオープニングで、ラジオから流れるペリー・コモの歌う「クリスマス・ドリーム」は、映画のオリジナル曲で、意外に名曲。クリスマスが近づくと、商業施設のBGMで流れることがある。フォーサイスといえば、「ジャッカルの日」が有名だが、こちらも同じく、重厚な作品で、映画はストーリーが、少し単純化されている。「ジャッカルの日」と合わせて、書籍も読んでおくべき作品である。