学习Linux tar 命令:最简单也最困难

Posted mb61453901db614

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习Linux tar 命令:最简单也最困难相关的知识,希望对你有一定的参考价值。


  说得通?

  详细列出 tar 存档中的所有文件

  要列出 tar 存档中的所有文件而不提取其内容,我们将引入第四个标志:

  -t : 列出档案的内容

  我们现在可以将三个标志放在一起:-t、-v和-f来查看我们之前创建的存档中的文件:

  [myuser@localhost]$ tar -tvf archive.tar

  -rw-rw-r-- myuser/mygroup 0 2020-07-17 09:38 testfile1

  -rw-rw-r-- myuser/mygroup 0 2020-07-17 09:38 testfile2

  我应该将 Dash 与 Tar 一起使用吗?

  我注意到在某些情况下出现标志之前的破折号,但情况并非总是如此。

  所以,让我们看看是否通过破折号有什么不同。

  首先,让我们尝试在不使用标志前的破折号的情况下运行相同的命令:

  [myuser@localhost]$ tar tvf archive.tar

  -rw-rw-r-- myuser/mygroup 0 2020-07-17 09:38 testfile1

  -rw-rw-r-- myuser/mygroup 0 2020-07-17 09:38 testfile2

  输出是相同的,这意味着不需要破折号。

  只是给您一个想法,您可以按以下方式运行 tar 命令并获得相同的输出:

  tar -t -v -f archive.tar

  tar -tvf archive.tar

  tar -tvf archive.tar

  tar --list --verbose --file archive.tar

  最后一个命令使用长选项样式作为提供给 Linux 命令的标志。

  您可以看到使用标志的简短版本要容易得多。

  从存档中提取所有文件

  让我们引入一个额外的标志,允许提取 tar 存档的内容。这是-x标志。

  要提取我们之前创建的文件的内容,我们可以使用以下命令:

  tar -xvf archive.tar

  (the two lines below are the output of the command in the shell)

  testfile1

  testfile2

  ls -al

  total 20

  drwxrwxr-x 2 myuser mygroup 59 Feb 10 21:21 .

  drwxr-xr-x 3 myuser mygroup 55 Feb 10 21:21 ..

  -rw-rw-r-- 1 myuser mygroup 10240 Feb 10 21:17 archive.tar

  -rw-rw-r-- 1 myuser mygroup 54 Feb 10 21:17 testfile1

  -rw-rw-r-- 1 myuser mygroup 78 Feb 10 21:17 testfile2

  正如您所看到的,我们使用-x标志来提取档案的内容,使用-v标志来详细提取,使用-f标志来引用在标志之后指定的档案文件 (archive.tar)。

  注意:如前所述,我们只在所有标志之前输入一次破折号字符。我们可以在每个标志之前指定破折号,而输出将是相同的。

  tar -x -v -f archive.tar

  还有一种方法可以从存档中提取单个文件。

  在这种情况下,考虑到我们的存档中只有两个文件,这并没有太大区别。但是,如果您有一个包含数千个文件的存档并且您只需要其中一个,那么它会产生巨大的差异。

  如果您有一个备份脚本来创建过去 30 天的日志文件存档,并且您只想查看特定日期的日志文件的内容,那么这很常见。

  要仅从 archive.tar 中提取 testfile1,您可以使用以下通用语法:

  tar -xvf {archive_file} {path_to_file_to_extract}

  在我们的具体案例中:

  tar -xvf archive.tar testfile1

  让我们看看如果我创建一个包含两个目录的 tar 存档会发生什么变化:

  [myuser@localhost]$ ls -ltr

  total 8

  drwxrwxr-x. 2 myuser mygroup 4096 Jul 17 10:34 dir1

  drwxrwxr-x. 2 myuser mygroup 4096 Jul 17 10:34 dir2

  [myuser@localhost]$ tar -cvf archive.tar dir*

  dir1/

  dir1/testfile1

  dir2/

  dir2/testfile2

  注意:请注意,我使用通配符 * 将名称以“dir”开头的任何文件或目录包含在存档中。

  如果我只想提取 testfile1 命令将是:

  tar -xvf archive.tar dir1/testfile1

  解压后保留了原来的目录结构,所以我将在dir1中得到testfile1:

  [myuser@localhost]$ ls -al dir1/

  total 8

  drwxrwxr-x. 2 myuser mygroup 4096 Jul 17 10:36 .

  drwxrwxr-x. 3 myuser mygroup 4096 Jul 17 10:36 ..

  -rw-rw-r--. 1 myuser mygroup 0 Jul 17 10:34 testfile1

  一切都清楚了吗?

  减少 tar 档案的大小

  Gzip和Bzip2压缩可用于减小 tar 存档的大小。

  启用压缩的其他 tar 标志是:

  -z用于 Gzip 压缩:长标志是–gzip

  -j用于 Bzip2 压缩:长标志为–bzip2

  要使用详细输出创建名为 archive.tar.gz 的 gzipped tar 存档,我们将使用以下命令(也是创建 tar 存档时最常用的命令之一):

  tar -czvf archive.tar.gz testfile1 testfile2

  并提取其内容,我们将使用:

  tar -xzvf archive.tar.gz

  我们也可以使用 .tgz 扩展名而不是 .tar.gz,结果是一样的。

  现在,让我们创建一个使用 bzip2 压缩的存档:

  [myuser@localhost]$ tar -cvjf archive.tar.bz2 testfile*

  testfile1

  testfile2

  /bin/sh: bzip2: command not found

  tar: Child returned status 127

  tar: Error is not recoverable: exiting now

  错误“bzip2: command not found”表明 tar 命令正在尝试使用 bzip2 命令进行压缩,但在我们的 Linux 系统上找不到该命令。

  解决办法是安装bzip2。该过程取决于您使用的 Linux 发行版,在我的情况下是使用 yum 作为包管理器的 CentOS。

  让我们使用以下yum 命令安装 bzip2 :

  yum install bzip2

  我可以使用 which 命令确认 bzip2 二进制文件存在:

  [myuser@localhost]$ which bzip2

  /usr/bin/bzip2

  现在,如果我再次使用 bzip2 压缩运行 tar 命令:

  [myuser@localhost]$ tar -cvjf archive.tar.bz2 testfile*

  testfile1

  testfile2

  [myuser@localhost]$ ls -al

  total 16

  drwxrwxr-x. 2 myuser mygroup 4096 Jul 17 10:45 .

  drwxrwxrwt. 6 root root 4096 Jul 17 10:53 ..

  -rw-rw-r--. 1 myuser mygroup 136 Jul 17 10:54 archive.tar.bz2

  -rw-rw-r--. 1 myuser mygroup 128 Jul 17 10:45 archive.tar.gz

  -rw-rw-r--. 1 myuser mygroup 0 Jul 17 10:44 testfile1

  -rw-rw-r--. 1 myuser mygroup 0 Jul 17 10:44 testfile2

  一切正常!

  另外,考虑到我很好奇,我想根据 Linux file 命令查看两个存档(.tar.gz 和 .tar.bz2)之间的区别:

  [myuser@localhost]$ file archive.tar.gz

  archive.tar.gz: gzip compressed data, last modified: Fri Jul 17 10:45:04 2020, from Unix, original size 10240

  [myuser@localhost]$ file archive.tar.bz2

  archive.tar.bz2: bzip2 compressed data, block size = 900k

  如您所见,Linux 可以区分使用两种不同压缩算法生成的档案。

  结论

  在本文中,您学习了与tar 命令一起使用的最常用标志、如何创建和提取 tar 存档以及如何创建和提取 gzip 压缩的 tar 存档。

  让我们再次回顾一下所有的标志:

  -c:创建一个新的存档

  -f:允许指定存档的文件名

  -t:列出档案的内容

  -v:详细列出已处理的文件

  -x:从存档中提取文件

  -z:使用gzip压缩

  -j:使用bzip2压缩


以上是关于学习Linux tar 命令:最简单也最困难的主要内容,如果未能解决你的问题,请参考以下文章

学习Linux tar 命令:最简单也最困难

Linux系统开发: 命令进阶学习

新手Linux命令学习

linux命令学习系列13-gzip,tar命令

gulp学习笔记

Linux命令学习-tar命令