GNU tar(Tape AR chiver的缩写)命令是 Linux 系统中使用最广泛的归档实用程序。该命令直接在终端中可用,有助于创建、提取和列出存档内容。tar
该实用程序很简单,并且有许多有用的选项可用于压缩文件、管理备份或提取原始安装。
晓林电脑教你通过示例和可用选项展示如何使用 tar 命令。
先决条件
- 运行 Linux 的系统。
- 访问命令行/终端。
- 用于测试命令的一个或多个文件。
Tar 命令语法
命令的tar一般语法是:
- 操作模式指示对文件执行的操作(创建、提取等)。该命令只允许并且只需要一项操作。
- 选项修改操作模式并且不是必需的。选项的数量没有限制。
- 存档是文件名和扩展名。
- 文件名是用于提取或压缩的空格分隔列表或通配符匹配的名称。
有三种可能的语法样式来使用操作和选项:
1.传统风格,集结在一起,没有任何破折号。
例如:
tarcfv <archive> <file(s) or location(s)>
2. UNIX 短选项样式,使用单个破折号和集群选项:
tar-cfv <archive> <file(s) or location(s)>
或者,在每个选项前添加一个破折号:
tar-c -f -v <archive> <file(s) or location(s)>
3.带有双破折号和描述性选项名称的GNU 长选项样式:
tar--create --file <archive> --verbose <file(s) or location(s)>
所有三种样式都可以在一个tar命令中使用。
焦油命令选项
下表概述了常用的tar操作和选项。
按照下一节中的示例学习如何使用 tar。
Tar 命令示例
以下示例具有以下要求:
1.创建一个名为tar_examples的目录并导航到该目录:
mkdir tar_examples && cd tar_examples
2.在tar_examples中创建另一个名为files的目录并进入该目录:
mkdir files && cd files
3.创建文件以填充文件目录:
touch file{0..100}.txt
要返回父目录,请使用:
cd ..
下面的所有示例都来自tar_examples目录。
1. 创建档案
创建档案的语法取决于档案类型。要制作存档,请使用tar
or-c
操作--create
。
创建一个 tar 存档
要制作 tar 存档(也称为 tarball),请使用:
tar cf <archive name>.tar <file(s) or location(s)>
例如,归档文件目录:
tar cf files.tar files
输出列出了添加到存档中的每个文件。显示目录内容以查看创建的file.tar存档:
tar cf files.tar files
输出列出了添加到存档中的每个文件。显示目录内容以查看创建的file.tar存档:
ls -l
创建 tar.gz 压缩存档
添加-z
创建压缩 GNUzip (gzip) 文件的选项:
tar czf <archive name>.tar.gz <file(s) or location(s)>
例如:
tar czf files.tar.gz files
文件大小小于常规 tarball 文件和原始目录。
创建 tar.bz2 压缩存档
bzip2 是一个文件压缩程序,是 gzip 的替代方案。
要创建tar.bz2文件,请添加-j
标记:
tar cjf <archive name>.tar.bz2 <file(s) or location(s)>
例如:
tar cjf files.tar.bz2 files
bzip2 具有更高的压缩率,并且比 gzip 需要更长的时间。
创建 tar.xz 存档
使用-J
标签以 tar.xz 格式压缩档案:
tar cJf <archive name>.tar.xz <file(s) or location(s)>
例如:
tar cJf files.tar.xz files
与 gzip 和 bz2 相比,xz 压缩时间最长。但是,对于较大的文件,xz 具有最高的压缩率。
2.创建后删除文件
要在归档后从磁盘中删除文件,请使用--remove-files
末尾的选项:
tar cf <archive> <file(s) or location(s)> --remove-files
例如,使用files目录创建一个 tar 存档,并通过一个命令将其从磁盘中删除:
tar cf files.tar files --remove-files
检查目录内容以确认操作正常。
3. 从档案中提取
从档案或压缩档案中提取使用-x
or--extract
操作tar
。附加选项取决于文件类型以及 tar 应在何处提取组件。
从 tar 存档中提取
从 tar 存档中提取的一般语法是:
tar xf <archive name>.tar
默认情况下, tar 将所有组件提取到当前目录。要指示提取组件的位置,请添加-C
选项并指定路径:
tar xfC <archive name>.tar <path>
例如,要创建一个名为 extract_tar 的目录并从files.tar中提取文件,请运行:
mkdir extracted_tar && tar xfC files.tar extracted_tar
该命令不输出确认消息。检查目录内容,确认组件解压成功。
从 tar.gz 存档中提取
使用-z
选项提取tar.gz文件:
tar xzf <archive name>.tar.gz
该命令提取当前目录中的内容。添加-C
选项以指定位置:
tar xzfC <archive name>.tar.gz <location>
例如,创建一个名为 extract_gz 的新目录并提取files.tar.gz内容:
mkdir extracted_gz && tar xzfC files.tar.gz extracted_gz
与其他压缩格式相比,tar.gz 压缩档案的提取时间最短。
从 tar.bz2 存档中提取
要将文件从 tar.bz2 压缩存档中提取到当前目录,请使用:
tar xjf <archive name>.tar.bz2
使用以下命令将 tar.bz2 归档文件提取到特定目录中:
tar xjfC <archive name>tar.bz2 <location>
例如,创建一个目录并从files.tar.bz2中提取内容:
mkdir extracted_bz2 && tar xjfC files.tar.bz2 extracted_bz2
从 tar.xz 存档中提取
添加-J
从 tar.xz 压缩档案中提取的选项。在当前目录中提取的语法是:
tar xJf <archive name>.tar.xz
要将内容提取到特定目录,请使用该-C
选项并添加路径:
tar xJfC <archive name>.tar.xz <location>
例如,创建一个目录并提取files.tar.xz内容:
mkdir extracted_xz && tar xJfC files.tar.xz extracted_xz
在提取时间方面,xz 压缩格式介于 gz 和 bz2 之间。
4.覆盖控制
Tar 覆盖控件处理存档中的文件名与工作目录中的文件重叠的情况。
三种可能的覆盖操作是:
1.覆盖工作目录中的文件:
tar xf <archive> <Optional file(s) or location(s)> --overwrite
2.不要覆盖工作目录中的文件:
tar xf <archive> <Optional file(s) or location(s)> --keep-old-files
如果文件已存在,则 tar 不会执行提取。
3. 仅当文件比现有文件更新时才提取文件:
tar xf <archive> <Optional file(s) or location(s)> --keep-newer-files
如果工作目录中的文件较新或相同,则 tar 不会提取文件。
5. 列出存档内容
使用以下命令列出存档的内容:
tar tf <archive>
该选项适用于任何包含 tar 的文件扩展名。
例如,列出files.tar存档中的文件和目录:
tar tf files.tar.gz
输出列出了存档中存储的所有内容。
6. 在存档中查找文件
使用 tar 定位特定内容的方法有两种:
1.-t
在档案中列出文件的选项对于定位特定文件很方便。在命令后添加文件名(或名称):
tar tf <archive> <file(s)>
例如,要在files.tar.gz存档中找到file50.txt,请运行:
tar tf files.tar.gz file/file50.txt
该选项需要知道文件的可能路径。
2. 将tar
与grep命令一起使用来过滤输出:
tar tf <archive> | grep <file(s)>
例如:
tar tf files.tar.gz | grep file50.txt
该选项不需要知道文件的可能路径。
7. 在档案中查找多个文件
使用该--wildcards
选项匹配多个文件实例。例如:
tar tf files.tar.gz --wildcards file/files5*.txt
当文件具有相似名称或过滤特定文件类型时应用通配符匹配。
8. 创建存档时排除文件
要在创建期间从存档中排除某些文件,请添加以下选项:
tar cf <archive> --exclude='<pattern>' <files(s) or location(s)>
例如,从 files 目录创建存档并排除所有 .txt 文件:
tar cf files.tar --exclude='*.txt' files
列出存档内容:
tar tf files.tar
输出显示没有 .txt 文件,仅显示存档中的files目录。
9. 从存档中提取单个文件
如果您需要一个或多个文件,请避免提取整个存档。
要从存档中获取单个文件:
1.列出内容并检查文件是否存在:
tar tf files.tar | grep file100.txt
输出打印下一步所需文件的路径。
2. 使用以下命令提取特定文件:
tar xf files.tar files/file100.txt
该命令仅使用指示的文件创建目录文件。按照相同的步骤通过添加适当的标签从压缩档案中提取单个文件。例如,使用-z
从 tar.gz 文件中提取的选项。
10.详细选项
详细选项在运行 tar 命令后显示附加信息。添加-v
或--verbose
到任何操作以查看结果。
例如,创建一个 tar.gz 文件并添加-v
:
tar czfv files.tar.gz files
输出显示每个文件添加到存档中。
-v
当您添加两次标记时,某些 tar 命令会显示附加信息。例如,尝试使用以下命令将文件添加到存档-vv
:
tar czfvv files.tar.gz files
输出打印一个长列表格式,看起来类似于运行ls -l命令。
11. 从存档中删除
要从存档中删除,请找到要删除的文件,例如:
tar tf files.tar | grep file100.txt
--delete
然后,使用标签删除文件:
tar --delete -f files.tar files/file100.txt
删除选项不适用于压缩文件格式。
12. 将文件追加到存档
-r
使用标签将文件附加到现有存档。语法是:
tar rf <archive name>.tar <file(s) or location(s)>
例如,将压缩的files.tar.gz文件附加到files.tar存档:
tar rf files.tar files.tar.gz
已经压缩的存档无法更新,因此该语法仅适用于 tarball 文件。
13. 合并档案
使用--concatenate
or-A
选项来组合多个档案。基本语法是:
tar Af <archive to extend> <archive to extend with>
例如,使用cp命令复制现有files.tar文件:
cp files.tar files_copy.tar
接下来,连接两个档案:
tar Af files.tar files_copy.tar
要确认串联是否有效,请检查文件大小。
14.存档和文件之间的区别
要检查存档和磁盘上的文件之间的差异,请使用-d
标记:
tar df <archive name>
该命令搜索相同的内容并将它们与存档中的内容进行比较。该选项仅检查现有文件并忽略任何新添
加的文件。
下面的步骤展示了如何使用-d
, --diff
,或--compare
标签tar
:
1. 创建一个 tar 存档:
tar cf files.tar files
2. 将存档与现有目录进行比较:
tar df files.tar
输出不显示任何内容,这意味着现有文件之间没有区别。
3. 将文本添加到files目录中的现有文件:
echo 'Hello' >> files/file0.txt
4. 再次将存档与现有目录进行比较:
tar df files.tar
这一次,输出显示了特定文件的修改时间和大小的差异。通过比较可以深入了解创建存档后对系统所做的任何更改。
15. 更新存档中的文件
-u
使用以下选项从磁盘更新存档中的现有文件:
tar uf <archive> <file(s) or location(s)>
例如,使用更改的文本文件更新files.tar存档:
tar uf files.tar files
检查更改文件的 tar 内容:
tar tfv files.tar | grep files0.txt
该命令使用更改的文件更新存档而不进行任何覆盖。
16.修改时间
Tar 提供了各种选项来修改文件的时间戳。--mtime
通过添加选项并提供日期来在创建存档时设置自定义日期:
tar cf <archive> <file(s) or location(s)> --mtime=YYYY-MM-DD
例如,创建一个存档并将日期设置为 1999 年 1 月 1日:
tar cf files.tar files --mtime=1999-01-01
或者,提取具有当前日期和时间的文件:
tar xf files.tar -m
处理时间时的一个有用功能是过滤在特定日期之后修改的文件。例如,要提取在某个日期之后创建
的文件,请使用该--newer-mtime
选项并添加日期:
tar xf <archive> --newer-mtime=YYYY-MM-DD
17. 权限
提取档案时,有两种可能的方法可以使用 tar 控制文件权限:
1. 保留原有权限:
tar xf <archive name> --preserve-permissions
权限在档案创建之前的文件中说明。
2.修改权限为默认umask值:
tar xf <archive name> --no-same-permissions
这些文件采用默认的 Linux 权限。
18. 文件所有权
Tar 允许文件所有权配置。例如,要在创建存档时设置文件所有者,请添加--owner
和--group
选项并
为每个选项提供值:
tar cf <archive> <file(s) or location(s)> --owner=<value> --group=<value>
所有者值表示UID(用户 ID),而组值是GID(组 ID)。要为用户查找这些值,请运行:
id <username>
例如,创建一个存档并将所有权设置为 root:
tar cf files.tar files --owner=0 --group=0
Tar 允许在从存档中提取时保留所有权。为此,请--same-owner
在末尾添加选项:
tar xf <archive> --same-owner
19. 写入外部程序
该--to-command
选项指示 tar 将每个提取的文件发送到外部程序的标准输出。基本语法是:
tar xf <archive> --to-command='<command>'
例如,提取files.tar内容并将文件名作为目录传递:
tar xf files.tar --to-command='mkdir $TAR_FILENAME'
该命令创建以每个提取文件命名的目录。有关更多信息和可用的Linux环境变量,请访问手册页。
20. 创建每日备份
要自动执行每日备份,请创建一个 bash 脚本并添加以下行:
tar czf backup-$(date +%Y%m%d).tar.gz files
find backup* -mtime +1 -delete
tar 命令创建一个压缩存档,而find命令查找一天前的备份文件。+1
将参数更改+7
为每周或+31
每月备份。
结论
看完这篇文章,你就知道如何使用 tar 命令了。但是,还有其他各种可用的选项不在本教程中。使
用man命令查找有关 tar 选项的所有详细信息。