ar

创建、修改及抽取档案文件


语法格式

ar [-]d [[-]NvV] [count] archive members
ar [-]m [[-]abivV] [posname] archive members
ar [-]p [[-]svV] archive [members]
ar [-]q [[-]abcDfiSvV] [posname] archive members
ar [-]r [[-]abcDfiSuvV] [posname] archive members
ar [-]t [[-]svV] archive [members]
ar [-]x [[-]NosvV] [count] archive [members]

命令简介

ar命令用于创建、修改和抽取档案文件。档案文件是一个单一的文件,其中按一定的组织结构,存有一组文件,使得用户能够容易地获取其中的任何成员文件或模块(称作档案文件的成员文件或成员模块)。

其中,archive是档案文件,members是一个或一组成员文件或成员模块,posname是成员文件在档案文件中的名字,用作相对位置。

在档案文件中,成员文件的数据内容、访问权限、时间属性、用户组与用户组等属性均得以保持,在抽取文件时可以恢复原状。

ar档案文件主要由二进制目标文件组成,因为其中存储的文件大多是一些共享模块,经常用作库函数。

当指定了“-s”辅助选项时,ar将会对档案文件中可重定位的目标模块内定义的标识符建立索引表。一旦创建,无论何时改动档案文件,都会更新索引表。档案文件中的索引表能够加速库函数的连接,而不管调用的函数位于档案文件的何处。

利用“nm -s”命令,可以查询档案文件中的索引表。如果档案文件中没有索引表,则可以使用“ar -s”命令创建档案文件的索引表。

在ar命令中,“-d”、“-m”、“-p”、“-q”、“-r”、“-t”和“-x”是7个关键选项,分别表示一种主要的处理动作。在使用ar命令时,必须指定其中的一个选项,然后酌情选择其他辅助选项。

此外,ar还提供“-a”、“-b”和“c”等12个辅助选项,用以影响关键选项的处理动作。

至于关键选项与辅助选项如何组合使用及相互配合,详见语法格式与具体选项的说明。

注意,指定ar命令选项时通常不加连字符“-”,但使用连字符也是可接受的。为保持本手册选项介绍的一致性,这里统一采用加连字符的常规形式。

命令选项(关键选项)

-d  从档案文件中删除指定的成员模块。如果未指定成员模块文件名,ar不会删除任何成员模块。如果同时指定了“-v”辅助选项,ar将会列出删除的每一个成员模块。

-m  移动档案文件中的成员文件。如果一个标识符在多个成员文件中都有定义,在连接档案文件中的库函数时,成员文件在档案文件中的位置顺序是非常重要的。如果指定“-m”选项时没有指定其他辅助选项,命令行成员参数指定的任何成员文件都会移至档案文件的后面。必要时可以使用“-a”、“-b”或“-i”辅助选项,把指定的成员文件移至指定的适当位置。

-p  显示档案文件中的指定成员文件或模块。如果同时指定了“-v”辅助选项,在显示其数据内容之前,首先显示成员文件或模块的名字。如果未指定members参数,则显示档案文件中所有文件的数据内容。

-q  快速追加模式。在增加成员文件时,“-q”选项总是把指定的成员文件直接追加到档案文件的后面,不删除,也不替换现有的同名成员文件。但可以使用“-a”、“-b”或“-i”辅助选项,指定相对于现有成员文件的插入位置。最后,更新档案文件中的标识符索引表。如果同时指定了“-v”辅助选项,ar将会依次显示追加的每个成员文件的名字。

-r  增加或替换模式。把指定的成员文件写入档案文件,或替换档案文件中已存在的同名成员文件。与“-q”选项不同的是,如果档案文件中存在同名的成员文件,“-r”选项总是会在原位置替换现有的成员文件,从而删除同名的成员文件,不管指定的文件是否比原文件还新,除非指定了“-u”辅助选项。如果档案文件中不存在同名的成员文件,指定的成员文件通常总是追加在档案文件的后面,但可以使用“-a”、“-b”或“-i”辅助选项,指定相对于现有成员文件的插入位置。如果指定了“-v”辅助选项,ar将会在插入每个成员文件时依次显示其名字,同时在前面给出一个“a”或“r”字符标志,分别表示指定的成员文件是追加(档案文件中不存在同名的成员文件)还是替换(取代现有的同名成员文件)。

-t  显示档案文件中的成员文件列表,或显示members参数指定的且档案文件中也存在的成员文件。通常,“-t”选项仅显示成员文件的名字,如果还要显示访问权限、最近访问时间、文件属主、用户组和文件大小等属性,可以增加一个“-v”辅助选项。如果未指定成员文件,显示档案文件中的所有成员文件列表。当档案文件中存在多个同名的成员文件时,如果指定了成员文件名,仅显示第一个出现的成员文件,若想显示出所有的成员文件,一定不要指定成员文件名(仅指定档案文件名即可)。

-x  从档案文件中抽取全部或指定的成员文件。如果同时指定了“-v”辅助选项,ar将会显示抽取的文件名。如果未指定欲抽取的成员文件名,意味着抽取档案文件中的所有成员文件。

命令选项(辅助选项)

-a  在档案文件中的现有成员文件之后插入新的成员文件。在使用“-a”辅助选项时,必须在档案文件参数之前,使用posname参数指定现有成员文件的名字。

-b, -i  在档案文件中的现有成员文件之前插入新的成员文件。使用“-b”或“-i”选项时,必须在档案文件参数之前,使用posname参数指定现有成员文件的名字。注意,“-b”与“-i”选项的功能完全相同。

-c  在创建档案文件时禁止输出警告信息。在使用“-q”或“-r”关键选项更新档案文件时,如果指定的档案文件不存在,ar命令总是创建指定的档案文件,但会输出一个警告信息。除非同时指定了“-c”辅助选项,表示期望创建新的档案文件时,ar才不会输出任何信息。

-D  统一操作模式。在增加或替换成员文件时,档案文件的索引表总是使用0作为用户ID和用户组ID,使用统一的时间(1970年1月1日08:00)设置成员文件的时间属性。

-f  截短档案文件中成员文件的名字。GNU ar通常不限制成员文件名字的长度,这将导致创建的档案文件与其他系统使用的ar档案文件可能存在兼容性问题。如果期望创建的档案文件能够在其他系统中使用,可以使用“-f”辅助选项,在创建档案文件时截短成员文件的名字。

-N  如果档案文件中存在多个同名的成员文件或模块,在抽取或删除成员文件或模块时,可能需要使用“-N”辅助选项指定count参数,说明抽取或删除多少个同名的成员文件或模块。

-o  从档案文件抽取成员文件时,保持文件固有的时间属性。如果未指定这个辅助选项,从档案文件中抽取的成员文件将会重置时间属性为抽取时的时间。

-s  在档案文件中增加一个目标文件标识符索引表或更新现有的索引表,即使没有增删或替换档案文件的任何成员文件。注意,这个辅助选项比较特殊,可以单独使用,也可与其他关键选项一起使用。

-S  禁止生成档案文件的标识符索引表。这个选项能够加速创建大型档案文件,但会导致连接程序无法使用档案文件。如果想要创建标识符索引表,必须在最后一次使用ar命令创建档案文件时禁用“-s”辅助选项,或单独运行一次“ar -s”命令。

-u  通常,“ar -r”命令只是把指定的成员文件直接插入档案文件。如果仅当指定成员文件中比档案文件中同名的现有成员文件还新时才插入档案文件,可以使用“-u”辅助选项。注意,“-u”辅助选项仅适用于“-r”关键选项。尤其不允许与“-q”关键选项组合使用,因为时间检测会降低“-q”关键选项的速度优势。

-v  详细显示模式。用于显示命令的处理过程与附加信息,如处理的文件名和文件的属性信息等。

-V  显示ar命令的版本信息,然后退出。

@file  从指定的文件中读取命令行选项。把读取的选项插入@file的位置,取而代之。选项的写法如同命令行,多个选项之间需加空格分隔符。文件中也可以包括@file选项,采用同样的方法进行递归处理。

应用实例

1. 快速创建一个档案文件。

$ ar -qc newar *.o
$

2. 在指定的位置插入新的成员文件,替换现有的同名成员文件。

$ ar -tv newar
rw-r--r-- 500/500  10212 Mar 27 23:22 2012 calc.o
rw-r--r-- 500/500   2180 Mar 27 20:46 2012 cymo.o
rw-r--r-- 500/500   2916 Mar 27 20:46 2012 geom.o
$ touch calc.o
$ ls -l calc.o
-rw-r--r--. 1 gqxing gqxing 10212 Mar 27 23:24 calc.o
$ ar -rbcuv calc.o newar *.o ../mf
r - calc.o
a - ../mf
$ ar -tv newar
rwxr-xr-x 500/500  37897 Mar 27 21:46 2012 mf
rw-r--r-- 500/500  10212 Mar 27 23:22 2012 calc.o
rw-r--r-- 500/500   2180 Mar 27 20:46 2012 cymo.o
rw-r--r-- 500/500   2916 Mar 27 20:46 2012 geom.o
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z