32blogby Studio Mitsu

wgetコマンド完全ガイド:ファイルダウンロードから自動化まで

wgetの基本から、オプション活用・curlとの使い分け・スクリプト組み込みまで実例付きで解説。ミラーリングやバッチDLも対応。

by omitsu17 min read
目次

wget は HTTP/HTTPS/FTP経由でファイルをダウンロードするCLIツールだ。wget URL だけでファイルを取得でき、再帰ダウンロード・中断再開・バックグラウンド実行にも対応する。

「公式サイトからLinuxイメージをダウンロードしたい」「大量のファイルを一括で取得したい」「サーバー上でコマンドだけでファイルを落としたい」

こういう場面で活躍するのが wget だ。GUIのブラウザが使えない環境でも、SSHで接続したサーバー上でも動く。スクリプトに組み込んで自動化もできる。

今回は wget の基本から実践的な使い方まで、実際に動かせるコマンド例を交えながら解説する。

wget とは

wget は HTTP、HTTPS、FTP プロトコルを通じてファイルをダウンロードする CLI ツールだ。GNU Wget とも呼ばれ、オープンソースで開発されている。

主な特徴:

  • ノンインタラクティブ動作:ユーザーが操作しなくてもバックグラウンドで動き続ける
  • 再開サポート:途中で切れたダウンロードを続きから再開できる
  • 再帰ダウンロード:Webサイトをまるごとミラーリングできる
  • プロキシサポート:プロキシ環境でも動作する
  • ほぼ全ての Linux / macOS にプリインストール済み

インストール確認と入手方法

まず wget が入っているか確認する。

bash
wget --version

バージョンが表示されれば問題ない。入っていない場合はインストールする。

bash
# Debian / Ubuntu
sudo apt install wget

# CentOS / RHEL 系
sudo yum install wget

# Fedora
sudo dnf install wget

# macOS(Homebrew 経由)
brew install wget

基本的な使い方

ファイルを1つダウンロードする

bash
wget https://example.com/file.zip

カレントディレクトリに file.zip が保存される。ダウンロード中は進捗バーが表示される。

保存先・ファイル名を指定する

bash
# 別名で保存
wget -O myfile.zip https://example.com/file.zip

# 特定のディレクトリに保存
wget -P ~/downloads/ https://example.com/file.zip

# ディレクトリ指定 + 別名(-O にフルパスを指定する)
wget -O ~/downloads/setup.zip https://example.com/file.zip

バックグラウンドでダウンロードする

ダウンロードをバックグラウンドで走らせ、ターミナルを引き続き使いたい場合。

bash
wget -b https://example.com/largefile.iso

ログは wget-log というファイルに保存される。進捗を確認するには:

bash
tail -f wget-log

よく使うオプション一覧

オプション意味
-O ファイル名保存先ファイル名を指定
-P ディレクトリ保存先ディレクトリを指定
-bバックグラウンド実行
-c中断したダウンロードを再開
-q出力を抑制(静音モード)
--limit-rate=RATE速度制限(例: --limit-rate=1m
-r再帰ダウンロード
-l DEPTH再帰の深さを指定
--no-check-certificateSSL証明書の検証をスキップ
-i ファイルURLリストからまとめてDL
--user-agent=STRINGUser-Agent を指定
--header=STRINGHTTPヘッダを追加
-Nタイムスタンプ比較して更新があれば取得

実践的なユースケース

URLリストから一括ダウンロード

複数のファイルをまとめて落とすなら、URLを1行1つで書いたテキストファイルを用意して -i オプションを使う。

bash
# urls.txt を作る
cat > urls.txt << EOF
https://releases.ubuntu.com/24.04.4/ubuntu-24.04.4-desktop-amd64.iso
https://example.com/data1.csv
https://example.com/data2.csv
https://example.com/data3.csv
EOF

# まとめてダウンロード
wget -i urls.txt -P ~/downloads/

途中で切れたダウンロードを再開する

ダウンロード中に接続が切れた場合、-c オプションで続きから再開できる。

bash
# 最初のダウンロード(途中で Ctrl+C など)
wget https://example.com/bigfile.iso

# 再開
wget -c https://example.com/bigfile.iso

ファイルが部分的に存在していれば、続きから取得する。存在しなければ最初からになる。

帯域制限をかける

サーバーや自分の帯域を占領しないよう速度制限をかける。

bash
# 1MB/s に制限
wget --limit-rate=1m https://example.com/file.iso

# 500KB/s に制限
wget --limit-rate=500k https://example.com/file.iso

認証が必要なサイトからダウンロードする

HTTP Basic 認証が必要な場合:

bash
wget --user=username --password=password https://example.com/protected/file.zip

パスワードをコマンド引数に直書きするとシェル履歴に残る。セキュリティが気になる場合は --password を省略すると対話式で入力を求められる。

bash
wget --user=username https://example.com/protected/file.zip
# パスワードを入力するよう促される

FTP の場合も同様:

bash
wget ftp://ftp.example.com/pub/file.tar.gz
wget --ftp-user=user --ftp-password=pass ftp://ftp.example.com/private/file.tar.gz

Webサイトをまるごとミラーリングする

サイト全体をローカルにコピーしたい場合(オフライン閲覧やバックアップ用):

bash
wget --mirror \
     --convert-links \
     --adjust-extension \
     --page-requisites \
     --no-parent \
     https://example.com/

各オプションの意味:

  • --mirror(または -m):再帰ダウンロード + タイムスタンプチェック + 無限深度
  • --convert-links:オフラインで見られるよう相対リンクに変換
  • --adjust-extension.html 拡張子を自動付与
  • --page-requisites:CSS・画像・JSなどを一緒に取得
  • --no-parent:指定パスより上の階層には上がらない

定期的にファイルを更新する(タイムスタンプ比較)

サーバー上のファイルが更新されたときだけ取得し直す場合:

bash
wget -N https://example.com/data.csv

ローカルにすでにあって、サーバー側が新しくなければスキップされる。cron と組み合わせると定期更新の仕組みが簡単に作れる。

bash
# crontab に追加(毎日 3:00 に実行)
0 3 * * * wget -N -P /var/data/ https://example.com/data.csv

User-Agent を偽装する

まれに wget からのアクセスをブロックするサーバーがある。ブラウザと同じ User-Agent を指定して回避する。

bash
wget --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" \
     https://example.com/file.zip

カスタムヘッダーを付ける(API など)

Authorization ヘッダーが必要な API エンドポイントからファイルを落とす場合:

bash
wget --header="Authorization: Bearer YOUR_TOKEN" \
     --header="Accept: application/json" \
     https://api.example.com/export/data.json

wget と curl の違い:どちらを使うべきか

よく比較される curl との使い分けをまとめる。

用途wgetcurl
シンプルなファイルDL
再帰・ミラーリング✕(非対応)
中断の再開
API 呼び出し
レスポンス操作
バックグラウンドDL△(要 & nohup)
URLリストからまとめてDL◎(-i)△(要スクリプト)

経験則として:

  • ファイルをダウンロードするだけ → wget
  • API を叩いてレスポンスを処理 → curl
  • スクリプトで柔軟に操作 → curl(curl の方が出力の制御がしやすい)

応用テクニック

--spider でリンク切れをチェックする

実際にダウンロードせず、URL の生存確認だけ行う。Web サイトのリンク切れチェックに使える。

bash
# 単一URLの確認
wget --spider https://example.com/page.html
bash
# URLリストからまとめてチェック
wget --spider -i urls.txt 2>&1 | grep -E "broken|200|404"
bash
# サイト全体を再帰的にチェック(ダウンロードなし)
wget --spider --recursive --no-directories --level=2 \
     https://example.com/ 2>&1 | grep -B1 "broken"

--spider は HEAD リクエストだけ送るので、帯域をほとんど使わない。CI/CD パイプラインでドキュメントサイトのリンク切れを自動検出する仕組みに組み込める。

wgetrc で設定を永続化する

毎回同じオプションを打つのが面倒なら、~/.wgetrc に書いておく。

text
# ~/.wgetrc
# タイムスタンプ保持
timestamping = on

# リトライ回数
tries = 3

# 接続タイムアウト(秒)
timeout = 30

# 帯域制限(デフォルト)
limit_rate = 2m

# ログファイル
logfile = /tmp/wget.log

# robots.txt に従う
robots = on
bash
# wgetrc の設定が自動適用される
wget https://example.com/file.zip

# 一時的に設定を上書きする
wget --no-config https://example.com/file.zip
wget --limit-rate=0 https://example.com/file.zip

--no-config で wgetrc を完全に無視することもできる。チーム共有の設定は /etc/wgetrc に書く。

--rejected-log で失敗を記録する

大量のファイルをダウンロードするとき、何が失敗したかを後から確認できる。

bash
# 失敗したURLをログに記録
wget --recursive --level=1 \
     --rejected-log=rejected.log \
     https://example.com/downloads/

# 後から失敗したURLだけリトライ
cat rejected.log | awk '{print $1}' | wget -i -

バックグラウンドで大ファイルをダウンロードする

bash
# -b でバックグラウンド実行(ログは wget-log に出力)
wget -b https://example.com/large-file.iso

# ログを確認
tail -f wget-log

# 独自のログファイルを指定
wget -b -o download.log https://example.com/large-file.iso

SSH セッションが切れてもダウンロードを続けたい場合は、tmux と組み合わせるか、nohup を使う。

bash
nohup wget https://example.com/large-file.iso &

スクリプトでの活用例

wget はシェルスクリプトとの相性が良い。以下の例を参考に、ダウンロード処理を自動化できる。

複数バージョンのファイルを一括取得

bash
#!/bin/bash

BASE_URL="https://example.com/releases"
VERSIONS=("1.0.0" "1.1.0" "1.2.0" "2.0.0")
DEST_DIR="./downloads"

mkdir -p "$DEST_DIR"

for VERSION in "${VERSIONS[@]}"; do
  FILE="myapp-${VERSION}.tar.gz"
  URL="${BASE_URL}/${VERSION}/${FILE}"

  echo "Downloading ${FILE}..."
  wget -q -P "$DEST_DIR" "$URL"

  if [ $? -eq 0 ]; then
    echo "  OK: ${FILE}"
  else
    echo "  FAILED: ${FILE}"
  fi
done

echo "Done."

ダウンロード後にチェックサムを検証する

bash
#!/bin/bash

# バージョン番号とハッシュ値は公式サイトで最新のものを確認してください
# https://releases.ubuntu.com/
URL="https://releases.ubuntu.com/24.04.4/ubuntu-24.04.4-desktop-amd64.iso"
EXPECTED_SHA256="<公式サイトで確認したSHA256ハッシュを入力>"

echo "Downloading..."
wget -q --show-progress -O ubuntu.iso "$URL"

echo "Verifying checksum..."
# Linux: sha256sum / macOS: shasum -a 256
if command -v sha256sum &>/dev/null; then
  ACTUAL_SHA256=$(sha256sum ubuntu.iso | awk '{print $1}')
else
  ACTUAL_SHA256=$(shasum -a 256 ubuntu.iso | awk '{print $1}')
fi

if [ "$ACTUAL_SHA256" = "$EXPECTED_SHA256" ]; then
  echo "Checksum OK"
else
  echo "Checksum mismatch! File may be corrupted."
  exit 1
fi

トラブルシューティング

SSL 証明書エラーが出る場合

bash
# 証明書の検証をスキップ(テスト環境向け。本番での使用は注意)
wget --no-check-certificate https://example.com/file.zip

接続タイムアウトを調整したい

bash
# タイムアウトを 30 秒に設定、リトライ 5 回
wget --timeout=30 --tries=5 https://example.com/file.zip

# 無限リトライ
wget --tries=0 https://example.com/file.zip

リダイレクト先が気になるとき(ドライラン)

実際にはダウンロードせず、ヘッダーだけ確認する。

bash
wget --server-response --spider https://example.com/file.zip

wget のセキュリティに関する注意

wget で外部からファイルをダウンロードする以上、セキュリティは無視できない。

wget2 の脆弱性(CVE-2025-69194): GNU Wget2 に CVSS 8.8 の高深刻度脆弱性が報告されている。--force-metalink 使用時のパストラバーサル処理の欠陥により、リモート攻撃者がローカルファイルを上書きできる。wget2 を使っている場合は 2.2.1 以降にアップデートすること。

安全に使うためのポイント:

  • --no-check-certificate を本番環境で常用しない。自己署名証明書のテスト環境に限定する
  • 出所不明の URL からダウンロードしたファイルはチェックサムを必ず検証する(上記のスクリプト例を参照)
  • --user-agent の偽装はサイトの利用規約に違反する可能性がある。スクレイピング目的での使用は規約を確認すること
  • cron で自動ダウンロードを設定する場合、ログを残して定期的に監視する

関連記事

よくある質問

wget と curl はどう使い分ければいい?

ファイルをダウンロードするだけなら wget。再帰ダウンロードやバッチ処理も wget が得意。API を叩いてレスポンスを加工したり、HTTP メソッドを細かく制御する場合は curl を使う。

wget でダウンロードが途中で止まったら?

wget -c URL で中断した地点から再開できる。ローカルに部分ファイルが残っていれば、残りのバイト数だけ取得する。サーバーが Range リクエストに対応していることが前提。

wget でサイト全体をダウンロードするには?

wget --mirror --convert-links --adjust-extension --page-requisites --no-parent URL を使う。--mirror は再帰ダウンロード + タイムスタンプチェック + 無限深度を有効にし、--convert-links でオフライン閲覧用にリンクを変換する。

wget2 と wget 1.x は何が違う?

wget2 は GNU Wget の後継で、HTTP/2 対応・並列ダウンロード・マルチスレッドなど大幅に機能強化されている。ただし wget 1.x と完全な互換性はないため、既存スクリプトからの移行時は動作確認が必要。

wget をプロキシ経由で使うには?

環境変数 http_proxyhttps_proxy を設定するか、~/.wgetrchttp_proxy / https_proxy を記述する。--no-proxy で一時的にプロキシを無視することもできる。

wget でダウンロード速度を制限するには?

--limit-rate=1m(1MB/秒)や --limit-rate=500k(500KB/秒)のように指定する。共有サーバーでの帯域占有を防ぐために、~/.wgetrc にデフォルト値を設定しておくと便利。

wget -O と -P の違いは?

-O ファイル名 は保存先のファイル名を直接指定する。-P ディレクトリ は保存先ディレクトリを指定し、ファイル名は URL から自動的に決まる。

まとめ

wget はシンプルなファイルダウンロードから、定期バッチ処理、サイトミラーリングまで幅広く使えるツールだ。公式マニュアルも充実しているので、オプションの詳細はそちらを参照してほしい。

今日から使えるポイントをおさらい:

  • 基本は wget URL だけ。保存先を変えたい時は -O-P
  • 大きなファイルは -b でバックグラウンド実行
  • 途切れたらすぐ -c で再開
  • 複数ファイルを落とすなら URLリストを作って -i
  • サイトをまるごとミラーするなら --mirror フラグ

自動化のスクリプトに組み込むと特に力を発揮する。cron + wget -N の組み合わせで、特定ファイルの定期取得が簡単に実現できる。