1 | ar
|
2 | ===
|
3 |
|
4 | 建立或修改备存文件,或是从备存文件中抽取文件
|
5 |
|
6 | ## 补充说明
|
7 |
|
8 | **ar命令** 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限
|
9 |
|
10 | ### 语法
|
11 |
|
12 | ```shell
|
13 | ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...
|
14 | Usage: ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
|
15 | ar -M [<mri-脚本]
|
16 | ```
|
17 |
|
18 | ### 选项
|
19 |
|
20 | ```shell
|
21 | ar 允许你 在第一个 命令行 参数中 以任意 顺序 混合 指定 操作码p 和修饰符mod .
|
22 |
|
23 | 只要你 愿意, 也可以 用破折号 作为 命令行 第一个 参数的 开始.
|
24 |
|
25 | p 关键字 指明 要执行的 操作, 只能 指明为 如下 之一:
|
26 |
|
27 | d 从档案中删除 模块. 通过files 指明 要删除的 模块的 名称; 如果 没有 指出 要删除的 文件 名称, 档案不会 改变 任何
|
28 | 内容.
|
29 |
|
30 | 如果 给出了'v' 修饰符,ar 会例出 它删除的 每一个 模块.
|
31 |
|
32 | m 用此 操作 在档案中移动 成员.
|
33 | 如果 某个 符号名 在档案的 多个 成员中 有定义, 那么 程序 怎样 连接 档案 文件 得到的 结果 可能是 不同的.
|
34 | 如果 没有为m 指定 修饰符, 由files 指出的 成员 将移动到 档案的末尾 ; 可以 通过 `a', `b' 或 `i' 等修饰符, 指定 成员
|
35 | 移动的 具体 位置.
|
36 |
|
37 | p 在标准 输出上 打印 档案中 指定的 成员. 如果 给出了`v' 修饰符, 在 打印 成员 内容 之前, 先打印 成员的 名字.
|
38 | 如果没有 指明files 参数, 档案中 所有的 成员 都会被 打印 出来.
|
39 |
|
40 | q 快速 追加; 增加 files 到 archive 的末尾, 不进行 替换 检查.
|
41 | 修饰符 `a' `b' 和 `i'不 影响此 操作, 新成员 始终 追加到 档案的 末尾处.
|
42 | 修饰符 `v' 可以使 ar 列出 它追加的 所有文件.
|
43 | 由于 本功能 是用于 快速操作, 即使 档案中 有 符号表 索引 也不 进行 更新; 可以 使用 `ar s' 或 ranlib 明确 要求 更新
|
44 | 这些索引.
|
45 |
|
46 | 在为快速 追加 重建 索引时,由于 有 太多 不同的 系统, 所以 GNU ar 采用 `q' 作为 `r'的一个 同义字.
|
47 |
|
48 | r 把文件 files 插入 archive ( 替换 ). 本操作与 `q' 是不同的, 如果 档案中 已有的 某个 成员与 插入 文件的 名称 相同,
|
49 | 此成员 将被删除.
|
50 | 如果 不存在 名称为 files 的文件, ar 显示 一个 错误 消息, 并且 保留 档案中 已有的 同名 成员.
|
51 | 缺省情况下, 新成员 增加到 挡案的 末尾; 可以 通过 使用 `a' `b' 或 `i' 等修饰符 指定 相对于 已有 成员的 位置.
|
52 | 通过 使用 `v' 修饰符 会为每个 插入的 文件 产生 一行 输出, 根据 输出中的 字符 `a' 或 `r' 可以 表明 该文件 是追加的
|
53 | (没有 删除 以前的成员) 还是 替换的.
|
54 |
|
55 | t 显示 一个 archive 档案 所包含 内容的 列表 , 或 档案中的 由 files 指出的 文件 列表. 通常 只显示 成员的 名称, 如果
|
56 | 使用 `v' 修饰符, 可以 得到 成员的 权限, 时间属性, 属主, 组和 大小.
|
57 |
|
58 | 如果 没有 指出 files, 档案中的 所有 文件 都会 列出.
|
59 |
|
60 | 如果 档案中 (称为 `b.a') 有多个 同名 成员 (称为 `fie'), `ar t b.a fie' 仅仅 列出 第一个; 要看到 它们的 全部, 必须
|
61 | 要求 完整的 列表 —在本例中是 `ar t b.a'.
|
62 |
|
63 | x 从档案中 抽取 成员 (名称为 files) . 如果 使用 `v' 修饰符, ar 会列出 它抽取的 每一个 文件的 名字.
|
64 | 如果没有给出 files, 抽取 档案中 所有的 文件.
|
65 |
|
66 | 可以在 操作符 p 后紧随 一定数量的 修饰符 mod 以指明 操作的 各种 行为.
|
67 |
|
68 | a 增加 文件到 档案中 已有 成员 之后 , 如果 使用了 修饰符 a, 必须在 档案 名称 archive 之前 以 membername 参数的 形式
|
69 | 给出 档案中 已有 成员的 名字.
|
70 |
|
71 | b 增加 文件到 档案中 已有 成员 之前 , 如果 使用了 修饰符 b, 必须在 档案 名称 archive 之前 以 membername 参数的 形式
|
72 | 给出 档案中 已有 成员的 名字. (和修饰符 `i' 相同).
|
73 |
|
74 | c 建立 档案. 指定的 档案 archive 始终 会被建立, 如果 你要求 执行的是 更新, 通过 此修饰符 建立 档案时 会给出 一个
|
75 | 警告.
|
76 |
|
77 | f 截短 档案成员的 名字. ar 通常 允许 任意 长度的 文件名, 但这会 导致 与某些 系统上的 ar 出现 兼容性 问题, 使用 f
|
78 | 修饰符 可以 在往档案中 追加 文件时 把名字 截短.
|
79 |
|
80 | i 插入 文件到 档案中 已有 成员 之前 , 如果 使用了 修饰符 i, 必须在 档案 名称 archive 之前 以 membername 参数的 形式
|
81 | 给出 档案中 已有 成员的 名字. (与修饰符 `b' 相同).
|
82 |
|
83 | l 接受此修饰符, 但不起作用.
|
84 |
|
85 | N 使用 count 参数. 本修饰符 用于 在档案中 有多个 同名 成员的 情况. 删除 或抽取 档案中 给定 名字的第 count 个实例.
|
86 |
|
87 | o 抽取 成员时 保留 他们 原始的 时间属性. 如果 没有 此修饰符, 文件以抽取 的时间 作为 它的时间 属性.
|
88 |
|
89 | P 匹配 档案中的 名字时 使用 完整的 路径名. ar 不能 建立 使用 完整 路径名的 档案 (这不符合 POSIX 标准), 但其它的
|
90 | 档案 工具 能够建立, 本选项 会使 ar 在抽取 由其它 工具 建立的 档案 文件时, 使用完整的 路径名 去匹配 档案中 成员的
|
91 | 名字.
|
92 |
|
93 | s 即使 没有对 档案 进行 改变, 用本 修饰符 也可以 往档案中 写一个 目标 文件的 索引 或更新 已经 存在的 索引. 可以与
|
94 | 其它 操作 一起 使用 本修饰符, 也可以 单独使用. 对一个 档案 执行 `ar s' 与执行 `ranlib' 等价.
|
95 |
|
96 | S 不生成 档案的 符号表. 这可以 加速 建立 大的档案 文件的 过程,但这样 建立的 档案 不能被 连接器 使用, 为建立 符号表,
|
97 | 在最后 执行 `ar' 时应该 不用 `S' 修饰符, 或者 对档案 执行 一次 `ranlib' .
|
98 |
|
99 | u 通常ar r... 把所有 列出的 文件 插入到 档案中, 如果 希望 仅仅 插入比 档案中 已有 成员 更新的 文件时, 就应该 使用
|
100 | 此修饰符. `u' 修饰符 仅允许 与 `r' (替换) 操作 一起 使用. 某些 情况下, 由于 用 `q' 操作 比较 文件的 时间属性
|
101 | 会失去 速度上的 优势, 所以 不允许 执行 `qu' 组合操作.
|
102 |
|
103 | v 使用本修饰符可以进行 冗余的 操作。附加了此修饰符时,很多操作会显示 更多的消息,如处理的文件名等。
|
104 | V 显示 ar 的版本号。
|
105 | ```
|
106 |
|
107 | 选项参数
|
108 |
|
109 | ```shell
|
110 | --plugin <p> - load the specified plugin
|
111 | ```
|
112 |
|
113 | ar:支持的目标: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
|
114 |
|
115 | ### 实例
|
116 |
|
117 | 打包文件
|
118 |
|
119 | ```shell
|
120 | [root@localhost ~]# ls # 显示当前目录文件
|
121 | a.c b.c d.c install.log qte
|
122 | anaconda-ks.cfg c.c Desktop
|
123 |
|
124 | [root@localhost ~]# ar rv one.bak a.c b.c # 打包 a.c b.c文件
|
125 | ar: 正在创建 one.bak
|
126 | a - a.c
|
127 | a - b.c
|
128 | ```
|
129 |
|
130 | 打包多个文件
|
131 |
|
132 | ```shell
|
133 | [root@localhost ~]# ar rv two.bak *.c // 打包以.c结尾的文件
|
134 | ar: 正在创建 two.bak
|
135 | a - a.c
|
136 | a - b.c
|
137 | a - c.c
|
138 | a - d.c
|
139 | ```
|
140 |
|
141 | 显示打包文件的内容
|
142 |
|
143 | ```shell
|
144 | [root@localhost ~]# ar t two.bak
|
145 | a.c
|
146 | b.c
|
147 | c.c
|
148 | d.c
|
149 | ```
|
150 |
|
151 | 删除打包文件的成员文件
|
152 |
|
153 | ```shell
|
154 | [root@localhost ~]# ar d two.bak a.c b.c c.c
|
155 | [root@localhost ~]# ar t two.bak
|
156 | d.c
|
157 | ```
|
158 |
|
159 |
|
160 |
|