了解Linux命令:Ar

GNU ar程序創建 ,修改和從檔案中提取。 一個檔案是一個單獨的文件 ,其中包含一個結構中的其他文件的集合,可以檢索原始單個文件(稱為存檔的成員 )。

概觀

原始文件的內容,模式(權限),時間戳,所有者和組保存在存檔中,並可在提取時恢復。

GNU ar可以維護其成員具有任意長度名稱的檔案; 然而,取決於系統上如何配置ar ,為了與其他工具維護的存檔格式兼容,可能會限製成員名稱長度。 如果存在,限制通常為15個字符(與a.out相關的格式的典型值)或16個字符(與coff相關的格式的典型值)。

ar被認為是一個二進制實用程序,因為這種類型的檔案最常用作包含常用子程序的

當您指定修飾符時, ar為歸檔中的可重定位對像模塊中定義的符號創建索引。 一旦創建,只要ar對其內容進行更改(保存為q更新操作),該索引就會在歸檔中更新。 具有這種索引的存檔加快了與庫的鏈接,並且允許庫中的例程彼此調用而不考慮它們在存檔中的位置。

您可以使用nm -snm -print-armap列出此索引表。 如果存檔文件缺少表格,則可以使用稱為ranlib的另一種形式來添加表格。

GNU ar被設計為與兩個不同的設施兼容。 您可以使用命令行選項來控制其活動,例如Unix系統上不同類型的ar ; 或者,如果您指定單個命令行選項-M ,則可以使用通過標準輸入提供的腳本(如MRI“圖書管理員”程序)來控制它。

概要

ar [ -X32_64 ] [ - ] p [ mod [ relpos ] [ count ]] 存檔 [ member ...]

OPTIONS

GNU ar允許您在第一個命令行參數內以任意順序混合操作代碼p和修飾符標記mod

如果你願意,你可以用破折號開始第一個命令行參數。

p鍵盤符指定要執行的操作; 它可能是以下任何一種,但您只能指定其中之一:

d

從檔案中刪除模塊。 指定要作為成員刪除的模塊的名稱...; 如果您沒有指定要刪除的文件,則歸檔文件將保持不變。

如果您指定了v修飾符,那麼ar會在刪除每個模塊時列出它。

使用此操作可移動檔案中的成員。

如果一個符號在多個成員中定義,則歸檔中成員的順序可以影響程序如何使用該庫進行鏈接。

如果沒有修飾符與“m”一起使用,則您在成員參數中指定的任何成員都將移至存檔的末尾 ; 您可以使用abi修飾符將它們移動到指定的位置。

p

將檔案的指定成員打印到標準輸出文件。 如果指定了v修飾符,則在將其內容複製到標準輸出之前顯示其成員名稱。

如果您不指定成員參數,則打印存檔中的所有文件。

q

快速追加 ; 從歷史上看,將文件成員 ...添加到歸檔結尾,而不檢查替換。

修飾符abi 不會影響此操作; 新成員始終放在檔案末尾。

修飾符v會在每個文件添加後列出ar列表。

由於該操作的速度是速度,因此即使存檔已經存在,存檔的符號表索引也不會更新; 您可以顯式使用ar sranlib來更新符號表索引。

然而,太多不同的系統假設快速追加重建索引,所以GNU ar實現了“q”作為“r”的同義詞。

[R

將文件成員 ...插入存檔 (帶替換 )。 此操作與q不同,因為如果以前存在的成員的名稱與添加的成員名稱相匹配,則會刪除它們。

如果其中一個在member ...中命名的文件不存在, ar會顯示一條錯誤消息,並且不會打擾與該名稱匹配的所有存檔成員。

默認情況下,新成員添加在文件的末尾; 但是您可以使用修飾符abi之一來請求相對於某個現有成員的放置。

與此操作一起使用的修飾符v為插入的每個文件引出一行輸出,以及字母ar之一以指示文件是否被附加(不刪除舊成員)或被替換。

Ť

顯示列出存檔內容或存檔中存在的成員 ...中列出文件的內容的表格 。 通常只顯示成員名稱; 如果您還想查看模式(權限),時間戳,所有者,組和大小,則還可以通過指定v修飾符來請求。

如果您未指定成員 ,則列出存檔中的所有文件。

如果檔案中有多個同名文件(比如說fie )(比如ba ),則只列出第一個實例; 要看到他們,你必須要求一個完整的清單---在我們的例子中, ar t ba

X

從存檔中提取成員(名為成員 )。 您可以對此操作使用v修飾符,以便在提取ar時列出每個名稱。

如果您未指定成員 ,則會提取存檔中的所有文件。

一些修飾符( mod )可能會緊跟在p關鍵字後面,以指定操作行為的變化:

一個

在存檔的現有成員之後添加新文件。 如果使用修飾符a ,則在歸檔規範之前,現有歸檔成員的名稱必須作為relpos參數存在。

b

在存檔的現有成員之前添加新文件。 如果使用修飾符b ,則在歸檔規範之前,現有歸檔成員的名稱必須作為relpos參數存在。 (和我一樣 )。

C

創建存檔。 如果指定的存檔不存在,則在您請求更新時始終創建指定的存檔 。 但是,除非事先通過使用此修飾符指定您希望創建它,否則會發出警告。

F

截斷存檔中的名稱。 GNU ar通常會允許任意長度的文件名。 這將導致它創建與某些系統上的本機ar程序不兼容的存檔。 如果這是一個問題,則可以使用f修飾符在將文件名放入存檔時截斷文件名。

一世

在存檔的現有成員之前插入新文件。 如果使用修飾符i ,則在歸檔規範之前,現有歸檔成員的名稱必須作為relpos參數出現。 (與b相同)。

這個修飾符被接受但沒有被使用。

ñ

使用計數參數。 如果檔案中有多個條目具有相同的名稱,則使用此選項。 從存檔中提取或刪除給定名稱的實例

Ø

提取成員時保留成員的原始日期。 如果不指定此修飾符,則從存檔中提取的文件將標記提取時間。

P

在存檔中匹配名稱時使用完整路徑名稱。 GNU ar無法創建具有完整路徑名稱的存檔(此類存檔不是POSIX投訴),但其他存檔創建者可以。 該選項將使GNU ar使用完整的路徑名匹配文件名,當從另一個工具創建的存檔中提取單個文件時,這可能很方便。

小號

將對象文件索引寫入存檔,或者更新現有的索引,即使對存檔沒有其他更改。 您可以將這個修飾符標誌用於任何操作,也可以單獨使用。 在存檔上運行ars相當於在其上運行ranlib

小號

不要生成歸檔符號表。 這可以加快建設一個大型圖書館的幾個步驟。 生成的存檔不能與鏈接器一起使用。 為了構建符號表,您必須在上次執行ar時忽略S修飾符,或者必須在存檔上運行ranlib

ü

通常, ar r ...將列出的所有文件插入到存檔中。 如果您只想插入那些比相同名稱的現有成員更新的文件,請使用此修飾符。 u修飾符僅適用於r (替換)操作。 特別是,組合曲線是不允許的,因為檢查時間戳會失去操作q的速度優勢。

v

該修飾符請求操作的詳細版本。 當附加修飾符v時,許多操作都會顯示其他信息 ,例如已處理的文件名。

V

該修飾符顯示ar的版本號。

為了與AIX兼容, ar忽略了拼寫為-X32_64的初始選項。 這個選項產生的行為是GNU ar的默認值。 ar不支持任何其他-X選項; 特別是它不支持AIX ar的缺省-X32

重要提示:使用man命令( %man )查看特定計算機上的命令使用方式。