今回はサーバ管理というわけではないのだが、非常に便利なコマンドとして「curl」を紹介したいと思う。curlはインターネット経由でデータを取得する際に利用できるコマンドだ。HTTPはもちろんのこと、HTTPS、DICT、FILE、FTP、FTPS、GOPHER、IMAP、IMAPS、LDAP、LDAPS、POP3、POP3S、RTMP、RTSP、SCP、SFTP、SMB、SMBS、SMTP、SMTPS、TELNET、TFTPなど、さまざまなプロトコルに対応している。データ転送系のコマンドとしては最もパワフルな物の1つで、curlコマンドが使えれば大体何とかなる。

curlの基本

curlコマンドは、多くのLinuxディストリビューションでデフォルトインストールされている。もし見当たらない場合は、パッケージ管理システム経由でインストールしていただきたい。同コマンドではデータを取得するだけではなく送信することもできるため、これを駆使すれば普段ユーザーがWebブラウザなどのアプリケーションを使って行っている通信の自動化も可能だ。「便利な物は積極的に取り入れて、できるだけ手を抜こう」という本連載の趣旨にぴったりのコマンドだろう。

引数にURLを指定して実行すると対応するプロトコルを使って通信が行われ、データが取得される。これが基本的な使い方だ。

% curl http://www.ntp.org/
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd::">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Description" content="The Network Time Protocol (NTP) is used to synchronize the time of a computer client or server to another server or reference time source, such as a radio or satellite receiver or modem." />
<meta name="Keywords" content="NTP,network,time,protocol,sync,synchronization,clock,hour,minute,second,stratum,UTC,GMT,timezone,timeserver,SNTP" />
<meta name="Language" content="English" />
<meta name="Editor" content="/usr/bin/vim" />
<meta name="Author" content="NTP Webmaster, webmaster@ntp.org" />

<link rel="icon" href="favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="/img/apple-touch-icon-iphone.png" />
<link rel="apple-touch-icon" size="72x72" href="/img/apple-touch-icon-ipad.png" />
<link rel="apple-touch-icon" size="114x114" href="/img/apple-touch-icon-iphone4.png" />
<link rel="apple-touch-icon" size="144x144" href="/img/apple-touch-icon-ipad3.png" />
...略...
<td id="antipixel">
<a href="http://validator.w3.org/check/referer">
<img border="0" src="/img/antipixel_valid_xhtml10_80x15.gif" alt="XHTML 1.0 Transitional Validated" height="15" width="80" />
</a>
<br \>
<a href="http://jigsaw.w3.org/css-validator/check/referer">
<img border="0" src="/img/antipixel_valid_css_80x15.gif" alt="XHTML 1.0 Transitional Validated" height="15" width="80" />
</a></td>
</tr>
</table>
</div>
</body>
</html>
%

上記の例ではHTTP経由でWebページの内容を取得しているので、HTMLデータが端末に表示されている。シェルのリダイレクト機能などを使えば、以下のようにそのままファイルに保存できる。

% curl http://www.ntp.org/ > out
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11214    0 11214    0     0  12798      0 --:--:-- --:--:-- --:--:-- 12786
% head out
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd::">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="Description" content="The Network Time Protocol (NTP) is used to synchronize the time of a computer client or server to another server or reference time source, such as a radio or satellite receiver or modem." />
<meta name="Keywords" content="NTP,network,time,protocol,sync,synchronization,clock,hour,minute,second,stratum,UTC,GMT,timezone,timeserver,SNTP" />
<meta name="Language" content="English" />
<meta name="Editor" content="/usr/bin/vim" />
<meta name="Author" content="NTP Webmaster, webmaster@ntp.org" />
%

もちろん、curlにはファイルに保存するためのオプションが存在するのだが、シェルのリダイレクトで済ませれば、覚えるべきオプションを減らすことができる。これが、業務の効率化を図る上で意外と重要だ。

LinuxなどのUNIX系OSでは、コマンドが1つの基本となっている。さまざまなコマンドがあり、コマンドごとにオプションが存在するので、まともに覚えようとしたらかなりの数を覚えなければならない。そんな大量のオプションは覚えていられないし、かと言って毎回マニュアルを調べるのは面倒くさい。

したがって、コマンドごとに覚えるのは代表的なオプションだけにしておき、コマンドの組み合わせやシェルの機能で代替できる場合にはそちらを使うというのが賢いやり方の1つである。汎用的に使える方法だけを覚えておいて、必要に応じて組み合わせて処理する。こうすることで、最低限の学習で最大の効果を上げられるというわけだ。

curlコマンド経由で取得したデータは、これまでに説明してきたフィルタ系のコマンドを使うことで解析したり、必要なデータだけを抜き出したりすることができる。次回は取得したデータを分解し、必要なデータを取り出す方法について説明したい。