文:小州老師

 

 

講師專長
LINUX SYSTEM
NETWORKING
ADMINISTRATION
UNIX系統管理
UNIX網路管理
UNIX程式設計
C、C++
UNIX SYSTEM PROGRAMMING

講師經歷
聯成電腦專任講師
(RHCE 原廠認證講師)
優士達資訊工程師 
碩誠資訊網管
程式設計師
專業證照
Linux RHCE
Linux LPI-I
Linux LPI-II
NCLP

 

前言:

unix 系統談到檔案的備份,tar 這個程式其實已經非常普遍與常見。這次要來談談 tar 這個程式命令一些使用的小技巧,可以讓大家備份與解開檔案時候有更多的妙用。

--------------------------------------------------------------------------------------------------

一般使用

相信 linux 系統的使用者都接觸過 tar 這個命令,因為常見的檔案要打包備份轉移等都很常用到。另外像是還是會有機會在網路上下載 tarball 壓縮檔案,比方可能要安裝軟體等都是封裝成為這個格式,所以取回後需要解開才可以進行安裝等流程動作。

先來說說一般 tar 的命令使用吧。首先談到一般打包的命令:

    tar -cvf backup.tar /bin

這個就是把 /bin 目錄打包成為 backup.tar 這個打包檔案。後續要解開的話,可以使用如下命令:

    tar -xvf backup.tar

其中一般若是解開時候希望要還原所有應該具備的資訊,比方 owner/group/permission 與 timestamp等,解開時候會一起使用 -p 這個參數提供該功能。所以使用的命令就是這樣:

    tar -xvpf backup.tar

由於 tar 一般只有提供打包的功能,所以若是打包好的檔案再壓縮過應該會更小,所以可以搭配 gzip與 bzip2 工具達成該功能。一般操作使用如下範例:

    gzip backup1.tar
    bzip2 backup2.tar

    
執行結束後,分別得到的檔案就會是 backup1.tar.gz 與 backup2.tar.bz2。下面提供我系統上打包好與壓縮過檔案的清單結果,可以發現檔案大小不一樣。

    -rw-rw-r-- 1 kendlee kendlee  15M 2009-12-26 14:22 backup.tar
    -rw-rw-r-- 1 kendlee kendlee 5.7M 2009-12-26 14:22 backup1.tar.gz
    -rw-rw-r-- 1 kendlee kendlee 5.1M 2009-12-26 14:22 backup2.tar.bz2



不過往後要打包與壓縮需要兩個流程也不方便,所以 linux 系統的 tar 都支援 -z 與 -j 參數,可以分別支援呼叫 gzip 與 bzip2 一起工作達成打包時候可以一起壓縮,解開時也是如此。

    tar -zxvf backup1.tar.gz
    tar -jxvf backup2.tar.bz2


--------------------------------------------------------------------------------------------------
    
進階使用技巧

linux 本身使用的 tar 為 GNU 所開發,目前都支援 -z 與 -j 可以執行期呼叫 gzip 與 bzip2 一起工作,不過早期的版本或者是一些 unix 系統上的 tar 不一定支援這類參數,所以若要使用這類功能需要透過其他一些執行技巧達成。這邊提供一個打包與壓縮成為 backup.tar.gz 的命令:

    tar -cvf - /bin |  gzip -c > backup1.tar.gz
    
其中可以發現到,這個使用 tar 命令部份於檔名位置使用了 "-" 這個符號,這邊這個符號使用表示 stdout,也就是打包好的檔案透過標準輸出顯示,後續透過 gzip 命令由 stdin 這個標準輸入設備讀入壓縮後,最終把壓縮的內容寫入到 backup1.tar.gz 檔案。其中 gzip 這邊使用 -c 參數表示把結果處理好後顯示於 stdout 上,
一般通常單純使用就是不破壞異動原本要處理的檔案,而這邊搭配管線符號使用時候,其實 -c 也可以省略不用。

那後續怎樣解開呢?下面方式即可:
    
    gzip -dc backup1.tar.gz | tar -xvf -

    
其中 gzip 使用 -dc 兩個參數,-d 表示解開檔案,-c 表示解開的內容不要異動原本檔案,而是透過 stdout標準輸出內容。管線的右邊呼叫 tar 命令要解開,可以注意到檔名傳入 "-" 這個符號,這邊就是 tar 命令會由 stdin 讀入 gzip 解開壓縮檔案後原本打包的內容,最後就可以還原解開得到原本的檔案目錄。

--------------------------------------------------------------------------------------------------

搭配網路連結備份技巧

一般操作 tar 命令,不管是要打包還是還原,都是直接於本機上直接操作。其實也可以達成打包時候直接把檔案放到遠端的主機上,而不是本機 linux 主機上。這邊提供一個命令達成該功能:

    tar -zcvf - /bin | ssh peter@192.168.1.1 "cat > backup.tar.gz"
    
其中 tar 的使用方式上面有提過,就是把備份好的壓縮打包內容顯示於 stdout 這個標準輸出,最後執行 ssh 登入另外一台主機執行 cat 命令進行處理。cat 預設沒有輸入檔名時候會開啟 stdin 這個標準輸入裝置,所以透過 >這個 IO 重導符號就可以把讀入的內容儲存到 backup.tar.gz 這個檔案上。整個命令就是於 A 主機執行,但是最後產生的備份檔案卻是放在 B 主機上。

那可以說打包壓縮檔案在遠端主機,但是希望可以解開到另外一台嗎?其實把該命令調整一下就可以了....

    ssh peter@192.168.1.1 "cat backup.tar.gz" | tar -zxvf -
    
所以整個命令就是遠端主機顯示輸出 backup.tar.gz ,後續由本機的 tar 讀入處理進行還原解開的動作。

那再變化一下,希望 A 登入遠端 B 主機備份,最後檔案產生於 A 主機上,那命令也可以這樣使用:

    ssh peter@192.168.1.1 "tar -zcvf - /bin" > backup.tar.gz

這個命令大家是否感覺很新奇呢?
    
--------------------------------------------------------------------------------------------------

最後

其實 linux 上要進行檔案打包與備份方式很多,之前我們也談過使用 rsync 命令,甚至 rsync+ssh 達成同步備份這類功能。善用這些工具可以讓 linux 系統在管理上更輕鬆與自在。

 

本期電子報精彩文章

HOT NEWS:聯成電腦Nokia佈景主題大賽揭曉

HOT NEWS:聯成快訊:學員專區火熱改版

精彩人物:前進吧 ! 燃燒3D的熱血~專訪邱國祿老師

軟體秘技:遨遊網路的另一個選擇-火狐(firefox)

聯成電腦證照新知:JAVA SCWCD考前必備事項

學員專欄:李岳樺的聯成故事:White出屬於熱帶的自然與風情

, , , , , , , ,

lccnetvip 發表在 痞客邦 PIXNET 留言(0) 人氣()