马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在 Linux 里,.tar 是使用频率最高的归档格式。它的特点很明确:只负责把多个文件和目录打包成一个文件,本身不做压缩,压缩是交给 gzip、bzip2、xz 这些工具完成的。理解这一点,后面所有参数就不会记串了。本文从打包、三种压缩格式、解压、只取部分文件、管道用法到完整性校验,把常见操作一次讲全。
一、先搞清楚 .tar 与 .tar.gz 的区别
.tar 是 tape archive 的缩写,最早是给磁带备份设计的工具,现在主要用来把多个文件打包成一个文件便于传输。它自己不压缩,后缀为 .gz、.bz2、.xz 的文件其实是“tar 包 + 压缩算法”的产物:
.tar.gz:先用 tar 打包,再用 gzip 压缩
.tar.bz2:先用 tar 打包,再用 bzip2 压缩
.tar.xz:先用 tar 打包,再用 xz 压缩
实际使用里, Rocky Linux 的 ISO 用的就是 xz 压缩,空间节省很明显,代价是压缩和解压都更慢。
二、确认压缩工具已安装
常见发行版默认就带,不放心可以手动确认并安装:
# Ubuntu / Debian 系列
sudo apt update
sudo apt install tar gzip bzip2 xz-utils
# CentOS / Fedora 系列
sudo yum install tar gzip bzip2 xz
# Arch Linux 系列
sudo pacman -S gzip bzip2 xz
# 看某个工具在不在
which gzip bzip2 xz
三、打包:只归档不压缩
-c 表示创建归档(create),-v 显示过程文件名(verbose),-f 指定归档文件名(file)。这三项是最核心的。
1. 打包单个文件
tar -cvf archive.tar example.txt
把 example.txt 打成 archive.tar,不压缩。
2. 打包多个文件
tar -cvf archive.tar file1.txt file2.txt file3.txt
3. 打包整个目录(含子目录)
tar -cvf backup.tar /path/to/directory
注意路径写法:写成 /path/to/directory 时,解压出来会带上完整目录结构;只想拿目录里的内容、不要这层壳,可以写 /path/to/directory/。
四、三种压缩格式的打包方式
1. 打包并用 gzip 压缩(.tar.gz)
tar -czvf archive.tar.gz example.txt
# 目录也一样,加 z
tar -czvf backup.tar.gz /path/to/directory
gzip 用得最广,速度和压缩率的平衡点比较好,日常默认用它就行。
2. 打包并用 bzip2 压缩(.tar.bz2)
tar -cjvf backup.tar.bz2 /path/to/directory
bzip2 压缩率通常比 gzip 高,但速度更慢,适合对体积敏感、对时间不敏感的场景。
3. 打包并用 xz 压缩(.tar.xz)
tar -cJvf backup.tar.xz /path/to/directory
xz 的压缩率在这三者里最高,代价是慢,大目录可能要跑很久,建议配合 -J 大写选项并留足磁盘。
五、往已有归档里追加文件
tar -rvf archive.tar newfile.txt
-r 是 append。这里有个限制:对未压缩的 .tar 才能直接追加,压缩过的 .tar.gz 没法往里加东西,得重新打包一次。
六、解压的几种写法
1. 解压不压缩的 .tar
tar -xvf archive.tar
解压到当前目录。-x 是 extract(取出)。
2. 解压到指定目录
tar -xvf archive.tar -C /path/to/directory
-C 指定目标目录,目录得先存在。
3. 解压 .tar.gz / .bz2 / .xz
tar -xzvf archive.tar.gz
tar -xjvf archive.tar.bz2
tar -xJvf archive.tar.xz
对应 z、j、J 三个字母,分别对应 gzip、bzip2、xz。记法很简单:压缩用什么,解压就用什么字母。
七、只解压其中一部分文件
tar -xvf archive.tar file1.txt file2.txt
后面直接跟文件名,只会提取归档里指定的那些。想先看看里面有什么再决定,用 -t 列出内容:
tar -tvf archive.tar
输出会带权限、属主、大小和时间戳,用来核对归档是否完整很方便。
八、打包时排除特定文件或目录
tar -czvf backup.tar.gz /path/to/directory --exclude=/path/to/directory/excludefile.txt
备份代码目录时常用,比如把 node_modules、日志 、缓存排除掉:
tar -czvf backup.tar.gz /srv/app --exclude=node_modules --exclude=logs
九、用管道直接压缩与解压
不落中间文件,直接走管道传输或存储:
# 打包后用 gzip 压缩
tar -cvf - /path/to/directory | gzip > backup.tar.gz
# 解压 .tar.gz 再解包
gzip -dc backup.tar.gz | tar -xvf -
这种写法在远程备份脚本里很实用,例如 ssh 目标 tar -cf - /path | tar -xf - 就能跨机器直接传目录,省一次落盘。
十、校验归档完整性
tar -cvWf archive.tar file1.txt file2.txt
-W 是写时校验,会在归档过程中逐个校验文件。对大目录来说这一步很耗时,一般在重要备份的脚本里加,日常随手打的包不必每次都跑。
十一、几个容易出错的地方
-f 后面必须紧跟归档文件名,写成 tar -cvf /tmp/a.tar 中间不要换参数顺序,-f 会把它后面紧跟的那个参数当成文件名。
- 解压到
/ 这类目录时,建议加 -P(保留绝对路径)或不加 -P 让 tar 自动去掉开头的 /,避免覆盖系统文件。
- 文件名里有空格或中文时,用引号包起来,或用
--null 配合 --files-from 从文件列表读取。
- 打包时把相对路径和绝对路径混用,解压出来的目录层级会乱,建议统一在一个干净目录下操作。
十二、总结
把 tar 记成一个公式就够了:tar + 动作(c 建 / x 取 / t 列 / r 追加)+ 压缩字母(z 是 gzip、j 是 bzip2、J 是 xz)+ f + 文件名。剩下的是场景:备份用 -czvf 或 -cJvf,跨机器传输用管道,备份大目录记得加 --exclude,重要归档用 -W 校验一遍。掌握这几条,日常九成的打包解压需求都能覆盖。
qidao123.com企服评测-应用市场 编辑提示 |