1.gzip – 压缩一个或多个文件
当执行 gzip 命令时,则原始文件的压缩版会替代原始文件。相对应的 gunzip 程序被用来把压缩文件复原为没有被压缩的版本。
$ ls -l /etc > foo.txt
$ ls -l foo.*
-rw-r--r-- 1 me me 15738 2017-08-01 07:15 foo.txt
$ gzip foo.txt
$ ls -l foo.*
-rw-r--r-- 1 me me 3230 2017-08-01 07:15 foo.txt.gz
$ gunzip foo.txt.gz
$ ls -l foo.*
-rw-r--r-- 1 me me 15738 2017-08-01 07:15 foo.txt
参数:
-c 把输出写入到标准输出,并且保留原始文件。也有可能用–stdout 和 –to-stdout 选项来指定。
-d 解压缩。正如 gunzip 命令一样。也可以用 –decompress 或者 –uncompress 选项来指定.
-f 强制压缩,即使原始文件的压缩文件已经存在了,也要执行。也可以用 –force 选项来指定。
-h 显示用法信息。也可用 –help 选项来指定。
-l 列出每个被压缩文件的压缩数据。也可用 –list 选项。
-r 若命令的一个或多个参数是目录,则递归地压缩目录中的文件。也可用 –recursive 选项来指定。
-t 测试压缩文件的完整性。也可用 –test 选项来指定。
-v 显示压缩过程中的信息。也可用 –verbose 选项来指定。
-number 设置压缩指数。number 是一个在 1(最快,最小压缩)到9(最慢,最大压缩)之间的整数。数值 1 和 9 也可以各自用 –fast 和 –best 选项来表示。默认值是整数 6。
注:
(1)对应于 gzip 还有一个程序,叫做 zcat,它等同于带有 -c 选项的 gunzip 命令。它可以被用来如 cat 命令作用于 gzip 压缩文件
(2)zless
$ zcat foo.txt.gz | less //和zless 程序是相同的功能。
2.bzip2
与 gzip 程序相似,但是使用了不同的压缩算法,舍弃了压缩速度,而实现了更高的压缩级别
$ ls -l /etc > foo.txt
$ ls -l foo.txt
-rw-r--r-- 1 me me 15738 2017-08-01 13:51 foo.txt
$ bzip2 foo.txt
$ ls -l foo.txt.bz2
-rw-r--r-- 1 me me 2792 2017-08-01 13:51 foo.txt.bz2
$ bunzip2 foo.txt.bz2
3.tar – 归档文件
tar mode[options] pathname…
c 为文件和/或目录列表创建归档文件。
x 抽取归档文件。
r 追加具体的路径到归档文件的末尾。
t 列出归档文件的内容
//创建了一个名为 playground.tar 的 tar 包,其包含整个 playground 目录层次结果
$ tar cf playground.tar playground
//抽取 tar 包 playground 到一个新位置
$ mkdir foo
$ cd foo
$ tar xf ../playground.tar
//tar 命令经常结合 find 命令一起来制作归档文件
$ find playground -name 'file-A' -exec tar rf playground.tar'{}' '+'
使用 find 命令来匹配 playground 目录中所有名为 file-A 的文件,然后使用-exec行为,来唤醒带有追加模式(r)的 tar 命令,把匹配的文件添加到归档文件playground.tar 里面。
$ find playground -name 'file-A' | tar cf - --files-from=-| gzip > playground.tgz
使用 find 程序产生了一个匹配文件列表,然后把它们管道到 tar 命令中。如果指定了文件名“-”,则其被看作是标准输入或输出,这个 –file-from 选项导致 tar 命令从一个文件而不是命令行来读入它的路径名列表。最后,这个由 tar 命令产生的归档文件被管道到 gzip 命令中,然后创建了压缩归档文件 playground.tgz。此.tgz 扩展名是命名由 gzip 压缩的 tar 文件的常规扩展名。有时候也会使用.tar.gz 这个扩展名。
注:
“-”来表示标准输入/输出的惯例,也被大量的其它程序使用
–file-from 选项也可以用 -T 来指定
4.zip – 既是压缩工具,也是一个打包工具
//制作一个 playground 的 zip 版本的文件包
$ zip -r playground.zip playground
//使用 unzip 程序,来直接抽取一个 zip 文件的内容
$ cd foo
$ unzip ../playground.zip
注意:对于 zip 命令(与 tar 命令相反)要注意一点,就是如果指定了一个已经存在的文件包,其被更新而不是被替代。这意味着会保留此文件包,但是会添加新文件,同时替换匹配的文件。
//通过 -@ 选项,有可能把一系列的文件名管道到 zip 命令
$ cd
$ find playground -name "file-A" | zip -@ file-A.zip
使用 find 命令产生一系列与“file-A”相匹配的文件列表,并且把此列表管道到zip 命令,然后创建包含所选文件的文件包 file-A.zip
//把 ls 命令的输出管道到 zip 命令
$ ls -l /etc/ | zip ls-etc.zip -
5.同步文件和目录
rsync
rsync options source destination
这里 source 和 destination 是下列选项之一:
- 一个本地文件或目录
- 一个远端文件或目录,以
[user@]host:path
的形式存在 - 一个远端 rsync 服务器,由
rsync://[user@]host[:port]/path
指定
rsync 不支持远端到远端的复制
// -a 选项(递归和保护文件属性)和 -v 选项(冗余输出),来在 foo 目录中制作一个 playground 目录的镜像。
$ rsync -av playground foo