o catch up fetch.1 rev. 1.33.2.1.

This commit is contained in:
Kazuo Horikawa 2000-07-16 23:10:05 +00:00
parent f516af4dd2
commit f9b10a2ab7
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=7646

View file

@ -1,58 +1,71 @@
.\" %FreeBSD: src/usr.bin/fetch/fetch.1,v 1.33 2000/03/01 12:19:38 sheldonh Exp %
.\"-
.\" Copyright (c) 2000 Dag-Erling Co<43>an Smgrav
.\" All rights reserved.
.\" Portions Copyright (c) 1999 Massachusetts Institute of Technology; used
.\" by permission.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer
.\" in this position and unchanged.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. The name of the author may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" %FreeBSD: src/usr.bin/fetch/fetch.1,v 1.33.2.1 2000/07/16 01:16:46 des Exp %
.\"
.\" jpman %Id: fetch.1,v 1.4 1997/08/15 06:31:28 horikawa Stab %
.Dd June 28, 2000
.Dd February 22, 1999
.Dt FETCH 1
.Os FreeBSD 4.0
.Os
.Sh 名称
.Nm fetch
.Nd URL(Uniform Resource Locator)形式でのファイルの取得
.Nd URL (Uniform Resource Locator) 形式でのファイルの取得
.Sh 書式
.Nm fetch
.Op Fl AFMPablmnpqrtv
.Op Fl S Ar size
.Op Fl T Ar timeout
.Op Fl o Ar file
.Ar URL
.Op Ar ...
.Nm fetch
.Op Fl FMPRlmnpqrv
.Op Fl S Ar size
.Nm
.Op Fl 146AFHMPRadlmnpqrsv
.Op Fl B Ar bytes
.Op Fl S Ar bytes
.Op Fl T Ar seconds
.Op Fl o Ar file
.Op Fl w Ar seconds
.Op Fl h Ar host
.Op Fl c Ar dir
.Fl f Ar file
.Fl h Ar host
.Op Fl f Ar file
.Op Ar URL ...
.Sh 解説
.Nm fetch
は、
.Tn FTP
もしくは
.Tn HTTP
プロトコルを使ってネットワークの遠隔サイトから、ファイルの転送を
行います。コマンドの最初の書式の
.Ar URL
は、
.Li http://site.domain/path/to/the/file
もしくは、
.Li ftp://site.domain/path/to/the/file
の形式をしています。
複製もしくはリンクされる (以下の
.Fl l
フラグを参照) ローカルでのファイル名を指定するために、
.Em file:/path/to/the/file
という URL 形式が使えます。後述の URL 文法を参照してください。
.Pp
コマンドの 2 番目の形式は、
ファイル名と遠隔ホスト名を
.Fl h
.Fl f
フラグで指定して、
.Tn FTP
プロトコルを使ってファイルを取得するために使われます。
.Nm
.Xr fetch 3
ライブラリへのコマンド行インタフェースを提供します。
目的は、コマンド行の URL (複数可) に示されるファイル (複数可)
を取得することです。
.Pp
以下のオプションが使用可能です。
.Bl -tag -width Fl
.It Fl \&1
最初にファイルの取得に成功したときに、終了値 0 を返して停止します。
.It Fl 4
.Nm
が IPv4 アドレスのみを使用することを強制します。
.It Fl 6
が IPv6 アドレスのみを使用することを強制します。
.It Fl A
``一時的な'' (302) リダイレクトを自動的には追跡しません。
要求したオブジェクトが存在しない場合に、
@ -60,43 +73,49 @@
壊れたウェブサイトが存在します。
.It Fl a
ソフト上での失敗の場合に自動的に転送を再試行します。
.It Fl b
.Tn TCP
プロトコルを正しく実装していない
.Tn HTTP
サーバのバグ対応を行います。
.It Fl B Ar bytes
読み込みバッファの大きさをバイト単位で指定します。
デフォルトは 4096 バイトです。
バッファの大きさを小さくしようとしても、黙って無視されます。
実際に実行された読み込み回数は、冗長レベル 2 以上で報告されます (
.Fl v
フラグを参照してください)。
.It Fl c Ar dir
遠隔ホストの
.Ar dir
ディレクトリのファイルを取得します。
本オプションは、価値が低下しており、後方互換性のためだけに提供されています。
.It Fl d
プロキシが設定されていても、直接接続します。
.It Fl F
ローカルファイルとリモートファイルの時刻確認を行わずに、
強制的に再開させます。
ローカルファイルの修正時刻が更新されたものの
リモートファイルが同一のままであることを確信している場合に、
.Fl r
と共に使用して、特定ファイルの転送を再開してください。
これによって、最初から転送し直すことを防げます。
フラグと組み合わせると、
ローカルファイルとリモートファイルの修正時刻が異なったとしても、
強制的に再開します。
.It Fl f Ar file
遠隔ホストの
.Ar file
という名前のファイルを取得します
本オプションは、価値が低下しており、後方互換性のためだけに提供されています。
.It Fl H
パッシブな FTP を使用しているとき、データ接続用に高位ポートを割り当てます。
どのポート範囲が対応するかの指定方法の詳細については、
.Xr ip 4
を参照してください。
.It Fl h Ar host
ホスト名が
.Ar host
にあるファイルを取得します。
本オプションは、価値が低下しており、後方互換性のためだけに提供されています。
.It Fl l
目標が
.Ar file:/
形式のURLだった場合、目標を複製しようとするのではなく、
目標が、ファイル形式の URL の場合、目標を複製しようとするのではなく、
リンクを作成します。
.It Fl M
.It Fl m
ミラーモード: ファイルの変更時間を遠隔ホストの変更時間と同じに
設定します。ローカルホストにファイルが既に存在しサイズと
変更時間が同じである場合、転送は行われません。
ミラーモード: ローカルホストにファイルが既に存在し、サイズと
変更時間がリモートファイル同じである場合、転送は行われません。
.It Fl n
転送されるファイルの変更時間を保存せず、現在の時間を使います
転送されるファイルの変更時間を保存しません
.It Fl o Ar file
出力ファイル名を
.Ar file
@ -110,269 +129,81 @@
.It Fl P
.It Fl p
.Tn FTP
プロトコルをパッシブモードで使います。これは、防火壁 (firewall)
を跨いだ場合に有効です。
プロトコルをパッシブモードで使います。
これは、入力接続をブロックする防火壁 (firewall) の背後にいる場合に有用です。
FTP URL を取得するときに
.Nm
がハングするように見える場合に使用してみてください。
.It Fl q
沈黙モード。端末に転送の進行状態を報告しません。
沈黙モード。
冗長レベルを 0 に設定することで動作します。
.Fl v
オプションを参照してください。
.It Fl R
転送が失敗もしくは不完全であった時でさえ、与えられたファイル名は
``大事にされ''、どんな状況下でもファイル名は消去されません.
与えられたファイル名は大事にされ、どんな状況下でもファイル名は消去されません。
それは、転送が失敗もしくは不完全であった時でさえさえ、あてはまります。
.It Fl r
以前に中断された転送を再開します。
.It Fl S Ar bytes
.Tn FTP
もしくは
.Tn HTTP
のサーバに対してファイルサイズを報告するよう要求し、
本オプションにより指定される値と比較します。
サーバが報告するファイルサイズが、指定値に合致することを要求します。
合致しない場合、メッセージが表示され、ファイルは取得されません。
サーバがファイルサイズの報告をサポートしない場合、
本オプションは無視され、ともかくファイルは取得されます。
前もってファイルサイズが分かる場合、
不完全なファイルもしくは誤ったバージョンのファイルを
.Nm
がダウンロードするのを防ぐために有用です。
サーバがファイルサイズの報告をサポートしていない場合、
本オプションは無視され、無条件にファイルが取得されます。
.It Fl s
サーバにファイルサイズ (バイト) を尋ね、これを標準出力に出力します。
実際のファイル取得は行いません。
各要求ファイルごとに、取得せずに、バイト数単位の大きさを表示します。
.It Fl T Ar second
タイムアウト時間を
.Ar second
秒に設定します。
ftp での転送に対しては
FTP での転送に対しては
.Ev FTP_TIMEOUT
環境変数が、 http での転送に関しては
環境変数が、HTTP での転送に関しては
.Ev HTTP_TIMEOUT
環境変数が設定されていた場合は、それを上書きします。
環境変数が設定されていた場合は、それを上書きします。
.It Fl t
別のバグがある
.Tn TCP
実装に対する対処を行います。
.It Fl v
冗長性を増加させます。
複数の
.Fl v
を指定することで、より情報が得られるようになります。
本フラグの各インスタンスは、冗長レベルを 1 増加させます。
レベル 1 (デフォルト) は、各ファイルの後にサマリを表示するだけです。
レベル 2 は、標準出力が端末の場合には、転送中にカウントを表示します。
レベル 3 は、
.Xr fetch 3
ライブラリからのメッセージを有効にします。
.It Fl w Ar seconds
.Fl a
が指定された場合、次のリトライの前に指定した秒数だけ待ちます。
.El
.Pp
多くのオプションは、環境によってのみ制御されます
(これはバグです)。
.Sh URL 文法
.Sh 診断
.Nm
は、RFC1738 に記述されている
.Tn http
および
.Tn ftp
の URL を受け付けます。
.Tn ftp
の URL ではユーザ名とパスワードを指定可能であり、
.Li ftp://user:password@host/
という文法で指定します。
パスがユーザのホームディレクトリの相対指定ではなく、絶対指定の場合には、
パスを %2F で開始する必要があり、
.Li ftp://root:mypass@localhost/%2Fetc/passwd
のように指定します。
コマンドは、成功時には 0 を返し、失敗時には 1 を返します。
コマンド行上に複数の URL を指定した場合、
.Nm
は、
.Tn ftp
URL の複数のスラッシュを圧縮して単一のスラッシュにします。
リテラルで複数のスラッシュが存在すると、
.Tn ftp
プロトコルエラーとなります。
.Sh プロキシサーバ
防火壁の中の多くのサイトは、信用できるプロトコルで防火壁を通して
通信を行なうためにアプリケーションゲートウェイ (``プロキシサーバ'')
を利用します。
.Nm
プログラムは、プロキシサーバを使った
.Tn FTP
.Tn HTTP
プロトコルの両方を利用可能です。
.Tn FTP
プロキシサーバは
.Tn FTP
の要求だけを取り次ぎ、
.Tn HTTP
プロキシサーバは
.Tn FTP
.Tn HTTP
の両方の要求を取り次ぎます。
プロキシサーバは、環境変数
.Dq Va PROTO Ns Ev _PROXY
を定義することで設定されます。
ここで、
.Va PROTO
はプロトコルの名前で、英大文字で記述します。
環境変数の値には、ホスト名と必要ならばコロン (:) に続けてポート番号を
指定します。
.Pp
.Tn FTP
プロキシクライアントは、
.Do Va remoteuser Ns Li \&@ Ns Va remotehost
.Op Li \&@ Ns Va port
.Dc
という形式の ホスト名とポート番号を遠隔地のユーザ名として送ります。
.Tn HTTP
プロキシクライアントは、
.Tn HTTP
.Dq Li GET
要求を出した時に、単純に要求を出した元の URI を遠隔サーバに送ります。
HTTP プロキシによる認証は、いまはまだ実装されていません。
.Sh HTTP による認証
.Tn HTTP
プロトコルは、さまざまな種類の認証方法の提供を含んでいます。
現在、
.Nm fetch
がサポートしている方式は
.Dq basic
方式だけです。
この方法は、パケットの盗み見や人間が間に介在した攻撃にはセキュリティを
提供しません。
認証は、
.Ev HTTP_AUTH
.Ev HTTP_PROXY_AUTH
環境変数を設定することで可能となります。
両環境変数は、次のような同じ形式をしています。
空白で区切られたパラメータの設定リストからなり、個々の設定はコロンで
分けられたパラメータのリストからなります。最初の二つのパラメータはいつも
(大文字でも小文字でも構わない) 認証方法名と認証が行われる範囲です。
認証範囲が
.Sq Li \&*
の形式で指定されている時、他に指定されていない全ての範囲とみなされます。
.Pp
.Li basic
認証方式は、二つのオプションのパラメータを利用します。
一つ目はユーザ名で、2 番目はそれに付けられたパスワードです。
環境でパスワードもしくは両方のパラメータが指定されていなく、
.Nm
の標準入力が端末である時には、
.Nm
は欠けているパラメータの入力をユーザにうながします。
したがって、ユーザが
.Dq Li jane
.Dq Li WallyWorld
範囲の認証で、パスワードが
.Dq Li QghiLx79
であるなら、彼女は
.Ev HTTP_AUTH
環境変数を以下のように設定します。
.Bl -enum -offset indent
.It
.Dq Li basic:WallyWorld:jane:QghiLx79
.It
.Dq Li basic:WallyWorld:jane
.It
.Dq Li basic:WallyWorld
.El
.Pp
.Nm
は欠けている情報が必要な場合は、尋ねてきます。
彼女は、認証範囲を
.Dq Li WallyWorld
と指定する代わりに、
.Dq Li \&*
と指定することで、どんな範囲でも認証を行うことを示せます。
これは、
.Dq Li basic:*
の様なもっとも一般的に使われる設定です。
この設定は、
.Nm
にどんな認証範囲であっても
.Li basic
認証を行わせることを指示します。
.Sh エラー
.Nm
は成功した時は 0 を返します。
また、失敗した場合には、
.Aq Pa sysexits.h
で定義される 0 でない値が返されます。
複数の URI が再試行のために与えられた時、
.Nm
は全てを試して、全て成功した場合だけ 0 を返します
(それ以外の場合は、最後の失敗のエラーを返します)。
は、それぞれを順番に取得しようとし、
すべての取得に成功した場合のみに 0 を返します。
.Sh 環境変数
.Bl -tag -width FTP_PASSIVE_MODE -offset indent
.It Ev FTP_TIMEOUT
.Tn FTP
接続を中断するまでの最大時間を秒で指定します。
.It Ev FTP_LOGIN
.Tn FTP
転送で使われるログイン名です。
デフォルトは ``anonymous'' が使われます。
.It Ev FTP_PASSIVE_MODE
パッシブモードで FTP を行います。
.It Ev FTP_PASSWORD
.Tn FTP
転送で使われるパスワードです。
デフォルトは
.Dq Va yourname Ns Li \&@ Ns Va yourhost
です。
.It Ev FTP_PROXY
.Tn FTP
を理解するプロキシサーバのアドレスを
.Do Va hostname Ns
.Op Li : Ns Va port
.Dc
の形式で与えます。
.It Ev HTTP_AUTH
.Tn HTTP
認証パラメータを定義します。
.It Ev HTTP_PROXY
.Tn HTTP
を理解するプロキシサーバのアドレスを
.Do Va hostname Ns
.Op Li : Ns Va port
.Dc
の形式で与えます。
.It Ev HTTP_PROXY_AUTH
.Tn HTTP
プロキシサーバのための認証パラメータを定義します。
.It Ev HTTP_TIMEOUT
.Tn HTTP
接続を中断するまでの最大時間を秒で指定します。
.El
.Pp
.Xr fetch 3
ライブラリの文書に記述されている環境変数は、すべてサポートされています。
.Sh 関連項目
.Xr ftp 1 ,
.Xr tftp 1
.Rs
.%A R. Fielding
.%A J. Gettys
.%A J. Mogul
.%A H. Frystyk
.%A T. Berners-Lee
.%T "Hypertext Transfer Protocol \-\- HTTP/1.1"
.%O RFC 2068
.%D January 1997
.Re
.Rs
.%A T. Berners-Lee
.%A L. Masinter
.%A M. McCahill
.%T "Uniform Resource Locators (URL)"
.%O RFC 1738
.%D December 1994
.Re
.Rs
.%A J. Postel
.%A J.K. Reynolds
.%T "File Transfer Protocol"
.%O RFC 959 / STD 9
.%D October 1985
.Re
.Rs
.%A M.R. Horton
.%T "Standard for interchange of USENET messages."
.%O RFC 850
.%D June 1983
.Re
.Xr fetch 3
.Sh 歴史
.Nm fetch
.Nm
コマンドは
.Fx 2.1.5
から導入されました。
本実装が最初に登場したのは
.Fx 4.1
です。
.Sh 作者
.Nm
のオリジナル実装は
@ -381,62 +212,22 @@ HTTP
.Fx 2.2
のために、拡張を行ったのは
.An Garrett Wollman
です。
.Sh バグ
たくさんの環境変数とコマンドラインオプションがあります。
.Pp
.Fl a
オプションは、ある種類の
.Tn HTTP
の接続失敗のために実装されており、
.Tn FTP
の接続失敗のためではありません。
.Pp
.Tn HTTP
のために、
.Dq basic
認証モードだけが実装されています。
これは、ダイジェスト認証に置き換えられるべきものです。
.Pp
(
.Tn FreeBSD
以外の) 実装には、データが含まれるパケットに
.Dv SYN
.Dv FIN
の制御フラグが含まれている状況を正しく実装していないものがあります。
.Sq Fl t
フラグは後者に対する対処を行い、
.Sq Fl b
フラグは前者に対する対処を行います。
これらはサーバの
.Tn TCP
スタックのエラーですから、我々ができる最良の解はこれらの対処です。
正しいサーバとの通信の場合には、
.Fl t
および
であり、後に
.Xr fetch 3
を使用するように
.ie t .An Dag-Erling Sm\(/ograv
.el .An Dag-Erling Smograv
が完全に書き直しました。
.Sh
The
.Fl b
を含まない最良の
.Tn HTTP
転送が実現されます。
(少ない返答の場合) ラウンドトリップ回数は最小の 2 回となり
他の実装よりも 1 回少なくなります
および
.Fl t
のオプションは、すでにサポートされておらず、警告を表示します。
これらのオプションは、他の OS のバグの回避策であって、
本実装ではバグを引き起こしません。
.Pp
.Tn HTTP
標準は、
.Tn RFC 850
の日付書式解釈を要求しますが、この書式は世紀情報を提供しません。
.Fx 3.1
以前のバージョンの
.Nm fetch
は、そのような日付を 1900 年代と解釈します。
このバージョンの
.Nm fetch
は、そのような日付を
.Tn RFC 2068
にある次の規則に従って解釈します:
.Bd -literal -offset indent
o HTTP/1.1 クライアントおよびキャッシュは、50 年より先の未来の
RFC-850 形式の日付を、実際は過去の日付であると解釈すべきです
(これが「2000 年問題」解決の助けになります)。
.Ed
.Fl h ,
.Fl c ,
.Fl f
オプションの使用と、コマンド行上の URL 指定は、同時にはできません。