Linux環境におけるRARおよび7-Zipアーカイブの取り扱い方入門

RARおよび7-ZipはWindowsを起源とするファイル圧縮フォーマットであるため、Linuxにおけるこれらの操作環境は、Unix起源のGzipやTARほどスムースに扱えるレベルには到達していない。とは言うものの適切なソフトウェアさえ使用すれば、この形式の圧縮ファイルを扱うのはそれほど難しい話でもないのである。

まず最初に、これらフォーマットのバックグラウンドを簡単に解説しておこう。RARとはRoshal Archiveの略称であり、Eugene Roshal氏により開発されたプロプライエタリ系のファイル圧縮フォーマットである。Roshal氏は商用ユーティリティとしてWindows用のWinRARという製品を販売しているが、伸張専用クライアントに関しては各種オペレーティングシステム用のものが無料で提供されている。

7-ZipもWindowsを起源とするアプリケーションの1つであり、多数の圧縮フォーマットへの対応をその特色としているが、ネイティブのフォーマットはLZ77圧縮アルゴリズムから派生した7zである。7-ZipのWindows用アプリケーションおよび7zソフトウェアの開発キットについては、LGPLでライセンスされたものが公開されている

いずれのフォーマットも、通常のデータであれば従来のフォーマットより高率で圧縮できることがメリットの1つに挙げられている。また携帯性およびエラー対策の観点から、サイズの大きいアーカイブを複数の小型ファイルに分割する機能も有している。ISOイメージなどの巨大なファイルをオンライン経由で配布する際にこれらの圧縮形式が多用されているのは、こうした2つの特長によるところが大きい。

Linux環境における7zの現状

7-Zipアプリケーションはオープンソース形式で公開されているが、現状ではWindows用のものしか存在しない。ただし開発元のプロジェクトには、Linux環境のコマンドラインで利用可能なp7zipというクライアントパッケージへのリンクが用意されており、ここにアクセスすることで7zおよび7zaという2つの実行ファイルを入手することができる。いずれのコマンドも実行用の構文およびオプションは共通しているが、7zaは自己完結式のアプリケーションであって対応するフォーマットも7zおよびUnixの基本フォーマット(tar、gzip、bzip2など)に限られているのに対し、7zではプラグインアーキテクチャが採用されているため多数の圧縮フォーマットに追加対応できるという違いがある。

コマンドの基本構文は7z オプション ファイル名.7z という形式で指定する。アーカイブを伸張する場合は、7z x ファイル名.7z とすればいい。同様に7z e ファイル名.7z とすることでもアーカイブからファイルを抽出できるが、ここで指定するeオプションはすべてのファイルを現在作業中のディレクトリに展開するための指定であるのに対して、先のxオプションはオリジナルのパスを維持させるための指定である。

Linux環境におけるRARの現状

一方のRARを取り巻く現状は、そのファイルフォーマットにプロプライエタリ系の圧縮スキームが採用されている関係上、若干複雑なものとなっている。具体的なプログラムとしては、unrarというLinux用の伸張専用クライアントがRARLABのサイトから提供されている。分類上はプロプライエタリ系のプログラムではあるが、配布形態としては無料での利用が可能とされており、32ビットIntel系ディストリビューション用のRPMとSlackwareのパッケージ、および、PowerPC、64ビットIntel、ARM Linuxシステム用のスタンドアローン型バイナリが入手できる。RARLABはこのunrarプログラムをフリーソフトウェアともオープンソースともしていないため、Linuxディストリビューションで同梱されているケースはほとんどない。よって通常はtarボール形式のソースコードをRARLABからダウンロードすることになるが、同封されているライセンスには、このソースコードを用いたRARエンコーダの作成をすべて禁じる旨が明示されている。

その他の選択肢としては、Gna!プロジェクトが開発したコマンドライン形式のツールがGPLv2のライセンスで公開されている。ただし、こちらのオープンソース版RARデコーダの名称もunrarとされているので、先のプロプライエタリ版と混同しないよう注意が必要だ。しかもこのGna!版unrarの実態はラッパーアプリケーションであって、実際の処理を担っているのはオープンソース形式で公開されているRARデコーディングライブラリのunrarlibであるのだが、このライブラリを開発したのはGna!のメンバではないChristian ScheurerおよびJohannes Winkelmannの両氏という、よりいっそう複雑な関係になっている。

Scheurer氏とWinkelmann氏は、RARLABのソースコードをオリジナルとしてunrarlibを開発したのであるが、Eugene Roshal氏の許可を得た上で、これをフリーソフトウェアとしてリリースしているのだ。このためunrarlibは、オリジナルのRARLABが持つプロプライエタリ系ライセンスを継承しつつ、GPLv2でのライセンスが適用されているのである。

このようなライセンス形態ができるならば、RARLABの権利を迂回する形でオリジナルのソースコードから競合するRARエンコーダを作成することも理論上は可能なように思われるのだが、そうした方式で作成されたアプリケーションは現在のところ登場していない。Scheurer氏自身もRARエンコーダの開発意欲は薄いようで、そんなものは無くても、アーカイブの作成時にオープンソース系フォーマットを用いれば済む話であるという旨の発言をしている。「圧縮されたデータを受け取る側は、どのフォーマットのファイルを入手するかの選択権を必ずしも有していませんから、必要な場合に備えてオープンなデコード手段は用意されていて然るべきです。それに対してアーカイブを作成する側は、どのフォーマットで圧縮するかを各自が選択できます。その際に、何らかの理由でクローズソース形式の圧縮ツールが必要という場合でなければ、それ以外で利用可能なエンコード手段を適時使えばいいはずです」

プロプライエタリ版のunrarを実行するためのコマンド構文は、7zおよび7zaのものと基本的に同じである。伸張およびアーカイブ作成をファイルパスを維持した状態で行うにはunrar x アーカイブ名.rar とすればいい。GPL版のunrarの場合もxオプションの前にハイフンを追加して unrar -x アーカイブ名.rar とするだけである。

なお現状のunrarlibでサポートされているのは、RARファイルフォーマットのバージョン2までである。Scheurer氏の説明するところでは、同氏もRAR3フォーマットをunrarlibで追加サポートするための作業を進めてはいるものの、RARLAB側からどのような反応を得られるかは不明だとのことだ。

GUI形式での利用形態

以下の解説は、作業の大半をLinuxのウィンドウマネージャで行っているユーザ向けの内容である。GNOMEおよびKDEのデスクトップ環境では、GNOME用のFile RollerKDE用のArkというグラフィカルインタフェース形式のアーカイブマネージャがそれぞれ利用できる。比較的最近のバージョンであれば、いずれもプラグイン形式による各種アーカイブフォーマットの追加サポートが可能であり、7zおよびRARについても、p7zipおよびGna!版unrarを介したサポートが行われている。ただしRARの上位バージョンであるRAR3ファイルについては、互換性の問題からプロプライエタリ版unrarをシステムにインストールする必要が生じてくるかも知れない。

ところで、先に説明したように7zおよびRARでは大型ファイルの分割機能がサポートされているはずである。ところが今回、オリジナルの7zファイルをバイトサイズの小型ファイルに分割した、myfile.7z.001、myfile.7z.002、myfile.7z.003という連番ファイルを処理させるテストを行ったところ、File RollerもArkも、これらのファイルを格納したディレクトリを認識することができなかったのである。

結局、この分割アーカイブからデータを抽出するには、コマンドライン形式のcatコマンドによる結合作業を行うしかなかった。具体的にはcat myfile.7z.001 myfile.7z.002 myfile.7z.003 > myfile.7zというコマンドによって分割ファイルを1つのmyfile.7zに戻すのである。こうして結合された7zアーカイブはFile RollerおよびArkで開くことができるが、どのみちコマンドラインでの操作を行うのであれば、先の結合コマンドに続けて7z x myfile.7zを実行してしまえば、手っ取り早く所望するデータを取り出すことができるだろう。

NewsForge.com 原文