47
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

tarコマンドについての素朴な疑問を調べた

Posted at

はじめに

linuxを使うにあたって避けて通れないtarコマンド。入門書でも当たり前のように使われてるけど、そもそもtarって何者なのよとずっと気になっていたので調べてみました。

何の略?

Tape Archievesの略。
その名の通り、元々は磁気テープ向けにファイルをアーカイブするためのコマンドでした。

アーカイブって何?

アーカイブとは複数のファイルを一つにまとめることです。
ここで私は「1つにまとめるならディレクトリという仕組みがあるじゃないか」と疑問に思ったのですが、それは的外れでした。

ディレクトリは飽く迄も概念で、それをどのように実現するかはファイルシステムの自由です。場合によってはファイルはディスク上にバラバラに配置されているかもしれません。そのままではシーケンシャルな磁気テープにファイルを書き出すことはできません。

無題の図形描画.png

そこで、複数のファイルを一つにまとめるアーカイブの出番です。ファイルのフォーマットを決めて一つのファイルにまとめることによって初めて磁気テープに書き出したり、ファイルを配布できるようになるのです。

無題の図形描画 (1).png

hoge.tar.gzって何?

tarフォーマットのアーカイブファイルをgzipという形式で圧縮したものです。

私は、なぜ直接hoge.gzに圧縮せずtarを挟むのか疑問でした。

理由は、gzipにアーカイブ機能がないからです。例えば、zipではAファイルとBファイルをひとまとめに(アーカイブ)して圧縮できます。しかし、gzipではそのような事はできずファイルを一つ一つ圧縮する事しかできません。そのため、tarでファイルを1つにまとめてから圧縮する必要があるのです。

無題の図形描画 (2).png

zipでよくね?

なぜメジャーなzipを使わないんだろうと疑問におもったのですが、ごめんなさい、これに関しては結論は出ませんでした。恐らく「歴史的経緯」で片付くと思うのですが、文献が見当たりませんでした。

少なくとも、Linux界隈ではtar.zgがよく使われているということは事実で、そういうものなんだという割り切るしかなさそうです。OSが変われば作法も変わるというのは当たり前のことですしね。

なんでオプションにハイフンがないの?

tarコマンドはオプションにハイフンをつけなくてもいい珍しいコマンドです。例えば次のような具合です。

$ tar cvf hoge.tar hoge

しかし、次のようにハイフンをつける事もできます。

$tar -cvf hoge.tar hoge

なぜオプションにハイフンを付けたり付けなかったりして良いのでしょうか。

結論から言ってしまえば歴史的経緯によるものです。コマンドラインオプションに-をつける慣習ができる前からtarコマンドは存在していたのです。

  • tarコマンドができる
  • この時点ではオプションに-は必要なかった
  • コマンドラインオプションは"-"で始めるというルールができる
  • そのルールに従うようにtarコマンドを修正する
  • しかし、互換性のために古い記法も残された

tarコマンドは非常に長い歴史のあるコマンドということですね。

47
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?