在 Linux Ubuntu 中,关于这些版本的“tar”命令:
tar -tzf /path/to/filename.tar.gz # Show the content
tar -xzf /path/to/filename.tar.gz # Extract the content
观察这两个命令都使用该z
选项,并且它们按预期工作。
通过man tar
,关于该z
选项,它表示:
-z, --gzip, --gunzip, --ungzip
Filter the archive through gzip(1).
问题
- 为什么命令通过选项
tar
使用命令?gzip
'z'
额外问题
关于Filter the archive through gzip(1).
部分。
- 为什么
"filter"
在上面显示的两个命令中需要它?或 的含义或上下文是filter
什么?
归档和压缩是两个不同的东西。
Windows 上的大多数归档程序(例如
zip
、7z
、rar
等)将两者组合成一个程序,既可以进行归档又可以进行压缩 - 因此习惯使用 Windows 的人倾向于认为它们只是不可分割的一件事。虽然这些程序中有许多存在于 unix/linux 上,主要是为了与非 unix 系统兼容,但压缩和归档功能由单独的程序完成更为常见。与 MS-DOS/Windows 归档程序不同,unix-native 程序理解并使用 unix 文件元数据,如所有权和权限,有些程序甚至可以正确处理 ACL。
tar
是一个归档程序。它允许将一个或多个文件存储在 .tar 存档中。此存档未压缩。它最初用于将包含多个文件和相关元数据(文件名、所有权、权限等)的流写入磁带。或者到文件,因为任何字节流都可以重定向到文件或通过管道传输到另一个程序。tar
不是唯一的归档程序,还有许多其他程序,包括cpio
、ar
、afio
、pax
等等。gzip
是一个压缩程序。它可以将任何单个文件压缩为自身的压缩版本。或者它可以压缩来自标准输入的数据并将其输出到标准输出(即它可以作为“过滤器”工作)。同样,gzip
它不是唯一的压缩/解压缩程序,它是众多程序之一。tar
可用于gzip
在将 .tar 存档写入磁盘之前对其进行压缩。并在读取压缩存档之前对其进行解压缩。根据
tar
您拥有的版本,它可能能够使用其他压缩程序来代替gzip
. 例如,GNU tar 具有以下与压缩相关的选项:而且,值得注意的是,其他归档程序也可以与压缩程序一起使用——通过命令行选项,如
-z
or-Z
等;或者通过在将压缩器的输出重定向到文件之前将存档器的输出通过管道传输到压缩程序中(或者相反,将解压缩程序的输出通过管道传输到存档器以列出或提取其内容)您可以根据需要“混合和匹配”归档和压缩程序,从而使您能够利用归档和/或压缩技术的改进。
大多数存档器,包括 GNU tar,都通过管道支持这一点,但 GNU tar 还为一些知名程序提供了几个内置选项,并且
-I
为使用没有自己的内置选项的其他压缩程序提供了一个方便的选项——也许实现新的压缩算法或现有算法的新实现。例如,像pigz
,pixz
等pbzip2
(而不是gzip
,xz
,bzip2
等)这样的程序是这些压缩程序的并行版本,可以利用多核/多线程 CPU 来大大减少压缩或解压缩数据所需的时间。“过滤器”是管道中使用的程序的通用术语,用于处理(并可能以某种方式修改)一个程序的输出,然后将其重定向到文件或将其传送到管道中的下一个程序。
一些程序(如
tar
with-z
等)可以自己设置过滤管道,不需要用户在shell中进行(例如tar xfz filename.tar.gz
与 基本相同gzip -d filename.tar.gz | tar xf -
,与tar cfz filename.tar.gz ...
基本相同tar cf - ... | gzip > filename.tar.gz
)编写许多 unix 程序以便它们可以用作管道中的过滤器 - 例如,可以
gzip
压缩现有文件,也可以压缩其输入流(stdin)并将输出发送到 stdout....cat
只需将其标准输入直接传递给标准输出或可选地对行进行编号(使用-n
),使行尾和控制以及其他代码可见(使用-v
,-E
,-A
,等选项-t
)。顺便说一句,因为管道非常有用,人们编写自己的脚本(在 awk 或 perl 或其他)非常普遍,以便他们能够从标准输入获取输入并写入标准输出 - 即人们编写他们的脚本很常见自己的过滤器。