ファイルを共有するコマンドの違い(sftp/scp/rsync)
このページでは,Unix/Linuxでのコマンドによるファイル転送について整理しています.
目次
sftpコマンド
sftp
コマンドはSFTPによってファイルをサーバーへファイルをアップロードし,または,サーバーからダウンロードするコマンドです.
適当なユーザー名とサーバー名を用いて,
sftp USER_NAME@example.com |
とします.
サーバー名の代わりにサーバーのIPアドレスを入力しても構いません.
サーバのパスワード入力を求められるので,パスワードが正しければログインすることができます.
適当な鍵を用いて,-i id_rsa
のオプションにより公開鍵認証することも可能です.
ログイン後は,サーバーでの階層移動のためにcd
が使えます.
また,ローカルでディレクトリを移るために,lcd
コマンドを使うことができます.
同様に,サーバー上のファイルを参照するのにls
コマンドが利用できるので,ローカルのファイルを参照するにはls
コマンドに代えてlls
コマンドを使用します.
ローカルからリモートへのファイルのアップロードは,
put /path/to/file |
とします.
同様に,ダウンロードは
get /path/to/file |
によって行います.
サーバーのファイルを削除するには,通常通りrm
コマンドを使用します.
サーバーとのやりとりは,bye
コマンドまたはexit
コマンドで終了します.
scpコマンド
scp
コマンドはSSH通信によってリモート・ローカル間でファイルをコピーするコマンドです.
ローカルのディレクトリをリモートのあるディレクトリより下の階層へファイルを再帰的にコピーする場合,適当なユーザー名とサーバー名を用いて,
scp -r /local/path/to/dir USER_NAME@example.com:/remote/path/to/dir/ |
と入力します.
単に1ファイルを転送するだけであれば,再帰を指示するオプションの-r
は要りません.
-r /local/path/to/dir
のところは/local/path/to/file
の形になります.
コマンド実行後はサーバのパスワード入力を求められます.
パスワードが正しければコピーが実行されます.
適当な鍵を用いて,-i id_rsa
のオプションにより公開鍵認証することも可能です.
リモートからローカルにコピーする場合は,次のように引数を逆にします.
scp -r USER_NAME@example.com:/remote/path/to/dir /local/path/to/dir/ |
rsyncコマンド
rsync
コマンドは同期を実行するコマンドです.
ローカルのディレクトリとリモートのディレクトリそのものを再帰的に同期する場合,
rsync -r /local/path/to/dir USER_NAME@example.com:/remote/path/to/dir |
とします.
/path/to/dir
は「ディレクトリを」の意味ですが,/path/to/dir/
であると「ディレクトリ内を」の意味となることに注意してください.
オプションが複数あります.
以下,よく使うものです.
- 同期不要なファイルは
--exclude="file"
により指定します.例えば,.DS_Store
を同期させないようにしたいなら,--exclude=".DS_Store"
です. --delete
を入れておくと,ローカルに不在のファイルをリモートから削除します.-a
で,パーミッションやタイムスタンプ,シンボリックリンクも写します.-u
で,追加またはアップデートされたものを複製します.-c
で,チェックサムにて更新があったかどうかを確認します.
macOSなら,--iconv=UTF-8-MAC,UTF-8
により,ファイル名についてUTF-8-MACからUTF-8への文字コード変換を行ってくれます.このオプションを使うにはHomebrewでbrew install rsync
としておく必要がありました.