「公式サイトから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
# ディレクトリ + 別名の組み合わせ
wget -P ~/downloads/ -O 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.1/ubuntu-24.04.1-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 の方が出力の制御がしやすい)
スクリプトでの活用例
複数バージョンのファイルを一括取得
#!/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.1/ubuntu-24.04.1-desktop-amd64.iso"
EXPECTED_SHA256="<公式サイトで確認したSHA256ハッシュを入力>"
echo "Downloading..."
wget -q --show-progress -O ubuntu.iso "$URL"
echo "Verifying checksum..."
ACTUAL_SHA256=$(sha256sum ubuntu.iso | awk '{print $1}')
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 URLだけ。保存先を変えたい時は-Oか-P - 大きなファイルは
-bでバックグラウンド実行 - 途切れたらすぐ
-cで再開 - 複数ファイルを落とすなら URLリストを作って
-i - サイトをまるごとミラーするなら
--mirrorフラグ
自動化のスクリプトに組み込むと特に力を発揮する。cron + wget -N の組み合わせで、特定ファイルの定期取得が簡単に実現できる。