Mar*_*usJ 216 linux unix tar archiving
我知道当时tar是为磁带存档制作的,但今天我们有存档文件格式,既可以聚合文件,又可以在相同的逻辑文件格式中执行压缩。
问题:
与使用在同一数据结构中进行聚合和压缩的文件格式相比,在聚合/压缩/解压缩阶段使用tar封装在gzip或 中是否存在性能损失bzip2?假设被比较的压缩器的运行时间是相同的(例如 gzip 和 Deflate 是相似的)。
该tar文件格式是否具有其他文件格式(例如.7z和.zip不具有)的功能?
既然tar是这样的旧文件格式,以及较新的文件格式存在的今天,为什么tar(无论是封装gzip,bzip2甚至是新的xz),今天仍然如此广泛的使用在GNU / Linux,Android的,BSD和其他类似UNIX操作系统,文件传输、程序源和二进制下载,有时甚至作为包管理器格式?
all*_*tic 179
这是两个独立工作流程及其作用的比较。
您在磁盘上有一个文件,blah.tar.gz它是 1 GB 的 gzip 压缩数据,未压缩时占用 2 GB(因此压缩率为 50%)。
如果您要分别进行存档和压缩,则创建此文件的方式将是:
tar cf blah.tar files ...
Run Code Online (Sandbox Code Playgroud)
这将导致blah.tar它只是files ...未压缩形式的聚合。
那么你会做
gzip blah.tar
Run Code Online (Sandbox Code Playgroud)
这blah.tar将从磁盘读取内容,通过 gzip 压缩算法压缩它们,将内容写入blah.tar.gz,然后取消链接(删除)文件blah.tar。
现在,让我们解压!
你有blah.tar.gz,一种或另一种方式。
你决定运行:
gunzip blah.tar.gz
Run Code Online (Sandbox Code Playgroud)
这会
blah.tar.gz。gzip内存中的解压缩器处理压缩数据。blah.tar磁盘上的文件并重复,直到读取所有压缩数据。blah.tar.gz。现在,您拥有blah.tar未压缩但包含一个或多个文件的磁盘,并且数据结构开销非常低。文件大小可能比所有文件数据的总和大几个字节。
你跑:
tar xvf blah.tar
Run Code Online (Sandbox Code Playgroud)
这会
blah.tar和tar文件格式的数据结构,包括有关文件权限、文件名、目录等的信息。在此过程中我们从磁盘读取的总数据为 1 GB(对于 gunzip)+ 2 GB(对于 tar)= 3 GB。
在此过程中我们写入磁盘的总数据为 2 GB(对于 gunzip)+ 2 GB(对于 tar)+ 几个字节的元数据 = 大约 4 GB。
你有blah.tar.gz,一种或另一种方式。
你决定运行:
tar xvzf blah.tar.gz
Run Code Online (Sandbox Code Playgroud)
这会
blah.tar.gz一次一个块)读入内存。gzip内存中的解压缩器处理压缩数据。tar文件格式解析器,后者将读取有关元数据等信息和未压缩的文件数据。tar文件解析器中填满时,它将通过创建文件和目录并用未压缩的内容填充它们来将未压缩的数据写入磁盘。在这个过程中我们从磁盘读取的总数据是 1 GB 的压缩数据,周期。
在这个过程中我们写入磁盘的总数据是 2 GB 的未压缩数据 + 几个字节的元数据 = 大约 2 GB。
如果您注意到,方式 2 中的磁盘 I/O 量与由7-Zip程序或7-Zip程序执行的磁盘 I/O量相同,并针对压缩率的任何差异进行调整。Zip
如果您关心压缩率,请使用Xz压缩器来封装tar,并且您拥有LZMA2 的TAR 存档,这与 7-Zip 可用的最先进算法一样有效 :-)
tar 将 Unix 权限存储在其文件元数据中,并且非常有名并经过测试,可以成功打包具有各种不同权限、符号链接等的目录。在很多情况下,人们可能需要将一堆文件放在一起到单个文件或流中,但不一定压缩它(尽管压缩很有用并且经常使用)。
许多工具以 .tar.gz 或 .tar.bz2 的源代码或二进制形式分发,因为它是“最低公分母”文件格式:就像大多数 Windows 用户可以访问 .zip 或 .rar 解压缩器一样,大多数 Linux 安装,即使是最基本的,也至少可以访问 tar 和 gunzip,无论多旧或减少。甚至 Android 固件也可以访问这些工具。
针对运行现代发行版的受众的新项目很可能以更现代的格式分发,例如 .tar.xz(使用 Xz (LZMA) 压缩格式,其压缩效果优于 gzip 或 bzip2)或 .7z,类似于ZIP 或RAR文件格式,因为它既压缩又指定用于将多个文件封装到单个文件中的布局。
您看不到 .7z 的使用频率更高,原因与在线下载商店不以全新格式(如Opus或WebM 中的视频)出售音乐的原因相同。与运行古老或非常基本系统的人的兼容性。
Kru*_*uug 102
bzip 和 gzip 处理单个文件,而不是文件组。普通的旧 zip(和 pkzip)对文件组进行操作,并具有内置存档的概念。
*nix 哲学是一种可以很好地完成特定工作并且可以链接在一起的小工具。这就是为什么这里有两个具有特定任务的工具,并且它们被设计为可以很好地结合在一起。这也意味着您可以使用 tar 对文件进行分组,然后您可以选择压缩工具(bzip、gzip 等)。
许多工具以 .tar.gz 或 .tar.bz2 的源代码或二进制形式分发,因为它是“最低公分母”文件格式:就像大多数 Windows 用户可以访问 .zip 或 .rar 解压缩器一样,大多数 Linux 安装,即使是最基本的,也至少可以访问tar和gunzip,无论多旧或精简。甚至 Android 固件也可以访问这些工具。
针对运行现代发行版的受众的新项目很可能以更现代的格式分发,例如.tar.xz(使用 Xz ( LZMA ) 压缩格式,比 gzip 或 bzip2 压缩得更好)或 .7z,类似于ZIP或RAR文件格式,因为它既压缩又指定用于将多个文件封装到单个文件中的布局。
您看不到 .7z 的使用频率更高,原因与在线下载商店不以全新格式(如Opus或WebM 中的视频)出售音乐的原因相同。与运行古老或非常基本系统的人的兼容性很重要。
dmc*_*ten 63
Tar 有一组丰富的操作和修饰符,它们了解 Unix 文件系统的所有信息。它了解 Unix 权限、与文件相关的不同时间、硬链接、软链接(以及符号链接可能在文件系统图中引入循环的可能性),并允许您指定几种不同的方式来管理所有这些数据.
您希望提取的数据保留文件访问时间吗?焦油可以做到这一点。保留权限?焦油可以做到这一点。
您想将符号链接保留为符号链接吗?默认情况下,Tar 会这样做。想要复制目标吗?焦油可以做到这一点。
您是否想确保硬链接数据只存储一次(即做正确的事情)?焦油就是这样做的。
你想很好地处理稀疏文件吗?焦油可以做到这一点。
你想要未压缩的数据(为什么?)?焦油可以做到这一点。用gzip压缩?焦油可以做到这一点。用bzip2?焦油可以做到这一点。使用任意外部压缩程序?焦油可以做到这一点。
您要写入原始设备或从原始设备恢复吗?Tar 的格式处理得很好。
要将文件添加到现有存档中吗?焦油可以做到这一点。比较两个存档看看有什么变化?焦油可以做到这一点。仅更新存档中已更改的那些部分?焦油可以做到这一点。
您想确保不会跨多个文件系统归档吗?焦油可以做到这一点。
您只想抓取比上次备份更新的文件吗?焦油可以做到这一点。
您想保留用户名和组名或号码吗?Tar可以做任何一种。
您是否需要保留设备节点(如 中的文件/dev)以便解压后系统能够正常运行?焦油可以做到这一点。
焦油已发展到处理很多很多的使用情况了几十年,确实知道了很多关于人的希望与Unix文件系统做的事情。
Mar*_*rco 31
您混淆了归档和压缩这两个不同的过程。
使用归档器的原因
使用不压缩存档的一个原因是,例如,如果将一堆文件从一台主机复制到另一台主机。像下面这样的命令
tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"
Run Code Online (Sandbox Code Playgroud)
可以大大加快速度。如果我知道文件不能被压缩,或者如果SSH设置了压缩,它可以节省大量的 CPU 时间。当然,您可以使用具有存档功能的更现代的压缩工具并关闭压缩。的优点tar是,我可以期望它在每个系统上都可用。
使用带有 gzip 压缩的归档器的原因
其中一个原因,我用tar用gzip是:速度!
如果我想将几 GiB 的文本文件从一个地方传输到另一个地方,我不关心挤出最后一个字节,因为压缩仅用于传输,而不用于长期存储。在这些情况下,我使用gzip,它不会最大化 CPU(例如,与7-Zip相比),这意味着我再次受I/O限制而不是 CPU 限制。再说一遍:gzip可以认为随处可用。
理由使用tar赞成scp,rsync等等。
这可难倒了scp,如果你有大量的小文件拷贝(例如邮件目录有几十万的文件)。rsync,虽然很棒,但可能并非随处可用。此外,rsync只有在目标文件中已经存在部分文件(或旧版本)的情况下,才能真正获得回报。对于初始副本tar是最快的,有压缩或没有压缩,取决于实际数据。
Car*_*rós 25
除了这里的其他好答案之外,我更喜欢tar+组合,gzip|bzip2|xz主要是因为这些压缩文件就像流一样,您可以轻松地对它们进行管道传输。
我需要解压缩互联网上可用的文件。对于zip或rar格式,我必须先下载它,然后解压缩它。随着tar.{gz,bz2,xz}我可以下载并在相同的步骤解压缩,而不需要有磁盘上的压缩档案phisically:
curl -s http://example.com/some_compressed_file.tar.gz | tar zx
Run Code Online (Sandbox Code Playgroud)
这将只在我的磁盘中留下未压缩的文件,并会加快整个过程,因为我不会浪费时间先下载整个文件,然后在下载完成后将其解压缩。相反,我在下载时解压缩它。您不能对zip或rar文件执行此操作。
Яро*_*лин 14
坚持使用 (GNU) Tar 有几个原因。
这是:
如果您的特定问题是在能够阅读内容之前必须“解压缩”tarball,那么您可能是对的。WinRAR和7-Zip会自动完成。但是,此问题有一些简单的解决方法,例如以未压缩的形式记录存档的内容。
psu*_*usi 11
最大的区别在于压缩和存档在存档中完成的顺序tar,然后可以选择将存档发送到压缩器,并zip构建存档,并在将文件数据插入存档时以 32 KB 块压缩文件数据。通过将文件数据分成小块并分别压缩,它允许您提取特定文件或文件的一部分,而无需解压缩存档中的所有内容。它还可以防止压缩器在重新启动之前建立一个非常大的字典。这意味着压缩速度会更快,但不会像使用更大的字典大小压缩整个事物那样提供好的比率。
您可以通过考虑两个文件来将其可视化,其中第二个文件的前 500 个字节与第一个文件的后 500 个字节相同。该zip方法是为第二个文件重新启动压缩器,因此不记得第一个文件以相同的数据结尾,因此无法从第二个文件中删除重复的数据。
还有许多其他格式比tar. 7-Zip不存储 Unix 文件权限,但dar确实并且zip可以,并且所有三个都存储索引,允许快速浏览、提取文件子集以及更新存档中的文件。他们还可以使用多核 CPU 进行压缩。
每个人仍在使用tar的原因与每个人仍在使用 Windows 和Flash 的原因相同:人们不喜欢变化。没有充分的理由去改变,人们只会坚持他们所知道的。dar当大多数人已经tar安装并且很少有人知道dar.
xor*_*yst 11
.zip 等文件格式要求软件首先读取文件的末尾,以读取文件名目录。相反,tar 将这些信息与压缩流一起存储。
tar 方式的优点是您可以在从不可查找的管道(如网络套接字)读取数据的同时解压缩数据。
zip 方式的优点是,对于磁盘上的静态文件,您可以浏览内容和元数据,而无需先解压整个存档。
两者都有其用途,具体取决于您在做什么。
Mar*_*ler 11
似乎有些不愿意直接回答你的所有问题,显然更喜欢用你的问题作为论断的起点。所以我会试一试。
与使用在相同数据结构中进行聚合和压缩的文件格式相比,在聚合/压缩/解压阶段使用封装在 gzip 或 bzip2 中的 tar 是否存在性能损失?假设被比较的压缩器的运行时间是相同的(例如 gzip 和 Deflate 是相似的)。
不。事实上,由于 tar 和 gzip 通常是两个进程,您甚至可以获得像 Info-ZIP 的 zip 这样的归档程序所不提供的一点多核速度优势。在压缩率方面,tar+gzip 通常明显优于 zip 和 deflate,因为前者可以从文件之间的相关性中受益,而后者单独压缩文件。这种压缩优势转化为提取时的速度优势,因为压缩程度更高的存档在更短的时间内解压缩。
tar 文件格式是否具有 .7z 和 .zip 等其他文件格式所没有的功能?
是的,tar 是为 Unix 设计的,并且经过多年的发展,能够准确地记录和恢复 Unix 文件系统的每一个奇怪的小角落和缝隙,甚至是更难找的 Mac OS X Unix 文件系统。zip 能够保留大部分元数据,例如权限、时间、所有者、组和符号链接,但仍不能保留所有元数据。例如,zip 和 7z 都不能识别或利用稀疏文件,它们也不知道或能够恢复硬链接。
既然 tar 是一种如此古老的文件格式,而今天又存在更新的文件格式,那么为什么 tar(无论是封装在 gzip、bzip2 甚至是新的 xz 中)今天仍然在 GNU/Linux、Android、BSD 和其他此类 UNIX 上如此广泛地使用操作系统、文件传输、程序源和二进制下载,有时甚至作为包管理器格式?
这里有很多其他好的答案。最好的是它可以正常工作,并且您可以不断将其更新为更好的压缩格式(例如 xz),并且仍然使用相同的 tar 格式,甚至是相同的编译后的 tar 实用程序。如果您只是想打包一堆东西,然后在另一端将它们全部拆开,那么除了使用最古老、最完整、调试最多的软件之外,几乎没有理由使用任何东西。
如果您想要随机访问、部分更新或其他需要零碎处理内容的事情,或者您希望能够在不阅读整个内容的情况下找出其中的内容,那么您将需要使用不同的格式。
Tar 是为文件系统的备份全保真备份而创建的,而不仅仅是用于传输文件。因此,tar 实用程序是创建存档的最完整的实用程序,可保留有关文件系统结构的所有重要信息。
这包括一个或多个竞争工具中缺少的所有这些功能:
它还具有--one-file-system在进行备份时非常有用的选项。
每当向文件系统添加新功能时,都会tar首先(甚至专门)添加支持。因此,它仍然是最兼容的文件保存方式。
我们今天有很多压缩文件,MP3、JPG、视频、tar.gz 文件、JAR 包、RPM、DEB 等等。如果您需要将一堆这些文件捆绑到一个文件中进行传输,那么拥有一个“tar”实用程序会很有用,它只捆绑文件而不尝试压缩它们。
尝试压缩压缩文件不仅会浪费时间和电力,而且通常会导致文件比原始文件大。
它的另一个用途是提高压缩率。例如,如果您对一组日志文件进行“tar”压缩,然后对结果进行 gzip,则您可能会得到一个比先压缩然后再与“tar”捆绑的文件更小的文件。当然,使用 tar,您可以选择您想要的任何压缩算法,并指定选项以针对您的特定用例优化压缩。
我发现 tar' 在今天非常重要,我更喜欢它使用 ZIP。在我们的办公室,每个使用 Windows 的人都安装了 7-zip,因此,对我们来说,tar 文件是完全跨平台兼容的。
| 归档时间: |
|
| 查看次数: |
41410 次 |
| 最近记录: |