wgetコマンドで覚えておきたい使い方16個(+1個)

wgetコマンドといえば、webからファイルをダウンロードしたりする際によく利用するコマンドだ。
今回は、このwgetコマンドについて覚えておきたい使い方をまとめてみる事にする。

1.基本の使い方

基本的には、以下のようにオプション無しでコマンドを実行することで、Web上のファイルをダウンロードする。
ダウンロードしたファイルはカレントディレクトリに同じ名前で保存される。

wget http://ファイルのURL
[root@test-node work]# ls -la
合計 4
drwxr-xr-x.  2 root root    6  3月 19 00:39 .
dr-xr-x---. 19 root root 4096  3月 19 00:39 ..
[root@test-node work]# wget http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
--2016-03-19 00:41:07--  http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 74219 (72K)
`diffc' に保存中 100%[=========================================================================>] 74,219 455KB/s 時間 0.2s 2016-03-19 00:41:08 (455 KB/s) - `diffc' へ保存完了 [74219/74219] [root@test-node work]# ls -la 合計 80 drwxr-xr-x. 2 root root 18 3月 19 00:41 . dr-xr-x---. 19 root root 4096 3月 19 00:39 .. -rw-r--r--. 1 root root 74219 5月 6 2011 diffc

2.ファイルの保存先を指定する

オプション無しでwgetコマンドを実行した場合、そのままカレントディレクトリ配下にファイルが配置されてしまう。
任意のPATH、任意のファイル名で保存したい場合は、「-O」オプションを用いる。

wget -O 出力先PATH http://ファイルのURL
[root@test-node work]# wget -O /tmp/diffc http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
--2016-03-19 01:02:44--  http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 74219 (72K)
`/tmp/diffc' に保存中 100%[=========================================================================>] 74,219 407KB/s 時間 0.2s 2016-03-19 01:02:45 (407 KB/s) - `/tmp/diffc' へ保存完了 [74219/74219] [root@test-node work]# ls -la /tmp/diffc -rw-r--r--. 1 root root 74219 5月 6 2011 /tmp/diffc

3.ダウンロードに失敗しても、再度やり直しする

ダウンロードを途中で中断してしまい、再度やり直しをしたい場合は再ダウンロード時に「-c」オプションを用いると良いだろう。
※再ダウンロード時にすでにダウンロード済の箇所は、プログレスバー上では「+」で表現される。

wget -c http://ファイルのURL
[root@test-node work]# wget http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
--2016-03-19 01:12:09--  http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1
ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4329570304 (4.0G) [application/octet-stream]
`CentOS-7-x86_64-DVD-1511.iso' に保存中

 5% [===>                                                                      ] 250,988,834 37.5MB/s  残り1m 54s ^C
[root@test-node work]# wget -c http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
--2016-03-19 01:12:18--  http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1
ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 206 Partial Content
長さ: 4329570304 (4.0G), 4072590724 (3.8G) 残っています [application/octet-stream]
`CentOS-7-x86_64-DVD-1511.iso' に保存中

40% [++++========================>                                           ] 1,760,074,548 28.8MB/s  残り75s

4.ダウンロードの速度制限を行う

「--limit-rate」を指定することで、ダウンロード速度に制限をかけることが出来る。

wget --limit-rate=制限する速度 http://ファイルのURL
[root@test-node work]# wget --limit-rate=2m -c http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1
511.iso
--2016-03-19 01:35:44--  http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1
ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 206 Partial Content
長さ: 4329570304 (4.0G), 2563319808 (2.4G) 残っています [application/octet-stream]
`CentOS-7-x86_64-DVD-1511.iso' に保存中

41% [+++++++++++++++++++++++++++++                                           ] 1,785,363,556 2.00MB/s  残り20m 15s

5.ダウンロードをバックグラウンドで実行する

ダウンロードをバックグラウンドで実行させる場合は、「-b」オプションを用いる。

wget -b http://ファイルのURL
[root@test-node work]# wget -b http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
バックグラウンドで継続します、pidは 10808。
出力を `wget-log' に書き込みます。
[root@test-node work]# ls -al wget-log
-rw-r--r--. 1 root root 114428  3月 19 01:42 wget-log
[root@test-node work]# tail wget-log
210650K .......... .......... .......... .......... ..........  4% 28.2M 2m34s
210700K .......... .......... .......... .......... ..........  4% 66.0M 2m34s
210750K .......... .......... .......... .......... ..........  4% 43.8M 2m34s
210800K .......... .......... .......... .......... ..........  4% 49.5M 2m34s
210850K .......... .......... .......... .......... ..........  4% 23.9M 2m34s
210900K .......... .......... .......... .......... ..........  4% 26.1M 2m34s
210950K .......... .......... .......... .......... ..........  4% 25.5M 2m34s
211000K .......... .......... .......... .......... ..........  4% 31.0M 2m34s
211050K .......... .......... .......... .......... ..........  4%  188M 2m33s

6.UserAgentを偽装する

通常、wgetでダウンロードをした場合だとUserAgentには「Wget/Wgetのバージョン」が利用されるのだが、「--user-agent」オプションを用いる事でこれを偽装することができる。

wget --user-agent="偽装するUserAgentの内容" http://ファイルのURL

7.URLの記述されたファイルを読み込んで複数ファイルを連続でダウンロードする

複数ファイルを連続でダウンロードする場合、テキストファイルに対象のURLを記述しておき、それを「-i」オプションで読み込む事で対応できる。

wget -i URLを記述したファイルPATH

8.再起的にダウンロードを行う

対象のURL内を再帰的にダウンロードする場合は、「-r」オプションを付与する。

wget -r http://再帰的にダウンロードを行うURL

なお、この時に以下のようなオプションを指定して、ダウンロードするファイル、そうじゃないファイルなどを指定する事ができる(一部抜粋)。

  • -A(--accept=) … ダウンロードする拡張子をカンマ区切りで指定する
  • -R(--reject=) … ダウンロードしない拡張子をカンマ区切りで指定する
  • -l(--level=) … 階層の深さを指定(0の場合は無制限)
  • -p(--page-requisites) … HTML を表示するのに必要な全ての画像等も取得す

9.ユーザ名・パスワードを指定する

Basic認証が必要なページの場合、以下のようにユーザ名・パスワードを指定することで認証を受けてダウンロードを行う事が出来る。

wget --http-user=ユーザ名 --http-passwd=パスワード http://ファイルのURL

10.詳細情報を表示させない

通常、オプション無しだとダウンロードの詳細情報が表示されてしまうが、これが不要な場合は「-q」オプションを付与する。

wget -q http://ファイルのURL
[root@test-node work]# wget -q http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
[root@test-node work]# ls -la diffc
-rw-r--r--. 1 root root 74227  5月  6  2011 diffc

11.ダウンロードせずにファイルの有無を確認する

ファイルを実際にダウンロードせず、その有無だけを確かめる場合は「--spider」オプションを付与する。

wget --spider http://ファイルのURL
[root@test-node work]# wget --spider http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
スパイダーモードが有効です。リモートファイルが存在してるか確認します。
--2016-03-19 10:23:47--  http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 74227 (72K)
リモートファイルが存在します。

12.プロキシサーバ経由でダウンロードする

プロキシを経由する場合は、以下のようにプロキシサーバを指定してコマンドを実行する。

wget -e HTTP_PROXY=プロキシサーバのホスト:ポート番号 http://ファイルのURL

プロキシサーバにユーザ名、パスワードが必要な場合は、以下のように指定する。

wget -e HTTP_PROXY=proxy.co.jp --proxy-user=ユーザ名 --proxy-password=パスワード http://ファイルのURL

13.ダウンロードのリトライ回数を指定する

ダウンロードのリトライ回数を指定する場合は、「--tries」オプションでリトライ回数を指定出来る。

wget --tries=リトライ回数 http://ファイルのURL

14.サーバの応答情報を取得する

ダウンロード時のサーバの応答情報を取得する場合は、「-S」オプションを用いるといいだろう。

wget -S http://ファイルのURL
[root@test-node work]# wget -S http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
--2016-03-19 10:47:08--  http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています...
  HTTP/1.1 200 OK
  Date: Sat, 19 Mar 2016 15:47:08 GMT
  Server: Apache
  Last-Modified: Sat, 07 May 2011 01:23:39 GMT
  ETag: "22//trunk/bin/python3/diffc"
  Accept-Ranges: bytes
  Expires: Sat, 19 Mar 2016 15:50:08 GMT
  Cache-Control: public, max-age=180
  Content-Length: 74227
  Content-Type: text/plain
長さ: 74227 (72K)
`diffc' に保存中 100%[=========================================================================>] 74,227 462KB/s 時間 0.2s 2016-03-19 10:47:09 (462 KB/s) - `diffc' へ保存完了 [74227/74227]

15.ダウンロードしたファイルの内容を標準出力に表示する

ダウンロードしたファイルの内容を、ファイルではなく標準出力でそのまま表示させることも出来る。

wget -O - http://ファイルのURL
[root@test-node ~]# wget -O - //orebibou.com
--2016-03-19 10:50:55--  //orebibou.com/
orebibou.com (orebibou.com) をDNSに問いあわせています... 157.112.152.17
orebibou.com (orebibou.com)|157.112.152.17|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません
`STDOUT' に保存中 [<=> ] 0 --.-K/s ...略

16.ログイン情報をCookiesに保持させてアクセスする

ベーシック認証ではなく、普通にZabbixなどで普通にログイン・ログアウト情報をCookiesに保持させてWeb上の情報を取得する事も出来る。
以下のように、一度ログインページで必要な情報(ユーザ名・パスワード等)のラベル名を確認し、それにpost-dataでログイン情報を渡し認証。その後は、そのCookiesファイルを読み込んでアクセスをすれば認証された状態でWebの情報を取得出来る。
※post-dataのラベル名はページによって異なる

wget --cookies=on --save-cookies cookies.txt --keep-session-cookies --post-data 'username=ユーザ名&password=パスワード' http://ログインページのURL
wget --cookies=on --load-cookies cookies.txt --keep-session-cookies http://ログイン後にダウンロードしたいファイルのURL

2016/10/12 追記

17.ファイルをダウンロードするディレクトリを指定する

ファイルのダウンロードを行うディレクトリを指定する場合は「-P」オプションでPATHを指定すればよい。

wget http://ファイルのURL -P ディレクトリPATH