第8章:Shell指令碼歸檔與壓縮

來源:互聯網
上載者:User

標籤:one   put   bsp   壓縮   rect   許可權   .gz   mnt   gzip   

 

第8章:Shell指令碼歸檔與壓縮

 

 

 

  定期備份不可小視,我們可以通過shell指令碼來實現備份自動化。其中資料備份一般要使用到歸檔與壓縮,歸檔與壓縮對於系統管理員或普通使用者來說是比較常用的工具,有許多不同的壓縮格式,要結合不同的使用方法才可以獲得最佳的壓縮效果。還有檔案加密也是一種保護資料常用的方法,檔案加密之前通常都要先進行歸檔和壓縮。

 

8.1tar 歸檔

tar命令主要用來歸檔檔案,可以用tar將多個檔案和檔案夾儲存為單個檔案,同時還能保留所有檔案的屬性、許可權等。

 

範例1建立tar歸檔

[[email protected] home]# tar --help | grep ‘\-f\,‘

  -f, --file=ARCHIVE         使用歸檔檔案或 ARCHIVE 裝置

[[email protected] home]# tar --help | grep "\-c\,"    #查看系統tar協助 –c選項的說明

  -c, --create               建立一個新歸檔

 [[email protected] home]# for((i=1;i<4;i++));do ifconfig > font$i.txt;done   #使用for迴圈建立3個測試文本

[[email protected] home]# ls font*

font1.txt  font2.txt  font3.txt

[[email protected] home]# tar -cf font.tar font1.txt font2.txt font3.txt

 

範例2查看歸檔及追加歸檔檔案

[[email protected] home]# tar --help | grep ‘\-v\,‘

  -v, --verbose              詳細地列出處理的檔案

[[email protected] home]# tar --help | grep ‘\-r\,‘

  -r, --append               追加檔案至歸檔結尾

[[email protected] home]# tar -tf font.tar              #查看歸檔檔案

font1.txt

font2.txt

font3.txt

[[email protected] home]# tar -rvf font.tar font4.txt

font4.txt

[[email protected] home]# tar -tf font.tar

font1.txt

font2.txt

font3.txt

font4.txt

[[email protected] home]# tar -tvf font.tar             #查看更加詳細的歸檔檔案

-rw-r--r-- root/root     10240 2017-04-29 18:05 font1.txt

-rw-r--r-- root/root       884 2017-04-29 18:03 font2.txt

-rw-r--r-- root/root       884 2017-04-29 18:03 font3.txt

-rw-r--r-- root/root       884 2017-04-29 18:14 font4.txt

 

範例3從歸檔檔案中提取文本或檔案夾

[[email protected] home]# tar --help | grep ‘\-x\,‘

  -x, --extract, --get       從歸檔中解出檔案

[[email protected] home]# tar --help | grep ‘\-C\,‘

  -C, --directory=DIR        改變至目錄 DIR

[[email protected] home]# tar -xf font.tar

[[email protected] home]# ls

font1.txt  font2.txt  font3.txt  font4.txt  font.tar  lost+found  test.sh

[[email protected] home]# tar -xf font.tar -C /mnt

[[email protected] home]# ls /mnt/

font1.txt  font2.txt  font3.txt  font4.txt

[[email protected] home]# tar -tvf font.tar

-rw-r--r-- root/root       884 2017-04-29 18:27 font1.txt

-rw-r--r-- root/root       884 2017-04-29 18:27 font2.txt

-rw-r--r-- root/root       884 2017-04-29 18:27 font3.txt

-rw-r--r-- root/root       884 2017-04-29 18:27 font4.txt

[[email protected] home]# tar -xvf font.tar font2.txt

font2.txt

 

範例4兩個tar歸檔檔案進行合并

[[email protected] home]# tar --help | grep "\-A\,"

  -A, --catenate, --concatenate   追加 tar 檔案至歸檔

[[email protected] home]# tar -cf test01.tar font1.txt font2.txt

[[email protected] home]# tar -cf test02.tar font3.txt font4.txt

[[email protected] home]# tar -Af test01.tar test02.tar    #把test02.tar檔案合并到test01.tar

 

範例5從歸檔檔案中刪除檔案

[[email protected] home]# tar --help | grep "\-delete"

  --delete               從歸檔(非磁帶!)中刪除

[[email protected] home]# tar -tf test01.tar

font1.txt

font2.txt

font3.txt

font4.txt

[[email protected] home]# tar --delete --file test01.tar font2.txt

[[email protected] home]# tar -tf test01.tar

font1.txt

font3.txt

font4.txt

 

範例6tar 命令把檔案進行歸檔和壓縮,-z對.gz壓縮格式,-j對bz2壓縮格式

[[email protected] home]# tar -zcvf file.tar.gz font1.txt font3.txt font4.txt

font1.txt

font3.txt

font4.txt

[[email protected] home]# ls -l | head -n 3

-rw-r--r--. 1 root root   589  4月 29 22:59 file.tar.gz

-rw-r--r--. 1 root root    45  4月 29 22:56 font1.txt

 

範例7tar命令解壓歸檔檔案

[[email protected] home]# tar -zxvf  file.tar.gz

font1.txt

font3.txt

font4.txt

 

 

 

8.2gzip壓縮與gunzip解壓

gzip只能夠壓縮單個檔案,而無法對目錄和多個檔案進行歸檔,因些需要tar進行歸檔後再使用gzip進行壓縮,產生壓縮格式尾碼為.gz

 

範例1gzip預設會刪除原檔案產生一個壓縮檔test01.tar.gz

[[email protected] home]# gzip font1.txt

[[email protected] home]# ls -l

-rw-r--r--. 1 root root   401  4月 29 18:27 font1.txt.gz

-rw-r--r--. 1 root root   884  4月 29 18:27 font3.txt

 

範例2gunzip解壓會刪除原壓縮檔解壓出檔案

[[email protected] home]# gunzip font1.txt.gz

[[email protected] home]# ls -l font1.txt

-rw-r--r--. 1 root root 884  4月 29 18:27 font1.txt

 

範例3gzip  -l 選項查看壓縮檔屬性資訊

[[email protected] home]# gzip -l font1.txt.gz

         compressed        uncompressed  ratio uncompressed_name

                401                 884  58.7% font1.txt

 

範例4將font4.txt內容輸入,gzip打包輸出重寫向到test.gz

[[email protected] home]# cat font4.txt | gzip -c > test.gz

 

範例5先使用tar進行歸檔再進行gzip壓縮

[[email protected] home]# tar -cvf file.tar font3.txt font4.txt

font3.txt

font4.txt

[[email protected] home]# gzip file.tar

[[email protected] home]# ls -l file.tar.gz

-rw-r--r--. 1 root root 515  4月 29 23:35 file.tar.gz

 

範例6先gzip進行解壓.gz再使用tar解壓tar

[[email protected] home]# ls -l file.tar.gz

-rw-r--r--. 1 root root 515  4月 29 23:35 file.tar.gz

[[email protected] home]# gunzip file.tar.gz

[[email protected] home]# ls -l file.tar

-rw-r--r--. 1 root root 10240  4月 29 23:35 file.tar

[[email protected] home]# tar -xvf file.tar

font3.txt

font4.txt

 

 

 

8.3bzip2壓縮與bunzip2解壓

Bunzip2是另一種與bzip類似的壓縮技術,壓縮格式尾碼.bz2

 

範例1bzip2預設會刪除原檔案產生一個壓縮檔font3.txt.bz2

[[email protected] home]# bzip2 font3.txt

[[email protected] home]# ls -l font3.txt.bz2

-rw-r--r--. 1 root root 462  4月 29 18:27 font3.txt.bz2

 

範例2bunzip2解壓會刪除原壓縮檔解壓出檔案

[[email protected] home]# bunzip2 font3.txt.bz2

[[email protected] home]# ls -l font3.txt

-rw-r--r--. 1 root root 884  4月 29 18:27 font3.txt

 

範例3將font3.txt內容輸入,bzip2打包輸出重寫向到test.bz2

[[email protected] home]# cat font3.txt | bzip2 -c > test.bz2

 

範例4先使用tar進行歸檔再進行bzip2壓縮

[[email protected] home]# tar -cvf file.tar font3.txt

[[email protected] home]# ls -l file.tar

-rw-r--r--. 1 root root 10240  4月 30 00:16 file.tar

[[email protected] home]# bzip2 file.tar

[[email protected] home]# ls -l file.tar.bz2

-rw-r--r--. 1 root root 545  4月 30 00:16 file.tar.bz2

 

範例5先bzip2進行解壓.bz2再使用tar解壓tar

[[email protected] home]# ls -l file.tar.bz2

-rw-r--r--. 1 root root 545  4月 30 00:16 file.tar.bz2

[[email protected] home]# bunzip2 file.tar.bz2

[[email protected] home]# ls -l file.tar

-rw-r--r--. 1 root root 10240  4月 30 00:16 file.tar

[[email protected] home]# tar -xvf file.tar

font3.txt

 

 

 

8.4zip歸檔和壓縮

zip作為一種流行的壓縮格式,在gzip或bzip2使用沒那麼廣泛,但在網際網路上的檔案通常都採用這種格式。

 

範例1zip壓縮不會刪除原檔案, -r 選項對目錄和檔案進行遞迴壓縮。

[[email protected] home]# zip file.zip font3.txt

  adding: font3.txt (deflated 58%)

[[email protected] home]# zip -r file.zip file/

  adding: file/ (stored 0%)

  adding: file/file.zip (stored 0%)

  adding: file/abc/ (stored 0%)

  adding: file/abc/file.zip (stored 0%)

[[email protected] home]# ls -l file.zip

-rw-r--r--. 1 root root 1704  4月 30 00:46 file.zip

 

範例2unzip從zip檔案中提取內容,完成之後不會刪除zip壓縮

[[email protected] home]#unzip file.zip

Archive:  file.zip

   creating: file/

 extracting: file/file.zip          

   creating: file/abc/

 extracting: file/abc/file.zip

 

範例3 -u 選項更新壓縮歸檔檔案內容, -d 刪除壓縮歸檔檔案中的刪除內容

[[email protected] home]# zip file.zip -u font4.txt    #更新

  adding: font4.txt (deflated 58%)

[[email protected] mnt]# zip -d file.zip /file/abc/file.zip #刪除指定壓縮歸檔檔案目錄下的檔案

deleting: file/abc/file.zip

 

 

 

8.5、加密工具與散列

範例1gpg加密和解密文本,它採用密鑰簽名技術保護檔案內容。

[[email protected] home]# gpg -c font4.txt     #提示輸入加密密碼

[[email protected] home]# ls -l font4.txt.gpg

-rw-r--r--. 1 root root 429  4月 30 01:36 font4.txt.gpg

[[email protected] home]# gpg font4.txt.gpg    #輸入解密密碼進行解密

gpg: 3DES 加密過的資料

can‘t connect to `/root/.gnupg/S.gpg-agent‘: 沒有那個檔案或目錄

agpg: 以 1 個密碼加密

gpg: 警告:報文未受到完整的保護

 

範例2base64是一組類似編碼方案,它通過將ASCII字元轉換成以64為基數的形式來用ASCII字串描述位元據。Base64可以用來對編碼和解碼base64字串。

[[email protected] home]# cat file.txt

abc123

abc123

abc123

[[email protected] home]# base64 file.txt > outputfile.txt   #加密產生outputfile.txt加密檔案

[[email protected] home]# cat outputfile.txt

YWJjMTIzCmFiYzEyMwphYmMxMjMK

[[email protected] home]# base64 -d outputfile.txt > jiemifile.txt #解密outputfile.txt產生jimifile.txt解密檔案

[[email protected] home]# cat jiemifile.txt

abc123

abc123

abc123

 

 

 

8.6raync備份系統快照

rsync 可以對位於不同位置的檔案和目錄進行備份,它可以藉助差異計算以及壓縮技術來最小化資料轉送量。rsync還還支援網路資料轉送,rsync還會比較源端和目的端的檔案,只有檔案有更新時才進行複製。

 

範例1將來源目錄複製到目的端 ,  -a 選項歸檔, -v 顯示細節資訊或進度

標註:路徑格式而言,如果/bin末尾使用/,rsync會將/bin/目錄中的所有檔案複製至目的端。如果/bin沒有使用 / ,rsync會將/bin目錄本身複製至目的端。

[[email protected] home]# rsync -av  /bin/  /home/file  #將/bin/目錄中的檔案複製到/home/file目錄下

[[email protected] home]# rsync -av  /bin  /home/  #將/bin目錄複寫到/home/目錄下

[[email protected] home]# rsync  –av  /bin/  [email protected]:/home/file  #將/bin/目錄複寫到遠程主機/home/file目錄下

 

範例2--exclude 排除不在歸檔範圍內的部分檔案

[[email protected] home]# rsync -av /bin /home/ --exclude “*.txt”

 

 

 

8.7dd命令複製磁碟

  dd命令是同硬碟和分區打交道時,我們可能需要建立所有分區的副本或備份,而不僅僅是複製內容(不僅是各個硬碟分區,而且還包括引志記錄、分區表等資訊)。這時,我們就可以使用dd命令,它能夠用於複製任何類型的磁碟,如果硬碟、快閃記憶體、CD、DVD等。

 

dd格式如下:

dd  if=source  of=target  bs=block_size  count=count

其中:

if  代表輸入檔案或輸入裝置路徑

of  代表目標檔案或目標裝置路徑

bs  代表塊大小(通常以2的冪數形式給出,如果512 、1024、2048等)。Count是需要複製的塊數。

需要複製的位元組總數=塊大小 * count

通過指定count,我們可以限制從輸入檔案複製至目標的位元組數。如果不指定count,dd命令會對輸入檔案進行複製,直到遇見檔案結束標誌(EOF)為止。

範例1備份sda1分區,使用備份恢複分區。

[[email protected] home]# df -h

檔案系統               容量  已用  可用 已用%% 掛載點

/dev/sda2              97G  4.5G   87G   5% /

tmpfs                 996M  112K  996M   1% /dev/shm

/dev/sda1             485M   30M  430M   7% /boot

/dev/sda3              58G  188M   55G   1% /home

/dev/sr0              4.0G  4.0G     0 100% /media/CentOS_6.0_Final

[[email protected] home]# dd if=/dev/sda1 of=/home/sda1_boot.img   #備份分區

記錄了1024000+0 的讀入

記錄了1024000+0 的寫出

524288000位元組(524 MB)已複製,35.5123 秒,14.8 MB/秒

[[email protected] home]# ls -l sda1_boot.img

-rw-r--r--. 1 root root 524288000  5月  3 17:31 sda1_boot.img

[[email protected] home]# dd if=/home/sda1_boot.img of=/dev/sda1   #恢複分區

記錄了1024000+0 的讀入

記錄了1024000+0 的寫出

524288000位元組(524 MB)已複製,9.14704 秒,57.3 MB/秒

 

範例2永久刪除一個分區中所有資料,使用dd向該分區中寫入0傎,/dev/zero是一個字元裝置,它總是會返回字元 ’\0’

[[email protected] home]# dd if=/dev/zero of=/dev/sda1

 

範例3在容量相同的硬碟間進行複製,/dev/sda是原資料端,/dev/sdb目的資料端。

[[email protected] home]# dd if=/dev/sda of=/dev/sdb

[[email protected] home]# dd if=/dev/cdrom of=cdrom.iso   #製作CD ROM的鏡像(ISO檔案)

 

第8章:Shell指令碼歸檔與壓縮

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.