当前位置: 首页 > Linux

学习Linuxtar命令:最简单和最难的

时间:2023-04-06 05:44:13 Linux

总结:在本文中,您将学习tar命令最常用的标志,如何创建和提取tar存档,以及如何创建和提取gzip压缩文件焦油档案。本文分享自华为云社区《Linux 中的 Tar 命令:压缩和提取文件,学会了吗》,作者:Tiamo_T。Linuxtar命令如何工作?tar命令用于创建.tar、.tar.gz、.tgz或tar.bz2档案,通常称为“tarballs”。扩展名.tar.gz和.tgz用于标识使用gzip压缩生成的存档以减小存档大小。使用bzip2压缩生成具有.tar.bz2扩展名的档案。Linux发行版提供了无需外部命令帮助即可支持gzip压缩的tar二进制文件。正如我们将在本文中看到的,这可能不适用于其他类型的压缩。让我们从tar命令的三个示例开始,以熟悉最常见的标志。创建一个包含两个文件的存档下面是tar命令的一个基本示例,在本例中我们不使用压缩:tar-cfarchive.tartestfile1testfile2该命令创建一个名为archive.tar的存档文件,其中包含两个文件:testfile1和testfile2.以下是两个标志的含义:-c(与-create相同):创建一个新存档-f:它允许指定一个存档文件(在这种情况下称为archive.tar)文件命令确认archive.tar是一个Archive:[myuser@localhost]$filearchive.tararchive.tar:POSIXtararchive(GNU)另一个有用的标志是-v标志,它提供在Linux上执行tar命令期间处理的文件的详细输出。让我们看看如果我们在创建存档时也传递-v标志时输出如何变化:[myuser@localhost]$tar-cfvarchive.tartestfile1testfile2tar:archive.tar:Cannotstat:Nosuchfileordirectorytar:Exitingwithfailure由于先前的错误而导致的状态很奇怪,由于某种原因我们得到了一个错误......这是因为tar命令创建了一个存档,其名称基于-f标志之后的内容,在这种情况下是在-f标志之后然后是v。结果是一个名为v的存档,您可以从下面的ls输出中看到:[myuser@localhost]$ls-altotal20drwxrwxr-x。2myusermygroup40967月17日09:42.drwxrwxrwt。6rootroot4096Jul1709:38..-rw-rw-r--.1myusermygroup07月17日09:38testfile1-rw-rw-r--。1myusermygroup0Jul1709:38testfile2-rw-rw-r--.1myusermygroup10240Jul1709:42v[myuser@localhost]$filevv:POSIXtararchive(GNU)“Nosuchfileordirectory”目录是由于tar试图创建一个名为v的存档,其中包含三个文件:archive.tar、testfile1和testfile2。但是archive.tar不存在,因此出现错误。这显示了tar标志的顺序是多么重要。让我们交换tar命令中的-f和-v标志,然后再试一次:[myuser@localhost]$tar-cvfarchive.tartestfile1testfile2testfile1testfile2这次一切顺利,verbose标志显示了两个文件的名称。合理?tar存档中所有文件的详细列表要列出tar存档中的所有文件而不提取其内容,我们将引入第四个标志:-t:列出存档的内容我们现在可以将三个标志放在一起:-t,-v和-f查看我们之前创建的存档中的文件:[myuser@localhost]$tar-tvfarchive.tar-rw-rw-r--myuser/mygroup02020-07-1709:38testfile1-rw-rw-r--myuser/mygroup02020-07-1709:38testfile2我应该将Dash与Tar一起使用吗?我注意到在某些情况下会出现标志前的破折号,但并非总是如此。那么,让我们看看传递破折号是否有任何不同。首先,让我们尝试在标志前不带破折号的情况下运行相同的命令:[myuser@localhost]$tartvfarchive.tar-rw-rw-r--myuser/mygroup02020-07-1709:38testfile1-rw-rw-r--myuser/mygroup02020-07-1709:38testfile2输出相同,这意味着不需要破折号。只是为了给您一个想法,您可以按如下方式运行tar命令并获得相同的输出:tar-t-v-farchive.tartar-tvfarchive.tartar-tvfarchive.tartar--list--verbose--文件archive.tar最后一个命令使用长选项样式作为提供给Linux命令的标志。您可以看到使用标志的短版本是多么容易。从存档中提取所有文件让我们引入一个额外的标志,允许提取tar存档的内容。这是-x标志。要提取我们之前创建的文件的内容,我们可以使用以下命令:tar-xvfarchive.tar(下面两行是命令在shell中的输出)testfile1testfile2ls-altotal20drwxrwxr-x2myusermygroup59Feb1021:21.drwxr-xr-x3myusermygroup55Feb1021:21..-rw-rw-r--1myusermygroup10240Feb1021:17archive.tar-rw-rw-r--1myusermygroup54Feb1021:17testfile1-rw-rw-r--1myusermygroup78Feb1021:17testfile2如您所见,我们使用-x标志来提取存档的内容和-v标志对于详细提取,使用-f标志来引用标志后指定的存档文件(archive.tar)。注意:如前所述,我们只在所有标志前输入一次破折号。我们可以在每个标志前指定破折号,输出将是相同的。tar-x-v-farchive.tar还有一种方法可以从存档中提取单个文件。在这种情况下,考虑到我们的存档中只有两个文件,这并没有太大区别。但是,如果您有一个包含数千个文件的存档,而您只需要其中一个,那么情况就会大不相同。如果您有一个备份脚本来创建过去30天的日志文件的存档,并且您只想查看特定日期的日志文件的内容,这很常见。要从archive.tar中仅提取testfile1,您可以使用以下通用语法:tar-xvf{archive_file}{path_to_file_to_extract}在我们的特定情况下:tar-xvfarchive.tartestfile1让我们看看我是否创建了一个包含两个文件的文件会发生什么2个目录的tar存档:[myuser@localhost]$ls-ltrtotal8drwxrwxr-x。2myusermygroup40967月17日10:34dir1drwxrwxr-x。2myusermygroup4096Jul1710:34dir2[myuser@localhost]$tar-cvfarchive.tardir*dir1/dir1/testfile1dir2/dir2/testfile2注意:请注意,我使用通配符*来包含其名称的任何文件或目录在存档中以“dir”开头。如果我只想提取testfile1,命令将是:tar-xvfarchive.tardir1/testfile1解压后保留了原始目录结构,因此我将在dir1中获取testfile1:[myuser@localhost]$ls-aldir1/total8drwxrwxr-x。2myusermygroup40967月17日10:36.drwxrwxr-x。3myusermygroup40967月17日10:36..-rw-rw-r--。1myusermygroup0Jul1710:34testfile1全部清除了吗?减小tar存档的大小Gzip和Bzip2压缩可用于减小tar存档的大小。其他启用压缩的tar标志是:-z用于Gzip压缩:长标志是--gzip-j用于Bzip2压缩:长标志是--bzip2要创建一个名为archive.tar.gz的带有详细输出的gzippedtar存档,我们将使用以下命令(也是创建tar存档时最常用的命令之一):tar-czvfarchive.tar.gztestfile1testfile2并提取其内容我们将使用:tar-xzvfarchive.tar.gz我们也可以使用.tgz扩展名而不是.tar.gz,结果是一样的。现在,让我们创建一个用bzip2压缩的存档:[myuser@localhost]$tar-cvjfarchive.tar.bz2testfile*testfile1testfile2/bin/sh:bzip2:commandnotfoundtar:Childreturnedstatus127tar:Errorisnotrecoverable:Theexitingnowerror"bzip2:commandnotfound"表示tar命令正在尝试使用bzip2命令进行压缩,但在我们的Linux系统上找不到该命令。解决方案是安装bzip2。该过程取决于您使用的Linux发行版,在我的例子中是使用yum作为包管理器的CentOS。让我们使用以下yum命令安装bzip2:yuminstallbzip2我可以使用which命令确认bzip2二进制文件是否存在:[myuser@localhost]$whichbzip2/usr/bin/bzip2现在,如果我使用bzip2压缩再次运行tar命令:[myuser@localhost]$tar-cvjfarchive.tar.bz2testfile*testfile1testfile2[myuser@localhost]$ls-altotal16drwxrwxr-x。2myusermygroup40967月17日10:45.drwxrwxrwt。6rootroot4096Jul1710:53..-rw-rw-r--.1myusermygroup136Jul1710:54archive.tar.bz2-rw-rw-r--。1myusermygroup128Jul1710:45archive.tar.gz-rw-rw-r--。1myusermygroup07月17日10:44testfile1-rw-rw-r--。1myusermygroup0Jul1710:44testfile2一切正常!此外,由于我很好奇,我想根据Linux文件命令查看两个存档(.tar.gz和.tar.bz2)之间的区别:[myuser@localhost]$filearchive.tar.gzarchive。柏油。gz:gzip压缩数据,最后修改时间:2020年7月17日星期五10:45:04,来自Unix,原始大小10240[myuser@localhost]$filearchive.tar.bz2archive.tar.bz2:bzip2压缩数据,块大小=900k如您所见,Linux可以区分使用两种不同压缩算法生成的档案。结束语在本文中,您了解了tar命令最常用的标志、如何创建和提取tar档案,以及如何创建和提取gzip压缩的tar档案。让我们再次回顾所有标志:?-c:创建一个新存档?-f:允许指定存档的文件名?-t:列出存档的内容?-v:详细列出已处理的文件?-x:提取文件来自存档?-z:使用gzip压缩?-j:使用bzip2压缩点击关注,第一时间了解华为云的新鲜技术~