ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
xz は、フィンランド発の Tukaani Project が開発したストリーム型のロスレス圧縮ファイル形式およびユーティリティです。中核となるアルゴリズム LZMA2 は、もともと 7-Zip の作者 Igor Pavlov が考案した LZMA(Lempel-Ziv-Markov chain Algorithm)を独立形式化したもので、極めて高い圧縮率を実現します。
2009 年に xz Utils 4.999.x がリリースされ、その後 Linux ディストリビューションのソースアーカイブが続々と .tar.gz / .tar.bz2 から .tar.xz へ移行しました。決定打となったのは 2013 年の Linux カーネル公式 tarball が xz 形式のみの配布へ切り替わった出来事で、これ以降「現代の OSS 配布における事実上の標準形式」の座を確立しました。
しかし、2024 年 3 月に発覚した CVE-2024-3094(xz-utils バックドア事件)により、xz は単なる圧縮形式の話を超えて「供給網攻撃の教科書事例」として情報セキュリティ史に刻まれることになりました。本記事の後半で詳述します。
内部構造とマジックナンバー
xz ファイルは固定マジック、ストリームヘッダ、1 個以上のブロック、インデックス、ストリームフッタという順序で構成されます。
| オフセット | 内容 | 値(hex) |
|---|---|---|
| 0-5 | マジックナンバー | FD 37 7A 58 5A 00(".7zXZ.") |
| 6-7 | Stream Flags(チェックサム種別) | CRC32 / CRC64 / SHA-256 |
| 8-11 | CRC32 of Stream Header | 4 バイト |
| ... | Block(s)(LZMA2 圧縮データ) | 可変長 |
| 末尾-12 | Index | ブロックサイズ一覧 |
| 末尾 | Stream Footer + マジック 59 5A("YZ") | 12 バイト |
LZMA2 は LZMA を改良し「非圧縮ブロックを混在可能」「リセット可能」にしたもので、並列処理と耐障害性が向上しています。これにより xz -T0 でマルチコア圧縮が可能となり、巨大ファイルの圧縮時間が大幅に短縮されました。
辞書サイズは最大 4 GB まで設定可能(実用上はプリセット -6 の 8 MB、-9 の 64 MB が一般的)で、これが bzip2 を上回る圧縮率の源泉となっています。
主な用途
- Linux ディストリビューションのソース配布: kernel.org、GNU プロジェクト、freedesktop.org など主要 OSS のリリース tarball
- パッケージ圧縮: Arch Linux の
.pkg.tar.xz(2020 年以降は zstd 化)、Fedora RPM、Debian deb 内部の data.tar.xz - 長期アーカイブ: 容量を極力小さくしたいバックアップ、論文・データセットの公開
- 組み込み・ファームウェア: ROM 容量制約のある機器でファームウェアイメージを圧縮
関連形式との比較
| 形式 | アルゴリズム | 圧縮率 | 圧縮速度 | 展開速度 | メモリ |
|---|---|---|---|---|---|
| gzip | DEFLATE | 中 | 速 | 非常に速 | 少 |
| bzip2 | BWT+Huffman | 高 | 遅 | 普通 | 中 |
| xz (-9) | LZMA2 | 非常に高 | 非常に遅 | 普通 | 大(〜674MB) |
| zstd (--ultra -22) | FSE+LZ77 派生 | xz 同等 | 遅 | 非常に速 | 中〜大 |
| 7z (LZMA2 内包) | LZMA2 等 | 非常に高 | 遅 | 普通 | 大 |
xz は「圧縮時間さえ気にしなければ最高クラスの圧縮率」を提供します。展開は意外に速く、配布側が一度圧縮すれば多数のユーザに展開コストを押し付けないという意味で OSS 配布に好相性です。
コマンド・ツール
# xz で圧縮 (元ファイル消滅 → file.txt.xz)
xz file.txt
# 元ファイルを保持
xz -k file.txt
# 圧縮レベル指定 (-0 から -9、-9e は extreme でさらに圧縮)
xz -9e -k file.txt
# 展開
unxz file.txt.xz
# または
xz -d file.txt.xz
# 標準出力へ展開(パイプ)
xzcat file.txt.xz | grep ERROR
# 並列圧縮(全コア使用、ファイル分割不要)
xz -T0 -9 large.log
# tar との組み合わせ (.tar.xz / .txz)
tar cJvf archive.tar.xz ./dir/ # J = xz
tar xJvf archive.tar.xz # 展開
# 圧縮率の確認
xz -l file.txt.xz # 圧縮前後のサイズと比率を表示
注意点・落とし穴
- 🚨 CVE-2024-3094(xz-utils バックドア事件): 2024 年 3 月、xz-utils 5.6.0 および 5.6.1 に SSH 認証をバイパスする悪意あるコード が混入していたことが発覚しました。Microsoft の Andres Freund 氏が SSH ログインの速度低下を不審に思い、調査した結果発見されたものです。
- 攻撃者「Jia Tan」は数年かけてメンテナとして信頼を獲得し、リリース署名権限を得てから攻撃を実行
- バックドアは libsystemd 経由で sshd にロードされる仕組みで、特定の RSA 鍵を持つ攻撃者だけが認証回避可能
- Debian unstable / Fedora 40 beta / openSUSE Tumbleweed などの一部に配布済みだったが、安定版リリース前に発覚し被害は限定的
- 教訓: 単一メンテナへの過度な依存、ビルドスクリプト(autoconf)の見落とし、テストデータ偽装による検出回避、OSS サプライチェーン全体の信頼モデル再考が必要
- 5.6.2 以降は問題コードを除去済み。ディストリビューションが配布するパッケージは安全だが、自前ビルドする場合はバージョン確認必須
- 圧縮メモリ要求が大きい:
-9圧縮は 674 MB、-9eは同等、解凍も 64 MB 必要。低メモリ環境では-6以下に抑える。 - 破壊的動作: bzip2 と同様、デフォルトで元ファイルを削除する。
-kで保持。 - シーク不可: 内部にインデックスはあるがランダムアクセスは限定的。一部だけ取り出す用途では工夫が必要。
- 古い tar とは非互換:
tar -Jオプションは GNU tar 1.22+ から。Solaris の標準 tar などでは別途xz -d | tar xf -のパイプ展開が必要。
関連リンク
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?