けけずんセルフハッキング

エンジニアっぽい雰囲気を醸しだしているかのようなブログです!

/bin/pax でファイルのアーカイブする

はじめに

久しぶりのよく分からんコマンド調べてみようシリーズ。

kkznch.hatenablog.com

今回は /bin/pax について。

/bin/pax

名前から推測するに、なんとなくパッキングしてくれそうな雰囲気を感じる。 ただ全く使ったことないし使ってる人見たことない、一体こいつは何者だ。

ということで man pax したときの DESCRIPTION の内容はこちら。

pax will read, write, and list the members of an archive file and will copy directory hierarchies.

pax は圧縮ファイルの読み書きや一覧、ディレクトリ構造のコピーをするらしい。

tar とか zip みたいに圧縮解凍ができるコマンドという認識でいいのかねこれは?と思って調べてみると微妙に違うっぽい。 tar とか zip は圧縮ファイルに対する操作で、 pax はアーカイブファイルに対する操作ができるのかも。 圧縮ファイルとアーカイブファイルについての違いは以下を参照してくれ。

linuxfan.info

/bin/pax 実行してみる

以下のサイトで色々試されている。

qiita.com

基本的な構文は以下の通り。

# ファイルをアーカイブする
$ pax -w 入力元

# アーカイブされたファイルを展開する
$ pax -r 入力元

なるほどそんなに難しくなさそう。 以下のファイルがある状態でアーカイブと展開をそれぞれやってみる。

$ ls -1
fuga.txt
hoge.txt
piyo.txt

ファイルをアーカイブする

まずはアーカイブから。

$ pax -w *
fuga.txt0000644 0000765 0000024 00000000017 13644250623 0013557 0ustar00kkznchstaff0000000 0000000 fuga
fuga
fuga
hoge.txt0000644 0000765 0000024 00000000017 13644250612 0013555 0ustar00kkznchstaff0000000 0000000 hoge
hoge
hoge
piyo.txt0000644 0000765 0000024 00000000017 13644250631 0013614 0ustar00kkznchstaff0000000 0000000 piyo
piyo
piyo

なんか出力された。 ファイルの内容とかメタ情報っぽいのが出力されているっぽい。

ちなみに標準出力に出力されているだけなので、上記のコマンドだとアーカイブファイルは作成されない。 アーカイブファイルを作成したい場合はリダイレクトさせる。

$ pax -w * > archive
$  ls -1
archive
fuga.txt
hoge.txt
piyo.txt

標準出力には何も出力されず、archive というファイルが新たに作成される。

アーカイブされたファイルを展開する

では次にアーカイブしたファイルを展開してみよう。 展開時にフォルダを指定して展開することは可能らしいが、ちょっと面倒なので別のフォルダを作成して archive を移動し、そこで展開する。

$ mkdir test
$ mv archive test

この状態で展開用のコマンドを実行する。

$ pax -r < archive

ここで ls を実行すると、アーカイブされていたファイルが展開でできていることが確認できる。

$ ls -1
archive
fuga.txt
hoge.txt
piyo.txt

展開できているっぽい。

ちなみに pax で作ったアーカイブファイルのファイルサイズは 10KB で、zip で圧縮した場合のファイルサイズは 481B だった。 こんなに違うのか、アーカイブファイルの使いみちが最早よく分からん。