32blogby StudioMitsu
Archive10 min read

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

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

「公式サイトから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

# ディレクトリ + 別名の組み合わせ
wget -P ~/downloads/ -O 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.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 オプションで続きから再開できる。

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 の方が出力の制御がしやすい)

スクリプトでの活用例

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

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.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 証明書エラーが出る場合

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

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