Solaris のシステム管理 (第 2 巻)

rcp によるリモートコピー

rcp コマンドは、ローカルシステムとリモートシステム間、または 2 台のリモートシステム間でファイルやディレクトリをコピーします。このコマンドは、リモートシステムから (rlogin コマンドでログイン後に)、またはローカルシステムから (リモートシステムにログインせずに) 使用できます。

rcp を使用すると、次のリモートコピー操作を実行できます。

オートマウンタを実行中の場合は、これらのリモート操作を cp コマンドで実行できます。ただし、cp の対象範囲は、オートマウンタで作成される仮想ファイルシステムと、ユーザーのホームディレクトリから、またはそこへの操作に限定されています。また、rcp は同じ操作を実行しますがこれらの制約がないので、この節では、rcp を使うこれらの作業についてのみ説明します。

コピー操作のセキュリティ上の注意事項

システム間でファイルやディレクトリをコピーするには、ログインしてファイルをコピーする許可を持っていなければなりません。


注意 - 注意 -

cp コマンドと rcp コマンドではともに、警告が表示されずにファイルが上書きされることがあります。コマンドを実行する前に、ファイル名が正しいかどうかを確認してください。


コピー元とコピー先の指定

C シェル内で rcp コマンドを使用すると、絶対パス名または相対パス名を使用して、コピー元 (コピーしたいファイルやディレクトリ) とコピー先 (ファイルやディレクトリをコピーする位置) を指定できます。

 

絶対パス名 

相対パス名 

ローカルシステムから 

mars:/home/jones/myfile.txt

‾jones/myfile.txt

リモートログイン後 

/home/jones/myfile.txt

‾jones/myfile.txt

絶対パス名は、特定のシステムにマウントされているファイルやディレクトリを表します。上記の例で、第 1 の絶対パスは mars システム上のファイル (myfile.txt) を表します。相対パス名は、ファイルやディレクトリがある位置を、ユーザーのホームディレクトリからの相対パスで表します。上記の第 1 の例で、相対パス名は絶対パスと同じ myfile.txt を表しますが、jones のホームディレクトリを示すために "‾" (チルド記号) を使用しています。チルドは次の値を表します。


‾  =  mars:/home/jones

上記の 2 行目の例は、リモートログイン後の絶対パス名と相対パス名を示しています。相対パス名との間に違いはありませんが、リモートログイン操作によってホームディレクトリ jones がローカルシステムに (ローカルユーザーのホームディレクトリと並行して) マウントされたので、絶対パス名にはシステム名 mars が不要になります。リモートログイン操作によって別のユーザーのホームディレクトリがどのようにマウントされるかについては、「リモートログイン後の処理」を参照してください。

表 10-3 に、C シェルが認識する絶対パス名と相対パス名の例を示します。この表では次の用語を使用します。

表 10-3 ディレクトリ名とファイル名に使用できる構文

ログイン先 

構文 

説明 

ローカルシステム 

.

ローカルの作業用ディレクトリ 

 

path/filename

ローカルの作業用ディレクトリ内の path と filename

 

‾ 

現在のユーザーのホームディレクトリ 

 

‾/path/filename

現在のユーザーのホームディレクトリの下の path と filename

 

user

user のホームディレクトリ

 

user/path/filename

user のホームディレクトリの下の path と filename

 

remote-system:path/filename

リモートの作業ディレクトリ内の path と filename

リモートシステム 

.

リモートの作業用ディレクトリ 

 

filename

リモートの作業用ディレクトリ内の filename

 

path/filename

リモートの作業用ディレクトリ内の path と filename

 

‾ 

現在のユーザーのホームディレクトリ 

 

‾/path/filename

現在のユーザーのホームディレクトリ内の path と filename

 

user

user のホームディレクトリ

 

user/path/filename

user のホームディレクトリの下の path と filename

 

local-system:path/filename

ローカルの作業用ディレクトリ内の path と filename

ローカルシステムとリモートシステム間でファイルをコピーする方法 (rcp)

  1. コピーする許可を持っているかどうかを確認します。

    少なくとも、コピー元システム上で読み取り権を持ち、コピー先システム上で書き込み権を持っていなければなりません。

  2. コピー元とコピー先の位置を決定します。

    コピー元またはコピー先のパスがわからない場合は、まず rlogin コマンドを使用してリモートシステムにログインし、位置が見つかるまでリモートシステム上を移動できます。手順については、「リモートシステムにログインする方法 (rlogin)」を参照してください。その後は、ログアウトしなくても次の手順を実行できます。

  3. ファイルまたはディレクトリをコピーします。


    $ rcp [-r]source-file|directory   target-file|directory
    

    rcp

    (オプションなし) コピー元からコピー先にファイルを 1 つコピーする。 

    -r

    コピー元からコピー先にディレクトリをコピーする。 

    この構文は、リモートシステムとローカルシステムのどちらにログインするかに関係なく適用されます。表 10-3 で説明したとおり、ファイルやディレクトリのパス名のみをこの後で示す例のように変更します。

    」と「.」を使用して、ローカルのファイル名やディレクトリ名のパス部分を指定できます。ただし、「」はリモートシステムではなく現在のユーザーに適用されることと、「.」はログイン先のシステムに適用されることに注意してください。この 2 つの記号については、表 10-3 を参照してください。

例 - ローカルシステムとリモートシステム間でファイルをコピーする (rcp)

次にいくつかの例を示します。最初の 2 つの場合はコピー元がリモートで、あとの 2 つの場合はローカルです。

次の例では、rcp はファイル letter.doc をリモートシステム pluto/home/jones ディレクトリから、ローカルシステム earth 上の作業用ディレクトリ (/home/smith) にコピーします。


earth(/home/smith): rcp pluto:/home/jones/letter.doc .
Graphic

rcp 操作はリモートログインせずに実行されるので、「.」はリモートシステムではなくローカルシステムに適用されます。

作業用ディレクトリはローカルユーザーのホームディレクトリになるので、「」も使用して指定できます。


earth(home/smith): rcp pluto:/home/jones/letter.doc ‾

次の例では、rcp を使用して同じ操作を実行しますが、リモートシステムにログインします。操作の流れは同じですが、リモートログインしているためパスを変更します。


earth(/home/smith): rlogin pluto
.
.
. 
pluto(/home/jones): rcp letter.doc ‾
Graphic

この例では、リモートログインを行うので「.」を使用できません。「.」はリモートシステムにのみ適用され、実際には rcp にファイルのコピーを作成するように指示します。ただし、「」は、リモートシステムにログインするときにも現在のユーザーのホームディレクトリを指します。

次の例で、rcp はファイル notice.doc をローカルシステム earth のホームディレクトリ (/home/smith) からリモートシステム pluto/home/jones ディレクトリにコピーします。


earth(/home/smith): rcp notice.doc pluto:/home/jones
Graphic

リモートファイル名が指定されていないので、ファイル notice.doc/home/jones ディレクトリに同じ名前でコピーされます。

次の例でも同じ操作を繰り返しますが、rcp はローカルシステム上の別の作業用ディレクトリ (/tmp) から入力されます。現在のユーザーのホームディレクトリを指すために「」記号が使われているので注意してください。


earth(/tmp): rcp ‾/notice.doc pluto:/home/jones

次の例では、リモートシステムにログインしている間に rcp を使用して前記の例と同じ操作を実行します。操作の流れは同じですが、パスはリモートログインを考慮して変更されます。


earth(/home/smith): rlogin pluto
.
.
. 
pluto(/home/jones): rcp ‾/notice.doc .
Graphic

この例では、現在のユーザーのホームディレクトリがローカルシステム上にあっても、「」を使用して指定できます。ユーザーはリモートシステムにログインしているので、「.」はリモートシステム上の作業用ディレクトリを指します。次の構文を使用しても同じ操作を実行します。


pluto(/home/jones): rcp earth:/home/smith/notice.doc /home/jones