非常非常非常簡要的描述而已。 壓縮 壓縮的簡要原理是通過一些演算法,拿CPU的計算時間去換磁碟上存儲的空間。同時還可節省網路傳輸中的帶寬。 對於文本文件的壓縮效果比較好,對二進位程式、圖片等文件的壓縮效果就很差。 compress, uncompress 文件名:*.Z 古老的壓縮工具,目前已經不使用 ...
非常非常非常簡要的描述而已。
壓縮
壓縮的簡要原理是通過一些演算法,拿CPU的計算時間去換磁碟上存儲的空間。同時還可節省網路傳輸中的帶寬。
對於文本文件的壓縮效果比較好,對二進位程式、圖片等文件的壓縮效果就很差。
compress, uncompress
文件名:*.Z
古老的壓縮工具,目前已經不使用。
gzip, gunzip, zcat
文件名:*.gz
gzip用於壓縮文件,簡要語法。
# gzip [OPTION] FILE...
FILE是待壓縮的文件名,可多個。
[root@C7 tmp]# ls -l total 364 -rw-r--r--. 1 root root 18104 Jan 3 2018 functions -rw-r--r-- 1 root root 22384 Apr 17 14:20 lvm_mount_point.xfsdump -rw------- 1 root root 327049 Apr 23 16:20 messages [root@C7 tmp]# gzip functions lvm_mount_point.xfsdump messages [root@C7 tmp]# ls -l total 64 -rw-r--r-- 1 root root 5021 Jan 3 2018 functions.gz -rw-r--r-- 1 root root 769 Apr 17 14:20 lvm_mount_point.xfsdump.gz -rw------- 1 root root 50126 Apr 23 16:20 messages.gz
壓縮後,會自動刪除源文件,並生成.gz名稱的壓縮文件。
-d:用於解壓縮。等同於gunzip命令。
[root@C7 tmp]# gzip -d functions.gz [root@C7 tmp]# gunzip functions.gz
同理,解壓後,壓縮文件消失,壓縮前的源文件生成。
-# --fast --best:“#”表示一個數字,取值為1~9,表示壓縮的效果。1表示最快--fast,9表示最好--best。預設是6。
-c:表示將壓縮後的數據流輸出到STDOUT,不會修改源文件。結合重定向可以實現壓縮文件時不刪除源文件。
[root@C7 tmp]# ls -l functions* -rw-r--r-- 1 root root 18104 Jan 3 2018 functions [root@C7 tmp]# gzip -c functions > functions.gz [root@C7 tmp]# ls -l functions* -rw-r--r-- 1 root root 18104 Jan 3 2018 functions -rw-r--r-- 1 root root 5021 Apr 23 16:51 functions.gz
對於文本文件壓縮後的文件,是無法使用諸如cat等文本查看器直接查看了,想基於壓縮文件查看的話,可使用zcat。
[root@C7 tmp]# zcat functions.gz | tail "x$1" = xcondrestart ] ; then systemctl_redirect $0 $1 exit $? fi fi strstr "$(cat /proc/cmdline)" "rc.debug" && set -x return 0
bzip2, bunzip2, bzcat
文件名:*.bz2
命令功能與用法等同於gzip系列。
在gzip中想要在壓縮的時候保留源文件,需要通過-c選項結合重定向,而在bzip2中,可直接通過-k選項。
-k --keep:壓縮時,不刪除源文件。
[root@C7 tmp]# bzip2 -k lvm_mount_point.xfsdump [root@C7 tmp]# ls -l lvm_mount_point.xfsdump* -rw-r--r-- 1 root root 22384 Apr 17 14:20 lvm_mount_point.xfsdump -rw-r--r-- 1 root root 764 Apr 17 14:20 lvm_mount_point.xfsdump.bz2
xz, unxz, xzcat
文件名:*.xz
命令功能與用法等同於bzip2系列。含-k選項。
壓縮小結
壓縮效果:xz>bzip2>gzip。
可通過file命令查看壓縮文件的實際/內部格式,不可以僅通過文件的擴展名來判斷一個文件的類型,擴展名僅作為用戶識別。
[root@C7 tmp]# file functions.gz lvm_mount_point.xfsdump.bz2 messages.xz functions.gz: gzip compressed data, was "functions", from Unix, last modified: Wed Jan 3 00:29:40 2018 lvm_mount_point.xfsdump.bz2: bzip2 compressed data, block size = 900k messages.xz: XZ compressed data
歸檔
上述的壓縮命令,是無法實現將多個文件合併壓縮為一個壓縮文件,或者針對目錄進行壓縮的。
[root@C7 tmp]# file init.d/ init.d/: directory [root@C7 tmp]# gzip init.d/ gzip: init.d/ is a directory -- ignored [root@C7 tmp]# bzip2 init.d/ bzip2: Input file init.d/ is a directory. [root@C7 tmp]# xz init.d/ xz: init.d/: Is a directory, skipping
想實現該需求,就需要歸檔。
歸檔的作用是可以將多個文件/目錄合併為一個檔案文件(archive),即類似於Windows上的WinRAR的打包操作。
歸檔工具有兩種,cpio和tar,前者是比較古老的命令,已逐漸被後者所取代,因此本文簡述一下後者的使用即可。
創建檔案
檔案文件名:*.tar、*.tar.gz、*.tar.bz2、*.tar.xz
# tar -c[zjJ]f ARCH_FILE FILE...
-c:表示創建檔案。
-f:指定檔案文件名(ARCH_FILE),後面必須跟上檔案文件名,否則報錯。例如“-fc”會報錯。
FILE:待歸檔文件/目錄。
在歸檔的時候,可以指定壓縮。tar的壓縮本質上是調用了上文所說到的壓縮工具,而不是它本身就具備了壓縮的能力。
-z:使用gzip壓縮。
-j:使用bzip2壓縮。
-J:使用xz壓縮。
[root@C7 tmp]# tar -czf test.tar.gz functions init.d/ lvm_mount_point.xfsdump messages [root@C7 tmp]# file test.tar.gz test.tar.gz: gzip compressed data, from Unix, last modified: Tue Apr 23 17:48:25 2019
歸檔操作不會刪除源文件。因此歸檔壓縮後,源文件“functions init.d/ lvm_mount_point.xfsdump messages”還存在。
展開檔案
# tar -xf ARCH_FILE [-C EXTRACT_DIR]
tar展開歸檔,會自動覆蓋已有文件。不需要指定原壓縮格式,tar會自動識別。
[root@C7 tmp]# rm -rf functions lvm_mount_point.xfsdump messages init.d/ [root@C7 tmp]# tar -xf test.tar.gz [root@C7 tmp]# ls -ld functions lvm_mount_point.xfsdump messages init.d/ -rw-r--r-- 1 root root 18104 Jan 3 2018 functions drwxr-xr-x 2 root root 70 Apr 23 17:31 init.d/ -rw-r--r-- 1 root root 22384 Apr 17 14:20 lvm_mount_point.xfsdump -rw------- 1 root root 327049 Apr 23 16:20 messages
-C EXTRACT_DIR:用於指定歸檔展開的路徑,預設不指定的話,是在當前目錄下。
[root@C7 tmp]# mkdir new_dir [root@C7 tmp]# tar -xf test.tar.gz -C new_dir/ [root@C7 tmp]# ls -l new_dir/ total 364 -rw-r--r-- 1 root root 18104 Jan 3 2018 functions drwxr-xr-x 2 root root 70 Apr 23 17:31 init.d -rw-r--r-- 1 root root 22384 Apr 17 14:20 lvm_mount_point.xfsdump -rw------- 1 root root 327049 Apr 23 16:20 messages
查看檔案
# tar -tf ARCH_FILE
[root@C7 tmp]# tar -tf test.tar.gz functions init.d/ init.d/README init.d/functions init.d/netconsole init.d/network lvm_mount_point.xfsdump messages