「プロキシ環境でwgetが通らない」「SSL証明書のエラーで先に進めない」
Linuxサーバーの構築や運用では、パッケージのソースコードやログ解析ツールなど、Webからファイルをダウンロードする場面が頻繁にあります。
この記事では、RHEL 9.4 / Ubuntu 24.04 LTSで動作確認した上で、
wget コマンドの実践的な使い方を解説します。基本的なダウンロードから、中断の再開(-c)、再帰ダウンロード、ミラーリング、プロキシ設定、認証付きサーバー(Basic認証・Cookie認証)、複数URLの一括取得、cron運用、トラブルシュートまでを20年以上サーバーを運用してきた経験に基づいてカバーしました。よく比較される curl との使い分けにも触れていますので、現場で迷わず使えるようになるはずです。この記事のポイント
・wget URL の1行で大半のダウンロードは完結する
・wget -c で中断したDLを途中から再開できる
・wget -r -np や --mirror でサイトを丸ごとミラーリングできる
・curlとの使い分けは「ファイル取得=wget/API叩き=curl」が基本
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
wgetとは?Webからファイルを取得するコマンド
wget(ダブリューゲット)は、HTTP・HTTPS・FTPプロトコルに対応したファイルダウンロード専用のコマンドです。URLを指定するだけでファイルを取得でき、対話的な操作が一切不要なため、シェルスクリプトやcronジョブからの自動ダウンロードに最適です。# 基本書式 # wget [オプション] URL
wget がインストールされていない場合は、以下のコマンドでインストールしてください。最小構成のRHEL系サーバーや一部のコンテナイメージには入っていないことがあります。# RHEL / Rocky Linux / AlmaLinux系 # sudo dnf install wget # Ubuntu / Debian系 # sudo apt install wget # バージョンの確認 # wget --version | head -1 # 実行結果の例 GNU Wget 1.21.3 built on linux-gnu.
基本的な使い方(ファイルをダウンロードする)
1. URLを指定してダウンロードする
最もシンプルな使い方は、URLをそのまま引数に渡す方法です。カレントディレクトリにファイルが保存されます。# HTTPSでファイルをダウンロードする # wget https://example.com/files/sample.tar.gz # 実行結果の例 --2026-04-19 14:02:18-- https://example.com/files/sample.tar.gz Resolving example.com (example.com)... 93.184.216.34 Connecting to example.com (example.com)|93.184.216.34|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 12582912 (12M) [application/x-gzip] Saving to: 'sample.tar.gz' sample.tar.gz 100%[===================>] 12.00M 3.45MB/s in 3.5s 2026-04-19 14:02:22 (3.45 MB/s) - 'sample.tar.gz' saved [12582912/12582912]
wget の良さです。ダウンロードしたtarballの展開手順は tarコマンドの実用例 にまとめてあります。2. ファイル名を指定して保存する(-O)
ダウンロード元のファイル名が長い場合や、わかりやすい名前に変えたい場合は-O(Output document)オプションを使います。出力をパイプで他コマンドに流したい時にも使います。# ファイル名を指定してダウンロードする # wget -O httpd-latest.tar.gz https://example.com/httpd-2.4.62.tar.gz # 標準出力に流して別コマンドへ渡す(- を指定) # wget -qO- https://example.com/install.sh | sudo bash
-O は大文字です。小文字の -o はログファイルの出力先を指定するオプションなので、間違えないようにしてください。-qO- は進捗を抑制するquietモードと、ファイルではなく標準出力に書き出す指定の組み合わせです。インストールスクリプトをそのままbashに食わせる定番イディオムですが、信頼できないURLに対して使うのは絶対に避けてください。3. 保存先ディレクトリを指定する(-P)
カレントディレクトリではなく、特定のディレクトリにダウンロードしたい場合は-P(Prefix)オプションを使います。# /usr/local/src/ にダウンロードする # wget -P /usr/local/src/ https://example.com/httpd-2.4.62.tar.gz
wget が自動で作成します。ソフトウェアのソースコードは /usr/local/src/ にダウンロードするのが慣例です。構築手順書にもこの形式で書かれていることが多いので、覚えておきましょう。ダウンロードの中断と再開(-c オプション)
大容量のファイルをダウンロードしている途中で回線が切れた、あるいはSSHセッションが切断されたという経験はないでしょうか。wget の -c(continue)オプションを使えば、途中から再開できます。# 中断したダウンロードを途中から再開する # wget -c https://example.com/iso/rocky-9.4-x86_64-dvd.iso # 実行結果の例(途中から再開された場合) HTTP request sent, awaiting response... 206 Partial Content Length: 10737418240 (10G), 7516192768 (7.0G) remaining Saving to: 'rocky-9.4-x86_64-dvd.iso' rocky-9.4-x86_64-dvd.iso 31%[+++++========> ] 3.10G 8.20MB/s
-c を付けると、ローカルに既に存在するファイルのサイズを確認し、サーバー側のファイルとの差分だけをダウンロードします。HTTPステータスが「206 Partial Content」になっていれば、サーバー側がレンジリクエストに対応しており、続きから取得できています。数GBのISOファイルやカーネルソースをダウンロードする場合は、最初から -c を付けておくのが安全です。※ サーバー側がレンジリクエスト(部分ダウンロード)に対応していない場合は、ステータス200で最初からダウンロードし直しになります。その場合は素直に時間を確保しましょう。
再帰ダウンロード(サイト全体を取得する)
4. Webサイトを丸ごとダウンロードする(-r)
-r(recursive)オプションを使うと、指定したURLからリンクをたどって再帰的にファイルをダウンロードできます。# サイトを再帰的にダウンロードする(デフォルトは5階層まで) # wget -r https://www.example.com/docs/
-l(level)オプションで指定してください。# 2階層までに制限してダウンロードする # wget -r -l 2 https://www.example.com/docs/ # 階層制限なし(サイト全体を取得する場合) # wget -r -l 0 https://www.example.com/docs/
-r は大量のリクエストを送信するため、相手サーバーに負荷をかけます。--wait=秒数 でリクエスト間隔を空ける、-np(no-parent)で親ディレクトリへの遡りを防止するなど、マナーを守って使用してください。-np が効いていないと、https://example.com/のトップにまで遡って延々とDLしてしまうことがあります。5. 再帰ダウンロードの実用的な組み合わせ
実務では-r を単体で使うことは少なく、以下のようにオプションを組み合わせるのが一般的です。# 社内ドキュメントサイトをオフライン閲覧用に取得する # wget -r -l 3 -np -k -p --wait=1 https://docs.internal.example.com/
・-r:再帰的にダウンロードする
・-l 3:3階層までに制限する
・-np:親ディレクトリに遡らない
・-k:ローカルで閲覧できるようにリンクを変換する
・-p:ページ表示に必要な画像やCSSも取得する
・--wait=1:リクエスト間隔を1秒空ける
6. オフライン閲覧用にサイトを丸ごとミラーリング(--mirror)
社内Wikiの退役、外部ドキュメントのオフライン保存など、サイト構造ごとそっくり取得したい場面で使います。# サイト丸ごとミラー(CSS・画像・リンク変換まで含む) # wget --mirror --convert-links --adjust-extension \ # --page-requisites --no-parent \ # https://example.com/docs/
-r -N -l inf --no-remove-listing と同等。再帰+タイムスタンプ比較・--convert-links:HTML内リンクをローカルファイルへの相対参照に書き換え
・--adjust-extension:text/htmlに.htmlを補完
・--page-requisites:CSS・画像・JSなど表示に必要なリソースも一緒に取得
7. 取得対象のファイル種別を絞る(-A/-R)
必要なファイル形式だけをピンポイントで取得したい場合は-A(accept)と -R(reject)でファイル拡張子のホワイトリスト・ブラックリストを指定できます。# PDFとjpgだけ取得 # wget -r -l 2 -np -A pdf,jpg https://example.com/docs/ # 逆にCSSとJSは除外 # wget -r -l 2 -np -R css,js https://example.com/docs/
出力制御とバックグラウンド実行
8. 進捗表示を消す(-q)
-q(quiet)オプションを付けると、プログレスバーやメッセージが一切表示されなくなります。シェルスクリプトやcronジョブでwgetを使う場合に便利です。# 進捗非表示でダウンロードする # wget -q https://example.com/archive.tar.gz # 進捗は非表示だが、サーバーの応答ヘッダーだけは表示する # wget -q --show-progress https://example.com/archive.tar.gz
9. バックグラウンドでダウンロードする(-b)
大容量ファイルのダウンロード中もターミナルを使い続けたい場合は、-b(background)オプションを使います。# バックグラウンドでダウンロードを実行する # wget -b https://example.com/large-image.iso Continuing in background, pid 12345. Output will be written to 'wget-log'.
wget-log ファイルに記録されます。tail -f wget-log で進捗を確認できます。10. 帯域制限をかける(--limit-rate)
本番サーバーで大容量ファイルをダウンロードする場合、回線を圧迫しないように帯域制限をかけることができます。# ダウンロード速度を500KB/sに制限する # wget --limit-rate=500k https://example.com/large-image.iso # 2MB/sに制限する # wget --limit-rate=2m https://example.com/large-image.iso
--limit-rate=1m 程度、夜間バッチでは無制限、といった使い分けが現実的です。本番環境のネットワーク帯域を使い切ってサービスに影響を出すのは絶対に避けなければなりません。大きなファイルをダウンロードする際は、--limit-rate を付ける習慣をつけましょう。SSL証明書とセキュリティ
11. SSL証明書エラーを回避する(--no-check-certificate)
開発環境や検証環境では、自己署名証明書(オレオレ証明書)を使っているサーバーからファイルをダウンロードする場面があります。このとき、そのままwgetを実行すると以下のようなエラーが出ます。ERROR: cannot verify example.com's certificate, issued by '/CN=example.com': Self-signed certificate encountered.
--no-check-certificate オプションを使います。# SSL証明書の検証をスキップしてダウンロードする # wget --no-check-certificate https://dev-server.internal/package.tar.gz
プロキシ環境でのダウンロード
企業のネットワークでは、プロキシサーバー経由でしか外部にアクセスできない環境が多くあります。wget でプロキシを使用するには、環境変数を設定する方法と .wgetrc に記述する方法の2つがあります。12. 環境変数でプロキシを設定する
一時的にプロキシを使いたい場合は、環境変数を設定してからwgetを実行します。# HTTPプロキシを設定する # export http_proxy=http://proxy.example.com:8080 # export https_proxy=http://proxy.example.com:8080 # export no_proxy='localhost,127.0.0.1,.example.internal' # プロキシ経由でダウンロードする # wget https://example.com/archive.tar.gz
no_proxy に社内ドメインを並べておくと、社内サーバーへのアクセスだけプロキシを経由させない制御ができます。13. .wgetrcでプロキシを恒久的に設定する
毎回環境変数を設定するのが手間な場合は、ホームディレクトリに.wgetrc ファイルを作成します。# ~/.wgetrc に以下を記述する http_proxy = http://proxy.example.com:8080 https_proxy = http://proxy.example.com:8080 use_proxy = on
wget を実行するたびに自動的にプロキシ経由でアクセスします。システム全体に適用する場合は /etc/wgetrc に記述してください。14. 認証付きプロキシを使う
プロキシ自体に認証が必要な環境では、--proxy-user と --proxy-password を指定します。# 認証付きプロキシ経由でダウンロードする # wget --proxy-user=alice --proxy-password='SecretPass123' \ # https://example.com/files/sample.tar.gz
認証付きサーバーからダウンロードする
社内のNexus、プライベートなNginx配布サーバー、HTTP Basic認証で守られたファイルサーバー——現場では認証付きURLからのDLが頻繁に発生します。15. ユーザー名とパスワードを指定する
Basic認証が設定されたサーバーからダウンロードする場合は、--user と --password オプションを使います。# Basic認証付きサーバーからダウンロードする # wget --user=admin --password=secret123 https://secure.example.com/file.tar.gz
~/.bash_history)に残り、ps aux で他ユーザーから見える可能性もあります。セキュリティ上の懸念がある場合は、--ask-password で対話的にパスワードを入力する方法を使ってください。# パスワードを対話的に入力する # wget --user=admin --ask-password https://secure.example.com/file.tar.gz
--ftp-user と --ftp-password を使います。# FTPサーバーから認証付きでダウンロードする # wget --ftp-user=ftpuser --ftp-password=ftppass ftp://ftp.example.com/pub/file.tar.gz
16. .netrcに認証情報をまとめて書いておく(推奨)
複数回使うURLや、スクリプトに組み込んで繰り返し使う場合は、~/.netrc に認証情報をまとめてパーミッション600で保護するのが定石です。# ~/.netrc に以下を記述する machine repo.example.internal login alice password SecretPass123 # パーミッションを600にする(他人に読まれないようにする) # chmod 600 ~/.netrc # 認証情報を指定せずにアクセスできる # wget https://repo.example.internal/builds/app-1.2.3.rpm
.netrc はwget以外にもcurlやftpなど多くのコマンドが参照してくれる標準的な仕組みです。一度設定しておくと運用が楽になります。17. Cookieを使ったセッション認証
ログインフォーム経由でしかアクセスできないURLは、ブラウザで取得したCookieを食わせるか、wget 自身でログインしてCookieを保存します。# ブラウザの拡張機能でcookies.txtを書き出してから # wget --load-cookies cookies.txt \ # https://portal.example.com/private/report.csv # wget自身でログインしてCookieを保存する場合 # wget --save-cookies cookies.txt --keep-session-cookies \ # --post-data 'user=alice&pass=SecretPass123' \ # https://portal.example.com/login # 保存したCookieで認証済みページにアクセス # wget --load-cookies cookies.txt \ # https://portal.example.com/private/report.csv
応用・実務Tips
18. 複数URLを一括ダウンロードする(-i)
URLリストをテキストに書いておき、まとめて取得します。夜間バッチでミラーリポジトリを更新する時の定番パターンです。# urls.txt に1行1URLで列挙 # cat urls.txt https://example.com/files/a.tar.gz https://example.com/files/b.tar.gz https://example.com/files/c.tar.gz # 一括ダウンロード(失敗してもスキップして続行、-cでレジューム対応) # wget -i urls.txt -c
19. cron運用ではログを必ず残す
定期ダウンロードをcronに仕込むときは、-N(タイムスタンプ比較で更新があるときのみ取得)と -a(ログファイルに追記)の組み合わせが王道です。# /etc/cron.d/mirror-daily # 毎日3:00に最新版を取得、ログを残す 0 3 * * * root /usr/bin/wget -q -N -P /var/repo/mirror/ \ -a /var/log/wget-mirror.log \ https://example.com/repo/latest.tar.gz
・-N:タイムスタンプ比較で更新があれば取得
・-a ログファイル:追記モードでログ記録(
-o は上書きなので注意)20年以上サーバーを運用してきた経験から言うと、現場で本当に効くのは
-c でレジューム、-N で差分更新、-i でリスト一括処理の地味な3点セットです。これらをcronと組み合わせるだけで、ミラーリングや定期取得の自動化が一気に楽になります。wgetとcurlの使い分け
「wget と curl、どちらを使えばいいのか?」という質問は非常に多いです。結論から言うと、用途によって使い分けるのが正解です。| 比較項目 | wget | curl |
|---|---|---|
| 得意な用途 | ファイルのダウンロード | API通信・データ送信 |
| 再帰ダウンロード | 対応(-r オプション) | 非対応 |
| 中断からの再開 | 対応(-c オプション) | 対応(-C - オプション) |
| 対応プロトコル数 | HTTP/HTTPS/FTP | 非常に多い(SCP, SMTP等も対応) |
| 出力先のデフォルト | ファイルに保存 | 標準出力(画面)に表示 |
| POST/PUT等のHTTPメソッド | 限定的 | 全メソッド対応 |
・ファイルをダウンロードしたい:
wget が向いている・サイトを丸ごと取得したい:
wget 一択(curlに再帰ダウンロード機能はない)・REST APIを叩きたい:
curl が向いている・レスポンスヘッダーを確認したい:
curl が向いている迷った時は「ファイルを残したい→wget/レスポンスを処理したい→curl」で選ぶと外しません。基本コマンド全般の整理は Linux基本コマンドの解説 も参考にしてください。
トラブルシュート
「Unable to resolve host address」が出た時の対処法
wget でよく遭遇するのが名前解決系のエラーです。落ち着いて切り分けていきます。# よくあるエラー # wget https://example.com/files/sample.tar.gz --2026-04-19 14:18:33-- https://example.com/files/sample.tar.gz Resolving example.com (example.com)... failed: Name or service not known. wget: unable to resolve host address 'example.com' # 切り分け手順 # 1) 名前解決ができているか # dig example.com +short # nslookup example.com # 2) 外向き通信が可能か # curl -I https://www.google.com # 3) /etc/resolv.conf が空でないか # cat /etc/resolv.conf
「403 Forbidden」が返される場合
一部のWebサーバーは、wget のUser-Agentを検出してアクセスを拒否します。リファラチェックが原因のケースもあるため、--user-agent と --referer を組み合わせて試してください。# User-Agentを指定してダウンロードする # wget --user-agent="Mozilla/5.0 (X11; Linux x86_64)" https://example.com/file.tar.gz # リファラも合わせて指定する # wget --referer="https://example.com/" \ # --user-agent="Mozilla/5.0" \ # https://example.com/files/sample.tar.gz
「404 Not Found」が出る
URLそのものが間違っている、または公開期間が終了しているケースです。ブラウザで同じURLを開いて確認するのが一番早い切り分けです。タイムアウトで失敗する場合(-T オプション)
ネットワークが不安定な環境では、接続や応答がタイムアウトしてダウンロードが失敗することがあります。-T(timeout)オプションでタイムアウト値を調整し、--tries でリトライ回数を設定しましょう。# タイムアウトを60秒に設定し、3回リトライする # wget -T 60 --tries=3 https://example.com/large-file.tar.gz # リトライ回数を無制限にする(ダウンロード完了まで何度でも再試行) # wget -T 60 --tries=0 -c https://example.com/large-file.tar.gz # 接続・読み取り・DNSを個別に指定 # wget --connect-timeout=30 --read-timeout=60 --dns-timeout=10 \ # -c https://example.com/large-file.tar.gz
-T は「接続タイムアウト」「読み取りタイムアウト」「DNSタイムアウト」の3つを一括で設定します。それぞれ個別に設定したい場合は --connect-timeout、--read-timeout、--dns-timeout を使ってください。「Unable to establish SSL connection」が出る場合
古いバージョンのwget では、TLS 1.2以降にしか対応していないサーバーに接続できないことがあります。まず wget のバージョンと、相手サーバーの証明書情報を確認してください。# wgetのバージョンを確認する # wget --version | head -1 # サーバーの証明書を直接確認する # openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null \ # | openssl x509 -noout -dates -subject # どうしても急ぐ時の応急処置(推奨はしない) # wget --no-check-certificate https://example.com/files/sample.tar.gz
--no-check-certificate で対処できます。本記事のまとめ
wget コマンドの基本から応用までを解説しました。以下にコマンド早見表をまとめます。| やりたいこと | コマンド |
|---|---|
| URLを指定してダウンロード | wget URL |
| ファイル名を指定して保存 | wget -O ファイル名 URL |
| 標準出力に流してパイプ処理 | wget -qO- URL | sudo bash |
| 保存先ディレクトリを指定 | wget -P ディレクトリ URL |
| 中断したダウンロードを再開 | wget -c URL |
| 再帰ダウンロード(階層指定) | wget -r -l 階層数 URL |
| サイト丸ごとミラーリング | wget --mirror --convert-links --no-parent URL |
| 拡張子でホワイトリスト取得 | wget -r -l 2 -np -A pdf,jpg URL |
| SSL証明書エラーを回避 | wget --no-check-certificate URL |
| 進捗を非表示にする | wget -q URL |
| バックグラウンドで実行 | wget -b URL |
| 帯域制限をかける | wget --limit-rate=500k URL |
| タイムアウトとリトライを指定 | wget -T 60 --tries=3 URL |
| User-Agentを指定する | wget --user-agent="文字列" URL |
| 認証付きサーバーからダウンロード | wget --user=ユーザー名 --password=パスワード URL |
| 認証付きプロキシ経由でダウンロード | wget --proxy-user=ユーザー名 --proxy-password=パスワード URL |
| URLリストを一括ダウンロード | wget -i urls.txt -c |
| 更新があれば取得(cron向け) | wget -q -N -P /var/repo/ -a /var/log/wget.log URL |
wgetだけでなく、サーバー構築に必要なコマンドを体系的に学びませんか?
wgetでのファイルダウンロードは、サーバー構築作業のほんの一部です。構築から運用まで、現場で本当に必要なスキルを身につけたいなら、断片的な情報を寄せ集めるより体系的に学ぶのが近道です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:起動時に「LI」とだけ表示され停止してしまう
- 前のページへ:passwdコマンドでLinuxのパスワードを変更する方法|ロック・有効期限の設定も
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます