导航菜单

Linux命令大全-tar命令

陆兴东 2026-04-07 9 浏览 Linux命令

一、简介

tar(英文全拼:tape archive)命令用于备份文件。tar是类Linux操作系统中归档文件和目录的强大命令。

tar命令通常用于将多个文件和目录打包成一个归档文件,称为 "tarball"(通常带有 .tar 扩展名)。

tar命令本身不压缩文件,但可以与压缩工具(如 gzip 或 bzip2)结合使用,创建压缩的归档文件(如 .tar.gz 或 .tar.bz2)。

二、语法

语法:tar [选项...] [FILE]...

参数说明:

基本操作选项

-c:创建一个新的归档文件。

-x:解压归档文件。

-t:列出归档文件的内容。

-r:向现有归档文件中追加文件。

-u:仅追加比归档文件中已有文件更新的文件。

-d:找到归档文件中与文件系统不同步的差异。

-A:将一个 .tar 文件追加到另一个 .tar 文件中。

文件选择和排除

-f <file>:指定归档文件的名称(必须放在选项列表的最后)。

-C <directory>:切换到指定目录进行操作。

--exclude=<pattern>:排除匹配指定模式的文件。

--exclude-from=<file>:从指定文件读取要排除的模式。

--exclude-caches:排除目录中的缓存文件。

--exclude-backups:排除以 ~ 结尾的备份文件。

--exclude-vcs:排除版本控制系统生成的文件(如 .git、.svn 等)。

压缩和解压选项

-z:使用 gzip 压缩归档文件。

-j:使用 bzip2 压缩归档文件。

-J:使用 xz 压缩归档文件。

--lzip:使用 lzip 压缩归档文件。

--lzma:使用 lzma 压缩归档文件。

--lzop:使用 lzop 压缩归档文件。

--zstd:使用 zstd 压缩归档文件。

-a:自动选择压缩方式(基于归档文件的扩展名,如 .tar.gz、.tar.bz2 等)。

-I <command>:使用指定的压缩程序进行压缩或解压。

输出和交互选项

-v:显示详细操作过程(verbose)。

--progress:显示进度条(与 -v 一起使用时)。

-w 或 --interactive:在每次操作前询问用户确认。

--checkpoint:在处理每个文件后显示一个检查点。

--checkpoint-action=<action>:在检查点执行指定的动作,如 echo、dot 等。

--totals:在操作结束后显示处理的总字节数。

--verbose:详细显示处理的信息。

--quiet:尽可能少的输出信息。

文件和权限相关选项

-p:保留文件的原始权限(解压时)。

--same-owner:尝试将解压的文件设为原始所有者(需超级用户权限)。

--no-same-owner:不设置文件所有者。

--same-permissions:保留文件的原始权限(与 -p 相同)。

--no-same-permissions:不保留原始权限,使用当前用户的 umask 设置权限。

-m:在解压时不恢复文件的修改时间,而使用当前时间。

归档管理选项

-k 或 --keep-old-files:解压时保留已有文件,不覆盖。

--overwrite:解压时强制覆盖已有文件。

--remove-files:归档成功后删除原始文件。

--delete:从归档文件中删除指定文件(仅限 gnu tar)。

--keep-newer-files:解压时保留比归档中较新的文件。

--listed-incremental=<file>:创建增量备份或从增量备份恢复。

文件系统和设备选项

-L <N>:分割大于 N 字节的归档文件(对于磁带机)。

--tape-length=<number>:指定磁带长度(对于磁带机)。

--multi-volume:创建或恢复多卷归档文件。

-M:与 --multi-volume 一起使用,处理多卷归档文件。

--use-compress-program=<prog>:使用指定的压缩程序。

其他实用选项

--transform=<expression>:重命名归档中的文件。

--strip-components=<number>:解压时剥离指定数量的路径组件。

--ignore-failed-read:忽略读取错误并继续操作。

--occurrence=<number>:在归档中选择第 number 个出现的文件。

-S:处理稀疏文件(仅归档实际使用的块)。

--no-recursion:不递归进入目录。

-h 或 --dereference:归档符号链接指向的文件而非链接本身。

帮助和版本信息

--help:显示帮助信息。

--version:显示 tar 的版本信息。

乍一看这么多的参数,应该如何使用呢,其实在实际工作中,用到最多的是基本操作选项、文件选择和排除、压缩和解压选项、输出和交互选项中的参数。

三、实战

1、创建归档文件(不删除原文件)

[root@app01 ~]# tar -cvf test.tar 1.txt 2.txt 3.txt abc
1.txt
2.txt
3.txt
abc/
[root@app01 ~]# ls test.tar
test.tar

将指定的文件和目录打包到一个名为test.tar的归档文件中。

-c: 创建新的归档文件

-v: 显示详细输出,列出被添加到归档中的文件

-f: 指定归档文件的名称

2、创建归档文件(删除原文件)

有时候大家把文件进行归档后,原文件不想保留,在对文件进行归档时,需要添加--remove-files参数来实现。

[root@app01 ~]# ls -lrt *.txt
-rw-r--r-- 1 root root  7 8月   9 11:06 2.txt
-rw-r--r-- 1 root root 13 8月   9 11:07 3.txt
-rw-r--r-- 1 root root 31 8月   9 11:39 1.txt
-rw-r--r-- 1 root root  0 8月   9 16:37 4.txt
[root@app01 ~]# tar -cvf txt.tar 1.txt 2.txt 3.txt --remove-files
1.txt
2.txt
3.txt
[root@app01 ~]# ls -lrt *.txt
ls: 无法访问*.txt: 没有那个文件或目录

3、解压归档文件

[root@app01 ~]# tar -xvf test.tar
1.txt
2.txt
3.txt
abc/

-x: 解压归档文件

-v: 显示详细输出,列出被解压的文件

-f: 指定要解压的归档文件的名称

4、解压归档文件到指定目录

[root@app01 ~]# tar -xvf txt.tar -C /app/abc
1.txt
2.txt
3.txt
[root@app01 ~]# ls -lrt /app/abc
总用量 12
-rw-r--r-- 1 root root  7 8月   9 11:06 2.txt
-rw-r--r-- 1 root root 13 8月   9 11:07 3.txt
-rw-r--r-- 1 root root 31 8月   9 11:39 1.txt

5、压缩归档文件

将指定的文件或目录打包成一个归档文件,然后使用 gzip 进行压缩,生成名为.tar.gz 的后缀文件

[root@app01 ~]# tar -czvf txt.tar.gz
1.txt
2.txt
3.txt
1.txt
2.txt3
.
txt
[root@app01 ~]# ls txt.tar.gz
txt.tar.gz

-c: 创建新的归档文件

-z: 使用 gzip 压缩归档文件

-v: 显示详细输出,列出被添加到归档中的文件

-f: 指定归档文件的名称

6、列出归档文件中的内容

[root@app01 ~]# tar -tvf test.tar
-rw-r--r-- root/root        
31 2025-08-09 11:39 1.txt
-rw-r--r-- root/root        
7 2025-08-09 11:06 2.txt
-rw-r--r-- root/root        
13 2025-08-09 11:07 3.txt
drwxr-xr-x root/root        
0 2025-08-09 12:41 abc/

-t: 列出归档文件中的内容

-v: 显示详细输出,列出归档文件中的所有文件和目录

-f: 指定要列出内容的归档文件的名称

7、追加一个文件或目录到归档文件中

[root@app01 ~]# tar -rvf test.tar 
4.txt
4.txt
[root@app01 ~]# tar -tvf test.tar
-rw-r--r-- root/root        
31 2025-08-09 11:39 1.txt
-rw-r--r-- root/root        
7 2025-08-09 11:06 2.txt
-rw-r--r-- root/root        
13 2025-08-09 11:07 3.txt
drwxr-xr-x root/root        
0 2025-08-09 12:41 abc/
-rw-r--r-- root/root        
0 2025-08-09 16:37 4.txt

8、解压一个.tar.gz的压缩文件

[root@app01 ~]# tar -zxvf txt.tar.gz
1.txt
2.txt
3.txt

-z: 表示要使用 gzip 解压归档文件。

-x: 表示解压操作。

-v: 表示详细输出,列出被解压的文件。

-f  指定要解压的归档文件的名称。

9、打包时排除单个文件或目录

9.1、打包时排除单个文件

[root@app01 ~]# tar -cvf test.tar --exclude="test1.txt" test

9.2、打包时排除单个目录

[root@app01 ~]# tar -cvf test.tar --exclude="test/test1" test

10、打包时排除多个文件或目录

10.1、打包时排除多个文件

[root@app01 ~]# tar -cvf test.tar --exclude="test1.txt" --exclude="test2.txt" test

10.2、打包时排除多个目录

[root@app01 ~]# tar -cvf test.tar --exclude="test/test1" --exclude="test/test2" test

11、打包时使用通配符进行排除

11.1、打包时排除所有.txt文件

[root@app01 ~]# tar -cvf test.tar --exclude="*.txt" test

11.2、打包时排除特定前缀的文件

[root@app01 ~]# tar -cvf test.tar --exclude="abc*" test

12、打包时从文件列表中排除

打包时如果使用文件列表的方法,首先需要先创建一个排除文件列表,把不需要打包的文件放到该文件中。如创建一个exclude.txt的文件,把不需要打包的文件放到该文件中,操作如下所示:

[root@app01 ~]# cat exclude.txt
test1.txt test2.txt test/log *.txt *.log
[root@app01 ~]# tar -cvf test.tar --exclude-from="exclude.txt" test

利用除排的方法进行打包,有以下几个事项需要注意:

1.路径匹配:--exclude的路径是相对于当前目录的,如果需要排除绝对路径,填写绝绝对路径,并确保绝对路径的正确。

2.通配符限制:通配符 * 和 ? 只能匹配文件名,不能匹配路径中的目录。

3.排除顺序:如果有多个--exclude选项,它们的顺序会影响最终结果。

通过--exclude或--exclude-from选项,tar命令可以灵活地排除特定文件或目录不进行打包,从而满足日常工作中复杂的归档需求。

无论是排除单个文件、多个文件,或是使用通配符和排除列表法,tar命令都提供了强大的功能。

四、压缩文件后缀格式说明

tar 可以结合不同的压缩格式来创建和解压压缩归档文件。

z: 使用 gzip 压缩,文件后缀为tar.gz。

j: 使用 bzip2 压缩,文件后缀为tar.bz2。

J: 使用 xz 压缩,文件后缀为tar.xz。