Linux 下常用的归档压缩方式

很多时候,通过互联网发送或接收大文件和图片是一件令人头疼的事。压缩及解压缩工具正好可以应对这个问题。下面让我们快速浏览一些可以使得我们的工作更加轻松的开源工具。

Tar

Tar 由 Tape archiver(磁带归档器) 衍生而来,最初被用来在磁带上归档和存储文件。Tar 是一个 GNU 软件,它可以压缩一组文件(归档),或提取它们以及对已有的归档文件进行相关操作。在存储、备份以及传输文件方面,它是很有用的。在创建归档文件时,Tar 可以保持原有文件和目录结构不变。通过 Tar 归档的文件的后缀名为 .tar。

基本用法如下:

a) 创建归档 (c / –create)
shell> tar --create --verbose --file=archive.tar sakila-data.sql sakila-schema.sql world-schema.sql 
或
shell> tar cvf archive.tar sakila-data.sql sakila-schema.sql world-schema.sql
sakila-data.sql
sakila-schema.sql
world-schema.sql

shell> ls
archive.tar  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

b) 列出归档文件内容 ( t / –list)
shell> tar tvf archive.tar 
-rw-r--r-- root/root   3231472 2015-04-02 22:59 sakila-data.sql
-rw-r--r-- root/root     23067 2015-04-02 22:59 sakila-schema.sql
-rw-r--r-- root/root    397011 2015-04-02 22:59 world-schema.sql

c) 提取归档 (x / –extract)
shell> tar xvf archive.tar

# 从归档中提取后缀名为 *.h 的文件。
tar xvf archive.tar --wildcards '*.h' 

d) 对归档文件进行更新 ( u / –update)
shell> tar uvf archive.tar create.sql 
create.sql

e) 从归档中删除文件 (–delete)
#从压缩包archive.tar 中删除文件 create.sql
shell> tar --delete -f archive.tar create.sql 
shell> tar tvf archive.tar 
-rw-r--r-- root/root   3231472 2015-04-02 22:59 sakila-data.sql
-rw-r--r-- root/root     23067 2015-04-02 22:59 sakila-schema.sql
-rw-r--r-- root/root    397011 2015-04-02 22:59 world-schema.sql

f) 压缩选项:

-a, --auto-compress        使用归档后缀名来决定压缩程序
-I, --use-compress-program=PROG
                         通过 PROG 过滤(必须是能接受 -d
                         选项的程序)
-j, --bzip2                通过 bzip2 过滤归档
-J, --xz                   通过 xz 过滤归档
  --lzip                 通过 lzip 过滤归档
  --lzma                 通过 lzma 过滤归档
  --lzop
  --no-auto-compress     不使用归档后缀名来决定压缩程序
-z, --gzip, --gunzip, --ungzip   通过 gzip 过滤归档
-Z, --compress, --uncompress   通过 compress 过滤归档

shell> tar czvf archive.tar.gz *.sql      
shell> tar cjvf archive.tar.bz2 *.sql
shell> tar zxvf archive.tar.gz
shell> tar jxvf archive.tar.bz2

更加具体的使用方法请参考 tar 主页。

Gzip / Gunzip

Gzip 即 GNU zip,它是一个被广泛用于 Linux 操作系统中的压缩应用,被其压缩的文件的后缀名为*.gz 。

基本用法如下:

a) 压缩文件
shell> gzip archive.tar  #单独每个文件将压缩。
shell> ls
archive.tar.gz  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

通常在压缩完成后,它会将原来的文件删除。我们可以使用 -c 选项来保留原来的文件。
shell> gzip -c archive.tar > archive.tar.gz  #压缩后保留原有文件
shell> ls
archive.tar  archive.tar.gz  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

shell> gunzip archive.tar.gz 
shell> ls
archive.tar  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

将一组文件压缩到一个单独的文件中
shell> cat *.sql | gzip > archive.gz   #压缩一组文件
shell> ls
archive.gz  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

b) 检查压缩比
被压缩文件的压缩比可以使用 ‘-l’ 选项来进行检验。
shell> gzip -l archive.tar.gz    #检查压缩率
   compressed        uncompressed  ratio uncompressed_name
       763759             3655680  79.1% archive.tar

c) 解压文件
Gunzip 用来解压文件,在这里,原有的(压缩)文件在被解压后同样会被删除。使用 -c选项来保留原始文件。
shell> gzip -d archive.tar.gz  
或 
shell> gunzip archive.tar.gz
shell> ls
archive.gz  archive.tar  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

更多细节可以参考 gzip 主页 。

Bzip2 / Bunzip2

同 gzip 一样,Bzip2 也是一个压缩工具,与其他传统的工具相比,它可以将文件压缩到更小,但其缺点为:运行速度比 gzip 慢。

基本用法如下:

a) 压缩文件
一般情况下,针对压缩而言,Bzip2 不用什么选项,将被压缩的文件被传递为它的参数。
每个文件被单独压缩,且压缩文件以 ‘bz2′ 为后缀名。

shell> bzip2 *.sql
shell> ls
create.sql.bz2  sakila-data.sql.bz2  sakila-schema.sql.bz2  world-schema.sql.bz2

文件压缩
使用 ‘-k’ 选项可以使得在压缩或解压缩之后保留原有的文件。
shell> bzip2 -k *.sql    #在压缩后保留原有文件
shell>  ls
create.sql      sakila-data.sql      sakila-schema.sql      world-schema.sql
create.sql.bz2  sakila-data.sql.bz2  sakila-schema.sql.bz2  world-schema.sql.bz2

b) 解压
‘-d’ 选项被用来解压缩。
shell> bzip2 -d *.bz2
shell> ls
create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

shell> bunzip2 *.bz2
shell> ls
create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql
bunzip2 可以解压后缀名为 bz2, bz, tbz2 和 tbz 的文件。带有 tbz2 和 tbz 的文件在压缩后,后缀名将变为’.tar’ 。

7-zip

7-zip 是另一个开源压缩软件。它使用 7z 这种新的压缩格式,并支持高压缩比。因此,它被认为是比先前提及的压缩工具更好的软件。在 Linux 下,可以通过 p7zip 软件包得到,该软件包里包含 3 个二进制文件: 7z, 7za 和 7zr,可以参考 p7zip wiki 来了解这三个二进制文件之间的不同。归档文件以 .7z 为后缀名。

基本用法如下:

a) 创建归档
shell> 7za a -t7z archive.7z *.sql   #创建一个归档文件

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)
Scanning

Creating archive archive.7z

Compressing  create.sql      
Compressing  sakila-data.sql      
Compressing  sakila-schema.sql      
Compressing  world-schema.sql      

Everything is Ok
shell> ls
archive.7z  create.sql  sakila-data.sql  sakila-schema.sql  world-schema.sql

b) 列出归档包含文件
shell> 7za l archive.7z   #列出归档中包含的文件

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Listing archive: archive.7z

--
Path = archive.7z
Type = 7z
Method = LZMA
Solid = +
Blocks = 1
Physical Size = 554670
Headers Size = 226

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2015-04-02 23:09:37 ....A            1       554444  create.sql
2015-04-02 22:59:19 ....A      3231472               sakila-data.sql
2015-04-02 22:59:19 ....A        23067               sakila-schema.sql
2015-04-02 22:59:19 ....A       397011               world-schema.sql
------------------- ----- ------------ ------------  ------------------------
                               3651551       554444  4 files, 0 folders

c) 提取归档文件
shell> rm -rf *.sql
shell> 7za e archive.7z 

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Processing archive: archive.7z

Extracting  create.sql
Extracting  sakila-data.sql
Extracting  sakila-schema.sql
Extracting  world-schema.sql

Everything is Ok

Files: 4
Size:       3651551
Compressed: 554670

d) 更新归档文件
shell> touch new-file
shell> 7za u archive.7z new-file 

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Scanning

Updating archive archive.7z

e) 从归档文件中删除文件
shell> 7za d archive.7z new-file  #删除new-file文件

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,1 CPU)

Updating archive archive.7z


Everything is Ok

压缩效果简单对比

shell> tar cvf archive.tar *.sql 
shell> gzip -c archive.tar > archive.tar.gz
shell> bzip2 -k archive.tar
shell> 7za a -t7z archive.tar.7z archive.tar

shell> time gzip -c archive.tar > archive.tar.gz
real    0m0.253s
user    0m0.158s
sys     0m0.094s

shell> time bzip2 -k archive.tar
real    0m0.687s
user    0m0.515s
sys     0m0.171s

shell> time 7za a -t7z archive.tar.7z archive.tar
real    0m2.992s
user    0m1.046s
sys     0m1.938s

shell> ll -h
总用量 5.4M
-rw-r--r--. 1 root root 3.5M  4月  3 00:48 archive.tar
-rw-r--r--. 1 root root 543K  4月  3 00:55 archive.tar.7z
-rw-r--r--. 1 root root 572K  4月  3 00:48 archive.tar.bz2
-rw-r--r--. 1 root root 746K  4月  3 00:55 archive.tar.gz

参考:
http://linux.cn/article-5131-1.html
http://linoxide.com/tools/linux-compress-decompress-tools/

整理自网络

Svoid
2015-04-02

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29733787/viewspace-1551807/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29733787/viewspace-1551807/

你可能感兴趣的:(Linux 下常用的归档压缩方式)