用語辞典・コマンド・確認ツール

wget

wgetとは

GNU Wget(グヌー・ダブリューゲット/一般にウィジェットとも読まれます)は、HTTPやFTPなどからファイルを非対話的に取得するコマンドラインツールです。端末を操作し続けなくても動き、スクリプト、予定済みジョブ、低速・不安定な回線での取得へ向きます。

一個のURLだけでなく、ファイルに並べたURL、ページ内のリンクを辿る再帰retrieval、途中ファイルの再開、リモート更新時だけの取得等を扱えます。GNU WgetのバージョンによってHTTPSライブラリーや選択肢が異なるため、実行環境の手動を基準にします。

wgetは「サイトを丸ごと保存する魔法」ではありません。開始URLから許可されたリンクだけを辿り、HTTP応答として取得できたリソースをローカルファイルへ保存するクローラー型ダウンロードです。

複数URLを待ち行列へ入れ、無人で取得し、ローカルフォルダーへ順序立てて保存する再開、更新判定、再試行、再帰retrievalの境界を先に決める
複数のWebソースとファイルがURL待ち行列へ集まり、時計とダウンロード処理を通ってローカルフォルダー木構造へ保存され、下段で途中転送の再開、時刻比較による新しいファイルだけの取得、再試行上限、再帰リンクを深さ・オリジン・ファイル種類・容量の検査点で制限するピクトグラム図解
図1無人実行ほど制限が重要です。再帰選択肢を付ける前に、辿る深さ、ドメイン、取得形式、保存容量、速度、再試行回数を決めます。

取得作業を構成する要素

Input一個または複数のURL

コマンド行、入力ファイル、ページ内リンクから取得候補を作ります。

RetrievalHTTP・HTTPS・FTPで受信

応答、リダイレクト、再試行条件を読み、データをストリームとして受け取ります。

Namingローカルファイル名とディレクトリー

リモートパス、コンテンツdisposition、指定名、ディレクトリー構造の規則を選びます。

Continuationpartialファイルから再開

サーバーの範囲対応とローカル大きさを確認し、途中から続けます。

Freshness更新されたものだけ取得

タイムスタンプやローカルファイルの有無を使いますが、内容同一を保証する比較ではありません。

Recursionリンクを辿る範囲

深さ、ホスト、パス、ファイル種類、親範囲等の検査点で探索を止めます。

非対話的とは「質問せず進む」こと

Wgetは背景や端末切断後も使いやすく、進捗とエラーをログへ書けます。途中で入力を求めないため、認証失敗、ディスク不足、リダイレクトループなどの停止条件を事前に設計します。

予定済みジョブでは実行ディレクトリー、環境変数、プロキシ、証明書保存、保存権限が手動時と異なることがあります。終了状態、ログ、取得件数、空ファイル・partialファイルを監視します。

保存名はURL末尾だけで決まらない

同じ末尾名を持つ別URL、問い合わせ付きURL、リダイレクト後URL、Content-Dispositionヘッダーで提案された名前が重なることがあります。既存ファイルを上書き・番号付け・skipする規則は選択肢とモードで変わります。

公開ディレクトリーへ直接保存すると、取得途中のファイルをWebサーバーが配信する危険があります。一時ディレクトリーへ取得し、大きさ・ハッシュ・コンテンツタイプ・マルウェア検査後に配置します。

再開は同じ内容の続きかを確認する

continue選択肢はローカルpartialファイルの長さから取得を再開します。リモートファイルが差し替わっていたのに同じ名前なら、古い前半と新しい後半が結合される危険があります。

ETag、Last-Modified、ファイル大きさ、ハッシュ、配布元の署名を使える範囲で照合します。サーバーが範囲要求へ対応しない場合は最初から受け直すことがあります。

timestampingは内容ハッシュ比較ではない

リモートのLast-Modifiedと大きさ等をローカルファイルと比べ、更新が必要と判断したものだけ取得できます。ただしサーバーが時刻を返さない、時刻が不正確、コンテンツは変わったのに時刻が同じという場合があります。

配布物の正しさが重要なら、timestampingは転送量を減らす仕組みと考え、チェックサムやデジタル署名による完全性確認を別に行います。

再試行は失敗を無限に隠さない

タイムアウト、接続拒否、サーバーエラー等で再試行できますが、エラー種別によって再試行の意味が違います。認証失敗や存在しないリソースを短間隔で繰り返しても直りません。

回数、待ち時間、全体deadlineを設定し、レート制限を尊重します。複数処理が同じURLを再試行すると相手と自分の回線へ負荷を集中させます。

再帰retrievalは境界を先に決める

ページ内リンクを辿ると、ナビゲーション、カレンダー、検索結果、異なるホスト、巨大ファイルへ際限なく広がる場合があります。深さ、ドメイン・ホスト、親ディレクトリー、受け入れ・拒否パターン、ファイル種類を指定します。

リンクをローカル閲覧向けに変換する機能もありますが、JavaScript実行後に生成されるリソース、ログイン後データ、API、動画ストリーム、same-origin方針までブラウザーのように再現するわけではありません。

利用条件と負荷を尊重する

robots指示、利用規約、著作権、認証範囲、個人情報を確認し、要求間隔と帯域幅を抑えます。取得できることと、複製・再公開してよいことは別です。

パスワードをコマンド行やURLへ直接書くと、シェル履歴、処理一覧、ログへ残る場合があります。認証情報ファイルの権限、秘密管理機能、短期トークン等を使います。

wgetはURL列を無人でファイルへ保存する取得ツールです。再開・更新・再試行・再帰は便利ですが、同一性、探索境界、容量、負荷、利用権限を別々に管理して初めて安全な自動取得になります。

GNU Wgetの非対話取得、input file、continue、timestamping、recursive retrieval、directory・accept・reject・retry等:GNU Wget manual

関連用語