Linux 打包和解包工具总结(tar + split)
在 Linux 系统中,tar 是最核心的归档(打包)工具,可结合压缩算法实现 “打包 + 压缩”;split 则用于将大文件分割为小文件,便于存储和传输。以下是两者的详细整理,包含核心功能、语法、选项及实操案例。
一、tar 工具:归档与压缩
tar(Tape ARchive,磁带归档)的核心功能是将多个文件 / 目录打包成单个归档文件(.tar),本身不具备压缩能力,但可通过参数调用 gzip/bzip2/xz 等工具实现压缩。其优势是能保留文件的权限、修改时间等属性,是 Linux 中最常用的备份工具。
1. 核心语法
tar 支持两种风格的参数写法(推荐使用 GNU 风格,更易读):
关键说明:
必选参数(二选一):决定 tar 的核心操作(如创建、解压、列表);
-f [归档文件]:指定归档文件名,大多数操作必须包含此选项(否则默认操作磁带设备);压缩选项(可选):通过
-z/-j/-J调用不同压缩工具,生成对应后缀的压缩包(如.tar.gz)。
2. 核心选项分类
(1)必选操作参数(核心功能)
(2)压缩相关选项
通过以下选项调用压缩工具,实现 “打包 + 压缩” 一体化操作:
(3)常用辅助选项
3. 经典实操案例
(1)仅打包(不压缩)
打包单个 / 多个文件:
tar -cvf 归档名.tar 文件1 文件2
例:tar -cvf test.tar f1.txt f2.txt(生成test.tar,显示打包细节)打包目录(递归包含子目录):
tar -cvf 归档名.tar 目录
例:tar -cvf log.tar /var/log(打包/var/log目录,默认去掉路径开头的/)打包时保留绝对路径:
tar -cPf etc.tar /etc(加-P,保留/etc的绝对路径)
(2)打包并压缩
结合 -z/-j/-J 实现 “打包 + 压缩”,后缀名需对应:
(3)查看包内文件(不解压)
查看未压缩包:
tar -tvf test.tar查看压缩包(无需指定压缩格式,tar 自动识别):
tar -tvf etc.tar.gz
输出包含文件权限、所有者、大小、修改时间、文件名(如-rw-r--r-- root/root 4453 2024-05-01 f1.txt)
(4)解包 / 解压
解压到当前目录:
tar -xf 归档名(-x解包,-f指定文件,无需加 指定文件,无需加压缩参数)
例:tar -xf etc.tar.gz(解压etc.tar.gz到当前目录)解压到指定目录:
tar -xf 归档名 -C 目标目录
例:tar -xf log.tar -C /tmp(将log.tar解压到/tmp目录)解压时不覆盖本地文件:
tar -xkvf test.tar(加-k,已存在的文件不覆盖)
(5)追加 / 删除文件(仅支持未压缩 .tar)
追加文件到归档:
tar -rvf test.tar f3.txt(向test.tar追加f3.txt)从归档删除文件:
tar --delete -vf test.tar f1.txt(从test.tar中删除f1.txt)
(6)批量打包 / 排除文件
从文件读取打包列表:先创建
list.txt(每行一个文件名),再执行tar -zcvf x.tar.gz -T list.txt打包时排除指定文件:
tar -zcvf app.tgz --exclude=/app/log --exclude=/app/tmp /app(排除/app/log和/app/tmp)从文件读取排除列表:先创建
exclude.txt(每行一个排除路径),再执行tar -zcvf app.tgz -T include.txt -X exclude.txt
二、split 工具:文件分割
split 用于将单个大文件(如大压缩包、日志文件)分割为多个小文件,便于存储(如 FAT32 分区最大支持 4GB 文件)或网络传输。分割后的文件可通过 cat 命令合并。
1. 核心语法
bash
split [选项]... [待分割文件] [输出文件前缀]待分割文件:指定要分割的大文件(如
large.tar.gz);输出文件前缀:分割后小文件的名称前缀(如
part,会生成partaa、partab... 或part00、part01...);若不指定前缀,默认生成
xaa、xab、xac... 格式的小文件。
2. 常用选项
3. 经典实操案例
(1)按大小分割
分割 1GB 的
data.tar.gz为每个 200MB 的小文件,前缀为data_part,数字后缀:split -b 200M -d data.tar.gz data_part
生成文件:data_part00、data_part01、data_part02、data_part03、data_part04(共 5 个,最后一个可能小于 200MB)
(2)按行数分割文本文件
分割
access.log(日志文件)为每个包含 5000 行的小文件,前缀为log_part:split -l 5000 access.log log_part
生成文件:log_partaa、log_partab、log_partac...
(3)分割时保持行完整性
分割大文本文件,每个小文件最大 100KB,且不拆分单行:
split -C 100K --verbose access.log log_part
(4)合并分割后的文件
通过 cat 命令将分割后的文件合并为原文件(顺序不能错):cat data_part00 data_part01 data_part02 data_part03 data_part04 > data.tar.gz
三、tar 与 split 结合使用
当需要备份超大型目录(如几十 GB 的数据)时,可先通过 tar 打包压缩,再用 split 分割为小文件,步骤如下:
打包压缩:
tar -zcvf large_data.tar.gz /data(生成大压缩包);分割为 10GB 小文件:
split -b 10G -d large_data.tar.gz large_data_part;传输后合并:
cat large_data_part00 large_data_part01 > large_data.tar.gz;解压:
tar -xf large_data.tar.gz -C /restore。
四、常见问题与注意事项
压缩包后缀与工具对应:
.tar.gz用-z,.tar.bz2用-j,.tar.xz用-J,但解压时无需指定(tar 自动识别);绝对路径风险:打包时默认去掉路径开头的
/,避免解压时覆盖系统文件;若需保留绝对路径,加-P(谨慎使用);压缩包不支持追加 / 删除:
--append/--delete仅对未压缩的.tar文件有效,压缩包(如.tar.gz)无法操作;split 合并顺序:分割后的文件需按后缀顺序合并(如
part00→part01),否则文件损坏。