Wget

提供: きまぐれ手記 Kimagurenote
移動先: 案内検索

インターネットとWebの普及により、Webサーバに配布物を置いて、ファイルをダウンロードする機会が多くなっている。こういう用途では昔は主にftpが使われていたが、最近では多くがhttp経由になっているのかなと。

FreeBSD では fetch が便利だが、他のOSでは何かと便利なのが GNU wget。 (各OSに標準で入っている ftp も最近はhttpを扱えるようになっている場合があるが、OS依存であり、httpsには対応していないなど不便な点もある。)

インストール

wget は GNU だけに、Linux では distribution により標準で入ってくる場合も多いようだが、BSD系では別途インストールが必要。pkgsrc が使える。(要root権限)

(NetBSD/i386 6.0 の例)

# pkg_add ftp://ftp.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/6.0_2013Q4/net/wget-1.14nb3.tgz

使い方

一般には、wget の後に URL を指定するだけ。 下記の例では、file.zip をダウンロードしてカレントディレクトリに保存する。

% wget http://example.jp/path/to/file.zip

フレッツなどで、IPv6接続を試みてタイムアウトする場合は、-4 を指定することでIPv4接続になる。

URL が / で終わっていたり、? や = などが含まれている場合は、-O で出力先ファイル名を指定し(fetch -o と違い大文字なので注意)、URLを "" で括っておくと良い。

% wget -4 -O dropbox.py "http://www.dropbox.com/download?dl=packages/dropbox.py"

ルートCA証明書

httpsの場合、fetch では証明書を無視してダウンロードしてくるが、wgetでは証明書の確認を行う(こちらの方が本来の姿)ので、ルートCA証明書が入っていないと、相手先の証明書を検証できない旨のエラーになる。

% wget https://app.aniplex.co.jp/nisekoi/common/img/footer/banner.gif
--2014-01-12 01:55:39--  https://app.aniplex.co.jp/nisekoi/common/img/footer/banner.gif
Resolving app.aniplex.co.jp (app.aniplex.co.jp)... 54.238.231.217
Connecting to app.aniplex.co.jp (app.aniplex.co.jp)|54.238.231.217|:443... connected.
ERROR: cannot verify app.aniplex.co.jp's certificate, issued by '/C=US/O=GeoTrust, Inc./CN=RapidSSL CA':
  Unable to locally verify the issuer's authority.
To connect to app.aniplex.co.jp insecurely, use `--no-check-certificate'.

ルートCA証明書は、OSにより入っていたり、いなかったりするので、所定の場所にファイルが置いてあるかどうかを見る。

NetBSDの場合:

% ls /etc/openssl/cert.pem
ls: /etc/openssl/cert.pem: No such file or directory
% ls /etc/openssl/certs
(ディレクトリが空で、何も返ってこない)

FreeBSDの場合:

% ls /etc/ssl/cert.pem
ls: /etc/ssl/cert.pem: No such file or directory
% ls /etc/ssl/certs
ls: /etc/ssl/certs: No such file or directory
(ディレクトリがない)

ルートCA証明書が入っておらず、root権限がある場合は、入れておく方が良いが、こういう場合、もちろん自分でひとつずつ入れてもいいが、Mozilla がバンドルしている証明書をまとめて拝借してくる場合が多いよう。

mozilla のルート証明書が pkgsrc になっており、これをインストールするのが簡単な方法。

NetBSD の例:

# pkg_add ftp://ftp.jp.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/6.1/security/mozilla-rootcerts-1.0.20121229nb1.tgz
# cd /etc/openssl/certs
# rehash
# mozilla-rootcerts extract
# mozilla-rootcerts rehash

FreeBSD の例:

# pkg_add ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages/security/ca_root_nss-3.15.1.tbz
# ln -s /usr/local/share/certs/ca-root-nss.crt /etc/ssl/cert.pem


所定の場所にルートCA証明書がインストールしてあれば、いちいち指定しなくても、OpenSSLが自動的に証明書の検証を行うようになる。

% wget https://app.aniplex.co.jp/nisekoi/common/img/footer/banner.gif
--2014-01-12 01:54:47--  https://app.aniplex.co.jp/nisekoi/common/img/footer/banner.gif
Resolving app.aniplex.co.jp (app.aniplex.co.jp)... 54.238.231.217
Connecting to app.aniplex.co.jp (app.aniplex.co.jp)|54.238.231.217|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5460 (5.3K) [image/gif]
Saving to: 'banner.gif'

100%[======================================>] 5,460       --.-K/s   in 0.002s

2014-01-12 01:54:48 (3.32 MB/s) - 'banner.gif' saved [5460/5460]

root権限が無い場合や、自己署名証明書(いわゆるオレオレ証明書)を使っているWebサーバからダウンロードする必要がある場合は、wget でも --no-check-certificate を付けることで、証明書を確認せずにダウンロードできる(推奨されない)。

% wget --no-check-certificate https://example.jp/path/to/file

関連