Linux归档压缩文件(tar | gzip)

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux归档压缩文件(tar | gzip)相关的知识,希望对你有一定的参考价值。

摘要

本文将介绍如何在 Linux 中打包和压缩文件,以及如何解压和解包。

引言

何谓打包文件?就是将多个文件或一个目录打包为一个大文件。Linux 中可以使用 tar 命令进行打包。tar 是一个古老的命令,其最初目的是用于将文件备份到磁带上,tar 即英文 tape archive 的缩写。tar 命令执行打包的原理很简单,就是将多个文件前后连在一起,形成一个大文件。tar 命令并不对文件进行压缩。

何谓压缩文件?就是将多个文件或一个目录压缩为一个大文件。Linux 中可以使用 gzip 命令进行压缩。gzip 压缩后的文件大小会小于压缩前所有文件大小之和。但 gzip 命令无法直接将多个文件或目录压缩为单个包,因此一般需要搭配 tar 来使用。

用法

打包

使用 tar 命令进行打包至少得跟两个选项:-c 和 -f,拼接在一起就是 -cf,-c 表示创建打包文件,-f 指定打包的文件名。其后还要跟两个参数:[打包文件名] 和 [要打包的文件/列表],示例如下:

  • tar -cf test.tar *.txt:将当前工作目录下所有以 .txt 结尾的文件打包为一个名为 test.tar 的文件
  • tar -cf test.tar test:将当前工作目录下的 test 目录打包为一个名为 test.tar 的文件
  • tar -tf test.tar:列出归档内容(不解包)
  • tar -f test.tar --delete 1.txt:从 test.tar 归档中删除名为 1.txt 的文件
  • tar -f test.tar -A result.tar:合并 result.tar 到 test.tar 中
  • tar -f test.tar -r 1.txt:向 test.tar 中添加 1.txt
  • tar -xf test.tar -C test:解包 test.tar 到当前目录
  • tar -xf test.tar -C test:解包 test.tar 到 -C 参数指定的 test 目录下
$ ls
1.txt  2.txt  result
$ tar -cf test.tar *.txt
$ tar -tf test.tar
1.txt
2.txt
$ ls
1.txt  2.txt  result  test.tar
$ tar -f test.tar --delete 1.txt
$ tar -tf test.tar
2.txt
$ tar -cf result.tar result/
$ tar -f test.tar -A result.tar 
$ tar -tf test.tar 
2.txt
result/
result/3.txt
$ tar -f test.tar -r 1.txt
$ tar -tf test.tar
2.txt
result/
result/3.txt
1.txt
$ mkdir test
$ tar -xf test.tar -C test
$ ls -R test
test:
1.txt  2.txt  result

test/result:
3.txt

注意,用 ls -l 命令可以发现,打包后的 .tar 文件大小比打包之前的所有文件大小之和还要大,原因是打包时会添加一些额外信息,同时也印证了 tar 命令是不会压缩文件的。

压缩

Linux 中文件压缩命令有多种,其中最常用的就是 gzip,其用法如下:

  • gzip test.tar:压缩 test.tar(会自动覆盖原归档并添加 .gz 的后缀用于标识,默认压缩比为 6)
  • gzip -d test.tar.gz:解压 test.tar.gz
  • gzip -9 test.tar:使用最大压缩比 9 来压缩 test.tar (压缩速度最慢,但压缩后的文件最小)

打包+压缩↔️解压+解包

虽然 gzip 命令可以提供高效的压缩,但不提供打包功能,也就是说 gzip 只能单个地压缩文件,而不能将多个文件或整个目录压缩到一个文件中。因此,gzip 命令往往要和 tar 命令一起连用,一般先使用 tar 打包,再用 gzip 压缩。反过来,则要使用 gzip 解压,再使用 tar 解包。

为方便起见,tar 还提供了特殊选项可以调用 gzip 命令,可以让打包压缩和解压解包一气呵成。这个选项就是 -z,下面我们给出实例来进行说明:

  • tar -czf test.tar.gz *.txt:将当前工作目录下所有以 .txt 结尾的文件打包并压缩为一个名为 test.tar.gz 的文件
  • tar -xzf test.tar.gz -C test:解压并解包 test.tar.gz 到 -C 参数指定的 test 目录下
$ ls
1.txt  2.txt  result
$ tar -czf test.tar.gz *.txt
$ ls
1.txt  2.txt  result  test.tar.gz
$ tar -tzf test.tar.gz
1.txt
2.txt
$ mkdir test
$ tar -xzf test.tar.gz -C test
$ ls test
1.txt  2.txt

参考

中国大学 MOOC | Linux系统管理 | 主题04 | 小节 1 | 归档压缩文件

以上是关于Linux归档压缩文件(tar | gzip)的主要内容,如果未能解决你的问题,请参考以下文章

Linux下tar压缩与解压缩文件

Linux下的tar归档及解压缩功能详解

Linux压缩/解压缩命令

linux之压缩归档,tar

linux 下 压缩命令都有哪些?那个压缩比最高?

Linux命令应用大词典-第16章 归档和压缩