技術ノート Linux Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

Linux の curl コマンドは、ファイルのダウンロード以外にもさまざまなことができます。 curl で何ができるのか、また、 wget の代わりにcurlを使用する必要がある場合について調べてください。

curl と wget : 違いは何ですか?

wget コマンドと curl コマンド の相対的な長所を特定するのに苦労することがよくあります。これらのコマンドには機能的に重複する部分があります。それぞれリモートの場所からファイルを取得できますが、類似点はそこだけです。

wget 、コンテンツやファイルをダウンロードするための素晴らしいツール です。ファイル、Web ページ、ディレクトリをダウンロードできます。これには、Web ページ内のリンクをたどり、Web サイト全体にわたってコンテンツを再帰的にダウンロードするためのインテリジェントなルーチンが含まれています。コマンドラインのダウンロードマネージャーとしては最高です。

curl まったく異なるニーズを 満たします。はい、ファイルを取得できますが、Web サイトを再帰的に移動して取得するコンテンツを探すことはできません。実際に、 curl が行うことは、リモート システムにリクエストを送信し、その応答を取得して表示することで、リモート システムと対話できるようにすることです。これらの応答は Web ページのコンテンツやファイルである可能性がありますが、curl リクエストによって尋ねられた「質問」の結果として Web サービスまたは API を介して提供されるデータが含まれる場合もあります。

そして、 curl Web サイトに限定されません。 curl 、HTTP、HTTPS、SCP、SFTP、FTP など 20 を超えるプロトコルをサポートします。そしておそらく、Linux パイプの優れた処理により、 curl 他のコマンドやスクリプトとより簡単に統合できます。

curl の作者は、 curl wget 違いを説明する Web ページを持っています。

Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

カールのインストール方法

この記事の調査に使用したコンピューターのうち、Fedora 31 と Manjaro 18.1.0 にはすでに curl がインストールされていました。 curl Ubuntu 18.04 LTS にインストールする必要がありました。 Ubuntu では、次のコマンドを実行してインストールします。

 sudo apt-get インストールカール

Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

カールバージョン

--version オプションを指定すると、 curl レポートのバージョンが作成されます。また、サポートされているすべてのプロトコルもリストされています。

カール --バージョン

Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

Curlを使用してWebページを取得する

Web ページに curl を指定すると、Web ページが取得されます。

カール https://www.bbc.com

ただし、デフォルトのアクションは、ソース コードとしてターミナル ウィンドウにダンプすることです。

何かをファイルとして保存するように curl 指示しない場合、curlは常にそれをターミナルウィンドウにダンプします。取得しているファイルがバイナリ ファイルの場合、結果は予測できない可能性があります。シェルは、バイナリ ファイル内の一部のバイト値を制御文字またはエスケープ シーケンスとして解釈しようとする場合があります。

Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

データをファイルに保存する

出力をファイルにリダイレクトするようにcurlに指示しましょう。

カール https://www.bbc.com > bbc.html

今回は、取得した情報は表示されず、ファイルに直接送信されます。表示する端末ウィンドウ出力がないため、 curl 一連の進行状況情報を出力します。

前の例ではこれを実行しませんでした。進行状況情報が Web ページのソース コード全体に散在するため、 curl 自動的にそれを抑制しました。

この例では、 curl 出力がファイルにリダイレクトされていること、および進行状況情報を安全に生成できることを検出します。

提供される情報は次のとおりです。

  • % Total : 取得する合計金額。
  • % Received : これまでに取得されたデータの割合と実際の値。
  • % Xferd : データがアップロードされている場合の、実際に送信されたパーセント。
  • 平均速度 Dload : 平均ダウンロード速度。
  • アップロードの平均速度 : アップロードの平均速度。
  • 合計時間 : 転送の推定合計所要時間。
  • 経過時間 : この転送のこれまでの経過時間。
  • 残り時間 : 転送が完了するまでの推定残り時間
  • 現在の速度 : この転送の現在の転送速度。

出力を curl からファイルにリダイレクトしたため、「bbc.html」というファイルが作成されました。

そのファイルをダブルクリックすると、デフォルトのブラウザが開き、取得した Web ページが表示されます。

ブラウザのアドレス バーのアドレスは、リモート Web サイトではなく、このコンピュータ上のローカル ファイルであることに注意してください。

ファイルを作成するために出力をリダイレクトする必要はありません。 -o (出力) オプションを使用し、 curl にファイルを作成するように指示することで、ファイルを作成できます。ここでは -o オプションを使用し、作成するファイルの名前「bbc.html」を指定しています。

カール -o bbc.html https://www.bbc.com 

Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

進行状況バーを使用してダウンロードを監視する

テキストベースのダウンロード情報を単純な進行状況バーに置き換えるには、 -# (進行状況バー) オプションを使用します。

カール -x -o bbc.html https://www.bbc.com 

Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法

中断されたダウンロードの再開

終了または中断されたダウンロードを簡単に再開できます。大きなファイルのダウンロードを開始しましょう。 Ubuntu 18.04 の最新の長期サポート ビルドを使用します。 --output オプションを使用して、保存先のファイル名「ubuntu180403.iso」を指定します。

 curl --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

ダウンロードが開始され、完了に向けて進みます。

Ctrl+C でダウンロードを強制的に中断すると、コマンド プロンプトに戻り、ダウンロードは中止されます。

ダウンロードを再開するには、 -C (Continue at) オプションを使用します。これにより、 curl ターゲット ファイル内の指定されたポイントまたはオフセットでダウンロードを再開します。ハイフン - オフセットとして使用すると、 curl ファイルの既にダウンロードされた部分を調べて、それ自体に使用する正しいオフセットを決定します。

カール -C - --output ubuntu18043.iso http://releases.ubuntu.com/18.04.3/ubuntu-18.04.3-desktop-amd64.iso

ダウンロードが再開されます。 curl 、再起動するオフセットを報告します。

HTTPヘッダーの取得

-I (head) オプションを使用すると、HTTP ヘッダーのみを取得できます。これは、 HTTP HEAD コマンドを Web サーバーに送信するのと同じです。

カール - 私 www.twitter.com

このコマンドは情報のみを取得します。 Web ページやファイルはダウンロードされません。

複数の URL をダウンロードする

xargs を使用すると、複数の URL を 一度にダウンロードできます。おそらく、単一の記事またはチュートリアルを構成する一連の Web ページをダウンロードしたいと考えます。

これらの URL をエディタにコピーし、「urls-to-download.txt」という名前のファイルに保存します。 xargs を使用すると、テキスト ファイルの 各行の内容をパラメータとして扱う ことができ、そのパラメータが順番に curl に供給されます。

 https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#0

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#1

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#2

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#3

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#4

https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-ubuntu#5

これは、 xargs にこれらの URL を一度に 1 つずつ curl に渡すために使用する必要があるコマンドです。

 xargs -n 1curl -O < urls-to-download.txt

このコマンドは、大文字の「O」を使用する -O (リモート ファイル) 出力コマンドを使用することに注意してください。このオプションを指定すると、 curl 取得したファイルをリモート サーバー上のファイルと同じ名前で保存します。

-n 1 オプションは、テキスト ファイルの各行を単一のパラメータとして扱うように xargs 指示します。

コマンドを実行すると、複数のダウンロードが次々に開始および終了することがわかります。

ファイルブラウザで確認すると、複数のファイルがダウンロードされていることがわかります。それぞれには、リモート サーバー上で付けられていた名前が付けられます。

FTPサーバーからファイルをダウンロードする

ユーザー名とパスワードで認証する必要がある場合でも、 ファイル転送プロトコル (FTP) サーバーで curl を使用するのは簡単です。 curl でユーザー名とパスワードを渡すには、 -u (ユーザー) オプションを使用し、ユーザー名、コロン「:」、およびパスワードを入力します。コロンの前後にスペースを入れないでください。

これは、 Rebex がホストする無料のテスト用 FTP サーバーです。テスト FTP サイトのユーザー名は「demo」、パスワードは「password」にあらかじめ設定されています。この種の弱いユーザー名とパスワードを運用サーバーまたは「実際の」FTP サーバーでは使用しないでください。

カール -u デモ:パスワード ftp://test.rebex.net

curl 、FTP サーバーを指していることを認識し、サーバー上に存在するファイルのリストを返します。

このサーバー上の唯一のファイルは、長さ 403 バイトの「readme.txt」ファイルです。取り戻しましょう。先ほどと同じコマンドを使用し、ファイル名を追加します。

カール -u デモ:パスワード ftp://test.rebex.net/readme.txt

ファイルが取得され、 curl その内容を端末ウィンドウに表示します。

ほとんどの場合、取得したファイルはターミナル ウィンドウに表示するよりもディスクに保存した方が便利です。もう一度、 -O (リモート ファイル) 出力コマンドを使用すると、リモート サーバー上にあるのと同じファイル名でファイルをディスクに保存できます。

カール -O -u デモ:パスワード ftp://test.rebex.net/readme.txt

ファイルが取得され、ディスクに保存されます。 ls を使用してファイルの詳細を確認できます。このファイルは FTP サーバー上のファイルと同じ名前を持ち、長さは同じ 403 バイトです。

 ls -hl readme.txt

パラメータをリモートサーバーに送信する

一部のリモート サーバーは、送信されるリクエスト内のパラメーターを受け入れます。パラメーターは、たとえば返されたデータをフォーマットするために使用される場合もあれば、ユーザーが取得したい正確なデータを選択するために使用される場合もあります。多くの場合、 curl 使用して Web アプリケーション プログラミング インターフェイス (API) と対話することが可能です。

簡単な例として、 ipify Web サイトには、外部 IP アドレスを確認するためにクエリを実行できる API があります。

カール https://api.ipify.org

コマンドに format パラメーターを追加し、値「json」を使用して外部 IP アドレスを再度リクエストできます。ただし、今回返されるデータは JSON 形式 でエンコードされます。

カール https://api.ipify.org?format=json

Google API を使用する別の例を次に示します。本を説明する JSON オブジェクトを返します。指定する必要があるパラメータは、書籍の 国際標準書籍番号 (ISBN) 番号です。これらはほとんどの本の裏表紙、通常はバーコードの下にあります。ここで使用するパラメータは「0131103628」です。

カール https://www.googleapis.com/books/v1/volumes?q=isbn:0131103628

返されるデータは包括的​​です。

時にはカール、時にはwget

Web サイトからコンテンツをダウンロードし、Web サイトのツリー構造でそのコンテンツを再帰的に検索したい場合は、 wget を使用します。

リモート サーバーまたは API と対話し、場合によってはファイルまたは Web ページをダウンロードしたい場合は、 curl 使用します。特に、そのプロトコルが wget でサポートされていないプロトコルの 1 つである場合はそうです。

Linuxコマンド

ファイル

tar pv cat tac chmod grep diff sed ar man pushd popd fsck testdisk seq fd pandoc cd $PATH awk join jq fold uniq journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr

プロセス

エイリアス · スクリーン · トップ · ナイス · renice · 進行状況 · strace · systemd · tmux · chsh · 履歴 · at · バッチ · フリー · what · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · タイムアウト · ウォール · はい · キル · スリープ · sudo · su · タイム · groupadd · usermod · グループ · lshw · シャットダウン · 再起動 · 停止 · パワーオフ · パスワード · lscpu · crontab · 日付 · bg · fg · pidof · nohup · pmap

ネットワーキング

netstat ping ip ss whois fail2ban bmon dig finger nmap ftp curl wget who whoami w iptables ssh-keygen ufw arping firewalld

「 Linuxコマンドラインからcurlを使用してファイルをダウンロードする方法」に関するベスト動画選定!

2broRadio【vol.178】
CURL