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 命令有许多选项。这里列出了一些:
归档文件
一个常见的,与文件压缩结合一块使用的文件管理任务是归档。归档就是收集许多文件,并把它们捆绑成一个大文件的过程。归档经常作为系统备份的一部分来使用。当把旧数据从一个系统移到某种类型的长期存储设备中时,也会用到归档程序。
tar
在类 Unix 的软件世界中,这个 tar
程序是用来归档文件的经典工具。它的名字,是 tape archive
的简称,揭示了它的根源,它是一款制作磁带备份的工具。而它仍然被用来完成传统任务,它也同样适用于其它的存储设备。我们经常看到扩展名为.tar
或者.tgz
的文件,它们各自表示“普通”的 tar
包和被 gzip
程序压缩过的 tar
包。一个 tar
包可以由一组独立的文件,一个或者多个目录,或者两者混合体组成。命令语法如下:
tar mode[options] pathname...
-c 产生.tar打包文件
-v 显示详细信息
-f 指定压缩后的文件名
-z 打包同时压缩
-x 解压.tar文件
这里的 mode 是指以下操作模式(这里只展示了一部分,查看 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
命令相反)要注意一点,就是如果指定了一个已经存在的文件包,其被更新而不是被替代。这意味着会保留此文件包,但是会添加新文件,同时替换匹配的文件。