第十六部分(归档和备份)

2020-04-10

gzip

gzip 程序被用来压缩一个或多个文件。当执行 gzip 命令时,则原始文件的压缩版会替代原始文件。相对应的 gunzip 程序被用来把压缩文件复原为没有被压缩的版本。

[me@linuxbox ~]$ ls -l /etc > foo.txt
[me@linuxbox ~]$ ls -l foo.*
-rw-r--r-- 1 me me 15738 2008-10-14 07:15 foo.txt
[me@linuxbox ~]$ gzip foo.txt
[me@linuxbox ~]$ ls -l foo.*
-rw-r--r-- 1 me me 3230 2008-10-14 07:15 foo.txt.gz
[me@linuxbox ~]$ gunzip foo.txt.gz
[me@linuxbox ~]$ ls -l foo.*
-rw-r--r-- 1 me me 15738 2008-10-14 07:15 foo.txt

在这个例子里,我们创建了一个名为 foo.txt 的文本文件,其内容包含一个目录的列表清单。接下来,我们运行 gzip 命令,它会把原始文件替换为一个叫做 foo.txt.gz 的压缩文件。在 foo.* 文件列表中,我们看到原始文件已经被压缩文件替代了,并将这个压缩文件大约是原始文件的五分之一。我们也能看到压缩文件与原始文件有着相同的权限和时间戳。

gzip 命令有许多选项。这里列出了一些:
gzip选项

归档文件

一个常见的,与文件压缩结合一块使用的文件管理任务是归档。归档就是收集许多文件,并把它们捆绑成一个大文件的过程。归档经常作为系统备份的一部分来使用。当把旧数据从一个系统移到某种类型的长期存储设备中时,也会用到归档程序。

tar

在类 Unix 的软件世界中,这个 tar 程序是用来归档文件的经典工具。它的名字,是 tape archive 的简称,揭示了它的根源,它是一款制作磁带备份的工具。而它仍然被用来完成传统任务,它也同样适用于其它的存储设备。我们经常看到扩展名为.tar 或者.tgz 的文件,它们各自表示“普通”的 tar 包和被 gzip 程序压缩过的 tar 包。一个 tar 包可以由一组独立的文件,一个或者多个目录,或者两者混合体组成。命令语法如下:

tar mode[options] pathname...

-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压.tar文件

这里的 mode 是指以下操作模式(这里只展示了一部分,查看 tar 的手册来得到完整列表)之一:
tar模式

[root@VM_0_7_centos ~]# ls
foo.txt  jadebamboo.cn  lazy_dog.txt  ls-error.txt  ls-output.txt  ls.txt  PDF  shellTest  subdir  test.log
[root@VM_0_7_centos ~]# tar cf liu.tar foo.txt lazy_dog.txt 
[root@VM_0_7_centos ~]# ls
foo.txt  jadebamboo.cn  lazy_dog.txt  liu.tar  ls-error.txt  ls-output.txt  ls.txt  PDF  shellTest  subdir  test.log

我们可以看到模式 c 和选项 f,其被用来指定这个 tar 包的名字,模式和选项可以写在一起,而且不需要开头的短横线。注意,然而,必须首先指定模式,然后才是其它的选项。

要想列出归档文件的内容,我们可以这样做:

[root@VM_0_7_centos ~]# tar tf liu.tar 
foo.txt
lazy_dog.txt

为了得到更详细的列表信息,我们可以添加选项 v(verbose):

[root@VM_0_7_centos ~]# tar tvf liu.tar 
-rw-r--r-- root/root     10240 2020-04-10 13:54 foo.txt
-rw-r--r-- root/root        14 2020-04-04 19:11 lazy_dog.txt

现在抽取tar包中的文件:

[root@VM_0_7_centos ~]# rm -f foo.txt lazy_dog.txt 
[root@VM_0_7_centos ~]# ls
jadebamboo.cn  liu.tar  ls-error.txt  ls-output.txt  ls.txt  PDF  shellTest  subdir  test.log
[root@VM_0_7_centos ~]# 
[root@VM_0_7_centos ~]# tar xf liu.tar 
[root@VM_0_7_centos ~]# ls
foo.txt  jadebamboo.cn  lazy_dog.txt  liu.tar  ls-error.txt  ls-output.txt  ls.txt  PDF  shellTest  subdir  test.log

tar 命令另一个有趣的行为是它处理归档文件路径名的方式。默认情况下,路径名是相对的,而不是绝对路径。当以相对路径创建归档文件的时候,tar 命令会简单地删除路径名开头的斜杠。为了说明问题,我们将会重新创建我们的归档文件,但是这次指定用绝对路径创建:

[me@linuxbox foo]$ cd
[me@linuxbox ~]$ tar cf playground2.tar ~/playground

记住,当按下回车键后,∼/playground 会展开成 /home/me/playground,所以我们将会得到一个绝对路径名。接下来,和之前一样我们会抽取归档文件,观察发生什么事情:

[me@linuxbox ~]$ cd foo
[me@linuxbox foo]$ tar xf ../playground2.tar
[me@linuxbox foo]$ ls
home playground
[me@linuxbox foo]$ ls home
me
[me@linuxbox foo]$ ls home/me
playground

这里我们看到当我们抽取第二个归档文件时,它重新创建了 home/me/playground 目录,相对于我们当前的工作目录,∼/foo,而不是相对于 root 目录,作为带有绝对路径名的案例。这看起来似乎是一种奇怪的工作方式,但事实上这种方式很有用,因为这样就允许我们抽取文件到任意位置,而不是强制地把抽取的文件放置到原始目录下。

zip

zip 程序既是压缩工具,也是一个打包工具。
zip 命令最基本的使用中,可以这样唤醒 zip 命令:

zip options zipfile file...
zip -r zipfile direction // 递归压缩目录下的文件

使用 unzip 程序,来直接抽取一个 zip 文件的内容。

unzip -d direction zipfile // -d选项可以指定解压后的文件路径

对于 zip 命令(与 tar 命令相反)要注意一点,就是如果指定了一个已经存在的文件包,其被更新而不是被替代。这意味着会保留此文件包,但是会添加新文件,同时替换匹配的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值