cURLの使い方完全ガイド|コマンドラインでデータ転送・ダウンロードを自在に操る
Linuxアプリのターミナル向けインストール手順を調べていると、必ずと言っていいほど目にするのがcurlコマンドです。cURLはURLを使ってデータを転送するためのコマンドラインツールで、最もシンプルな使い方は「コマンドラインからのファイルダウンロード」。しかし実際にはそれだけにとどまらず、驚くほど多機能なパワフルなツールです。
cURLとは?
cURLは1996年、Daniel Stenberg(ダニエル・ステンベリ)がWebサーバーから金融データを取得してIRCチャンネルへ配信するために開発したのが始まりです。その後進化を重ね、ブラウザを使わずにデータを取得できる強力なツールとなりました。常にターミナルで作業する人にとっては、持っておきたい最重要ツールのひとつと言えるでしょう。
多くのLinuxディストリビューションではcURLがプリインストールされており、すぐに使い始められます。仮にインストールされていなくても、ほとんどのリポジトリに収録されているため、ソフトウェアセンターなどから簡単に導入できます。
Windowsには「curl風」のコマンドは標準搭載されていません。macOSにはcURLがプリインストールされていますが、Linux版ほど多くのオプション(フラグ)は使えません。
インストール
まずは、システムにcURLがすでにインストールされているかを確認しましょう。
Linux
Debian/Ubuntu系のディストリビューションでは、次のコマンドでインストールします。
sudo apt install curl
Arch系の場合:
sudo pacman -S curl
Fedora/CentOS/RHELの場合:
sudo dnf install curl
macOS
macOSにはプリインストールされているため、何もする必要がありません。
Windows
- Windows 7/10/11の場合は、cURLの公式ダウンロードページにアクセスし、お使いのアーキテクチャに合わせて64bit版または32bit版を選択します。どちらかわからない場合は64bit版を選んでおけば安心です。2006年以降のハードウェアの大半は64bit対応だからです。
- システムドライブ直下、または「C:\Program Files\」内に「cURL」という名前のフォルダを作成します。
- ダウンロードしたzipファイルを開き、「bin」フォルダの中にある「curl.exe」を見つけて、作成したcURLフォルダにコピーします。このexeファイルは完全に自己完結型なので、Linuxで使えるすべてのオプションがそのまま動作します。
- コマンドプロンプトのどこからでも実行できるようにするには、PATH環境変数に追加しましょう。
- スタートメニューをクリックし、「environment」と入力してEnterキーを押します。
- 「環境変数の編集」をクリックすると、環境変数の設定画面が開きます。
- 「Path」環境変数を選択して「編集…」をクリックします。
- 編集ダイアログが開いたら「新規」をクリックし、「curl.exe」があるディレクトリ(例:「C:\Program Files\cURL」)を入力します。
- 開いたすべてのダイアログで「OK」を押せば完了。ターミナルからcURLが使えるようになります。
Linux版で使えるcURLのオプションは、基本的にすべてWindows版でも動作します。
注意:コマンドプロンプトとWindows Terminalを混同しないようにしましょう。Windows TerminalのPowerShellには独自バージョンのcURL(curlエイリアス)が含まれていますが、似た機能でありながら動作の仕組みはまったく異なります。
cURLを使ってみる
まずは、ターミナルでcurl maketecheasier.comと入力してEnterキーを押してみましょう。
何も出力されない場合は、そのサイトのサーバーがwwwなしドメインへの接続要求に応答しない設定になっているためです。存在しないサーバーやオフラインのサーバーにアクセスすれば、「ホストを解決できなかった」というエラーメッセージが表示されます。
cURLに実際の仕事をさせるには、プロトコルを明示的に指定します。ここではHTTPSプロトコルでサイトのトップページに問い合わせてみましょう。curl https://www.maketecheasier.comと入力します。
うまくいくと、大量のデータが画面に流れ出します。これを見やすくするために、HTMLファイルとして保存してみましょう。
curl https://www.maketecheasier.com > ~/Downloads/mte.html
このコマンドを実行すると、サイトの出力内容がダウンロードフォルダ内のHTMLファイルに保存されます。お好みのファイルマネージャーでフォルダを開き、作成されたファイルをダブルクリックすると、サイトのトップページのHTMLスナップショットが表示されるはずです。
同様のことは、-oオプションでも実現できます。
curl -o ~/Downloads/mte.html https://www.maketecheasier.com
リダイレクトの追跡
多くのサイトは、「http」から「https」へのトラフィックを自動的にリダイレクトします。cURLでは-Lオプションで同じことが可能です。301リダイレクトを自動的にたどり、読み取り可能なページやファイルに到達するまで追跡します。
curl -L https://google.com
ダウンロードの再開
大きなファイルをダウンロードしている最中に回線が途切れると、通信速度によっては非常にイライラするものです。幸い、cURLにはダウンロード再開機能があります。-Cオプションを付ければ一瞬で解決します。
実例として、Debianテスト版のISOをダウンロード中に、わざとCtrl+Cで中断してみました。
次のコマンドでは、-Cオプションを追加しています。
curl -C - -o ~/Downloads/debiantesting.iso -L https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/debian-testing-amd64-DVD-1.iso
ダウンロードは中断した箇所から問題なく再開されました。
複数ファイルのダウンロード
cURLで複数のファイルをダウンロードする方法は直感的とは言えず、それぞれに一長一短のある2つの方法があります。
ダウンロード対象のファイルに連番が振られている場合(file1、file2など)、角括弧で範囲を指定し、-oオプションで指定する出力名に「#」を含めることで、一括取得できます。
curl "https://example.com/file[1-5].zip" -o "#1_#2"
もっとシンプルなのが-O(--remote-name)オプションです。これはリモートファイルと同じ名前のローカルファイルとして保存します。出力先を指定する必要がないため、ダウンロード先のディレクトリでターミナルを開いているときに便利です。
curl -O "https://example.com/file1.zip" -O "https://example.com/file2.zip"
連番付きのファイルを大量にダウンロードする場合は、--remote-name-allオプションが適しています。
curl --remote-name-all "https://example.com/file[1-5].zip"
さらに、波括弧を使えば同一サイト上の連番以外のファイルも、URLを書き直さずに指定できます。
curl --remote-name-all "https://example.com/{file1.zip,anotherfile.zip,thisisfun.zip}"
認証付きダウンロード
認証が必要なファイル(プライベートFTPサーバーからの取得など)は、-uオプションでダウンロードできます。「ユーザー名:パスワード」の順にコロンで区切って指定します。
curl -u username:password -o ~/Downloads/file.zip ftp://example.com/file.zip
これでFTPサーバーに対してユーザー認証を行い、ファイルをダウンロードフォルダに保存できます。
ファイルの分割と結合
大きなファイルをダウンロードして複数のチャンクに分割したい場合は、cURLの--rangeオプションが使えます。開始バイト位置から終了バイト位置までを指定します。終了位置を省略した場合は、ファイルの残り全体がダウンロードされます。
以下のコマンドでは、Arch Linuxのインストールイメージの最初の100MBをダウンロードします。
curl --range 0-99999999 -o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso
続く100MBは--range 100000000-199999999というように指定します。これらのコマンドは&&演算子で連結できます。
curl --range 0-99999999 -o arch.part1 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \ curl --range 100000000-199999999 -o arch.part2 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \ curl --range 200000000-299999999 -o arch.part3 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \ curl --range 300000000-399999999 -o arch.part4 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \ curl --range 400000000-499999999 -o arch.part5 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \ curl --range 500000000-599999999 -o arch.part6 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \ curl --range 600000000-699999999 -o arch.part7 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso && \ curl --range 700000000- -o arch.part8 -L https://mirrors.chroot.ro/archlinux/iso/2021.11.01/archlinux-2021.11.01-x86_64.iso
このコマンド構造に従えば、指定した場所に8つのファイルが出力されるはずです。
分割されたファイルを元に戻すには、LinuxやmacOSではcatコマンドを使います。
cat arch.part? > arch.iso
Windowsの場合は、copyコマンドを使用します。
copy /b arch.part* arch.iso
その他の便利なオプション
cURLには他にも数多くのオプションと活用方法があります。
-#– プログレスバーでダウンロードの進捗を表示します。例:curl -# https://asite.com/somefile.zip > ~/somefile.zip-a– ファイルを上書きせずに追記します。例:curl -ao ~/collab-full.x https://example-url.com/collab-part26.x--head– 出力データではなくレスポンスヘッダーのみを取得します。サイトのデバッグや、サーバー側の応答を確認したいときに役立ちます。例:curl --head https://example-url.com--limit-rate– 帯域幅を制限してダウンロードします。cURLに帯域を占有させたくないときに便利です。数値のみはバイト/秒、KはKB/秒、MはMB/秒として解釈されます。例:curl --limit-rate 8M https://example-url.com/file.zip > ~/file.zip-o– 前述のとおり、出力ファイルを指定します。例:curl -o ~/Downloads/file.zip https://thefileplace.com/file.zip -o file2.zip https://thefileplace.com/file2.zip--proxy– プロキシ経由で通信したい場合に使用します。例:curl --proxy proxyurl:port https://example-url.com/file.zip > ~file.zip
cURLとWgetの違い
同じ1996年に登場したcURLとWgetは、一見すると姉妹ソフトのように思えます。しかし少し掘り下げると、両者には異なる目的があることがわかります。
Wgetの特徴
- インターネットからデータを取得することに特化してゼロから設計されている。
- cURLのような
-Lや-oなどのオプションが不要で、wget [url]だけで動作する。 -rオプションで再帰的ダウンロードが可能。ディレクトリ内の全ファイルをまとめて取得できる。- 日常的な利用に必要な機能が揃っており、日々のシステム管理業務に向いている。
- (Linuxでは)依存関係が少なく、ほぼすぐに使える。
cURLの特徴
- リモート取得のための豊富なオプションと多彩な機能を備えている。
- ローカルネットワーク(LDAP)やネットワークプリンター(Samba)にも対応。
- gzip圧縮ライブラリとの相性が良い。
- libcurlに依存しており、開発者はcURLの機能を組み込んだソフトウェアやbashスクリプトを書ける。
要するに、Wgetはインターネットから物を取ってくるための「万人の道具箱」であり、cURLはそれをさらに発展させ、パワーユーザーやシステム管理者のためのより細やかな制御を提供するツールだと言えます。
よくある質問
Q1. Linuxで証明書エラーが出ました。どうすれば直りますか?
「peer's certificate issuer has been marked as not trusted(ピアの証明書発行者が信頼できないものとしてマークされています)」のようなエラーが出た場合は、ディストリビューションの共通証明書パッケージを再インストールするのが最も簡単な解決策です。
Debian/Ubuntu系の場合:
sudo apt reinstall ca-certificates
Fedora/CentOS/RHELの場合:
dnf reinstall ca-certificates
Arch系の場合:
pacman -S ca-certificates
Archでは、証明書パッケージを再インストールする前にpacman -Sccでパッケージキャッシュを消去しておくとよいでしょう。
それでもエラーが出る場合は、サーバー側に問題がある可能性があります。
Q2. cURLとbashコマンドを組み合わせて実行しても安全ですか?
Linuxアプリのインストール方法としては一般的ではありませんが、NodeJSの開発チームのように、curlとroot権限で実行するbashコマンド(例:curl [argument] | sudo -E bash -)を組み合わせることしか許していないケースもあります。
少し恐ろしく見えるかもしれませんが、提供元が信頼できる団体であれば、何かを壊す可能性は極めて低いです。悪意ある攻撃者はどこにでもおり、ArchのAURのようなリポジトリにも侵入しうるため、curlとroot権限コマンドの組み合わせによるインストールは、パッケージマネージャー経由よりも本質的に危険というわけではありません。
Q3. cURLをTorと一緒に使えますか?
はい!Tor Browser(またはスタンドアロンのtorサービス)を起動し、--proxyオプションを使用してください。Torは他のアプリでIPを隠すために使えるローカルプロキシを提供しています。cURLとTorを組み合わせた例は以下のとおりです。
curl --proxy localhost:9050 https://example.com
スタンドアロンのTorサービスはリスニングポートとして9050を使用し、Tor Browserは9150を使用します。
まとめ
cURLは、移り変わるLinuxの世界においてもその地位を保ち続け、ターミナルユーザーの武器庫における重要なツールであり続けています。
コマンドライン初心者の方は、役立つLinuxコマンドの記事もチェックしてみてください。また、インターネットからデータをダウンロードするだけでなく、ターミナル上でWebをブラウズすることも可能です。
-
Windows 10でOphcrackをダウンロードして使う方法【パスワード復元ガイド】
Ophcrackは、レインボーテーブル技術をベースとした無料のWindowsパスワード復元ツールです。Windows PCのユーザーアカウントのパスワードを忘れてしまった場合でも、このツールを使えばパスワードを復旧できます。 PCのアカウントのパスワードを忘れると、そのアカウント内に保存されているファイルへアクセスできなくなり、大切なデータを取り出すことができません。 特に、PCにアカウントが1つしかない場合は、パスワードを忘れた時点でPC全体がロックされた状態になり、何も操作できなくなります。こうした状況では、デスクトップ画面にアクセスできないため、復元アプリを実行することすら不可能です。
-
Windows 10向けパッケージマネージャー「Chocolatey」のインストールと使い方ガイド
新しいソフトウェアをWindows PCにインストールする場面を想像してみてください。おそらく、公式サイトにアクセスし、ページ上の広告や不要なリンクを避けながらダウンロードボタンを探し、グラフィカルなインストーラーをデフォルト設定のままクリックして進んでいく——そんな流れになるでしょう。この一連の手順は、ソフトウェアがオンラインで配布されるようになって以来、Windowsの歴史の中でほとんど変わっていません。一方、Unix系システムでは、パッケージマネージャーによるインストールが主流です。ユーザーの操作は最小限で済み、多くの場合コマンドラインから制御されます。近年は、こうしたメリットをサードパ