ウェブサイト検索

scpとrsyncを使用してシステム間でファイルを転送する方法


重要なポイント

  • SCPとrsyncはどちらもファイルを安全に転送できますが、rsyncは定期的な転送やネットワークの問題への対処に優れています。
  • 手動のファイル転送にはscpを使用します。rsyncは、圧縮などの高度なオプションを持つスクリプトやcronジョブにより適しています。
  • 両方ともセキュリティのためにSSHが必要ですが、rsyncは使用するために両方のコンピュータにインストールされている必要があります。

Linuxのコマンドラインで2台のコンピュータ間でファイルを転送するためのツールはたくさんありますが、scpとrsyncコマンドはほぼすべての使用例をカバーします。これらをいつどのように使用するかをご紹介します。

scpとrsyncの違いは何ですか?

scpコマンドとrsyncコマンドは、2台のコンピュータ間でファイルを移動させることができ、どちらも非常に安全にそれを行うことができます。これら2つのコマンドの主な違いは、彼らが何をするかではなく、どのようにそれを行うかにあります。

scpコマンドは「secure copy」を意味し、多くの点で標準のUnixのcp(「copy」)コマンドのように機能しますが、二台のコンピュータ間で行われます。この名前の「secure」は、リモートコンピュータと通信するために使用されるプロトコルであるSSHを指しています。

このコマンドは聞こえる通りシンプルで、あるコンピュータからファイルを読み取り、別のコンピュータに書き込むことです。このシンプルさは「一つのことをうまくやる」というUNIXの哲学にぴったりです。

rsyncコマンドはもう一つのことをうまく行いますが、より微妙なアプローチを取ります。その違いは名前にあります。rsyncは、ファイルがすでに存在しない場合、ファイルを別のコンピュータにコピーしますが、その後の操作は各コンピュータのファイル間の違いのみを比較します。

小さなファイルを1つだけ移動する場合、この違いはあまり目立ちません。しかし、バックアップスクリプトの一部としてrsyncを使用している場合、変更されたファイルのみを操作することで多くの時間と帯域幅を節約できます。もちろん、これにはrsyncがローカルコンピュータとリモートコンピュータの両方にインストールされている必要がありますが、scpコマンドはコマンドを実行しているコンピュータにのみインストールされていれば十分です。

これが唯一の違いではありません。rsyncコマンドは、接続が転送の途中で切断された場合でも再接続できるため、いくらか堅牢です。変更点のみを転送できる機能と相まって、これにより大規模な転送に非常に適しています。

とはいえ、rsyncはscpにも似ています。例えば、SSHを通じて接続でき、どちらのコマンドでもSSHキーを使ってリモートマシンに接続することができます。

scpを使用してファイルを転送する方法

scpツールを使ってコンピュータ間で単一のファイルを移動させるのは簡単です。コマンドは以下のように基本的なものになります:

scp <filename> username@remotehost:/path/to/directory

リモートコンピュータに「foo.txt」ファイルをコピーするには、以下のコマンドを使用することができます:

scp foo.txt kris@some-computer:/home/kris/

そのファイルを自分のコンピュータに戻すためにscpコマンドを使うには(何らかの理由で)、次のようにできます:

scp kris@some-computer:/home/kris/foo.txt

もちろん、多くの場合、コンピュータ間でファイルのディレクトリ全体を移動したいでしょう。幸いなことに、これは標準のcpコマンドと同じくらいscpでも簡単です。 -rフラグを渡すだけで、ディレクトリを再帰的にコピーできます。

scp -r dotfiles kris@some-computer:/home/kris/

リモートコンピュータからディレクトリを再帰的にコピーするには、以下のコマンドを使用します:

scp -r kris@some-computer:/home/kris/dotfiles

このコマンドでできるすべてのことについてより詳しい情報は、Linux上でのscpコマンドの使用に関するガイドを参照してください。

rsyncを使用してファイルを転送する方法

rsyncには多くの機能が組み込まれていますが、基本的な転送を扱うのは非常に簡単です。リモートコンピュータにファイルをコピーするための基本コマンドは次のとおりです:

rsync <local-filename> user@remotehost:<remote-filename>

したがって、上記のscpの例から同じ「foo.txt」ファイルをコピーするには、次のコマンドを使用します:

rsync foo.txt kris@some-computer:foo.txt

バックグラウンドで、rsyncはSSH接続を使用しようとし、あなたのユーザー名とパスワードを尋ねます。認証が完了すると、 transferが始まります。

逆に、ファイルをあなたのローカルコンピュータに戻すのも同様に簡単です:

rsync kris@some-computer:/home/kris/foo.txt .

もちろん、このように動作させることはrsyncとそのさまざまなオプションの力を完全に活用しているわけではありません。rsyncにはさまざまなオプションを設定するためのフラグがたくさんありますが、慣れておくべきものの一つは-aまたは「--archive」フラグです。これにより、ディレクトリを再帰的にスキャンし、所有権と権限を保持し、シンボリックリンクをシンボリックリンクとしてコピーするなど、いくつかのオプションが組み合わされます。

rsyncが通常使用されるユースケースを考えると、これらのオプションをアクセスしやすいフラグにまとめるのは理にかなっています。ほとんどのrsyncの使用において、-aフラグを使用したいと思うことでしょう。たとえば、ディレクトリをリモートコンピュータに同期するには:

rsync -av ~/dotfiles kris@some-computer:/home/kris/dotfiles

上記のコマンドの第二のフラグは「-v」(「--verbose」)で、コマンドの実行中の進行状況についてより詳細な出力を提供します。

インターネット接続の速度(そしておそらく転送しているものによる)に応じて、転送中のデータを圧縮することによって、転送速度を向上させることができるかもしれません。これにより、データはローカルマシンとリモートマシンの両方で非圧縮のままとなりますが、転送中にデータが圧縮されます。これを行うには、-z フラグを使用します:

rsync -azv ~/dotfiles kris@some-computer:/home/kris/dotfiles

再度言いますが、これは転送を速くすることが保証されるわけではありませんが、バックアップスクリプトや他の時間がかかる作業のような頻繁なジョブにとって、検討する価値があります。

これはrsyncコマンドの強力さのほんの一端です。さらにアイデアが必要な場合は、rsyncコマンドの実際の例をいくつか紹介しています。

scpまたはrsyncをいつ使用すべきですか?

scpとrsyncのコマンドにはそれぞれの強みと弱みがありますが、日常的な使用においては、どちらが最適かを決定するのは主に使い方によります。特定の状況でどちらを使うべきかを思い出すのに役立つ、かなりシンプルなルールがあります。

手動でコマンドを使用してファイルを移動している場合、一般的にscpコマンドを使う方が簡単です。それは単純でわかりやすく、cpコマンドを使用していることで基本的なフラグには少なからず慣れているでしょう。

一方で、スクリプトを書いたりcronジョブを実行したりする場合、rsyncコマンドが最も適しているでしょう。予期しないネットワークの問題に対処するのが得意で、その同期駆動型の性質から、比較的シンプルなscpツールよりも、より堅牢なオプションが揃っています。

両方のコマンドは知っておく価値があり、両方とも必須のLinuxコマンドのツールベルトに持っておくと便利です。結局のところ、どちらか一方のコマンドしかアクセスできなくなることがあるかもしれません。その場合、少なくとも両方の基本を知っておくことが良いです。

関連記事: