2台のLinuxコンピュータ間でファイル(音楽フォルダ)を転送したい。検索した結果、これを行うための最良の方法がたくさんあることがわかりました。これは、どこでも、どこでも、よく聞かれていることだと思います。これに関する主な問題は、Linux初心者のための2011年のこのタスクを行うための1つの最善の方法についての明確な、最近のコンセンサスがないということです(いくつかのパラメータに依存している場合でも)
そこで、Stack Exchange のウェブサイトの精神に則り、これは私の特定の状況に関連するものではなく、ローカルネットワークを介して 2 台の Linux コンピュータ間でファイルを転送する方法について、他の人にもガイドしたいと思っています。wiki は多くの人に役立つと思います
これまでに見つけたものはこんな感じです
- ssh
- sshfs
- scp
- sftp
- nfs
- samba
- giver
一番簡単なのは?最も柔軟性が高い?最もシンプル?ベストソリューション?それぞれの長所と短所は?他の(より良い)オプションはありますか?最良の方法を選択する際のパラメータは何ですか(ソリューションはファイル数、ファイルサイズ、簡単さ対柔軟性、…)?
84 jonallard 2011-08-22
Linux 環境では、セキュリティと使いやすさの両方を考えると、ssh が最適です。SSH, SSHFS, SCP, SFTP はすべて SSH プロトコルの上に構築された異なるサービスです。SCP は非常に使いやすく、CP と同じように動作しますが、パスにユーザ名とマシン名を指定することができます。つまり、cp ~/music/ ~/newmusic/
のような CP を実行するかもしれませんが、ホストという名前のコンピュータに送信するために scp ~/music/ user@host:~/newmusic
を実行するのと同じくらい簡単にできます。以上です – 何も設定する必要はありません。証明書やその他の認証を設定していない場合は、相手のマシンでアカウントのパスワードの入力を求められます (もちろん、scp はこれらの設定を ssh と共有しています)
SFTPは、リモートのファイルシステム上で多くの操作を簡単に行うことができるツールです – FTPと同じように動作しますが、SSHを介して動作するので安全性が高く、必要なのはSSHサーバだけです。man sftp
で使い方のすべてを紹介しています。SFTPは2台のマシン間でフォルダを移動するためだけに使うのではなく、別のコンピュータでファイルを並べ替えるときなど、多くの操作が必要なときに使うと便利ですね
SSHFS は SFTP をファイルシステムに拡張しただけです。 ファイルシステムにバーチャルホストをマウントすることができるので、 ネットワーク上の処理は完全に透過的に行われます。SSHFS は半永久的な設定のためのもので、一度だけのファイル転送のためのものではありません。設定にはもう少し努力が必要ですが、プロジェクトのウェブサイトで読むことができます
もし、OSが混在した環境で仕事をする必要があるなら、Sambaは次善の策になる。WindowsとOS Xは完全に自動的にSambaをサポートしており、Linuxも同様にSambaをサポートしている
68 jcrawfordor 2011-08-22
セキュリティが重要でない場合の個人的なお気に入りは、netcat + tar です
ディレクトリを送信するには、送信するコンピュータ上で送信したい内容のディレクトリの中に cd してください
tar -cz . | nc -q 10 -l -p 45454
コンテンツを受信したコンピュータ上で、コンテンツを表示させたい場所にcdして実行します
nc -w 10 $REMOTE_HOST 45454 | tar -xz
$REMOTE_HOST
を送信するコンピュータのIP/ホスト名に置き換えてください。45454
の代わりに別のポートを使うこともできます
ここで実際に起こっていることは、「受信側」のコンピュータがポート45454で送信側のコンピュータに接続して、ディレクトリのtar’dとgzip’dの内容を受信し、それを直接tar(とgzip)に渡してカレントディレクトリに展開しているということです
簡単な例(localhostをリモートホストとして使用)
Computer 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
Computer 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
65 Caspar 2011-08-22
一回の手としては、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/
これは、ローカルコンピュータの「/home/media/music/」というディレクトリを、ユーザー「nisse」を使って192.168.0.33というPCに移動させます。そして、ローカルPCに存在しないものを削除します
19 Johan 2011-08-22
自分の LAN 内でファイルを移動するために SSH を使うのではなく、他の方法を試してみることをお勧めします。何らかの理由でこの方法がうまくいかない場合は、Caspar の解決策を使うことをお勧めします
ソースでは
$ python3 -m http.server {PICK_YOUR_PORT}
On destination:
$ wget -r {ip / hostname}:{port}/{File / Directory}
これは SSH を使うよりも軽いだけでなく、標準 CAT6 UTP で 45~65MiB の速度ではるかに高速になります。 もし本当に接続を最大限に利用したいのであれば、wget
を lftp
に置き換えて pget -n20
と mirror -r
コマンドを使ってみてください
10 solr 2014-04-27
最速はおそらく netcat
(caspar が説明しているように) です
tar
& ssh
の組み合わせは、安全でありながらも高速なのが気に入っています
ソースについて
tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )
これをrootとして行うと、ファイルのパーミッションが保持されます。あるいは、両側に-p
を使うこともできます。また、疎なファイルがある場合は-S
を使うことも考えられます
openSSH で動作する暗号として arcfour
を使えば ssh
の暗号化のオーバーヘッドを減らすことができます
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
8 Tim Haegele 2011-08-22
どうしてもLAN経由で行わなければならない場合は、rsync
を使います。また、転送されるデータ量を最小化するための他のトリックもいくつかありますが、それらの多く/すべてがバージンの場所に音楽ライブラリをコピーする場合に関係があるとは思えません。セキュリティが懸念される場合は、最初にRSYNC_RSH=ssh
を設定するだけで、データはssh上にトンネルされます
でも、実際にやるとしたら、おそらくLANは全く使わないでしょうね。私はUSBハードドライブにファイルをコピーして、それからUSBハードドライブからコピーします。私の経験では, これは簡単に複数の桁のLANを介して行くよりも速くすることができます, 2回ファイルをコピーすることにもかかわらず, USB 2.0は480Mbpsのために定格されています, ギガビットイーサネットの短い何かよりも高速である, プラスそれはLANのパフォーマンスを低下させる条件にあまり敏感です.それはまた、完全にOSに依存しません, あなたがすべての関係者のマシンが扱うことができるファイルシステムを使用することを提供する, – それはかなり普遍的なので、私はVFAT/FAT32をお勧めします
5 Dave Sherohman 2011-08-22
ファイルをインクリメンタルにコピーしてくれるので、rsyncをお勧めします。最初の更新を行ったときだけ、変更されたファイルや新しいファイルだけをコピーするように設定することができます。お望みならば、ssh をトランスポートレイヤーとして使うこともできます
2 Sardathrion – against SE abuse 2011-08-22
私はUnisonを使っています。scp
, rcp
, ftp
, あるいはファイルシステム上の2つのフォルダ間でローカルに使用するように設定することができます。ネットワーク経由で一度に複数のファイルを転送することができ、設定を調整することができるので、私は音楽ライブラリの同期に使用しています。私は私の音楽コレクションをバックアップし、2-3台のコンピュータ上で同期させています。それは変更されたファイルだけをコピーし、クライアントがファイルを変更したとき、またはサーバーのファイルが変更されたときに伝えることができるように、転送の両端にインデックスを維持することによってそうします
あなたのマイレージは異なるかもしれませんが、それは確かにあなたが新しい曲を追加するたびにscp
あなたの音楽コレクション全体のよりもはるかに良いです。)
2 Naftuli Kay 2012-11-25
多くの素晴らしい回答が言及されていましたが、私は別の代替案を追加しようと思い、rcloneと、それは多くのクラウドストレージプロバイダとWindowsのサポートのためのサポートのための個人的なお気に入りです
ホストマシン上で
rclone serve sftp . --addr 0.0.0.0:2222
これはSFTPサーバを起動し、すべてのアドレスのポート2222をリッスンします。デフォルトでは、現在のユーザの認可された鍵ファイル (~/.ssh/authorized_keys
) を使用します
クライアントシステム上で
SFTPに対応したGUIやCLIプログラムなら何でも使えます。残念ながらSCPには対応していないようです。しかし、似たようなターミナルでSFTPサーバーに接続することができます
sftp -P 2222 dave@10.75.0.200
rclone サーブコマンド は、特定のプロトコルに制限されている場合は、Webdav、DLNA、FTP、HTTP(s) などの追加プロトコルもサポートしています
2つのフォルダを同期する必要がある場合は、組み込みの同期コマンドを使用することができます。ただし、rclone config
を使用して rclone を設定し、リモート FTP/SFTP サーバーを追加する必要があります
An example:
rclone sync /home/dave/projects localSftpServer:projects
1 David Tkachuk 2020-07-14
最初にパスワードなしでログインするために、http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/のsshプロセスに従った
スクリプトとテキストファイルの場合は、以下のような方法で問題なく動作します
ローカルホストからリモートホストにデータを転送する。cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"
リモートホストからローカルホストにデータを転送する。ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile
これは、sshクライアントやscpを内蔵していない組み込みシステム上でファイルを転送するために動作します
scpなし – sshのみ
0 enthusiasticgeek 2016-04-14