ar

ar指令可以创建、修改库,也可以从库中提取单个模块。库是一个单独的文件,里面包含了按照特定结构组织起来的其他文件,我们称作member。归档文件通常是一个二进制文件,我们一般将归档文件当作库来使用。原始文件的内容、模式(权限)、时间戳、所有者和组保存在存档中,并可在提取时恢复。

GNU ar可以维护其成员具有任意长度的名称的档案;但是,根据您的系统上对ar的配置方式,可以对成员名长度进行限制,以便与其他工具维护的存档格式兼容。如果存在,限制通常是15个字符(典型的与a.out相关的格式)或16个字符(典型的与coff相关的格式)。

当您指定修饰符的时候,ar会为存档中可重定位的对象模块中定义的符号创建一个索引。创建之后,每当ar对其内容进行更改时,这个索引就会在存档中更新(除了Q更新操作外)。具有这样一个索引的归档可以加速链接到库,并允许库中的例程相互调用,而不考虑它们在存档中的位置。您可以使用“nm -s”或“nm --print-armap”列出此索引表。如果存档缺少表,则可以使用另一种称为ranlib的ar形式来添加表。

GNU ar可以随意创建一个瘦存档,其中包含一个符号索引和对档案成员文件的原始副本的引用。这样的存档对于构建用于本地构建的库非常有用,因为在本地构建中,可重新定位的对象将保持可用,而复制每个对象的内容只会浪费时间和空间。薄档案也是扁平的,因此将一个或多个档案添加到一个瘦归档中将单独添加嵌套归档的元素。存档元素的路径是相对于归档本身存储的。

GNU Ar被设计成与两个不同的设施兼容。您可以使用命令行选项来控制它的活动,比如Unix系统上的不同类型的ar;或者,如果您指定了单一命令行选项-M,您可以使用标准输入提供的脚本来控制它,比如MRI "librarian"程序。

此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。

1、语法

     ar  [--plugin name]   [-X32_64]  [-]p[mod [relpos]  [count]]   archive   [member...]

 

2、选项列表

GNU ar允许您在第一个命令行参数中按任意顺序混合操作代码p和修饰符标志mod。如果您愿意,可以用“-”开始第一个命令行参数。p键字母指定要执行的操作;它可能是以下任一操作,但您必须仅指定其中一个操作

操作代码

说明

c

创建归档文件

d

删除归档中的成员文件,将要删除的模块的名称指定为member。如果没有指定要删除的文件,则存档将保持不变

m

改变成员文件在归档中的顺序 。如果在多个成员中定义了一个符号,则存档中成员的排序会改变程序使用库链接的方式。如果在“m”中没有使用修饰符,那么在成员参数中命名的任何成员都会移动到归档文件的末尾;您可以使用a、b或i修饰符将它们移动到指定的位置。

p

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

q

将文件附加在归档文件的最后。修饰符a、b和i不影响此操作;新成员总是放在归档的末尾。修饰符v在追加时使每个文件都有ar列表。因为这个操作的重点是速度,所以存档的符号表索引不会更新,即使它已经存在;您可以显式地使用ar或ranlib来更新符号表索引。但是,有太多不同的系统假设快速追加索引,因此GNU ar实现了q作为r的同义词。

r

将文件‘member’插入到归档文件,如果归档中存在要插入的文件,那么就覆盖。此操作与q的不同之处在于,如果现有成员的名称与要添加的成员匹配,则删除它们。如果成员中不存在‘member’,ar显示错误消息,并保持与该名称匹配的任何现有存档成员不受干扰。默认情况下,在文件末尾添加新成员;但您可以使用其中一个修饰符a、b或i请求相对于现有成员的位置。与此操作一起使用的修饰符v将引发插入的每个文件的一行输出。字母a或r,以指示文件是否被追加(没有删除旧成员)或被替换。

t

显示归档文件包含的文件列表。通常只显示成员名称;如果还希望查看模式(权限)、时间戳、所有者、组和大小,则还可以通过指定v修饰符来请求。如果未指定成员,则将列出存档中的所有文件。如果一个存档中有多个同名文件,只列出第一个实例;要查看它们,您必须要求一个完整的列表。

x

从归档文件中提取成员文件,您可以在此操作中使用v修饰符,在提取时请求ar列出每个名称。如果不指定成员,则提取存档中的所有文件。无法从瘦存档中提取文件。

许多修饰符(Mod)可以紧跟p键,以指定操作行为的变化

修饰符

说明

a

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

b

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

c

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

D

在确定性模式下操作。当添加文件和存档索引时,对UID、GID、时间戳使用零,并对所有文件使用一致的文件模式。当使用此选项时,如果ar与相同的选项和相同的输入文件一起使用,则多次运行将创建相同的输出文件,而不管输入文件的所有者、组、文件模式或修改时间。

f

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

i

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

l

没有用的修饰符

N

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

o

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

P

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

s

将对象文件索引写入存档,或更新现有的索引,即使没有对归档进行其他更改。您可以在任何操作中使用此修饰符标志,也可以单独使用。在存档上运行ar等于在它上运行ranlib。

S

不要生成存档符号表。这可以加快构建一个大型库的几个步骤。结果存档不能与链接器一起使用。为了构建符号表,必须在ar的最后一次执行时省略S修饰符,或者必须在归档文件上运行ranlib。

T

将指定的归档文件设置为瘦存档。如果它已经存在并且是一个常规存档,则现有成员必须与存档目录相同。

u

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

v

显示详细执行过程

V

显示ar的版本

AR忽略初始选项-x32_64,以便与AIX兼容。此选项产生的行为是GNU ar的默认行为。ar不支持任何其他-X选项;特别是,它不支持-x32,这是AIX ar的默认设置。

可选的命令行开关“--plugin name”使ar加载名为name的插件,这增加了对更多文件格式的支持。只有在工具链已启用插件支持的情况下,此选项才可用。

@file选项,从文件中读取命令行选项。已读取的选项被插入以代替原始的@file选项。如果文件不存在或无法读取,则将按字面处理该选项,而不删除该选项。file中的选项用空格分隔。可以在选项中包含空格字符,方法是将整个选项包围在单引号或双引号中。任何字符(包括反斜杠)都可以通过前缀所包含的字符来包括在反斜杠中。file本身可能包含额外的@file选项;任何此类选项都将被递归处理。

3、实例

1)创建归档文件

[root@localhost weijie]# ar -rc mlib.a 1.c 2.c           //创建归档

[root@localhost weijie]# ls

11.c  1.c  1.c~  2.c  3.c 4.c  4.c~  5.c  6.c  mlib.a

[root@localhost weijie]# ar -t mlib.a                      //查看归档的文件列表

1.c

2.c

2)在归档中插入文件

[root@localhost weijie]#ar -rc mlib.a 3.c              //插入3.c,此时归档中还没有3.c

[root@localhost weijie]#ar -t mlib.a                   //查看文件列表,3.c被加入

1.c

2.c

3.c

[root@localhost weijie]# ar -rc mlib.a 1.c            //插入1.c,注意此时1.c已经存在了

[root@localhost weijie]# ar -t mlib.a                  //查看文件列表,1.c已经被覆盖了

1.c

2.c

3.c 

3)在归档的最后插入文件

[root@localhost weijie]# ar -q mlib.a 1.c             //是用选项q来追加到最后,注意这个和r是不一样的

[root@localhost weijie]# ar -t mlib.a                  //查看文件列表,新增加了1.c

1.c

2.c

3.c

1.c

4)从归档中删除文件

[root@localhost weijie]# ar -d mlib.a 1.c             //删除1.c

[root@localhost weijie]# ar -t mlib.a                  //查看文件列表,第一个1.c已经删除,但是最后还有一个

2.c

3.c

1.c

[root@localhost weijie]# ar -d mlib.a 1.c             //再次删除1C

[root@localhost weijie]# ar -t mlib.a                  //查看文件列表,1.c已经被删除

2.c

3.c

Linux基础命令---ar相关推荐

  1. linux复制后权限变化,学霸Linux基础命令吐血总结,给你当新华字典用

    Linux基础命令学习笔记 一.登录Linux [root@linux~]# root:目前使用者账户 @之后接的内容:主机名称 root为管理员账户 #:提示字元(对于root账户) $:提示字元( ...

  2. 干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾!

    阿里云   干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾! 1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file # 创建空白文件 ...

  3. linux基础命令(五)

    linux基础命令(五) 1.文件管理 cat chattr chgrp chmod chown cksum cmp diff diffstat file find git gitview inden ...

  4. linux基础命令行操作【1】

    目录 1.基本命令 2.文件相关知识 3.文本相关操作 4.文件解压.压缩.打包命令 1.基本命令 Ctrl+A/t+Fn+F6:管理Linux(Fn+数字) Linux:输入密码是不显示 Alt+F ...

  5. linux怎么取消文件隐藏命令,Linux基础命令:显示隐藏的文件

    Linux基础命令:显示隐藏的文件 来源:互联网 作者:佚名 时间:2013-04-10 13:32 系统中一些文件,和Windows中的系统文件一样,这些文件一般是不显示出来的,那么我们可以使用-a ...

  6. Linux 基础命令上

    Linux 基础命令上 磁盘分区: /dev/hda5 dev 是硬件设备文件所在的目录 hd 表示IDE设备 sd 表示SCSI设备 a 硬盘的顺序号,以a.b.c...表示 5 分区的顺序号,以1 ...

  7. linux下kill指令默认信号,Linux基础命令之kill命令

    相信大家在使用Linux的过程中都会遇到过某个程序出错导致系统锁死的情况,按照常规的思维我们会通过重启来重新启动系统.然而事实上在Linux中并不需要进行重启就能够完成出错程序的关闭操作.在Linux ...

  8. linux修改密码最短生存时间,Linux基础命令---修改用户密码

    passwd 更改用户密码,超级用户可以修改所有用户密码,普通用户只能修改自己的密码.这个任务是通过调用LinuxPAM和LibuserAPI来完成的.本质上,它使用LinuxPAM将自己初始化为一个 ...

  9. Linux 基础命令讲解--加密解密

    Linux 基础命令讲解--加密解密 加密文件: 1.MD5 echo -n "string" | openssl md5   #加密字符串 openssl md5 -in tes ...

最新文章

  1. 使用.NET Core快速开发一个较正规的命令行应用程序
  2. Could not write JSON: Infinite recursion (StackOverflowError);
  3. Confluence 6 升级完成后的检查
  4. Sublime Text 3 配置和使用方法
  5. 2019全球程序员薪酬报告:软件开发比机器学习抢手!40岁后收入下滑
  6. linux压缩命令gzip_Linux gzip命令示例
  7. linux 22 口令自动传马,近期用到的linux命令
  8. form提交xml文件
  9. 为什么密度泛函理论 (DFT) 会低估带隙?
  10. 高中计算机期末工作总结,高中信息技术期末教学工作总结
  11. 笔记本如何正确安装对应显卡驱动
  12. 利用Python的sympy包求解一元三次方程
  13. ENSP未找到base device,是否立即注册
  14. 获取百度关键词联想API
  15. “正话反说”:A和B在玩一个游戏,两人轮流说一句话,这句话正读反读都一样,如adgda,谁先说错,谁出局,另一个人胜出。编写一个函数用于判断这句话是否符合要求,符合要求时,函数返回1,否则函数返回0
  16. 【windows 壁纸】
  17. mysql 中 一个汉字吗_MySQL 中一个汉字占多少存储?
  18. Vue页面与页面之间的传值(router.push()编程式导航)
  19. 获得当前窗口的hwnd的方法整理
  20. 深圳Python培训学习:Python3 简介--[千锋]

热门文章

  1. 校园网显示认证服务器暂不可用请稍后重试,[问题]校园网认证成功却不能上网?...
  2. 业余草总结常见计算广告点击率预估算法
  3. 防护IOS APP安全的几种方式
  4. 注册表真的有必要清理吗
  5. motionFX ST意法半导体X-MEMS运动融合库
  6. word2vec的简单示例
  7. 安卓系统入门_阉割版安卓系统发布 旧手机能够远离系统卡顿吗?
  8. Access报表如何实现连续打印?
  9. python 向量二范数_向量的范数| 使用Python的线性代数
  10. HTML+CSS 五种布局方式