wgetコマンドでファイルをダウンロードする方法|再開やプロキシ設定もコマンド


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドU-Z, ネットワーク管理コマンド > wgetコマンドでファイルをダウンロードする方法|再開やプロキシ設定もコマンド
「wgetでファイルをダウンロードしたいけど、途中で止まってしまった。最初からやり直すしかない?」
「プロキシ環境で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/

デフォルトでは5階層までたどります。階層数を変更したい場合は -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

※ 注意: このオプションは本番環境では使わないでください。証明書の検証をスキップすると、中間者攻撃(MITM)のリスクがあります。あくまで開発・検証環境に限定して使用しましょう。

プロキシ環境でのダウンロード

企業のネットワークでは、プロキシサーバー経由でしか外部にアクセスできない環境が多くあります。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サーバーの場合は --ftp-user--ftp-password を使います。

# FTPサーバーから認証付きでダウンロードする # wget --ftp-user=ftpuser --ftp-password=ftppass ftp://ftp.example.com/pub/file.tar.gz

wgetとcurlの使い分け

wgetcurl、どちらを使えばいいのか?」という質問は非常に多いです。結論から言うと、用途によって使い分けるのが正解です。

比較項目 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

バージョンが古い場合は、OS標準のパッケージマネージャーでアップデートしてください。自己署名証明書が原因の場合は、先述の --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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

<<関連記事>>
・pstree
・chsh
・finger
・duコマンドでディスク使用量を確認する方法|ディレクトリごとの容量や容量順ソートも
・LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る