Linux 备份压缩 : ar 命令详解

ar命令用于建立或修改备存文件,或是从备存文件中抽取文件。

ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限。

当我们的程序中有经常使用的模块,而且这些模块在其他程序中也会用到,为了实现代码重用减少软件开发周期,我们可以将它们生成库,在需要的时候直接调用就可以了.

 

ar 命令

    可以用来创建、修改和提取库(档案archives)

命令格式

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

简述

    库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。

 

p关键字指定执行的操作(必须指定其中之一)

d

从库中删除模块。用member指定要删除模块的名称,如果没有指定删除模块的名称,不会对库产生影响。

如果指定 v 修饰符,则ar会列出每个被删除的模块。

m

用这个操作可以在库中移动模块(member)。

如果一个标志(变量?符号)在多个模块中被定义,那么模块在库中的顺序将会对程序链接成库产生不同的影响。

如果没有修饰符和m一起使用,那么任何指定的模块都将移动到库的最后。你可以使用 a ,b 或者 i 修饰符将模块移动到规定的位置。

p

显示指定的模块到标准输出。如果指定 v 修饰符,则将在显示内容之前显示模块名。

如果你没有指定任何模块的话,它将输出库中所有的内容。

q

快速追加。增加新模块到库的结尾处。并不检查是否需要替换。a,b 或i修饰符对此操作没有影响,模块总是追加的库的结尾。如果使用了修饰符v则列出每个模块。 这时,库的符号表没有更新,可以用 ar s或ranlib来更新库的符号表索引。

r

在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息并离开,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用a b i修饰符来请求放置在一些已经存在的模块的相对位置

若使用v 修饰符,我们是为了在每个文件被插入时得到这样一行输出(连带着字母 a 或者 r 来表明文件是被附加还是取代)

t

显示库的模块表清单。一般只显示模块名。如果你想看到the modes (permissions), timestamp, owner, group, and size,那么你可以指定修饰符 v 。

如果你不指定一个模块,档案中的所有文件都会被列出。

如果有多个文件在库中具有相同的名字,默认显示第一个,如果要显示全部则需要请求一个完整的目录

x

从库中提取一个模块。如果不指定要提取的模块,则提取库中所有的模块

可以结合v修饰符来列出每一个被提取的模块。

 

[ mod ] 修饰符可能会跟在p关键字的后面,用来指定操作的行为变化

a

在库的一个已经存在的模块后面增加一个新的文件。如果使用修饰符a,则应该为命令行中relpos参数指定一个已经存在的模块名。

b

在库的一个已经存在的模块前面增加一个新的文件。如果使用修饰符b,则应该为命令行中relpos参数指定一个已经存在的模块名。

c

创建一个库。不管库是否存在,都将创建。

D

在确定性的模式中起作用?

f

在库中截短指定的名字。缺省情况下,文件名的长度是不受限制的,可以使用此参数将文件名截短,以保证与其它系统的兼容。

i

在库的一个已经存在的模块前面增加新的文件。如果使用修饰符i,则应该为命令行中relpos参数指定一个已经存在的模块名。

l

暂未使用

N

与count参数一起使用,在库中有多个相同的文件名时指定提取或输出的个数。

o

当提取成员时,保留成员的原始数据。如果不指定该任选项,则提取出的模块的时间将标为提取出的时间。

P

进行文件名匹配时使用全路径名。ar在创建库时不能使用全路径名(这样的库文件不符合POSIX标准),但是有些工具可以。这个选项将导致GNU ar匹配文件名使用完整的路径名,可以使用其他工具方便的从存档中提取一个文件。

s

写入一个目标文件索引到库中,或者更新一个存在的目标文件索引。甚至对于没有任何变化的库也作该动作。对一个库做ar s等同于对该库做ranlib。

S

不创建目标文件索引,这在创建较大的库时能加快时间

T

 

u

一般说来,命令ar r...插入所有列出的文件到库中,如果你只想插入列出文件中那些比库中同名文件新的文件,就可以使用该任选项。该任选项只用于r操作选项

v

这个修饰符显示一个操作的详细、额外的信息

V

显示ar的版本

 

ar忽略了最开始的选项-X32_64,是为了和AIX兼容。

实例

打包文件

[root@w3cschool.cc ~]# ls   //显示当前目录文件   
a.c    b.c d.c   install.log      qte
anaconda-ks.cfg c.c Desktop 

[root@w3cschool.cc ~]# ar rv one.bak a.c b.c //打包 a.c b.c文件 
ar: 正在创建 one.bak
a - a.c
a - b.c
[root@w3cschool.cc ~]# 

打包多个文件

[root@w3cschool.cc ~]# ar rv two.bak *.c  //打包以.c结尾的文件  
ar: 正在创建 two.bak
a - a.c
a - b.c
a - c.c
a - d.c
[root@w3cschool.cc ~]# 

显示打包文件的内容

[root@w3cschool.cc ~]# ar t two.bak    
a.c
b.c
c.c
d.c
[root@w3cschool.cc ~]# 

删除打包文件的成员文件

[root@w3cschool.cc ~]# ar d two.bak a.c b.c c.c  
[root@w3cschool.cc ~]# ar t two.bak       
d.c

 

ar命令, 也就是archive, 也是归档。 其实, 对目标文件.o进行归档, 就形成了静态库.a文件。实际上, ar命令可以对一个或者多个目标文件.o进行归档, 形成一个静态库.a文件。 可见, 静态库还是很简单的,无非就是众多目标文件的集合。

1. 要创建一个库,请输入:

    ar -v -q lib.a strlen.o strcpy.o

    如果 lib.a 库不存在,则此命令创建它,并将文件 strlen.o 和 strcpy.o 的副本输入其中。如果 lib.a 库存在,则此命令在不检查相同成员的情况下,将新的成员添加到末尾。v 标志设置详细方式,在此方式中 ar 命令在其进行时显示进程报告。

2. 要显示库的目录,请输入:

      ar -v -t lib.a

      此命令列出了 lib.a 库的目录,显示类似于 ls -l 命令的输出的长列表。要只列出成员文件名称,则省略 -v 标志。

3. 要替换或添加新成员到库中,请输入:

      ar -v -r lib.a strlen.o strcat.o

      此命令替换成员 strlen.o 和 strcat.o。如果 lib.a 如示例 1 中显示的那样创建,则替换 strlen.o 成员。因为不存在名为 strcat.o 的成员,所以它被添加到库的末尾。

4. 要指定在何处插入新成员,请输入:

      ar -v -r -b strlen.o lib.a strcmp.o

      此命令添加 strcmp.o 文件,并将该新成员置于 strlen.o 成员之前。

5. 要更新一个已经更改过的成员,请输入:

      ar -v -r -u lib.a strcpy.o

      此命令替换现有 strcpy.o 成员,但仅当文件 strcpy.o 自从最后一次添加到库后已经修改时才替换它。

6. 要更改库成员的顺序,请输入:

      ar -v -m -a strcmp.o lib.a strcat.o strcpy.o

      此命令将成员 strcat.o 和 strcpy.o 移动到紧跟在 strcmp.o 成员之后的位置。保留 strcat.o 和 strcpy.o 成员的相对顺序。换句话说,如果在移动之前 strcpy.o 成员在 strcat.o 成员之前,那么(移动后)它依旧如此。

7. 要解压缩库成员,请输入:

      ar -v -x lib.a strcat.o strcpy.o

      此命令将成员 strcat.o 和 strcpy.o 分别复制到名为 strcat.o 和 strcpy.o 的文件。

8. 要解压缩并重命名一个成员,请输入:

      ar -p lib.a strcpy.o >stringcopy.o

      此命令将成员 strcpy.o 复制到一个名为 stringcopy.o 的文件。

9. 要删除一个成员,请输入:

      ar -v -d lib.a strlen.o

      此命令从 lib.a 库中删除成员 strlen.o。

10. 要从多个用 ld 命令创建的共享模块中创建一个压缩文档库,请输入:

      ar -r -v libshr.a shrsub.o shrsub2.o shrsub3.o ...

      此命令从名为 shrsub.o、shrsub2.o、shrsub3.o 等等的共享模块中创建名为 libshr.a 的压缩文档库。要编译并链接使用 libshr.a 压缩文档库的 main 程序,请使用以下命令:

      cc -o main main.c -L/u/sharedlib -lshr

      main 程序现在是可执行的。main 程序引用的任何符号(包含在libshr.a 压缩文档库中)已经因延迟分辨率而作了标记。-l 标志指定应在 libshr.a 库中搜索这些符号。

11. 要列出 lib.a 的内容(忽略任何 32 位目标文件),请输入:

      ar -X64 -t -v lib.a

12. 要从 lib.a 解压缩所有 32 位的目标文件,请输入:

      ar -X32 -x lib.a

13. 要列出 lib.a 中的所有文件,无论是 32 位、64 位或非对象,请输入:

      ar -X32_64 -t -v lib.a

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HarkerYX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值