Unix利用時に、離れたホスト間でファイルを交換する場合は
scp
コマンドを利用します。コピーしたいファイルが多く、
なおかつ頻繁に更新するディレクトリを一気にコピーする場合には
rsync
コマンドが便利です。
scp
コマンドは、
scp [オプション] ファイル(群) [ユーザ名@]ホスト:[ディレクトリ]
または、
scp [オプション] [ユーザ名@]ホスト:ファイル(群) ディレクトリ
のように起動します。大括弧 [ ]
内のものは省略可能です。
基本的な使い方をいくつか示しましょう。以下の例の Port# にはTTSSHのときと同じ番号を指定します。
自宅PCのファイル foo.rb
をサーバ上のホームディレクト
リにコピーする。
% scp -P Port# foo.rb roy.koeki-u.ac.jp:
上の例と同様で、ユーザ名を指定してコピー (自宅PCとログイン名が異なるときはこちら)
% scp -P Port# foo.rb c102345@roy.koeki-u.ac.jp:
自宅PCのファイル ~/program/kadai.rb
を
royの ~/ruby
ディレクトリにコピー。
% scp -P Port# ~/program/kadai.rb c102345@roy.koeki-u.ac.jp:ruby
サーバ上の ~/ruby
ディレクトリにあるファイル
全てを自宅PCの ~/program
ディレクトリにコピー。
% scp -P Port# c102345@roy.koeki-u.ac.jp:ruby/'*' ~/program
リモートホスト側で複数のファイルにマッチさせる *
を指定する場合は、必ずクォートする(' ' または " "で括る)。
なお、scpも sshを楽にする設定
が活きるので、~/.ssh/config
ファイルに
Host roy HostName roy.e.koeki-u.ac.jp Port ポート番号 User ユーザ名
と書いておけば、ポート番号とユーザ名指定を省略し、
scp ファイル ホスト:ディレクトリ
だけでコピーすることができます。
scp
コマンドに利用できるオプションには以下のものがありま
す。
-p
Preserve. ファイルの属性(タイムスタンプなど)を保存します。
-C
ファイルのコピー時に圧縮する。
-r
指定したディレクトリ以下のファイルを再帰的にコピーする。
その他のオプションについては、man scp
で知ることができま
す。
rsync
は、離れた間で、更新のあったファイルだけを
まとめてコピーするなどのことができます。
基本的な使い方は
rsync [オプション] ファイル(群) [ユーザ名@]ホスト:[ディレクトリ]
または、
rsync [オプション] [ユーザ名@]ホスト:ファイル(群) ディレクトリ
のように起動します。大括弧 [ ]
内のものは省略可能です。
いくつか使用例を示します。
サーバ上の ~/ruby
ディレクトリ以下にあるファイルとディレクトリ全て
を自宅PCの ~/
(ホーム)ディレクトリにコピー。
% rsync -e 'ssh -p Port#' -avz \ c102345@roy.koeki-u.ac.jp:ruby ~
オプション a はディレクトリ以下まるごと、ファイルの属性を保存し つつコピーする、オプション v は経過を詳しく表示する、オプション z は圧縮するためのものです。
サーバ上の ~/ruby
ディレクトリ以下にあるファイルとディレクトリ全て
を自宅PCの ~/
(ホーム)ディレクトリにコピーし、
自宅PCにしかないファイルは削除する。。
% rsync -e 'ssh -p Port#' -avzH --delete \ c102345@roy.koeki-u.ac.jp:ruby ~
自宅PCの ~/ruby
ディレクトリ以下全てのファイルとディ
レクトリをサーバの ~/ruby
ディレクトリと同一にする。
% rsync -e 'ssh -p Port#' -avzH --delete \ ~/ruby c102345@roy.koeki-u.ac.jp:
rsync
コマンドで使用するsshコマンドは、環境変数
RSYNC_RSH に埋め込んでおくことができます。コマンドラインで
% RSYNC_RSH='ssh -p Port#' % export RSYNC_RSH
Port# の部分は接続説明書に書いてあるSSHのポート番号 を書きます。
export RSYNC_RSH='ssh Port#'
だけで
良い場合があります。また、使用しているシェルが csh か tcsh のときは
setenv RSYNC_RSH "ssh Port#"
とします。
ただし、roy以外のホストでは、通常SSHポート番号は22なので、
ほかのホストに対してrsyncを使う場合を考えて、
環境変数 RSYNC_RSH
には
% RSYNC_RSH=ssh % export RSYNC_RSH
とだけ定義しておいて、
~/.ssh/config
ファイルに
Host roy HostName roy.e.koeki-u.ac.jp Port ポート番号 User ユーザ名
と書いておき、rsyncするときのホスト名を roy
と
指定するほうが良いでしょう。