Linux tar命令

时间:2020-02-23 14:37:35  来源:igfitidea点击:

tar是一个很好的实用程序,用于在单个存档中收集多个文件。
此文件通常被称为"tar包"。

TAR主要用于包装应用程序及其对原始安装的二进制文件,这些应用程序将在任何系统上工作,而不是基于Deb,RPM或者Aur包等基本特定格式。
除此之外,TAR也是一个非常有效的创建备份格式。

"注意:"使用与任何"文件"的交互相互作用时,任何地方使用的所有-f标签都是必需的。

在Linux中使用tar命令

1.查看tar包文件列表

此标志用于列出tar包内的文件。
所需的参数只是tar包的名称和(如上所述),-F标志。
标准语法看起来像: tar --list -f <tar包 name>简短的形式: tar tf <tar包 name>

2.创建tar包

Create标志用于创建一个新的tar包。
所需的参数是(未来)tar包的名称和要包含的文件。
目录的名称也是可以接受的。
标准格式是: tar --create -f <Required tar包 name> <File names>这可以以以下方式以简短的形式使用: tar cf <Required tar包 name> <File names>

创建其他格式的存档

焦油中包含不同的归档格式,用于压缩。
我们将显示的格式是.tar.xz和.tar.gz格式。

创建XZ(.tar.xz)存档 tar cfJ <Required tar包 name> <File names>

创建GZIP(.tar.gz)档案 tar cfz <Required tar包 name> <File names>

创建BZIP2(.tar.bz2)存档 tar cfj <Required tar包 name> <File names>

3.添加文件到tar包

Append标志用于将文件添加到已存在的tar包。
语法非常简单,即: tar --append -f <tar包 name> <Names of files to be added>较短: tar rf <tar包 name> <Names of files to be added>

4.删除tar包中的文件

这用于从tar包中删除文件。
语法需要以下顺序列出tar包的名称和文件的名称: tar --delete -f <Name of tar包> <Names of files>

5.比较tar包的差异

Diff标志在用户必须指定的情况下找到tar包和某些文件之间的差异。
例如,如前所述,TAR广泛用于创建备份。
因此,如果存在现有的tar包,并且我们想检查文件的当前状态是否存在任何差异,与已经在tar包中的文件相比,我们可以使用Diff。

如我们所见,空测试和非空测试之间显示的错误是'大小不同,但即使大小相同,也会出错:

结论,一般语法可以显示为: tar --diff -f <Name of tar包> <Names of files to be compared>

6.更新tar包

此标志可用于更新tar包内的特定文件。
如果在此命令中放置了相同名称的文件,则具有新内容的文件将添加到文件的末尾,而不是由最新版本替换的旧版本。

一般语法变为: tar --update -f <tar包 name> <Names of files to be updated>更短的格式: tar uf <tar包 name> <Names of files to be updated>

7.提取tar包

这可能是tar命令的最常用的标志。
它用于从tar包中提取文件,并且由于它如此使用,它也有很多配置。
为了改变,除了tar包名称之外的参数是可选的。
如果未指定,则tar将提取tar包内的所有文件。
因此,提取特定文件的语法: tar --extract -f <tar包 name> <File names>要提取所有文件: tar --extract -f <tar包 name>或者更短的格式: tar xf <tar包 name> <Optional file names>

提取gzip(.tar.gz)档案 tar zxf <tar包 name> <Optional file names>

提取XZ(.tar.xz)焦油档案 tar xf <tar包 name> <Optional file names>

提取bzip2(.tar.bz2)档案 tar xjf <tar包 name> <Optional file names>

现在,在处理基础之后,我们可以进入焦油的一些更深层次的特征。

8.覆盖控制

它可能只是发生从tar包中提取的一个或者多个文件的名称与工作目录中已存在的文件的名称一致。
可以采取一些措施来做你想要的事情发生。
各种场景:

覆盖文件

第一种情况是我们确实希望替换目录中存在的文件。
要确保发生这种情况,请以下列方式发出命令: tar --extract -f <tar包 name> <Optional file names> --overwrite

不要覆盖文件

这不会覆盖文件,并表示已存在文件。
可以以下列方式发出命令: tar --extract -f <tar包 name> <Optional file names> -keep-old-files

只覆盖旧文件

这是特别有用的,因为它只保护与存档中的文件相比的那些更新的文件。
例如,其中归档中的Test2具有与目录中的Test2相比已修改的内容:

命令的结构是: tar --extract -f <tar包 Name> <Optional file names> --keep-newer-files

9.删除文件

此标志可以用作归档后直接从目录中删除文件的快捷方式。
它是一个简单的命令,语法遵循: tar --create -f < Required tar包 name> <File names> --remove-files

10.tar包时排除某些文件

排除标志可用于排除归档的某些文件。
必须在其他任何内容之前指定模式,并以反相逗号,如下面的命令所使用的: tar --exclude='PATTERN' --create -f <tar包 name required> <File names>示例用法:

11. to-command ='命令'

tar命令具有使用输出作为另一个命令的输入的功能,即to-command标志。
例如,我想使用来自test2.tar的文件的名称,并创建一个名称的目录,作为存档中的文件的目录。
这可以是: tar xf test2.tar --to-command='mkdir $TAR_REALNAME'

这相当先进。
使用BASH时,"$"是在使用BASH时引用任何系统变量所必需的。
名称'tar_realname'是用于在使用tar中的指令标志时引用单个文件的名称的变量。
有几种这样的变量,可以在Tar的男页中找到,以及此网页。

12.文件的所有权

可以以各种方式配置存档中文件的所有权。
首先,要创建一个存档,其中文件被设置为特定所有者,可以使用标志所有者。

如所示,用户0和组0对应于用户根。
root(正如我们可能知道的那样)是系统的霸王皇帝。
我们可以使用以下方式查找使用ID命令的其他用户的UID(用户ID)和GID(组ID): id <username>现在要在保留文件的所有者时提取文件: tar xf <tar包 name> --same-owner

13.完整的备份解决方案

正如我已经提到了几次,tar是一个很好的备份计划。
我要告诉你一些让它变得更好的标志。
首先,我们希望在制作备份时包含/排除的东西。
包括链接(符号链接)指向的文件。
排除先前的备份文件和VCS目录(主要对于程序员而言)。
远离我们正在备份的目录也很重要。

例如,我们在/home目录中,我们希望备份用户,testuser。
命令看起来像: sudo tar --exclude-backups --exclude-vcs --dereference --create -f backup.tar ./testuser- "sudo"有两个原因:首先,我们正在在/home目录中做事,这需要特权。其次,如果任何符号链接指向用户通常权限的文件,那将导致错误。

  • 排除备份和exclude-VCS分别排除备份和VCS文件。

  • 取消引用使TAR遵循它们所指向的数据的符号链接。

14.修改时间

文件的修改时间有很多事情。
首先,要将修改日期更改为文件是存档的,我们可以使用Mime标志。
基本语法: tar --create -f <Required tar包 name> <File names> --mtime=YYYY-MM-DD

-mtime.

-M标志可用于获得不变的修改日期。
要使用这个: tar xf <tar包 name> -m

只对特定日期后修改的文件仅采取行动

此形式的命令可用于在特定日期后已修改的文件上作用。
该命令看起来像: tar xf <tar包 name> --newer-mtime=YYYY-MM-DD示例用法如下所示。

15.权限

最后,在Tar文件的情况下,可以很好地配置权限。
有两种重要的变化:

保留原始权限

这可以用于保留文件的权限,如归档后提取后提取。
这是通过这样的命令实现的: tar xf <tar包 name> --preserve-permissions

修改权限作为默认值

其次,可以将权限更改为默认umask值。
默认值由系统变化。
为此,请输入以下命令: tar xf <tar包 name> --no-same-permissions