Go to the first, previous, next, last section, table of contents.


ar

ar [-]p[mod [relpos] [count]] archive [member...]
ar -M [ <mri-script ]

GNU @command{ar}は,アーカイブの作成,変更,そして,それからの抽出 を行います.アーカイブ(archive)とは,(アーカイブのメンバー (members)と呼ばれる) 元となる個々のファイルを取り出すことが可能な構造の ファイル中に,他のファイルの集合を保持している単一のファイルです.

元のファイルの内容,モード(許可),タイムスタンプ,所有者,そしてグループ は,アーカイブに保存されていて,抽出時に復元可能です.

GNU @command{ar}は,あらゆる長さのメンバー名のアーカイブを管理する ことが可能です.しかし,@command{ar}がシステムでコンフィグレーションされ た方法に依存し,他のツールで管理されるアーカイブのフォーマットの互換性の ため,メンバー名の長さは制限される可能性があります.それが存在する場合, 制限は15文字(a.out に関連するフォーマットの典型)や16文字(coffに関連する フォーマットの典型)のことが多いでしょう.

この種のアーカイブは,一般に必要なサブルーチンを保持するライブラリ (libraries) として最もよく使用されるので,@command{ar}は,バイナリユー ティリティと考えられます.

@command{ar}は,修飾子`s'を指定したとき,アーカイブの再配置可能なオ ブジェクトモジュールに定義されているシンボルに索引を作成します.一度作成 されると,(`q'更新コマンドに対する保存で)@command{ar}がその内容を変 更したときはいつも,この索引はアーカイブ内で更新されます.そのような索引 をもつアーカイブは,ライブラリとのリンク速度を上げ,ライブラリのルーチン がアーカイブ内の位置に関わらず,お互いの呼び出しを可能にします.

この索引テーブルをリストアップするため,`nm -s'`nm --print-armap' を使用してもかまいません.アーカイブにテーブルがない場合, @command{ranlib}と呼ばれる@command{ar}の別の形式を,テーブルを加えるため に使用することが可能です.

GNU @command{ar}は,二つの異なる機能と互換性があるように設計されて います.Unixシステム上の異なる形態の@command{ar}のように,コマンドライン オプションを使用してその作業を制御することが可能です.また,単一のコマン ドラインオプション@option{-M}を指定した場合,MRI "librarian"プログラム のように,標準入力を通じて供給されるスクリプトを用いて,それを制御するこ とが可能です.

コマンドラインでの@command{ar}の制御

ar [@option{-X32_64}] [@option{-}]p[mod [relpos] [count]] archive [member...]

Unix形式で@command{ar}を使用するとき,@command{ar}は少なくとも二つの引数 を実行時に要求します.operationを指定するキー文字 (modifiersを指定するその他のキー文字がオプションで付きます)と,動 作対象のアーカイブ名です.

ほとんどの処理は,それ以外にmember引数を受け入れ,それは処理の対象 となる特定のファイル名を指定します.

GNU @command{ar}では,最初のコマンドライン引数内で,処理コード pと修飾フラグmodを,あらゆる順序で混合させることが可能です.

好みにより,最初のコマンドライン引数をダッシュで始めてもかまいません.

pキー文字は,実行する処理を指定します.それは以下のいずれでもかま いませんが,その中の一つだけを指定する必要があります.

`d'
アーカイブからモジュールを削除します.削除するモジュール名は, member...として指定してください.削除するファイルを指定してい ない場合,アーカイブはそのままです. `v'修飾子を指定した場合,@command{ar}は削除するそれぞれのモジュール をリストアップします.
`m'
アーカイブ内でメンバーを移動するためにこの処理を使用してください. シンボルが一つ以上のメンバーで定義されている場合,アーカイブ内のメンバー の順序で,ライブラリを使用してプログラムがリンクされる方法に差異が発生す るはずです. mとともに修飾子を使用しない場合,member引数で指名したすべて のメンバーは,アーカイブの終りに移動されます.そうする代わりに, 指定した位置にそれらを移動するために,`a'`b',または`i' 修飾子が使用可能です.
`p'
アーカイブの指定されたメンバーを標準出力ファイルに出力します. `v'修飾子が指定されている場合,その内容のコピーの前にメンバー名を標 準出力に表示します. member引数を指定していない場合,アーカイブのすべてのファイルが出力 されます.
`q'
すばやく追加します.歴史的に,ファイルmember...を archiveの終りに,置換についての調査をせずに追加します. 修飾子`a'`b',そして`i'は,このオプションに効果は ありません.新しいメンバーは常にアーカイブの終りに配置されます. 修飾子`v'で,@command{ar}は追加されるそれぞれのファイルをリストアッ プします. このオペレーションの要点は速度なので,アーカイブのシンボルテーブルの索引 が存在している場合でも更新されません.シンボルテーブルの索引を更新するた めに,`ar s'または@command{ranlib}を明示的に使用することが可能です. しかし,あまりに多くの異なるシステムで,高速追加が索引を再構築することを 仮定するので,GNU @command{ar}は,qrの同義語として 実装されています.
`r'
ファイルmember...をarchiveに挿入します(置換を用い ます).この処理は,追加されるものと名前が一致した場合,既存のメンバーが 削除される点で,`q'とは異なります. member...で指名されたファイルが一つでも存在しない場合, @command{ar}はエラーメッセージを表示し,名前がアーカイブと一致する既存の メンバーはそのままになります. デフォルトで,新しいメンバーはファイルの終りに追加されます.しかし,既存 のメンバーとの相対位置を要求するため,修飾子`a'`b',または `i'の一つを使用してもかまいません. この処理での修飾子`v'の使用は,挿入されたそれぞれのファイルを出力の 一行に書き出し,ファイルが追加された(古いメンバーが削除されていない)のか, 置換されたのかを示す文字`a'または`r'のどちらかを追加します.
`t'
archiveの内容をリストアップしているテーブル,または,アーカ イブに存在するmember...にリストアップされているファイルの テーブルを表示します.通常,メンバー名のみ見えます.モード(許可), タイムスタンプ,所有者,そして大きさも見たい場合,`v'修飾子を指定し てで要求することも可能です. memberを指定しない場合は,アーカイブ内のすべてのファイルがリストアッ プされます. 同じ名前の(`fie'という名の)ファイルが,(`b.a'をいう名の)アーカ イブに一つ以上ある場合,`ar t b.a fie'は最初のインスタンスのみリス トアップします.すべてを見るために,完全なリストを請求する必要があります --- この例では`ar t b.a'です.
`x'
(memberという名の)メンバーをアーカイブから抽出します. @command{ar}が抽出しているそれぞれの名前をリストアップするように,この処 理で`v'修飾子を使用することが可能です. memberを指定しない場合,アーカイブのすべてのファイルが抽出されます.

処理の動作の変更を指定するため,いくつかの修飾子(mod)をpキー 文字の直後に続けてもかまいません.

`a'
新しいファイルを,アーカイブの既存のメンバーのに追加します.修 飾子`a'を使用した場合,archive指定の前に,既存のアーカイブメ ンバー名がrelpos引数にある必要があります.
`b'
新しいファイルをアーカイブの既存のメンバーのに加えます.修飾子 `b'を使用した場合,archive指定の前に,既存のアーカイブメンバー 名がrelpos引数にある必要があります.(`i'と同じです).
`c'
アーカイブを作成します.更新の要求をしたとき,指定された archiveが存在する場合でも,それは常に作成されます.しかし,この修 飾子を使用して,作成することを期待するということを前もって指定しない場合, 警告が生じます.
`f'
アーカイブで名前を切り詰めます.GNU @command{ar}は,通常あらゆる長 さのファイル名を許可します.これは,いくつかのシステムのネイティブ @command{ar}プログラムと互換性のないアーカイブを作成します.これが懸念さ れる場合,アーカイブに配置するときファイル名を切り詰めるために,`f' 修飾子を使用してもかまいません.
`i'
新しいファイルをアーカイブの既存のメンバーの前に挿入します.修飾 子`i'を使用する場合,archive指定の前に,既存のアーカイブメン バー名前がrelpos引数にある必要があります.(`b'と同じです).
`l'
この修飾子は受け入れられますが,使用されません.
`N'
countパラメータを使用します.これは,同じ名前のアーカイブに,複数 のエントリーがある場合に使用されます.アーカイブから,該当する名前のイン スタンスをcount個,抽出または削除します.
`o'
メンバーが既存のとき,そのオリジナルの日付を保持します.この修飾 子を指定しない場合,アーカイブから抽出されるファイルは,抽出した時間でタ イムスタンプがつきます.
`P'
アーカイブの名前の一致にフルパス名を使用します.GNU @command{ar}は フルパス名を持つアーカイブ(そのようなアーカイブは,POSIXで問題ない)を作 成することは不可能ですが,アーカイブを作成するものには,そうすることが可 能なものもあります.このオプションで,GNU @command{ar}はフルパス名 を使用しているファイル名にマッチし,それは,他のツールで作成されたアーカ イブから単一のファイルを抽出するとき便利でしょう.
`s'
オブジェクトファイルの索引をアーカイブに書き出したり,他の変更がアーカイ ブに対してなされない場合でも,既存のものを更新したりします.この修飾子フ ラグは,あらゆるオプションとともに,または単独で使用してもかまいません. アーカイブで`ar s'を実行することは,`ranlib'の実行と等価です.
`S'
アーカイブシンボルテーブルを生成しません.これで何段階か使用する大きなラ イブラリの構築を高速にすることが可能です.結果として出力されるアーカイブ は,リンカで使用することは不可能です.シンボルテーブルを構築するために, `ar' の最後の実行で`S' 修飾子を省略したり,アーカイブで `ranlib'を実行する必要があります.
`u'
通常,`ar r'...でリストアップされているすべてのファイルをアーカ イブに挿入します.リストアップしたもので,同じ名前の既存のメンバーより新 しいファイルのみ挿入したい場合,この修飾子を使用してください. `u'修飾子は,処理`r'(置換)に対してのみ可能です.特に,タイムス タンプの調査が処理`q'での速度の利点を損なうため,`qu'と組み合 わせることはできません.
`v'
この修飾子は,処理の冗長バージョンを要求します.多くのオペレーショ ンは,修飾子`v'が追加されているとき,処理しているファイル名のような 追加の情報を表示します.
`V'
この修飾子は@command{ar}のバージョンナンバーを表示します.

@command{ar}は,AIXに対する互換性のため,`-X32_64'と綴られた最初の オプションを無視します.このオプションによって引き起こされる動作は,GNU @command{ar}のデフォルトです.@command{ar}は,その他の`-X'オプショ ンを全くサポートしません.特に,AIX @command{ar}ではデフォルトとなる @option{-X32}はサポートしません.

スクリプトを用いた@command{ar}の制御

ar -M [ <script ]

単一のコマンドラインオプション@option{-M}を@command{ar}で用いた場合,基 礎的なコマンド言語でその処理を制御することが可能です.@command{ar}のこの 形式は,標準入力が端末から直接来ている場合,対話的に処理します.対話的に 使用している間,@command{ar}は入力を促し(プロンプトは`AR >'),エラー 後も実行を続けます.標準入力をスクリプトファイルにリダイレクトしている場 合,プロンプトは発行されず,@command{ar}はエラーが発生すると(ゼロでない 終了コードで)実行を終了します.

@command{ar}コマンド言語は,コマンドラインオプションと等価に設計されて いません.実際,それはアーカイブ上の制御が幾分少なくなっています. コマンド言語の目的は,MRI "librarian"プログラムに対して書かれたスクリ プトを既に所有している開発者が,GNU @command{ar}への変換をより簡単 にすることです.

@command{ar}コマンド言語の構文は簡単です.

ここに,@command{ar}で使用可能な,または,@command{ar}を対話的に使用して いるときのコマンドがあります.そのうちの3つは特別な意味を持ちます.

OPENまたはCREATE現在のアーカイブ(current archive) を指定し,それはそれ以外のほとんどのコマンドが要求する一時ファイルです.

SAVEは,スクリプトでこれまでに指定された変更をコミットします. SAVEの前のコマンドは,現在のアーカイブの一時的なコピーに対しての み効果があります.

ADDLIB archive
ADDLIB archive (module, module, ... module)
archiveのすべての内容(または,指定されている場合,アーカイブのそれ ぞれの指名されたmodule)を,現在のアーカイブに追加します. OPENCREATEを前もって使用することが要求されます.
ADDMOD member, member, ... member
それぞれの指名されたmemberを,モジュールとして,現在のアーカイブに 追加します. OPENCREATEを前もって使用することが要求されます.
CLEAR
現在のアーカイブの内容を削除し,最後にSAVEされてからのあらゆる処 理の効果を無効にします.現在のアーカイブが指定されていない場合でも実行可 能です(効果はありません).
CREATE archive
アーカイブを作成し,それを現在のアーカイブにします(その他,多くのコマン ドに対し必要です).新しいアーカイブは,一時的な名前で作成されます.それ は,SAVEを使用するまで,archiveとして実際に保存されません. 既存のアーカイブに優先可能です.同様に,指名されている既存の archiveファイルの内容は,SAVEまで破壊されません.
DELETE module, module, ... module
リストアップされているそれぞれのmoduleを,現在のアーカイブから削除 します.`ar -d archive module ... module'と同 じです. OPENCREATEを前もって使用することが要求されます.
DIRECTORY archive (module, ... module)
DIRECTORY archive (module, ... module) outputfile
archiveに存在している指名されたそれぞれmoduleをリストアップ します.別のコマンドVERBOSEで,出力形式を指定します.冗長出力がオ フのとき,出力は`ar -t archive module...'のようにな ります.冗長出力がオンのとき,リストは`ar -tv archive module...'のようになります. 出力は通常,標準出力に流れていきます.しかし,outputfileを最後の引 数として指定した場合,@command{ar}はそのファイルに出力を変更します.
END
@command{ar}を,正しく完了したことを示す終了コード0で終了します. このコマンドは出力ファイルを保存しません.最後のSAVEコマンド以降 に現在のアーカイブを変更した場合.これらの変更は失われます.
EXTRACT module, module, ... module
指名されたそれぞれのmoduleを現在のアーカイブから抽出し,それらを現 在のディレクトリに個別のファイルとして書き出します.`ar -x archive module...'と同じです. OPENCREATEを前もって使用することが要求されます.
LIST
現在のアーカイブのすべての内容を,VERBOSEの状態に関わらず, "verbose"形式で表示します.効果は`ar tv archive'に似ていま す.(この単独コマンドはGNU @command{ar}拡張で,MRI互換に提供されて いるものではありません). OPENCREATEを前もって使用することが要求されます.
OPEN archive
現在のアーカイブとして使用するために,既存のアーカイブを開きます(他の多 くのコマンドに対し必要です).それに続くコマンドの結果からのあらゆる変更 は,次にSAVEが使用されるまで,archiveに対し実際に効果はあり ません.
REPLACE module, module, ... module
現在のアーカイブで,それぞれの(REPLACEの引数で指名された)既存の moduleを,現在のワーキングディレクトリのファイルで置換します.エラー 無くこのコマンドを実行するために,ファイルと現在のアーカイブのモジュール の両方が存在する必要があります. OPENCREATEを前もって使用することが要求されます.
VERBOSE
DIRECTORYからの出力を管理している内部フラグを切り替えます.フラグ がオンのとき,DIRECTORY出力は,`ar -tv '...からの出力に 一致します.
SAVE
現在のアーカイブへの変更をコミットし,それを,最後のCREATEOPENコマンドで指定された名前のファイルに,実際に保存します. OPENCREATEを前もって使用することが要求されます.


Go to the first, previous, next, last section, table of contents.