Linux系统之tar详解

tar(Tape ARchive)是 Linux/Unix 系统中用于打包和归档文件的核心工具。它最初设计用于磁带设备,现广泛应用于文件打包、压缩、备份和恢复操作。tar 本身仅打包文件,但通过结合压缩工具(如 gzipbzip2xz),可生成压缩归档文件(.tar.gz.tar.bz2.tar.xz 等)。

功能概述

  1. 打包与解包

    • 将多个文件或目录打包为单个 .tar 归档文件。
    • 从归档文件中提取文件或目录。
  2. 压缩与解压缩

    • 支持多种压缩算法(gzipbzip2xz 等)。
    • 可创建压缩归档(.tar.gz.tar.bz2.tar.xz)。
  3. 增量备份

    • 支持增量备份(--incremental--listed-incremental),仅备份更新的文件。
  4. 高级操作

    • 追加文件到归档、删除归档内容、比较归档与文件系统差异。
    • 处理稀疏文件、保留文件权限和属性(如 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指定归档格式(gnuposixustar 等)
--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/

注意事项

  1. 选项顺序

    • -f 必须紧跟其参数,且通常位于选项末尾。
    • 示例:tar -cvf archive.tar dir/(正确),tar -c archive.tar -vf dir/(错误)。
  2. 压缩工具依赖

    • 使用 bzip2xz 等压缩算法时,需确保系统安装了对应工具。
  3. 路径处理

    • 使用 -C 指定目标目录时,注意路径的绝对/相对性。
  4. 增量备份限制

    • --incremental--listed-incremental 需保留快照文件,否则无法恢复。
  5. 权限问题

    • 普通用户提取归档时,默认不保留原属主(需使用 --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 等)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值