cpioでアーカイブの内容を確認する

7-1.ファイル・アーカイブ

(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$ 

差異なさそうです。何が違ってくるのかは、そのうちじっくり調べることにします。

コメント

タイトルとURLをコピーしました