SHAR(SHell ARchive)形式は、UnixおよびUnix系オペレーティングシステムで一般的に使用されるファイルアーカイブおよび圧縮形式です。複数のファイルとディレクトリを1つのアーカイブファイルにパッケージ化して、より簡単に保存および送信できるようにするための簡単な方法として開発されました。SHAR形式では、アーカイブされたファイルをオプションで圧縮して、結果のアーカイブの全体的なサイズを小さくすることができます。
SHARアーカイブは、本質的には、元のディレクトリ構造とファイルを再作成するためのコマンドのシリーズを含むシェルスクリプトです。SHARファイルが実行されると、シェルはコマンドを解釈し、ファイルを元の場所に抽出します。これにより、Unixシェルが利用可能な限り、特別なアーカイブツールを必要とせずにSHARアーカイブを簡単に作成および抽出できます。
SHARアーカイブの構造は、ヘッダー、ファイルメタデータ、および実際のファイルコンテンツで構成されます。ヘッダーには通常、シェルスクリプトのインタープリターを指定するためのシェバンライン(例:`#!/bin/sh`)が含まれ、その後に必要なシェルコマンドまたは変数宣言が続きます。ヘッダーには、アーカイブを抽出するためのコメントまたは指示が含まれる場合もあります。
ヘッダーの後、SHARアーカイブには、アーカイブされている各ファイルまたはディレクトリに関するセクションのシリーズが含まれます。各セクションは、ファイルの名前、パーミッション、所有権、タイムスタンプなどのファイルに関するメタデータで始まります。このメタデータは、ファイルが抽出されるときに適切な属性を設定するシェルコマンドを使用して表されます。
メタデータの後に、ファイルの実際のコンテンツがアーカイブに含まれます。ファイルコンテンツは通常、`uuencode`または`base64`エンコード方式を使用してエンコードされ、コンテンツがシェルスクリプトのテキストベースの性質と互換性があることが保証されます。エンコードされたコンテンツはより小さなチャンクに分割され、スクリプト内の`echo`または`printf`コマンドのシリーズとして印刷されます。
SHARアーカイブにディレクトリが含まれる場合、ディレクトリ構造は`mkdir`コマンドと適切なメタデータ設定の組み合わせを使用して再作成されます。その後、各ディレクトリ内のファイルは、上記で説明した方法と同じ方法でアーカイブに追加されます。
オプションで、SHARアーカイブには、結果のファイルのサイズを小さくするための圧縮を含めることができます。SHARで使用される一般的な圧縮方法には、`gzip`、`bzip2`、`compress`があります。圧縮は通常、個々のファイルに適用してから、エンコードしてアーカイブに追加されます。SHARアーカイブが抽出されると、圧縮されたファイルはシェルスクリプトによって自動的に解凍されます。
SHARアーカイブを作成するには、ほとんどのUnixおよびUnix系システムで利用可能な`shar`コマンドを使用できます。SHARアーカイブを作成するための基本的な構文は次のとおりです。`shar [options] file1 file2 directory1 ... > archive.shar`。指定されたファイルとディレクトリは、結果のアーカイブファイルに含まれます。
SHARアーカイブの抽出は、アーカイブ内に含まれるシェルスクリプトを実行するのと同じくらい簡単です。これは、`chmod`コマンドを使用してSHARファイルを編集可能にし、スクリプトとして実行することで行うことができます。`chmod +x archive.shar && ./archive.shar`。シェルはスクリプト内のコマンドを解釈し、元のファイルとディレクトリを再作成します。
SHAR形式の1つの利点は、そのシンプルさと移植性です。SHARアーカイブは、追加のソフトウェアを必要とせずに、Unixシェルを備えた任意のシステムで作成および抽出できます。ただし、SHAR形式には、`tar`や`zip`などのより高度なアーカイブ形式と比較して、いくつかの制限があります。SHARアーカイブには、個々のファイルへのランダムアクセス、整合性チェック、組み込みの暗号化などの機能がありません。
その制限にもかかわらず、SHAR形式は、特にUnixベースのシステムを扱う場合やシンプルさが求められる場合など、特定のシナリオで依然として役立ちます。ファイルを一括の自己解凍アーカイブとしてパッケージ化して配布するための簡単な方法を提供します。
要約すると、SHARアーカイブ形式は、複数のファイルとディレクトリを1つのシェルスクリプトアーカイブにパッケージ化するシンプルで移植可能な方法です。オプションの圧縮を可能にし、標準のUnixシェルコマンドを使用して簡単に作成および抽出できます。他のアーカイブ形式と比較して高度な機能を欠いているものの、SHARは基本的なアーカイブおよび配布のニーズに対してUnixエコシステムで役立つツールであり続けます。
ファイル圧縮は冗長性を減らすことで、同じ情報がより少ないビットで済むようにします。どこまで圧縮できるかの上限は情報理論によって定められています。可逆圧縮の場合、その限界はソースのエントロピーです(シャノンの ソース符号化定理 と彼の1948年の独創的な論文 「通信の数学的理論」を参照)。非可逆圧縮の場合、レートと品質のトレードオフは レート歪み理論によって捉えられます。
ほとんどの圧縮プログラムには2つの段階があります。まず、モデルがデータ内の構造を予測または公開します。 次に、コーダー