学习Linux tar 命令:最简单也最困难
该账号是华为云开发者社区的官方运营账号,提供全面深入的云计算前景分析、丰富的技术干货和程序样本,分享华为云前沿的资讯动态。
本文分享自华为云社区《Linux 中的 Tar 命令:压缩和提取文件,学会了吗》,作者墨田_ t,Linux tar命令是如何工作的?tar命令用于创建一个. tar、tar.gz。tgz或tar.bz2文件。
通常称为“tarball”。延伸部分。tar.gz和。tgz用于识别由gzip压缩生成的文件,从而减小文件大小。扩展名为tar.bz2的文件是用bzip2压缩生成的。
Linux发行版提供了tar二进制文件,不需要外部命令的帮助就可以支持gzip压缩。正如我们将在本文中看到的,这可能不适用于其他类型的压缩。让我们从tar命令的三个例子开始。
让自己熟悉最常见的标志。
创建包含两个文件的归档。这是tar命令的一个基本示例。在这种情况下,我们不使用压缩:
tar-cf archive.tar测试文件1测试文件2这个命令创建一个名为archive.tar的归档文件,它包含两个文件:测试文件1和测试文件2。
这是两个标志的含义:-c(与-create相同):创建一个新的归档文件-f:它允许指定一个归档文件(在本例中称为archive.tar)。file命令确认archive.tar是一个归档文件:
[myuser @ localhost] $ file archive.tar archive. tar: POSIX tar archive (GNU) Another useful sign is the -v sign.
它提供了在Linux上执行tar命令期间处理的文件的详细输出。如果我们在创建归档文件时也传递了-v标志,让我们看看输出是如何变化的:
[myuser @ localhost] $ tar-cfv archive.tar test file 1 test file 2tar: archive.tar: Cannot stat: There is no such file or directory tar: It is strange to exit in a failed state due to previous errors.
[my user @ localhost]$ ls-al total 20 drwxrwxr-x . 2 my user my group 4096 Jul 17 09:42 . drwxrwxrwt . 6 root root 4096 Jul 17 09:38 ~-rw-rw-r .1 my user my group 0 Jul 17 09:38 test file 1-rw-rw-r-. 1 my user my group 0 Jul 17 09:38 test file 2-rw-rw-r-. 1 my user my group 10240 Jul 17 09:42v[my user @ localhost]$ file vv:POSIX tar archive(GNU)" Es gibt keine solchen dateen or ver zeichnisse " Der Katalog nd塔尔一个人如此这般五档案,
[myuser @ localhost] $ tar-CVF archive.tar test file 1 test file 2 test file 1 test file 2 everything went well this time.
verbose标志显示了添加到我们正在创建的归档中的两个文件的名称。有道理?
详细列出tar存档中的所有文件要列出tar存档中的所有文件而不提取它们的内容,
我们将引入第四个标志:-t:列出存档的内容。现在我们可以将三个标志放在一起:-t、-v和-f来查看我们之前创建的归档中的文件:
[myuser @ localhost] $ tar-tvfarchive. tar-rw-rw-r-myuser/mygroup0 2020-07-17 09: 38 Test file 1-rw-r-myuser/mygroup0 2020-07-17 09: 38 Test file 2 I should match dashes with dashes. I noticed the dash before the sign in some cases,
[我的用户@ localhost]$ tar tvf archive . tar-rw-rw-r-我的用户/我的群0 2020-07-17 09:38测试文件1-rw-rw-r-我的用户/我的群0 2020-07-17 09:38测试文件2输出是相同的,
Tar-t-v-f archive.tar tar-tvf archive. tartar -tvf archive. Tartar-list-verbose-file archive.tar's last command uses the long option style as the symbol of the command provided to the Linux operating system.
从存档中提取所有文件。让我们引入一个额外的标志,它允许提取tar存档的内容。这是-x符号。要提取我们之前创建的文件的内容,我们可以使用以下命令:
tar -xvf archive.tar(the two lines below are the output of the command in the shell)testfile1testfile2ls -altotal 20drwxrwxr-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 正如您所看到的,
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 -ltrtotal 8drwxrwxr-x. 2 myuser mygroup 4096 Jul 17 10:34 dir1drwxrwxr-x. 2 myuser mygroup 4096 Jul 17 10:34 dir2[myuser@localhost]$ tar -cvf archive.tar dir*dir1/dir1/testfile1dir2/dir2/testfile2注意:请注意,
tar -xvf archive.tar dir1/testfile1解压后保留了原来的目录结构,所以我将在dir1中得到testfile1:
[myuser@localhost]$ ls -al dir1/total 8drwxrwxr-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 的gzippedtar 存档,
我们将使用以下命令(也是创建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*testfile1testfile2/bin/sh: bzip2: command not foundtar: Child returned status 127tar: Error is not recoverable: exiting now错误“bzip2:command not found”表明tar 命令正在尝试使用bzip2 命令进行压缩,
yum install bzip2我可以使用which 命令确认bzip2 二进制文件存在:
[myuser@localhost]$ which bzip2/usr/bin/bzip2现在,如果我再次使用bzip2 压缩运行tar 命令:
[myuser@localhost]$ tar -cvjf archive.tar.bz2 testfile*testfile1testfile2[myuser@localhost]$ ls -altotal 16drwxrwxr-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一切正常!另外,
[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如您所见,
结论在本文中,您学习了与tar 命令一起使用的最常用标志、如何创建和提取tar 存档以及如何创建和提取gzip 压缩的tar 存档。让我们再次回顾一下所有的标志:
-c:创建一个新的存档-f:允许指定存档的文件名-t:列出档案的内容-v:详细列出已处理的文件-x:从存档中提取文件-z:使用gzip压缩-j:使用bzip2压缩点击关注,
第一时间了解华为云新鲜技术~华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云