この節では、pax コマンドでファイルをコピーする方法について説明します。
コピーしたいファイルが入っているディレクトリに変更します。
書き込み可能なテープをテープドライブに挿入します。
pax コマンドを使用してファイルをテープにコピーします。
$ pax -w -f /dev/rmt/0 .
-w |
現在のディレクトリの内容をテープにコピーする。 |
-f /dev/rmt/0 |
テープドライブを識別する。 |
pax -l コマンドで、ファイルがテープにコピーされていることを確認します。
$ pax -l -f /dev/rmt/0
ドライブからテープを取り出して、テープラベルにファイル名を記入します。
$ pax -w -f /dev/rmt/0 . $ pax -l -f /dev/rmt/0 filea fileb filec
詳細については、pax(1) を参照してください。
書き込み保護されていないテープをテープドライブに挿入します。
ls コマンドと cpio コマンドを使用してファイルをテープにコピーします。
$ ls | cpio -oc > /dev/rmt/n
ls |
cpio コマンドにファイル名のリストを与える。 |
cpio -oc |
cpio がコピーアウトモード (-o) で動作し、ASCII 文字形式 (-c) でヘッダー情報を書き込むように指定する。これにより他のベンダーのシステムと可搬性を保つ。 |
> /dev/rmt/n |
出力ファイルを指定する。 |
ディレクトリ内のすべてのファイルは、指定したドライブ内のテープにコピーされ、テープ上の既存のファイルが上書きされます。コピーされた合計ブロック数が表示されます。
次の cpio コマンドで、ファイルがテープにコピーされていることを確認します。
$ cpio -civt < /dev/rmt/n
テープをドライブから取り出して、テープラベルにファイル名を記入します。
次の例では、ディレクトリ /export/home/kryten 内のすべてのファイルが、テープドライブ 0 のテープにコピーされます。
$ cd /export/home/kryten $ ls | cpio -oc > /dev/rmt/0 8 blocks $ cpio -civt < /tmp/cpio.file drwxr-xr-x 2 kryten users 0 Oct 24 11:05 1996, letters drwxr-xr-x 2 kryten users 0 Oct 24 11:05 1996, memos drwxr-xr-x 2 kryten users 0 Nov 8 14:14 1996, reports 8 blocks $
内容一覧を表示すると、cpio コマンドはアーカイブ全体を処理しなければならないので、アーカイブファイルの読み込みに長時間かかります。
テープをテープドライブに挿入します。
cpio コマンドを使用してテープ上のファイルのリストを表示します。
$ cpio -civt < /dev/rmt/n
-c |
ファイルを ASCII 文字形式で読み込むように指定する。 |
-i |
cpio がコピーインモードで動作することを指定する (この時点ではファイルをリストするだけ)。 |
-v |
ls -l コマンドと同様の形式で出力が表示される。 |
-t |
指定したテープドライブ内のテープ上にあるファイルの内容一覧が表示される。 |
< /dev/rmt/n |
既存の cpio アーカイブの入力ファイルを指定する。 |
次の例では、ドライブ 0 のテープの目次に 3 つのファイルが入っています。
$ cpio -civt < /dev/rmt/0 drwxr-xr-x 2 rimmer users 0 Oct 28 09:17 1996, answers drwxr-xr-x 2 rimmer users 0 Oct 28 09:17 1996, sc.directives drwxr-xr-x 2 rimmer users 0 Oct 28 09:17 1996, tests 8 blocks
相対パス名を使用してアーカイブを作成した場合、入力ファイルはそれを取り出すときに現在のディレクトリ内のディレクトリとして作成されます。ただし、絶対パス名を指定してアーカイブを作成した場合は、それと同じ絶対パス名を使用してシステム上でファイルが再び作成されます。
絶対パス名を使用すると、自分のシステム上にある元のファイルを上書きすることになるので危険です。
ファイルを入れたいディレクトリに変更します。
テープをテープドライブに挿入します。
cpio コマンドを使用して、すべてのファイルをテープから現在のディレクトリにコピーします。
$ cpio -icvd < /dev/rmt/n
-i |
テープの内容を読み込む。 |
-c |
ファイルを ASCII 文字形式で読み込むように指定する。 |
-v |
ls -l コマンドと同様の形式で出力が表示される。 |
-d |
必要に応じて、ディレクトリを作成する。 |
< /dev/rmt/n |
入力ファイルを指定する。 |
現在のディレクトリの内容をリストして、ファイルがコピーされていることを確認します。
$ ls -l
次の例では、ドライブ 0 のテープからすべてのファイルがコピーされます。
$ cd /var/tmp cpio -icvd < /dev/rmt/0 answers sc.directives tests 8 blocks $ ls -l
ファイルを入れたいディレクトリに変更します。
テープをテープドライブに挿入します。
cpio コマンドを使用してテープからファイルのサブセットを取り出します。
$ cpio -icv "*file" < /dev/rmt/n
-i |
テープの内容を読み込む。 |
-c |
ファイルを ASCII 文字形式で読み込むように指定する。 |
-v |
ls -l コマンドと同様の形式で出力が表示される。 |
"*file" |
パターンに一致するすべてのファイルを現在のディレクトリにコピーするように指定する。複数のパターンを指定できるが、個々のパターンを二重引用符で囲まなければならない。 |
< /dev/rmt/n |
入力ファイルを指定する。 |
現在のディレクトリの内容をリストして、ファイルがコピーされていることを確認します。
$ ls -l
次の例では、末尾に接尾辞 chapter が付いているすべてのファイルがドライブ 0 のテープからコピーされます。
$ cd /home/smith/Book $ cpio -icv "*chapter" < /dev/rmt/0 Boot.chapter Directory.chapter Install.chapter Intro.chapter 31 blocks $ ls -l
詳細は、cpio(1) のマニュアルページを参照してください。
リモートテープドライブを使用するには、次の前提条件を満たさなければなりません。
ローカルホスト名 (および、オプションで、コピーしているユーザーのユーザー名) が、リモートシステムの /etc/hosts.equiv ファイル内になければならない。あるいは、コピーしているユーザーは、リモートマシン上の自分のホームディレクトリをアクセス可能にしておかなければならない。さらに、$HOME/.rhosts 内にローカルマシン名がなければならない。詳細については、hosts.equiv(4) を参照。
リモートシステムのエントリがローカルシステムの /etc/inet/hosts ファイル内またはネームサービスの hosts ファイル内になければならない。
リモートコマンドを実行するための適切なアクセス権を持っているかどうかをテストするには、次を試してみます。
$ rsh remotehost echo test
「test」がエコーされた場合、リモートコマンドを実行するためのアクセス権を持っています。「Permission denied」がエコーされた場合、上記の手順 1 で説明したように、ユーザーの設定をチェックしてください。
tar コマンドと dd コマンドを使用して、ファイルをリモートテープドライブにコピーします。
$ tar cf - files | rsh remotehost dd of=/dev/rmt/n obs=blocksize
tar cf |
tar オプションでテープアーカイブを作成し、テープデバイスを指定する。 |
- (ハイフン) |
可変部としてテープデバイスの代わりに指定する。 |
files |
コピーするファイル |
| rsh remotehost |
tar コマンドがリモートシェルにパイプされ、ファイルがコピーされる。 |
dd of=/dev/rmt/n |
出力デバイスを指定する。 |
obs=blocksize |
ブロック係数を指定する。 |
テープをドライブから取り出して、テープラベルにファイル名を記入します。
# tar cvf - * | rsh mercury dd of=/dev/rmt/0 bs=126b a answers/ 0 tape blocks a answers/test129 1 tape blocks a sc.directives/ 0 tape blocks a sc.directives/sc.190089 1 tape blocks a tests/ 0 tape blocks a tests/test131 1 tape blocks 0+2 records in 0+2 records out
一時ディレクトリに変更します。
$ cd /var/tmp
tar コマンドと dd コマンドを使用して、ファイルをリモートテープドライブに抽出します。
$ rsh remotehost dd if=/dev/rmt/n | tar xvBpf -
rsh remotehost |
dd コマンドを使用してテープデバイスからファイルを取り出すために起動されるリモートシェル。 |
dd if=/dev/rmt/n |
入力デバイスを指定する。 |
| tar xvBpf - |
dd コマンドの出力は tar コマンドにパイプされ、復元されたファイルに使用される。 |
ファイルが抽出されたかどうかを確認します。
$ ls -l /var/tmp
$ rsh mercury dd if=/dev/rmt/0 | tar xvBpf - x answers/, 0 bytes, 0 tape blocks x answers/test129, 48 bytes, 1 tape blocks 20+0 records in 20+0 records out x sc.directives/, 0 bytes, 0 tape blocks x sc.directives/sc.190089, 77 bytes, 1 tape blocks x tests/, 0 bytes, 0 tape blocks x tests/test131, 84 bytes, 1 tape blocks $ ls -l /var/tmp