Linux基础命令---ar
建站服務(wù)器
ar
ar
指令可以創(chuàng)建、修改庫(kù),也可以從庫(kù)中提取單個(gè)模塊。庫(kù)是一個(gè)單獨(dú)的文件,里面包含了按照特定結(jié)構(gòu)組織起來(lái)的其他文件,我們稱作member。歸檔文件通常是一個(gè)二進(jìn)制文件,我們一般將歸檔文件當(dāng)作庫(kù)來(lái)使用。原始文件的內(nèi)容、模式(權(quán)限)、時(shí)間戳、所有者和組保存在存檔中,并可在提取時(shí)恢復(fù)。
GNU ar
可以維護(hù)其成員具有任意長(zhǎng)度的名稱的檔案;但是,根據(jù)您的系統(tǒng)上對(duì)ar的配置方式,可以對(duì)成員名長(zhǎng)度進(jìn)行限制,以便與其他工具維護(hù)的存檔格式兼容。如果存在,限制通常是15個(gè)字符(典型的與a.out相關(guān)的格式)或16個(gè)字符(典型的與coff相關(guān)的格式)。
當(dāng)您指定修飾符的時(shí)候,ar會(huì)為存檔中可重定位的對(duì)象模塊中定義的符號(hào)創(chuàng)建一個(gè)索引。創(chuàng)建之后,每當(dāng)ar對(duì)其內(nèi)容進(jìn)行更改時(shí),這個(gè)索引就會(huì)在存檔中更新(除了Q更新操作外)。具有這樣一個(gè)索引的歸檔可以加速鏈接到庫(kù),并允許庫(kù)中的例程相互調(diào)用,而不考慮它們?cè)诖鏅n中的位置。您可以使用“nm -s”或“nm --print-armap”列出此索引表。如果存檔缺少表,則可以使用另一種稱為ranlib的ar形式來(lái)添加表。
GNU ar
可以隨意創(chuàng)建一個(gè)瘦存檔,其中包含一個(gè)符號(hào)索引和對(duì)檔案成員文件的原始副本的引用。這樣的存檔對(duì)于構(gòu)建用于本地構(gòu)建的庫(kù)非常有用,因?yàn)樵诒镜貥?gòu)建中,可重新定位的對(duì)象將保持可用,而復(fù)制每個(gè)對(duì)象的內(nèi)容只會(huì)浪費(fèi)時(shí)間和空間。薄檔案也是扁平的,因此將一個(gè)或多個(gè)檔案添加到一個(gè)瘦歸檔中將單獨(dú)添加嵌套歸檔的元素。存檔元素的路徑是相對(duì)于歸檔本身存儲(chǔ)的。
GNU Ar
被設(shè)計(jì)成與兩個(gè)不同的設(shè)施兼容。您可以使用命令行選項(xiàng)來(lái)控制它的活動(dòng),比如Unix系統(tǒng)上的不同類型的ar;或者,如果您指定了單一命令行選項(xiàng)-M,您可以使用標(biāo)準(zhǔn)輸入提供的腳本來(lái)控制它,比如MRI "librarian"程序。
此命令的適用范圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1
、語(yǔ)法
ar[--plugin name][-X32_64][-]p[mod[relpos][count]]archive[member...]
2
、選項(xiàng)列表
GNU ar
允許您在第一個(gè)命令行參數(shù)中按任意順序混合操作代碼p和修飾符標(biāo)志mod。如果您愿意,可以用“-”開(kāi)始第一個(gè)命令行參數(shù)。p鍵字母指定要執(zhí)行的操作;它可能是以下任一操作,但您必須僅指定其中一個(gè)操作
操作代碼
說(shuō)明
c
創(chuàng)建歸檔文件
d
刪除歸檔中的成員文件,將要?jiǎng)h除的模塊的名稱指定為member。如果沒(méi)有指定要?jiǎng)h除的文件,則存檔將保持不變
m
改變成員文件在歸檔中的順序 。如果在多個(gè)成員中定義了一個(gè)符號(hào),則存檔中成員的排序會(huì)改變程序使用庫(kù)鏈接的方式。如果在“m”中沒(méi)有使用修飾符,那么在成員參數(shù)中命名的任何成員都會(huì)移動(dòng)到歸檔文件的末尾;您可以使用a、b或i修飾符將它們移動(dòng)到指定的位置。
p
將存檔的指定成員打印到標(biāo)準(zhǔn)輸出文件。如果指定了v修飾符,請(qǐng)?jiān)趯⑵鋬?nèi)容復(fù)制到標(biāo)準(zhǔn)輸出之前顯示成員名。
q
將文件附加在歸檔文件的最后。修飾符a、b和i不影響此操作;新成員總是放在歸檔的末尾。修飾符v在追加時(shí)使每個(gè)文件都有ar列表。因?yàn)檫@個(gè)操作的重點(diǎn)是速度,所以存檔的符號(hào)表索引不會(huì)更新,即使它已經(jīng)存在;您可以顯式地使用ar或ranlib來(lái)更新符號(hào)表索引。但是,有太多不同的系統(tǒng)假設(shè)快速追加索引,因此GNU ar實(shí)現(xiàn)了q作為r的同義詞。
r
將文件‘member’插入到歸檔文件,如果歸檔中存在要插入的文件,那么就覆蓋。此操作與q的不同之處在于,如果現(xiàn)有成員的名稱與要添加的成員匹配,則刪除它們。如果成員中不存在‘member’,ar顯示錯(cuò)誤消息,并保持與該名稱匹配的任何現(xiàn)有存檔成員不受干擾。默認(rèn)情況下,在文件末尾添加新成員;但您可以使用其中一個(gè)修飾符a、b或i請(qǐng)求相對(duì)于現(xiàn)有成員的位置。與此操作一起使用的修飾符v將引發(fā)插入的每個(gè)文件的一行輸出。字母a或r,以指示文件是否被追加(沒(méi)有刪除舊成員)或被替換。
t
顯示歸檔文件包含的文件列表。通常只顯示成員名稱;如果還希望查看模式(權(quán)限)、時(shí)間戳、所有者、組和大小,則還可以通過(guò)指定v修飾符來(lái)請(qǐng)求。如果未指定成員,則將列出存檔中的所有文件。如果一個(gè)存檔中有多個(gè)同名文件,只列出第一個(gè)實(shí)例;要查看它們,您必須要求一個(gè)完整的列表。
x
從歸檔文件中提取成員文件,您可以在此操作中使用v修飾符,在提取時(shí)請(qǐng)求ar列出每個(gè)名稱。如果不指定成員,則提取存檔中的所有文件。無(wú)法從瘦存檔中提取文件。
許多修飾符(Mod)可以緊跟p鍵,以指定操作行為的變化
修飾符
說(shuō)明
a
在存檔的現(xiàn)有成員之后添加新文件。如果使用修飾符a,則現(xiàn)有存檔成員的名稱必須作為relpos參數(shù)出現(xiàn)在歸檔規(guī)范之前。
b
在存檔的現(xiàn)有成員之前添加新文件。如果使用修飾符b,則現(xiàn)有存檔成員的名稱必須作為relpos參數(shù)出現(xiàn)在歸檔規(guī)范之前。(與i相同)
c
創(chuàng)建檔案。當(dāng)您請(qǐng)求更新時(shí),如果指定的存檔不存在,則始終創(chuàng)建它。但是,除非事先指定通過(guò)使用此修飾符來(lái)創(chuàng)建警告,否則將發(fā)出警告。
D
在確定性模式下操作。當(dāng)添加文件和存檔索引時(shí),對(duì)UID、GID、時(shí)間戳使用零,并對(duì)所有文件使用一致的文件模式。當(dāng)使用此選項(xiàng)時(shí),如果ar與相同的選項(xiàng)和相同的輸入文件一起使用,則多次運(yùn)行將創(chuàng)建相同的輸出文件,而不管輸入文件的所有者、組、文件模式或修改時(shí)間。
f
截?cái)啻鏅n中的名稱。GNU ar通常允許任意長(zhǎng)度的文件名。這將導(dǎo)致它創(chuàng)建與某些系統(tǒng)上的本機(jī)ar程序不兼容的檔案。如果這是個(gè)問(wèn)題,那么當(dāng)將f修飾符放在歸檔文件中時(shí),可以使用f修飾符來(lái)截?cái)辔募?/p>
i
在存檔的現(xiàn)有成員之前插入新文件。如果使用修飾符i,則現(xiàn)有存檔成員的名稱必須作為relpos參數(shù)出現(xiàn)在歸檔規(guī)范之前。(與b相同)
l
沒(méi)有用的修飾符
N
使用計(jì)數(shù)參數(shù)。如果存檔中有多個(gè)具有相同名稱的條目,則使用此方法。從存檔中提取或刪除給定名稱的實(shí)例計(jì)數(shù)
o
提取成員時(shí)保留成員的原始日期。如果不指定此修飾符,則從檔案中提取的文件將加蓋提取時(shí)間。
P
在存檔中匹配名稱時(shí)使用完整路徑名稱。GNU ar不能創(chuàng)建具有完整路徑名的存檔(這類檔案不是POSIX投訴),但其他歸檔創(chuàng)建者可以。此選項(xiàng)將導(dǎo)致GNU ar使用完整的路徑名匹配文件名,這在從另一個(gè)工具創(chuàng)建的歸檔文件中提取單個(gè)文件時(shí)非常方便。
s
將對(duì)象文件索引寫入存檔,或更新現(xiàn)有的索引,即使沒(méi)有對(duì)歸檔進(jìn)行其他更改。您可以在任何操作中使用此修飾符標(biāo)志,也可以單獨(dú)使用。在存檔上運(yùn)行ar等于在它上運(yùn)行ranlib。
S
不要生成存檔符號(hào)表。這可以加快構(gòu)建一個(gè)大型庫(kù)的幾個(gè)步驟。結(jié)果存檔不能與鏈接器一起使用。為了構(gòu)建符號(hào)表,必須在ar的最后一次執(zhí)行時(shí)省略S修飾符,或者必須在歸檔文件上運(yùn)行ranlib。
T
將指定的歸檔文件設(shè)置為瘦存檔。如果它已經(jīng)存在并且是一個(gè)常規(guī)存檔,則現(xiàn)有成員必須與存檔目錄相同。
u
通常,ar r將列出的所有文件插入存檔中。如果只想插入比同名的現(xiàn)有成員更新的文件,請(qǐng)使用此修飾符。u修飾符僅允許用于操作r(替換)。特別是不允許使用組合qu,因?yàn)闄z查時(shí)間戳將失去操作q的任何速度優(yōu)勢(shì)。
v
顯示詳細(xì)執(zhí)行過(guò)程
V
顯示ar的版本
AR
忽略初始選項(xiàng)-x32_64,以便與AIX兼容。此選項(xiàng)產(chǎn)生的行為是GNU ar的默認(rèn)行為。ar不支持任何其他-X選項(xiàng);特別是,它不支持-x32,這是AIX ar的默認(rèn)設(shè)置。
可選的命令行開(kāi)關(guān)“--plugin name”使ar加載名為name的插件,這增加了對(duì)更多文件格式的支持。只有在工具鏈已啟用插件支持的情況下,此選項(xiàng)才可用。
@file
選項(xiàng),從文件中讀取命令行選項(xiàng)。已讀取的選項(xiàng)被插入以代替原始的@file選項(xiàng)。如果文件不存在或無(wú)法讀取,則將按字面處理該選項(xiàng),而不刪除該選項(xiàng)。file中的選項(xiàng)用空格分隔。可以在選項(xiàng)中包含空格字符,方法是將整個(gè)選項(xiàng)包圍在單引號(hào)或雙引號(hào)中。任何字符(包括反斜杠)都可以通過(guò)前綴所包含的字符來(lái)包括在反斜杠中。file本身可能包含額外的@file選項(xiàng);任何此類選項(xiàng)都將被遞歸處理。
3
、實(shí)例
1
)創(chuàng)建歸檔文件
[root@localhost weijie]#
ar -rc mlib.a 1.c 2.c//
創(chuàng)建歸檔
[root@localhost weijie]# ls
11.c1.c1.c~2.c3.c4.c4.c~5.c6.cmlib.a
[root@localhost weijie]#
ar -t mlib.a//
查看歸檔的文件列表
1.c
2.c
2
)在歸檔中插入文件
[root@localhost weijie]#
ar -rc mlib.a 3.c//
插入
3.c
,此時(shí)歸檔中還沒(méi)有
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
,注意此時(shí)
1.c
已經(jīng)存在了
[root@localhost weijie]#
ar -t mlib.a//
查看文件列表,
1.c
已經(jīng)被覆蓋了
1.c
2.c
3.c
3
)在歸檔的最后插入文件
[root@localhost weijie]#
ar -q mlib.a 1.c//
是用選項(xiàng)
q
來(lái)追加到最后,注意這個(gè)和
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//
查看文件列表,第一個(gè)
1.c
已經(jīng)刪除,但是最后還有一個(gè)
2.c
3.c
1.c
[root@localhost weijie]#
ar -d mlib.a 1.c//
再次刪除
1
。
C
[root@localhost weijie]#
ar -t mlib.a//
查看文件列表,
1.c
已經(jīng)被刪除
2.c
3.c
總結(jié)
以上是生活随笔為你收集整理的Linux基础命令---ar的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 决策树构建算法之—C4.5
- 下一篇: CaptCha的现状与未来