ファイルダウンロードのコマンドは、Linuxでは「wget」が定番といえる存在ですが、「curl」も多く利用されています。curlコマンドはダウンロードだけでなくアップロード機能も備える他、ユーザー認証が必要なサイトにも対応しています。wgetと併せて活用することで、より柔軟なファイルのやりとりが可能になります。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、ファイルアップロード/ダウンロードで利用することの多い「curl」コマンドを紹介します。
なお、本連載では、執筆時点の最新版Red Hat Enterprise Linux(RHEL)およびCentOS環境で動作を確認しています。また、用法事例はIPv4(Internet Protocol version 4)ネットワークを前提にしています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。
curlは、WebサーバーやFTPサーバーと通信し、ファイルをダウンロード/アップロードするコマンドです。HTTPやFTPなど主要なプロトコルに対応する他、ダウンロードが中断された位置から再開する機能など、ダウンローダーとしての基本機能を備えています。同様の機能を提供するコマンドに「wget」がありますが、両者は少し性質が異なります。
「HTTP/HTTPSでまとめてデータを取得するwgetコマンドとは?」で紹介した通り、wgetコマンドは再帰的なデータ取得が可能なので、クローラーのような利用方法が考えられます。一方、今回紹介するcurlコマンドは、コマンドラインで利用する際、パイプラインを使って他のコマンドやプログラムに取得したデータを渡すことができます。また、wgetよりも対応プロトコルが多く、例えばユーザー名とパスワードを指定すればFTPサーバーにもアップロード可能です。
curlコマンドは、各プロトコルに応じたURLを引数としますが、デフォルトではURLが示すリソースを取得するよう動作するため、「http://」から始まるURLを指定した場合には、Webサーバー(HTTPサーバー)上のファイルをダウンロードします。
curlコマンドで取得したデータは、基本的には標準出力へ書き出されます。そのため、「-o」オプション(小文字のオー)を指定して任意のファイル名を付けて保存するか、「-O」オプション(大文字のオー)を指定してサーバー側のファイル名のまま保存することが一般的な使い方になります。
なお、curlコマンドはHTTP/HTTPSの他、FTP、SCPなどのプロトコルにも対応していおり、ファイルのダウンロードだけでなくアップロードも可能です。
curlコマンドの主なオプションは次の通りです。
オプション | 意味 |
---|---|
-# | ダウンロードの進捗(しんちょく)状況を示す記号(プログレスバー)を表示する |
-A | 任意のユーザーエージェントを設定する |
-C | 引数に「-」を指定すると、前回の停止位置からダウンロードを再開する |
-I | サーバーのHTTPヘッダーを取得する |
-L | 別のサイトへリダイレクトする処理を許可する |
-O | 受信したデータをローカルに保存するとき、サーバー上のファイル名を使用する |
-R | サーバー上でのファイルのタイムスタンプを保持する |
-T | サーバーへアップロードするファイルを指定する |
-d | POST送信を行う |
-e | HTTPサーバーにリファラーのURLを送信する |
-n | 「~/.netrc」に記載されたユーザー名とパスワードを使用する |
-o | 受信したデータをファイルへ書き出す(初期設定では標準出力) |
-s | ダウンロードの進捗とエラーメッセージを表示しない |
-u | ユーザー名とパスワードを指定する |
-x | プロキシサーバーを指定する |
-v | サーバーから送信されてきたメッセージを出力する |
ファイルをダウンロードする場合は、「-O」オプションを指定し、引数にURLを与えます。すると、URLで指定したファイルのダウンロードが開始され、サーバー上と同じファイル名でカレントディレクトリに保存されます。任意のファイル名で保存する場合は、「-o ○○○」の要領で指定します。
ファイル名の一部が連番のファイルを一括ダウンロードするときには、記号([ ])で連番の範囲を指定します。例えば、「dog01.jpg」から「dog09.jpg」の九つのJPEG画像をダウンロードするときには、「dog0[1-9].jpg」の要領でファイル名を指定します。数字の代わりにアルファベット(例:[a-z])を使用することも可能です。
下のサンプルは、大文字の「-O」オプションを使い、bz2形式のファイル「source.bz2」を同じ名前で保存する場合の取得例です。
$ curl -O http://www.atmarkit.co,jp/files/trunk/source.bz2 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 2 45.8M 2 1184k 0 0 263k 0 0:02:58 0:00:04 0:02:54 263k
何らかの理由でダウンロードが中断した場合には、URLの前に「-C - -o <保存したファイル名>」の要領でオプションを指定すると、中断された位置からダウンロードを再開(レジューム)できます。ただし、サーバー側がレジューム機能に対応している必要があります。
下のサンプルは、source.bz2のダウンロードを再開する場合の例です。
$ curl -C - -o source.bz2 http://www.atmarkit.co,jp/files/trunk/source.bz2 ** Resuming transfer from byte position 1855488 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 10 44.1M 10 4909k 0 0 358k 0 0:02:05 0:00:13 0:01:52 103k
curlコマンドにはアップロード機能があり、「-T」オプションで指定したファイルを、引数に与えたサーバー(WebDAVサーバーなど)のURLに転送することができます。
引数のファイル名を省略すると、「-T」オプションで指定したファイル名がそのまま利用されますが、サーバー側の命名ルールによって自動的に変更されることもあります。以下のコマンド実行例では、curlコマンドに対応したアップロードサイト「transfer.sh」を利用しています。
$ curl -T Nasu.jpg https://transfer.sh/nasudake.jpg https://transfer.sh/aEivJ/nasudake.jpg
さらに、「-u」オプションに続けて「ユーザーID:パスワード」の要領でアカウント情報を指定すると、認証が必要なサーバーへファイルをアップロードすることも可能です。HTTPのベーシック認証やFTPのログインに利用できます。ただし、アカウント情報は暗号化されずに転送されるため、取り扱いには注意が必要です。
$ curl -T sample.txt -u username:password ftp://ftp.foobar.com/ % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1084 0 0 100 1084 0 3557 --:--:-- --:--:-- --:--:-- 3699
Copyright © ITmedia, Inc. All Rights Reserved.