数据备份与恢复,Linux中如何使用 tar 命令? 日期:2022-05-22 09:45 阅读:

GNU tar(Tape AR chiver的缩写)命令是 Linux 系统中使用最广泛的归档实用程序。该命令直接在终端中可用,有助于创建、提取和列出存档内容。tar

该实用程序很简单,并且有许多有用的选项可用于压缩文件、管理备份或提取原始安装。

晓林电脑教你通过示例和可用选项展示如何使用 tar 命令




先决条件



Tar 命令语法


命令的tar一般语法是:


tar<operation mode> <option(s)> <archive> <file(s) orlocation(s)>


有三种可能的语法样式来使用操作和选项:


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. 创建档案


创建档案的语法取决于档案类型。要制作存档,请使用taror-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. 从档案中提取


从档案或压缩档案中提取使用-xor--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. 合并档案


使用--concatenateor-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 选项的所有详细信息。