Skip to content

Linux 打包和压缩文件

Linux 中打包工具事实的标准是tar,而后起之秀是7zip。如果想要跨平台使用zip可能是最好的选择。

Note

zip 由于编码的问题,在 Windows 下中文会出现乱码。不过它由于出现的早所有的操作系统默认对其提供了支持因此是兼容性考虑交换数据的首选。

文件压缩

通常我们不需要直接与压缩工具交互,对于 zip/unzip、7zip 等都会内置了压缩算法在打包的同时自动为我们处理压缩。而 tar 也提供了相应的选项来直接将打包结果传递给对应的压缩程序并输出。

如果我们只需要对单一文件进行压缩,或者在管道使用,Linux 主流的压缩命令有以下几个:

  • gzip: 标准的 GNU 文件压缩工具,基于 Deflate 算法,通常以 .gz 作为后缀
  • lzma: 基于 lzma 算法的压缩工具,常用的后缀名是 .lzma 目前并不常用
  • xz: 基于 lzma 算法的压缩工具,常用的后缀名是 .xz ,由于其压缩比较好是冷备份的首选
  • bzip2: Burrow Wheeler 算法的压缩工具,他的压缩比要比 gzip 和 Deflate 高,但是速度较慢使用的比较少,常用的后缀名是 .bz2
  • zstd: Zstandard 压缩实现,类似 Deflate 算法,提供了更加快速地压缩和解压缩实现。常用的后缀名是 .zst

以上的方法都提供了-z/--compress来进行压缩,-d/--decompress来进行解压缩。

压缩文本文件查看

这些压缩工具还提供了 xxcat 类命令来将其中的内容输出到 stdout 中:

压缩命令 cat 命令
gzip zcat
lzma/xz xzcat
bzip2 bzcat
zstd zstdcat

Tips

压缩命令也可提供了一个 -c/--stdout 参数来实现等同于 xxcat 的效果

他们通常结合管道运算符来预览/筛选其中的内容:

Bash
# 预览 2 4 6 行,在第七行退出(注意一定要退出,要不会解压所有文件)
# 如果想要预览前10行 '1,10p;11q'
zcat somefile.tar.gz | sed -n '2p;4p;6p;7q'