aria2
大きなファイル、遅いサーバー、大量のダウンロード、トレント
- サーバーが接続ごとに速度を制限している場合、最大 10 倍高速
- BitTorrent、Metalink、ミラーに標準で対応
- RPC で操作できるダウンロードサーバー
3 つともコマンドラインからファイルをダウンロードできますが、得意な用途は異なります。同じマシン、同じテストサーバーで並べて実行し、すべての数値を記録しました。
aria2
wget
curl
ミラーやファイルホスティングは、1 つの接続の速度に上限を設けていることがよくあります。テストサーバーは 24 MiB/s の回線で、接続あたり 2 MiB/s に制限しました。ファイルサイズは 50 MB です。
| ツール | コマンド | 秒 |
|---|---|---|
| wget | 24.0 | wget URL · 24.0 秒 |
| curl | 24.0 | curl -O URL · 24.0 秒 |
| aria2、1 接続 | 24.1 | aria2c URL · 24.1 秒 |
| aria2 -x16 -s16 | 12.2 | aria2c -x16 -s16 URL · 12.2 秒 |
| aria2 -x16 -s16 -k1M | 2.3 | aria2c -x16 -s16 -k1M URL · 2.3 秒 |
1 つの接続では、3 つともかかった時間は 24 秒で、速度はサーバー側で決まります。16 接続の aria2 は 12.2 秒かかりました。デフォルトの -k 20M では、50 MB のファイルが 2 つのピースにしか分割されないためです。-k1M を付けると 16 接続すべてを使い、2.3 秒で完了しました。
2 MB のファイル 20 個を、リクエストごとに 80 ms の遅延を加え、接続あたり 2 MiB/s に制限するサーバーからダウンロードしました。wget と通常の curl は 1 つずつ順番に取得し、curl --parallel と aria2 は複数を同時に取得します。
| ツール | コマンド | 秒 |
|---|---|---|
| wget -i | 21.8 | wget -i urls.txt · 21.8 秒 |
| curl(1 つずつ) | 21.9 | xargs -n1 curl -O < urls.txt · 21.9 秒 |
| curl --parallel | 5.5 | curl --parallel --parallel-max 5 -O … · 5.5 秒 |
| aria2c -i | 4.5 | aria2c -i urls.txt · 4.5 秒 |
| aria2c -i -j16 -x4 | 2.0 | aria2c -i urls.txt -j16 -x4 -k1M · 2.0 秒 |
aria2 はデフォルトで 5 つのダウンロードを同時に実行し、同じ上限の curl --parallel より少し高速でした。-j16 -x4 を付けると回線の上限に達し、wget の 21.8 秒に対して 2.0 秒でした。5 つの実行はすべて同一のファイルを生成しました。
制限のないローカルサーバーでは、3 つとも 50 MB のファイルを 1 秒未満でダウンロードしました。wget と curl は aria2 より少しだけ速く、aria2 は最初にファイル用のディスク領域を確保するためです。1 つの接続だけで回線を使い切れる場合、接続を増やしても速くなりません。
同じ HTTP ダウンロード中に測定しました。「自身のメモリ」はプログラムが自分で確保した量で、合計には共有システムライブラリが加わります。
最も軽いのは wget です。aria2 はダウンロードエンジン、ディスクキャッシュ、BitTorrent のコードを準備しておくため多めに使いますが、4.5 MiB でも十分小さな値です。aria2 の公式の数値は 4~9 MiB です。
速度制限のあるダウンロードを、各ツールで途中まで進めたところで停止し、もう一度開始しました。3 つとも正しいファイルで完了しました。wget は -c、curl は -C -、aria2 は -c を使いました。aria2 は -c なしでも再開できました。.aria2 制御ファイルに、どのピースが完了したかが記録されているためです。なお、aria2 は最初にファイル全体のサイズを確保するため、途中のファイルでも最終的なサイズが表示されます。
多くのダウンロードリンクはミラーにリダイレクトします。wget と aria2 はデフォルトでリダイレクトをたどりますが、curl はたどりません。-L なしでは空のファイルを保存し、それでも終了コード 0 で終了したため、スクリプトは気付きません。ダウンロードには必ず curl -L を使ってください。
各ツールのドキュメントと照らし合わせ、可能なものは実際に実行して確認しました。
| aria2 | wget | curl | |
|---|---|---|---|
| 1 つのファイルを複数の接続でダウンロード | はい | いいえ | いいえ |
| 1 つのファイルを複数のミラーから同時にダウンロード | はい | いいえ | いいえ |
| BitTorrent とマグネットリンク | はい | いいえ | いいえ |
| Metalink | はい | 一部のビルド | いいえ |
| 中断したダウンロードの再開 | はい | はい | はい |
| リモート操作(RPC) | はい | いいえ | いいえ |
| Web サイト全体のミラーリング | いいえ | はい | いいえ |
| アップロード、25 以上のプロトコル、API | いいえ | いいえ | はい |
| ほとんどの Linux にプリインストール | いいえ | はい | はい |
最後の 2 行を除くすべての行を、数値は独自の値に置き換えてテストサーバーで実行し、いずれも正しいファイルが得られました。
| 作業 | wget | curl | aria2c |
|---|---|---|---|
| ファイルをダウンロード | wget URL | curl -O URL | aria2c URL |
| 別の名前で保存 | wget -O name.iso URL | curl -o name.iso URL | aria2c -o name.iso URL |
| フォルダーに保存 | wget -P dir URL | curl --output-dir dir -O URL | aria2c -d dir URL |
| 再開 | wget -c URL | curl -C - -O URL | aria2c -c URL |
| 速度を 1 MiB/s に制限 | wget --limit-rate=1m URL | curl --limit-rate 1M -O URL | aria2c --max-download-limit=1M URL |
| 最大 10 回再試行 | wget --tries=10 URL | curl --retry 10 -O URL | aria2c --max-tries=10 URL |
| ヘッダーを送信 | wget --header="X-Key: 1" URL | curl -H "X-Key: 1" -O URL | aria2c --header="X-Key: 1" URL |
| ユーザーエージェントを設定 | wget -U "Agent/1" URL | curl -A "Agent/1" -O URL | aria2c -U "Agent/1" URL |
| HTTP のログイン | wget --user=U --password=P URL | curl -u U:P -O URL | aria2c --http-user=U --http-passwd=P URL |
| URL のリストをダウンロード | wget -i urls.txt | xargs -n1 curl -O < urls.txt | aria2c -i urls.txt |
| 証明書の確認を省略 | wget --no-check-certificate URL | curl -k -O URL | aria2c --check-certificate=false URL |
| リダイレクトをたどる | wget URL | curl -L -O URL | aria2c URL |
| 1 つのファイルを 16 接続で | 不可 | 不可 | aria2c -x16 -s16 -k1M URL |
| トレントをダウンロード | 不可 | 不可 | aria2c file.torrent |
| Web サイトをコピー | wget -r -np URL | 不可 | 不可 |
aria2c -x16 -s16 -k1Maria2c -i urls.txt -j16aria2caria2c --enable-rpc と WebUIwget -r -npcurlwget または curl -L(インストール済み)