Solaris のシステム管理

第 46 章 リモートシステムの利用

この章では、リモートシステムにログインしてそのファイルを利用するために必要なすべての作業について説明します。この章で説明する手順は次のとおりです。

この章では、リモートシステムとは、図 46-1 のように物理ネットワークによってローカルシステムに接続され、TCP/IP 通信用に構成されたワークステーションまたはサーバーであると想定します。

図 46-1 リモートシステム

Graphic

Solaris 2.x システム上では、TCP/IP は起動時に自動的に構成されます。詳細は、『TCP/IP とデータ通信』を参照してください。

リモートシステムへのログイン (rlogin)

rlogin コマンドを使用すると、リモートシステムにログインできます。ログインした後は、リモートファイルシステム内で移動し、その内容を (リモートシステムによる承認にしたがって) 操作したり、ファイルをコピーしたり、リモートコマンドを実行したりできます。

ログイン先のシステムがリモートドメインに所属している場合は、システム名にドメイン名を追加してください。次の例では、SOLAR はリモートドメイン名です。

rlogin pluto.SOLAR

また、Control-d と入力すると、リモートログイン処理をいつでも中断できます。

リモートログイン (rlogin) の認証

rlogin 処理の認証 (ログインするユーザーの確認処理) は、リモートシステムまたはネットワーク環境で実行されます。

この 2 つの認証形式の主な違いは、要求される対話操作と、認証の確立方法にあります。リモートシステムがユーザーを認証しようとする場合に、/etc/hosts.equiv または .rhosts ファイルを設定していなければ、パスワードの入力を促すプロンプトが表示されます。ネットワークがユーザーを認証しようとする場合は、ユーザーはすでにネットワークに認識されているので、パスワードプロンプトは表示されません。図 46-2 は、リモートログインの認証処理を簡単に表したものです。

図 46-2 リモートログイン (rlogin) の認証

Graphic

リモートシステムは、ユーザーを認証するときに、特に次のどちらかの場合にはローカルファイル内の情報を利用します。

ネットワークによる認証は、次のどちらかの場合に利用されます。


注 -

通常は、ネットワークによる認証がシステムによる認証より優先されます。


/etc/hosts.equiv ファイル

/etc/hosts.equiv ファイルには、リモートシステムの「信頼される (trusted) ホスト」が 1 行に 1 つずつ入っています。ユーザーがこのファイルに含まれるホストから (rlogin を使用して) リモートログインしようとする場合、リモートシステムがそのユーザーのパスワードエントリにアクセスできれば、ユーザーはパスワードを入力しなくてもログインできます。

典型的な hosts.equiv ファイルの構造は次のとおりです。

host1
host2 user_a
+@group1
-@group2

上記の host1 のように、ホスト名だけのエントリであれば、そのホストが信頼されているため、そのマシン上のユーザーも信頼できることを意味します。

この例の第 2 のエントリのようにユーザー名も含まれていると、その指定されたユーザーがアクセスしようとする場合にのみ、そのホストが信頼されます。

グループ名の先頭にプラス記号 (+) が付いている場合は、そのネットグループ内のすべてのマシンが信頼されていることを意味します。

グループ名の先頭にマイナス記号 (-) が付いている場合は、そのネットグループ内には信頼できるマシンがないことを意味します。

/etc/hosts.equiv ファイルを使用する場合のセキュリティの問題

/etc/hosts.equiv ファイルにはセキュリティ上の問題があります。/etc/hosts.equiv ファイルをシステム上で管理する場合は、ネットワーク内で信頼されるホストのみを含めるようにしてください。このファイルには、別のネットワークに所属するホストや、公共で利用されるマシンを含めないでください (たとえば、端末室に設置されているホストは含めないでください)。

このような信頼できないホストを含んでいると、セキュリティの面で重要な問題を引き起こす可能性があります。/etc/hosts.equiv ファイルを正しく構成されたファイルと置き換えるか、またはファイルを削除してください。

/etc/hosts.equiv ファイルに + のみの 1 行しか入っていない場合は、認識されているすべてのホストが信頼されることを示します。

.rhosts ファイル

.rhosts ファイルは、/etc/hosts.equiv ファイルに対応するユーザー用のファイルです。このファイルには、通常、ホストとユーザーの組み合わせのリストが入っています。このファイルにホストとユーザーの組み合わせが含まれている場合、そのユーザーには、パスワードを入力しなくても、そのホストからリモートログインする許可が与えられます。

.rhosts ファイルはユーザーのホームディレクトリの一番上のレベルに置かれていなければなりません。サブディレクトリに置かれている .rhosts ファイルは参照されません。

ユーザーは、各自のホームディレクトリ内で .rhosts ファイルを作成できます。.rhosts ファイルを使用することによって、/etc/hosts.equiv ファイルを使用しなくても、異なるシステムのアカウント間で信頼できるアクセスを行うことができます。

.rhosts ファイルを使用する場合のセキュリティの問題

.rhosts ファイルにはセキュリティ上、重大な問題があります。/etc/hosts.equiv ファイルはシステム管理者の制御下にあり、効率よく管理できますが、誰でも .rhosts ファイルを作成して、システム管理者が知らないうちに自分が選んだユーザーにアクセス権を与えることができます。

すべてのユーザーのホームディレクトリが 1 台のサーバー上にあって、特定のユーザーだけがそのサーバーに対してスーパーユーザーのアクセス権を持っている場合、ユーザーが .rhosts ファイルを使用できないようにするためには、スーパーユーザーとして、空の .rhosts ファイルを各ユーザーのホームディレクトリに作成します。次に、このファイルのアクセス権を 000 に変更します。こうしておけば、スーパーユーザーでも、そのファイルを変更することが難しくなります。これにより、ユーザーが .rhosts を無責任に使用することによって生じるセキュリティ問題を防ぐことができます。ただし、ユーザーが自分のホームディレクトリへの実効パスを変更できる場合、この方法は、何の解決にもなりません。

.rhosts ファイルを確実に管理する唯一の方法は、それを完全に使用できないようにすることです。詳しくは、.rhosts ファイルを検索して削除する方法」を参照してください。システム管理者は、システムを頻繁にチェックして、このポリシーに対する違反を調べることができます。このポリシーに対する例外は、root アカウントです。ネットワークのバックアップや他のリモートサービスを実行するには、.rhosts ファイルが必要な場合があります。

リモートログインのリンク

システムが正しく構成されていれば、リモートログインをリンクできます。次の例では、earth 上のユーザーが jupiter にログインし、そこから pluto にログインします。

Graphic

もちろん、このユーザーは jupiter からログアウトして pluto に直接ログインすることもできますが、このリンク方法の方が便利です。

パスワードを入力せずにリモートログインをリンクするには、/etc/hosts.equiv または .rhosts を正しく設定しておかなければなりません。

直接リモートログインと間接リモートログイン

rlogin コマンドを使用すると、図 46-3 のように、リモートシステムに直接または間接的にログインできます。

図 46-3 直接ログインと間接ログイン

Graphic

直接リモートログインは、デフォルトのユーザー名、つまり、その時点でローカルシステムにログインしているユーザーのユーザー名を使用して行われます。これは、最も一般的なリモートログイン形式です。

間接リモートログインは、リモートログイン処理中に別のユーザー名を入力することによって行います。これは、一時的に借りているワークステーションから行うタイプのリモートログインです。たとえば、同僚のオフィスにいるときに自分のホームディレクトリ内でファイルを調べたい場合は、同僚のシステムから自分のシステムにリモートログインできますが、自分のユーザー名を入力して間接リモートログインを実行することになります。

次の表 46-1 は、直接ログインや間接ログインと認証方式の依存関係を示しています。

表 46-1 ログイン方式と認証方式 (rlogin) の依存関係

ログイン方式 

ユーザー名の提供 

認証 

パスワード 

直接 

システム 

ネットワーク 

なし 

 

 

システム 

必要 

間接 

ユーザー 

ネットワーク 

なし 

 

 

システム 

必要 

リモートログイン後の処理

リモートシステムにログインするときに、rlogin コマンドはホームディレクトリを見つけようとします。ホームディレクトリが見つからなければ、リモートシステムのルートディレクトリ (/) が割り当てられます。たとえば、次のようになります。

Unable to find home directory, ログイン with / 

ただし、rlogin コマンドがホームディレクトリを見つけると、.cshrc ファイルと .login ファイルを生成します。したがって、リモートログイン後は、プロンプトが標準ログインプロンプトになり、現在のディレクトリはローカルにログインするときと同じになります。

たとえば、通常のプロンプトにシステム名と作業用ディレクトリが表示される場合と、ログイン時の作業用ディレクトリがホームディレクトリの場合、ログインプロンプトは次のようになります。

earth(/home/smith):

リモートシステムにログインすると、同じようなプロンプトが表示され、rlogin コマンドをどのディレクトリから入力したかに関係なく、作業用ディレクトリがホームディレクトリになります。

earth(/home/smith):rlogin pluto
.

.

.

pluto(/home/smith):

唯一の違いは、プロンプトの先頭にローカルシステムではなくリモートシステムの名前が表示されることです。その場合、リモートファイルシステムはどこにあるでしょうか。次の図のようにホームディレクトリと並んで存在します。

Graphic

つまり、cd を使って /home に移動してから ls を実行すると、次のように表示されます。

earth(home/smith): cd ..
 
earth(/home): ls
smith  jones

.rhosts ファイルを検索して削除する方法

  1. スーパーユーザーになります。

  2. find(1) コマンドを使用し、.rhosts ファイルを検索して削除します。

    # find home-directories -name .rhosts -print -exec rm{}
    

    home-directories

    ユーザーのホームディレクトリがあるディレクトリへのパス。複数のパスを指定すると、複数のホームディレクトリを一度に検索できる。 

    -name .rhosts

    ここでは .rhosts を指定する。

    -print

    現在のパス名を出力する。 

    -exec rm {} ¥;

    指定したファイル名に一致するファイルすべてに、rm コマンドを適用するように find コマンドに伝える。

    find コマンドは、指定したディレクトリから始めて .rhosts というファイルを検索します。ファイルが見つかると、そのパスを画面に出力して削除します。

例 -.rhosts ファイルを検索して削除する

次の例では、/export/home ディレクトリ内で、すべてのユーザーのホームディレクトリ内の .rhosts ファイルを検索し、削除します。

# find /export/home -name .rhosts -print | xargs -i -t rm{}

リモートシステムが動作中かどうかを調べる方法

ping(1M) コマンドを使用して、リモートシステムが動作中かどうかを調べます。

$ ping system-name | ip-address

system-name

リモートシステムの名前 

ip-address

リモートシステムの IP アドレス 

ping コマンドは、次の 3 つのメッセージのどれかを返します。

状態メッセージ 

意味 

system-name is alive

このシステムにはネットワーク経由でアクセスできる。 

ping:unknown host system-name

未知のシステム名 

ping:no answer from system-name

システムは認識されるが、現在は動作していない。 

ping を実行した対象のシステムが別のドメイン内にある場合は、出力メッセージにルーティング情報も含まれることがありますが、これは無視してかまいません。

ping コマンドのタイムアウトは 20 秒です。つまり、20 秒以内に応答がなければ、第 3 のメッセージを返します。 time-out 値を秒単位で入力すると、ping の待ち時間を増減させることができます。

$ ping system-name | ip-address time-out

詳細は、ping(1M) のマニュアルページを参照してください。

リモートシステムにログインしているユーザーを検索する方法

rusers(1M) コマンドを使用して、リモートシステムにログインしているユーザーを検索します。

$ rusers [-l] remote-system-name

rusers

(オプションなし) システム名と、root など現在ログインしているユーザー名を表示する。 

-l

ユーザーのログインウィンドウ、ログイン日時、ログインしている時間、ユーザーのログイン元のリモートシステム名など、各ユーザーの詳細な情報を表示する。 

例 - リモートシステムにログインしているユーザーを検索する

次の例は、rusers の短い形式の出力を示しています。

$ rusers pluto
pluto    smith  jones

次の例で、rusers の長い形式の出力は、2 人のユーザーがリモートシステム pluto にログインしていることを示しています。第 1 のユーザーは 11 月 18 日にシステムコンソールからログインし、ログイン時間は 4 時間 10 分でした。第 2 のユーザーは同じ日にリモートシステム mars からログインし、ログイン時間は同程度でした。

$ rusers -l pluto
smith     pluto:console       Nov 18 09:19     4:10
jones     mars:console        Nov 18 09:20     4:11   (mars)

リモートシステムにログインする方法 (rlogin)

rlogin(1) コマンドを使用してリモートシステムにログインします。

$ rlogin [-l user-name] system-name

rlogin

(オプションなし) リモートシステムに直接、つまり現在のユーザー名を使用してログインする。 

-l user-name

リモートシステムに間接的に、つまり入力するユーザー名を使用してログインする。 

ネットワークがユーザーを認証しようとする場合には、パスワードを求めるプロンプトは表示されません。リモートシステムがユーザーを認証しようとする場合は、パスワードの入力を求めるプロンプトが表示されます。

操作が成功すると、rlogin コマンドは、そのシステムへの前回のリモートログイン、リモートシステム上で動作中のオペレーティングシステムのバージョン、ホームディレクトリに未処理のメールがあるかどうかに関して、簡潔な情報を表示します。

例 - リモートシステムにログインする (rlogin)

次の例は、pluto へ直接リモートログインした出力結果を示しています。このユーザーはネットワークから認証されています。

$ rlogin pluto
Last login: Tue Apr 29 12:53:40 from earth
Sun Microsystems Inc.   SunOS 5.6       August 1997
You have mail.
pluto%

次の例は、pluto へ間接リモートログインした出力結果を示しています。この場合、ユーザーはリモートシステムから認証されています。

$ rlogin -l smith pluto
password: user-password
Last login: Tue Apr 29 12:53:40 from earth
Sun Microsystems Inc.   SunOS 5.6       August 1997
You have mail.
pluto% 

リモートシステムからログアウトする方法 (exit)

exit(1) コマンドを使用して、リモートシステムからログアウトします。

$ exit

例 - リモートシステムからログアウトする (exit)

次の例は、ユーザー smith がシステム pluto からログアウトする様子を示しています。

$ exit
pluto% logout
Connection closed.
earth% 

リモートシステムへのログイン (ftp)

ftp コマンドは、Internet のファイル転送プロトコルへのユーザーインタフェースを提供します。このユーザーインタフェースはコマンドインタプリタと呼ばれ、リモートシステムにログインし、そのファイルシステムについてさまざまな処理を実行できるようにします。基本操作については、表 46-2 を参照してください。

rloginrcp と比較して ftp の主な利点は、ftp の場合はリモートシステムで UNIX が実行されていなくてもかまわないことです (ただし、リモートシステムは TCP/IP 通信を利用できることが必要です)。これに対して、rlogin の方が ftp よりも多数のファイル操作コマンドを使用できます。

リモートログインの認証 (ftp)

ftp リモートログインの認証は、次のどちらかの方法で行われます。

重要な ftp コマンド

表 46-2 重要な ftp コマンド

コマンド 

機能 

ftp

ftp コマンドインタプリタにアクセスする。

ftp remote-system

リモートシステムへの ftp 接続を確立する。詳細は、ftp によりリモートシステムへ接続する方法」を参照。

open

コマンドインタプリタからリモートシステムにログインする。 

close

リモートシステムからログアウトしてコマンドインタプリタに戻る。 

bye

ftp コマンドインタプリタを終了する。

help

すべての ftp コマンドを表示するか、コマンド名が指定されている場合は、コマンドの機能に関する簡単な説明を表示する。

reset

リモートの ftp サーバーとコマンド応答シーケンスの同期をとり直す。

ls

リモートの作業用ディレクトリの内容を表示する。 

pwd

リモートの作業用ディレクトリの名前を表示する。 

cd

リモートの作業用ディレクトリを変更する。 

lcd

ローカルの作業用ディレクトリを変更する。 

mkdir

リモートシステム上でディレクトリを作成する。 

rmdir

リモートシステム上でディレクトリを削除する。 

get, mget

リモートの作業用ディレクトリからローカルの作業用ディレクトリに 1 つ以上のファイルをコピーする。 

put, mput

ローカルの作業用ディレクトリからリモートの作業用ディレクトリに 1 つ以上のファイルをコピーする。 

delete, mdelete

リモートの作業用ディレクトリから 1 つ以上のファイルを削除する。 

詳細は、ftp(1) のマニュアルページを参照してください。

ftp によりリモートシステムへ接続する方法

  1. ftp 認証を持っていることを確認します。

    「リモートログインの認証 (ftp)」で説明したように、ftp 認証を持っている必要があります。

  2. ftp(1) コマンドを使用してリモートシステムへ接続します。

    $ ftp remote-system
    

    接続に成功すると、確認メッセージとプロンプトが表示されます。

  3. ユーザー名を入力します。

    Name (remote-system:user-name): user-name
    
  4. プロンプトが表示されたら、パスワードを入力します。

    331 Password required for user-name:
    Password: password
    

    アクセス中のシステムに anonymous ftp アカウントが確立されている場合は、パスワードの入力を求めるプロンプトが表示されません。ftp インタフェースがパスワードを受け入れると、確認メッセージと (ftp>) プロンプトを表示します。

    これで、help など、ftp インタフェースから提供されるどのコマンドでも使用できます。主なコマンドについては、表 46-2 を参照してください。

例 - ftp によりリモートシステムへ接続する

次の ftp セッションは、リモートシステム pluto 上でユーザー smith によって確立されました。

$ ftp pluto
Connected to pluto.
220 pluto FTP server (UNIX(r) System V Release 4) ready.
Name (pluto:smith): smith
331 Password required for smith:
Password: password
230 User smith logged in.
ftp>

リモートシステムとの ftp 接続を終了する方法

bye コマンドを使用して、リモートシステムとの ftp 接続を終了します。

ftp> bye
221 Goodbye.
earth%

接続を終了するメッセージに続いて、通常のシェルプロンプトが表示されます。

リモートシステムからファイルをコピーする方法 (ftp)

  1. リモートシステムからファイルをコピーしたい、ローカルシステム上のディレクトリに変更します。

    $ cd target-directory
    
  2. ftp により接続します。

    ftp によりリモートシステムへ接続する方法」を参照してください。

  3. コピー元ディレクトリに変更します。

    ftp> cd source-directory
    

    システムがオートマウンタを使用している場合、リモートシステムのユーザーのホームディレクトリは、/home の下にユーザーのホームディレクトリと並行して表示されます。

  4. コピー元ファイルの読み取り権があることを確認します。

    ftp> ls -l
    
  5. ファイルを 1 つコピーするには、get コマンドを使用します。

    ftp> get filename 
    
  6. 一度に複数のファイルをコピーするには、mget コマンドを使用します。

    ftp> mget filename [filename ...]

    個々のファイル名を続けて入力するか、ワイルドカード文字を使用できます。mget コマンドでは、個々のファイルがコピーされ、そのたびに確認を求めるプロンプトが表示されます。

  7. ftp による接続を終了します。

    ftp> bye
    

例 - リモートシステムからファイルをコピーする (ftp)

次の例では、ユーザー kryten は、システム plutoftp 接続し、get コマンドを使用して /tmp ディレクトリから自分のホームディレクトリにファイルを 1 つコピーします。

$ cd $HOME
ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.6) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> ls
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34344) 
(0 bytes).
dtdbcache_:0
filea
files
ps_data
speckeysd.lock
226 ASCII Transfer complete.
53 bytes received in 0.022 seconds (2.39 Kbytes/s)
ftp> get filea
200 PORT command successful.
150 ASCII data connection for filea (129.152.221.238,34331) 
(0 bytes).
226 ASCII Transfer complete.
ftp> bye
221 Goodbye.

次の例では、同じユーザー krytenmget コマンドを使用して、/tmp ディレクトリから自分のホームディレクトリに複数のファイルをコピーします。kryten は個々のファイルについてコピーするか、しないかの選択ができることに注意してください。

$ ftp> cd /tmp
250 CWD command successful.
ftp> ls files
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34345) 
(0 bytes).
fileb
filec
filed
226 ASCII Transfer complete.
remote: files
21 bytes received in 0.015 seconds (1.36 Kbytes/s)
ftp> cd files
250 CWD command successful.
ftp> mget file*
mget fileb? y
200 PORT command successful.
150 ASCII data connection for fileb (129.152.221.238,34347) 
(0 bytes).
226 ASCII Transfer complete.
mget filec? y
200 PORT command successful.
150 ASCII data connection for filec (129.152.221.238,34348) 
(0 bytes).
226 ASCII Transfer complete.
mget filed? y
200 PORT command successful.
150 ASCII data connection for filed (129.152.221.238,34351) 
(0 bytes).
226 ASCII Transfer complete.200 PORT command successful.
ftp> bye
221 Goodbye.

ファイルをリモートシステムにコピーする方法 (ftp)

  1. ローカルシステム上のコピー元ディレクトリに変更します。

    ftp コマンドを入力して接続するディレクトリは、ローカルの作業用ディレクトリ、つまり、この操作のコピー元ディレクトリになります。

  2. ftp により接続します。

    ftp によりリモートシステムへ接続する方法」を参照してください。

  3. コピー先ディレクトリに変更します。

    ftp> cd target-directory
    

    ローカルシステムでオートマウンタを使用中であれば、/home の下に自分のホームディレクトリと並行してリモートシステムのユーザーのホームディレクトリが表示されるので注意してください。

  4. コピー先ディレクトリへの書き込み権があることを確認します。

    ftp> ls -l target-directory
    
  5. ファイルを 1 つコピーするには、put コマンドを使用します。

    ftp> put filename
    
  6. 一度に複数のファイルをコピーするには、mput コマンドを使用します。

    ftp> mput filename   [filename ...]

    個々のファイル名を続けて入力したり、ワイルドカード文字を使用できます。mput コマンドでは、ファイルが一つ一つコピーされ、そのたびに確認を求めるプロンプトが表示されます。

  7. ftp による接続を終了するには、bye と入力します。

    ftp> bye
    

例 - ファイルをリモートシステムにコピーする (ftp)

次の例では、ユーザー kryten はシステム plutoftp により接続し、put コマンドを使用して自分のシステムからシステム pluto/tmp ディレクトリにファイルをコピーします。

$ cd /tmp
ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.6) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> put filef
200 PORT command successful.
150 ASCII data connection for filef (129.152.221.238,34356).
226 Transfer complete.
ftp> ls
200 PORT command successful.
150 ASCII data connection for /bin/ls (129.152.221.238,34357) (0 bytes).
dtdbcache_:0
filea
filef
files
ps_data
speckeysd.lock
226 ASCII Transfer complete.
60 bytes received in 0.058 seconds (1.01 Kbytes/s)
ftp> bye
221 Goodbye.

次の例では、同じユーザー krytenmput コマンドを使用して自分のホームディレクトリからシステム pluto/tmp ディレクトリに複数のファイルをコピーします。kryten は、個々のファイルについてコピーするか、しないかを選択できることに注意してください。

$ cd $HOME/testdir
$ ls
test1   test2   test3
$ ftp pluto
Connected to pluto.
220 pluto FTP server (SunOS 5.6) ready.
Name (pluto:kryten): kryten
331 Password required for kryten.
Password: xxx
230 User kryten logged in.
ftp> cd /tmp
250 CWD command successful.
ftp> mput test*
mput test1? y
200 PORT command successful.
150 ASCII data connection for test1 (129.152.221.238,34365).
226 Transfer complete.
mput test2? y
200 PORT command successful.
150 ASCII data connection for test2 (129.152.221.238,34366).
226 Transfer complete.
mput test3? y
200 PORT command successful.
150 ASCII data connection for filef (129.152.221.238,34356).
226 Transfer complete.
ftp> bye
221 Goodbye.

rcp によるリモートコピー

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

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

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

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

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


注意 - 注意 -

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


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

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

Graphic

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

‾ = mars:/home/jones

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

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

表 46-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

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

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

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