ヒスねこTechBlog

日々の気になる技術をまとめてます。

tarを展開する(おためし)

よく発作的に、何かのファイルフォーマットだとかプロトコルの中身が気になったりします。きっと持病なんだと思います。

Dockerイメージの話の絡みで、tarってどうなっているんだろうと考え始めてしまいました。

アーカイブとしてファイルをまとめただけですよ、という説明はよく見るんですが、「いやいや単にくっつけているわけじゃないでしょ?」と思ってフォーマットを眺めて、結構手軽に展開できそうだなと思ってしまったのが最後、気が付いたらちょっとだけですがコードを書いてました。

仕様のほとんどに準じていない実験用コードなのであしからず。

github.com

チェックサムの計算がどうも256だけ足りずに合わないんですが、自分が仕様を誤解している気がします...

そちらは追々解決するとして、フォーマット眺めたりプログラムを作っていると色々気が付いて面白いです。ヘッダだけではなくアラインメントやゼロのブロックがたくさんついていて、まあまあファイルサイズが膨らんでしまうんですね。然るべきアルゴリズムで圧縮されていれば、結局元のサイズよりは小さくなったりするのでしょうけれど。

サイズやチェックサムが単純に16進数なのではなく、8進数のASCII表現なのも興味深いです。この仕様になった経緯もGNU tarを時間があるときに眺めて確認しようと思います。