2台のLinuxコンピュータ間でファイル(音楽フォルダ)を転送したいのですが、これを行う最良の方法を検索したところ、たくさんこれを行う方法はたくさんあります。これはよく聞かれる質問だとは思いますたくさん、どこにでもそしていつもこれに関する主な問題は、2011 年に Linux 初心者がこのタスクを実行するための最良の方法について、明確な最近の合意がないことです (いくつかのパラメータによって異なりますが)。
そこで、Stack Exchange Web サイトの精神に則り、このガイドを私の特定の状況に関係づけるのではなく、ローカル ネットワーク経由で 2 台の Linux コンピューター間でファイルを転送する方法について、他のユーザーにも役立つものにしたいと考えています。Wiki は多くの人にとって役立つと思います。
これまでに私が見つけたものは次のとおりです:
- ssh
- sshfs
- SCP-10 ...
- sftp
- ナフサ
- サンバ
- 贈与者
最も簡単なものは何ですか? 最も柔軟性がありますか? 最もシンプルですか? 最善の解決策は何ですか? それぞれの長所と短所は何ですか? 他の (より良い) オプションはありますか? 最良の方法を選択する際のパラメーターは何ですか (解決策は、ファイル数、ファイル サイズ、容易さと柔軟性などによって異なります)?
答え1
Linux 環境では、セキュリティと使いやすさの両方の点で、ssh が最適です。SSH、SSHFS、SCP、SFTP は、SSH プロトコル上に構築されたさまざまなサービスです。SCP は非常に使いやすく、CP と同じように機能しますが、パスにユーザー名とマシン名を指定できます。したがって、 のような CP を実行することもできますcp ~/music/ ~/newmusic/
が、host という名前のコンピューターに送信することも同様に簡単ですscp ~/music/ user@host:~/newmusic
。これで完了です。何も設定する必要はありません。証明書やその他の認証を設定していない場合は、他のマシンのアカウント パスワードの入力を求められます (もちろん、scp は ssh とこれらの設定を共有します)。
SFTP は、リモート ファイル システムで多くの操作を簡単に実行できるツールです。FTP と同じように機能しますが、SSH を介して実行されるため安全で、SSH サーバーのみが必要です。man sftp
使い方をすべて説明します。SFTP は、2 台のマシン間でフォルダーを移動するためだけに使用しません。別のコンピューターでファイルを並べ替えるなど、実行する操作が多数ある場合に便利です。
SSHFSはSFTPをファイルシステムに拡張するだけです。仮想ホストをファイルシステムにマウントできるので、ネットワーク関連の処理は完全に透過的に行われます。SSHFSは1回限りのファイル転送ではなく、半永久的なセットアップ用です。セットアップにはもう少し手間がかかりますが、これについては以下で読むことができます。プロジェクトのウェブサイト。
複数の OS が混在する環境で作業する必要がある場合、Samba が次善の策となります。Windows と OS X は Samba を完全に自動的にサポートしており、Linux でも同様にサポートされていますが、使いにくい場合があります。
答え2
セキュリティが問題にならない場合に私が個人的に気に入っているのはネットキャット+タール:
ディレクトリを送信するには、送信側のコンピュータ上で送信する内容が含まれるディレクトリ内に cd し、次の操作を実行します。
tar -cz . | nc -q 10 -l -p 45454
コンテンツを受信するコンピュータで、コンテンツを表示する場所に移動し、次の操作を実行します。
nc -w 10 $REMOTE_HOST 45454 | tar -xz
送信を行っているコンピュータの IP / ホスト名に置き換えます$REMOTE_HOST
。 の代わりに別のポートを使用することもできます45454
。
ここで実際に起こっていることは、「受信」コンピュータがポート 45454 で送信コンピュータに接続し、ディレクトリの tar および gzip で圧縮されたコンテンツを受信し、それを直接 tar (および gzip) に渡して現在のディレクトリに抽出していることです。
簡単な例(リモートホストとしてlocalhostを使用)
コンピュータ 1
caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454
コンピュータ2
caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt file_b.log
答え3
1 回限りの移動には、scp が推奨されます。
ただし、このディレクトリが機能し、他の位置を最新の状態に保つために何度も移動する必要がある場合は、rsync (ssh を使用) を使用できます。
rsync には多くの引数があるため、通常は小さなシェルに入れて、(毎回) 正しく実行します。その目的は、前回の実行以降に変更されたものだけを送信することです。
#!/bin/bash
user="nisse"
host="192.168.0.33"
echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $host:/home/media/music/
これにより、ユーザー「nisse」を使用して、ローカル コンピューターから 192.168.0.33 という PC に「/home/media/music/」というディレクトリが移動されます。また、ローカル PC に存在しないターゲット上のすべてのものが削除されます。
答え4
おそらく最も速いのはnetcat
(caspar が説明したとおりです)。
安全で高速なtar
&の組み合わせが気に入っています。ssh
情報源について
tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )
これを root として実行すると、ファイルの権限が保持されます。または、-p
両側で使用します。また、-S
スパース ファイルがある場合にも考慮される可能性があります。
openSSH で動作する暗号をssh
使用すると、暗号化のオーバーヘッドを削減できます。arcfour
tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )
リモート パスを更新するには、rsync
次が最適です。
rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path