1. 程式人生 > >Linux 備份壓縮 : ar 命令詳解

Linux 備份壓縮 : ar 命令詳解

Linux 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相容。

例項

打包檔案

[[email protected] ~]# ls   //顯示當前目錄檔案   
a.c    b.c d.c   install.log      qte
anaconda-ks.cfg c.c Desktop 

[[email protected] ~]# ar rv one.bak a.c b.c //打包 a.c b.c檔案 
ar: 正在建立 one.bak
a - a.c
a - b.c
[[email protected] ~]# 

打包多個檔案

[[email protected] ~]# ar rv two.bak *.c  //打包以.c結尾的檔案  
ar: 正在建立 two.bak
a - a.c
a - b.c
a - c.c
a - d.c
[[email protected] ~]# 

顯示打包檔案的內容

[[email protected] ~]# ar t two.bak    
a.c
b.c
c.c
d.c
[[email protected] ~]# 

刪除打包檔案的成員檔案

[[email protected] ~]# ar d two.bak a.c b.c c.c  
[[email protected] ~]# 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

相關推薦

Linux 備份壓縮 : ar 命令

Linux ar命令用於建立或修改備存檔案,或是從備存檔案中抽取檔案。 ar可讓您集合許多檔案,成為單一的備存檔案。在備存檔案中,所有成員檔案皆保有原來的屬性與許可權。 當我們的程式中有經常使用的模組,而且這些模組在其他程式中也會用到,為了實現程式碼重用減少軟體開發週期,

Linux 備份壓縮 : zip命令

zip命令可以用來解壓縮檔案,或者對檔案進行打包操作。zip是個使用廣泛的壓縮程式,檔案經它壓縮後會另外產生具有“.zip”副檔名的壓縮檔案。 語法 zip(選項)(引數) 選項 -A:調整可執行的自動解壓縮檔案; -b<工作目錄>:指定暫時存放檔案的目錄

Linux 備份壓縮 : compress 命令

compress命令使用“Lempress-Ziv”編碼壓縮資料檔案。compress是個歷史悠久的壓縮程式,檔案經它壓縮後,其名稱後面會多出".Z"的副檔名。當要解壓縮時,可執行uncompress指令。事實上uncompress是指向compress的符號連線,因此不論是

Linux 備份壓縮 : unzip 命令

unzip命令用於解壓縮由zip命令壓縮的“.zip”壓縮包。 語法 unzip(選項)(引數) 選項 -c:將解壓縮的結果顯示到螢幕上,並對字元做適當的轉換; -f:更新現有的檔案; -l:顯示壓縮檔案內所包含的檔案; -p:與-c引數類似,會將解壓縮的結果顯示到螢

Linux下的壓縮zip,壓縮unzip命令及實例

cnblogs http .com 服務器 file html htm unzip inux http://www.cnblogs.com/zdz8207/p/3765604.html Linux下的壓縮解壓縮命令詳解及實例 實例:壓縮服務器上當前目錄的內容為xx

Linux下的壓縮zip,壓縮unzip命令及例項

Linux下的壓縮解壓縮命令詳解及例項 例項:壓縮伺服器上當前目錄的內容為xxx.zip檔案 zip -r xxx.zip ./* 解壓zip檔案到當前目錄 unzip filename.zip ============================ 另:有些伺服器沒有安裝zip包執行不了zip

LinuxLinux定時任務Crontab命令

星期幾 ima 默認 定時 最好 表示 時間 path 配置文件 linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是默認啟動的。另 外, 由於使用者自己也可以設置計劃任務,所以, Lin

Linux基礎進程命令

linux運維學習進程有關基礎命令一、進程定義1、進程就是CPU未完成的工作,而且它是其中運行著一個或多個線程的地址空間和這些線程所需要的系統資源。二、Linux系統進程和一些有關進程的命令1、ps命令 ps [options] 1》ps - report a snapshot of the c

【轉載】linux下的mount命令

文件的 flag 自動加載 網絡文件系統 解決問題 選項 lock home 多個參數 以下內容來自:http://blog.csdn.net/clozxy/article/details/5299054 http://linux.chinaunix.net/techdo

Linux上的free命令-收藏

cnblogs sed () 回收 dha 二維數組 版式 nbsp shared 解釋一下Linux上free命令的輸出。   下面是free的運行結果,一共有4行。為了方便說明,我加上了列號。這樣可以把free的輸出看成一個二維數組FO(Free Output)。例如

Linux crontab 定時任務命令

-1 data new ubuntu 時間間隔 服務 run back use Linux Crontab 定時任務 命令詳解 [日期:2016-02-13] 來源:Linux社區 在工作中需要數據庫在每天零點自動備份所以需要建立一個定時任務.我選擇在Linux下使用

Linux定時任務Crontab命令

自動 monthly ons 命名 維護 我們 周期 你在 腳本文件 linux 系統則是由 cron (crond) 這個系統服務來控制的。Linux 系統上面原本就有非常多的計劃性工作,因此這個系統服務是默認啟動的。另 外, 由於使用者自己也可以設置計劃任務,所以, L

Linux文件管理命令及練習

Linux文件管理命令Windows裏對於文件的管理比較直觀,但Linux呢?如何在Linux系統裏創建、復制、移動、刪除文件與目錄呢?這其實是個問題,但隨著學習的進行,這將不再是個問題;一:文件管理類命令名稱?命令的歸納:1、創建文件:? touch? ? ? ? ? ? ? ? ? ? ? ? ? 2、查

Linux自學筆記(4):Linux獲取幫助的命令

Linux獲取幫助的命令詳解 man linux命令幫助的獲取 外部命令:都有一個可執行程序,位於文件系統都目錄下; echo (COMMAND) 內部命令: help COMMAND 外部命令幫助:(1)幫助手冊 COMMAND --help # COMMAND -

Linux三劍客值awk命令

數據處理 程序 package mysq regular 邏輯與 body 相同 導致 一、awk介紹 AWK是一種優良的文本處理工具。它不僅是 Linux 中也是任何環境中現有的功能最強大的數據處理引擎之一。這種編程及數據操作語言(其名稱得自於它的創始人 Alfred A

Linux監控工具vmstat命令

原帖地址:http://www.ha97.com/4512.html 一、前言 很顯然從名字中我們就可以知道vmstat是一個檢視虛擬記憶體(Virtual Memory)使用狀況的工具,但是怎樣通過vmstat來發現系統中的瓶頸呢?在回答這個問題前,還是讓我們回顧一下Linux

Linux之檔案查詢命令

find 查詢檔案 find ./ -type f 查詢目錄 find ./ -type d 查詢名字為test的檔案或目錄 find ./ -name test 查詢名字符合正則表示式的檔案,注意前面的‘.*’(查詢到的檔案帶有目錄) find ./ -regex .*so.*\.gz 查詢目

【轉載】Linux下安裝軟體命令

【轉載日期】2018.09.11 【轉載標題】Linux下安裝軟體命令詳解 ----------------------------------------------------------------------------------------------

linux find和locate命令

linux中find命令優點是能實現精確查詢,缺點對系統資源耗費大。 一:檔案查詢命令,按檔名稱查詢. 官方要求檔名需要加雙引號,保證搜尋的完整性。 find 目錄 -iname " init "(不區分大小寫) find 目錄 -name “init

Linux系統中ls命令

ls命令是linux下最常用的命令。ls命令就是list的縮寫 1. 命令格式: ls [選項,常用引數] [目錄名] 2. 命令功能: 列出目標目錄中所有的子目錄和檔案。 3. 常用引數: -a, –all 列出目錄下的所有檔案,包括以 . 開