当我们建站或者和 Linux 系统传输文件时,使用文件夹或者原文件直接传输,不仅浪费带宽,通常也需要花费更多的时间,对源文件进行打包和压缩,再传输,往往是一个优雅的决定。Tar 和 gzip 是 Linux 系统下创建打包文件和压缩文件的标准命令,而且系统自带的,纯天然。根本上来说,它的功能就是把大量的文件打包成一个文件,并将这个文件进行压缩以节省空间,tar 和 gzip 能够通过结合一些简单的操作提供强大的功能。
本文将对 tar 和 gzip 的使用做个简介,同时会附上一些实例,以帮助理解。
tar 命令
tar命令的复杂主要是因为它繁多的参数与设置。你可以用它来创建和操作打包文件,例如给定一个打包文件~/backup-archive.tar
,以下命令将解压该文件到当前目录:
tar -xf ~/backup-archive.tar
其中-x是解压抽取(来自英文单词extract,这样是不是容易理解一些),-f是指定文件路径和文件名。
如果要将~/backup
目录下所有的文件打包成一个文件,可以使用如下命令:
tar -c ~/backup > backup-archive.tar
默认情况下,tar是将打包文件的内容发送到标准输出,通过“>”重写向输出到指定文件,-c表示打包(来自英文单词archive)你可以增加-f参数以达到上述效果,如下:
tar -cf backup_archive.tar ~/backup
-f 参数是指定打包后的文件名。你也可以增加-v参数来显示命令的详细程度,如下:
tar -cvf backup_archive.tar ~/backup
这将会把被打包的文件清单显示在屏幕上。注意:参数的顺序有时也是很重要的,-f参数必须放在最后,所以-cvf 可以成功,而-cfv 执行会失败。
gzip 命令
gzip和gunzip命令提供了对文件的压缩和解压功能,然后gzip仅能作用在单个文件上。如下命令将会使full-text.txt
文件压缩成full-text.txt.gz
文件:
gzip full-text.txt
你可以使用如下任一一个命令来解压该文件:
gunzip full-text.txt.gz
gzip -d full-text.txt.gz
你可以增加-v 参数来显示压缩率
gzip -v full-text.txt
gzip接受标准的输入,因此可以压缩流文件,如下命令所示:
cat full-text.txt | gzip > full-text.txt.gz
gzip使用的压缩算法可以配置文件的压缩率,以在压缩时间和空间节省之间找到一个平衡点。这个压缩率通过-1至-9之间的一个值来控制,默认的值是-6。Gzip的–fast 参数相当于-1,–best 参数相当于-9。可以尝试以下命令并观察其输出
gzip --best -v full-text.txt
gzip --fast -v full-text.txt
gzip -3 -v full-text.txt
gzip -8 -v full-text.txt
创建打包文件
如上所述,将~/backup
目录下所有的文件打包的命令如下:
tar -c ~/backup > backup-archive.tar
如果不想使用标准输出的重定向来创建文件,则使用如下命令:
tar -cf backup_archive.tar ~/backup
再次强调命令的参数顺序,-f 必须在打包文件名之前,最后一个参数值是被打包的文件或是目录。
压缩打包文件
使用 gzip 压缩
tar已经可以和公共压缩库或者工具例如gzip结合,对打包文件进行有效的压缩,命令如下:
tar -czf ~/backup-archive.tar.gz ~/backup/
-z就表示使用gzip进行压缩。
使用 Bzip2 和 Xzip 压缩
tar也可以使用其他提供更好压缩率的压缩工具例如bzip,命令如下:
tar -cjf ~/backup-archive.tar.bz2 ~/backup/
或者xzip工具,命令如下:
tar -cJf ~/backup-archive.tar.xz ~/backup/
根据文件扩展名自动选取压缩工具
为了减少tar参数与相应打包文件扩展名之间对应关系的记忆,可以使用-a参数,如下命令则会自动选择gzip工具压缩:
tar -czf ~/backup-archive.tar.gz ~/backup/
tar -caf ~/backup-archive.tar.gz ~/backup/
tar -caf ~/backup-archive.tgz ~/backup/
类似的,如下命令就会选择bzip工具压缩:
tar -cjf ~/backup-archive.tar.bz2 ~/backup/
tar -caf ~/backup-archive.tar.bz2 ~/backup/
tar -caf ~/backup-archive.tb2 ~/backup/
tar -caf ~/backup-archive.tbz ~/backup/
原理都是基于打包文件的扩展名.tar.xz 和.txz
查看打包文件的内容
如果你想了解打包文件内的文件清单,可以使用tar的如下命令:
tar -tf ~/backup-archive.tar
上述命令能使用在压缩或者未压缩的打包文件。
解压打包文件
要解压使用tar命令打包的文件,命令如下:
tar -xf ~/backup-archive.tar
上述命令只能作用于未压缩的文件,并将文件解压到当前目录,要对压缩文件进行解压可以使用如下命令:
tar -xzvf ~/backup-archive.tar.gz
其中-x 参数表示解压文件,-z 参数表示使用gzip工具解压文件,-v 参数显示解压后的文件清单,-f 指定了要解压的文件名。
如果要使用bzip2工具解压,可以使用如下命令:
tar -xcvi ~/backup-archive.tar.bz2
另外tar提供-k参数,该参数表示以防解压后的文件替换已有文件中的同名文件。
压缩日志文件
一般日志文件都比较大,或者它们能在短时间内增长成大文件,所幸的是它们都是文本文件,压缩效率很高。一般情况下日志文件是独立且唯一的,那就不需要用tar命令打包,直接使用gzip命令进行压缩即可,如下:
gzip /var/log/mail.log
该命令会产生mail.log.gz文件替换原文件/var/log/mail.log
,通过如下命令解压日志文件查看内容:
gunzip /var/log/mail.log.gz
一般情况下,不需要完全解压后才能访问日志内容,gzip工具包含了传统的系统命令来查看压缩文件的内容,例如zcat相当于cat,zgrep相当于grep,zless相当于less。