この節では、pax コマンドでファイルをコピーする方法について説明します。
コピーしたいファイルが入っているディレクトリに移動します。
書き込み可能なテープをテープドライブに挿入します。
pax コマンドを使用してファイルをテープにコピーします。
$ pax -w -f /dev/rmt/0 filename ... |
-w |
書き込みモードを有効にする。 |
-f /dev/rmt/0 |
テープドライブを識別する。 |
filename ... |
コピーしたいファイルとディレクトリを指定する。 |
ファイルがテープにコピーされていることを確認します。
$ pax -l -f /dev/rmt/0 |
ドライブからテープを取り出して、テープラベルにファイル名を記入します。
$ pax -w -f /dev/rmt/0 . $ pax -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 -civt < /dev/rmt/0 |
テープをドライブから取り出して、テープラベルにファイル名を記入します。
次の例では、ディレクトリ /export/home/kryten 内のすべてのファイルを、テープドライブ 0 のテープにコピーします。
$ cd /export/home/kryten $ ls | cpio -oc > /dev/rmt/0 92 blocks $ cpio -civt < /dev/rmt/0 -rw------t 1 kryten users 400 Jul 14 09:28 1999, b drwx--x--x 2 kryten users 0 Jul 14 09:26 1999, letters -rw------t 1 kryten users 10000 Jul 14 09:26 1999, letter1 -rw------t 1 kryten users 10100 Jul 14 09:26 1999, letter2 -rw------t 1 kryten users 11100 Jul 14 09:27 1999, letter3 -rw------t 1 kryten users 12300 Jul 14 09:27 1999, letter4 drwx--x--x 2 kryten users 0 Jul 14 09:27 1999, memos -rw------t 1 kryten users 400 Jul 14 09:28 1999, memosmemoU -rw------t 1 kryten users 500 Jul 14 09:28 1999, memosmemoW -rw------t 1 kryten users 100 Jul 14 09:27 1999, memosmemoX -rw------t 1 kryten users 200 Jul 14 09:28 1999, memosmemoY -rw------t 1 kryten users 150 Jul 14 09:28 1999, memosmemoZ drwx--x--x 2 kryten users 0 Jul 14 09:24 1999, reports 92 blocks $ |
内容一覧を表示するには、cpio コマンドがアーカイブ全体を読み取るので、そのために要するのと同じ時間がかかります。
テープをテープドライブに挿入します。
cpio コマンドを使用してテープ上のファイルのリストを表示します。
$ cpio -civt < /dev/rmt/n |
-c |
ファイルを ASCII 文字形式で読み込むように指定する。 |
-i |
cpio がコピーインモードで動作することを指定する (この時点ではファイルをリストするだけ)。 |
-v |
ls -l コマンドと同様の形式で出力を表示する。 |
-t |
指定したテープドライブ内のテープ上にあるファイルの内容一覧が表示される。 |
< /dev/rmt/n |
既存の cpio アーカイブの入力ファイルを指定する。 |
次の例では、ドライブ 0 のテープに含まれているファイルのリストを表示します
$ cpio -civt < /dev/rmt/0 drwx--x--x 2 kryten users 0 Jul 14 09:34 1999, answers -rw------t 1 kryten users 800 Jul 14 09:36 1999, b drwx--x--x 2 kryten users 0 Jul 14 09:32 1999, sc.directives -rw------t 1 kryten users 200000 Jul 14 09:35 1999, direct241 drwx--x--x 2 kryten users 0 Jul 14 09:32 1999, tests -rw------t 1 kryten users 800 Jul 14 09:36 1999, test13times 396 blocks |
相対パス名を使用してアーカイブを作成した場合、入力ファイルはそれを取り出すときに現在のディレクトリ内のディレクトリとして作成されます。ただし、絶対パス名を指定してアーカイブを作成した場合は、それと同じ絶対パス名を使用してシステム上でファイルが再び作成されます。
絶対パス名を使用すると、自分のシステム上にある元のファイルを上書きすることになるので危険です。
ファイルを入れたいディレクトリに変更します。
テープをテープドライブに挿入します。
cpio コマンドを使用して、すべてのファイルをテープから現在のディレクトリにコピーします。
$ cpio -icvd < /dev/rmt/n |
-i |
テープの内容を読み込む。 |
-c |
ファイルを ASCII 文字形式で読み込むように指定する。 |
-v |
取り出されたファイルを ls コマンドと同様の形式で表示する。 |
-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 コマンドと同様の形式で表示する。 |
"*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 |
テープアーカイブを作成し、テープデバイスを指定する。 |
- (ハイフン) |
可変部としてテープデバイスの代わりに指定する。 |
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 6+9 records in 0+1 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 |