FTP(1)

名称
ftp - ARPANET ファイル転送プログラム

書式
ftp [-a] [-d] [-e] [-g] [-i] [-n] [-p] [-P port] [-t] [-v] [-V] [host [port]] ftp ftp://[user:password@]host[:port]/file[/] ftp http://host[:port]/file ftp host:[/path/]file[/]

解説
ftp は、 ARPANET 標準のファイル転送プロトコルを利用するためのユーザインタフェースです。 このコマンドを利用すれば、ネットワークを介して接続されているコンピュータ間で ファイルの送受信ができます。

書式のうちの後者 3 つを利用すると、HTTP または FTP プロトコルを使ってファイルを カレントディレクトリにもってくることができます。 これは、スクリプト内で使う場合には理想的です。 詳細は、下記の AUTO-FETCHING FILES のセクションを参照してください。

オプションは、コマンドライン上で指定するか、 コマンドインタプリタで渡すことができます。

-a  通常のログイン手続きをバイパスし、匿名でログインします。

-d  デバッグモードを有効にします。

-e  コマンドライン編集機能を無効にします。

-g  ファイル名展開の機能を無効にします。

-i  複数のファイルの転送中に、確認のためのプロンプトを出さないようにします。

-n  ftp が最初に相手サーバへ接続する際に、 “auto-login” しないようにします。 auto-login が有効になっていると、 ftp は、ユーザのホームディレクトリ直下の .netrc (下記参照) ファイルをチェックし、そのリモートマシンのアカウントを記述してある エントリがあるかどうかを調べます。 エントリがない場合には、 ftp はリモートマシン用のログイン名 (デフォルトはローカルマシン上のユーザ名) を入力してもらうためのプロンプトを出力し、それから、もし必要であれば、 ログインするためのパスワードやアカウントを入力してもらうためのプロンプトを 出力します。

-p  コネクションのフィルタリングをしているファイアウォールの裏側から使うために、 passive モードの動作を有効にします。

-P port
    ポート番号を port にします。

-t  パケットのトレース機能を有効にします。

-v  verbose モードにします。入力が端末の場合にはこれがデフォルトです。 リモートサーバからのすべてのレスポンスと、 データ転送の統計情報を表示するようにします。

-V  入力が端末の場合のデフォルトである verbose モードを無効にします。

ftp は、通信相手をコマンドラインで指定することができます。 この場合、 ftp は指定したリモートマシン上の FTP サーバとの接続の確立を直ちに試みます。 それ以外の場合、 ftp はコマンドインタプリタを動作させ、ユーザからのコマンド入力待ち 状態になります。このとき ftp は、 ‘ftp>’ というプロンプトを出力します。 ftp は以下のコマンドを受け付けます:

! [command [args]]
    ローカルマシン上でシェルを起動します。 引数が指定された場合、最初の引数は直接実行するコマンドとし、 残りの引数はそのコマンドに対する引数となります。

$ macro-name [args]
    macdef コマンドで定義済みのマクロ macro-name を実行します。引数は展開されずにマクロに渡されます。

account [passwd]
    いったんログインに成功したユーザが、リモートシステム上の資源に アクセスするために追加して要求されるパスワードを入力します。 引数が指定されない場合、ユーザに対してアカウントパスワードの入力を促す プロンプトが表示されます。この場合、パスワードはエコーバックされません。

append local-file [remote-file]
    ローカルファイルをリモートマシン上のファイルに追加書き込みします。 remote-file を指定しなかった場合には、リモートファイルの名前を ntrans や nmap で変更したものをローカルファイル名として使います。 ファイル転送には、その時点での type, format, mode, structure の設定が用いられます。

ascii
    ファイル転送の type をネットワーク ASCII 形式にします。 これが、デフォルト時の設定です。

bell
    各ファイル転送コマンドの終了時にベルを鳴らすようにします。

binary
    バイナリイメージなどを転送するために、転送ファイルの type を BINARY 形式にします。

bye リモートサーバとの FTP セッションを終了し、 ftp を終了します。EOF を入力した場合も同様です。

case
    mget コマンドで連続してファイルを取得する場合の、リモートマシン上のファイル名の 大文字小文字の区別を指定します。 case が on の場合 (デフォルトでは off) には、リモートマシン上でファイル名が すべて大文字のファイルの名前が、ローカルマシンのディレクトリ上では 小文字に変換されます。

cd remote-directory
    リモートマシン上の作業ディレクトリを remote-directory へ変更します。

cdup
    リモートマシン上の作業ディレクトリをその 1 つ上に変更します。

chmod mode file-name
    リモートマシン上のファイル file-name の属性を、 mode で指定したものに変更します。

close
    リモートサーバとの FTP セッションを終了し、コマンドインタプリタまで戻ります。 定義済みマクロはすべて無効になります。

cr  ASCII 形式ファイルの転送を行う場合に、復帰コードの除去を行うか どうかを指定します。ASCII 形式のファイル転送時には、 復帰/改行 の 1 シーケンスでレコードが認識されます。 cr がオン (デフォルト) の場合には、改行コードのみでレコードを区切る UNIX に適合するように、復帰コードがそのシーケンスから削除されます。 non-UNIX のシステムのレコード中に単独の改行コードが含まれていることがあります。 ASCII 形式の転送が行われる場合、その改行は cr がオフの場合にのみレコードの区切り記号とは区別されます。

delete remote-file
    リモートマシン上のファイル remote-file を削除します。

debug [debug-value]
    デバッグモードを変更します。 省略可能である debug-value が指定されると、それがデバッグレベルとして設定されます。 デバッグモードが有効になると、 ftp はリモートマシンに送信した各コマンドを文字列 ‘-->’ に続けて表示します。

dir [remote-directory [local-file]]
    リモートマシン上のディレクトリの内容を表示します。 リストには、システム依存の情報が含まれます (何を含めるかはサーバが決定します)。 例えば、ほとんどの UNIX システムでは ‘ls -l’ コマンドの出力が表示されます (ls 参照)。 remote-directory が指定されなかった場合には現在の作業ディレクトリの内容が表示されます。 prompt が on だった場合は、 ftp は、本当に指定したファイルに dir の出力を書き出してよいかどうかを問い合わせます。 ローカルファイルの指定がないか、 local-file が ‘-’ の場合には、出力は端末に送られます。

disconnect
    close と同義です。

edit
    コマンドライン編集機能、および文脈依存のコマンド、ファイル名置換機能 の有効、無効を切替えます。 入力が端末の場合には自動的に有効になり、それ以外の場合には無効になります。

exit
    bye と同義です。

ftp host [port]
    open と同義です。

form format
    ファイル転送フォーマットを format と指定します。 デフォルトでは、フォーマットは file となります。

get remote-file [local-file]
    リモートマシン上のファイル remote-file を取得し、ローカルマシン上に格納します。ローカルファイル名が指定されない場合、 ローカルファイル名は、リモートマシン上の名前をその時点の case, ntrans, nmap の設定で変更したものになります。 ファイルの転送時にはその時点での type, form, mode, structure の設定が用いられます。

gate [host [port]]
    gate-ftp モードの切替えを行います。 このコマンドは、gate-ftp サーバが設定 (ユーザが明示的に指定するか、環境変数 FTPSERVER から取得) されていない場合には許可されません。 host が指定されている場合には、gate-ftp モードが有効になり、 gate-ftp サーバは host に設定されます。 port も指定されている場合には、そのポートを gate-ftp サーバに接続するための ポートとして使います。

glob
    mdelete, mget, mput を行う場合のファイル名の展開の許可/禁止を切り替えます。 glob で展開が禁止された場合には、ファイル名引数は文字通りに解釈され、 展開されません。 mput の場合の展開規則は、 csh のファイル名展開規則と同様に行われます。 mdelete と mget の場合には、各々のリモートファイル名はリモートマシン上で別々に展開され、 リストはマージされません。 ディレクトリ名の展開は、普通のファイル名の展開と異なることがあります。 結果はリモートの OS と FTP サーバに依存しており、これは ‘mls remote-files -’ を実行することであらかじめ知ることができます。 注意: mget と mput はディレクトリの部分木全体を転送するためののもではありません。 この場合はその部分木の tar(1) アーカイブを (binary モードで) 転送することで実現できます。

hash [size]
    各データブロックを受信するごとにハッシュサイン (``#'') を出力するかどうか を切り替えます。デフォルトでは、1 データブロックのサイズは 1024byte です。 これは size にバイト単位で指定することで変更が可能です。

help [command]
    引数 command で指定したコマンドのヘルプメッセージを出力します。 引数が与えられない場合、 ftp は、利用可能なコマンドの一覧を出力します。

idle [seconds]
    リモートサーバ上のアイドルタイマを seconds 秒に設定します。 seconds が指定されなかった場合には、現在のアイドルタイマの値が表示されます。

lcd [directory]
    ローカルマシン上の作業ディレクトリを変更します。 directory が指定されなかった場合には、ユーザのホームディレクトリに移動します。

less file
    page と同等です。

lpwd
    ローカルマシン上の作業ディレクトリを表示します。

ls [remote-directory [local-file]]
    リモートマシン上のディレクトリの内容一覧を表示します。 remote-directory が指定されなかった場合には現在の作業ディレクトリの内容が表示されます。 prompt が on だった場合は、 ftp は、本当に指定したファイルに dir の出力を書き出してよいかどうかを問い合わせます。 ローカルファイルの指定がないか、 local-file が ‘-’ の場合には、出力は端末に送られます。

macdef macro-name
    マクロを定義します。 後続の行が、マクロ macro-name として保存されます。 空行 (ファイル内で連続した改行文字を発見するか、端末から連続した復帰文字を 発見した場合) により、マクロの入力モードが終了します。 定義可能なマクロの最大個数は 16 で、定義した全マクロで 4096 文字以内という 制限があります。マクロは close コマンドが実行されるまで保持されます。 マクロプロセッサは `$' と `\' を特別な文字として解釈します。 1 つ以上の数字が続く `$' は、マクロを呼び出したコマンドラインの 対応する引数によって置き換えられます。 後ろに `i' がついた `$' は、実行中のマクロがループすることを マクロプロセッサに対して知らせるためのものです。 最初のパスで `$i' はマクロを呼び出したコマンドラインの最初の引数で 置き換えられ、2 回目のパスで 2 つ目の引数に置き換えられるという動作を 繰り返します。 任意の文字の前に `\' がある場合は、その文字そのものに置き換えられます。 `$' を特別扱いしたくない場合などに使ってください。

mdelete [remote-files]
    リモートマシン上の remote-files を削除します。

mdir remote-files local-file
    複数のリモートファイルが指定出来る点を除けば dir と同義です。 prompt が on だった場合は、 ftp は、本当に指定したファイルに dir の出力を書き出してよいかどうかを問い合わせます。

mget remote-files
    リモートマシン上で remote-files のファイル名を展開し、展開後の各ファイル名のファイルに対して get を実行します。 ファイル名展開に関する詳細は glob の解説を参照してください。 生成されたファイル名はその後で case, ntrans, nmap の設定に基づいて処理されます。 ファイルはローカル側の作業ディレクトリに転送されます。 これは ‘lcd directory’ で変更可能です。 ‘! mkdir directory’ でローカル側に新しいディレクトリを作ることができます。

mkdir directory-name
    リモートマシン上にディレクトリを作成します。

mls remote-files local-file
    複数のリモートファイル名を指定できる点と、 local-file を必ず指定しなければならない点を除くと nlist と同様です。 prompt が on だった場合は、 ftp は、本当に最後の引数で指定したものが mls の出力を書き出すローカルファイルなのかどうかを問い合わせます。

mode [mode-name]
    ファイル転送モード mode を mode-name で指定したものに変更します。 デフォルトのモードは stream です。

modtime file-name
    リモートマシン上の指定ファイルの最終更新日付を参照します。

more file
    page と同等です。

mput local-files
    引数として与えられたローカルファイル名のワイルドカードを展開し、 展開後の各ファイル名のファイルに対して put を実行します。 ファイル名の展開の詳細については glob を参照してください。 生成されたファイル名はその後で ntrans, nmap の設定に基づいて処理されます。

msend local-files
    mput と同等です。

newer file-name
    リモートマシンのファイルとローカルマシンのファイルを比較して、 リモートマシンのファイルの方が新しい場合にのみそのファイルを取得します。 ローカルマシン上にそのファイルがない場合には、リモートファイルの方が 新しい とみなされます。その他は get と同じです。

nlist [remote-directory [local-file]]
    ls と同等です。

nmap [inpattern outpattern]
    ファイル名のマッピング機能を設定したり解除したりします。 引数がない場合にはマッピング機能が解除されます。 引数がある場合、 mput または put コマンドをリモート側のターゲットファイル名を指定せずに実行した場合に、 リモートファイル名がマップされます。 引数がある場合、 mget または get コマンドをローカル側のターゲットファイル名を指定せずに実行した場合に、 ローカルファイル名がマップされます。 このコマンドは、 ファイル名規則や慣習の異なる 非-UNIX のリモートマシンに接続する場合に便利です。 マッピングは inpattern および outpattern で設定されたパターンに従って行われます。 [Inpattern] は入力ファイル名のテンプレートです (すでに ntrans および case の設定が適用されているかもしれません)。 inpattern に `$1', `$2', ..., `$9' の文字列を含めることで、 変数を用いたテンプレートも使用することができます。 `$' を特別扱いしたくない場合には `\' を使ってください。 他の文字はそのままその文字として扱われ、 nmap [inpattern] の変数を決めるために用いられます。 例えば、 inpattern として $1.$2 が、 リモートファイルの名前として "mydata.data" が与えられた場合、 $1 は "mydata" となり、$2 は "data" という値になります。 outpattern は最終的にマップされるファイル名を決定します。 `$1', `$2', ...., `$9' のシーケンスは inpattern のテンプレートから生成された値に置き換えられます。 シーケンス `$0' はオリジナルのファイル名に置き換えられます。 さらに、 ‘[seq1, seq2]’ は seq1 がヌル文字列でない場合には [seq1] に、そうでない場合には seq2 に置き換えられます。例えば、コマンド

        nmap $1.$2.$3 [$1,$2].[$2,file]

    は、入力ファイル名が "myfile.data" や "myfile.data.old" の場合には 出力ファイル名は "myfile.data" になり、 入力ファイル名が "myfile" の場合には "myfile.file" になり、 入力ファイル名が ".myfile" の場合には "myfile.myfile" になります。 例えば、`nmap $1 sed "s/ *$//" > $1' のように、 outpattern にはスペースが入っていても構いません。 文字 `$', '[', ']', `,' を特別扱いしたくない場合には `\' を使ってください。

ntrans [inchars [outchars]]
    ファイル名の文字変換機能を設定したり解除したりします。 引数がない場合には文字変換機能が解除されます。 引数がある場合、 mput または put コマンドをリモート側のターゲットファイル名を指定せずに実行した場合に、 リモートファイル名内の文字が変換されます。 引数がある場合、 mget または get コマンドをローカル側のターゲットファイル名を指定せずに実行した場合に、 ローカルファイル名内の文字が変換されます。 このコマンドは、 ファイル名規則や慣習の異なる 非-UNIX のリモートマシンに接続する場合に便利です。 ファイル名中の inchars にマッチする文字が、対応する outchars の文字に置き換えられます。 inchars 内の文字のうち outchars の長さよりも長い位置にある文字は、ファイル名から削除されます。

open host [port]
    指定した host の FTP サーバとのコネクションを確立します。 ポート番号 port も指定することができ、この場合、 ftp は指定したポート番号を用いて FTP サーバとのコネクションの確立を行います。 auto-login オプションがオンになっている場合 (デフォルト) には、 ftp は FTP サーバに自動的にログインしようとします (下記参照)。

page file
    file を取得し、 PAGER (デフォルトは less(1)) に設定されたプログラムを用いてその内容を表示します。

passive
    パッシブモードの on/off の切り替えを行います。 パッシブモードが on になっている場合には (デフォルトでは off)、 ftp クライアントはすべてのデータコネクション確立時に、 通常の PORT の代りに PASV を送信します。 PASV コマンドは、リモートサーバがデータコネクション用のポートをオープンし、その ポートアドレスを返してくることを要求するコマンドです。 リモートサーバはそのポートを LISTEN し、ftp クライアントが そのポートに対して接続を行うのを待ちます。 PORT コマンドを用いた場合には、クライアントはリモートサーバに対し、クライアントが LISTEN しているポートアドレスを通知します。そしてサーバからコネクションを 確立しにくるのを待ちます。パッシブモードは、方向によりトラフィックを制御する ゲートウェイを介してデータ転送を行う場合に有用です (ftp サーバが RFC 1123 で規定されている PASV コマンドをサポートしている必要があることに注意してください。 サポートしていないサーバもあります)。

preserve
    ファイルの更新時刻を保存するかどうかを切替えます。

progress
    転送の進み具合を表すバーの表示を切替えます。 local-file が ‘-’ の場合や、コマンドが ‘|’ で始まっている場合にはこの機能は無効になります。 詳細は FILE NAMING CONVENTIONS を参照してください。

prompt
    対話的プロンプトモードを切り替えます。 このモードは複数ファイル転送時に起こり、 転送するファイルを選択できるようになります。 この機能を off にすると (デフォルトは on)、 mget や mput で指定したファイルはすべて転送され、 mdelete で指定したファイルはすべて削除されます。

    プロンプトが on になっている時、プロンプトで以下のコマンドが入力可能です:

    n   そのファイルは転送しません。

    a   現在のファイルに対して ‘yes’ と答え、現在のコマンドの残りのファイル全部についても自動的に ‘yes’ と答えます。

    p   現在のファイルに対して ‘yes’ と答え、プロンプトモードを off (“prompt off” を与えたように) にします。

    その他の応答は現在のファイルに対して ‘yes’ と答えたことになります。

proxy ftp-command
    ftp コマンドを 2 次制御接続上で実行します。 本コマンドを用いることで、同時に 2 つのリモートマシンとコネクションを確立し、 ファイル転送を行うようにすることができるようになります。 最初の proxy コマンドは、 open, コマンドである必要があります。これは、2 次的な制御コネクションを確立するため に必要な操作です。 "proxy ?" とコマンドを実行することで、2 次接続下で使用可能なコマンド一覧が 表示されます。 以下のコマンドは先頭に proxy をつけると通常とは異なった動作をします。 open は、自動ログイン処理中には新しいマクロの定義をしません。 close はマクロの削除を行いません。 get と mget は 1 次接続のホストから 2 次接続のホストにファイルを転送し、 put, mput, append は 2 次接続のホストから 1 次接続のホストにファイルを転送します。 第 3 者のファイル転送は 2 次接続上のサーバが ftp プロトコルの PASV コマンドをサポートしているかに依存しています。

put local-file [remote-file]
    ローカルマシン上の指定のファイルをリモートマシンに転送します。 remote-file が指定されなかった場合には、リモートファイルの名前はローカルファイル名に ntrans や nmap の設定を適用したものになります。 ファイル転送には type, format, mode, structure のその時点での設定が用いられます。

pwd 現在のリモートマシン上での作業ディレクトリを表示します。

quit
    bye と同じです。

quote arg1 arg2 ...
    引数で指定した文字列をそのままリモート FTP サーバに送信します。

recv remote-file [local-file]
    get と同じです。

reget remote-file [local-file]
    get と似ていますが、 local-file が存在してかつ remote-file よりサイズが小さい場合には、 local-file は、リモートファイルを部分的に転送したものであるとみなし、 失敗した部分から続きをコピーする点が異なります。 このコマンドは、大きなファイルの転送中にコネクションが切断されてしまった 場合の続きを受信しなおす場合などに有用です。

remotehelp [command-name]
    リモート FTP サーバにヘルプメッセージを要求します。 command-name が指定された場合にはこれもサーバに送られます。

rstatus [file-name]
    引数がない場合には、リモートマシンのステータスが表示されます。 file-name が指定されている場合には、リモートマシン上の file-name のステータスが表示されます。

rename [from [to]]
    リモートマシン上のファイル from を、 to というファイル名にリネームします。

reset
    リプライキューをクリアします。 本コマンドは、コマンド/リプライのシーケンスの再同期をとるのに使われます。 リモートサーバとの間で ftp プロトコル上の障害が発生した場合に 再同期が必要になるかもしれません。

restart marker
    直後の get や put を、指定した marker 位置から再開します。 UNIX システムにおいては、marker はたいていファイルのバイトオフセットです。

rmdir directory-name
    リモートマシン上のディレクトリを削除します。

runique
    ローカルマシンにストアされるファイルに対してユニークな名前をつけるかどうか を切り替えます。 get や mget コマンドでリモートファイルと同じ名前のファイルがローカル側にあった場合、 その名前の後ろに ".1" が付加されます。その名前が既に存在する場合には、 ".2" がオリジナルのファイル名に付加されます。この処理は最高 ".99" 回 まで繰り返され、これでも駄目な場合にはエラーメッセージが表示されて 転送は行われません。 生成されたユニークなファイル名は報告されます。 runique はシェルコマンドから生成されたローカルファイルについては効果がありません (下記参照)。デフォルトは off です。

send local-file [remote-file]
    put と同じです。

sendport
    PORT コマンドを利用するかどうかを切り替えます。 デフォルトでは、 ftp は各データコネクションを確立する時に PORT コマンドを試みます。 PORT を使うことで、複数のファイルを転送する場合の遅延を少なくすることが出来ます。 PORT コマンドが失敗した場合、 ftp はデフォルトのデータポートを使用します。 PORT コマンドが無効の場合は、各データ転送時に PORT コマンドは使われません。 このコマンドは、 PORT コマンドは無視するが受け入れたという返事を返すような不正な FTP システムに対して有効です。

site arg1 arg2 ...
    引数で指定した文字列を SITE コマンドとして、そのまま FTP サーバに送信します。

size file-name
    リモートマシン上の file-name のファイルのサイズを表示します。

status
    ftp の現在のステータスを表示します。

struct [struct-name]
    ファイル転送の structure を struct-name に設定します。 デフォルトでは stream に設定されています。

sunique
    リモートマシン上に転送するファイルのファイル名をユニークな名前と するかどうかを切り替えます。この機能を使うためには、 リモートの ftp サーバは ftp プロトコルの STOU をサポートしていなければなりません。 リモートサーバがユニークな名前を返します。 デフォルトではこの機能は off です。

system
    リモートマシンで稼働している OS の種類を表示します。

tenex
    TENEX マシンと通信するために必要なファイル転送モードを設定します。

trace
    パケットトレースをするかしないか切り替えます。

type [type-name]
    ファイル転送の type を type-name に変更します。引数が指定されなかった場合には、現在のファイル転送タイプを 表示します。 デフォルトタイプはネットワーク ASCII です。

umask [newmask]
    デフォルトの umask 値を設定します。 newmask で指定した値に変更します。 newmask が設定されていない場合、現在の umask 値を表示します。

    user user-name [password [account]] ユーザをリモート FTP サーバに認識させます。 password が指定されておらず、なおかつサーバが要求している場合には、 ftp は (ローカルエコーをオフにしてから) ユーザにパスワードの問い合わせを行います。 account フィールドが指定されず、なおかつ FTP サーバがそのフィールドを要求している場合には、ユーザに対して問い合わせが行われ ます。 account フィールドが指定され、リモートサーバがログイン時にこれを必要としない場合には、 ログインシーケンスが完了した後に、account コマンドがリモートサーバに渡され ます。 オートログイン を無効にした状態で ftp が起動された場合には、 FTP サーバへの最初のコネクション上で自動的に行われます。

verbose
    バーボーズモードの切り替えを行います。バーボーズモードでは、 FTP サーバからの全ての応答が表示されます。さらに、バーボーズがオンの時には、 ファイル転送が完了するとその転送速度の統計が報告されます。 デフォルトはオンです。

? [command]
    help コマンドと同じです。

コマンド引数にスペースを含む場合は、`"' マークで括ってください。

トグル動作をするコマンドは、引数に明示的に on または off を指定することで、適切な値に設定することができます。

もし、転送作業中に ftp がシグナル SIGINFO を受信した場合には (stty(1) の引数 “status” を参照してください)、現在の転送レートが標準エラー出力に出力されます。 このフォーマットは通常のファイル転送完了時のものと同じです。

ファイルの自動取得
ftp のこのバージョンでは、標準コマンドに加えて、ファイルの自動取得 (auto-fetch) 機能をサポートしています。 auto-fetch を有効にするには、単にホスト名/ファイルのリストをコマンドラインで 渡すだけです。

auto-fetch の各要素は以下のフォーマットに従います:

host:/file
    “古典的な” ftp フォーマット

ftp://[user:password@]host[:port]/file
    ftp の URL で、 ftp_proxy が定義されていない場合には ftp プロトコルで取ってきます。 定義されている場合には、 ftp_proxy で定義されたプロキシを介して http で転送を行います。 user:password@ が指定され、 ftp_proxy が定義されていない場合には、ユーザ user でパスワード password を使ってログインします。

http://host[:port]/file
    HTTP の URLで、http プロトコルで取ってきます。 http_proxy が定義されている場合には、HTTP プロキシサーバに対してその URL が渡されます。

古典的フォーマットまたは ftp URL フォーマットの最後が ‘/’ で終っていれば、 ftp はそのサイトに接続してから、指定したパスに cd し、ユーザからその後の入力を受け付けるためにインタラクティブモードに入ります。

同一ホストの ftp エレメントを連続して auto-fetch する場合、 その転送の間は同じコネクションを維持し、コネクションの確立や解放のオーバヘッド を減らします。

file にファイル名展開文字が含まれていてかつファイル名展開が有効になっていれば (glob を参照してください)、 mget file と同じ動作が起こります。

file のディレクトリ名部分にファイル名展開文字が含まれていなければ、 file を basename(1) で処理したのと同等の名前でカレントディレクトリに保存されます。 そうでなければ、リモート側の名前をそのままローカル側で使います。

ファイル転送のアボート
ファイル転送をアボートさせるには、端末のインタラプトキー (通常は Ctrl-C) を使ってください。 データ送信中の場合は、ただちに停止します。 データ受信中の場合は、ftp プロトコルの ABOR コマンドがリモートサーバに送られることでサーバからのデータ送信が止まり、 それ以降の受信データは捨てられます。 これが完了するのにかかる時間は、サーバが ABOR 処理をサポートしているかどうかに依存します。 リモートサーバが ABOR コマンドをサポートしていない場合には、 要求したファイルをの転送をリモートサーバが完了させるまでは ‘ftp>’ プロンプトは出ません。

ftp のローカルな処理が完了し、リモートサーバからの応答待ちの状態では、 端末での割り込みキー入力は無視されます。 この状態で長時間の待ちが起こる場合には、上記の ABOR 処理によるものか、 リモートサーバで予期せぬ動作 (ftp プロトコル違反を含む) が起こった可能性が あります。リモートサーバの予期せぬ動作からこの待ちが起こった場合には、 ローカルの ftp プログラムを手動で終了させなければなりません。

ファイル名の規則
ftp コマンドの引数として指定されたファイル名は、以下の規則で処理されます。

1.  ファイル名として ‘-’ が指定された場合、入力ファイル名の場合には標準入力 stdin が、出力ファイル名の場合には標準出力 stdout が使用されます。

2.  ファイル名の先頭の文字が ‘|’ の場合には、その後の引数はすべてシェルコマンドとして解釈されます。 ftp はその引数を使って popen(3) で shell を fork し、stdout(stdin) から読み(書き)ます。 シェルコマンドに空白を含める場合には、その引数はクォートしなければなりません (例: " ls -lt")。 このメカニズムの特に有用な例としては dir |more があります。

3.  上記のチェックにひっかからず、``globbing'' が許可されている場合、 ローカルファイル名は、 csh(1) のファイル名展開規則にしたがって展開されます (glob コマンド参照)。 ただし、 ftp コマンドが 1 つのファイル名しか必要としない場合 (例えば put )、ファイル名が展開された後の最初のファイル名だけが使用されます。

4.  mget コマンドと get コマンドでローカルファイル名が指定されない場合、ローカルファイル名は リモートファイル名と同一になります。ただし、これらのファイル名は、 case, ntrans, nmap の設定によって変わることもあります。 その後、 runique が on になっている場合には、ファイル名が変わることがあります。

5.  mput コマンドと put コマンドでリモートファイル名が指定されない場合、リモートファイル名は ローカルファイル名と同一になります。ただし、これらのファイル名は、 ntrans nmap の設定によって変わることもあります。その後、 sunique が設定されている場合には、リモートサーバによってファイル名が変えられることが あります。

ファイル転送パラメータ
FTP の仕様では、ファイル転送に影響を及ぼす多くのパラメータが規定されています。 type は、ascii, image (binary), ebcdic, local byte size (PDP-10's および PDP-20's でよく使われます) のいずれかが指定可能です。 ftp では、ファイル転送タイプに ascii と image を指定可能なのに加えて、 tenex モードの転送を指定することにより、ローカルバイトサイズ 8 を指定することが 可能です。

ftp では、他に mode, form, struct のファイル転送パラメータのデフォルト値だけをサポートしています。

.netrc ファイル
.netrc ファイルには、auto-login 処理で使うログイン情報と初期設定情報を記述します。 これは、ユーザのホームディレクトリに置いておきます。 以下の予約語が解釈され、これらは、スペース、タブ、改行で分割できます。

machine name
    リモートマシン name を指定します。 auto-login 処理は、 .netrc ファイル中に machine トークン (予約語) があるかどうか探し、そのエントリが ftp のコマンドラインもしくは、 open コマンドの引数と一致するかどうかチェックします。 一致するエントリがあった場合、その後の .netrc トークンが処理され、その処理はファイルの最後尾までいきつくか、他の machine トークンか default トークンに出くわすまで続きます。

default
    どんな名前にでもマッチする点以外は machine name と同等です。 default トークンは、 .netrc ファイル中 1 エントリだけが許され、しかも他の全てのエントリより後ろでなければ なりません。 通常は、

        default login anonymous password user@site

    のように使い、 .netrc ファイルにないマシンに自動的に anonymous FTP ログインできるようになります。 -n フラグを指定して auto-login 処理を無効にすると、この設定も無効になります。

login name
    リモートマシンでのユーザ名を指定します。 このトークンがある場合、auto-login 処理は name をログイン名としてログインしようとします。

password string
    パスワードを指定します。このトークンがある場合、auto-login 処理で リモートマシンがパスワードを要求してきた時に、この文字列を使います。 .netrc ファイル内の anonymous 以外のユーザ用にこのエントリがあり、なおかつ .netrc の属性がそのユーザ以外が読める状態である場合には、 ftp は auto-login 処理を中断します。

account string
    追加のアカウントパスワードを登録します。 リモートサーバが追加のアカウントパスワードを要求してきた場合に、この文字列を 使います。そうでない場合には、auto-login 処理時に ACCT コマンドを発行します。

macdef name
    マクロを定義します。このトークンは macdef コマンドと同じように機能します。指定された名前でマクロが定義され、 .netrc ファイルの次の行から空行 (連続する空行) が現れるまでをマクロの内容とします。 名前が init のマクロが定義されていると、auto-login 処理の最後のステップでそのマクロが 自動的に実行されます。

コマンドライン編集
ftp は editline(3) ライブラリを使った対話的コマンドライン編集をサポートしています。これは edit コマンドで有効にすることができ、入力が tty の場合にはデフォルトで 有効になっています。以前の行は矢印キーで呼び出したり編集したりでき、 同様に GNU Emacs スタイルのキー入力でも編集できます。

editline(3) ライブラリは .editrc ファイルで設定変更できます。 詳細は editrc(5) を参照してください。

ftp では、文脈依存のコマンドやファイル名補完 (リモートファイルの補完も含む) を提供するためのキーバインドを追加してあります。 これを使うためには、 editline(3) コマンド ftp-complete にキーをバインドしてください。デフォルトでは TAB がバインドされています。

環境変数
ftp は、以下の環境変数を使用します。

FTPSERVER
    gate が有効になっている場合に gate-ftp サーバとして利用するホストです。

FTPSERVERPORT
    gate が有効になっている場合に、gate-ftp サーバに接続する時に使うポートです。 デフォルトでは “ftpgate/tcp” を getservbyname() で調べて返ってきたポートが使われます。

HOME
    .netrc ファイルのデフォルトの置き場所を示します。

PAGER
    page がファイルを表示する時に使います。

SHELL
    デフォルトシェルです。

ftp_proxy
    FTP URL によるリクエストを行う時に使う FTP proxy の URL です (指定されない場合には、通常の ftp プロトコルが用いられます)。

http_proxy
    HTTP URL によるリクエストを行う時に使う HTTP proxy の URL です。

関連項目
getservbyname(3), editrc(5), services(5), ftpd(8)

歴史
ftp コマンドは 4.2BSD から登場しました。

コマンドライン編集、文脈依存コマンド、ファイル名補完、 進行状況をリアルタイムに表示する棒グラフ、ファイルの自動取得、 ftp URL と http URL、更新時刻保存などのさまざまな機能が NetBSD 1.3 で、Luke Mewburn によって実装されました。 Jason Thorpe が実装のアシスタントをしました。

バグ
多くのコマンドにおいて、そのコマンドが正しく動作するかどうかは、 リモートサーバが適切に動作するかどうかに依存します。

4.2BSD の ascii モードでの転送時のキャリッジリターン処理の間違いは修正済みです。 この修正の結果として、 4.2BSD サーバとの間でバイナリファイルを ascii モードで転送した場合には、 正しくない転送となります。 この問題を回避するためには、バイナリモードを用いてファイル転送をしてください。