tar
(Tape ARchive)是 Linux/Unix 系统中用于打包和归档文件的核心工具。它最初设计用于磁带设备,现广泛应用于文件打包、压缩、备份和恢复操作。tar
本身仅打包文件,但通过结合压缩工具(如 gzip
、bzip2
、xz
),可生成压缩归档文件(.tar.gz
、.tar.bz2
、.tar.xz
等)。
功能概述
-
打包与解包
- 将多个文件或目录打包为单个
.tar
归档文件。 - 从归档文件中提取文件或目录。
- 将多个文件或目录打包为单个
-
压缩与解压缩
- 支持多种压缩算法(
gzip
、bzip2
、xz
等)。 - 可创建压缩归档(
.tar.gz
、.tar.bz2
、.tar.xz
)。
- 支持多种压缩算法(
-
增量备份
- 支持增量备份(
--incremental
、--listed-incremental
),仅备份更新的文件。
- 支持增量备份(
-
高级操作
- 追加文件到归档、删除归档内容、比较归档与文件系统差异。
- 处理稀疏文件、保留文件权限和属性(如 ACL、SELinux 上下文)。
语法格式
tar [选项] [归档文件名] [文件或目录]
核心操作模式(Main Operation Mode)
选项 | 描述 | 示例 |
---|---|---|
-A , --catenate | 将多个 .tar 文件追加到现有归档中 | tar -A -f archive.tar newfile.tar |
-c , --create | 创建新归档文件 | tar -cf archive.tar file1 file2 |
-d , --diff | 比较归档与文件系统的差异 | tar -df archive.tar |
--delete | 从归档中删除文件(不适用于压缩归档) | tar --delete -f archive.tar file1 |
-r , --append | 追加文件到归档末尾 | tar -rf archive.tar newfile |
-t , --list | 列出归档内容 | tar -tvf archive.tar |
-u , --update | 仅追加比归档中更新的文件 | tar -uf archive.tar updated_file |
-x , --extract | 从归档中提取文件 | tar -xf archive.tar |
常用选项详解
1. 操作控制选项
选项 | 描述 |
---|---|
-C , --directory=DIR | 提取或打包前切换到指定目录 |
-f , --file=ARCHIVE | 指定归档文件名(必选) |
-j , --bzip2 | 使用 bzip2 压缩/解压(.tar.bz2 ) |
-J , --xz | 使用 xz 压缩/解压(.tar.xz ) |
-p , --preserve-permissions | 保留文件权限(默认超级用户使用) |
-v , --verbose | 显示详细操作过程 |
-z , --gzip | 使用 gzip 压缩/解压(.tar.gz ) |
2. 覆盖控制选项
选项 | 描述 |
---|---|
-k , --keep-old-files | 提取时保留旧文件(不覆盖) |
--skip-old-files | 静默跳过已存在的文件 |
-U , --unlink-first | 提取前删除目标文件 |
--overwrite | 强制覆盖现有文件(默认行为) |
3. 压缩选项
选项 | 描述 |
---|---|
-a , --auto-compress | 根据文件后缀自动选择压缩工具 |
-I , --use-compress-program=PROG | 指定自定义压缩工具(需支持 -d 参数) |
--lzip | 使用 lzip 压缩/解压 |
--lzma | 使用 lzma 压缩/解压 |
--lzop | 使用 lzop 压缩/解压 |
4. 归档格式选项
选项 | 描述 |
---|---|
-H , --format=FORMAT | 指定归档格式(gnu 、posix 、ustar 等) |
--posix | 使用 POSIX 兼容格式(pax ) |
--pax-option | 控制 pax 格式的扩展属性 |
5. 文件属性处理
选项 | 描述 |
---|---|
--atime-preserve | 保留访问时间戳 |
--no-same-owner | 提取时不保留原属主(普通用户默认行为) |
--numeric-owner | 使用数字表示用户/组(而非名称) |
--acls | 保留 POSIX ACL 权限 |
--selinux | 保留 SELinux 上下文 |
典型使用场景与示例
1. 基础打包与解压
# 创建未压缩的 .tar 文件
tar -cvf archive.tar file1 file2 dir/
# 解压 .tar 文件到当前目录
tar -xvf archive.tar
# 解压到指定目录
tar -xvf archive.tar -C /path/to/directory
2. 压缩与解压缩
# 使用 gzip 压缩为 .tar.gz
tar -czvf archive.tar.gz dir/
# 使用 bzip2 压缩为 .tar.bz2
tar -cjvf archive.tar.bz2 file1 file2
# 使用 xz 压缩为 .tar.xz
tar -cJvf archive.tar.xz dir/
# 解压 .tar.gz 文件
tar -xzvf archive.tar.gz
# 解压 .tar.bz2 文件
tar -xjvf archive.tar.bz2
# 解压 .tar.xz 文件
tar -xJvf archive.tar.xz
3. 追加与更新
# 追加新文件到归档
tar -rf archive.tar newfile
# 仅更新已修改的文件
tar -uf archive.tar modified_file
4. 增量备份
# 创建增量备份(需指定快照文件)
tar -g snapshot -cvzf backup.tar.gz dir/
# 恢复增量备份
tar -g snapshot -xvzf backup.tar.gz
5. 高级操作
# 删除归档中的文件
tar --delete -f archive.tar obsolete_file
# 比较归档与文件系统的差异
tar -df archive.tar
# 保留文件权限和时间戳
tar -cpf archive.tar -p dir/
注意事项
-
选项顺序
-f
必须紧跟其参数,且通常位于选项末尾。- 示例:
tar -cvf archive.tar dir/
(正确),tar -c archive.tar -vf dir/
(错误)。
-
压缩工具依赖
- 使用
bzip2
、xz
等压缩算法时,需确保系统安装了对应工具。
- 使用
-
路径处理
- 使用
-C
指定目标目录时,注意路径的绝对/相对性。
- 使用
-
增量备份限制
--incremental
和--listed-incremental
需保留快照文件,否则无法恢复。
-
权限问题
- 普通用户提取归档时,默认不保留原属主(需使用
--no-same-owner
)。
- 普通用户提取归档时,默认不保留原属主(需使用
常见错误与解决方案
1. 错误提示:tar: This does not look like a tar archive
- 原因:文件非
.tar
格式,或压缩工具未正确使用。 - 解决方法:检查文件后缀并使用正确的解压选项(如
-z
、-j
)。
2. 错误提示:tar: Exiting with failure status due to previous errors
- 原因:文件权限不足或归档损坏。
- 解决方法:使用
--ignore-failed-read
忽略错误继续操作。
3. 错误提示:tar: You may not specify more than one -A, -d, -r, or -u
- 原因:同时使用多个冲突的操作模式(如
-c
和-x
)。 - 解决方法:确保每次操作仅指定一个模式(
-c
、-x
、-r
等)。