一、基础介绍
Linux tar(tape archive)是一种在Unix和Linux系统下广泛使用的文件压缩和打包工具。tar能够将多个文件或目录打包成单个文件,并且支持许多压缩格式(如gzip、bzip2、xz等)来减小文件大小,同时保留文件属性和权限等信息。
tar的使用非常简单,通常的语法是:tar [选项] [目标文件/目录]。其中一些常用的选项如下:
- -c:表示创建一个新的tar包
- -x:表示解包(extract)一个已有的tar包
- -z:表示使用gzip格式进行压缩/解压,默认是不压缩的
- -j:表示使用bzip2格式进行压缩/解压
- -v:表示显示详细的打包/解包信息,方便调试
- -f:表示指定打包/解包的目标文件路径,通常需要放在最后一个选项
二、打包和解包
tar最基本的功能就是将多个文件或目录打包成单个文件,示例代码如下:
tar -czvf backup.tar.gz /home/user/
上述代码将/home/user/目录及其下的所有文件和子目录打包成backup.tar.gz压缩文件。其中选项含义如下:
- -c:表示创建一个新的tar包
- -z:表示使用gzip格式进行压缩,默认是不压缩的
- -v:表示显示详细的打包信息
- -f:表示指定打包后的目标文件路径,此处为backup.tar.gz
同样的,解包已有的tar包也很简单,示例代码如下:
tar -xzvf backup.tar.gz
上述代码将backup.tar.gz解压到当前目录下,默认还原成/home/user/目录及其下的所有文件和子目录。这里选项含义如下:
- -x:表示解包(extract)一个已有的tar包
- -z:表示使用gzip格式进行解压,根据文件后缀自动判断压缩格式
- -v:表示显示详细的解包信息
- -f:表示指定待解包的源文件路径,此处为backup.tar.gz
三、选择性打包
有时候我们并不需要打包一个目录下的所有文件和子目录,而是只需要选择性地包含一些文件或目录。这时候可以使用一些特定的选项来进行过滤,示例代码如下:
tar -czvf backup.tar.gz --exclude=./exclude_dir/ ./include_dir/
上述代码将只打包./include_dir/目录及其下的文件和子目录,新生成的压缩包中不会包含./exclude_dir/目录及其下的任何文件。这里选项含义如下:
- --exclude:表示指定需要排除(exclude)的目录或文件
- ./exclude_dir/:需要排除的目录路径,注意在路径前面加一个./,以防止tar误认为是一个选项
- ./include_dir/:需要打包的目录路径,不需要加./
类似的,tar还提供了一些其他的过滤选项,如--exclude-from、--files-from、--exclude-caches等,具体使用方法可以参考tar的官方文档。
四、多卷打包和增量备份
在进行备份时,我们通常需要将备份数据存储在多个介质中,以防止单个介质故障或文件过大的问题。tar提供了多卷打包(multi-volume archives)功能,允许将压缩包分成固定大小的多个部分存储,可以方便地存储到多个磁盘或机器上。示例代码如下:
tar -cM --tape-length=1000000 -f backup.tar /home/user/
上述代码将/home/user/目录及其下的所有文件和子目录打包成多个1MB大小的部分文件(以默认的扩展名.tar-开始命名),并保存在backup.tar文件中。这里选项含义如下:
- -c:表示创建一个新的tar包
- -M:表示启用多卷打包功能,需要结合--tape-length选项一起使用
- --tape-length:表示指定每个部分文件的大小,此处为1MB
- -f:表示指定打包后的目标文件路径,此处为backup.tar
除了多卷打包,tar还支持增量备份,可以将新增或变更的文件增量式地备份到一个已有的tar包中。示例代码如下:
tar -c -g snapshot.file -f backup.tar /home/user/
上述代码将/home/user/目录及其下的所有文件和子目录打包,并将打包过程中的文件元数据和时间戳保存在snapshot.file快照文件中,每次打包时只备份有变更的文件。这里选项含义如下:
- -c:表示创建一个新的tar包
- -g:表示指定快照文件的路径,存储文件元数据
- -f:表示指定打包后的目标文件路径,此处为backup.tar
五、压缩和解压缩
除了基本的打包和解包功能之外,tar还支持一些压缩和解压缩的选项,如gzip、bzip2、xz等,用来减小文件大小。示例代码如下:
tar -czvf backup.tar.gz /home/user/ tar -xzf backup.tar.gz
上述代码分别将/home/user/目录及其下的所有文件和子目录打包成gzip格式的backup.tar.gz压缩文件,和解压backup.tar.gz到当前目录下。这里选项含义与前面介绍的相同,只是加上了-z参数,表示使用gzip格式进行压缩或解压。
六、总结
本文深入介绍了Linux中常用的文件打包和压缩工具tar,从基础介绍、打包和解包、选择性打包、多卷打包和增量备份、压缩和解压缩等多个方面进行了详细的阐述。tar具有简单、高效、可靠的特点,在Linux中有着广泛的应用。