Ads 468x60px

##EasyReadMore##

21 12月, 2016

tar 指令 - 加解密 - 排除某目錄某檔案備份 - 差異備份

[UNIX] tar 指令 - 加密、解密 - 排除某目錄某檔案備份 - 差異備份

    Tar 指令是在 unix 最常用的檔案打包指令,他可以將你指定的檔案或目錄給打包在一個檔案裡(包含路徑結構),但~他不會去做壓縮,要壓縮得搭配其他的壓縮程式。

    基本的備份 Shell Script 我們可能會這麼寫

    #!/bin/bash
    TODAY=`date +%Y%m%d_%H%M`
    BACKUPNAME="SystemName_$TODAY.tar.gz"
    BACKUPDIR=/backup_directory
    tar zcvf $BACKUPDIR/$BACKUPNAME /etc  /usr/local/etc  /somefiles
    mv *.tar.gz $BACKUPDIR/Backup_SystemName

    其實我們可以利用 openssl 順便幫備份檔做加解密動作

    針對檔案作加密

    #!/bin/bash
    for var in "$@"
    do
    echo -n "加密檔案 "
    echo -n $var
    echo " 使用 AES 256 CBC 方式"
    tar cf - $var | openssl aes-256-cbc -e -out $var.aes -k your_key_passwd
    # rm $var
    done


    針對已加密檔案作解密

    #!/bin/bash
    for var in "$@"
    do
    echo -n "Decrypt File "
    echo -n $var
    echo " with AES 256 CBC "
    openssl aes-256-cbc -d -in $var -k your_key_passwd | tar xvf -
    # rm $var
    done


    # your_key_passwd 當然要改成你自己設定的檔案密碼

    註:使用 openssl 的加解密功能的缺點是,原本檔案的權限 chmod 會因為解密時檔案的單純會出而遺失原本的權限,所以我用多一層 tar 把他包起來.....衍生的缺點是檔案很大時會很費時。

    另,使用這種 openssl 的 in/out 方式,其原本「未加密的檔案」跟「加密後的檔案」都會同時存在,為了空間著想你可能需要多加一行 rm 把原本的檔案刪掉,以節省空間。

    我想大家都知道,如果想備份 /etc 底下所有的 config 檔,可以使用
    tar zcvf etc.tar.gz  /etc/*.conf  這種方式
    但是~~如果是反過來要只排除他呢? 
    tar 利用 --exclude="pattern" 來排除不打包的項目

    tar cvf etc.tar --exclude="*.conf"  /etc
    tar cvf etc.tar --exclude="*.conf"  --exclude="*.d"  /etc


    #針對某目錄不打包

    tar zcvf var_today.tar.gz  --exclude="/var/log"  /var

    tar 的差異性備份
    一般使用 tar 對某個目錄打包、壓縮,都是採取全新的備份一份,也就是完整備份,但如果檔案很多、檔案很大,每次做完整備份也太久、太操,所以可以利用 tar 指令本身的參數「-g」來做到增量備份或稱為差異性備份。

    tar 的指令用法

    # 針對 /etc/ 目錄作完整備份,並產生「快拍檔 snapshot」用以記錄目前的檔案狀態

    tar zcvf original.tar.gz -g snapshot /etc

    #增量備份、差異性備份 incremental backup
    # 利用「快拍檔 snapshot」 來比對記錄與目前檔案狀態

    tar -zc -g snapshot -f incremental.tar.gz /etc

    0 意見:

    張貼留言

     
    Blogger Templates