wget は HTTP/HTTPS/FTP経由でファイルをダウンロードするCLIツールだ。wget URL だけでファイルを取得でき、再帰ダウンロード・中断再開・バックグラウンド実行にも対応する。
「公式サイトからLinuxイメージをダウンロードしたい」「大量のファイルを一括で取得したい」「サーバー上でコマンドだけでファイルを落としたい」
こういう場面で活躍するのが wget だ。GUIのブラウザが使えない環境でも、SSHで接続したサーバー上でも動く。スクリプトに組み込んで自動化もできる。
今回は wget の基本から実践的な使い方まで、実際に動かせるコマンド例を交えながら解説する。
wget とは
wget は HTTP、HTTPS、FTP プロトコルを通じてファイルをダウンロードする CLI ツールだ。GNU Wget とも呼ばれ、オープンソースで開発されている。
主な特徴:
- ノンインタラクティブ動作:ユーザーが操作しなくてもバックグラウンドで動き続ける
- 再開サポート:途中で切れたダウンロードを続きから再開できる
- 再帰ダウンロード:Webサイトをまるごとミラーリングできる
- プロキシサポート:プロキシ環境でも動作する
- ほぼ全ての Linux / macOS にプリインストール済み
インストール確認と入手方法
まず wget が入っているか確認する。
wget --version
バージョンが表示されれば問題ない。入っていない場合はインストールする。
# Debian / Ubuntu
sudo apt install wget
# CentOS / RHEL 系
sudo yum install wget
# Fedora
sudo dnf install wget
# macOS(Homebrew 経由)
brew install wget
基本的な使い方
ファイルを1つダウンロードする
wget https://example.com/file.zip
カレントディレクトリに file.zip が保存される。ダウンロード中は進捗バーが表示される。
保存先・ファイル名を指定する
# 別名で保存
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
バックグラウンドでダウンロードする
ダウンロードをバックグラウンドで走らせ、ターミナルを引き続き使いたい場合。
wget -b https://example.com/largefile.iso
ログは wget-log というファイルに保存される。進捗を確認するには:
tail -f wget-log
よく使うオプション一覧
| オプション | 意味 |
|---|---|
-O ファイル名 | 保存先ファイル名を指定 |
-P ディレクトリ | 保存先ディレクトリを指定 |
-b | バックグラウンド実行 |
-c | 中断したダウンロードを再開 |
-q | 出力を抑制(静音モード) |
--limit-rate=RATE | 速度制限(例: --limit-rate=1m) |
-r | 再帰ダウンロード |
-l DEPTH | 再帰の深さを指定 |
--no-check-certificate | SSL証明書の検証をスキップ |
-i ファイル | URLリストからまとめてDL |
--user-agent=STRING | User-Agent を指定 |
--header=STRING | HTTPヘッダを追加 |
-N | タイムスタンプ比較して更新があれば取得 |
実践的なユースケース
URLリストから一括ダウンロード
複数のファイルをまとめて落とすなら、URLを1行1つで書いたテキストファイルを用意して -i オプションを使う。
# 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 オプションで続きから再開できる。
# 最初のダウンロード(途中で Ctrl+C など)
wget https://example.com/bigfile.iso
# 再開
wget -c https://example.com/bigfile.iso
ファイルが部分的に存在していれば、続きから取得する。存在しなければ最初からになる。
帯域制限をかける
サーバーや自分の帯域を占領しないよう速度制限をかける。
# 1MB/s に制限
wget --limit-rate=1m https://example.com/file.iso
# 500KB/s に制限
wget --limit-rate=500k https://example.com/file.iso
認証が必要なサイトからダウンロードする
HTTP Basic 認証が必要な場合:
wget --user=username --password=password https://example.com/protected/file.zip
パスワードをコマンド引数に直書きするとシェル履歴に残る。セキュリティが気になる場合は --password を省略すると対話式で入力を求められる。
wget --user=username https://example.com/protected/file.zip
# パスワードを入力するよう促される
FTP の場合も同様:
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サイトをまるごとミラーリングする
サイト全体をローカルにコピーしたい場合(オフライン閲覧やバックアップ用):
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:指定パスより上の階層には上がらない
定期的にファイルを更新する(タイムスタンプ比較)
サーバー上のファイルが更新されたときだけ取得し直す場合:
wget -N https://example.com/data.csv
ローカルにすでにあって、サーバー側が新しくなければスキップされる。cron と組み合わせると定期更新の仕組みが簡単に作れる。
# crontab に追加(毎日 3:00 に実行)
0 3 * * * wget -N -P /var/data/ https://example.com/data.csv
User-Agent を偽装する
まれに wget からのアクセスをブロックするサーバーがある。ブラウザと同じ User-Agent を指定して回避する。
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 エンドポイントからファイルを落とす場合:
wget --header="Authorization: Bearer YOUR_TOKEN" \
--header="Accept: application/json" \
https://api.example.com/export/data.json
wget と curl の違い:どちらを使うべきか
よく比較される curl との使い分けをまとめる。
| 用途 | wget | curl |
|---|---|---|
| シンプルなファイルDL | ◎ | ○ |
| 再帰・ミラーリング | ◎ | ✕(非対応) |
| 中断の再開 | ◎ | ◎ |
| API 呼び出し | △ | ◎ |
| レスポンス操作 | △ | ◎ |
| バックグラウンドDL | ◎ | △(要 & nohup) |
| URLリストからまとめてDL | ◎(-i) | △(要スクリプト) |
経験則として:
- ファイルをダウンロードするだけ → wget
- API を叩いてレスポンスを処理 → curl
- スクリプトで柔軟に操作 → curl(curl の方が出力の制御がしやすい)
応用テクニック
--spider でリンク切れをチェックする
実際にダウンロードせず、URL の生存確認だけ行う。Web サイトのリンク切れチェックに使える。
# 単一URLの確認
wget --spider https://example.com/page.html
# URLリストからまとめてチェック
wget --spider -i urls.txt 2>&1 | grep -E "broken|200|404"
# サイト全体を再帰的にチェック(ダウンロードなし)
wget --spider --recursive --no-directories --level=2 \
https://example.com/ 2>&1 | grep -B1 "broken"
--spider は HEAD リクエストだけ送るので、帯域をほとんど使わない。CI/CD パイプラインでドキュメントサイトのリンク切れを自動検出する仕組みに組み込める。
wgetrc で設定を永続化する
毎回同じオプションを打つのが面倒なら、~/.wgetrc に書いておく。
# ~/.wgetrc
# タイムスタンプ保持
timestamping = on
# リトライ回数
tries = 3
# 接続タイムアウト(秒)
timeout = 30
# 帯域制限(デフォルト)
limit_rate = 2m
# ログファイル
logfile = /tmp/wget.log
# robots.txt に従う
robots = on
# 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 で失敗を記録する
大量のファイルをダウンロードするとき、何が失敗したかを後から確認できる。
# 失敗したURLをログに記録
wget --recursive --level=1 \
--rejected-log=rejected.log \
https://example.com/downloads/
# 後から失敗したURLだけリトライ
cat rejected.log | awk '{print $1}' | wget -i -
バックグラウンドで大ファイルをダウンロードする
# -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 を使う。
nohup wget https://example.com/large-file.iso &
スクリプトでの活用例
wget はシェルスクリプトとの相性が良い。以下の例を参考に、ダウンロード処理を自動化できる。
複数バージョンのファイルを一括取得
#!/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."
ダウンロード後にチェックサムを検証する
#!/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 証明書エラーが出る場合
# 証明書の検証をスキップ(テスト環境向け。本番での使用は注意)
wget --no-check-certificate https://example.com/file.zip
接続タイムアウトを調整したい
# タイムアウトを 30 秒に設定、リトライ 5 回
wget --timeout=30 --tries=5 https://example.com/file.zip
# 無限リトライ
wget --tries=0 https://example.com/file.zip
リダイレクト先が気になるとき(ドライラン)
実際にはダウンロードせず、ヘッダーだけ確認する。
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 で自動ダウンロードを設定する場合、ログを残して定期的に監視する
関連記事
- curlコマンド完全ガイド — API通信やHTTPデバッグはcurl、ファイルダウンロードはwgetという使い分け
- SSH・rsync実践ガイド — rsync でリモートサーバーとのファイル同期
- cron・systemd timer実践ガイド — wget -N と組み合わせた定期取得の自動化
- シェルスクリプト実践ガイド — wget をスクリプトに組み込む
- tar・圧縮コマンド実践ガイド — ダウンロードしたアーカイブの展開
- CLIツール完全マップ — CLI ツールの全体像と使い分け
よくある質問
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_proxy と https_proxy を設定するか、~/.wgetrc に http_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 の組み合わせで、特定ファイルの定期取得が簡単に実現できる。