wgetは、URLを指定してファイルをダウンロードするコマンドです。curlと似ていますが、wgetは「ファイルとして保存する」ことに特化しており、ソフトウェアの取得、バックアップの復元、Webページの一括ダウンロードなどで活躍します。コマンド1つでファイルが手元に保存される手軽さが魅力です。
curlとwgetはよく比較されますが、役割が少し違います。ざっくり言えばwgetは「ファイルをダウンロードして保存」、curlは「データを取得して表示・送信」が得意です。この記事では、実際のサーバー(当サイトを含む)からファイルをダウンロードしながら、wgetの使い方と、curlとの使い分けを整理します。wgetは初期状態では入っていないこともありますが、apt install wgetなどで簡単に導入できます。
wget URLで、URL上のファイル名のまま保存します(curlと違い既定で保存)。-O 名前で保存名を指定、-O -で標準出力へ出せます。- 同名ファイルがあると上書きせず
.1を付けて別名保存します。 - スクリプトでは
-q(静音)で進捗表示を消します。 - 中断したダウンロードの再開は
-c(continue)です。 - 使い分け: ファイル保存はwget、表示・API送信はcurl。
データの取得・送信はcurl、圧縮ファイルの展開はtar、疎通確認はpingもあわせて参考になります。
wgetの基本:URLのファイル名で保存
wget URLを実行すると、URLの末尾のファイル名で、そのまま現在のディレクトリに保存されます。curlが既定で画面に表示するのと違い、wgetは何も指定しなくてもファイルとして保存してくれます。
# URL上のファイル名でそのまま保存 wget https://example.com/robots.txt # → robots.txt というファイルが保存される # 進捗バーが表示される(ダウンロード状況が分かる) wget https://example.com/large-file.zip # スクリプトでは -q で静かに(進捗を消す) wget -q https://example.com/data.csv
実際に当サイトからwget https://codingls.com/robots.txtを実行したところ、robots.txtというファイル名のまま153バイトが保存されました。wgetはURLの最後の部分を自動的にファイル名として使うため、保存先を指定しなくても手元にファイルが残ります。ダウンロード中は進捗バーが表示され、大きなファイルでも状況が分かります。スクリプトやログに混ぜたくない場合は-q(quiet)で進捗表示を抑制します。
-Oで保存名を指定する
保存するファイル名を自分で決めたいときは-O 名前(大文字のO)を使います。また、-O -(ハイフン)とすると、ファイルに保存せず標準出力へ出せます(パイプで他コマンドに渡せます)。
# 保存名を指定する wget -O myname.txt https://example.com/robots.txt # → myname.txt という名前で保存される # -O - で標準出力へ(画面表示・パイプ) wget -q -O - https://example.com/data.txt | grep "error" # ↑ ファイルに保存せず、grep に直接渡す # curl の -o は小文字、wget は大文字の -O(紛らわしい)
実機でも、-O myname.txtで指定した名前で保存でき、-O -で標準出力に内容を出せる(User-agent: *が表示)ことを確認しました。注意点として、保存名指定のオプションはcurlが小文字の-o、wgetが大文字の-Oで、紛らわしいので混同しないようにしてください。-O -を使えば、wgetでもcurlのように「取得したデータをパイプで処理する」使い方ができます。
【罠】同名ファイルは上書きされず.1が付く
wgetの意外な挙動として、同じ名前のファイルが既にあると、上書きせずに.1、.2…と番号を付けて別名保存します。「上書きされない」のは安全ですが、知らないと同じファイルが増殖して戸惑います。
# 1回目 wget https://example.com/robots.txt # → robots.txt # 2回目(同じURL) wget https://example.com/robots.txt # → robots.txt.1 ← 上書きせず別名で保存される! # 3回目 # → robots.txt.2 # 常に同じ名前で上書きしたいなら -O を使う wget -O robots.txt https://example.com/robots.txt
実機で、同じrobots.txtをwgetで2回ダウンロードしたところ、2回目はrobots.txt.1という別名で保存されました(robots.txtとrobots.txt.1の2つが並ぶ)。wgetは既存ファイルを勝手に上書きしない安全設計のため、繰り返しダウンロードすると.1・.2…と番号が増えていきます。「あれ、ファイルが増えている」と戸惑うのはこれが原因です。常に同じ名前で最新版に上書きしたい場合(cronでの定期ダウンロードなど)は、-O ファイル名で明示的に保存名を指定してください。-Oを使うと、既存ファイルがあっても上書きされます。逆に「上書きしたくない、履歴を残したい」なら、この既定の番号付け挙動がそのまま役立ちます。用途に応じて-Oの有無を使い分けましょう。
【重要】curlとwgetの使い分け
curlとwgetは似ていますが、得意分野が異なります。最大の違いは、wgetは既定でファイルに保存、curlは既定で画面に表示することです。この性格の違いから、向いている用途が分かれます。
# 既定の動作が逆
wget https://example.com/file.zip # → ファイルに保存
curl https://example.com/file.zip # → 画面にダーッと表示(バイナリだと文字化け)
# wget が得意: ファイルのダウンロード・保存
wget https://example.com/software.tar.gz
wget -r https://example.com/docs/ # 再帰的にサイトを取得
# curl が得意: API・データの送受信、細かい制御
curl -X POST -d '{"key":"val"}' https://api.example.com/
curl -I https://example.com/ # ヘッダーだけ確認
使い分けの目安はこうです。ファイルをダウンロードして保存したい・サイトを丸ごと取得したいならwget、APIを叩く・データを送信する・レスポンスを細かく調べたいならcurlです。wgetはダウンロードに特化した便利機能(再帰取得、中断再開、リトライなど)が充実しており、curlはHTTPメソッドやヘッダーの細かい制御(POST送信やヘッダー付与)が得意です。どちらか一方だけでなく、用途に応じて両方使えるようにしておくのが実務では便利です。
便利なオプション(-c / -r / リトライ)
wgetには、ダウンロードを支える便利なオプションが揃っています。特に中断したダウンロードを再開する-cは、大きなファイルで役立ちます。
# -c: 中断したダウンロードを途中から再開(レジューム) wget -c https://example.com/huge-file.iso # ↑ 回線が切れても、もう一度実行すれば続きから # -r: 再帰的にダウンロード(サイトのミラーリング) wget -r -np -l 2 https://example.com/docs/ # -np = 親ディレクトリをたどらない, -l 2 = 深さ2まで # -t: リトライ回数, -T: タイムアウト秒 wget -t 5 -T 30 https://example.com/file.zip # 証明書エラーを無視(自己署名証明書など。多用は非推奨) wget --no-check-certificate https://self-signed.example.com/
実機でも、-c(continue)・-r(recursive)・-t(tries)・--no-check-certificateといったオプションが利用可能なことを確認しました。-cは、大きなファイルのダウンロードが途中で切れたとき、最初からやり直さず「続きから」再開できる非常に便利なオプションです(サーバー側が対応している場合)。-rはリンクをたどって再帰的にダウンロードし、Webサイトをまるごと保存(ミラーリング)できます(-npで親をたどらない、-lで深さ制限を付けるのが安全)。--no-check-certificateはSSL証明書のエラーを無視しますが、セキュリティを下げるため多用は避けてください。
ダウンロードの失敗(404など)
wgetは、ファイルが見つからない(404)などのHTTPエラーを失敗として扱い、終了コードを返します。スクリプトでダウンロードの成否を判定するのに使えます。
# 存在しないURL(404) wget -q https://example.com/notfound/ echo $? # 8 ← サーバーがエラー応答を返した(0以外=失敗) # 終了コードの主な意味: # 0 = 成功 # 4 = ネットワーク障害 # 8 = サーバーがエラー応答(404 など) # スクリプトでの判定 if wget -q -O data.json https://api.example.com/data; then echo "取得成功" else echo "取得失敗(終了コード $?)" fi
実機でも、存在しないURLへのwgetは終了コード8(サーバーのエラー応答)を返すことを確認しました。wgetの終了コードは、0が成功、4がネットワーク障害、8がサーバーのエラー応答(404など)と種類が分かれており、ifで成否を判定してスクリプトの処理を分けられます。curlの-fと同様、ダウンロードの成否を確実に検知したいスクリプトで役立ちます。
主なオプション一覧
wgetでよく使うオプションをまとめます。
| オプション | 働き |
|---|---|
wget URL |
URL上の名前で保存 |
-O 名前 |
保存名を指定(-O -で標準出力) |
-q |
静音(進捗を消す) |
-c |
中断ダウンロードの再開 |
-r / -np / -l |
再帰取得 / 親を辿らない / 深さ制限 |
-t / -T |
リトライ回数 / タイムアウト |
よくある失敗
同じファイルが.1、.2と増えていく
wgetは上書きしません。上書きしたいなら-O ファイル名で保存名を指定します。
curlの-oのつもりで小文字を使う
wgetの保存名指定は大文字-Oです。小文字-oはログ出力先の指定になります。
大きなファイルの途中で切れて最初からやり直す
-cを付ければ続きから再開できます。
-rで意図せず大量のファイルを取得する
-npや-l 深さで範囲を制限します。
ダウンロード失敗に気づかない
終了コード(0=成功)で判定します。スクリプトではif wget ...で分岐します。
よくある質問
wget URLと実行するだけで、URL上のファイル名のまま現在のディレクトリに保存されます。curlと違い、何も指定しなくてもファイルとして保存されるのが特徴です。実機でも、当サイトのrobots.txtがそのままの名前で保存されることを確認しています。保存名を変えたいときは-O 名前を使います。wget、APIを叩く・データを送信する・レスポンスを細かく調べたいならcurlが向いています。最大の違いは、wgetが既定でファイルに保存するのに対し、curlは既定で画面に表示することです。用途に応じて両方使えるようにしておくと便利です。.1、.2と番号を付けて別名で保存します。実機でも、同じrobots.txtを2回ダウンロードするとrobots.txt.1ができることを確認しています。常に同じ名前で上書きしたい場合は-O ファイル名で保存名を指定してください。wget -c URLで、中断したダウンロードを途中から再開できます(サーバーが対応している場合)。大きなファイルで回線が切れたときに、最初からやり直さずに済むため便利です。-cはcontinueの略です。if wget -q -O ファイル URL; then ...のように書けば、成否で処理を分岐できます。まとめ
wget URLでURL上の名前のまま保存(curlと違い既定で保存)。-O 名前で保存名指定、同名は上書きせず.1が付きます。- 使い分け: 保存はwget、表示・送信はcurl。
- 中断再開は
-c、再帰取得は-r(-np/-lで制限)。 - 失敗は終了コード(0=成功・8=サーバーエラー)で判定できます。
wgetは、ファイルのダウンロードを最も手軽に行えるコマンドです。「保存ならwget、送受信ならcurl」という使い分けさえ押さえれば、ソフトウェアの取得からサイトのミラーリングまで幅広くこなせます。curlとあわせて使いこなし、コマンドラインでのWeb操作を自在にしましょう。
- grep(文字列検索)
- find(ファイル検索)
- sed(置換・行編集)
- awk(列抽出・集計)
- cut(列の切り出し)
- chmod(パーミッション)
- tar(圧縮・解凍)
- gzip・gunzip(ファイル圧縮)
- リダイレクトとパイプ
- echo・printf(文字列出力)
- ps・kill(プロセス管理)
- 環境変数とPATH
- which・type(コマンドの正体)
- ln(シンボリックリンク)
- cp・mv・rm(コピー/移動/削除)
- touch・mkdir(ファイル/フォルダ作成)
- basename・dirname(パス分解)
- history(コマンド履歴)
- curl(HTTP通信・API)
- wget(ダウンロード)
- ping(疎通確認)
- dig・nslookup(DNS調査)
- ss・netstat(ポート確認)
- jq(JSON処理)
- vim(基本操作・終了方法)
- cron・crontab(定期実行)
- test・[ ](条件判定)
- read(入力の読み取り)
- date(日付・時刻)
- sort・uniq・wc(並べ替え/集計)
- xargs(一括処理)
- chown・chgrp(所有者/グループ変更)
- diff(ファイル比較)
- du・df(ディスク使用量)
- head・tail(先頭/末尾・ログ監視)
- cat・less(ファイル表示)
- alias(コマンドの別名)
- nohup(SSH切断対策)
- tmux(セッション管理)
- よく使うコマンドまとめ
- cd(ディレクトリ移動)

