コマンドラインデータ転送とその他のためのcURLの使い方

Curl Command Guide Featured

Linuxアプリケーションのターミナル中心のインストール手順に従っている場合、いつかはcurlコマンドに出くわしたことがあるでしょう。cURLは、URLを使ってデータを転送するためのコマンドラインツールです。最もシンプルな使い方は、コマンドラインを介してファイルをダウンロードすることですが、実はcURLはそれ以上に強力なツールです。

目次

  • cURLとは?
  • インストール
  • cURLの使い方
  • リダイレクトの追従
  • ダウンロードの再開
  • 複数のファイルのダウンロード
  • 認証付きでのダウンロード
  • ファイルの分割と結合
  • その他の便利な機能
  • cURLとWget
  • よくある質問
  • まとめ

関連情報: Linuxターミナルでテキスト、ファイル、フォルダーをコピー&ペーストする方法

cURLとは?

cURLは、1996年にダニエル・スターンバーグによって書かれ、ウェブサーバーから財務データを取得しIRCチャンネルにブロードキャストするために開発されました。ブラウザを使わずにデータを取得するための強力なツールに進化しました。ターミナルを常に使用している場合、これはあなたの arsenalの中で最も重要なツールの一つです。

ほとんどのLinuxディストリビューションでは、cURLはシステムにプレインストールされており、すぐに使用できます。インストールされていない場合でも、ほとんどのリポジトリにありますので、ソフトウェアセンターを使って簡単にインストールできます。

Windowsでは、cURLに「curl-like」コマンドは存在せず、macOSにはcURLがプレインストールされているものの、Linux版ほど多くのフラグを提供していません。

関連情報: Linuxでddコマンドを使う方法

インストール

次に進む前に、cURLがすでにシステムにインストールされていることを確認する必要があります。

Linux

Debian/Ubuntuベースのディストリビューションでは、以下のコマンドを使用してcURLをインストールします:

sudo apt install curl

Archベースのディストリビューションでは:

sudo pacman -S curl

Fedora/CentOS/RHELでは:

sudo dnf install curl

macOS

macOSでは、すでにプレインストールされているため、何もする必要はありません。

関連情報: Macの現在のフォルダー位置でターミナルを起動する方法

Windows

  1. Windows 7/10/11の場合、cURLのダウンロードページに移動し、実行中のアーキテクチャに応じて64ビットまたは32ビットのパッケージを選択します。アーキテクチャがわからない場合、2006年以降に製造されたハードウェアのほとんどは64ビットであるため、64ビットを選択するのが安全です。
  2. システムドライブ上または「C:\Program Files\」内に「cURL」という名前のフォルダーを作成します。

Linuxcurl Newfolder

  1. ダウンロードしたzipファイルに戻り、それを開いて「bin」フォルダー内の「curl.exe」を見つけてください。それを作成したcURLフォルダーにコピーします。コピーしたEXEは完全に自己完結しており、Linuxで実行できるすべての変種を実行できます。
  2. このコマンドを実際に便利にするには、コマンドプロンプトの任意の場所から実行できるように、PATH変数に追加する必要があります。
  • スタートメニューをクリックし、environmentと入力してEnterを押します。
  • 「環境変数 … 」をクリックします。これで環境変数設定に入っているはずです。

Linuxcurl Environmentvariables

  • 「Path」環境変数を選択し、「編集 … 」をクリックします。

  • パス編集ダイアログで、「新規」をクリックし、「curl.exe」が格納されているディレクトリを入力します。例えば「C:\Program Files\cURL」とします。

  • このプロセスを通じて開いたダイアログウィンドウで「OK」をクリックし、ターミナルでcURLを楽しんでください!

Linuxで使用できるすべてのcURLのフラグは、Windows版でも機能するはずです。

お知らせ: コマンドプロンプトはWindowsターミナルと混同しないでください。Windowsターミナルには、同様の機能を提供するPowerShellに含まれる独自のcURLバージョンがあり、まったく異なる動作をします。

関連情報: Linuxでrmコマンドを使う方法

cURLの使い方

始めるには、ターミナルでcurl maketecheasier.comと入力し、Enterを押してください。

出力が得られない場合、これはこのサイトのサーバーがその非wwwドメインへのランダムな接続リクエストに応答するように設定されていないからです。存在しないサーバーやオンラインでないサーバーをポーリングすると、cURLがホストを解決できなかったというエラーメッセージが表示されます。

cURLに実際に便利なことをさせるには、プロトコルを指定する必要があります。ここでは、HTTPSプロトコルを使用してこのサイトのホームページを問い合わせます。curl https://www.maketecheasier.comと入力してください。

Linuxcurl Files

すべてがうまくいけば、巨大なデータの壁を見ているはずです。そのデータをより使いやすくするために、cURLにそれをHTMLファイルに入れるように指示できます:

curl https://www.maketecheasier.com > ~/Downloads/mte.html

このコマンドは、私たちのサイトの出力の内容をあなたのDownloadsフォルダーのHTMLファイルに保存します。お気に入りのファイルマネージャーを使ってそのフォルダーに移動し、先ほど作ったファイルをダブルクリックしてください。このサイトのホームページのHTML出力のスナップショットが開くはずです。

同様に、-oフラグを使用して同じ結果を達成できます:

curl -o ~/Downloads/mte.html https://www.maketecheasier.com

リダイレクトの追従

ほとんどのサイトは、自動的に「http」から「https」プロトコルへのトラフィックをリダイレクトします。cURLでは、-Lフラグを使用することで同じことが達成できます。これにより、読み取り可能なページやファイルに到達するまで301リダイレクトを自動的に追いかけます。

 curl -L http://google.com.

Linuxcurl Redirect

ダウンロードの再開

大きなファイルをダウンロードする際、インターネットの速度に応じて中断が非常に煩わしいことがあります。幸いなことに、cURLには再開機能があります。-Cフラグを渡すと、この問題を迅速に解決できます。

実際の例を示します。DebianのテストリリースISOのダウンロードを意図的に中断しました。CtrlとCを押してプロセスの途中でキャンセルしました。

Linuxcurl Interrupted

次のコマンドには-Cフラグを付け加えます。例えば、

curl -C - -o ~/Downloads/debiantesting.iso -L https://cdimage.debian.org/cdimage/weekly-builds/amd64/iso-dvd/debian-testing-amd64-DVD-1.iso

Linuxcurl Resume

ダウンロードは再開地点から無事に始まりました。

複数のファイルのダウンロード

cURLには複数のファイルを直感的にダウンロードする方法がないため、妥協を伴った2つの方法があります。

ダウンロードするファイルが連番(例えば、file1、file2など)である場合、波括弧を使ってファイルの完全な範囲を取得し、出力を指定する際に「#」を使うことができます。少し分かりやすくするために、以下の例を示します:

curl "http://example.com/file[1-5].zip"-o"#1_#2"

これを簡単に行う方法は、-O--remote-name)を使うことです。このフラグは、cURLがリモートファイルを同じ名前のローカルファイルにダウンロードするようにします。出力を指定する必要がないので、ファイルをダウンロードしたいディレクトリでターミナルを開いているときにこのコマンドを使用すべきです。

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"

同じサイトから非列挙ファイルを再入力せずに指定することもできます:

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

これにより、友人のbonobo_bobがFTPサーバーに認証され、Downloadsフォルダーにファイルがダウンロードされます。

ファイルの分割と結合

大きなファイルをダウンロードしてチャンクに分割したい場合、cURLの--rangeフラグを使うことができます。--rangeでは、開始したいバイトを指定し、終了したいバイトを指定する必要があります。範囲の終わりを指定しない場合は、ファイルの残りをダウンロードします。

以下のコマンドでは、cURLは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つのファイルがcURLがダウンロードするように指定した場所に現れるはずです。

これらのファイルを再統合するには、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にファイルに追加するように要求します。例: curl -ao ~/collab-full.x https://example-url.com/collab-part26.x
  • --head – 出力データなしでサーバーからの応答ヘッダーのみを取得します。これは、ウェブサイトのデバッグやサーバーのクライアントへのレスポンスを覗くのに役立ちます。例: curl --head https://example-url.com
  • --limit-rate – 限定された帯域幅でダウンロードを指示します。これは、cURLがシステム内のすべての利用可能な帯域を占有しないようにしたい場合に便利です。単純な数字は1秒あたりのバイト数として解釈されます。Kは1秒あたりキロバイトを表し、Mはメガバイトを表します。例: curl --limit-rate 8M https://example-url.com/file.zip > ~/file.zip
  • -o – 前述のように、cURLが使用する出力ファイルを決定します。例: 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はカジュアルな観察者にはほぼ姉妹プログラムのように見えます。しかし深く掘り下げると、この2つの姉妹には異なる目的があります。

Wget

  • インターネットからデータを取得するために完全に構築されています。
  • cURLのように-Lまたは-oフラグは必要ありません; wget [url]と入力するだけでOKです!
  • -rフラグを使用して、ディレクトリ内のすべてのものを再帰的にダウンロードできます。
  • 日常的な使用や日々のシステム管理タスクに必要なすべての機能を持っています。
  • (Linuxで)多くの依存関係が必要なく、すべてが初めから利用可能です。

関連情報: Macでwgetをインストールし使用する方法

cURL

  • リモート取得のためのフラグと便利な機能の膨大なレパートリーを持っています。
  • ローカルネットワーク(LDAP)やネットワークプリンター(Samba)をサポートします。
  • gzip圧縮ライブラリとうまく連携します。
  • libcurlに依存しており、開発者がcURLの機能を含むソフトウェアやbashスクリプトを書くことを可能にします。

要するに、Wgetはインターネットから情報を取得するための「一般的なツールボックス」であり、cURLはパワーユーザーやシステム管理者のためにより細かい制御を提供することでそれを拡張します。

よくある質問

1. Linuxで証明書エラーが発生しました。どうすれば修正できますか?

「ピアの証明書の発行者が信頼されていないとマークされた」というエラーが表示された場合、最も簡単な修正法は、あなたのディストリビューションの一般的な証明書パッケージを再インストールすることです。

Debian/Ubuntuベースのシステムの場合:

sudo apt reinstall ca-certificates

Fedora/CentOS/RHELの場合:

dnf reinstall ca-certificates

Archベースのシステムの場合:

pacman -S ca-certificates

Archでは、証明書パッケージを再インストールする前にpacman -Sccを使用してパッケージキャッシュをクリアすることをお勧めします。

それでもエラーが発生する場合、サーバー側に何か問題がある可能性があります。

2. cURLとbashコマンドを一緒に実行するのは安全ですか?

Linuxアプリケーションをインストールするための最も一般的な方法ではありませんが、開発者の中には、あなたがcurlを使わざるを得ないような手法を提供する人たちもいます(例えば、NodeJSの背後にいる人たちなど)。これにはcurl [引数] | sudo -E bash -などの根権限コマンドを経由してソフトウェアをインストールするようにします。

少し怖く見えるかもしれませんが、アプリケーションの開発者が信頼できるのであれば、何か壊れる可能性は非常に低いです。悪意のある行為者がどこにでも存在しており、ArchのAURのようなリポジトリに侵入する可能性があるため、curlをルートアクセスコマンドと組み合わせて使用することは、パッケージマネージャーを通じて実行することよりも安全ではありません。

3. cURLをTorと一緒に使えますか?

はい!Torブラウザ(またはスタンドアロンのtorサービス)を起動し、--proxyフラグを使用します。Torは、他のアプリケーションでIPをマスクするために使用できるローカルプロキシを提供します。以下は、Torと一緒に使用されるcURLの例です:

curl --proxy localhost:9050 http://example.com

スタンドアロンのTorサービスは9050をリッスンポートとして使用しますが、Torブラウザはポート9150を使用します。

まとめ

cURLは、Linuxの世界の変化の中で弾力性を持ち続け、ターミナルユーザーの重要なツールとしての位置を保持しています。

コマンドラインに不慣れな方は、いくつかの最も便利なLinuxコマンドをチェックしてみてください。データをインターネットからダウンロードするのではなく、ウェブを検索するだけであれば、ターミナルでもブラウジングできます。