「プロキシ環境でwgetが通らない」「SSL証明書のエラーで先に進めない」
Linuxサーバーの構築や運用では、パッケージのソースコードやログ解析ツールなど、Webからファイルをダウンロードする場面が頻繁にあります。
この記事では、Linuxの
wget コマンドについて、基本的なファイルダウンロードから、中断の再開(-c)、再帰ダウンロード、プロキシ設定、認証付きサーバーへの接続、トラブルシュートまでを解説します。よく比較される curl との使い分けについても触れていますので、現場で迷わず使えるようになるはずです。wgetとは?Webからファイルを取得するコマンド
wget(ダブリューゲット)は、HTTP・HTTPS・FTPプロトコルに対応したファイルダウンロード専用のコマンドです。URLを指定するだけでファイルを取得でき、対話的な操作が一切不要なため、シェルスクリプトやcronジョブからの自動ダウンロードに最適です。# 基本書式 # wget [オプション] URL
wget がインストールされていない場合は、以下のコマンドでインストールしてください。# RHEL/CentOS/AlmaLinux # yum install wget # Ubuntu/Debian # apt install wget
基本的な使い方(ファイルをダウンロードする)
1. URLを指定してダウンロードする
最もシンプルな使い方は、URLをそのまま引数に渡す方法です。カレントディレクトリにファイルが保存されます。# HTTPSでファイルをダウンロードする # wget https://example.com/archive.tar.gz
archive.tar.gz が保存されます。2. ファイル名を指定して保存する(-O)
ダウンロード元のファイル名が長い場合や、わかりやすい名前に変えたい場合は-O(Output document)オプションを使います。# ファイル名を指定してダウンロードする # wget -O httpd-latest.tar.gz https://example.com/httpd-2.4.62.tar.gz
-O は大文字です。小文字の -o はログファイルの出力先を指定するオプションなので、間違えないようにしてください。3. 保存先ディレクトリを指定する(-P)
カレントディレクトリではなく、特定のディレクトリにダウンロードしたい場合は-P(Prefix)オプションを使います。# /usr/local/src/ にダウンロードする # wget -P /usr/local/src/ https://example.com/httpd-2.4.62.tar.gz
/usr/local/src/ にダウンロードするのが慣例です。構築手順書にもこの形式で書かれていることが多いので、覚えておきましょう。ダウンロードの中断と再開(-c オプション)
大容量のファイルをダウンロードしている途中で回線が切れた、あるいはSSHセッションが切断されたという経験はないでしょうか。wget の -c(continue)オプションを使えば、途中から再開できます。# 中断したダウンロードを途中から再開する # wget -c https://example.com/large-image.iso
-c を付けると、ローカルに既に存在するファイルのサイズを確認し、サーバー側のファイルとの差分だけをダウンロードします。数GBのISOファイルやカーネルソースをダウンロードする場合は、最初から -c を付けておくのが安全です。※ サーバー側がレンジリクエスト(部分ダウンロード)に対応していない場合は、
-c を付けても最初からダウンロードし直しになります。再帰ダウンロード(サイト全体を取得する)
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)で親ディレクトリへの遡りを防止するなど、マナーを守って使用してください。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. 進捗表示を消す(-q)
-q(quiet)オプションを付けると、プログレスバーやメッセージが一切表示されなくなります。シェルスクリプトやcronジョブでwgetを使う場合に便利です。# 進捗非表示でダウンロードする # wget -q https://example.com/archive.tar.gz # 進捗は非表示だが、サーバーの応答ヘッダーだけは表示する # wget -q --show-progress https://example.com/archive.tar.gz
7. バックグラウンドでダウンロードする(-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 で進捗を確認できます。8. 帯域制限をかける(--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 を付ける習慣をつけましょう。SSL証明書とセキュリティ
9. 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つがあります。10. 環境変数でプロキシを設定する
一時的にプロキシを使いたい場合は、環境変数を設定してからwgetを実行します。# HTTPプロキシを設定する # export http_proxy=http://proxy.example.com:8080 # export https_proxy=http://proxy.example.com:8080 # プロキシ経由でダウンロードする # wget https://example.com/archive.tar.gz
11. .wgetrcでプロキシを恒久的に設定する
毎回環境変数を設定するのが手間な場合は、ホームディレクトリに.wgetrc ファイルを作成します。# ~/.wgetrc に以下を記述する http_proxy = http://proxy.example.com:8080 https_proxy = http://proxy.example.com:8080 use_proxy = on
wget を実行するたびに自動的にプロキシ経由でアクセスします。システム全体に適用する場合は /etc/wgetrc に記述してください。認証付きサーバーからダウンロードする
12. ユーザー名とパスワードを指定する
Basic認証が設定されたサーバーからダウンロードする場合は、--user と --password オプションを使います。# Basic認証付きサーバーからダウンロードする # wget --user=admin --password=secret123 https://secure.example.com/file.tar.gz
~/.bash_history)に残ってしまいます。セキュリティ上の懸念がある場合は、.wgetrc に認証情報を記述するか、--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
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 が向いているトラブルシュート
「403 Forbidden」が返される場合
一部のWebサーバーは、wget のUser-Agentを検出してアクセスを拒否します。この場合は --user-agent オプションでブラウザのUser-Agentを指定してください。# User-Agentを指定してダウンロードする # wget --user-agent="Mozilla/5.0 (X11; Linux x86_64)" https://example.com/file.tar.gz
タイムアウトで失敗する場合(-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
-T は「接続タイムアウト」「読み取りタイムアウト」「DNSタイムアウト」の3つを一括で設定します。それぞれ個別に設定したい場合は --connect-timeout、--read-timeout、--dns-timeout を使ってください。「Unable to establish SSL connection」が出る場合
古いバージョンのwget では、TLS 1.2以降にしか対応していないサーバーに接続できないことがあります。まず wget のバージョンを確認してください。# wgetのバージョンを確認する # wget --version | head -1
--no-check-certificate で対処できます。本記事のまとめ
wget コマンドの基本から応用までを解説しました。以下にコマンド早見表をまとめます。| やりたいこと | コマンド |
|---|---|
| URLを指定してダウンロード | wget URL |
| ファイル名を指定して保存 | wget -O ファイル名 URL |
| 保存先ディレクトリを指定 | wget -P ディレクトリ URL |
| 中断したダウンロードを再開 | wget -c URL |
| 再帰ダウンロード(階層指定) | wget -r -l 階層数 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だけでなく、サーバー構築に必要なコマンドを体系的に学びませんか?
wgetでのファイルダウンロードは、サーバー構築作業のほんの一部です。構築から運用まで、現場で本当に必要なスキルを身につけたいなら、断片的な情報を寄せ集めるより体系的に学ぶのが近道です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
<<関連記事>>
・pstree
・chsh
・finger
・duコマンドでディスク使用量を確認する方法|ディレクトリごとの容量や容量順ソートも
・LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方
