tftp または utftp コマンド

目的

トリビアル・ファイル転送プロトコル (TFTP) を使用してホスト間でファイルを転送します。

構文

{tftp | utftp} { -g -o -p -r -w } LocalName HostPort  RemoteName [ netascii | image] [blksize #] [timeout #] [tsize]

対話形式の構文

コマンド・ライン形式の構文

説明

/usr/bin/tftp コマンドと utftp コマンドは、トリビアル・ファイル転送プロトコル (TFTP) を使用してホスト間でファイルを転送します。TFTP は最小の転送プロトコルなので、tftp コマンドと utftp コマンドは ftp コマンドの機能をすべて備えているわけではありません。例えば、tftp コマンドと utftp コマンドには、リモート・ファイルをリストする機能やリモート・ホストでディレクトリーを変更する機能はなく、限られたファイル・アクセス権限のみがリモート TFTP サーバーに与えられます。utftp コマンドは、パイプで使用できる形式の tftp コマンドです。

リモート・ホストには、inetd デーモンが始動した tftpd デーモンと、tftpd デーモンのアクセスを制限する定義済みアカウントがなければなりません。tftpd コマンドで定義したプロシージャーを使用して、TFTP 環境と nobody アカウントをセットアップします。

注: ホストをセキュア・モードで操作している場合は、tftp コマンドと utftp コマンドは使用できません。

tftp コマンドは、送信されたあらゆるブロック用の重複する肯定応答を無視し、エラー・パケットを送り、不適切な (将来の) ブロック番号を持つブロックが到着すると、終了します。重複したデータ・ブロックも、既にそれらのブロックを受信していた場合には無視し、エラー・パケットを送信して終了します。

RFC2349 オプション・ネゴシエーション

tftp クライアントが以下の TFTP オプションをサーバーと折衝できるようになりました。 それらのオプションとは、ブロック・サイズ (blksize)、転送サイズ (tsize)、 およびタイムアウト (timeout) です。転送ブロック・サイズを大きくすると転送のパフォーマンスを向上でき、tsize は使用可能なスペースを検査するために転送前にファイル・サイズを報告し、timeout は再送タイムアウトを折衝します。オプション・ネゴシエーションを実現するには、TFTP サーバーが RFC2349 をサポートしていることが必要です。

アクセス制御

/etc/tftpaccess.ctl ファイルの allow: または deny: で始まる行が検索されます。他の行は無視されます。ファイルが存在しない場合は、アクセスは許可されます。許可されたディレクトリーとファイルにはアクセス可能ですが、禁止されたディレクトリーにはアクセスできません。例えば、/usr ディレクトリーは許可されていますが、/usr/ucb ディレクトリーは許可されていないものとします。このことは、/usr ディレクトリー内の /usr/ucb ディレクトリーを除くすべてのディレクトリーとファイルがアクセス可能であることを意味します。/etc/tftpaccess.ctl ファイル内のエントリーは、絶対パス名でなければなりません。

/etc/tftpaccess.ctl ファイルは、root ユーザーによってのみ書き込み可能で、すべての groupsothers (すなわち、644 の権限を持つ root によって所有されている) によって読み取り可能でなければなりません。ユーザー nobody は、/etc/tftpaccess.ctl ファイルを読み取ることができなければなりません。そうでないと、tftpd デーモンはファイルの存在を認識できず、全システムへのアクセスを許可します。詳細な情報については、/usr/samples/tcpip ディレクトリー内にあるサンプルの tftpaccess.ctl ファイルを参照してください。

検索アルゴリズムは、tftp コマンドで使用されるローカル・パス名が絶対パス名であることを前提としています。/etc/tftpaccess.ctl ファイルの allow:/ を検索します。ファイル・パス名から次のコンポーネントを追加することで作成される各部分パス名を持つ許可パス名を繰り返し検索します。 一致する最長パス名が許可パス名です。その後、一致する最長許可パス名から開始して、禁止名に対して同じことを行います。

例えば、ファイル・パス名が /a/b/c/etc/tftpaccess.ctl ファイルに allow:/a/bdeny:/a が含まれているとすると、1 つの許可パス名 (/a/b) に一致し、/a/b で始まる禁止パス名には一致しないので、アクセスが許可されます。

/etc/tftpaccess.ctl ファイルに allow:/adeny:/a/b が含まれているとすると、1 つの許可パス名 (/a) に一致しますが、/a で始まる 1 つの禁止パス名 (/a/b) に一致するので、アクセスは禁止されます。/etc/tftpaccess.ctl ファイルが allow:/a/bdeny:/a/b も含んでいるとすると、許可パス名が最初に検索されるのでアクセスは禁止されます。

注: X ステーション、ディスクレス・クライアント、制限付きエントリーの詳しい情報と構成例については、/usr/samples/tcpip/tftpaccess.ctl ファイルを参照してください。

tftp コマンドと utftp コマンドには 2 つの形式、つまり、対話型形式とコマンド・ライン形式があります。

対話型形式

対話型形式では、tftp コマンドと utftp コマンドは単独で発行されるか、このセッション中のファイル転送に使用するデフォルト・ホストを指定する Host パラメーターを付けて発行されます。いずれかを選択する場合には、/etc/services ファイル内で mail 用に指定したポートなど、tftp 接続または utftp 接続が使用すべき Port パラメーターも指定できます。これらのコマンドのいずれかを対話型形式で入力すると、tftp> プロンプトが表示されます。

データをリモート・ホストに転送すると、転送されたデータは RemoteName パラメーターで指定したディレクトリー内に配置されます。 リモート名は全ファイル名でなければなりません。また、リモート・ファイルは存在し、かつ他のファイルへの書き込み許可が設定済みでなければなりません。tftp コマンドは、指定されたファイルにデータを書き込もうとします。しかし、リモート TFTP サーバーがリモート・ファイルへの書き込みに該当する特権を持っていないか、またはファイルが存在していないと、転送は失敗します。 この状態は、 tftpd デーモンを使用してオーバーライドすることができます。

コマンド・ライン形式

tftp コマンドと utftp コマンドのコマンド・ライン形式は等価ですが、utftp コマンドはローカル・ファイルを上書きしません。tftp コマンドはファイルを上書きできますが、その前にプロンプトを表示します。対話型でないので、utftp コマンドのコマンド・ライン形式は、パイプの tftp コマンドより有効です。コマンド・ライン形式では、いずれのコマンドへの引数もすべてコマンド・ラインで指定し、プロンプトは表示されません。

サブコマンド

tftp サブコマンドと utftp サブコマンドは、対話型形式でもコマンド・ライン形式でも入力できます。

対話型形式で使用されるサブコマンド

tftp> プロンプトが表示されると、以下のサブコマンドを発行することができます。

項目 説明
? [Subcommand] ヘルプ情報を表示します。Subcommand パラメーターを指定すると、そのサブコマンドに関する情報のみが表示されます。
ascii mode ascii サブコマンドと同義です。
binary mode binary サブコマンドと同義です。このサブコマンドは対話モードで使用します。image サブコマンドは、mode binary サブコマンドと同じですが、コマンド・ラインで使用します。
blksize Number of Bytes サーバーとの blksize オプション・ネゴシエーションを使用可能にします。 ネゴシエーションが正常に行われると、これによって転送率を大幅に改善できます。 転送ブロック・サイズは必ず 8 オクテット以上でなければならず、最大 65464 オクテットまで可能です。 デフォルトは 512 オクテットです。
connect Host [Port] ファイル転送用のリモート・ホスト、およびオプションのポートを設定します。TFTP プロトコルは転送間の接続を維持しないので、 connect サブコマンドは指定されたホストへの接続を作成しませんが、転送操作用に保管します。 リモート・ホストは、 既に指定したホストをオーバーライドする get または put サブコマンドの一部として指定できるので、 connect サブコマンドは必要ありません。

get RemoteFile [LocalFile]

項目 説明
get RemoteFile RemoteFile RemoteFile [RemoteFile . . . ]  リモート・ホストからローカル・ホストへ、単一ファイルまたはファイルセットを獲得します。各 RemoteFile パラメーターは、以下の 2 つの方法のいずれかで指定できます。
  • デフォルト・ホストを既に指定してある場合はリモート・ホスト上に存在するファイル (File) として指定します。
  • ホスト・ファイル (Host:File) として指定します。この Host はリモート・ホストで、File はローカル・システムにコピーするファイルの名前です。この形式のパラメーターを使用すると、最後に指定した Host はこの tftp セッションの以降の転送用のデフォルト・ホストとなります。
mode Type 転送モードのタイプ (Type) を、ascii または binary に設定します。転送モード ascii がデフォルトです。

put LocalFile [RemoteFile]

項目 説明
put LocalFile LocalFile LocalFile [LocalFile . . . ] RemoteDirectory             ローカル・ホストからの単一ファイルまたはファイルのセットを、リモート・ホストに保管します。RemoteDirectory パラメーターと RemoteFile パラメーターは以下の 2 つの方法のいずれかで指定できます。
  • デフォルト・ホストを既に指定してある場合は、リモート・ホストに存在するファイルまたはディレクトリーとして指定します。
  • Host:RemoteFile パラメーターとともに指定します。Host はリモート・ホストで、RemoteFile はリモート・システムのファイルまたはディレクトリーの名前です。この形式のパラメーターを使用すると、最後に指定した Host はこの tftp セッションの以降の転送用のデフォルト・ホストとなります。

いずれの場合も、ローカル・ディレクトリー名とリモート・ディレクトリー名が同じであっても、リモート・ファイル名またはディレクトリー名は絶対パス名でなければなりません。リモート・ディレクトリーを指定すると、リモート・ホストは UNIX コンピューターであると想定されます。put サブコマンドのデフォルト値は write-replace (書き込み置換) ですが、 write-create (書き込み作成) が可能になるように、 tftpd デーモンにオプションを追加することができます。

quit tftp セッションを終了します。EOF キー・シーケンスもプログラムを終了します。
status 現在の転送モード (ascii または binary)、接続状況、タイムアウト値などの tftp プログラムの現在の状況を表示します。
timeout Value 合計送信タイムアウトを Value パラメーターで指定された秒数に設定します。 Value パラメーターは必ず 1 秒以上にしてください (デフォルトは 5 秒)。
trace パケットのトレースをオンまたはオフにします。
tsize サーバーとの tsize オプション・ネゴシエーションを使用可能にします。これによって、転送開始前にファイル・サイズを知ることができます。 割り当てが超過しているとエラーが戻され、ファイル転送は行われません。
verbose ファイルの転送中に補足情報を表示する verbose モードをオンまたはオフにします。

コマンド・ライン形式で使用するサブコマンド

この形式では、以下の Action フラグが使用できます。

項目 説明
-w または -p LocalName パラメーターで指定されたローカル・データを、Host パラメーターで指定されたリモート・ホスト上の RemoteName パラメーターで指定されたファイルに書き込み (すなわちプットし) ます。LocalName パラメーターがファイル名ならば、tftp コマンドは指定されたローカル・ファイルを転送します。LocalName パラメーターを - (ダッシュ) として指定すると、tftp コマンドはローカル標準入力からリモート・ホストにデータを転送します。LocalName パラメーターが標準入力であれば、tftp コマンドはタイムアウト前にすべて入力できるように 25 秒を見込みます。
-r,-g または -o Host パラメーターで指定されたリモート・ホスト上で RemoteName パラメーターで指定されたファイルからリモート・データを読み取り (すなわち取り出して)、LocalName パラメーターで指定されたファイルに書き込みます。LocalName パラメーターがファイル名ならば、tftp コマンドは指定されたローカル・ファイルにデータを書き込みます。-r アクションと -g アクションに関しては、tftp コマンドは既存のローカル・ファイルに上書きする前に、確認を求めるプロンプトを表示します。 -o アクションに関しては、tftp コマンドはプロンプトを表示せずに既存のローカル・ファイルに上書きします。LocalName パラメーターを - (ダッシュ) として指定すると、tftp コマンドはローカル標準出力にデータを書き出します。

注: tftp -g コマンドと tftp -r コマンドは、既存のローカル・ファイルを上書きする前にプロンプトを表示するので、パイプで tftp コマンドを使用するのは実際的ではないことがあります。utftp コマンドは、tftp コマンドと同じ -r アクションと -g アクションを実行しますが、ローカル・ファイルを上書きする前には停止するだけです。したがって、utftp コマンドの方がパイプ内での使用には適しています。

以下のファイル転送のモードの場合、RemoteName パラメーターは他のファイルへの書き込み許可が設定済みのファイルの名前です。RemoteName パラメーターにシェルの特殊文字を含める場合は、二重引用符 (" ") で囲まなければならないことに注意してください。

転送モードは以下のいずれかです。

項目 説明
netascii 8 ビットの転送バイトを 7 ビット ASCII 文字としてデータを転送します。これはデフォルトです。
image データを変換せずに、8 ビットの転送バイトの 8 ビットのバイナリー・データ・バイトとして転送します。2 台のホスト間で転送を行う場合は、image のほうが netascii よりも効率の良い転送を行います。ワークステーションから異なるタイプのホストに ASCII ファイルを転送する場合には、netascii を使用することをお勧めします。

tftp コマンドの対話型形式とコマンド・ライン形式の相違点を以下の例で示します。

tftp コマンドの対話型形式の使用法

tftp コマンドを入力し、現在の状況を検査し、リモート・ホストに接続して、リモート・ホストからローカル・ホストにファイルを転送するには、次のように入力します。

tftp

tftp> プロンプトが表示されます。このプロンプトの後ろに status サブコマンドを入力します。

以下のようなメッセージが画面に表示されます。

Not connected.
Mode: netascii   Verbose: off   Tracing: off
Max-timeout: 25 seconds
tftp> _

tftp> プロンプトの後に、connect サブコマンドと、接続したいリモート・システムの名前を入力します。

tftp>  connect host1

tftp>プロンプトが表示され、host1 に接続したことを示します。tftp>プロンプトに続けて、get サブコマンドを入力して、リモート・ホストからローカル・ホストにファイル update を転送します。

get /home/alice/update update 

リモート・ホスト上の /home/alice ディレクトリーには、他のユーザーに対する読み取り許可が設定されていなければなりません。host1 からの /home/alice/update ファイルは、ローカル・システムの update ファイルに転送されています。この例では、ユーザーは host1 に接続され、update ファイルは host1 からローカル・ホストへ転送されます。

tftp コマンドのコマンド・ライン形式の使用法

  1. リモート・ホストからテキスト・ファイルをコピーしてローカル・ファイルに書き込むには、以下のように入力します。
    tftp  -g newsched host1 /home/john/schedule
    $ _
    この例では、/home/john/schedule ファイルはリモート・ホスト host1 からコピーされ、ローカル・ファイル newsched に書き込まれます。
  2. リモート・ホストからファイルをコピーし、 その出力をローカル・ホストの標準出力にリダイレクトするには、 以下のように入力します。
    tftp  -g - host3 /etc/hosts
    コピーに成功すると、以下のような情報が画面に表示されます。
    192.100.13.3 nameserver
    192.100.13.3 host2
    192.100.13.5 host1
    192.100.13.7 host3
    192.100.13.3 timeserver
    Received 128 bytes in 0.4 seconds
    $ _
    この例では、リモート・ホスト host3 からの /etc/hosts ファイルがコピーされ、出力がローカル・ホストの標準出力にリダイレクトされています。
  3. リモート・ホストからファイルをコピーし、grep コマンドにパイプ接続して、ローカル・ファイルに書き込むには、以下のように入力します。
    utftp  -g - host1 /home/john/schedule | grep Jones > jones.todo
    $ _
    この例では、/home/john/schedule ファイルがリモート・ホスト host1 からコピーされています。このファイルは grep コマンドにパイプ接続され、ローカル・ファイル jones.todo に書き込まれます。
  4. ファイルを別のシステムにコピーするには、以下のように入力します。
    tftp  -p /home/jeanne/test host2 /tmp/test
    コピーに成功すると、以下のような情報が画面に表示されます。
    Sent 94146 bytes in 6.7 seconds
    この例では、/home/jeanne/test ファイルがリモート・ホスト host2 上の /tmp ディレクトリーに送られています。
  5. 別のシステムにバイナリー・ファイルをコピーするには、以下のように入力します。
    tftp  -p core host3 /tmp/core image
    コピーに成功すると、以下のような情報が画面に表示されます。
    Sent 309295 bytes in 15 seconds
    この例では、現行ディレクトリーからのバイナリー・ファイル core がリモート・ホスト host3 上の /tmp ディレクトリーに送られました。

ファイル

項目 説明
/etc/tftpaccess.ctl ファイルとディレクトリーへのアクセスを許可または禁止します。