(Linux入門はコチラ→中級者のためのLinuxコマンド入門)
今回はcpioコマンドでアーカイブの内容を確認します。
前回作ったdir1ディレクトリにはx00~x07までのファイルが格納されています。
takk@deb9:~/tmp$ ls dir1 takk@deb9:~/tmp$ find dir1 dir1 dir1/x02 dir1/x05 dir1/x03 dir1/x01 dir1/x07 dir1/x00 dir1/x06 dir1/x04 takk@deb9:~/tmp$
各ファイルにはこのようなデータが格納されています。
takk@deb9:~/tmp$ cd dir1 takk@deb9:~/tmp/dir1$ for i in *;do echo -n $i:;od -td1 -An $i;done x00: 1 2 3 4 5 6 7 8 x01: 9 10 11 12 13 14 15 16 x02: 17 18 19 20 21 22 23 24 x03: 25 26 27 28 29 30 31 32 x04: 33 34 35 36 37 38 39 40 x05: 41 42 43 44 45 46 47 48 x06: 49 50 51 52 53 54 55 56 x07: 57 58 59 60 61 62 63 64 takk@deb9:~/tmp/dir1$ cd .. takk@deb9:~/tmp$
上記ディレクトリをコピーアウトでアーカイブにします。
takk@deb9:~/tmp$ find dir1 | cpio -o > a.cpio 1 block takk@deb9:~/tmp$ ls a.cpio dir1 takk@deb9:~/tmp$
アーカイブ化できたので、-tオプションで内容を確認します。
takk@deb9:~/tmp$ cat a.cpio | cpio -t dir1 dir1/x02 dir1/x05 dir1/x03 dir1/x01 dir1/x07 dir1/x00 dir1/x06 dir1/x04 1 block takk@deb9:~/tmp$
次は同じディレクトリをtarでアーカイブ化します。
takk@deb9:~/tmp$ tar cf a.tar dir1 takk@deb9:~/tmp$ ls a.cpio a.tar dir1 takk@deb9:~/tmp$
cpioの -tオプションで内容確認できるでしょうか。
takk@deb9:~/tmp$ cat a.tar | cpio -t 中止 takk@deb9:~/tmp$
中止、と表示されて内容は確認できませんでした。
tarフォーマットであることを指定しないといけないようです。
-Hオプションで tarを指定。
takk@deb9:~/tmp$ cat a.tar | cpio -tHtar dir1/ dir1/x02 dir1/x05 dir1/x03 dir1/x01 dir1/x07 dir1/x00 dir1/x06 dir1/x04 18 blocks takk@deb9:~/tmp$
内容確認できました。
-Hオプションでtarを指定するとold tarの指定となります。
a.tarはGNU tarなので、
takk@deb9:~/tmp$ file a.tar a.tar: POSIX tar archive (GNU) takk@deb9:~/tmp$
GNU tarが取り扱えるustarで指定するのが正解かもしれません。
takk@deb9:~/tmp$ cat a.tar | cpio -tHustar dir1/ dir1/x02 dir1/x05 dir1/x03 dir1/x01 dir1/x07 dir1/x00 dir1/x06 dir1/x04 18 blocks takk@deb9:~/tmp$
tarとustarそれぞれ展開した結果に違いがあるのか確認します。
-Htarをつけてコピーインモードでアーカイブ展開。
takk@deb9:~/tmp$ rm -rf dir1 takk@deb9:~/tmp$ ls a.cpio a.tar takk@deb9:~/tmp$ cat a.tar | cpio -iHtar 18 blocks takk@deb9:~/tmp$ ls dir1 x00 x01 x02 x03 x04 x05 x06 x07 takk@deb9:~/tmp$ cd dir1 takk@deb9:~/tmp/dir1$ !for for i in *;do echo -n $i:;od -td1 -An $i;done x00: 1 2 3 4 5 6 7 8 x01: 9 10 11 12 13 14 15 16 x02: 17 18 19 20 21 22 23 24 x03: 25 26 27 28 29 30 31 32 x04: 33 34 35 36 37 38 39 40 x05: 41 42 43 44 45 46 47 48 x06: 49 50 51 52 53 54 55 56 x07: 57 58 59 60 61 62 63 64 takk@deb9:~/tmp/dir1$
-Hustar。
takk@deb9:~/tmp$ rm -rf dir1 takk@deb9:~/tmp$ ls a.cpio a.tar takk@deb9:~/tmp$ cat a.tar | cpio -iHustar 18 blocks takk@deb9:~/tmp$ cd dir1 takk@deb9:~/tmp/dir1$ !for for i in *;do echo -n $i:;od -td1 -An $i;done x00: 1 2 3 4 5 6 7 8 x01: 9 10 11 12 13 14 15 16 x02: 17 18 19 20 21 22 23 24 x03: 25 26 27 28 29 30 31 32 x04: 33 34 35 36 37 38 39 40 x05: 41 42 43 44 45 46 47 48 x06: 49 50 51 52 53 54 55 56 x07: 57 58 59 60 61 62 63 64 takk@deb9:~/tmp/dir1$
差異なさそうです。何が違ってくるのかは、そのうちじっくり調べることにします。
コメント