了解Linux命令:Ar

GNU ar程序创建 ,修改和从档案中提取。 一个档案是一个单独的文件 ,其中包含一个结构中的其他文件的集合,可以检索原始单个文件(称为存档的成员 )。

概观

原始文件的内容,模式(权限),时间戳,所有者和组保存在存档中,并可在提取时恢复。

GNU ar可以维护其成员具有任意长度名称的档案; 然而,取决于系统上如何配置ar ,为了与其他工具维护的存档格式兼容,可能会限制成员名称长度。 如果存在,限制通常为15个字符(与a.out相关的格式的典型值)或16个字符(与coff相关的格式的典型值)。

ar被认为是一个二进制实用程序,因为这种类型的档案最常用作包含常用子程序的

当您指定修饰符时, ar为归档中的可重定位对象模块中定义的符号创建索引。 一旦创建,只要ar对其内容进行更改(保存为q更新操作),该索引就会在归档中更新。 具有这种索引的存档加快了与库的链接,并且允许库中的例程彼此调用而不考虑它们在存档中的位置。

您可以使用nm -snm -print-armap列出此索引表。 如果存档文件缺少表格,则可以使用称为ranlib的另一种形式来添加表格。

GNU ar被设计为与两个不同的设施兼容。 您可以使用命令行选项来控制其活动,例如Unix系统上不同类型的ar ; 或者,如果您指定单个命令行选项-M ,则可以使用通过标准输入提供的脚本(如MRI“图书管理员”程序)来控制它。

概要

ar [ -X32_64 ] [ - ] p [ mod [ relpos ] [ count ]] 存档 [ member ...]

OPTIONS

GNU ar允许您在第一个命令行参数内以任意顺序混合操作代码p和修饰符标记mod

如果你愿意,你可以用破折号开始第一个命令行参数。

p键盘符指定要执行的操作; 它可能是以下任何一种,但您只能指定其中之一:

d

从档案中删除模块。 指定要作为成员删除的模块的名称...; 如果您没有指定要删除的文件,则归档文件将保持不变。

如果您指定了v修饰符,那么ar会在删除每个模块时列出它。

使用此操作可移动档案中的成员。

如果一个符号在多个成员中定义,则归档中成员的顺序可以影响程序如何使用该库进行链接。

如果没有修饰符与“m”一起使用,则您在成员参数中指定的任何成员都将移至存档的末尾 ; 您可以使用abi修饰符将它们移动到指定的位置。

p

将档案的指定成员打印到标准输出文件。 如果指定了v修饰符,则在将其内容复制到标准输出之前显示其成员名称。

如果您不指定成员参数,则打印存档中的所有文件。

q

快速追加 ; 从历史上看,将文件成员 ...添加到归档结尾,而不检查替换。

修饰符abi 不会影响此操作; 新成员始终放在档案末尾。

修饰符v会在每个文件添加后列出ar列表。

由于该操作的速度是速度,因此即使存档已经存在,存档的符号表索引也不会更新; 您可以显式使用ar sranlib来更新符号表索引。

然而,太多不同的系统假设快速追加重建索引,所以GNU ar实现了“q”作为“r”的同义词。

[R

将文件成员 ...插入存档 (带替换 )。 此操作与q不同,因为如果以前存在的成员的名称与添加的成员名称相匹配,则会删除它们。

如果其中一个在member ...中命名的文件不存在, ar会显示一条错误消息,并且不会打扰与该名称匹配的所有存档成员。

默认情况下,新成员添加在文件的末尾; 但是您可以使用修饰符abi之一来请求相对于某个现有成员的放置。

与此操作一起使用的修饰符v为插入的每个文件引出一行输出,以及字母ar之一以指示文件是否被附加(不删除旧成员)或被替换。

Ť

显示列出存档内容或存档中存在的成员 ...中列出文件的内容的表格 。 通常只显示成员名称; 如果您还想查看模式(权限),时间戳,所有者,组和大小,则还可以通过指定v修饰符来请求。

如果您未指定成员 ,则列出存档中的所有文件。

如果档案中有多个同名文件(比如说fie )(比如ba ),则只列出第一个实例; 要看到他们,你必须要求一个完整的清单---在我们的例子中, ar t ba

X

从存档中提取成员(名为成员 )。 您可以对此操作使用v修饰符,以便在提取ar时列出每个名称。

如果您未指定成员 ,则会提取存档中的所有文件。

一些修饰符( mod )可能会紧跟在p关键字后面,以指定操作行为的变化:

一个

在存档的现有成员之后添加新文件。 如果使用修饰符a ,则在归档规范之前,现有归档成员的名称必须作为relpos参数存在。

b

在存档的现有成员之前添加新文件。 如果使用修饰符b ,则在归档规范之前,现有归档成员的名称必须作为relpos参数存在。 (和我一样 )。

C

创建存档。 如果指定的存档不存在,则在您请求更新时始终创建指定的存档 。 但是,除非事先通过使用此修饰符指定您希望创建它,否则会发出警告。

F

截断存档中的名称。 GNU ar通常会允许任意长度的文件名。 这将导致它创建与某些系统上的本机ar程序不兼容的存档。 如果这是一个问题,则可以使用f修饰符在将文件名放入存档时截断文件名。

一世

在存档的现有成员之前插入新文件。 如果使用修饰符i ,则在归档规范之前,现有归档成员的名称必须作为relpos参数出现。 (与b相同)。

这个修饰符被接受但没有被使用。

ñ

使用计数参数。 如果档案中有多个条目具有相同的名称,则使用此名称。 从存档中提取或删除给定名称的实例

Ø

提取成员时保留成员的原始日期。 如果不指定此修饰符,则从存档中提取的文件将标记提取时间。

P

在存档中匹配名称时使用完整路径名称。 GNU ar无法创建具有完整路径名称的存档(此类存档不是POSIX投诉),但其他存档创建者可以。 该选项将使GNU ar使用完整的路径名匹配文件名,当从另一个工具创建的存档中提取单个文件时,这可能很方便。

小号

将对象文件索引写入存档,或者更新现有的索引,即使对存档没有其他更改。 您可以将这个修饰符标志用于任何操作,也可以单独使用。 在存档上运行ars相当于在其上运行ranlib

小号

不要生成归档符号表。 这可以加快建设一个大型图书馆的几个步骤。 生成的存档不能与链接器一起使用。 为了构建符号表,您必须在上次执行ar时忽略S修饰符,或者必须在存档上运行ranlib

ü

通常, ar r ...将列出的所有文件插入到存档中。 如果您只想插入那些比相同名称的现有成员更新的文件,请使用此修饰符。 u修饰符仅适用于r (替换)操作。 特别是,组合曲线是不允许的,因为检查时间戳会失去操作q的速度优势。

v

该修饰符请求操作的详细版本。 当附加修饰符v时,许多操作都会显示其他信息 ,例如已处理的文件名。

V

该修饰符显示ar的版本号。

为了与AIX兼容, ar忽略了拼写为-X32_64的初始选项。 这个选项产生的行为是GNU ar的默认值。 ar不支持任何其他-X选项; 特别是它不支持AIX ar的缺省-X32

重要提示:使用man命令( %man )查看特定计算机上的命令使用方式。