tar 命令是 Linux 和 Unix 系统中广泛使用的归档工具,主要用于将多个文件或目录打包成一个单一的文件,同时支持压缩功能,方便文件的备份、传输和存储,其名称来源于 "tape archive"(磁带归档),最初设计用于将文件备份到磁带设备,如今已成为文件管理的核心工具之一,tar 命令的强大之处在于其灵活的选项组合,能够满足不同场景下的归档和压缩需求。

tar 命令的基本语法
tar 命令的基本语法结构为 tar [选项] [文件或目录]
,其中选项用于指定操作类型(如创建、解压、列表等),文件或目录则是操作的对象,选项通常以短横线(-)开头,多个选项可以合并使用,-czvf
表示同时启用创建、压缩、显示详细信息和创建归档文件,需要注意的是,tar 命令的选项区分大小写,-x
表示解压,而 -X
表示从文件中排除文件列表。
核心功能与常用选项
tar 命令的核心功能包括创建归档文件(-c)、解压归档文件(-x)、列出归档内容(-t)以及更新归档文件(-u),结合压缩选项(如 -j、-z、-Z),可以实现不同格式的压缩归档,以下是常用选项的详细说明:
-
创建归档文件(-c):
使用-c
选项可以创建一个新的归档文件。tar -cvf archive.tar file1 file2 dir1
会将file1
、file2
和dir1
打包到archive.tar
中,并通过-v
选项显示处理的文件列表,若需压缩,可结合-z
(gzip)、-j
(bzip2)或-J
(xz)选项,如tar -czvf archive.tar.gz dir1
会创建一个 gzip 压缩的归档文件。 -
解压归档文件(-x):
-x
选项用于解压归档文件,默认情况下,tar 会将文件解压到当前目录,但可通过-C
选项指定目标路径,tar -xzvf archive.tar.gz -C /target/dir
,解压时需注意压缩格式,若归档文件为.tar.gz
,需同时使用-z
选项;若为.tar.bz2
,则需使用-j
选项。(图片来源网络,侵删) -
列出归档内容(-t):
通过-t
选项可以查看归档文件中的内容,而无需解压。tar -tf archive.tar
会列出archive.tar
中的所有文件和目录,结合-v
选项可显示详细信息(如权限、所有者、大小等),而-f
选项需指定归档文件名。 -
更新归档文件(-u):
-u
选项用于向归档文件中添加新增或修改过的文件。tar -uvf archive.tar newfile
会将newfile
添加到archive.tar
中,但前提是newfile
的修改时间晚于归档文件中已存在的同名文件(如果存在)。 -
排除文件(--exclude):
在创建或更新归档时,可通过--exclude
选项排除特定文件或目录。tar -czvf backup.tar.gz --exclude='*.log' /var/log
会排除所有.log
文件,若需排除多个模式,可多次使用--exclude
,或通过--exclude-from=file
从文件中读取排除列表。 -
其他实用选项:
(图片来源网络,侵删)-a
或--auto-compress
:自动根据文件扩展名选择压缩格式(如.tar.gz
自动使用 gzip)。-k
或--keep-old-files
:解压时覆盖已存在文件前提示,避免意外覆盖。-r
或--append
:向归档文件末尾追加文件,而非重新创建归档。--numeric-owner
:解压时保留文件的用户和组 ID,而非映射为名称(适用于跨系统备份)。
压缩格式的选择
tar 命令支持多种压缩格式,不同格式在压缩率和速度上有所差异:
- gzip(-z):最常见的压缩格式,压缩速度较快,兼容性好,文件扩展名通常为
.tar.gz
或.tgz
。 - bzip2(-j):压缩率高于 gzip,但速度较慢,适合需要节省存储空间的场景,文件扩展名为
.tar.bz2
。 - xz(-J):最新的压缩格式,压缩率最高,但速度最慢,适合长期归档,文件扩展名为
.tar.xz
。 - compress(-Z):较旧的压缩格式,压缩率低,逐渐被淘汰,文件扩展名为
.tar.Z
。
实用示例
以下为几个典型场景的命令示例:
-
创建并压缩目录备份:
tar -czvf backup_2023.tar.gz /home/user/documents
将
/home/user/documents
目录打包并使用 gzip 压缩,生成backup_2023.tar.gz
。 -
解压到指定目录:
tar -xzvf software.tar.bz2 -C /opt/software
将
software.tar.bz2
解压到/opt/software
目录。 -
列出归档文件内容:
tar -tvf archive.tar | less
分页显示
archive.tar
中的文件列表。 -
排除特定文件并备份:
tar -czvf config_backup.tar.gz --exclude='*.tmp' /etc/config
备份
/etc/config
目录,但排除所有.tmp
文件。
常见问题与注意事项
在使用 tar 命令时,需注意以下几点:
- 选项顺序:部分旧版本 tar 命令要求选项必须位于文件名之前,而新版本(如 GNU tar)则允许灵活顺序。
- 权限问题:解压时需确保对目标目录有写权限,否则会报错。
- 路径处理:归档文件中存储的路径可能是绝对路径或相对路径,解压时可通过
--strip-components=N
移除前 N 层目录。
相关问答 FAQs
问题 1:tar 命令如何处理符号链接?
解答:默认情况下,tar 会将符号链接作为普通文件处理,即存储链接的目标路径而非链接本身,若需保留符号链接属性,可使用 -h
或 --dereference
选项,该选项会跟随符号链接并将实际文件内容归档。tar -chvf archive.tar symlink
会将 symlink
指向的实际文件归档,而非链接文件。
问题 2:如何分卷压缩大文件?
解答:可通过 --split
选项或结合 split
命令实现分卷压缩,使用 tar --split --size=100M -czvf archive.tar.gz large_file
将大文件分割为 100MB 的分卷,若 tar 不支持 --split
,可先压缩再分割:tar -czf - large_file | split -b 100M - archive.tar.gz.
,解压时通过 cat archive.tar.gz.* | tar -xzf -
合并并解压。