はじめに
Linux における非対話型ダウンロードに関する初心者向けの実験へようこそ。コマンドラインから効率的にファイルをダウンロードする能力は、Linux ユーザーやシステム管理者にとって不可欠なスキルです。
この実験では、wget コマンドの使い方を学びます。wget は強力なユーティリティで、手動介入なしでインターネットからファイルをダウンロードできます。このツールは、複数のファイルを取得する場合、バックグラウンドでダウンロードする場合、またはスクリプトでダウンロードタスクを自動化する場合に特に便利です。
この実験の終了時には、コマンドラインを通じて、インターフェースやプロンプトなしで、wget を使って個々のファイルをダウンロードし、ダウンロードしたファイルをリネームし、リストから複数のファイルをダウンロードする方法を理解するようになります。
環境のセットアップと基本的なダウンロード
この最初のステップでは、作業ディレクトリを作成し、wget コマンドを使用して単一のファイルをダウンロードする方法を学びます。
作業ディレクトリの作成
まず、ダウンロードしたすべてのファイルを保存するディレクトリを作成しましょう。これにより、ファイルを 1 つの場所に整理することができます。
プロジェクトディレクトリに移動し、download_resources という名前の新しいディレクトリを作成します。
cd ~/project
mkdir download_resources
wget コマンドの理解
wget コマンドは、Web から非対話的にファイルをダウンロードするためのユーティリティです。その基本的な構文は次のとおりです。
wget [オプション] [URL]
最初のダウンロード
では、wget を使用してファイルをダウンロードしましょう。テストファイルとして Python の配布パッケージをダウンロードします。
cd ~/project/download_resources
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
このコマンドを実行すると、次のような出力が表示されるはずです。
--2024-01-10 10:14:51-- https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22540566 (21M) [application/octet-stream]
Saving to: 'Python-3.6.1.tgz'
Python-3.6.1.tgz 100%[=============================================================>] 21.50M 26.8MB/s in 0.8s
2024-01-10 10:14:52 (26.8 MB/s) - 'Python-3.6.1.tgz' saved [22540566/22540566]
この出力は次のことを示しています。
- アクセスしている URL
- サーバーの IP アドレス
- HTTP レスポンス (200 OK は成功を意味します)
- ファイルサイズ (約 21MB)
- ダウンロードの進捗状況
- ダウンロード速度と時間
- ファイルが元の名前で保存されたことの確認
ファイルが正しくダウンロードされたことを確認しましょう。
ls -lh
ディレクトリに Python-3.6.1.tgz ファイルがそのサイズとともに表示されるはずです。
カスタムファイル名でのダウンロード
このステップでは、ファイルをダウンロードし、URL のデフォルト名ではなくカスタムファイル名で保存する方法を探ります。
-O オプションの使用
-O(大文字の O、ゼロではない)オプションを使用すると、出力ファイルの名前を指定できます。これは以下の場合に便利です。
- より説明的なファイル名が必要な場合
- URL のデフォルトのファイル名が複雑すぎる場合
- 同じリソースの複数バージョンをダウンロードする場合
別の Python パッケージをダウンロードしてみましょう。今回はカスタム名で保存します。
cd ~/project/download_resources
wget -O CustomPython.tgz https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
このコマンドでは:
-O CustomPython.tgzはwgetにファイルをCustomPython.tgzとして保存するよう指示します。- ファイルは指定された URL からダウンロードされますが、カスタム名で保存されます。
出力は前と似ていますが、「Saving to」行にカスタムファイル名が表示されていることに注意してください。
--2024-01-10 10:20:51-- https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22676538 (22M) [application/octet-stream]
Saving to: 'CustomPython.tgz'
CustomPython.tgz 100%[=============================================================>] 21.63M 25.9MB/s in 0.8s
2024-01-10 10:20:52 (25.9 MB/s) - 'CustomPython.tgz' saved [22676538/22676538]
ファイルがカスタム名でダウンロードされたことを確認しましょう。
ls -lh
ディレクトリには、元の Python-3.6.1.tgz ファイルと新しい CustomPython.tgz ファイルの両方が表示されるはずです。
その他の便利なオプション
wget のオプションについて学んでいる間に、いくつかの便利なオプションを紹介します。
-q(quiet):出力を抑制します。スクリプトで使用するのに便利です。-c(continue):途中で中断されたダウンロードを再開します。--limit-rate=1m:ダウンロード速度を制限します(例:1 秒あたり 1 メガバイト)。
たとえば、カスタム名で静かにダウンロードするには:
wget -q -O PythonQuiet.tgz https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
このコマンドは何も出力を表示しませんが、ファイルはダウンロードされます。以下のコマンドで確認できます。
ls -lh
ディレクトリに PythonQuiet.tgz ファイルも表示されるはずです。
リストから複数のファイルをダウンロードする
実際のシナリオでは、複数のファイルをダウンロードする必要があることがよくあります。各 wget コマンドを手動で入力するのは非効率的です。幸いなことに、wget はリストから複数のファイルをダウンロードできるため、自動化に最適です。
URL を含むファイルの作成
まず、ダウンロードしたいファイルの URL を含むテキストファイルを作成しましょう。
cd ~/project/download_resources
echo "https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz" > download_list.txt
echo "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz" >> download_list.txt
echo "https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz" >> download_list.txt
これらのコマンドでは:
- 最初の
echoコマンドはdownload_list.txtという新しいファイルを作成し、最初の URL を追加します。 - それ以降の
echoコマンドは>>(二重リダイレクト)を使用して、追加の URL をファイルに追加します。
ファイルの内容が正しいことを確認しましょう。
cat download_list.txt
3 つの URL がそれぞれ独立した行に表示されるはずです。
https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
入力ファイルを使用した wget の実行
これで、wget の -i オプションを使用して、ファイルから URL を読み取り、すべてのファイルをダウンロードできます。
wget -i download_list.txt
このコマンドは、wget に download_list.txt から URL を読み取り、各ファイルを順番にダウンロードするよう指示します。単一のファイルをダウンロードしたときと同様に、各ダウンロードの出力が表示されます。
--2024-01-10 10:30:51-- https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
Resolving www.python.org (www.python.org)... 151.101.76.223, 2a04:4e42:12::223
Connecting to www.python.org (www.python.org)|151.101.76.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 22808518 (22M) [application/octet-stream]
Saving to: 'Python-3.7.0.tgz'
Python-3.7.0.tgz 100%[=============================================================>] 21.75M 25.9MB/s in 0.8s
2024-01-10 10:30:52 (25.9 MB/s) - 'Python-3.7.0.tgz' saved [22808518/22808518]
--2024-01-10 10:30:52-- https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
...
ダウンロードしたファイルの確認
ダウンロードが完了したら、すべてのファイルが正しくダウンロードされたことを確認しましょう。
ls -lh Python-3.7.*
リストからダウンロードした 3 つの Python 3.7.x ファイルが表示されるはずです。
-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.0.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:30 Python-3.7.1.tgz
-rw-r--r-- 1 labex labex 22M Jan 10 10:31 Python-3.7.2.tgz
バッチダウンロードスクリプトの作成
将来的に使用するために、リストからファイルをダウンロードできる簡単なシェルスクリプトを作成しましょう。これは、wget を自動化で使用する方法を示しています。
cd ~/project/download_resources
nano batch_download.sh
ファイルに以下の内容を入力します。
#!/bin/bash
## A simple script to download files from a list
if [ -f "$1" ]; then
echo "Downloading files from list: $1"
wget -i "$1"
else
echo "Error: File $1 not found"
exit 1
fi
Ctrl+O を押してファイルを保存し、Enter を押し、Ctrl+X で終了します。
スクリプトを実行可能にします。
chmod +x batch_download.sh
これで、将来的に任意のリストからファイルをダウンロードするためにこのスクリプトを使用できます。
./batch_download.sh download_list.txt
このコマンドは、以前の wget -i download_list.txt コマンドと同じことを行いますが、再利用可能なスクリプトにまとめられています。
まとめ
この実験では、Linux で非対話的なダウンロードに wget コマンドを使用する方法を学びました。以下のスキルを身につけました。
- 基本的な
wgetコマンドを使用して個々のファイルをダウンロードする -Oオプションを使用して、ダウンロードしたファイルをカスタム名で保存する- URL のリストを作成し、
-iオプションを使用して複数のファイルを一度にダウンロードする - バッチダウンロード用の簡単な自動化スクリプトを作成する
これらのスキルは、システム管理者、開発者、およびコマンドラインから効率的にファイルをダウンロードする必要があるすべての Linux ユーザーにとって価値があります。非対話的なダウンロードは、自動化、リモートサーバー管理、およびグラフィカルインターフェイスが利用できない状況で特に有用です。
独自に探索してみると良い wget の追加機能には以下のものがあります。
- ウェブサイトのミラーリングに
-rを使用した再帰的なダウンロード - 長時間のダウンロードに
-bを使用したバックグラウンドダウンロード - 保護されたリソースに
--userと--passwordを使用した認証 - タイムアウト、リトライ、およびその他の接続パラメータの設定
これらの機能を使えば、Linux コマンドラインから幅広いダウンロードシナリオを効率的に処理できます。



