当前位置:首页>Linux>009.Linux的“边角料”与“冷知识”——文件归档与压缩

009.Linux的“边角料”与“冷知识”——文件归档与压缩

  • 2026-09-02 20:30:42
009.Linux的“边角料”与“冷知识”——文件归档与压缩

Linux系统中,文件/目录归档和压缩是两个不同但又经常被一起使用的概念,它们的工作原理和作用完全不同,本文将帮助你建立文件归档和压缩的定义、用途,厘清常用但易混淆的Linux小知识。

什么是文件归档

归档,Archiving,是把多个文件或目录打包成合并成一个整体,通常称为tarball,占用硬盘的总空间不变。它通常保留了文件的结构、权限、属主和时间戳等Meta元数据。

归档的目的是方便存储、备份和传输,它并不在意文件大小,文件归档前和归档后的大小几乎不变。

Linux系统中典型的归档工具是 tar(Tape Archiver的缩写)。

什么是文件压缩

压缩,Compression,是通过不同算法来减少文件占用的硬盘空间,压缩后的文件因算法不同会自动形成不同的文件后缀名,如.tar.gz、.tar.bz2、.tar.xz、.tar.zst、.zip、.rar、7z等等。

压缩的目的是为了节省存储空间和加快文件传输,节省传输时间,它并不关心和保留文件的元数据。

值得注意的是,Linux系统中常用的压缩工具一般只能压缩单个文件流,这也是为什么在需要压缩多个文件或目录时一般会联合tar归档工具一起使用的底层原因。

Linux系统中典型的压缩工具是gzip、bzip2、xz,其他常见的压缩工具还有7zip、rar、Zstandard(zstd)等(需要手动安装)。

tar命令详解

大多数使用场景都是对多个文件/目录进行批量操作,这需要先进行文件归档,再进行文件压缩。

一个典型的文件归档压缩处理逻辑是:

c(创建)→ j(bzip2压缩)→ v(显示详情)→ f(指定文件名)

tar命令实现:
tar -czvf file.tar.gz /path/to/files

tar命令核心选项有:

    -c,--create 创建,创建新的归档文件;

    -x,--extract 提取,解压/解包归档文件;

    -t,--list 列表,查看归档文件中的内容列表;

    -r,--append 追加,向已存在的归档文件末尾添加文件;

    -u,--update 更新,只追加比归档中更新的文件;  # 类似替换的效果

    -d,--diff 比较,比较归档与文件系统中的差异。

    压缩算法选项:

      -z,--gzip  通过gzip压缩,自动生成.tar.gz或.tgz后缀文件;

      -j,--bzip2 通过bzip2压缩,自动生成.tar.bz2或.tbz2后缀文件;

      -J,--xz 通过xz压缩,自动生成.tar.xz后缀文件;

      --lzma 通过LZMA压缩,自动生成.tar.lzma后缀文件;

      --zstd 通过Zstandard压缩,自动生成.tar.zst后缀文件。

      其他常见辅助选项:

        -v,--verbose 详细输出,显示正在处理的文件列表;

        -f,--file 文件,制定归档文件名(选项后必须紧跟文件名);

        -C,--directory 目录,切换到指定目录进行操作;  #指定解压目录等

        -p,--permissions 保留权限,保留原始文件权限属性;

        -P,--absolute-names 绝对路径,保留文件名前的绝对路径;  #慎用

        --exclude 排除,排除指定文件或目录。

        归档压缩联合使用

        1. 对指定目录下所有文件进行归档压缩:

          tar -czvf file.tar.gz /path/to/files  #czvf=create+gzip+verbose+file
        2. 对压缩文件进行解压解包:

          tar -xzvf file.tar.gz [-C /target/to/unzips]  #xzvf=extract+gzip+verbose+file -C 指定解压到什么路径
        3. 查看归档文件内文件列表信息:

          tar -tf file.tar.gz  #tf=list+file,只查看内容,不解压

        扩展

        一个有趣的现象,不知道你发现没有:

        按照逻辑顺序,在对一个压缩包进行解压解包操作时,理论上应该是先解压 -z,后解包 -x,但为什么常规写法是tar -xzvf 而不是tar -zxvf呢?

        这里面涉及到几条的Unix哲学思想:一是单一职责原则,tar工具专注于归档(打包/解包/查看包内容),gzip专业于压缩/解压;二是接口一致性原则,Unix推崇“以工具为主语,以核心功能为第一参数”,tar命令的核心功能放在第一位,让人一眼就知道“执行这条命令的目的是什么”。

        所以,基于以上原则,假如gzip命令也支持文件归档(打包/解包),那么在使用gzip命令时,推荐的gzip命令选项使用顺序应当是:

        # 以工具为主语,以核心功能为第一参数gzip -解压 -tar解包 -显示详情 -文件 file.tar.gz而 tar 推荐的选项顺序是:tar -解包 -gzip压缩 -显示详情 -文件 file.tar.gz

        最新文章

        随机文章