質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.54%

なぜlinuxではtar.xzが使われるのか

解決済

回答 8

投稿

  • 評価
  • クリップ 0
  • VIEW 7,393

keik

score 7

linuxサーバーの構築について勉強している際に疑問に思うことがあったので質問させていただきます。

アプリケーションのインストール中、tar.xzという形式のファイルをたくさん扱いました。
ggったら、tarでアーカイブしてxzで圧縮しているとありましたが、なぜこの形式が使われているのでしょうか。

windowsのPCではzipと7zが使われることがほとんどで、これらの形式だとアーカイブも圧縮も同時にでき、tar.xzよりも優れているように思えます。
ggると、zipは32bitの場合4Gまでしか扱えないからと書いてありましたが、32bitの比率は4%だと見た覚えがあるし、4Gを超えるアプリケーションはほとんどないため明確な答えではないと思いました。

正直解凍が二度手間で面倒なので、理由が慣習とかならやめてもらいたいです...
ご教授の程よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 8

checkベストアンサー

+5

調べてみたら非常に興味深かったので書いてみました。ご参考に慣ればと思います。

windowsのPCではzipと7zが使われることがほとんどで、これらの形式だとアーカイブも圧縮も同時にでき、tar.xzよりも優れているように思えます。

7zとxzについて起源を調べてみたところ、両方共LZMAというアルゴリズムを利用しているようです。7zのほうが先に開発されており、元はwindows向けに作られていたようです。その後、Linuxの移植版を作られてxzが現れたようです。 Linux版が後なのは、LZMAライブラリがMicrosoft windowsの特有な機能を使用されており移植に時間がかかったためのようです。

そのため、機能面においては特に大きな優劣は無いのではないかと思われます。

正直解凍が二度手間で面倒なので、理由が慣習とかならやめてもらいたいです...

おそらくこの部分が優劣に感じているのではないかと思いますが、手間の部分については他の方が記載している通りコマンドで1回で回答できます。

その他で、linuxでtarを使う理由ですが、tarはTape Archievesの略になります。そのため、あまり馴染みがないかもしれませんが、ファイルをテープに記録するためのコマンドです。ディレクトリはHDD向けの構造なのですが、バラバラに存在する可能性があります。ただ、テープはシーケンシャルにデータを入れる必要があるため整列する必要があり、そのコマンドがtarでした。

Archievesしてから圧縮するという機能が付加されて、tar.gzやtar.bz2のような圧縮形式をサポートするようになってきました。その流れで、xzという圧縮形式も現れたのでサポートされたのだと思います。

Appendix

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/15 10:41 編集

    歴史的に、tar は古いです。 Unixと共にありました。正確なところは把握していませんが、30年以上前から。で、そのツール類は、そのまま、Linuxに引き継がれていると。tarは、kinu-nさんが書かれているように、複数のファイルを一つにする機能しかありません。(tar ボールと呼ばれた事もあると思った) unixの思想として、複雑な機能をサポートせずに、シンプルな機能を組み合わせて使いましょう、があります。これに従うと、ファイルのアーカイブ機能と圧縮を一つにするのは邪道となります。
    (現実にはサポートしてるみたいですが)

    キャンセル

+4

正直解凍が二度手間で面倒なので

最近のtarコマンドでは、xzの解凍も込みで一気に行うことができます。

tar Jxf /path/to/filename.tar.xf

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

まず、Windowsの標準の圧縮フォーマットを「zip」とするならば
Linuxにおいて一般的な圧縮フォーマットは「gzip」だと思います。。。

というのは置いておきまして

なぜlinuxではtar.xzが使われるのか

そもそも、この考え方が正しくありません。
所謂「Linux使い」は、状況や用途によって圧縮フォーマットを使い分けます。

・高速に圧縮したい
・伸長時間を短くしたい
・圧縮効率を優先したい
・OSに負荷をかけずに圧縮/伸長したい
・特に希望は無いから一般的なやつでいいや

等々。。。

圧縮フォーマットには種類によって得手不得手があるので、目的に併せて使い分けてください。
※似たような特性の圧縮フォーマットもゴロゴロあるので、そこらへんは利用者の好みです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

ZIPを避ける積極的な理由は今となってはないと思います。
ただ、tar.* からZIPに乗り換える積極的な理由も無いです。

tar + 圧縮 のメリットとしては、今あるファイルを圧縮方法だけtar内部にノータッチで変更できるくらいでしょうか。そんなに大きなメリットではないですが。
(昔)foo.tar.Z → foo.tar.gz → foo.tar.bz2 → foo.tar.xz(今)

tarコマンドとzipコマンドの機能に差異はあると思いますが(unzipで解凍時に元のオーナー属性でって出来ましたっけ?)、それはコマンドの差異であってファイルフォーマットの問題じゃないし。

正直解凍が二度手間で面倒なので、

については、Linuxでつかうgnu tarであれば、解凍の時は自動判別するので、
tar xf foo.tar.xz
のようにすれば解凍についてはよしなにやってくれます。gnu tarでなくても圧縮オプションを指定すれば1コマンドでOKです。
圧縮の時は、
tar cJf foo.tar.xz bar
のようにオプションで圧縮の種類を指定する必要があります(xzはJ)。拡張子を見てやってくれるといいのですが、現時点ではそうでないようです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

正直解凍が二度手間で面倒なので、理由が慣習とかならやめてもらいたいです

今どきのtarコマンドは一発で展開できるようです。これは特にデメリットというわけではないですね。

従来の類似ツールより圧縮率が高いアーカイブファイルが作れるそうですから、それはそれでメリットであることは間違いないでしょう。

個人的には使い慣れているgzip等からの乗り換えの必要性はあまり感じませんし、質問者氏もそうなのでしょうが、いやなら使わなければいいだけのことだし、展開だけなら前述の通りコマンド一発なのだから、シェルスクリプトなりエイリアスなり作っておけば、手間などかかりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

tarで1ファイルに纏めてから、huffmanなりスライド辞書で圧縮した方が圧縮率が良いからでは?

1ファイル毎で圧縮するより、ファイル間での近似性も圧縮率に貢献するはずです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

参考情報

...
xzの登場以前より使われていたgzip、bzip2と比較すると、圧縮時にはより多くの時間とメモリを消費するが、圧縮率では概ね優位で、また伸張速度もgzipより多少遅いがbzip2よりは速い傾向にある。このことから、特にアーカイブ配布用途として、tarとgzipを組み合わせて作成する場合[1]やtarとbzip2を組み合わせる場合[2]と並んで採用され、bzip2を置き換えるケースも増えている。
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

tar コマンド自身で .xz を圧縮・展開させることもできますし、そもそも Unix 文化では「パイプ使ってつなげりゃいいじゃん」なので、ワンライナーで書けないわけでもなし。
配布用としてみたときには、圧縮時の時間より、ファイルサイズの縮小と展開速度の方がより重要だという話でしょう。

あと、Linux のカーネルイメージの圧縮用にも採用されているのが、Linux での普及率の高さに繋がっているのだと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.54%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる