LoginSignup
1
1

POSIX標準規格では compress, uncompress, zcat コマンドは.Z形式と.gz形式の両対応(gzip圧縮対応)

Last updated at Posted at 2023-07-23

はじめに

POSIX で標準化(XSI拡張)されている compressuncompresszcat コマンドは Issue 8 で .Z 形式に加えて .gz 形式対応になります。つまり gzipgunzip コマンド相当の機能を備えるということです。

  1. POSIX の範囲だけで実現したい!
  2. POSIX には gzipgunzip コマンドがない!
  3. POSIX にあるのは compressuncompress コマンドだけだ!
  4. compressuncompress が対応しているのは .Z 形式だけだ!
  5. POSIX に準拠するなら圧縮ファイルは .Z 形式しか使えない!

という時代はもう終わりです。

詳細は XCU.4. cksum, compress, uncompress, zcat

もっとも

compress コマンドで gzip 圧縮を行うには -g オプションを指定するか -m オプションに deflate (別名 gzip) を指定するのですが、-g オプション(-m gzip と同じ)が実装されている compress コマンドは現時点でおそらく OpenBSD 版のみ(1997年の OpenBSD 2.2 で実装されたっぽい)で、-m オプションを実装しているコマンドはなさそうな気がします。

つまり gzip 圧縮を使いたいのであれば素直に gzip コマンドや gunzip コマンドを使いましょう。compressuncompresszcat コマンドは、POSIX で標準化されていると言っても、オプションの XSI 拡張機能なので実装されているとは限りませんし標準インストールされていない場合もあります。Issue 8 で標準化されるということの意味は、単にこれからは POSIX コマンド縛りをしていても .gz 形式を堂々と使えるというだけの話です。

ちなみに uncompress コマンドと zcat コマンドに関しては、gzip 圧縮に対応するためのオプションはありません。gzip 圧縮に対応しているかは実装によります。本来の uncompress コマンドと zcat コマンドは .Z 形式にしか対応していませんが、実際には gzip 圧縮を含むさまざまな圧縮形式に対応した実装がすでに使われています。この点に関しては遅れていた POSIX が現実の実装に追いついたといったところでしょう。compress コマンドの -m オプションの仕様は将来さらに多くの圧縮形式に対応可能であることを示唆しています。もちろん POSIX でもその他の実装定義の圧縮形式に対応しても良いと認められています。

POSIXの -m オプションの説明に関する補足

POSIX Issue 8 では -m algo について以下のような説明の表が掲載されています。

Algorithm algo Filename Suffix
Adaptive LZW lzw .Z
RFC1951 DEFLATE deflate .gz
Synonym for DEFLATE gzip .gz

この表を見ると deflategzip の2つの圧縮アルゴリズムがあるように思えますが、圧縮アルゴリズム (RFC1951) が deflate で、gzip は圧縮ファイル形式の仕様 (RFC1952) で同じものを指しているはずです。次のようにするのが正しい気がします。

algo Algorithm Filename Suffix
lzw Adaptive LZW .Z
deflate, gzip DEFLATE (RFC1951) .gz (RFC1952)

さいごに

この件に関してあまり情報(議論)が見つからなく、 メーリングリスト-g は existing practice であるぐらいのことしか書かれていないんですよね。それ OpenBSD の話をしてるの? 提案に対してすんなり「gzip に対応しましょう」で話が終わったの? 釈然としませんが、まあどうでもいいかなと思います。

1
1
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
1
1