Linux命令——ar tarball (tar archive)

转自:linux ar命令 

参考:Archive Definition

在介绍ar命令之前,先说一个术语archive file

archive file

参考:tarball (tar archive)

archive file,归档文件。他的行为很像Windows下面我们使用WinRAR将多个文件压缩成一个文件后的文件。但是又稍许区别。

archive file本是单个儿文件,他由任意数量的单个文件 + 解压缩文件提取信息组成(这里并不是压缩、解压的关系。压缩是compress,对应是解压缩decompress 。归档是archive。对应是提取extract)。文件提取信息可以被一个或多个提取程序(extraction program)读取,以便从archive file还原出原始文件。archive包含的那些文件称为archive的member。member的内容。权限,时间戳,属组,属主等信息也保存在archive中。

Archives便于存储文件。例如。从archives中可以轻松找到特定类别中的所有文件 或 与特定项目相关的文件。archives还维护最初包含文件的目录树结构(即,目录的层次结构)。

Archives便于传输数据和分发程序。事实上,大多数通过Internet分发的软件都是作为包含所有相关文件和文档的archive分发的。

此外,archives非常容易使用,通常比处理大量单个文件容易得多。例如,压缩(compress) archive 以减小其大小 和 传输时间,然后在接收后解压缩(decompress )是一件简单的事情。此外,还可以将单个文件读取,提取或插入到archive中,而无需先将archive的所有内容恢复为其原始格式。此外,大型archives可以很容易地分成若干段,用于发送电子邮件附件 或 存储在软盘上,即使它们已被压缩,以后可以在不损害数据完整性的情况下重新组装。

最初为磁带备份设计的tar(tape archive)命令广泛用在类Unix操作系统上归档(archive)和取消归档(unarchive)文件和目录。其他几个常用命令也可用于创建archives,包括bzip2,zip,cpio甚至简单的cp命令。其中一些程序(如bzip2和zip)将归档(archive)与压缩(compress)相结合。 tar没有,但使用压缩程序(compression utilities)很容易压缩(compress)使用tar创建的archive。

tar

功能

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

man手册英文解释

The GNU ar program creates, modifies, and extracts from archives.  An archive is a single file holding a collection of other files in a structure that makes it possible to retrieve the original individual files (called members of the archive).

The original files' contents, mode (permissions), timestamp, owner, and group are preserved in the archive, and can be restored on extraction.
View Code

到底这个archive、archives怎么翻译,我看别人都是翻译成库,但是感觉是不太准确,有没有更好的解释。姑且按照库理解

用法

ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...

例如我们可以用ar rv libtest.a hello.o hello1.o来生成一个库,库名字是test,链接时可以用-ltest链接。该库中存放了两个模块hello.o和hello1.o。选项前可以有‘-'字符,也可以没有。下面我们来看看命令的操作选项和任选项。现在我们把{dmpqrtx}部分称为操作选项,而[abcfilNoPsSuvV]部分称为任选项。{dmpqrtx}中的操作选项在命令中只能并且必须使用其中一个。

选项

操作选项

d:从库中删除模块。按模块原来的文件名指定要删除的模块。如果使用了任选项v则列出被删除的每个模块。

m:该操作是在一个库中移动成员。当库中如果有若干模块有相同的符号定义(如函数定义),则成员的位置顺序很重要。如果没有指定任选项,任何指定的成员将移到库的最后。也可以使用'a','b',或'i'任选项移动到指定的位置。

p:显示库中指定的成员到标准输出。如果指定任选项v,则在输出成员的内容前,将显示成员的名字。如果没有指定成员的名字,所有库中的文件将显示出来。

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

r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。

t:显示库的模块表清单。一般只显示模块名。

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

任意选项

a:在库的一个已经存在的成员后面增加一个新的文件。如果使用任选项a,则应该为命令行中membername参数指定一个已经存在的成员名。

b:在库的一个已经存在的成员前面增加一个新的文件。如果使用任选项b,则应该为命令行中membername参数指定一个已经存在的成员名。

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

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

i:在库的一个已经存在的成员前面增加一个新的文件。如果使用任选项i,则应该为命令行中membername参数指定一个已经存在的成员名(类似任选项b)。

l:暂未使用

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

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

P:进行文件名匹配时使用全路径名。ar在创建库时不能使用全路径名(这样的库文件不符合POSIX标准),但是有些工具可以。

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

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

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

v:该选项用来显示执行操作选项的附加信息。

V:显示ar的版本。

猜你喜欢

转载自www.cnblogs.com/kelamoyujuzhen/p/9807772.html
今日推荐