はじめに
POSIX で標準化(XSI拡張)されている compress
、uncompress
、zcat
コマンドは Issue 8 で .Z 形式に加えて .gz 形式対応になります。つまり gzip
、gunzip
コマンド相当の機能を備えるということです。
- POSIX の範囲だけで実現したい!
- POSIX には
gzip
、gunzip
コマンドがない! - POSIX にあるのは
compress
、uncompress
コマンドだけだ! -
compress
、uncompress
が対応しているのは .Z 形式だけだ! - 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
コマンドを使いましょう。compress
、uncompress
、zcat
コマンドは、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 |
この表を見ると deflate
と gzip
の2つの圧縮アルゴリズムがあるように思えますが、圧縮アルゴリズム (RFC1951) が deflate
で、gzip
は圧縮ファイル形式の仕様 (RFC1952) で同じものを指しているはずです。次のようにするのが正しい気がします。
algo | Algorithm | Filename Suffix |
---|---|---|
lzw | Adaptive LZW | .Z |
deflate, gzip | DEFLATE (RFC1951) | .gz (RFC1952) |
さいごに
この件に関してあまり情報(議論)が見つからなく、 メーリングリストで -g
は existing practice であるぐらいのことしか書かれていないんですよね。それ OpenBSD の話をしてるの? 提案に対してすんなり「gzip に対応しましょう」で話が終わったの? 釈然としませんが、まあどうでもいいかなと思います。