はじめに
Linuxには、コマンドラインからインターネットへアクセスするための強力なツールが標準で用意されています。
代表的なのが curl と wget です。
| ツール | 特徴 |
|---|---|
curl | HTTP/HTTPS 以外のプロトコルにも対応。APIとのやり取りや細かいオプション指定が得意 |
wget | ファイルのダウンロードに特化。再帰ダウンロードやリトライが簡単 |
このチュートリアルでは、どちらのコマンドも「何ができるのか」をステップ形式で学んでいきます。
curl の基本
インストール確認
多くのディストリビューションには最初から入っています。
curl --version
インストールされていない場合:
# Debian/Ubuntu
sudo apt install curl
# RHEL/CentOS/Fedora
sudo dnf install curl
ステップ 1 ― URLにGETリクエストを送る
最もシンプルな使い方です。
curl https://httpbin.org/get
このコマンドは指定したURLのレスポンスボディを標準出力に表示します。
httpbin.org はリクエストの内容をそのまま返してくれるテスト用サービスです。
ステップ 2 ― レスポンスヘッダーを確認する
# ヘッダーのみ表示(-I = --head)
curl -I https://example.com
# ヘッダーとボディを両方表示(-i)
curl -i https://example.com
実行例:
HTTP/2 200
content-type: text/html; charset=UTF-8
date: Tue, 22 Jul 2026 00:00:00 GMT
...
ステータスコード(200, 404, 500 など)やコンテンツタイプを確認できます。
ステップ 3 ― ファイルとして保存する
# -O: URLのファイル名で保存
curl -O https://example.com/sample.txt
# -o: 保存名を指定
curl -o myfile.txt https://example.com/sample.txt
大きなファイルをダウンロードするときは -# でプログレスバーを表示できます:
curl -O -# https://example.com/largefile.tar.gz
ステップ 4 ― POSTリクエストを送る
フォームデータの送信やAPIへのデータ投稿に使います。
# フォームデータを送る(application/x-www-form-urlencoded)
curl -X POST https://httpbin.org/post \
-d "name=Taro&age=30"
# JSONデータを送る
curl -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"name": "Taro", "age": 30}'
-H はリクエストヘッダーを追加するオプションです。
ステップ 5 ― 認証情報を付ける
# Basic認証
curl -u username:password https://example.com/api
# Bearer トークン(よく使われる)
curl -H "Authorization: Bearer YOUR_TOKEN" https://api.example.com/data
ステップ 6 ― リダイレクトに対応する
デフォルトでは curl はリダイレクトを追いかけません。-L をつけると追いかけます。
curl -L https://bit.ly/some-shortened-url
ステップ 7 ― 詳細なログを見る(デバッグ)
curl -v https://httpbin.org/get
-v(verbose)をつけると、接続の確立からヘッダーのやり取りまで詳細に表示されます。
問題の調査や学習に役立ちます。
wget の基本
インストール確認
wget --version
インストールされていない場合:
# Debian/Ubuntu
sudo apt install wget
# RHEL/CentOS/Fedora
sudo dnf install wget
ステップ 1 ― ファイルをダウンロードする
wget https://example.com/sample.txt
カレントディレクトリにファイルが保存されます。
# 保存先のファイル名を指定(-O)
wget -O myfile.txt https://example.com/sample.txt
# 保存先ディレクトリを指定(-P)
wget -P /tmp/downloads https://example.com/sample.txt
ステップ 2 ― ダウンロードの再開(レジューム)
大きなファイルをダウンロード中に中断したとき、続きから再開できます。
wget -c https://example.com/largefile.iso
-c(--continue)は部分的にダウンロード済みのファイルを検出して続きから取得します。
ステップ 3 ― バックグラウンドでダウンロード
wget -b https://example.com/hugefile.tar.gz
-b(--background)をつけるとバックグラウンドで実行され、wget-log にログが記録されます。
# ログを確認
tail -f wget-log
ステップ 4 ― リトライ回数を指定する
ネットワークが不安定なときに便利です。
# 最大10回リトライ
wget --tries=10 https://example.com/sample.txt
# 無制限にリトライ
wget --tries=0 https://example.com/sample.txt
ステップ 5 ― Webサイトを丸ごとミラーする
wget --mirror --convert-links --adjust-extension \
--page-requisites --no-parent \
https://example.com/
各オプションの意味:
| オプション | 説明 |
|---|---|
--mirror | ミラーリングモード(再帰・タイムスタンプ比較など) |
--convert-links | ローカルで閲覧できるようにリンクを変換 |
--adjust-extension | 拡張子を適切に調整 |
--page-requisites | ページ表示に必要な画像・CSSなども取得 |
--no-parent | 指定ディレクトリより上には遡らない |
curl と wget の使い分けまとめ
| やりたいこと | 推奨ツール |
|---|---|
| REST APIを叩く | curl |
| POSTリクエストを送る | curl |
| ヘッダーを細かく制御する | curl |
| 単純なファイルダウンロード | wget |
| 中断したダウンロードの再開 | wget |
| サイトの再帰的ミラーリング | wget |
練習問題
問題 1
https://httpbin.org/get にGETリクエストを送り、レスポンスを response.json という名前で保存してください。
問題 2
curl コマンドを使って、https://httpbin.org/post に以下のJSONデータをPOSTしてください:
{"user": "linux_learner", "level": "beginner"}
問題 3
wget を使って https://example.com/ のHTMLファイルを example.html という名前で保存してください。
また、途中で中断された場合でも再開できるオプションを一緒につけてください。
問題 4(応用)
curl の -v オプションと -I オプションの違いを説明してください。また、どのような場面でそれぞれを使うか考えてみましょう。
解答
解答 1
curl -o response.json https://httpbin.org/get
-o でファイル名を指定して保存します。
解答 2
curl -X POST https://httpbin.org/post \
-H "Content-Type: application/json" \
-d '{"user": "linux_learner", "level": "beginner"}'
-X POST でHTTPメソッドをPOSTに、-H でContent-Typeヘッダーを指定し、-d でボディを渡します。
解答 3
wget -c -O example.html https://example.com/
-c で再開可能にし、-O example.html で保存先ファイル名を指定します。
解答 4
| オプション | 表示内容 | 用途 |
|---|---|---|
-I | レスポンスヘッダーのみ(HEADリクエスト) | ステータスコードやContent-Typeを素早く確認したいとき |
-v | リクエスト・レスポンス両方の詳細(HEADERとBODY) | 接続の詳細を追ったり、問題をデバッグするとき |
-I はボディを取得しないので高速です。-v はすべての通信の詳細が見られるためデバッグに向いています。
まとめ
curlはHTTPリクエストを細かく制御できるため、APIの呼び出しやデバッグに最適wgetはシンプルなダウンロードや再開・ミラーリングが得意- 両方のコマンドを場面に応じて使い分けることで、ターミナルからのWeb操作が格段に効率アップします
次のステップとして、実際にパブリックなAPIを叩いてみたり、スクリプト内で curl を組み込んでデータ取得を自動化してみましょう!