GNU Wget
GNU Wget(あるいは単に Wget)はウェブサーバからコンテンツを取得するダウンローダであり、GNUプロジェクトの一部である。その名称はワールド・ワイド・ウェブ(WWW)とプログラムの主要な機能であるデータ取得を意味する英語の「get」から派生したものである。現在Wgetはウェブ閲覧のために用いられるTCP/IPに基づいたもっともポピュラーなプロトコルである、HTTP、HTTPS及びFTP によるダウンロードが利用可能である。
Ubuntu上で動くwget。本項目の英語版記事をダウンロードしている。 | |
開発元 | GNUプロジェクト |
---|---|
最新版 |
1.25.0[1]
/ 10 11月 2024 |
リポジトリ | |
プログラミング 言語 | C言語 |
対応OS |
AmigaOS BSD系OS Linux macOS Windows OpenVMS Unix系OS |
プラットフォーム | クロスプラットフォーム |
対応言語 | アイルランド語、イギリスの英語、イタリア語、インドネシア語、ウクライナ語、英語、エストニア語、エスペラント語、オランダ語、カタルーニャ語、ガリシア語、ギリシア語、クロアチア語、スウェーデン語、スペイン語、スロバキア語、スロベニア語、セルビア語、チェコ語、中国語(台湾、中国)、デンマーク語、ドイツ語、トルコ語、日本語、ノルウェー語(ブークモール)、バスク語、ハンガリー語、フィンランド語、フランス語、ブルガリア語、ベトナム語、ヘブライ語、ベラルーシ語、ポーランド語、ポルトガル語(ブラジル、ポルトガル)、リトアニア語、ルーマニア語、ロシア語 |
サポート状況 | 開発中 |
種別 | ダウンロードマネージャ |
ライセンス | GNU General Public Licensev3+[2] |
公式サイト |
www |
Wgetの特徴としては、再帰的ダウンロード、ローカルに取得したHTMLをオフラインで閲覧するためのリンクの変換、プロキシのサポートその他数多くの機能を挙げることができる。
Wgetは1996年に、ウェブの人気の急拡大とともに登場した。その結果多くのUNIXユーザーに用いられるようになり、ほとんどの主要なLinuxディストリビューションとともに配布されるようになった。移植性の高いC言語によって書かれているため、WgetはいずれのUnix系システムにも容易にインストールできる。またmacOS、Windows、OpenVMS及びAmigaOSを含む多くの環境に移植されている。
WgetはGNOMEデスクトップにおけるGWgetやKDEデスクトップにおけるKGetのようなGUIプログラムの基礎として用いられている。Wgetはフリーソフトウェアである。
特徴
編集確実性
編集Wgetは低速あるいは不安定なネットワーク接続でも確実に動作するように設計されている。もしダウンロードがネットワークの問題によって完了しなかった場合、Wgetは自動的にダウンロードが停止した箇所からダウンロードを継続するように試み、ファイル全体が取得されるまでこれを繰り返す。Wgetは、この機能を利用するため、当時としては新しかったRange
HTTPヘッダをもっとも早期に採用したクライアントの一つとなった。
再帰的ダウンロード
編集Wgetをクローラとして動作させることも可能である。クローラとして動作するとき、Wgetは、リソースのハイパーリンクをHTMLのウェブページから抽出し、それらを連続してダウンロードし、ユーザーによって指定された最大繰り返しの回数に達するまで再帰的に繰り返す。ダウンロードされたページは、リモートのサーバのディレクトリ構成に類似したディレクトリ構成に保存される。この「再帰的ダウンロード」はHTTPによるウェブサイトの部分的もしくは完全なミラーリングを可能にする。Wgetは、ダウンロードされたHTMLページ内のリンクを、オフラインでの閲覧のため、ローカルにダウンロードされた素材に向けられるよう調整することもできる。この種のウェブサイトの自動的ミラーリングを行うときには、(ユーザーがオプションとして-e robots=off
を指定しない限り)WgetはRobots Exclusion Standardを遵守する。
再帰的ダウンロードはFTPでも同様に動作する。その際、Wgetはダウンロード対象となるファイルを発見するためにLIST
コマンドを発行する。そしてトップのURLで指定されたものより下位のファイルとディレクトリに関してこのプロセスを繰り返す。FTPのURLのダウンロードが要求された場合には、シェル類似のワイルドカードが利用できる。
HTTPとFTPのどちらを用いる場合でも、再帰的ダウンロードを行う際には、Wgetにローカル及びリモートのファイルのタイムスタンプを調べ、リモートファイルが相当するローカルファイルより新しい場合にのみダウンロードを行うように命令することができる。これによりHTTP及びFTPサイトの容易なミラーリングが可能になるが、これはrsyncのように、最初からミラーリングを行うために設計されたプログラムに比べ非効率でよりエラーを生じやすいと考えられている。一方で、Wgetはこの作業のために特別なサーバ側のソフトウェアを必要としないという利点もある。
非対話性
編集Wgetは非対話的なプログラムである。つまり、一度起動すれば、Wgetはユーザーとの対話を必要とせずTTYをコントロールする必要もなく、進捗状況は(後の調査のため)別のファイルに記録しておくこともできるということである。そういった非対話的な形でユーザーはWgetを起動し、プログラムを監視することもせずログアウトすることができる。対照的に、ほとんどのグラフィカルユーザインタフェースあるいはテキストユーザインタフェースのウェブブラウザは、ユーザーがログインし続けることと、失敗したダウンロードを手動で再度スタートすることを求める。これは大量のデータを転送する際には大きな障害となりうる。
移植性
編集Wgetは、サードパーティーのライブラリに対する依存性を最小限にした、C言語の移植性の高いスタイルで記述されている。Wgetには、C言語コンパイラとTCP/IPネットワーキングに対するBSDライクなインタフェースの他にはほとんど必要なものはない。WgetはUnixシェルから呼び出されるUNIXプログラムとして設計されたため、多くのUnix系環境やシステムに移植されている。それはWindows及びmacOSなどを含んでいる。
その他の特徴
編集- Wgetはプロキシ経由でダウンロードを行える。プロキシは会社のファイアウォール内部からのウェブアクセスを可能にするためや頻繁にアクセスされるコンテンツをキャッシュし速く提供するために広く用いられている。
- Wgetは持続的HTTP接続が利用可能な場合にはそれを利用する。
- 適切なインタフェースが含まれているシステムにおいてはIPv6が利用できる。
- OpenSSLライブラリを利用し、暗号化されたダウンロードを行うためにSSL/TLSが利用できる。
- 適切なインタフェースが含まれている32ビットシステムでは2GiBより大きいファイルもサポートされている。
- 利用可能な帯域幅すべてを使い尽くすことを避けるため、ダウンロードの速度を調整することができる。
Wgetの使い方
編集基本的な使い方
編集URLを(1個以上)引数にして Wget をコマンドラインから呼ぶのが、典型的な使い方である。(下表ではコマンドは読み易すくするために複数行で記述してあるが、実際には改行のない一行である。)
コマンド | 機能 |
---|---|
wget http://www.example.com/ |
「www.example.com 」のタイトルページをダウンロードし「index.html 」という名前のファイルに保存する。
|
wget ftp://ftp.gnu.org/pub/gnu/wget/wget-latest.tar.gz |
GNUのftpサイトからWgetのソースコードをダウンロードする。 |
より複雑な使い方として、複数のURLを階層を保ったままディレクトリに自動的にダウンロードする、というのもある。
コマンド | 機能 |
---|---|
wget --execute robots=off --recursive --level=1 --no-parent ---accept .gif http://www.server.com/dir/ |
ウェブサイトから拡張子が「.gif 」であるすべてのファイルをダウンロードする。(wget 'http://www.server.com/dir/*.gif' )のようなワイルドカードの展開はFTPにおいてのみ可能)
|
wget --page-requisites --convert-links http://www.example.com/ |
「www.example.com 」のタイトルページを、ページを表示するのに必要な画像とスタイルシートとともにダウンロードし、その中にあるURLがローカルで利用可能なコンテンツを参照するように変換する。
|
wget --recursive --level=0 http://www.example.com/ |
「www.example.com 」の全てのコンテンツをダウンロードする
|
進んだ使い方
編集コマンド | 機能 |
---|---|
wget --tries=7 --wait=5 --waitretry=14 --random-wait --mirror --convert-links --backup-converted --execute robots=off --output-file=./session.log http://www.oreilly.com/catalog/upt3/errata/ |
購入したばかりの本の正誤表をダウンロードする。全てのローカルのリンクを再帰的にダウンロードしファイルをオフラインでの閲覧に適したものにする。ファイル取得の間に5×0.5秒から5×1.5秒のランダムな待ち時間を設ける。ファイル取得に失敗したときには7回まで取得を試みる。その際には14秒ずつ間を空ける。アクセス結果をローカルのファイル「./session.log 」に記録する。
|
wget --tries=22 --waitretry=48 --wait=30 --random-wait --execute robots=off --output-file=./my_movies.log --directory-prefix=/movies --input-file=./my_movies.txt |
ローカルのファイル「my_movies.txt 」に一行ごとに記述されたリンクのみを取得する。ファイル取得の間に15秒から45秒のランダムな間隔をあける。ファイル取得に失敗した場合には48秒の間隔をあけて22回まで再試行する。HTTPリクエストヘッダーにはuser-agent を含めない。ロボット排除は無視する。取得した全てのファイルをディレクトリ「/movies 」に保存し、全てのアクセス結果をファイル「my_movies.log 」に保存する。名前のわかった特定の画像もしくはその他のファイルだけをダウンロードする場合に適する。
|
wget --cookies=on --keep-session-cookies --save-cookies=cookie.txt http://first_page |
Wget をレファラーとクッキーで保護されたコンテンツをダウンロードするのに用いる。ベースとなるURLを取得しそのクッキーをファイルに保存する。 |
wget --referer=http://first_page --cookies=on --load-cookies=cookie.txt --keep-session-cookies --save-cookies=cookie.txt http://second_page |
Wget をレファラーとクッキーで保護されたコンテンツをダウンロードするのに用いる。保存されたクッキーを利用して保護されたコンテンツを取得する。 |
wget --mirror --wait=2 --page-requisites --html-extension --convert-links --directory-prefix=DIRECTORY http://www.yourdomain.com |
ウェブサイトをミラーしローカルでの閲覧のための静的なコピーを作る。つまり、全てのリンクはローカルのファイルを示すように変換される。注: --html-extension はCGI、ASPあるいはPHPにより生成されたファイルをHTMLに変換する。
|
主要なコマンドラインオプション
編集オプション | 機能 |
---|---|
|
ダウンロードを再帰的にする。 |
|
ダウンロードするファイル名を LIST で指定する。
|
|
ドメイン名を LIST で指定する。
|
|
出力先のファイル名指定する。ファイル名として「- 」を指定すると出力先は標準出力になる。
|
|
バージョン情報を表示する。 |
|
ヘルプを表示する。 |
|
バックグラウンド モードにする。 |
|
HTTPヘッダ STRING を指定する。
|
|
コマンド COMMAND を実行する。(ファイル .wgetrc と同じ形式)
|
著者と著作権
編集GNU WgetはHrvoje Nikšićによって書かれた。彼のほかDan Harkless、Ian Abbott、Mauro Tortonesiなど多くの人々がWgetに寄稿している。主要な寄稿者達は配布物に含まれるAUTHORSファイルにクレジットされている。その他多くの人々は配布物に含まれるchangelogに記載されている。現在、WgetはGiuseppe Scrivanoによってメンテナンスされている。
Wgetの著作権はフリーソフトウェア財団に所属する。GNUソフトウェアに対する重要な寄稿全てに対して著作権譲渡を要求するというのがフリーソフトウェア財団のポリシーである。[1]
歴史
編集初期
編集Wgetは同じ作者による以前のプログラムGeturlの後継である。Geturlの開発は1995年後半に始まった。ところが作者は、以前ジェイムズ・バートン[3]がAmiga用にAREXXで書いたGetURLというプログラムがあることに気づいた。その後、名称はWgetに改められた。
Wgetは1990年代半ばに利用可能であったウェブダウンロードソフトウェアの間隙を埋めるものだった。HTTPとFTPの両方のプロトコルで確実にファイルをダウンロードできるプログラムは一つもなかった。当時存在したプログラムは(NcFTPやdlのように)FTPのみ利用可能だったか(当時はまだ、どこでも利用できるようなものではなかった)Perlで書かれたものだった。Wgetは当時すでにあったプログラムの機能に刺激を受けてはいたものの、このプロジェクトの目標はHTTPとFTPの両方を利用可能にすることと、ユーザーがどのUnixシステムにもある標準的な開発ツールのみを用いてWgetをビルドできるようにすることだった。
当時多くのUnixユーザーは、極端に遅い大学とダイヤルアップ接続のインターネット接続に苦しんでいた。このため、操作する人間が補助しなくとも一過性のネットワーク障害に対処できるダウンロードエージェントに対するニーズが増大していた。
主なリリース
編集以下に挙げるリリースはWgetの開発において重要な節目となるものである。それぞれのリリースに隣接して掲載している機能は簡潔さを旨として編集されており、当該リリースに関する網羅的情報ではない。そのような情報はWgetとともに配布されているNEWSファイルに掲載されている。[2].
- Geturl 1.0 (1996年1月リリース) 最初の一般公開である。英語での最初の告知は このネットニュースへの投稿までたどることができる。これは恐らくは6月にリリースされたGeturl 1.3.4に関するものである。
- Wget 1.4.0 (1996年11月リリース)Wgetの名を冠した最初のリリースである。これは同時にGPLの下で配布された最初のリリースでもある。Geturlはアドホックな無保証のライセンスの下で配布されていた。
- Wget 1.4.3 (1997年2月リリース)著作権をフリーソフトウェア財団に譲渡してGNU projectの一部としてリリースされた最初の版である。
- Wget 1.5.3 (1998年9月リリース)このプログラムの人気において節目となった。この版は多くのLinuxディストリビューションに同梱され、より多くの人々の目に触れるようになった。
- Wget 1.6 (1999年12月リリース)当時新鮮でなくなっていたリリース1.5.3に多くのバグフィックスを加えた。Dan Harklessの尽力に多くを負っている。
- Wget 1.7 (2001年6月リリース)SSLサポート、クッキー及び持続的接続を導入した。
- Wget 1.8 (2001年12月リリース)帯域幅調整、新しい進行状況表示及びハイパーリンクグラフの幅優先探索を追加した。
- Wget 1.9 (2003年10月リリース)実験的なIPv6のサポート及びHTTPサーバへのデータPOST機能を導入。
- Wget 1.10 (2005年6月リリース)2GiBを超えるファイルのサポート、dual-familyシステムでのIPv6サポート、NTLM認証、及び SSL関連の改良が行われた。Mauro Tortonesiがメンテナを引き継いだ。
- Wget 1.11 (2008年1月リリース)GPLバージョン3へ移行した。CGIスクリプトでダウンロードするファイルの名称を示すためにしばしば用いられる
Content-Disposition
ヘッダへの予備的なサポートを追加した。HTTP認証に関するコードにセキュリティ関連の改良が加えられた。Micah Cowanがプロジェクトのメンテナを引き継いだ。 - Wget 1.12 (2009年9月リリース)ウェブ上のCSSからのURL解析機能と国際化資源識別子(IRI)の取り扱いが追加された。
- Wget 1.13 (2011年8月リリース)HTTP/1.1がサポートされた。またいくつかの移植性に関する問題が修正された。セキュアな接続のためのライブラリとしてOpenSSLに代え、デフォルトでGnuTLSを利用するように変更された[4]。
- Wget 1.14 (2013年9月リリース)WARCファイルのサポートを追加。RFC2617ダイジェストアクセス認証のサポートを追加。GNU TLSバックエンドでのメモリリークの問題を修正。GNU TLSを使用する場合にクライアント証明書を有効に。
- Wget 1.15 (2014年4月リリース)--https-onlyと--methodオプションを追加。入力ファイル内で短縮URLに対応。MD5-SESSをサポート。
- Wget 1.16 (2014年10月リリース) デフォルトでローカルのシンボリックリンクを作成しなくなった。デフォルトのプログレスバーの出力を変更。--no-configと--start-POSオプションを追加。
- Wget 1.17 (2015年11月リリース) FTPのパッシブモードを削除し、FTPSがサポートされた。--if-modified-sinceオプションを追加。
- Wget 1.18 (2016年6月リリース) 脆弱性「CVE-2016-4971」を修正。--bind-dns-addressと--dns-serversオプションを追加。
- Wget 1.19 (2017年2月リリース) Metalinkファイルに対応、それに伴い新規オプションを追加。1.19.1にて、指定したHTTPステータスコードが返されるとダウンロードをリトライする--retry-on-http-errorオプションを追加。
- Wget 1.20 (2018年11月リリース) 信頼性向上のための--retry-on-host-errorオプション、FTPの再帰的なリモートファイルダウンロードをサポートする--accept-regex、--reject-regexオプションを追加。
- Wget 1.21 (2020年12月リリース) 翻訳文字列増加。alloca の全削除。構成フラグ --enable-fsanitize-ubsanと--enable-fsanitize-asanと--enable-fsanitize-msan for gcc and clang追加。OpenSSL のハンドシェイク後認証追加。gettext バージョン 0.19.3+ が必須に。一部のロケールで進行中のバーコードのバッファーオーバーフロー他、バグ修正。
開発とリリースのサイクル
編集Wgetの開発はオープンな流儀で行われている。ほとんどの設計上の決定は、通常はユーザーと開発者が参加する公開のメーリングリスト[3]で行われている。バグリポートとパッチも同じメーリングリストに流される。
ソースの投稿
編集Wgetのコードやドキュメンテーションを投稿する際に好まれる方法はdiffユーティリティによって生成されるテキストのパッチの形でソースを更新することである。パッチをWgetに含めようとする場合は、メーリングリスト[4]に投稿されメンテナによってレビューされる。メンテナの検査を通過したパッチはソースに加えられる。パッチの作り方とスタイルのガイドラインはプロジェクトのwiki[5]に概略が示されている。
ソースコードは、リリース1.5.3に始まる改訂の歴史を保存するリモートバージョンコントロールリポジトリで追跡することができる。リポジトリはMercurialで管理されている。以前はSubversion、さらにその前はCVSで管理されていた。
リリース
編集開発中に十分な数の機能あるいはバグフィックスが集積したときに、WgetはGNUのFTPサイト及びそのミラーサイトを通じて一般に公開される。プロジェクトは完全にボランティアによって運営されているので、リリースを発表することについて外部からの圧力はなく、強制力のあるリリースの締め切りもない。
リリースにはメジャー.マイナー.リビジョンという形式でバージョンナンバーが振られている。(例)Wget 1.11、Wget 1.8.2。メジャーバージョンナンバーが増加されるのは、大きなそして場合によっては非互換となるようなWgetの動作の変更あるいはコードベースの根本的な再設計がある場合である。マイナーバージョンナンバーが増加されるのは新しい機能の追加とバグフィックスを示す場合である。新しいリビジョンは、その前のリビジョンに比較して、バグフィックスのみが含まれていることを示している。リビジョン ゼロは省略される。つまりWget 1.11は1.11.0と同じことである。
ライセンス
編集GNU WgetはGNU General Public Licenseバージョン3以降のもとで、OpenSSLライブラリにリンクされたバイナリの配布を許可するという特別な例外をつけて配布されている。例外規定は以下の通りである:[2]
Additional permission under GNU GPL version 3 section 7
If you modify this program, or any covered work, by linking or combining it with the OpenSSL project's OpenSSL library (or a modified version of that library), containing parts covered by the terms of the OpenSSL or SSLeay licenses, the Free Software Foundation grants you additional permission to convey the resulting work. Corresponding Source for a non-source form of such a combination shall include the source code for the parts of OpenSSL used as well as that of the covered work.
WgetがGnuTLSライブラリにリンクできるように改良された際にはこの例外規定が削除されることが期待されている。
Wgetの ドキュメンテーションは Texinfoリファレンスマニュアルの形態で、GNU Free Documentation Licenseバージョン1.2以降の条件で配布されている。通常Unixライクなシステムで配布されているman pageはTexinfoマニュアルのサブセットから自動的に生成され、同じライセンスが適用される。
国際化
編集WgetはGNU gettextによる国際化に対応している。Unixライクなシステムでは環境変数を適切に設定することで母語を表示させることができる。Wget-1.12では日本語を含め30以上の言語に対応している。
Wget2
編集初版 | 2021年9月26日 |
---|---|
最新版 |
2.2.0[5]
/ 24 11月 2024 |
リポジトリ |
gitlab |
ライセンス | GPL-3.0-or-later[6] |
公式サイト |
www |
GNU Wget2のバージョン2.0.0は、2021年9月26日にリリースされた。Wget2はGNU General Public Licenseバージョン3以降のもとで配布されており、これをラッピングするLibwgetはGNU Lesser General Public Licenseバージョン3以降のもとで配布されている[6]。Wget2はWgetと比較して多くの改善点があり、特に、以下のプロトコルと技術に対応したことで、多くの場合、Wget2はWget1.xより遥かに高速にダウンロードすることができる[7]。
- HTTP/2
- HTTP圧縮
- 並列接続
If-Modified-Since
HTTPヘッダーの使用- TCPファストオープン
脚注
編集- ^ “wget-1.25.0 released [stable]” (英語) (11 11月 2024). 11 11月 2024閲覧。
- ^ a b “README file”. 2010年6月19日閲覧。
- ^ 英: James Burton
- ^ コンパイル時のオプション指定でOpenSSLを使用するように指定することはこのバージョン以降でもまだ可能である。
- ^ “wget2-2.2.0 released” (英語) (24 11月 2024). 24 11月 2024閲覧。
- ^ a b “GNU Wget2 2.0.0 released”. gnu.org (2021年9月26日). 2022年12月3日閲覧。
- ^ “wget2”. GitLab. 2022年12月3日閲覧。