Linux的tar
命令 笔记250717
tar
是 Linux/Unix 系统中用于打包、压缩和解压文件和目录的核心命令。它的名字来源于 Tape Archive(磁带存档),但现在广泛用于文件归档。理解 tar
对于高效管理文件至关重要。
核心概念:
- 打包: 将多个文件或目录合并成一个单一的文件(
.tar
文件),不压缩(或使用后续压缩)。 - 压缩: 使用压缩算法(如 gzip, bzip2, xz)减小
.tar
文件的大小,生成.tar.gz
,.tar.bz2
,.tar.xz
等文件。 - 解包: 将
.tar
文件还原成原来的多个文件和目录结构。 - 解压: 先解压缩(如
.tar.gz
->.tar
),再解包还原文件。
基本语法:
tar [选项] [操作模式] [归档文件名] [文件或目录列表...]
核心功能与选项
核心功能与选项
创建归档文件 打包[压缩]
- 基本创建(不压缩):
tar -cvf archive.tar file1 dir1 # -c: 创建, -v: 显示过程, -f: 指定文件名
- 创建+压缩(常用组合):
tar -zcvf archive.tar.gz dir1 # -z: 用gzip压缩 → .tar.gz 或 .tgz
tar -jcvf archive.tar.bz2 dir1 # -j: 用bzip2压缩 → .tar.bz2
tar -Jcvf archive.tar.xz dir1 # -J: 用xz压缩 → .tar.xz
提取归档文件 解包[解压缩]
- 提取到当前目录:
tar -xvf archive.tar # -x: 提取 .tar 或 .tar.xx (现代tar自动识别)
tar -zxvf archive.tar.gz # 解压+提取 .tar.gz
tar -jxvf archive.tar.bz2 # 解压+提取 .tar.bz2
tar -Jxvf archive.tar.xz # 解压+提取 .tar.xz
- 提取到指定目录:
tar -xvf archive.tar -C /target/path # -C: 指定目标目录, 目录必须已存在
tar -C
不会主动创建文件夹, 文件夹必须已经存在
创建文件夹,并解压到该文件夹
mkdir dir && tar -xvf file -C dir
创建文件夹,并解压到该文件夹,然后进入该文件夹
### 创建文件夹,并解压到该文件夹,然后进入该文件夹
mkdir -pm 777 mysql-xxx.debs && tar -xvf mysql-server_5.7.42-1debian10_amd64.deb-bundle*.tar -C $_ && cd $_
查看归档内容 不解包
tar -tvf archive.tar # 列出内容(不提取)
tar -ztvf archive.tar.gz # 查看 .tar.gz
tar -jtvf archive.tar.bz2 # 查看 .tar.bz2
tar -Jtvf archive.tar.xz # 查看 .tar.xz
关键组成部分:
- 操作模式: 指定
tar
要做什么(必须且只能选一个):-c
或--create
: 创建一个新的归档文件。-x
或--extract
: 解包(提取)归档文件中的内容。-t
或--list
: 列出归档文件中的内容(不解包)。-r
或--append
: 追加文件到已存在的归档文件末尾。-u
或--update
: 仅追加比归档文件中同名文件更新的文件。-A
或--catenate
或--concatenate
: 合并多个.tar
文件。
- 选项: 修改操作模式的行为(可以组合使用):
-f
或--file=归档文件
: 指定归档文件名。这是最重要的选项之一! 通常紧跟操作模式后指定文件名(如-cf archive.tar
)。-v
或--verbose
: 详细模式。在处理文件时显示它们的名称(让你看到过程)。-z
或--gzip
: 使用 gzip 进行压缩(创建时)或解压缩(提取/查看时)。对应.tar.gz
或.tgz
。-j
或--bzip2
: 使用 bzip2 进行压缩/解压缩。对应.tar.bz2
或.tbz
/.tbz2
。-J
或--xz
: 使用 xz 进行压缩/解压缩。对应.tar.xz
或.txz
(通常压缩率最高,但也最慢)。--zstd
: 使用 zstd 进行压缩/解压缩。对应.tar.zst
(较新算法,在速度和压缩率之间取得很好平衡)。-C
或--directory=目录
: 改变到指定目录后再执行操作(常用于解压到特定目录)。-p
或--preserve-permissions
: 保留文件的原始权限和所有权(在提取时特别重要,尤其是 root 操作的系统文件)。--same-owner
: 尝试以原所有者身份还原文件(通常需要 root 权限)。-k
或--keep-old-files
: 提取时不覆盖已存在的文件。--overwrite
: 提取时覆盖已存在的文件(默认行为)。--exclude=模式
: 排除匹配指定模式(如*.log
或temp/
)的文件或目录。-h
或--dereference
: 归档符号链接指向的实际文件,而不是链接本身。--wildcards
: 允许在--exclude
或提取时指定文件时使用通配符(如*.txt
)。
- 归档文件名: 要创建、提取或列出的
.tar
,.tar.gz
,.tar.bz2
等文件的名称。 - 文件或目录列表: 指定要打包的文件或目录(对于
-c
模式),或指定要从归档中提取/列出的特定文件(对于-x
或-t
模式,可选)。
常用场景与示例:
创建未压缩的 tar 包 (打包):
tar -cvf project_backup.tar /path/to/project/
-c
: 创建归档-v
: 显示详细过程-f project_backup.tar
: 指定归档文件名为project_backup.tar
/path/to/project/
: 要打包的目录
创建 gzip 压缩的 tar 包 (打包并压缩):
tar -czvf project_backup.tar.gz /path/to/project/
-z
: 使用 gzip 压缩
创建 bzip2 压缩的 tar 包:
tar -cjvf project_backup.tar.bz2 /path/to/project/
-j
: 使用 bzip2 压缩
创建 xz 压缩的 tar 包:
tar -cJvf project_backup.tar.xz /path/to/project/
-J
: 使用 xz 压缩 (注意是大写的 J)
列出 tar 包中的内容:
tar -tvf project_backup.tar.gz
-t
: 列出内容-v
: 显示详细信息(权限、所有者、大小、时间)-f project_backup.tar.gz
: 指定要查看的归档文件(支持压缩格式)
提取整个 tar 包到当前目录 (解包):
tar -xvf project_backup.tar.gz
-x
: 提取-v
: 显示详细过程-f project_backup.tar.gz
: 指定要提取的归档文件(支持压缩格式)
提取整个 tar 包到指定目录 (解包):
tar -xvf project_backup.tar.gz -C /target/directory/
-C /target/directory/
: 先切换到/target/directory/
目录,然后再执行提取操作。
从 tar 包中提取特定文件 (解包):
tar -xvf project_backup.tar.gz path/to/specific/file.txt path/to/another/file.log
- 在归档文件名后面列出要提取的文件的完整路径(路径需与
tar -tvf
列出的路径完全一致)。
- 在归档文件名后面列出要提取的文件的完整路径(路径需与
从 tar 包中提取匹配通配符的文件 (需要
--wildcards
):tar -xvf project_backup.tar.gz --wildcards '*.txt'
--wildcards '*.txt'
: 提取所有.txt
文件。
创建归档时排除特定文件/目录:
tar -czvf project_backup.tar.gz --exclude='*.tmp' --exclude='logs/' /path/to/project/
--exclude='*.tmp'
: 排除所有.tmp
文件--exclude='logs/'
: 排除logs
目录(及其内容)
追加文件到已有的 tar 包 (未压缩):
tar -rvf project_backup.tar newfile1.txt newdir/
-r
: 追加到归档末尾-f project_backup.tar
: 指定要追加到的归档文件(必须是未压缩的.tar
文件)- 注意: 不能直接追加到压缩过的归档文件(如
.tar.gz
)。需要先解压成.tar
,追加,再重新压缩。
更新归档中已有的文件 (仅添加比归档内更新的版本):
tar -uvf project_backup.tar /path/to/project/
-u
: 更新(追加比归档内更新的文件)-f project_backup.tar
: 指定要更新的归档文件(必须是未压缩的.tar
文件)- 同样不能直接更新压缩过的归档文件。
压缩格式选择指南:
选项 | 压缩格式 | 常见后缀 | 压缩速度 | 解压速度 | 压缩率 | 适用场景 |
---|---|---|---|---|---|---|
-z |
gzip | .tar.gz , .tgz |
快 | 快 | 中等 | 通用、快速压缩/解压 |
-j |
bzip2 | .tar.bz2 , .tb2 |
慢 | 中等 | 较好 | 需要较高压缩率,不太在意时间 |
-J |
xz | .tar.xz , .txz |
非常慢 | 中等 | 最高 | 追求极致压缩率,时间不重要 |
--zstd |
zstd | .tar.zst |
非常快 | 非常快 | 好到很好 | 推荐! 平衡速度和压缩率的最佳选择 |
重要提示与最佳实践:
-f
选项是必需的: 必须用-f
或--file
明确指定归档文件名。忘记-f
可能导致tar
尝试使用磁带机等默认设备,造成错误。- 操作模式必选其一:
-c
,-x
,-t
,-r
,-u
,-A
必须且只能选择一个。 - 压缩选项与后缀匹配: 创建时使用的压缩选项 (
-z
,-j
,-J
,--zstd
) 通常与文件后缀对应。提取或查看时,tar
通常能自动检测压缩类型并正确解压,不需要显式指定压缩选项(直接用-xvf
或-tvf
即可)。显式指定(如-xzvf
)也不会错。 - 解压路径: 默认解压到当前目录。使用
-C
选项指定目标目录是更安全、更清晰的做法,避免意外覆盖当前目录的文件。 - 权限保留: 使用
-p
或--preserve-permissions
和--same-owner
来保留文件权限和所有者(尤其是备份系统文件时)。普通用户操作自己的文件通常不需要。 - 查看内容: 在解压大归档文件之前,务必先用
tar -tvf
查看内容,确认里面有什么以及解压路径是否符合预期。 - 通配符: 在
--exclude
或提取特定文件时使用通配符 (*
,?
),需要加上--wildcards
选项。 - 追加/更新限制:
-r
(追加) 和-u
(更新) 只能用于未压缩的.tar
文件。不能直接操作.tar.gz
,.tar.bz2
等压缩包。 - 相对路径 vs 绝对路径: 创建归档时,
tar
默认记录的是命令行中指定的路径。如果指定绝对路径 (如/home/user/docs
),解压时也会尝试解压到绝对路径,可能需要 root 权限且可能覆盖系统文件。最佳实践是进入要打包的目录的父目录,然后使用相对路径打包:
这样解压时,文件会相对当前目录创建cd /path/to/parent/ tar -czvf backup.tar.gz relative/path/to/target/
relative/path/to/target/
,更安全可控。 - Windows 兼容性: 在 Windows 上解压 Linux 创建的 tar 包时(如用 7-Zip),文件权限信息可能会丢失。反之亦然。
熟练掌握 tar
命令是 Linux 系统管理和文件传输的基础技能。结合不同的选项和压缩格式,你可以高效地进行文件备份、迁移和分发。
Fedora42中文版的 tar --help
tar --help
用法: tar [选项...] [FILE]...
GNU 'tar' saves many files together into a single tape or disk archive, and can
restore individual files from the archive.
Examples:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.
tar -tvf archive.tar # List all files in archive.tar verbosely.
tar -xf archive.tar # Extract all files from archive.tar.
主操作模式:
-A, --catenate, --concatenate 追加 tar 文件至归档
-c, --create 创建一个新归档
--delete 从归档(非磁带!)中删除
-d, --diff, --compare 找出归档和文件系统的差异
-r, --append 追加文件至归档结尾
--test-label 测试归档卷标并退出
-t, --list 列出归档内容
-u, --update 仅追加比归档中副本更新的文件
-x, --extract, --get 从归档中解出文件
操作修饰符:
--check-device 当创建增量归档时检查设备号(默认)
-g, --listed-incremental=FILE 处理新式的 GNU 格式的增量备份
-G, --incremental 处理老式的 GNU 格式的增量备份
--hole-detection=TYPE 用于探测holes 的技术
--ignore-failed-read
当遇上不可读文件时不要以非零值退出
--level=NUMBER 所创建的增量列表归档的输出级别
--no-check-device 当创建增量归档时不要检查设备号
--no-seek 归档不可检索
-n, --seek 归档可检索
--occurrence[=NUMBER] 仅处理归档中每个文件的第 NUMBER
个事件;仅当与以下子命令 --delete,
--diff, --extract 或是 --list
中的一个联合使用时,此选项才有效。而且不管文件列表是以命令行形式给出或是通过
-T 选项指定的;NUMBER 值默认为 1
--sparse-version=MAJOR[.MINOR]
设置所用的离散格式版本(隐含
--sparse)
-S, --sparse 高效处理离散文件
本地文件名选择:
--add-file=FILE 添加指定的 FILE 至归档(如果名字以 -
开始会很有用的)
-C, --directory=DIR 改变至目录 DIR
--exclude=PATTERN 排除以 PATTERN 指定的文件
--exclude-backups 排除备份和锁文件
--exclude-caches 除标识文件本身外,排除包含
CACHEDIR.TAG 的目录中的内容
--exclude-caches-all 排除包含 CACHEDIR.TAG 的目录
--exclude-caches-under 排除包含 CACHEDIR.TAG
的目录中所有内容
--exclude-ignore=FILE 若存在FILE,
则从其中读取每个目录的例外匹配项
--exclude-ignore-recursive=FILE
若存在FILE,
则从其中为每个目录及其子目录读取需要排除的例外匹配项
--exclude-tag=FILE 除 FILE 自身外,排除包含 FILE
的目录中的内容
--exclude-tag-all=FILE 排除包含 FILE 的目录
--exclude-tag-under=FILE 排除包含 FILE 的目录中的所有内容
--exclude-vcs 排除版本控制系统目录
--exclude-vcs-ignores 从VCS 忽略文件中读取排除匹配项
--no-null 禁用上一次的效果 --null 选项
--no-recursion 避免目录中的自动降级
--no-unquote 不要unquote 输入文件或成员名称
--no-verbatim-files-from -T
把以‘-’开始的文件作为选项(默认)
--null -T 读取以空终止的名字; 隐含
--verbatim-files-from
--recursion 目录递归(默认)
-T, --files-from=FILE 从 FILE
中获取文件名来解压或创建文件
--unquote unquote 输入文件或成员名称(默认)
--verbatim-files-from -T
逐字读取文件名(不处理选项或进行转义)
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
文件名匹配选项(同时影响排除和包括模式串):
--anchored 模式串匹配文件名头部
--ignore-case 忽略大小写
--no-anchored 模式串匹配任意‘/’后字符(对
exclusion 为默认值)
--no-ignore-case 匹配大小写(默认)
--no-wildcards 逐字匹配字符串
--no-wildcards-match-slash 通配符不匹配‘/’
--wildcards 使用通配符(对 exclusion 为默认值)
--wildcards-match-slash wildcards match '/' (default)
重写控制:
--keep-directory-symlink 解压时保留已存在的目录符号链接
--keep-newer-files
不要替换比归档中副本更新的已存在的文件
-k, --keep-old-files 解压时不替换存在的文件,
而将其认为是错误
--no-overwrite-dir 保留已存在目录的元数据
--one-top-level[=DIR] 创建子目录以避免解压松散文件
--overwrite 解压时重写存在的文件
--overwrite-dir 解压时重写已存在目录的元数据(默认)
--recursive-unlink 解压目录之前先清除目录层次
--remove-files 在添加文件至归档后删除它们
--skip-old-files
解压时不替换存在的文件,而是自动忽略
-U, --unlink-first 在解压要重写的文件之前先删除它们
-W, --verify 在写入以后尝试校验归档
选择输出流:
--ignore-command-error 忽略子进程的退出代码
--no-ignore-command-error
将子进程的非零退出代码认为发生错误
-O, --to-stdout 解压文件至标准输出
--to-command=COMMAND
将解压的文件通过管道传送至另一个程序
操作文件属性:
--atime-preserve[=METHOD]
在输出的文件上保留访问时间,要么通过在读取(默认
METHOD=‘replace’)后还原时间,要不就不要在第一次(METHOD=‘system’)设置时间
--clamp-mtime 当文件比 --mtime
指定的文件更新时仅更新时间
--delay-directory-restore
直到解压结束才设置修改时间和所解目录的权限
--group=名称 强制将 NAME
作为所添加的文件的组所有者
--group-map=FILE 用FILE 映射文件所有者GIDs 和名字
--mode=CHANGES 强制将所添加的文件(符号)更改为权限
CHANGES
--mtime=DATE-OR-FILE 从 DATE-OR-FILE 中为添加的文件设置
mtime
-m, --touch 不要解压文件的修改时间
--no-delay-directory-restore
取消 --delay-directory-restore 选项的效果
--no-same-owner
将文件解压为您所有(普通用户默认此项)
--no-same-permissions
从归档中解压权限时使用用户的掩码位(默认为普通用户服务)
--numeric-owner 总是以数字代表用户/组的名称
--owner=名称 强制将 NAME
作为所添加的文件的所有者
--owner-map=FILE 用FILE 映射文件所有者UIDs 和名字
-p, --preserve-permissions, --same-permissions
解压文件权限信息(默认只为超级用户服务)
--same-owner
尝试解压时保持所有者关系一致(超级用户默认此项)
--sort=ORDER 目录排序顺序: none(默认), name 或inode
-s, --preserve-order, --same-order
成员参数按归档中的文件顺序列出
操作extended 文件属性:
--acls 开启 POSIX ACLs 支持
--no-acls 关闭 POSIX ACLs 支持
--no-selinux 关闭 SELinux 上下文支持
--no-xattrs 关闭extended 属性支持
--selinux 开启 SELinux 上下文支持
--xattrs 开启extended 属性支持
--xattrs-exclude=MASK 为xattr 关键字指定排除匹配项
--xattrs-include=MASK 为xattr 关键字指定包含匹配项
设备选择和切换:
--force-local
即使归档文件存在副本还是把它认为是本地归档
-f, --file=ARCHIVE 使用归档文件或 ARCHIVE 设备
-F, --info-script=名称, --new-volume-script=名称
在每卷磁带最后运行脚本(隐含 -M)
-L, --tape-length=NUMBER 写入 NUMBER × 1024 字节后更换磁带
-M, --multi-volume 创建/列出/解压多卷归档文件
--rmt-command=COMMAND 使用指定的 rmt COMMAND 代替 rmt
--rsh-command=COMMAND 使用远程 COMMAND 代替 rsh
--volno-file=FILE 使用/更新 FILE 中的卷数
设备分块:
-b, --blocking-factor=BLOCKS 每个记录 BLOCKS x 512 字节
-B, --read-full-records 读取时重新分块(只对 4.2BSD 管道有效)
-i, --ignore-zeros 忽略归档中的零字节块(即文件结尾)
--record-size=NUMBER 每个记录的字节数 NUMBER,乘以 512
选择归档格式:
-H, --format=FORMAT 创建指定格式的归档
FORMAT 是以下格式中的一种:
gnu GNU tar 1.13.x 格式
oldgnu GNU 格式,其中 tar 版本 <= 1.12
pax POSIX 1003.1-2001 (pax) 格式
posix 等同于 pax
ustar POSIX 1003.1-1988 (ustar) 格式
v7 旧的 V7 tar 格式
--old-archive, --portability
等同于 --format=v7
--pax-option=关键字[[:]=值][,关键字[[:]=值]]...
控制 pax 关键字
--posix 等同于 --format=posix
-V, --label=TEXT 创建带有卷名 TEXT
的归档;在列出/解压时,使用 TEXT
作为卷名的模式串
压缩选项:
-a, --auto-compress 使用归档后缀名来决定压缩程序
-I, --use-compress-program=PROG
通过 PROG 过滤(必须是能接受 -d
选项的程序)
-j, --bzip2 通过 bzip2 过滤归档
-J, --xz 通过 xz 过滤归档
--lzip 通过 lzip 过滤归档
--lzma 通过 xz --format=lzma 过滤归档
--lzop 通过 lzop 过滤归档
--no-auto-compress 不使用归档后缀名来决定压缩程序
--zstd 通过 zstd 过滤归档
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
-Z, --compress, --uncompress 通过 compress 过滤归档
本地文件选择:
--backup[=CONTROL] 在删除前备份,选择 CONTROL 版本
--hard-dereference
跟踪硬链接;将它们所指向的文件归档并输出
-h, --dereference
跟踪符号链接;将它们所指向的文件归档并输出
-K, --starting-file=MEMBER-NAME
从归档中的 MEMBER-NAME
成员处开始读取归档
--newer-mtime=DATE 当只有数据改变时比较数据和时间
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
只保存比 DATE-OR-FILE 更新的文件
--one-file-system 创建归档时保存在本地文件系统中
-P, --absolute-names 不要从文件名中清除引导符‘/’
--suffix=STRING 在删除前备份,除非被环境变量
SIMPLE_BACKUP_SUFFIX
覆盖,否则覆盖常用后缀(‘’)
文件名变换:
--strip-components=NUMBER 解压时从文件名中清除 NUMBER
个引导部分
--transform=EXPRESSION, --xform=EXPRESSION
使用 sed 代替 EXPRESSION
来进行文件名变换
提示性输出:
--checkpoint[=NUMBER] 每隔 NUMBER
个记录显示进度信息(默认为 10 个)
--checkpoint-action=ACTION 在每个检查点上执行 ACTION
--full-time 按文件原本时间格式打印
--index-file=FILE 将详细输出发送至 FILE
-l, --check-links
只要不是所有链接都被输出就打印信息
--no-quote-chars=STRING 禁用来自 STRING 的字符引用
--quote-chars=STRING 来自 STRING 的额外的引用字符
--quoting-style=STYLE 设置名称引用风格;有效的 STYLE
值请参阅以下说明
-R, --block-number 每个信息都显示归档内的块数
--show-defaults 显示 tar 默认选项
--show-omitted-dirs
列表或解压时,列出每个不匹配查找标准的目录
--show-snapshot-field-ranges
显示快照文件区的有效范围
--show-transformed-names, --show-stored-names
显示变换后的文件名或归档名
--totals[=SIGNAL] 处理归档后打印出总字节数;当此
SIGNAL 被触发时带参数 -
打印总字节数;允许的信号为:
SIGHUP,SIGQUIT,SIGINT,SIGUSR1 和
SIGUSR2;同时也接受不带 SIG
前缀的信号名称
--utc 以 UTC 格式打印文件修改时间
-v, --verbose 详细地列出处理的文件
--warning=KEYWORD 警告控制
-w, --interactive, --confirmation
每次操作都要求确认
兼容性选项:
-o 创建归档时,相当于
--old-archive;展开归档时,相当于
--no-same-owner
其它选项:
-?, --help 显示此帮助列表
--restrict 禁用某些潜在的有危险的选项
--usage 显示简短的用法说明
--version 打印程序版本
长选项和相应短选项具有相同的强制参数或可选参数。
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control may be set with --backup or VERSION_CONTROL, values are:
none, off never make backups
t, numbered make numbered backups
nil, existing numbered if numbered backups exist, simple otherwise
never, simple always make simple backups
--quoting-style 选项的有效参数为:
literal
shell
shell-always
shell-escape
shell-escape-always
c
c-maybe
escape
locale
clocale
此 tar 默认为:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/etc/rmt
--rsh-command=/usr/bin/ssh
root@n100:~# chmod -h
chmod: 缺少操作对象
请尝试执行 "chmod --help" 来获取更多信息。
root@n100:~# chmod --help
用法:chmod [选项]... 模式[,模式]... 文件...
或:chmod [选项]... 八进制模式 文件...
或:chmod [选项]... --reference=参考文件 文件...
将每个 <文件> 的模式变更为指定 <模式>。
使用 --reference 时,把每个 <文件> 的模式设置为与 <参考文件> 相同。
-c, --changes 类似 verbose 选项,但仅在做出修改时进行报告
-f, --silent, --quiet 不显示大多数错误消息
-v, --verbose 为每个处理的文件输出一条诊断信息
--dereference 影响每个符号链接指向的文件,而非符号链接本身
-h, --no-dereference 影响每个符号链接,而非其指向的文件
--no-preserve-root 不特殊对待 "/"(默认行为)
--preserve-root 不允许在 "/" 上递归操作
--reference=参考文件 使用 <参考文件> 的模式,而非指定 <模式>。
如果 <参考文件> 是符号链接,则总是解引用它。
-R, --recursive 递归修改文件和目录
指定了 -R 选项时,以下选项设置如何遍历目录层次。
如果您指定了多于一个选项,那么只有最后一个会生效。默认值是 -H。
-H 如果命令行参数是一个指向目录的符号链接,则对其
进行遍历
-L 遍历每一个遇到的指向目录的符号链接
-P 不遍历任何符号链接
--help 显示此帮助信息并退出
--version 显示版本信息并退出
每个 <模式> 都应当符合此格式:"[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+"。
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/chmod>
或者在本地使用:info '(coreutils) chmod invocation'
AI翻译的 tar --help
:
用法: tar [选项...] [文件]...
GNU 'tar' 将多个文件一起保存到单个磁带或磁盘归档文件中,并可以从归档中恢复单个文件。
示例:
tar -cf archive.tar foo bar # 从文件 foo 和 bar 创建 archive.tar。
tar -tvf archive.tar # 详细列出 archive.tar 中的所有文件。
tar -xf archive.tar # 从 archive.tar 中提取所有文件。
主要操作模式:
-A, --catenate, --concatenate 将 tar 文件追加到一个归档中
-c, --create 创建新归档
--delete 从归档中删除(不适用于磁带!)
-d, --diff, --compare 找出归档与文件系统之间的差异
-r, --append 将文件追加到归档的末尾
--test-label 测试归档卷标并退出
-t, --list 列出归档内容
-u, --update 仅追加比归档中副本新的文件
-x, --extract, --get 从归档中提取文件
操作修饰符:
--check-device 创建增量归档时检查设备号(默认)
-g, --listed-incremental=FILE 处理新 GNU 格式的增量备份
-G, --incremental 处理旧 GNU 格式的增量备份
--hole-detection=TYPE 检测文件空洞的技术
--ignore-failed-read 对不可读的文件不退出非零状态
--level=NUMBER 为创建的已列出增量归档设置转储级别
--no-check-device 创建增量归档时不检查设备号
--no-seek 归档文件不可查找
-n, --seek 归档文件可查找
--occurrence[=NUMBER] 仅处理归档中每个文件的第 NUMBER 次出现;
此选项仅在与 --delete, --diff, --extract 或 --list 子命令之一结合使用,
且通过命令行或 -T 选项给出了文件列表时才有效;NUMBER 默认为 1
--sparse-version=主版本[.次版本]
设置要使用的稀疏文件格式版本(隐含 --sparse)
-S, --sparse 高效处理稀疏文件
本地文件名选择:
--add-file=FILE 将给定的 FILE 添加到归档(在文件名以破折号开头时有用)
-C, --directory=DIR 切换到目录 DIR
--exclude=PATTERN 排除符合 PATTERN 的文件
--exclude-backups 排除备份文件和锁文件
--exclude-caches 排除包含 CACHEDIR.TAG 的目录内容(标签文件本身除外)
--exclude-caches-all 排除包含 CACHEDIR.TAG 的目录
--exclude-caches-under 排除包含 CACHEDIR.TAG 的目录下的所有内容
--exclude-ignore=FILE 如果存在 FILE,则从中读取每个目录的排除模式
--exclude-ignore-recursive=FILE
如果存在 FILE,则从中读取每个目录及其子目录的排除模式
--exclude-tag=FILE 排除包含 FILE 的目录内容(FILE 本身除外)
--exclude-tag-all=FILE 排除包含 FILE 的目录
--exclude-tag-under=FILE 排除包含 FILE 的目录下的所有内容
--exclude-vcs 排除版本控制系统目录
--exclude-vcs-ignores 从 VCS 忽略文件中读取排除模式
--no-null 禁用之前 --null 选项的效果
--no-recursion 避免自动进入目录
--no-unquote 不对输入文件或成员名称进行去引号处理
--no-verbatim-files-from -T 将文件名以破折号开头的视为选项(默认)
--null -T 读取以空字符(null)终止的名称;隐含 --verbatim-files-from
--recursion 递归进入目录(默认)
-T, --files-from=FILE 从 FILE 中获取要提取或创建的名称
--unquote 对输入文件或成员名称进行去引号处理(默认)
--verbatim-files-from -T 原样读取文件名(不处理转义或选项)
-X, --exclude-from=FILE 排除 FILE 中列出的模式
文件名匹配选项(影响排除和包含模式):
--anchored 模式匹配文件名开头
--ignore-case 忽略大小写
--no-anchored 模式在任何 '/' 之后匹配(用于排除的默认)
--no-ignore-case 区分大小写匹配(默认)
--no-wildcards 原文字符串匹配
--no-wildcards-match-slash 通配符不匹配 '/'
--wildcards 使用通配符(用于排除的默认)
--wildcards-match-slash 通配符匹配 '/'(用于排除的默认)
覆盖控制:
--keep-directory-symlink 提取时保留指向目录的现有符号链接
--keep-newer-files 不替换比其归档副本新的现有文件
-k, --keep-old-files 提取时不替换现有文件,将其视为错误
--no-overwrite-dir 保留现有目录的元数据
--one-top-level[=DIR] 创建一个子目录以避免提取出松散文件
--overwrite 提取时覆盖现有文件
--overwrite-dir 提取时覆盖现有目录的元数据(默认)
--recursive-unlink 在提取目录之前清空其层次结构
--remove-files 将文件添加到归档后将其删除
--skip-old-files 提取时不替换现有文件,静默跳过它们
-U, --unlink-first 在覆盖提取之前删除每个文件
-W, --verify 写入归档后尝试验证它
选择输出流:
--ignore-command-error 忽略子进程的退出代码
--no-ignore-command-error 将子进程的非零退出代码视为错误
-O, --to-stdout 将文件提取到标准输出
--to-command=COMMAND 将提取的文件管道传输到另一个程序
文件属性处理:
--atime-preserve[=METHOD] 保留转储文件的访问时间,可以通过在读取后恢复时间(METHOD='replace';默认),
或者从一开始就不设置时间(METHOD='system')来实现
--clamp-mtime 仅当文件比 --mtime 指定的时间新时才设置时间
--delay-directory-restore 延迟设置提取目录的修改时间和权限直到提取结束
--group=NAME 强制使用 NAME 作为添加文件的组
--group-map=FILE 使用 FILE 映射文件所有者的 GID 和名称
--mode=CHANGES 强制为添加的文件设置(符号)模式 CHANGES
--mtime=DATE-OR-FILE 根据 DATE-OR-FILE 为添加的文件设置修改时间 (mtime)
-m, --touch 不提取文件修改时间
--no-delay-directory-restore
取消 --delay-directory-restore 选项的效果
--no-same-owner 以您自己的身份提取文件(普通用户的默认)
--no-same-permissions 从归档中提取权限时应用用户的 umask(普通用户的默认)
--numeric-owner 始终对用户/组名称使用数字
--owner=NAME 强制使用 NAME 作为添加文件的所有者
--owner-map=FILE 使用 FILE 映射文件所有者的 UID 和名称
-p, --preserve-permissions, --same-permissions
提取文件权限信息(超级用户的默认)
--same-owner 尝试以归档中存在的相同所有权提取文件(超级用户的默认)
--sort=ORDER 目录排序顺序:none(默认)、name 或 inode
-s, --preserve-order, --same-order
成员参数的列出顺序与归档中的文件顺序相同
扩展文件属性处理:
--acls 启用 POSIX ACLs 支持
--no-acls 禁用 POSIX ACLs 支持
--no-selinux 禁用 SELinux 上下文支持
--no-xattrs 禁用扩展属性支持
--selinux 启用 SELinux 上下文支持
--xattrs 启用扩展属性支持
--xattrs-exclude=MASK 指定 xattr 键的排除模式
--xattrs-include=MASK 指定 xattr 键的包含模式
设备选择和切换:
--force-local 即使归档文件有冒号也视为本地文件
-f, --file=ARCHIVE 使用归档文件或设备 ARCHIVE
-F, --info-script=NAME, --new-volume-script=NAME
在每卷磁带结束时运行脚本(隐含 -M)
-L, --tape-length=NUMBER 在写入 NUMBER x 1024 字节后更换磁带
-M, --multi-volume 创建/列出/提取多卷归档
--rmt-command=COMMAND 使用给定的 rmt COMMAND 代替 rmt
--rsh-command=COMMAND 使用远程 COMMAND 代替 rsh
--volno-file=FILE 使用/更新 FILE 中的卷号
设备分块:
-b, --blocking-factor=BLOCKS 每条记录 BLOCKS x 512 字节
-B, --read-full-records 读取时重新分块(适用于 4.2BSD 管道)
-i, --ignore-zeros 忽略归档中的零块(意味着 EOF)
--record-size=NUMBER 每条记录 NUMBER 字节,512 的倍数
归档格式选择:
-H, --format=FORMAT 创建指定格式的归档
FORMAT 是以下之一:
gnu GNU tar 1.13.x 格式
oldgnu 符合 tar <= 1.12 的 GNU 格式
pax POSIX 1003.1-2001 (pax) 格式
posix 同 pax
ustar POSIX 1003.1-1988 (ustar) 格式
v7 旧 V7 tar 格式
--old-archive, --portability
同 --format=v7
--pax-option=关键字[[:]=值][,关键字[[:]=值]]...
控制 pax 关键字
--posix 同 --format=posix
-V, --label=TEXT 创建卷名为 TEXT 的归档;
在列出/提取时,使用 TEXT 作为卷名的通配模式
压缩选项:
-a, --auto-compress 根据归档后缀确定压缩程序
-I, --use-compress-program=PROG
通过 PROG 过滤归档(必须接受 -d 选项)
-j, --bzip2 通过 bzip2 过滤归档
-J, --xz 通过 xz 过滤归档
--lzip 通过 lzip 过滤归档
--lzma 通过 xz 过滤归档
--lzop 通过 lzop 过滤归档
--no-auto-compress 不使用归档后缀确定压缩程序
--zstd 通过 zstd 过滤归档
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
-Z, --compress, --uncompress 通过 compress 过滤归档
本地文件选择:
--backup[=CONTROL] 删除前备份,选择版本 CONTROL
--hard-dereference 跟踪硬链接;归档并转储它们指向的文件
-h, --dereference 跟踪符号链接;归档并转储它们指向的文件
-K, --starting-file=成员名
读取归档时从成员 MEMBER-NAME 开始
--newer-mtime=DATE 仅比较数据更改的日期和时间
-N, --newer=日期或文件, --after-date=日期或文件
仅存储比 DATE-OR-FILE 新的文件
--one-file-system 创建归档时停留在本地文件系统中
-P, --absolute-names 不剥离文件名前的 '/' 字符
--suffix=STRING 删除前备份,覆盖通常的后缀(默认为 '~',
除非被环境变量 SIMPLE_BACKUP_SUFFIX 覆盖)
文件名转换:
--strip-components=NUMBER 提取时从文件名中剥离 NUMBER 个前导路径分量
--transform=表达式, --xform=表达式
使用 sed 替换表达式 EXPRESSION 来转换文件名
信息输出:
--checkpoint[=NUMBER] 每处理 NUMBER 条记录显示一次进度消息(默认 10)
--checkpoint-action=ACTION 在每个检查点执行 ACTION
--full-time 以完整分辨率打印文件时间
--index-file=FILE 将详细输出发送到 FILE
-l, --check-links 如果并非所有链接都被转储,则打印消息
--no-quote-chars=STRING 禁用对 STRING 中字符的引号处理
--quote-chars=STRING 额外对 STRING 中的字符进行引号处理
--quoting-style=STYLE 设置名称引号样式;有效 STYLE 值见下文
-R, --block-number 每条消息显示归档内的块号
--show-defaults 显示 tar 默认值
--show-omitted-dirs 在列出或提取时,列出每个不匹配搜索条件的目录
--show-snapshot-field-ranges
显示快照文件字段的有效范围
--show-transformed-names, --show-stored-names
显示转换后的文件或归档名称
--totals[=SIGNAL] 处理完归档后打印总字节数;
带参数时 - 在接收到此 SIGNAL 时打印总字节数;
允许的信号有:SIGHUP, SIGQUIT, SIGINT, SIGUSR1, SIGUSR2;
不带 SIG 前缀的名称也可接受
--utc 以 UTC 打印文件修改时间
-v, --verbose 详细列出处理的文件
--warning=KEYWORD 警告控制
-w, --interactive, --confirmation
对每个操作请求确认
兼容性选项:
-o 创建时,同 --old-archive;
提取时,同 --no-same-owner
其他选项:
-?, --help 给出此帮助列表
--restrict 禁用某些可能有潜在危害的选项
--usage 给出简短用法信息
--version 打印程序版本
长选项的强制或可选参数也适用于任何对应的短选项。
备份后缀是 '~',除非用 --suffix 或 SIMPLE_BACKUP_SUFFIX 设置。
版本控制可以用 --backup 或 VERSION_CONTROL 设置,值有:
none, off 从不创建备份
t, numbered 创建带编号的备份
nil, existing 如果存在带编号备份则创建带编号的,否则创建简单的
never, simple 总是创建简单的备份
--quoting-style 选项的有效参数是:
literal
shell
shell-always
shell-escape
shell-escape-always
c
c-maybe
escape
locale
clocale
*此* tar 的默认设置为:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/usr/sbin/rmt
--rsh-command=/usr/bin/rsh
Ubuntu24.04 中文版的 tar --help
tar --help
用法: tar [选项...] [FILE]...
GNU 'tar' saves many files together into a single tape or disk archive, and can
restore individual files from the archive.
Examples:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.
tar -tvf archive.tar # List all files in archive.tar verbosely.
tar -xf archive.tar # Extract all files from archive.tar.
主操作模式:
-A, --catenate, --concatenate 追加 tar 文件至归档
-c, --create 创建一个新归档
--delete 从归档(非磁带!)中删除
-d, --diff, --compare 找出归档和文件系统的差异
-r, --append 追加文件至归档结尾
--test-label 测试归档卷标并退出
-t, --list 列出归档内容
-u, --update 仅追加比归档中副本更新的文件
-x, --extract, --get 从归档中解出文件
操作修饰符:
--check-device 当创建增量归档时检查设备号(默认)
-g, --listed-incremental=FILE 处理新式的 GNU 格式的增量备份
-G, --incremental 处理老式的 GNU 格式的增量备份
--hole-detection=TYPE 用于探测holes 的技术
--ignore-failed-read
当遇上不可读文件时不要以非零值退出
--level=NUMBER 所创建的增量列表归档的输出级别
--no-check-device 当创建增量归档时不要检查设备号
--no-seek 归档不可检索
-n, --seek 归档可检索
--occurrence[=NUMBER] 仅处理归档中每个文件的第 NUMBER
个事件;仅当与以下子命令 --delete,
--diff, --extract 或是 --list
中的一个联合使用时,此选项才有效。而且不管文件列表是以命令行形式给出或是通过
-T 选项指定的;NUMBER 值默认为 1
--sparse-version=MAJOR[.MINOR]
设置所用的离散格式版本(隐含
--sparse)
-S, --sparse 高效处理离散文件
本地文件名选择:
--add-file=FILE 添加指定的 FILE 至归档(如果名字以 -
开始会很有用的)
-C, --directory=DIR 改变至目录 DIR
--exclude=PATTERN 排除以 PATTERN 指定的文件
--exclude-backups 排除备份和锁文件
--exclude-caches 除标识文件本身外,排除包含
CACHEDIR.TAG 的目录中的内容
--exclude-caches-all 排除包含 CACHEDIR.TAG 的目录
--exclude-caches-under 排除包含 CACHEDIR.TAG
的目录中所有内容
--exclude-ignore=FILE 若存在FILE,
则从其中读取每个目录的例外匹配项
--exclude-ignore-recursive=FILE
若存在FILE,
则从其中为每个目录及其子目录读取需要排除的例外匹配项
--exclude-tag=FILE 除 FILE 自身外,排除包含 FILE
的目录中的内容
--exclude-tag-all=FILE 排除包含 FILE 的目录
--exclude-tag-under=FILE 排除包含 FILE 的目录中的所有内容
--exclude-vcs 排除版本控制系统目录
--exclude-vcs-ignores 从VCS 忽略文件中读取排除匹配项
--no-null 禁用上一次的效果 --null 选项
--no-recursion 避免目录中的自动降级
--no-unquote 不要unquote 输入文件或成员名称
--no-verbatim-files-from -T
把以‘-’开始的文件作为选项(默认)
--null -T 读取以空终止的名字; 隐含
--verbatim-files-from
--recursion 目录递归(默认)
-T, --files-from=FILE 从 FILE
中获取文件名来解压或创建文件
--unquote unquote 输入文件或成员名称(默认)
--verbatim-files-from -T
逐字读取文件名(不处理选项或进行转义)
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
文件名匹配选项(同时影响排除和包括模式串):
--anchored 模式串匹配文件名头部
--ignore-case 忽略大小写
--no-anchored 模式串匹配任意‘/’后字符(对
exclusion 为默认值)
--no-ignore-case 匹配大小写(默认)
--no-wildcards 逐字匹配字符串
--no-wildcards-match-slash 通配符不匹配‘/’
--wildcards 使用通配符(对 exclusion 为默认值)
--wildcards-match-slash 通配符匹配‘/’(对 exclusion
为默认值)
重写控制:
--keep-directory-symlink 解压时保留已存在的目录符号链接
--keep-newer-files
不要替换比归档中副本更新的已存在的文件
-k, --keep-old-files 解压时不替换存在的文件,
而将其认为是错误
--no-overwrite-dir 保留已存在目录的元数据
--one-top-level[=DIR] 创建子目录以避免解压松散文件
--overwrite 解压时重写存在的文件
--overwrite-dir
解压时重写已存在目录的元数据(默认)
--recursive-unlink 解压目录之前先清除目录层次
--remove-files 在添加文件至归档后删除它们
--skip-old-files
解压时不替换存在的文件,而是自动忽略
-U, --unlink-first 在解压要重写的文件之前先删除它们
-W, --verify 在写入以后尝试校验归档
选择输出流:
--ignore-command-error 忽略子进程的退出代码
--no-ignore-command-error
将子进程的非零退出代码认为发生错误
-O, --to-stdout 解压文件至标准输出
--to-command=COMMAND
将解压的文件通过管道传送至另一个程序
操作文件属性:
--atime-preserve[=METHOD]
在输出的文件上保留访问时间,要么通过在读取(默认
METHOD=‘replace’)后还原时间,要不就不要在第一次(METHOD=‘system’)设置时间
--clamp-mtime 当文件比 --mtime
指定的文件更新时仅更新时间
--delay-directory-restore
直到解压结束才设置修改时间和所解目录的权限
--group=名称 强制将 NAME
作为所添加的文件的组所有者
--group-map=FILE 用FILE 映射文件所有者GIDs 和名字
--mode=CHANGES 强制将所添加的文件(符号)更改为权限
CHANGES
--mtime=DATE-OR-FILE 从 DATE-OR-FILE 中为添加的文件设置
mtime
-m, --touch 不要解压文件的修改时间
--no-delay-directory-restore
取消 --delay-directory-restore 选项的效果
--no-same-owner
将文件解压为您所有(普通用户默认此项)
--no-same-permissions
从归档中解压权限时使用用户的掩码位(默认为普通用户服务)
--numeric-owner 总是以数字代表用户/组的名称
--owner=名称 强制将 NAME
作为所添加的文件的所有者
--owner-map=FILE 用FILE 映射文件所有者UIDs 和名字
-p, --preserve-permissions, --same-permissions
解压文件权限信息(默认只为超级用户服务)
--same-owner
尝试解压时保持所有者关系一致(超级用户默认此项)
--sort=ORDER 目录排序顺序: none(默认), name 或inode
-s, --preserve-order, --same-order
成员参数按归档中的文件顺序列出
操作extended 文件属性:
--acls 开启 POSIX ACLs 支持
--no-acls 关闭 POSIX ACLs 支持
--no-selinux 关闭 SELinux 上下文支持
--no-xattrs 关闭extended 属性支持
--selinux 开启 SELinux 上下文支持
--xattrs 开启extended 属性支持
--xattrs-exclude=MASK 为xattr 关键字指定排除匹配项
--xattrs-include=MASK 为xattr 关键字指定包含匹配项
设备选择和切换:
--force-local
即使归档文件存在副本还是把它认为是本地归档
-f, --file=ARCHIVE 使用归档文件或 ARCHIVE 设备
-F, --info-script=名称, --new-volume-script=名称
在每卷磁带最后运行脚本(隐含 -M)
-L, --tape-length=NUMBER 写入 NUMBER × 1024 字节后更换磁带
-M, --multi-volume 创建/列出/解压多卷归档文件
--rmt-command=COMMAND 使用指定的 rmt COMMAND 代替 rmt
--rsh-command=COMMAND 使用远程 COMMAND 代替 rsh
--volno-file=FILE 使用/更新 FILE 中的卷数
设备分块:
-b, --blocking-factor=BLOCKS 每个记录 BLOCKS x 512 字节
-B, --read-full-records 读取时重新分块(只对 4.2BSD 管道有效)
-i, --ignore-zeros 忽略归档中的零字节块(即文件结尾)
--record-size=NUMBER 每个记录的字节数 NUMBER,乘以 512
选择归档格式:
-H, --format=FORMAT 创建指定格式的归档
FORMAT 是以下格式中的一种:
gnu GNU tar 1.13.x 格式
oldgnu GNU 格式,其中 tar 版本 <= 1.12
pax POSIX 1003.1-2001 (pax) 格式
posix 等同于 pax
ustar POSIX 1003.1-1988 (ustar) 格式
v7 旧的 V7 tar 格式
--old-archive, --portability
等同于 --format=v7
--pax-option=关键字[[:]=值][,关键字[[:]=值]]...
控制 pax 关键字
--posix 等同于 --format=posix
-V, --label=TEXT 创建带有卷名 TEXT
的归档;在列出/解压时,使用 TEXT
作为卷名的模式串
压缩选项:
-a, --auto-compress 使用归档后缀名来决定压缩程序
-I, --use-compress-program=PROG
通过 PROG 过滤(必须是能接受 -d
选项的程序)
-j, --bzip2 通过 bzip2 过滤归档
-J, --xz 通过 xz 过滤归档
--lzip 通过 lzip 过滤归档
--lzma 通过 xz 过滤归档
--lzop 通过 lzop 过滤归档
--no-auto-compress 不使用归档后缀名来决定压缩程序
--zstd 通过 zstd 过滤归档
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
-Z, --compress, --uncompress 通过 compress 过滤归档
本地文件选择:
--backup[=CONTROL] 在删除前备份,选择 CONTROL 版本
--hard-dereference
跟踪硬链接;将它们所指向的文件归档并输出
-h, --dereference
跟踪符号链接;将它们所指向的文件归档并输出
-K, --starting-file=MEMBER-NAME
从归档中的 MEMBER-NAME
成员处开始读取归档
--newer-mtime=DATE 当只有数据改变时比较数据和时间
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
只保存比 DATE-OR-FILE 更新的文件
--one-file-system 创建归档时保存在本地文件系统中
-P, --absolute-names 不要从文件名中清除引导符‘/’
--suffix=STRING 在删除前备份,除非被环境变量
SIMPLE_BACKUP_SUFFIX
覆盖,否则覆盖常用后缀(‘’)
文件名变换:
--strip-components=NUMBER 解压时从文件名中清除 NUMBER
个引导部分
--transform=EXPRESSION, --xform=EXPRESSION
使用 sed 代替 EXPRESSION
来进行文件名变换
提示性输出:
--checkpoint[=NUMBER] 每隔 NUMBER
个记录显示进度信息(默认为 10 个)
--checkpoint-action=ACTION 在每个检查点上执行 ACTION
--full-time 按文件原本时间格式打印
--index-file=FILE 将详细输出发送至 FILE
-l, --check-links
只要不是所有链接都被输出就打印信息
--no-quote-chars=STRING 禁用来自 STRING 的字符引用
--quote-chars=STRING 来自 STRING 的额外的引用字符
--quoting-style=STYLE 设置名称引用风格;有效的 STYLE
值请参阅以下说明
-R, --block-number 每个信息都显示归档内的块数
--show-defaults 显示 tar 默认选项
--show-omitted-dirs
列表或解压时,列出每个不匹配查找标准的目录
--show-snapshot-field-ranges
显示快照文件区的有效范围
--show-transformed-names, --show-stored-names
显示变换后的文件名或归档名
--totals[=SIGNAL] 处理归档后打印出总字节数;当此
SIGNAL 被触发时带参数 -
打印总字节数;允许的信号为:
SIGHUP,SIGQUIT,SIGINT,SIGUSR1 和
SIGUSR2;同时也接受不带 SIG
前缀的信号名称
--utc 以 UTC 格式打印文件修改时间
-v, --verbose 详细地列出处理的文件
--warning=KEYWORD 警告控制
-w, --interactive, --confirmation
每次操作都要求确认
兼容性选项:
-o 创建归档时,相当于
--old-archive;展开归档时,相当于
--no-same-owner
其它选项:
-?, --help 显示此帮助列表
--restrict 禁用某些潜在的有危险的选项
--usage 显示简短的用法说明
--version 打印程序版本
长选项和相应短选项具有相同的强制参数或可选参数。
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control may be set with --backup or VERSION_CONTROL, values are:
none, off never make backups
t, numbered make numbered backups
nil, existing numbered if numbered backups exist, simple otherwise
never, simple always make simple backups
--quoting-style 选项的有效参数为:
literal
shell
shell-always
shell-escape
shell-escape-always
c
c-maybe
escape
locale
clocale
此 tar 默认为:
--format=gnu -f- -b20 --quoting-style=escape --rmt-command=/usr/sbin/rmt
--rsh-command=/usr/bin/rsh
tar --zstd
详解
--zstd
是 tar
命令中用于支持 Zstandard (zstd) 压缩算法的选项,这是一种由 Facebook 开发的高性能压缩算法,在速度和压缩率之间取得了优秀平衡。以下是详细解析:
一、基本用法
1. 创建 zstd 压缩包
tar --zstd -cvf archive.tar.zst file1 dir1
# 或(短选项形式)
tar -I zstd -cvf archive.tar.zst file1 dir1
2. 解压 zstd 压缩包
tar --zstd -xvf archive.tar.zst
# 或
tar -I zstd -xvf archive.tar.zst
3. 查看压缩包内容
tar --zstd -tvf archive.tar.zst
二、高级参数:自定义压缩行为
通过 --zstd=
后接参数可调整压缩行为:
tar --zstd=OPTION -cvf archive.tar.zst /path
常用参数:
参数 | 作用 | 示例 |
---|---|---|
level=数字 |
设置压缩级别 (1-19, 默认 3) | --zstd=level=12 |
threads=数字 |
设置多线程压缩 (0=自动) | --zstd=threads=4 |
long |
启用长距离模式 (提升压缩率) | --zstd=long |
ultra |
解锁 >19 级别 (最高到 22) | --zstd=level=20,ultra |
示例:
# 使用最高压缩级别 + 多线程
tar --zstd=level=19,threads=0 -cvf backup.tar.zst /data
# 解压时显示进度(需 pv 工具)
tar --zstd -xvf backup.tar.zst | pv -b > /dev/null
三、性能对比(参考)
算法 | 压缩速度 | 解压速度 | 压缩率 | 典型用例 |
---|---|---|---|---|
zstd | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 实时日志、大型数据集 |
gzip | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | 通用场景 |
xz | ⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ | 归档存储(不频繁访问) |
zstd (–fast) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ | 快速临时备份 |
💡 经验值:
- 级别 1:比
gzip -1
快 4倍,压缩率相当- 级别 19:压缩率接近
xz
,但压缩速度快 5倍+,解压快 2倍+
四、系统兼容性处理
1. 确保 zstd 已安装
# Debian/Ubuntu
sudo apt install zstd
# RHEL/CentOS
sudo yum install zstd
# Arch
sudo pacman -S zstd
2. 兼容旧版 tar 的替代命令
# 压缩
tar -cvf - file1 | zstd -T0 > archive.tar.zst # -T0: 自动多线程
# 解压
zstd -d archive.tar.zst -o - | tar -xvf -
五、典型用例
1. 快速压缩大日志文件
tar --zstd=level=3,threads=0 -cvf logs_$(date +%F).tar.zst /var/log
2. 最高压缩率归档
tar --zstd=level=19,long -cvf project_backup.tar.zst ~/project
3. 解压到指定目录
tar --zstd -xvf backup.tar.zst -C /restore/path
4. 查看压缩包内容并搜索
tar --zstd -tvf data.tar.zst | grep "report.csv"
六、注意事项
版本要求:
- GNU tar ≥ 1.31 原生支持
--zstd
- 旧版本需用
-I zstd
或管道操作
- GNU tar ≥ 1.31 原生支持
解压兼容性:
- 使用高压缩级别(>19)创建的包需要 zstd ≥ 1.4.0 才能解压
资源占用:
- 级别 >18 时内存消耗显著增加(建议 ≥32GB RAM)
扩展名约定:
- 标准扩展名:
.tar.zst
或.tzst
- 避免使用
.tar.zstd
(非标准)
- 标准扩展名:
总结
tar --zstd
是现代 Linux 系统中处理大文件/高频备份的理想选择,其优势在于:
- 闪电级解压速度(适合频繁访问的数据)
- 可调节的压缩效率(从实时压缩到归档存储)
- 多线程支持(充分利用多核 CPU)
对于日常使用,推荐默认级别 3-5;对存储敏感场景可尝试级别 12-15(平衡点);极限压缩用 19+long
模式。
tar
本身不支持 ZIP 格式, 可安装 zip
和 unzip
在 Linux 中处理 ZIP 文件需要使用专门的工具,因为 tar
本身不支持 ZIP 格式。以下是完整的 ZIP 压缩/解压指南:
一、ZIP 与 TAR 的本质区别
特性 | TAR (+压缩) | ZIP |
---|---|---|
格式 | 归档+可选压缩 | 归档+内置压缩 |
压缩算法 | 外部工具 (gzip/zstd 等) | 内置 Deflate (或 ZIP 2.0) |
跨平台性 | 主要类 Unix 系统 | 全平台通用 (Windows/Mac) |
权限保留 | 完整保留 Linux 权限 | 部分保留 |
二、ZIP 文件操作工具
需要安装 zip
和 unzip
包:
# Debian/Ubuntu
sudo apt install zip unzip
# RHEL/CentOS
sudo yum install zip unzip
# Arch
sudo pacman -S zip unzip
三、ZIP 压缩详解
基础命令:
zip -r archive.zip file1 dir1 # -r: 递归包含子目录
高级选项:
选项 | 作用 | 示例 |
---|---|---|
-e |
加密 (设置密码) | zip -er secret.zip sensitive_data |
-0 |
仅存储 (无压缩) | zip -0r backup.zip /data |
-1 ~-9 |
压缩级别 (1=最快, 9=最强) | zip -9r max_compressed.zip large_dir |
-s 大小 |
分卷压缩 (单位: m/k/g) | zip -s 100m -r split.zip big_data |
-x |
排除文件 | zip -r project.zip src/ -x "*.log" |
-y |
保留符号链接 | zip -ry links.zip symlink_dir |
示例:
# 创建加密 ZIP
zip -e -r financial_2023.zip /finance -x "*.tmp"
# 最大压缩率归档
zip -9r full_backup.zip /home
# 分卷压缩 (生成 backup.zip, backup.z01, backup.z02...)
zip -s 500m -r backup.zip /backup_source
四、ZIP 解压详解
基础命令:
unzip archive.zip # 解压到当前目录
unzip data.zip -d /target # 解压到指定目录
高级选项:
选项 | 作用 | 示例 |
---|---|---|
-l |
列出内容 (不解压) | unzip -l archive.zip |
-o |
覆盖文件 (不提示) | unzip -o update.zip |
-n |
不覆盖已存在文件 | unzip -n legacy.zip |
-P |
密码解压 (不安全)⚠️ | unzip -P "pass123" locked.zip |
-q |
静默模式 | unzip -q large.zip |
-j |
忽略目录结构 (平铺文件) | unzip -j images.zip |
分卷解压:
# 合并分卷后解压 (确保所有 .zXX 文件在同一目录)
zip -s 0 split.zip --out full.zip && unzip full.zip
# 直接解压首个分卷 (自动检测后续分卷)
unzip split.zip
五、TAR 与 ZIP 互转
1. TAR 转 ZIP:
tar cf - dir1 | zip backup.zip - # 通过管道转换
2. ZIP 转 TAR:
unzip -p archive.zip | tar xf - # 提取到当前目录
unzip -p archive.zip | tar xf - -C /target # 提取到指定目录
3. 保留权限的转换:
# ZIP → TAR (保留权限)
unzip -X archive.zip | tar xvf - # -X 保留权限/UID/GID
# TAR → ZIP (保留权限)
tar cf - --format=posix dir | zip -X backup.zip -
六、图形化工具替代方案
工具 | 安装命令 | 特点 |
---|---|---|
file-roller (GNOME) | sudo apt install file-roller |
系统默认归档管理器 |
ark (KDE) | sudo apt install ark |
KDE 桌面集成 |
p7zip (CLI) | sudo apt install p7zip-full |
支持 7z/zip/rar 等 |
# 用 7z 处理 ZIP (更强大的压缩)
7z a -tzip archive.zip dir1 # 压缩
7z x archive.zip # 解压
七、使用场景推荐
场景 | 推荐工具 | 原因 |
---|---|---|
Linux 备份 | tar + zstd |
保留权限, 高性能 |
跨平台共享 | zip |
Windows/Mac 原生支持 |
加密文档 | zip -e 或 7z -p |
内置加密支持 |
超大文件 | tar + 分卷 或 zip -s |
更稳定的分卷处理 |
八、注意事项
编码问题:解压 Windows 创建的 ZIP 时可能乱码
unzip -O GBK win_file.zip # 指定中文编码
权限保留:ZIP 不保留 SELinux 上下文,系统备份用
tar
更可靠性能对比:
# 压缩速度测试 (1GB 目录) time zip -r test.zip large_dir # ZIP 默认压缩 time tar -czf test.tar.gz large_dir # gzip 压缩 time tar -c --zstd -f test.tar.zst large_dir # zstd 压缩
安全警告:避免在命令行用
-P password
,密码会暴露在历史记录中
掌握这些技巧后,您可以根据需求灵活选择工具处理 ZIP 和 TAR 文件!
tar 与 7zip 全面对比指南
在 Linux 环境中,tar
和 7zip
都是强大的归档/压缩工具,但设计理念和适用场景不同。以下是详细对比:
一、核心差异总结
特性 | tar | 7zip (7z) |
---|---|---|
原生平台 | Unix/Linux | Windows (跨平台支持好) |
核心功能 | 归档 (打包) | 归档+压缩一体化 |
压缩算法 | 依赖外部工具 (gzip, xz等) | 内置多种算法 (LZMA, LZMA2等) |
权限保留 | 完整保留 Linux 权限 | 部分保留 |
典型扩展名 | .tar, .tar.gz, .tar.xz | .7z, .zip |
分卷压缩 | 需配合 split | 原生支持 |
加密支持 | 需配合 GPG | 原生 AES-256 加密 |
二、安装与基础使用
1. tar (通常系统自带)
# 检查版本
tar --version
2. 7zip 安装
# Ubuntu/Debian
sudo apt install p7zip-full
# RHEL/CentOS
sudo yum install p7zip
# Arch
sudo pacman -S p7zip
三、压缩操作对比
1. 创建压缩包
操作 | tar 命令 | 7zip 命令 |
---|---|---|
基础压缩 | tar -czvf file.tar.gz dir |
7z a archive.7z dir |
指定格式 | 通过扩展名自动判断 | 7z a -tzip archive.zip dir |
最高压缩率 | tar -cJvf file.tar.xz dir |
7z a -mx=9 archive.7z dir |
排除文件 | tar -czvf file.tar.gz --exclude='*.log' dir |
7z a -x!*.log archive.7z dir |
多线程压缩 | tar -I 'zstd -T0' -cvf file.tar.zst dir |
7z a -mmt=on archive.7z dir |
2. 性能对比 (1GB 测试数据)
工具/算法 | 压缩时间 | 解压时间 | 压缩后大小 |
---|---|---|---|
tar + gzip (-9) | 25s | 5s | 350MB |
tar + zstd (-19) | 40s | 3s | 300MB |
7z (LZMA2 -mx9) | 120s | 15s | 280MB |
7z (zstd -mx9) | 20s | 4s | 310MB |
💡 结论:
- 速度优先:tar + zstd 或 7z + zstd
- 压缩率优先:7z LZMA2
- 通用性:tar + gzip
四、解压操作对比
1. 基础解压
场景 | tar 命令 | 7zip 命令 |
---|---|---|
常规解压 | tar -xzvf file.tar.gz |
7z x archive.7z |
指定目录 | tar -xzvf file.tar.gz -C /path |
7z x archive.7z -o/path |
查看内容 | tar -tvf file.tar.gz |
7z l archive.7z |
解压特定文件 | tar -xzvf file.tar.gz path/to/file |
7z x archive.7z path/to/file |
2. 特殊格式支持
# 7zip 支持 30+ 格式解压
7z x archive.zip # ZIP
7z x archive.rar # RAR
7z x archive.iso # ISO
7z x archive.deb # DEB包
五、高级功能对比
1. 加密
# 7zip 原生加密
7z a -pPASSWORD secure.7z dir
# tar 需配合 GPG
tar -czvf - dir | gpg -c > archive.tar.gz.gpg
2. 分卷压缩
# 7zip 原生支持
7z a -v100m split.7z large_file # 100MB分卷
# tar 需配合 split
tar -czvf - dir | split -b 100M - archive.tar.gz.part
3. 固实压缩 (Solid Compression)
# 7zip 独有功能 (提升压缩率)
7z a -ms=on solid.7z dir
六、跨平台协作
1. 创建 Windows 兼容包
# 最佳选择:ZIP格式
7z a -tzip windows.zip dir # 保留Windows路径分隔符
# tar 需注意:
tar -czvf windows.tar.gz --transform 's|/|\\|g' dir
2. 处理Windows文件
# 解压含中文的ZIP
7z x -mcp=936 win_file.zip # GBK编码
# tar 需转换编码
unzip -O GBK win_file.zip
七、典型使用场景推荐
场景 | 推荐工具 | 理由 |
---|---|---|
Linux系统备份 | tar + zstd | 保留完整权限,速度快 |
跨平台共享文件 | 7z (-tzip) | Windows/Mac原生支持 |
极限压缩存档 | 7z (LZMA2) | 最高压缩率 |
加密敏感数据 | 7z (AES-256) | 强加密原生支持 |
处理多种压缩格式 | 7z | 支持30+格式 |
自动化脚本 | tar | 所有Linux系统预装 |
八、组合使用技巧
1. 高压缩率归档
# 先用tar归档保留权限,再用7z压缩
tar -cvf - --format=posix dir | 7z a -si -mx=9 archive.tar.7z
2. 解压复杂压缩包
# 解压tar.7z并保留权限
7z x -so archive.tar.7z | tar -xvf -
3. 创建自解压包 (Windows)
7z a -sfx archive.exe dir
九、注意事项
权限问题:
- 用
tar
备份系统文件时加sudo
7z
解压后可能需要chmod
修复权限
- 用
文件名编码:
- 跨平台时使用英文文件名最安全
- 处理中文:
7z
用-mcp
参数,tar
用convmv
转换
资源消耗:
- 7z 的 LZMA2 算法可能消耗大量内存(>1GB RAM)
- 在低配设备用
tar + gzip
或7z -m0=zstd
总结选择建议
- 纯 Linux 环境:优先使用
tar
(系统集成好,权限保留完整) - 跨平台需求:使用
7zip
(格式支持广泛,Windows友好) - 极致压缩率:
7z LZMA2
(比 tar+xz 压缩率更高) - 速度敏感场景:
tar + zstd
或7z + zstd
掌握两者的特点和组合技巧,可以应对任何归档压缩需求!
tar 与 RAR 全面对比指南
在归档和压缩领域,tar
和 RAR
代表了两种不同的技术路线。以下是深度技术对比及使用场景分析:
一、核心差异概览
特性 | tar | RAR |
---|---|---|
格式性质 | 开源标准 | 专有格式 (WinRAR 公司) |
核心功能 | 打包 (需配合压缩工具) | 打包+压缩一体化 |
压缩算法 | 依赖外部 (gzip/zstd/xz) | 专属 RAR 算法 (v4/v5) |
恢复记录 | 不支持 | 原生支持 (修复损坏文件) |
分卷压缩 | 需配合 split | 原生支持 |
多平台支持 | Linux/macOS 原生 | Windows 优先,Linux 需额外安装 |
授权模式 | 完全免费 | 共享软件 (40天试用) |
二、Linux 环境安装
1. tar (系统自带)
# 所有 Linux 发行版预装
tar --version
2. RAR 安装
# Ubuntu/Debian
sudo apt install rar unrar
# RHEL/CentOS
sudo yum install epel-release
sudo yum install rar unrar
# Arch
sudo pacman -S rar unrar
三、压缩操作对比
1. 基础压缩命令
操作 | tar 命令 | RAR 命令 |
---|---|---|
创建压缩包 | tar -czvf file.tar.gz dir |
rar a file.rar dir |
最大压缩率 | tar -cJvf file.tar.xz dir |
rar a -m5 file.rar dir |
分卷压缩 | tar -cvzf - dir | split -b 100M - part |
rar a -v100m file.rar dir |
加密压缩 | tar -czvf - dir | gpg -c > file.tar.gz.gpg |
rar a -pPASSWORD file.rar dir |
排除文件 | tar -czvf file.tar.gz --exclude='*.tmp' dir |
rar a -x*.tmp file.rar dir |
2. 压缩性能对比 (1GB 测试数据)
工具/算法 | 压缩时间 | 解压时间 | 压缩率 |
---|---|---|---|
tar + gzip (-9) | 25s | 5s | 35% |
tar + zstd (-19) | 40s | 3s | 30% |
RAR (-m5) | 80s | 10s | 28% |
RAR (固实 -m5 -s) | 120s | 15s | 25% |
💡 结论:
- 日常使用:tar + zstd (最佳速度/压缩平衡)
- 极限压缩:RAR 固实模式 (比 tar+xz 高 3-5%)
- 分卷压缩:RAR 原生支持更方便
四、解压操作对比
1. 基础解压命令
场景 | tar 命令 | RAR 命令 |
---|---|---|
常规解压 | tar -xzvf file.tar.gz |
unrar x file.rar |
指定目录 | tar -xzvf file.tar.gz -C /path |
unrar x file.rar /path |
查看内容 | tar -tvf file.tar.gz |
unrar l file.rar |
解压特定文件 | tar -xzvf file.tar.gz path/to/file |
unrar x file.rar path/to/file |
修复损坏包 | 不支持 | unrar r file.rar |
2. 特殊功能
# RAR 恢复记录 (创建时添加)
rar a -rr3% file.rar dir # 添加3%恢复记录
# 测试压缩包完整性
unrar t file.rar
五、技术优势对比
tar 核心优势:
- 系统集成
# 结合 find 进行增量备份 find /data -mtime -1 -exec tar -rvf inc_backup.tar {} \;
- 权限保留
sudo tar -cpzvf full_system.tar.gz / # 保留所有权限/SELinux上下文
- 流式处理
# 直接打包传输 tar -czf - /data | ssh user@backup-server "cat > backup.tar.gz"
RAR 核心优势:
- 恢复记录
# 创建带10%恢复记录的压缩包 rar a -rr10% -m5 critical_data.rar /database
- 固实压缩 (Solid Compression)
rar a -s -m5 solid.rar thousands_of_small_files
- 多卷自解压
# 创建Windows兼容的自解压分卷 rar a -sfx -v100m installer.exe app_files
六、跨平台协作方案
1. Windows → Linux
# 解压 Windows 创建的 RAR
unrar x win_file.rar
# 处理中文文件名
unrar x -ierr win_file.rar # 忽略编码错误
convmv -f GBK -t UTF-8 -r --notest * # 修复编码
2. Linux → Windows
# 创建 Windows 友好的压缩包
rar a -m5 -cp437 windows_backup.rar dir # 强制使用兼容编码
# 替代方案:使用 ZIP
zip -r -9 windows_safe.zip dir
七、使用场景推荐
场景 | 推荐工具 | 理由 |
---|---|---|
Linux 系统备份 | tar + zstd |
完整保留权限,速度快 |
向 Windows 用户发送文件 | RAR |
Windows 原生支持 |
关键数据存档 | RAR (带恢复记录) |
数据损坏修复能力 |
海量小文件压缩 | RAR 固实模式 |
压缩率提升显著 |
自动化脚本 | tar |
所有 Linux 系统预装 |
加密敏感数据 | RAR 或 7z |
比 tar+GPG 更易用 |
八、安全注意事项
RAR 密码安全性:
# 避免在命令行暴露密码 (历史记录风险) rar a -p$(cat password.txt) secure.rar dir # 从文件读取密码
tar 权限问题:
# 解压系统文件需 root 权限 sudo tar -xpzvf system_backup.tar.gz -C /
RAR 漏洞历史:
- 定期更新 unrar 工具 (已知漏洞:CVE-2022-3033)
- 谨慎解压来源不明的 RAR 文件
九、替代方案:7z vs RAR
特性 | RAR | 7z |
---|---|---|
授权 | 专有 | 开源 (Apache 2.0) |
压缩率 | 极高 (固实模式) | 极高 (LZMA2) |
格式支持 | 有限 | 支持 30+ 格式 |
命令行体验 | 直观 | 复杂但功能更强 |
恢复记录 | 原生支持 | 需外部工具 (par2) |
# 7z 实现类似 RAR 的功能
7z a -v100m -pPASSWORD -mhe=on archive.7z dir # 分卷+加密
十、终极选择建议
- 纯 Linux 环境:优先
tar + zstd
tar -I 'zstd -T0 -19' -cvf archive.tar.zst dir
- Windows 兼容需求:使用
RAR
rar a -m5 -rr5% -v500m backup.rar dir
- 开源替代方案:选择
7z
7z a -t7z -m0=zstd -mx=9 -v100m archive.7z dir
📌 关键结论:
- tar 是 Linux 的"瑞士军刀",适合系统级操作
- RAR 在分卷压缩和恢复记录上独具优势
- 优先考虑开源方案时,7z 是 RAR 的最佳替代品
- 跨平台共享首选 ZIP 格式(通用性最佳)
tar
是 Linux 中用于打包和解包文件的核心命令,支持多种压缩格式(如 .gz
, .bz2
, .xz
)。以下是详细用法指南:
基础语法
tar [选项] [文件名] [文件/目录列表]
核心功能与常用选项
功能 | 选项组合 | 说明 |
---|---|---|
打包 | tar -cvf 文件名.tar 文件/目录 |
创建归档(不压缩) |
解包 | tar -xvf 文件名.tar |
提取归档内容 |
查看内容 | tar -tvf 文件名.tar |
列出归档内文件 |
打包+压缩 | tar -czvf 文件名.tar.gz 文件/目录 |
用 gzip 压缩(速度快) |
tar -cjvf 文件名.tar.bz2 文件/目录 |
用 bzip2 压缩(压缩率高) | |
tar -cJvf 文件名.tar.xz 文件/目录 |
用 xz 压缩(极高压缩率) | |
解压+解包 | tar -xzvf 文件名.tar.gz |
解压 gzip 归档 |
tar -xjvf 文件名.tar.bz2 |
解压 bzip2 归档 | |
tar -xJvf 文件名.tar.xz |
解压 xz 归档 | |
解压到指定目录 | tar -xvf 文件名.tar -C 目标目录 |
解包到目标目录(-C 需大写) |
追加文件 | tar -rvf 文件名.tar 新文件 |
向已有归档中添加文件(不支持压缩归档) |
关键选项解析
- 主操作:
-c
创建归档 |-x
解包 |-t
查看内容 |-r
追加文件 - 辅助选项:
-v
显示过程(verbose) |-f 文件名
指定归档文件(必须放在最后) - 压缩类型:
-z
gzip (.gz
) |-j
bzip2 (.bz2
) |-J
xz (.xz
)
(现代 Linux 中,解压时通常可省略压缩类型,tar -xf
能自动识别)
实用示例
打包日志目录(不压缩)
tar -cvf logs_backup.tar /var/log/
打包并用 gzip 压缩
tar -czvf project.tar.gz /home/project/
解压到指定目录
tar -xzvf backup.tar.gz -C /restore/path/
查看压缩包内容
tar -tvf archive.tar.gz
排除特定文件
tar -czvf data.tar.gz --exclude="*.tmp" /data/
保留文件权限(常用于备份)
tar -cpzvf etc_backup.tar.gz /etc/ # `-p` 保留权限
注意事项
选项顺序:
-f
必须紧跟文件名(如tar -czvf 文件.tar.gz
✅,不能写成tar -cfzv
❌)。压缩效率对比:
gzip
(.gz
):速度最快,压缩率一般bzip2
(.bz2
):速度慢,压缩率中等xz
(.xz
):速度最慢,压缩率最高(适合大文件长期存储)
解压通用命令:
现代tar
支持自动检测压缩类型,解压时只需:tar -xf 任意压缩包 # 自动识别 .tar/.gz/.bz2/.xz 等
跨系统兼容:
添加--format=posix
可创建兼容 Windows 的归档(如tar -cvf --format=posix
)。
扩展知识
- 创建分卷压缩包(适合大文件分割):
tar -czvf - bigfile | split -b 2G - bigfile_part.tar.gz.
- 对比归档与文件差异:
tar -df archive.tar # 列出归档内文件与磁盘的差异
📌 更多用法查看手册:
man tar
或tar --help
。
tar
(Tape Archive)是 Linux 和 Unix-like 系统中用于打包、压缩、解包和解压缩文件和目录的核心命令。虽然名字源于磁带备份,但现在广泛用于文件归档。
核心概念:
- 打包 (Archiving):将多个文件或目录组合成一个单一的文件(
.tar
文件)。这个过程本身不会压缩数据,只是将文件集合在一起。 - 压缩 (Compression):使用特定算法(如 gzip, bzip2, xz)减小打包文件的大小。
tar
通常与压缩工具结合使用来完成压缩。
tar
命令的强大之处在于它既能处理打包/解包,也能通过选项无缝调用压缩工具(如 gzip, bzip2, xz)。
基本语法
tar [选项] [归档文件名] [要归档的文件或目录...]
常用选项
tar
选项可以连在一起写(如 -cvf
),顺序很重要,尤其是 -f
必须紧跟文件名。
操作模式 (必须选一个):
-c
,--create
: 创建一个新的归档文件。-x
,--extract
,--get
: 解包或解压缩一个归档文件。-t
,--list
: 列出归档文件中的内容(不解包)。-r
,--append
: 追加文件到已存在的归档文件末尾。-u
,--update
: 更新归档文件(只添加比归档内同名文件新的文件)。-A
,--catenate
,--concatenate
: 合并多个.tar
归档文件。
压缩类型 (可选,创建或解压时指定):
-z
,--gzip
: 使用 gzip 压缩(.tar.gz
或.tgz
)。-j
,--bzip2
: 使用 bzip2 压缩(.tar.bz2
或.tbz2
,.tbz
)。-J
,--xz
: 使用 xz 压缩(.tar.xz
或.txz
)。压缩率通常最高,但速度慢。-Z
,--compress
: 使用老式 compress 压缩(.tar.Z
)。现在很少用。--zstd
: 使用 zstd 压缩(.tar.zst
)。较新,压缩速度和效率平衡好。
常用辅助选项:
-f
,--file=ARCHIVE
: 指定归档文件名。这是最重要的选项之一,必须使用。后面紧跟文件名(如-f mybackup.tar.gz
)。-v
,--verbose
: 详细模式。显示正在处理的文件列表。在创建、列出或解压时很有用。-C
,--directory=DIR
: 改变解包/打包的目录。解压时:先切换到DIR
再解压。打包时:相当于在DIR
目录下执行打包。-p
,--preserve-permissions
,--same-permissions
: 解包时保留文件的原始权限和所有权(需要 root 权限才能完全恢复所有权)。--exclude=PATTERN
: 排除匹配PATTERN
的文件或目录。可以使用通配符。-P
,--absolute-names
: 保留绝对路径名。默认情况下tar
会移除路径开头的/
(相对化路径),防止解压时覆盖系统关键文件。使用此选项会保留绝对路径(慎用!)。-k
,--keep-old-files
: 解压时不覆盖已存在的文件。--overwrite
: 解压时覆盖已存在的文件(默认行为)。--overwrite-dir
: 解压时覆盖目录内容但保留目录本身(默认行为)。--strip-components=NUMBER
: 解压时移除路径开头的指定层级目录。例如,归档内文件路径是home/user/docs/file.txt
,使用--strip-components=2
解压后路径变为docs/file.txt
。-h
,--dereference
: 打包时跟随符号链接(打包链接指向的实际文件,而不是链接本身)。--hard-dereference
: 打包时跟随硬链接(打包链接指向的实际文件)。--checkpoint
: 处理大归档时显示进度消息。
最常用组合示例
创建压缩包 (打包并压缩):
.tar.gz
(gzip):tar -czvf backup.tar.gz /path/to/dir_or_file
-c
: 创建-z
: 用 gzip 压缩-v
: 显示过程-f
: 指定文件名backup.tar.gz
/path/to/dir_or_file
: 要打包压缩的内容
.tar.bz2
(bzip2):tar -cjvf backup.tar.bz2 /path/to/dir_or_file
.tar.xz
(xz):tar -cJvf backup.tar.xz /path/to/dir_or_file
.tar.zst
(zstd):tar --zstd -cvf backup.tar.zst /path/to/dir_or_file
(注意--zstd
位置)
解压缩包 (解压并解包):
.tar.gz
:tar -xzvf backup.tar.gz
-x
: 解包-z
: 用 gzip 解压-v
: 显示过程-f
: 指定文件名backup.tar.gz
.tar.bz2
:tar -xjvf backup.tar.bz2
.tar.xz
:tar -xJvf backup.tar.xz
.tar.zst
:tar --zstd -xvf backup.tar.zst
- 解压到指定目录:
tar -xzvf backup.tar.gz -C /target/directory
查看压缩包内容 (不解压):
tar -tzvf backup.tar.gz
(适用于.tar.gz
,.tar.bz2
,.tar.xz
,.tar.zst
等)
创建不压缩的打包文件 (仅打包):
tar -cvf files.tar file1.txt dir1/ dir2/
解包不压缩的打包文件:
tar -xvf files.tar
向现有
.tar
归档追加文件 (不压缩):tar -rvf existing.tar newfile.txt
打包时排除特定文件/目录:
tar -czvf backup.tar.gz /home/user --exclude="*.tmp" --exclude="cache/"
解压时保留原始权限 (通常需要
sudo
恢复所有权):sudo tar -xzvpf backup.tar.gz
(-p
选项)
重要注意事项
-f
选项是必须的且要紧跟文件名:tar -cvf myarchive.tar files/
正确。tar -cv files/ -f myarchive.tar
正确。tar -cvf files/ myarchive.tar
错误!- 路径问题:
- 默认情况下,
tar
在打包时会移除路径开头的/
(例如/home/user
变成home/user
),这样解压时文件会放在当前目录下的相对路径中,更安全。 - 使用
-P
或--absolute-names
会保留绝对路径,解压时可能覆盖系统文件,非常危险,请极度谨慎使用。 - 使用
-C
选项可以安全地指定解压目标目录。
- 默认情况下,
- 权限和所有权:
- 解压时,文件的权限(读/写/执行位)通常会被恢复。
- 文件的所有者和用户组默认是执行解压操作的用户。要完全恢复原始所有者和用户组,需要使用
-p
选项并且以root
用户 (sudo
) 身份运行解压命令 (sudo tar -xzvpf backup.tar.gz
)。
- 通配符: 在指定要打包的文件时可以使用通配符(如
*.txt
),但要注意 Shell 会展开通配符。如果文件名包含特殊字符或空格,最好用引号括起来。 - 压缩算法选择:
- gzip (
-z
,.gz
): 速度最快,压缩率一般。最通用。 - bzip2 (
-j
,.bz2
): 压缩率比 gzip 好,速度比 gzip 慢,比 xz 快。资源消耗适中。 - xz (
-J
,.xz
): 压缩率通常最高(尤其对文本),速度最慢,内存消耗最高。适合追求最小文件大小且时间不敏感的场景。 - zstd (
--zstd
,.zst
): 压缩率和速度的绝佳平衡。压缩速度接近 gzip,解压速度极快,压缩率接近 xz。强烈推荐作为现代首选。
- gzip (
总结
tar
是 Linux 文件管理的瑞士军刀。掌握 -c
(创建), -x
(解压), -t
(查看), -v
(详情), -f
(文件名) 这几个核心选项以及 -z
/-j
/-J
/--zstd
等压缩选项的组合,就能高效地处理绝大多数打包压缩任务。始终留意 -f
选项的位置和路径问题(使用 -C
是安全指定目标目录的好习惯),在需要完全恢复权限时记得结合 -p
和 sudo
。
tar
是 Linux 中用于创建、查看和提取归档文件的核心命令(名称源于 Tape Archiver)。它本身不压缩文件,但常与压缩工具(如 gzip、bzip2、xz)结合使用。以下是关键用法详解:
一、基础语法
tar [选项] [归档文件名] [文件/目录列表]
二、核心功能与选项
1. 创建归档文件
- 基本创建(不压缩):
tar -cvf archive.tar file1 dir1 # -c: 创建, -v: 显示过程, -f: 指定文件名
- 创建+压缩(常用组合):
tar -czvf archive.tar.gz dir1 # -z: 用gzip压缩 → .tar.gz 或 .tgz tar -cjvf archive.tar.bz2 dir1 # -j: 用bzip2压缩 → .tar.bz2 tar -cJvf archive.tar.xz dir1 # -J: 用xz压缩 → .tar.xz
2. 查看归档内容
tar -tvf archive.tar # 列出内容(不提取)
tar -tzvf archive.tar.gz # 查看压缩包内容
3. 提取归档文件
- 提取到当前目录:
tar -xvf archive.tar # -x: 提取 tar -xzvf archive.tar.gz # 解压+提取
- 提取到指定目录:
tar -xvf archive.tar -C /target/path # -C: 指定目标目录
4. 高级操作
- 添加文件到已有归档:
tar -rvf archive.tar new_file.txt # -r: 追加文件
- 排除文件/目录:
tar -czvf backup.tar.gz --exclude='*.tmp' --exclude='logs/' /data
- 保留文件权限(常用于系统备份):
tar -cpzvf backup.tar.gz /etc # -p: 保留权限
三、常用压缩格式对比
选项 | 压缩工具 | 扩展名 | 压缩率 | 速度 |
---|---|---|---|---|
-z |
gzip | .tar.gz |
中等 | 快 |
-j |
bzip2 | .tar.bz2 |
高 | 慢 |
-J |
xz | .tar.xz |
非常高 | 最慢 |
--zstd |
zstd | .tar.zst |
高 | 极快 |
💡 提示:
- 通用性优先选 gzip(
.tar.gz
)- 追求压缩率用 xz(
.tar.xz
)- 速度敏感场景用 zstd(需手动安装:
tar -I zstd -cvf archive.tar.zst dir
)
四、经典示例
备份/home目录(gzip压缩):
tar -czvf home_backup_$(date +%F).tar.gz /home
解压到指定目录:
tar -xzvf software.tar.gz -C /opt
排除缓存文件并归档:
tar -cvf project.tar --exclude='node_modules' --exclude='.cache' ./project
查看压缩包内容:
tar -tzvf data.tar.bz2 | grep "important_file"
五、注意事项
- 选项顺序:
-f
必须紧跟文件名(如tar -cvf
正确,tar -vfc
错误)。 - 覆盖风险:解压时默认覆盖同名文件!使用
--keep-old-files
可避免。 - 权限问题:解压系统文件时用
sudo
保留权限(如sudo tar -xpzvf backup.tar.gz -C /
)。
掌握 tar
能高效管理文件归档,是 Linux 运维和开发的必备技能!
Linux tar
命令详解:终极归档与压缩指南
tar
(Tape ARchiver) 是 Linux 系统中最核心的文件归档工具,掌握其高级用法是每个系统管理员的必备技能。本文将深入解析其工作原理、参数组合及企业级应用场景。
一、核心功能解析
1. 基础概念区分
操作类型 | 工具 | 文件扩展名 | 特点 |
---|---|---|---|
归档 | tar |
.tar |
多文件合并为单文件 |
压缩 | gzip |
.tar.gz |
高压缩速度 |
bzip2 |
.tar.bz2 |
高压缩率 | |
xz |
.tar.xz |
极高压缩率 | |
加密 | gpg |
.tar.gpg |
AES-256 加密保护 |
2. 工作流程
二、参数详解:关键选项分类
1. 操作模式(必选其一)
参数 | 全称 | 作用 |
---|---|---|
-c |
--create |
创建新归档 |
-x |
--extract |
解压归档 |
-t |
--list |
查看归档内容 |
-r |
--append |
追加文件到归档 |
-u |
--update |
更新归档中的文件 |
-d |
--diff |
比较归档与文件系统差异 |
2. 压缩类型(按需选择)
参数 | 对应压缩工具 | 适用场景 |
---|---|---|
-z |
gzip |
快速压缩 (Web资源) |
-j |
bzip2 |
高压缩率 (文本日志) |
-J |
xz |
极致压缩 (软件分发) |
--zstd |
zstd |
现代平衡 (Docker镜像) |
3. 文件处理(精细控制)
参数 | 作用 |
---|---|
-v |
显示处理文件详情 (verbose) |
-f FILE |
指定归档文件名 (必须参数) |
-C DIR |
切换工作目录 |
--exclude=PAT |
排除匹配文件/目录 |
--wildcards |
启用通配符匹配 |
-h |
跟随符号链接 (默认不跟随) |
-p |
保留权限属性 (root用户默认) |
4. 高级功能
# 多卷归档(分卷压缩)
tar -cvzf - /data | split -b 2G - data_part.tar.gz.
# 增量备份(结合快照)
tar -g snapshot.snar -czvf inc_backup.tar.gz /data
# 加密归档
tar -czvf - secret_data | gpg -c > archive.tar.gz.gpg
三、企业级应用案例
1. 日志归档(保留权限)
# 打包/var/log并保留权限
tar -cpzvf logs-$(date +%F).tar.gz -C /var/log .
# 排除特定日志类型
tar -czvf logs.tar.gz --exclude='*.tmp' /var/log
2. 数据库热备份(流式处理)
# MySQL 全库备份
mysqldump -u root -p --all-databases | tar -czvf db_backup-$(date +%s).tar.gz -
3. 差异备份系统配置
# 创建基础备份
tar -g /backup/base.snar -cpzvf /backup/base.tar.gz /etc
# 每日增量备份
tar -g /backup/base.snar -cpzvf /backup/inc-$(date +%F).tar.gz /etc
4. 跨网络传输加密
# 加密传输整个目录
tar -czvf - /sensitive_data | openssl enc -aes-256-cbc -pbkdf2 | nc 10.0.0.2 8080
# 接收端解密
nc -l 8080 | openssl enc -d -aes-256-cbc -pbkdf2 | tar -xzvf -
四、性能优化指南
1. 压缩算法对比
算法 | 压缩比 | 压缩速度 | 解压速度 | 内存占用 |
---|---|---|---|---|
gzip |
中 | ★★★★ | ★★★★★ | 低 |
bzip2 |
高 | ★★ | ★★★ | 中 |
xz |
极高 | ★ | ★★ | 高 |
zstd |
高 | ★★★★ | ★★★★★ | 中 |
2. 多核加速技巧
# 使用pigz替代gzip (多线程)
tar -cvf - /big_data | pigz -9 -p 8 > archive.tar.gz
# 使用pbzip2
tar -cvf - /data | pbzip2 -p4 > archive.tar.bz2
3. 最佳实践组合
# 推荐组合1:速度优先
tar -cpf - /data | pigz -1 -p 8 > data_fast.tar.gz
# 推荐组合2:压缩率优先
tar -cpf - /critical_data | xz -T0 -9 > data_compress.xz
五、高级技巧与陷阱规避
1. 安全操作技巧
# 防止解压路径遍历攻击
tar -xzvf user_upload.tar.gz --transform 's/^\.\///' -C /safe_dir
# 校验归档完整性
tar -tf archive.tar.gz > /dev/null && echo "Archive OK"
2. 时间戳处理
# 保留mtime精确到纳秒
tar --format=posix -cvf archive.tar ...
# 修改解压后文件时间戳
tar -xzvf archive.tar.gz --touch
3. 常见错误解决
错误: "tar: 从成员名中删除开头的'/'"
解决: 使用相对路径或 -P 参数保留绝对路径
错误: "tar: 归档异常终止"
解决: 检查磁盘空间 dd if=/dev/zero of=./test.img bs=1G count=10
错误: "gzip: stdin: invalid compressed data"
解决: 使用 dd if=broken.tar.gz bs=8K skip=1 | tar xzvf -
六、与其它工具集成
1. 结合 find
增量归档
# 归档7天内修改的文件
find /data -type f -mtime -7 -print0 | tar -czvf weekly_update.tar.gz --null -T -
2. 使用 rsync
恢复部分文件
# 从归档中恢复特定目录
tar -xzvf backup.tar.gz -C /tmp etc/nginx
rsync -av /tmp/etc/nginx /etc/
3. 创建可自解压归档
# 生成自解压脚本
echo '#!/bin/sh' > installer.sh
echo 'tail -n +4 $0 | tar -xzvf -' >> installer.sh
tar -czvf - app_files >> installer.sh
chmod +x installer.sh
七、企业环境最佳实践
1. 备份策略矩阵
数据类型 | 压缩算法 | 保留策略 | 示例命令 |
---|---|---|---|
日志文件 | gzip -3 | 保留30天 | tar -czvf logs-$(date +%F).tar.gz /var/log |
数据库备份 | zstd | 保留7天+异地 | mysqldump … |
配置文件 | xz | 永久保留 | tar -cJvf config-(hostname)−(hostname)-(hostname)−(date +%s).tar.xz /etc |
媒体文件 | 不压缩 | 按需保留 | tar -cvf media.tar /media |
2. 自动化备份脚本
#!/bin/bash
# 企业级备份脚本
BACKUP_DIR="/backup"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
tar -g $BACKUP_DIR/base.snar \
--exclude='/var/cache' \
--exclude='/tmp' \
-cpzvf $BACKUP_DIR/full_$TIMESTAMP.tar.gz \
/etc /var /home
# 清理30天前备份
find $BACKUP_DIR -name '*.tar.gz' -mtime +30 -delete
3. 云存储集成
# 加密上传到AWS S3
tar -czvf - /data | openssl enc -aes-256-cbc | aws s3 cp - s3://bucket/data.tar.enc
# 从Azure下载解密
az storage blob download --container backups --name data.tar.enc | \
openssl enc -d -aes-256-cbc | tar -xzvf -
八、总结:核心命令速查
1. 归档/压缩操作
# 标准压缩
tar -czvf archive.tar.gz /path/to/dir
# 最大压缩
tar -cJvf archive.tar.xz /path/to/dir
# 多线程压缩
tar -cvf - /data | pigz -p 8 > data.tar.gz
2. 解压操作
# 自动识别压缩格式
tar -xavf archive.tar.xz -C /target/dir
# 解压特定文件
tar -xzvf backup.tar.gz etc/nginx/nginx.conf
3. 查看内容
# 列出详细内容
tar -tvf archive.tar.bz2
# 搜索归档内文件
tar -tf logs.tar.gz | grep 'error'
大师建议:
• 生产环境优先使用zstd
平衡速度与压缩率
• 关键备份启用-g
增量模式节省空间
• 网络传输务必加密管道 (openssl
/gpg
)
• 定期执行tar -W
验证归档完整性
tar
是 Linux 系统中用于归档和压缩文件的核心工具,名称源于 Tape Archive(磁带存档)。它可将多个文件/目录合并为单个归档文件(.tar
),并可选择使用不同算法压缩。以下是深度详解:
一、核心功能
操作 | 命令选项 | 说明 |
---|---|---|
创建归档 | -c / --create |
打包文件/目录到 .tar 文件 |
提取归档 | -x / --extract |
从归档中解压文件 |
查看内容 | -t / --list |
列出归档内文件(不解压) |
追加文件 | -r / --append |
向已存在的归档追加文件 |
更新文件 | -u / --update |
仅追加比归档内更新的文件 |
二、关键选项详解
1. 基础选项
选项 | 说明 |
---|---|
-f FILE |
指定归档文件名(必须选项,例如 -f backup.tar ) |
-v |
显示详细处理过程(Verbose 模式) |
-p |
保留文件权限和属性(解压时常用) |
-C DIR |
解压/打包前切换到目标目录(如 -C /opt ) |
2. 压缩选项
选项 | 压缩格式 | 后缀名 | 特点 |
---|---|---|---|
-z / --gzip |
gzip | .tar.gz / .tgz |
速度快,通用性强 |
-j / --bzip2 |
bzip2 | .tar.bz2 |
压缩率高,速度较慢 |
-J / --xz |
xz | .tar.xz |
最高压缩率,速度最慢 |
--zstd |
zstd | .tar.zst |
速度与压缩率平衡(推荐新系统使用) |
-a / --auto-compress |
自动检测 | - | 根据文件后缀自动选择压缩算法 |
💡 压缩率对比:
xz > bzip2 > gzip > zstd
(但 zstd 解压/压缩速度最快)
3. 文件筛选
选项 | 说明 |
---|---|
--exclude="PATTERN" |
排除匹配模式的文件(如 --exclude="*.log" ) |
-X FILE / --exclude-from=FILE |
从文件中读取排除规则 |
--wildcards |
允许使用通配符(如提取时 tar -xvf backup.tar --wildcards '*.txt' ) |
4. 解压控制
选项 | 说明 |
---|---|
-k / --keep-old-files |
不覆盖现有文件(默认会覆盖) |
--overwrite |
强制覆盖文件 |
--strip-components=N |
解压时去除路径前 N 级目录(如 --strip-components=1 跳过根目录) |
三、常用命令示例
1. 基础操作
# 打包目录(不压缩)
tar -cvf backup.tar /path/to/dir
# 打包并用 gzip 压缩
tar -czvf backup.tar.gz /path/to/dir
# 查看归档内容
tar -tvf backup.tar.gz
# 解压到当前目录
tar -xvf backup.tar.gz
# 解压到指定目录
tar -xvf backup.tar.gz -C /target/dir
2. 高级用法
# 排除文件并压缩
tar -czvf backup.tar.gz --exclude="*.tmp" --exclude="cache/" /path/to/dir
# 仅更新比归档内更新的文件
tar -uvf backup.tar /path/to/updated_files
# 从归档提取单个文件
tar -xvf backup.tar path/to/specific_file.txt
# 增量备份(需结合 -g 快照文件)
tar -g snapshot.snar -czvf incremental.tar.gz /data
四、使用技巧与注意事项
路径问题
- 避免用绝对路径打包:
tar -czvf backup.tar ./dir
(解压后路径为./dir/*
) - 使用绝对路径需加
-P
选项(可能覆盖系统文件,慎用!)
- 避免用绝对路径打包:
压缩格式选择
- 快速压缩/解压:
gzip
(.tar.gz
) - 高压缩率:
xz
(.tar.xz
)或zstd
(.tar.zst
) - 通用兼容:
gzip
- 快速压缩/解压:
权限保留
解压系统文件时用-p
保留权限:sudo tar -xvpzf system_backup.tar.gz -C /
处理特殊文件
- 打包符号链接:默认保存链接本身,加
-h
保存实际文件 - 保留 SELinux 上下文:加
--selinux
/--xattrs
- 打包符号链接:默认保存链接本身,加
分卷压缩
分割大文件为多卷(每卷 100MB):tar -cvzM --tape-length=100M -f backup_vol.tar.gz /large_dir
五、常见问题解决
报错:
tar: Removing leading '/' from member names
安全机制自动移除绝对路径前的/
,解压后路径变为相对路径。需保留绝对路径时加-P
。解压后文件权限错误
使用-p
选项保留权限,或手动用chmod
/chown
修复。追加文件到压缩包
需先解压为.tar
,追加后再重新压缩:gzip -d backup.tar.gz # 解压为 .tar tar -rvf backup.tar new_file # 追加文件 gzip backup.tar # 重新压缩
六、扩展知识
- 查看压缩算法:
file backup.tar.gz
(显示压缩类型) - 并行压缩:
用pigz
(替代 gzip)或pbzip2
(替代 bzip2)加速:tar -cvf - /data | pigz > backup.tar.gz
- 归档验证:
创建后校验完整性:tar -Wvf backup.tar.gz
掌握 tar
可高效管理备份、迁移数据。建议通过 tar --help
或 man tar
探索更多功能。