「複数のファイルをまとめてダウンロードしたい」「稼働中のWebサイトをまるごとバックアップしたい」といったときに便利なコマンドが「wget」です。特定の拡張子を持つファイル、指定したディレクトリにあるファイル、URLリストに記載されたファイルなど、いろいろな条件を決めた上でファイルを効率的にダウンロードできます。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、「man」や「help」代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、HTTP/HTTPSなどを介してデータをまとめて取得する際の必須コマンド「wget」を紹介します。
なお、本連載では、執筆時点の最新版「Red Hat Enterprise Linux」(RHEL)および「CentOS」環境で動作を確認しています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。
HTTP/HTTPSとFTPで利用できるファイル取得用コマンド「wget」は、その多機能さと移植性の高さにより、Linuxを始めとする多くのUNIX系OSで利用されています。また、Windows OS環境向けには「Wget for Windows」が配布されています。
Linux/UNIX環境に慣れた方であれば、「tarball」(tar形式で圧縮したファイル群)の取得をコマンドラインで行う際によく目にするコマンドでしょう。例えば、直近の@ITの記事でもWordPressのtarballを取得する際のコマンドに使われています。
wgetは、ソースコードやバイナリのダウンロードだけでなく、Webサイト全体あるいは特定の階層を一括取得できるコマンドです。また、何らかの理由で中断されたダウンロードを中段したところから継続できるなど、いわゆる「ダウンローダー」としての機能を持ちます。ブロードバンド普及以前に登場したツールであることから、帯域幅を使い果たさないように速度の上限を定めてダウンロードできたり、接続を試す(リトライ)回数の最大値を指定できたり、あるいは、ダウンロードが中断された位置から再開する機能(レジューム)を備えていたりするなど、動作面での信頼性に乏しいネットワークでも確実に実行する機能が用意されています。
シンプルなファイルダウンローダー機能を提供するコマンドなので、他のコマンドやツールと組み合わせて、チェックツールに使ったり、ちょっとした操作を簡略化する際にも利用できます。
書式はシンプルで、引数にダウンロード対象ファイルのURLを指定するだけでも動作します。必要に応じて、ダウンロード対象ファイルの拡張子やディレクトリ作成の有無、リトライ回数などをオプションで指定できます。
wgetは、起動時にシステムワイドな設定ファイル(「/etc/wgetrc」など)を読み込んでから、ホームディレクトリ以下の設定「$HOME/.wgetrc(~/.wgetrc)」を読み込みます。試行回数などの初期設定を個別に行う場合は、「~/.wgetrc」ファイルを作成し、そこに記述しておくと良いでしょう。
wgetコマンドの主なオプションは次の通りです。
オプション | 意味 |
---|---|
-b | 処理をバックグラウンドで行う |
-c | 処理が中断されたファイルのダウンロードを再開する |
-i ファイル | ダウンロード対象URLを指定したファイルから読み込む |
-l 数値 | リンクをたどる階層数を指定する |
-p | HTMLを表示するのに必要な画像・音声ファイルを含めて取得する |
-q 数値 | 取得するファイルの最大容量を指定する(k=キロバイト、m=メガバイト) |
-r | 再帰的にダウンロードする |
-t 数値 | リトライ回数を指定する |
-w 秒数 | リトライまでの時間を指定する |
-x | ディレクトリを作成する |
-nc | 既に取得済のファイルはダウンロードしない |
-nd | ディレクトリを作成せず、取得したファイルを全て同一ディレクトリに保存する |
-nv | 進捗を表示せず、最後に結果だけを標準エラー出力する |
-A 拡張子 | ダウンロードするファイルの拡張子を指定する |
-R 拡張子 | ダウンロードしないファイルの拡張子を指定する |
-H | 別のドメインからもダウンロードを行う |
-O ファイル | 結果をファイルに書き出す(引数に「-」を指定すると標準出力) |
-P パス | 保存先とするディレクトリを指定する |
-S | レスポンスヘッダを表示する |
-T 秒数 | タイムアウトまでの時間を指定する |
--http-user=ユーザー名 | HTTPベーシック認証のユーザー名を指定する |
--http-paswd=パスワード | HTTPベーシック認証のパスワードを指定する |
オーソドックスなファイルのダウンロードを行う場合は、引数にURLを与えて実行します。URLの末尾がファイル名でなくディレクトリ名の場合は、index.htmlというファイル名で保存します。URLにはHTTPだけでなくFTPも指定できます。
カレントディレクトリに同名ファイルが存在する場合は、「<ファイル名>.1」のように別名で保存します。「ファイル名.1」もある場合は「ファイル名.2」、そして「ファイル名.2」もある場合は「ファイル名.3」と、初期値では既存のファイルを上書きすることはありません。
下のサンプルでは架空のホスト「dl.atmarkit.co.jp」からデータをダウンロードする場合の例です。
$ wget http://dl.atmarkit.co.jp/files/r174650.bz2 --2015-02-24 12:56:51-- http://dl.atmarkit.co.jp/files/r174650.bz2 dl.atmarkit.co.jp (dl.atmarkit.co.jp) をDNSに問いあわせています... 52.68.143.32 dl.atmarkit.co.jp (dl.atmarkit.co.jp)|52.68.143.32|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 48116591 (46M) [application/x-bzip2] `r174650.bz2' に保存中 4% [> ] 2,058,579 305KB/s 残り3m 37s
wgetにはリトライ(レジューム)機能があり、「-c」オプションに続けてURLを指定するだけで、前回ダウンロードを中断したときの位置から再開できます。回線の品質に難がありタイムアウトが発生するときなど、安定するのを待ってダウンロードをやり直すときに利用します。ただし、一部のサーバーでは、レジュームに対応していないため、その場合は最初からやり直しとなります。
$ wget -c http://dl.atmarkit.co.jp/images/cdrom.iso --2015-02-24 13:35:38-- http://dl.atmarkit.co.jp/files/r174650.bz2 dl.atmarkit.co.jp (dl.atmarkit.co.jp) をDNSに問いあわせています... 52.68.143.32 dl.atmarkit.co.jp (dl.atmarkit.co.jp)|52.68.143.32|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 206 Partial Content 長さ: 48116591 (46M), 31686126 (30M) 残っています [application/x-bzip2] `r174650.bz2' に保存中 46% [+++++++++++++===> ] 22,201,734 1.28MB/s 残り23s
wgetでは「-r」オプションを指定すると、サイトの内容をリンク先も含めて全て取得できます(再帰ダウンロード)。サイト全体を対象としても全てのファイルを必要としない場合は、「-l」オプションを使い階層の深さ(再帰回数)を指定します。
「-A」オプションを使うと、ダウンロード対象とするファイルを拡張子で絞り込むことができます。拡張子がjpgのファイルのみを対象とする場合は「-A jpg」、拡張子「jpg」と「png」の両方を対象とする場合は「-A jpg,png」のようにカンマで区切ることで複数指定することも可能です。その反対に、特定の拡張子を持つファイルのみダウンロード対象外とする場合は、「-R」オプションを利用します。
下の例では、架空のホスト「http://www.foobar.jp/pictures/」にある、拡張子「jpg」「png」ファイルを再起的に取得しています。「l3」オプションを付けることで、指定したURLのトップから数えて3階層目までのファイルを対象としています。
$ wget -r -l3 -A jpg,png http://www.foobar.jp/pictures/
Copyright © ITmedia, Inc. All Rights Reserved.