【FreeBSD】コマンドラインからインターネット上のファイルをダウンロードしたい (cURL/wget)

確認環境

PC Thinkpad X1 Carbon 2nd Gen
OS FreeBSD 12.0-RELEASE-p5
cURL curl 7.65.0 (amd64-portbld-freebsd12.0)
wget GNU Wget 1.20.3 built on freebsd12.0

課題

コマンドラインからインターネット上のファイルをサクッとダウンロードしたい。

対策

FreeBSD標準のfetchコマンドでもファイルのダウンロードができる。
ただ、何かと便利なcURLwgetをインストールしておこう。

下記のような感じで使える。

> wget ダウンロードしたいファイルのURL  

ここでは、下記について説明する。

  1. cURLwgetの特徴
  2. インストール
  3. 基本的な使い方
    1. ダウンロード(ファイルへ保存)
    2. ダウンロード(標準出力へ出力)
    3. wgetでの一括ダウンロード実例

1. cURLwgetの特徴

cURLwgetの違いについてはこちらのサイトが詳しい。
利用者からすると下記のような特徴があるっぽい。

  • cURL
    • ファイルのアップロードもできる
    • 基本的にパイプとして動作する
    • 対応プロトコルが多い(FTP,HTTP,HTTPS,FILE,POP3,SCP,SFTP,TFTP,SMTP,etc...)
    • 開発が活発で、認証方式や暗号化方式への対応も盛んっぽい
    • ライブラリとしてlibcurlが提供されている
    • MITライセンス
  • wget
    • ファイルをダウンロードするだけなら、cURLよりも手軽に使える
    • WEBページのリンクを再帰的に辿って、ファイルを一括ダウンロードできる
    • 対応プロトコルは少ない(FTP,HTTP,HTTPS)
    • GPLv3ライセンス

wgetはファイルのダウンロードに特化していて、cURLはもっと汎用的なイメージ。

2. インストール

どちらもpkgコマンドでインストールできる。
(root権限で実施してね)

> pkg install curl wget  

3. 基本的な使い方

ここでは、基本的な使い方をいくつか紹介する。
詳細は、man wgetやページ末の参考サイトで調べてねと。

ダウンロード(ファイルへ保存)

> curl -Lo filename http://target.url.com/  
> wget -O filename http://target.url.com/  
> wget http://target.url.com/
  • cURL
    • -L: リダイレクトを有効にする(wgetはデフォルト有効)
    • -o filename: ファイルを保存するパスを指定 (上記では-Lo-Lとまとめて指定)
  • wget
    • -O filename: ファイルを保存するパスを指定(省略時は 元のファイル名で保存)

ダウンロード(標準出力へ出力)

> curl -s http://target.url.com/  
> wget -q -O - http://target.url.com/  
  • cURL
    • -s: 余計な出力をしない(ダウンロード進捗など)
  • wget
    • -q: 余計な出力をしない(ダウンロード進捗など)
    • -O -: 出力先に標準出力を指定

wgetでの一括ダウンロード実例

FreeBSD Handbook - UNIX の基礎知識直下のリンクをダウンロードしてみる。
※ 指定URLのサーバに負荷がかかるので自重しましょう

> wget -nd -nH -np -p -k -r -l 1 -w 2 -A html -P handbook https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/basics.html
  • options
    • -nd: 階層ディレクトリを作成しない
    • -nH: ホスト名のディレクトリを作成しない
    • -np: 指定URLより親の階層は辿らない
    • -p: ローカル環境で表示するために必要なファイルも含めてダウンロードする
    • -k: ダウンロード後、各リンクのURLをローカルで参照できる形に変換する
    • -r: 指定URLから再帰的に辿る
    • -l 1: 再帰的にリンクを辿る回数の制限。'0'を指定した場合は、無制限
    • -w 2: 1回のリクエストをサーバに送る際の待機秒数(例では2秒)
    • -A html: ダウンロードするファイル拡張子。複数の場合カンマ区切りで指定
    • -P handbook: 保存するディレクトリ名(例では'handbook')

引数がない1文字のオプションは、まとめて書ける。
(-p -k -r-pkr みたいな感じ)

上記コマンド実行後、ディレクトリには下記のようなファイルが保存された。

> find .  
.  
./handbook  
./handbook/basics-devices.html  
./handbook/basics-processes.html  
./handbook/using-live-cd.html  
./handbook/editors.html  
./handbook/mount-unmount.html  
./handbook/basics.html  
./handbook/legalnotice.html  
./handbook/basics-more-information.html  
./handbook/robots.txt.tmp  
./handbook/index.html  
./handbook/dirstructure.html  
./handbook/shells.html  
./handbook/permissions.html  
./handbook/getting-started.html  
./handbook/basics-daemons.html  
./handbook/disk-organization.html  
./handbook/consoles.html  

参考

以上。