はじめに
linuxを使うにあたって避けて通れないtar
コマンド。入門書でも当たり前のように使われてるけど、そもそもtar
って何者なのよとずっと気になっていたので調べてみました。
何の略?
Tape Archievesの略。
その名の通り、元々は磁気テープ向けにファイルをアーカイブするためのコマンドでした。
アーカイブって何?
アーカイブとは複数のファイルを一つにまとめることです。
ここで私は「1つにまとめるならディレクトリという仕組みがあるじゃないか」と疑問に思ったのですが、それは的外れでした。
ディレクトリは飽く迄も概念で、それをどのように実現するかはファイルシステムの自由です。場合によってはファイルはディスク上にバラバラに配置されているかもしれません。そのままではシーケンシャルな磁気テープにファイルを書き出すことはできません。
そこで、複数のファイルを一つにまとめるアーカイブの出番です。ファイルのフォーマットを決めて一つのファイルにまとめることによって初めて磁気テープに書き出したり、ファイルを配布できるようになるのです。
hoge.tar.gzって何?
tarフォーマットのアーカイブファイルをgzipという形式で圧縮したものです。
私は、なぜ直接hoge.gz
に圧縮せずtar
を挟むのか疑問でした。
理由は、gzipにアーカイブ機能がないからです。例えば、zipではAファイルとBファイルをひとまとめに(アーカイブ)して圧縮できます。しかし、gzipではそのような事はできずファイルを一つ一つ圧縮する事しかできません。そのため、tarでファイルを1つにまとめてから圧縮する必要があるのです。
zipでよくね?
なぜメジャーなzipを使わないんだろうと疑問におもったのですが、ごめんなさい、これに関しては結論は出ませんでした。恐らく「歴史的経緯」で片付くと思うのですが、文献が見当たりませんでした。
少なくとも、Linux界隈ではtar.zgがよく使われているということは事実で、そういうものなんだという割り切るしかなさそうです。OSが変われば作法も変わるというのは当たり前のことですしね。
なんでオプションにハイフンがないの?
tar
コマンドはオプションにハイフンをつけなくてもいい珍しいコマンドです。例えば次のような具合です。
$ tar cvf hoge.tar hoge
しかし、次のようにハイフンをつける事もできます。
$tar -cvf hoge.tar hoge
なぜオプションにハイフンを付けたり付けなかったりして良いのでしょうか。
結論から言ってしまえば歴史的経緯によるものです。コマンドラインオプションに-
をつける慣習ができる前からtar
コマンドは存在していたのです。
- tarコマンドができる
- この時点ではオプションに
-
は必要なかった - コマンドラインオプションは"-"で始めるというルールができる
- そのルールに従うようにtarコマンドを修正する
- しかし、互換性のために古い記法も残された
tarコマンドは非常に長い歴史のあるコマンドということですね。