12    他のホストへのファイルのコピー

この章では,オペレーティング・システムのコマンドを使用して,次のタスクを実行する方法を説明します。

ファイルをコピーするためにリモート・ホストのホスト名またはオンライン状態を確認する場合は, 第 10 章で説明した fingerwhorwhoping,または ruptime コマンドを使用してください。

この章で説明する方法の他にも,第 14 章で,UNIX 間コピー・プログラム (UUCP) を使用して,リモート・システム間でファイルをコピーする方法について説明します。

注意

リモート・ホストのセキュリティ機能によって,ファイルをコピーできるかどうかが決まります。 ファイルをコピーできない場合は,システム管理者に問い合わせてください。

12.1    ローカル・ホストとリモート・ホスト間でのファイルのコピー

次のコマンドを使用して,ローカル・ホストとリモート・ホストの間でファイルをコピーすることができます。

12.1.1    rcp を使用したローカル・ホストとリモート・ホスト間でのファイルのコピー

rcp を使用して,ローカル・ホストからリモート・ホストに,またはリモート・ホストからローカル・ホストにファイルをコピーする際には, 次の rcp 構文のように,最初にコピー元のファイルを指定し,次に,コピー先のファイルを指定します。

rcp [ option... ] localfile hostname:file

localfile 変数には,コピーするローカル・ファイルを指定します。 hostname:file 変数については,hostname にリモート・ホストを指定し,コロン (:) に続けて,file にローカル・ファイルのコピー先のファイル名を指定します。

次の例では,rcp を使用して,ローカル・ファイル YTD_sum を,ローカル・ホストの /usr/reports ディレクトリから,リモート・ホスト moon/usr/acct ディレクトリの year-end ファイルにコピーします。

% rcp /usr/reports/YTD_sum  moon:/usr/acct/year-end
 

ローカル・ホスト上のファイルをリモート・ホストのユーザへ転送することもできます。 次の例では,ファイル YTD_sum を,ローカル・ホスト上の /usr/reports ディレクトリから, リモート・ホスト moon 上の jones というユーザのホーム・ディレクトリの acct_summariesファイルにコピーします。

% rcp /usr/reports/YTD_sum  jones@moon:acct_summaries
 

前述の各例のように使用すると,rcp コマンドは,元のファイルから作成したファイルに,新しい作成日と作成時間を割り当てます。 また,rcp コマンドは,新しく作成したファイルが置かれているホストまたはユーザ・ディレクトリに応じて,ファイルの読み取り,書き込み,実行の許可も割り当てます。

コピーした元のファイルの作成日時およびアクセス許可モードを新しいファイルでも変えたくない場合,次の例のように -p オプションを指定することにより,YTD_sum の元の作成日時およびファイル・アクセス許可を year-end ファイルに継承することができます。

% rcp -p /usr/reports/YTD_sum  moon:/usr/acct/year-end
 

-p オプションを指定しない場合には,新しい作成日時が割り当てられ,ファイルのアクセス許可は,システム管理者がリモート・ホスト moon に割り当てた省略時の値に設定されます。

次の例では,-p オプションにより,元のファイル YTD_sum と同じファイル作成日時およびアクセス許可が acct_summaries ファイルに継承されます。

% rcp -p /usr/reports/YTD_sum  jones@moon:acct_summaries
 

-p オプションを指定しない場合は,新しい日付と時間が割り当てられますが,前の例とは異なり,ファイルのアクセス許可は, ユーザ jones.login または .profile ファイル内に umask コマンドを使用して省略時の値を設定している場合には,その値に設定されます。 umask.login または .profile ファイルに設定されていない場合は, ファイルのアクセス許可モードは,リモート・ホスト moon の省略時の値になります。 umask の設定についての詳細は, umask(1) を参照してください。

リモート・ホストからローカル・ホストにファイルをコピーする場合,次のような rcp 構文を使用してください。 localfile がコピー先ファイルであるために,コマンド行の最後に localfile が記述されている点以外,コマンド構文はローカル・ファイルをリモート・ホストにコピーする場合と同様です。

rcp [ option... ] hostname:file localfile

12.1.2    ftp を使用したローカル・ホストとリモート・ホスト間でのファイルのコピー

ftp コマンドはファイル転送プロトコル (FTP) へのインタフェースです。 このコマンドには,ファイルのコピーというメイン・タスクをサポートする 拡張サブコマンド (表 12-1表 12-2,および表 12-3 で説明) があります。 ftp コマンドを使用すると, ftp をサポートする 2 つのホスト間で,ファイルをコピーすることができます。

ftp コマンド・オプションの詳細については, ftp(1) リファレンス・ページを参照してください。 これらのオプションは,主にネットワーク管理タスクに使用します。

FTP を使用してファイルをコピーするには,次の手順で行います。

  1. リモート・ホスト上にセッションを確立する。

  2. ファイルをコピーする。

  3. セッションを切断する。

ftp コマンドの構文は,次のとおりです。

ftp host_name

host_name 変数には,目的のホスト名を指定します。 コマンド行に host_name を指定しない場合は, ftp サブコマンド open (表 12-1 で説明) を使用して,リモート・ホストと接続しなければなりません。

ftp と入力すると,ftp> プロンプトが表示されます。 これで,リモート・ホストにログインできています。 ここで,ftp サブコマンドを使用して,次のタスクを実行することができます。

例 12-1 に,ローカル・ホスト earth 上のユーザ alice がリモート・ホスト moon にログインし, ftp サブコマンドを使用して,現在の作業ディレクトリのチェック,その内容の一覧表示,バイナリ・ファイルのコピー,およびセッションの終了を行う方法を示します。

例 12-1:  ftp を使用したファイルのコピー

earth% ftp moon          [1]
Connected to moon
220 moon FTP server (Version  . . .) ready [2]
Name(moon:alice): [Return]        [3]
Password:     [4]
230 User alice logged in     [5]
ftp>  binary   [6]
200 Type set to I
ftp> pwd      [7]
257 "u/alice" is current directory
ftp> ls -l    [8]
200 PORT command successful.
150 Opening data connection for /bin/ls (192.9.200.1,1026) (0 bytes)
total 2
 
-rw-r--r--   1 alice    system     101 Jun  5 10:03 file1
 
-rw-r--r--   1 alice    system     171 Jun  5 10:03 file2
 
-rw-r--r--   1 alice    system    1201 Jun  5 10:03 sales
ftp> get sales newsales     [9]
200 PORT command successful.
150 Opening data connection for sales (192.9.200.1,1029) (1201 bytes)
226 Transfer complete.
local:sales remote:newsales
ftp> quit      [10]
221 Goodbye.
earth% 
 

  1. ユーザ alice は,ローカル・ホスト earth のプロンプトから ftp コマンドを入力して,リモート・ホスト moon との ftp セッションを開始します。 [例に戻る]

  2. 接続を確認するメッセージが,ローカル・ホスト上に表示されます。 [例に戻る]

  3. ユーザ alice は,自分のログイン名がリモート・ホスト上のログイン名と一致しているので,プロンプトに対して Return キーを押します。 [例に戻る]

  4. Password: プロンプトに対し,ユーザ alice は,パスワードを正しく入力しますが,パスワードは表示されません。 [例に戻る]

  5. リモート・ホストへのログインが確認され,ftp> プロンプトが表示されて,リモート・ホストとの ftp セッションが確立されます。 [例に戻る]

  6. ユーザ aliceftp> プロンプトに対し binary サブコマンドを入力して,ファイル転送タイプをバイナリに設定すると,FTP によって,200 Type set to I という確認のメッセージが表示されます。 [例に戻る]

  7. ユーザ alice は,pwd サブコマンドを入力して,現在の作業ディレクトリを確認すると,FTP によって,u/alice is current directory というメッセージが表示されます。 [例に戻る]

  8. ユーザ alice は,ls -l サブコマンドを入力して,現在の作業ディレクトリに入っている,file1file2,および sales を一覧表示します。 [例に戻る]

  9. ユーザ alice は,get サブコマンドを使用して,ファイル sales をリモート・ホストからローカル・ホスト上の newsales というファイルにコピーします。 [例に戻る]

  10. ユーザ alice は,quit サブコマンドを入力して ftp セッションを終了し,ローカルのシステム・プロンプトに戻ります。 [例に戻る]

注意

ファイル転送は,リモート・ホスト上のセキュリティ機能に依存します。 ファイルをコピーできない場合は,システム管理者に問い合わせてください。

表 12-1 に,ファイルをコピーしたり,ftp を終了させる ftp サブコマンドを示します。 ここで説明する binaryget,および quit サブコマンドは,例 12-1 で使用されています。

表 12-1:  ホストへの接続とファイルのコピーを行う ftp サブコマンド

サブコマンド 説明
account [password] Tru64 UNIX リモート・ホストから,そのホストのリソースにアクセスするために必要なパスワードを送信する。 password を指定しなければ,ユーザはパスワードの入力を要求される。 パスワードは画面上には表示されない。
ascii ファイル転送タイプを省略時の値であるネットワーク ASCII に設定する。 たとえば,PostScript ファイルは ASCII ファイルである。
binary ファイル転送タイプをバイナリ・イメージに設定する。 これは,非 ASCII ファイルをコピーするときに必要である。 たとえば,実行可能ファイルは非 ASCII ファイルである。
bye ファイル・コピー・セッションを終了して,FTP を出る。 quit と同じ。
get remfile locfile リモート・ファイル remfile をローカル・ホストのファイル locfile にコピーする。 locfile を指定しない場合は,リモート・ファイル名が,ローカル・ファイル名にそのまま使用される。 runique サブコマンドも参照。
mget remfile [locfile] 1 つまたは複数の指定ファイル (remfile) を,リモート・ホストからローカル・ホストの現在のディレクトリの locfile にコピーする。 ワイルドカードや,パターン照合を行うメタキャラクタもサポートされている。
mput locfile [remfile] 1 つまたは複数の指定ファイル (locfile) を,ローカル・ホストからリモート・ホスト上の remfile にコピーする。 ワイルドカードや,パターン照合を行うメタキャラクタもサポートされている。
open host [port] host をコマンド行で指定しなかった場合に,そのホストとの接続を確立する。 port を指定すると,FTP はそのポートでサーバとの接続を試みる。 autologin 機能が設定されている場合には (省略時の設定),FTP はユーザをリモート・ホストへログインさせようとする。
put locfile [remfile] ローカル・ホスト上のファイル locfile を,リモート・ホスト上の remfile にコピーする。 remfile を指定しない場合,FTP はリモート・ファイル名としてローカル・ファイル名を使用する。 sunique サブコマンドも参照。
quit ファイル・コピー・セッションを終了して,FTP を出る。bye と同じ。
recv remfile [locfile] リモート・ホスト・ファイル remfile を,ローカル・ホストのファイル locfile にコピーする。 recv は,get と同様に動作する。
runique

get 処理時に,ローカルのコピー先ファイルに対して一意のファイル名を作成するかどうかの切り替えを行う。 この一意のローカル・ファイル名機能がオフ (省略時の設定) の場合,FTP は,ローカル・ファイルを重ね書きする。 オンの場合は,ローカルのコピー先ファイルに指定したものと同じ名前のローカル・ファイルがあれば, FTP は,指定したローカルのコピー先ファイル名に拡張子 .1 を付加する。

すでに .1 の付いた同じ名前のローカル・ファイルがある場合には,FTP は,指定した名前に拡張子 .2 を付加する。 この処理は,99 になるまで同様に繰り返される。 それでもFTPが一意の名前を付けることができない場合には,エラーが報告され,ファイルのコピーは行われない。 なお,runique は,シェル・コマンドから作成したローカル・ファイル名には影響しない。

send locfile [remfile] ローカル・ファイル locfile を,リモート・ホストの remfile ファイルに格納する。 send は,put と同様に動作する。
sunique put 処理時に,リモートのコピー先ファイルに対して一意のファイル名を作成するかどうかの切り替えを行う。 この一意のリモート・ファイル名機能がオフ (省略時の設定) の場合,FTP は,リモート・ファイルを重ね書きする。 オンの場合は,リモートのコピー先ファイルに指定したものと同じ名前のリモート・ファイルがあれば,runique と同様に,リモートの FTP server が,リモートのコピー先ファイルの名前を修正する。 ただし,FTP server が,リモート・ホスト上でサポートされていなければならない。

表 12-2 に,ファイルをコピーする前に,必要であれば,現在のディレクトリの確認,変更,作成,あるいはディレクトリ内のファイルの一覧表示を行う ftp サブコマンドについて説明します。 ここで説明する pwd および ls サブコマンドは,例 12-1 で使用されています。

表 12-2:  ディレクトリおよびファイルを操作するための ftp サブコマンド

サブコマンド 説明
cd remotedir リモート・ホスト上の作業ディレクトリを remotedir に変更する。
cdup リモート・ホスト上の作業ディレクトリを現在のディレクトリの親ディレクトリに変更する。
delete remfile 指定したリモート・ファイルを削除する。
dir [remdir] [locfile] リモート・ディレクトリ remdir にあるファイルのリストを,ローカル・ホスト上のファイル locfile に書き込む。
lcd [directory] ローカル・ホスト上の作業ディレクトリを変更する。 directory を指定しない場合は,ユーザのホーム・ディレクトリに移動する。
ls [remdir] [locfile] リモート・ディレクトリ remdir の簡潔なフォーマットの一覧表示を,ローカル・ホスト上のファイル locfile に書き込む。
mkdir [remdir] 指定したディレクトリをリモート・ホストに作成する。
pwd リモート・ホストの現在のディレクトリ名を表示する。
rename from to リモート・ホスト上のファイルの名前を変更する。
rmdir remdir リモート・ホストからリモート・ディレクトリ remdir を削除する。

表 12-3 に,直接,または ftp 内からシェルを呼び出すことによって,ヘルプおよび状態情報を提供する ftp サブコマンドについて説明します。

表 12-3:  ヘルプおよび状態情報を得るための ftp サブコマンド

サブコマンド 説明
!command [option] ローカル・ホスト上に対話式のシェルを呼び出す。
? subcommand についてのヘルプ・メッセージを表示する。 subcommand を指定しない場合,FTP は利用できるサブコマンドの一覧を表示する。 help サブコマンドも参照。
help [subcommand] ヘルプ情報を表示する。 ? サブコマンドも参照。
status 現在の転送モード (ASCII またはバイナリ),接続状態,タイムアウト値などを含む,ftp の現在の状態を表示する。
verbose 詳細 (verbose) モードを切り替える。 詳細モードがオン (省略時の設定) の場合,FTP は,リモートの FTP server から受け取るすべての応答を表示する。 また,終了したすべてのファイル転送の統計情報も表示する。

ファイルをコピーする別の方法として,簡易ファイル転送プロトコル (TFTP) へのインタフェースである tftp コマンドがあります。 ftp とは異なり,ファイルのコピー以外のタスクを実行するためのサブコマンドはありません。 スーパユーザまたはオペレーティング・システムのインストール担当者のタスク (たとえば,オペレーティング・システムのカーネルのコピーなど) を実行する場合にだけ使用してください。 これは,リモートの tftp サーバ・デーモン tftpd へのファイル・アクセス権が制限されているためです。 詳細は, tftp(1) リファレンス・ページを参照してください。

12.1.3    mailx を使用したローカル・ホストとリモート・ホスト間での ASCII ファイルのコピー

mailx コマンドは,第 11 章で説明しているように,メール・メッセージを送受信するために最も頻繁に使用されますが, ASCII ファイルをローカル・ホストまたはリモート・ホストにコピーすることもできます。 次の構文で示すように,左山カッコのリダイレクション記号 (<) を使用すると,mailx により,ASCII ファイルを 1 人または複数のユーザにコピーすることができます。

mailx [ option... ] recipient... < filename

recipient 変数には,ファイル filename の送り先である 1 人または複数のユーザ名,あるいは mailx の別名を指定します。

たとえば,ファイル schedule を複数のユーザに送信するには,次のように,メッセージの表題を示す -s オプションを指定して,mailx コマンドを使用します。

% mailx -s "games" tom jeff craig jim ken < schedule
 

Wombats というチームの 5 人のメンバに対して wombats というメール別名を作成する (11.6.1 項参照) と,次に示すように,ファイルをその別名に送信することができます。

% mailx -s "games" wombats < schedule
 

12.1.4    write を使用したローカル・ホストとリモート・ホスト間でのファイルのコピー

write コマンドは,11.8 節で説明しているように,他のユーザにメッセージを書き込むために最もよく使用されますが,ローカル・ホストまたはリモート・ホストにファイルをコピーすることもできます。 write とタイプした後に,受信者のユーザ名,左山カッコのリダイレクション記号 (<),および送信するファイル名を入力してください。 たとえば,現在のディレクトリにある letter という名前のファイルをユーザ maria に送信するには,ホストのプロンプトで次のコマンドを入力します。

% write maria < letter
 

12.2    ローカル・ホストとリモート・ホスト間でのディレクトリのコピー

-r オプションを指定して rcp コマンドを使用すると,ファイルの入っているディレクトリ全体 (つまり,すべてのサブディレクトリ内のファイルおよびディレクトリも含む) を,ローカル・ホストとリモート・ホストの間で再帰的にコピーすることができます。

ローカル・ホストからリモート・ホストにディレクトリを再帰的にコピーするには,次の構文を使用します。

rcp -r localdirectory hostname:directory

localdirectory 変数には,再帰的にコピーするローカル・ディレクトリを指定します。 hostname:directory 変数については,hostname にリモート・ホストを指定し,コロンに続けて,directory にローカル・ディレクトリのコピー先のリモート・ディレクトリ名を指定します。

次の例では,rcp -r を使用して,/usr/reports ディレクトリを,ローカル・ホストからリモート・ホスト moon 上の /user/status/newdata ディレクトリに再帰的にコピーします。

% rcp -r /usr/reports  moon:/user/status/newdata
 

ローカル・ホスト上のディレクトリを,リモート・ホストのユーザに再帰的にコピーすることもできます。 次の例に,ローカル・ホスト上のディレクトリ /usr/reports を,リモート・ホスト moon のユーザ smith のホーム・ディレクトリにある /user/status/newdata というディレクトリにコピーする方法を示します。 この例では,12.1.1 項で説明しているように, -p オプションを使用して,新しいディレクトリにコピーされるディレクトリおよびファイルに元の作成日時とアクセス許可モードを残しています。

% rcp -p -r /usr/reports  smith@moon:/user/status/newdata
 

リモート・ホストからローカル・ホストにディレクトリを再帰的にコピーする には,次に示すような rcp 構文に従ってください。 localdirectory がコピー先ファイルであるためにコマンド行の最後に記述されている以外は,このコマンドの構文は,ディレクトリをローカル・ホストからリモート・ホストに再帰的にコピーする場合と同じです。

rcp -r hostname:directory localdirectory

12.3    2 つのリモート・ホスト間でのファイルのコピー

ローカル・ホストから rcp を使用して,あるリモート・ホスト上のファイルを別のリモート・ホスト上のファイルにコピーすることができます。 これは,次の rcp 構文を使用して行います。

rcp remhost1:filesend remhost2:file-recv

remhost1 変数には,送信するファイルのあるリモート・ホストを指定します。 この後ろにコロン (:),および送信するファイル filesend が続きます。 remhost2:file-recv については,remhost2 にコピー先のリモート・ホストを指定し,file-recvremhost1 からのファイルのコピー先であるファイル名を指定します。 file-recv にディレクトリ名だけを (次の例に示すように) 指定すると,filesend は,同じファイル名でそのディレクトリにコピーされます。

次の例では,rcp を使用して,spark ファイルを, リモート・ホスト flint 上の /u/cave/fred ディレクトリから,リモート・ホスト stone 上の /u/hut/barney ディレクトリにコピーしています。

% rcp flint:/u/cave/fred/spark  stone:/u/hut/barney