压缩和归档

优质
小牛编辑
132浏览
2023-12-01

COMPRESSING AND ARCHIVING

黑客经常需要下载和安装新软件,以及发送和下载多个脚本和大文件。如果将这些文件压缩并合并到单个文件中,那么这些任务就更容易完成。如果您来自 Windows 世界,您可能会从.zip格式中认识到这个概念,该格式组合和压缩文件,使其更小,以便通过互联网或可移动媒体传输。在 Linux 中有很多方法可以做到这一点,在本章中我们将介绍一些最常用的工具。我们还将查看dd命令,它允许您复制整个驱动器,包括这些驱动器上的已删除文件。

压缩是什么?

压缩这个有趣的主题本身就可以填满一整本书,但是对于这本书,我们只需要对这个过程有一个基本的了解。顾名思义,压缩使数据更小,因此需要更少的存储容量,使数据更容易传输。对于初学者来说,将压缩分类为有损或无损就足够了。

有损压缩在减小文件大小方面非常有效,但是会丢失信息的完整性。换句话说,压缩后的文件与原始文件并不完全相同。这种类型的压缩用于较大的图形,视频和音频文件,其中一些小的差异在文件中很难察觉 .mp3、.mp4、.png 和.jpg 都是有损压缩算法。如果.png 文件中的一个像素或.mp3 文件中的一个音符发生了变化,你的眼睛或耳朵不太可能注意到其中的差别——当然,音乐爱好者会说他们肯定能分辨出.mp3 和未压缩的.flac 文件之间的差别。有损压缩的优点是它的效率和有效性。压缩比是非常高,这意味着生成的文件比原始文件小得多。

然而,当您发送文件或软件时,有损压缩是不可接受的,而数据完整性是至关重要的。例如,如果您正在发送脚本或文档,那么在解压缩原始文件时,它的完整性必须保持。本章主要讨论这种无损压缩类型,它可以从许多实用程序和算法中获得。不幸的是,无损压缩并不像您想象的那样有效,但是对于黑客来说,完整性通常比压缩比重要得多。

将文件存档在一起

通常,压缩文件时要做的第一件事是将它们合并到归档文件中。在大多数情况下,在归档文件时,您将使用tar命令。Tar 是磁带存档的缩写,指的是系统使用磁带存储数据的史前计算时代。tar 命令从许多文件创建一个文件,然后将其称为归档文件、tar 文件或 tar 包。

例如,假设您有三个脚本文件,与我们在第 8 章节中使用的脚本文件类似,分别名为 hackersarise1、hackersarise2 和 hackersarise3。如果您切换到保存它们的目录并执行以长列表格式列出查看,您可以清楚地看到文件和您期望的详细信息,包括文件的大小,如下所示:

kali >ls -l

­rwxr­xr­x 1 root root 22311 Nov 27 2018 13:00 hackersarise1.sh

­rwxr­xr­x 1 root root 8791 Nov 27 2018 13:00 hackersarise2.sh

­rwxr­xr­x 1 root root 3992 Nov 27 2018 13:00 hackersarise3.sh

假设您希望将所有这三个文件发送给与您一起工作的另一个黑客。您可以使用清单 9-1 中的命令组合它们并创建一个归档文件。

kali >tar -cvf HackersArise.tar hackersarise1 hackersarise2 hackersarise3

hackersarise1

hackersarise2

hackersarise3

清单 9-1:创建一个包含三个文件的 tar 包

让我们分解这个命令以更好地理解它。归档命令是tar,我们在这里使用它有三个参数选项。c选项表示创建,v(代表详细过程,是可选的)列出 tar 正在处理的文件,f表示写入以下一个文件。最后一个选项也适用于从文件中读取。然后,我们为新归档文件提供您希望从这三个脚本来创建的文件名:HackersArise.tar。

总之,这个命令将获取所有三个文件,并创建一个完整的单独新文件 HackersArise.tar。当您对此目录执行以长列表格式列出所有文件时,您将看到它还包含了新的.tar 文件,如下所示:

kali >ls -l

­­snip­­

­rw­r­­r­­ 1 root root 40960 Nov 27 2018 13:32 HackersArise.tar

­­snip­­

kali >

注意这里 tar 包的大小:40,960 字节。在归档这三个文件时,tar 使用了大量的开销来执行此操作:在归档之前,这三个文件的总和是 35094 字节,而在归档之后,tar 包已经增长到了 40960 字节。换句话说,归档过程增加了 5000 多个字节。尽管这种开销对于小文件来说非常重要,但是对于越来越大的文件来说就变得越来越不重要了。

我们可以使用tar命令和-t内容列表参数从 tar 包中显示这些文件,而不需要提取它们,如下所示:

kali >tar -tvf HackersArise.tar

­rwxr­xr­x 1 root root 22311 Nov 27 2018 13:00 hackersarise1.sh

­rwxr­xr­x 1 root root 8791 Nov 27 2018 13:00 hackersarise2.sh

­rwxr­xr­x 1 root root 3992 Nov 27 2018 13:00 hackersarise3.sh

在这里,我们看到三个原始文件和它们的原始大小。然后您可以使用tar命令和-x (extract)选项从 tar 包中提取这些文件,如下所示:

kali >tar -xvf HackersArise.tar

hackersarise1.sh

hackersarise2.sh

hackersarise3.sh

因为您仍然在使用-v参数,所以这个命令将显示在输出中提取哪些文件。如果您想提取文件并“静默”地这样做,这意味着不显示任何输出,您可以简单地删除-v(详细)选项,如下所示:

kali >tar -xf HackersArise.tar

这些文件已经被提取到当前目录下,您可以在目录下以长列表格式列出,来进行双重检查。请注意,默认情况下,如果提取的文件已经存在,tar 将删除现有文件,并用提取的文件替换它。

压缩文件

现在我们有一个归档文件,但是这个文件比原始文件的总和还要大。如果您想压缩这些文件以方便传输,该怎么办?Linux 有几个命令可以创建压缩文件。我们来看看这些:

  • gzip,它使用扩展名.tar.gz.tgz

  • bzip2,它使用扩展名.tar.bz2

  • compress,它使用扩展名.tar.z

这些都可以压缩我们的文件,但它们使用不同的压缩算法和不同的压缩比。因此,我们将看看每一种方式以及它的能力。

通常,compress是最快的,但是生成的文件是更大的;bzip2是最慢的,但是生成的文件是最小的;gzip介于两者之间。作为一个初出乍到的黑客,您应该了解这三种方法的主要原因是,在访问其他工具时,您将遇到各种类型的压缩。因此,本节将向您展示如何处理压缩的主要方法。

用 gzip 压缩

让我们先试试gzip (GNU zip),因为它是 Linux 中最常用的压缩实用程序。您可以通过输入以下命令来压缩 HackersArise.tar 文件(确保您位于保存存档文件的目录中):

kali >gzip HackersArise.*

注意,我们对文件扩展名使用了通配符*,这告诉 Linux 该命令应该应用于任何以任何文件扩展名结尾的文件。在下面的例子中,您将使用类似的符号。当我们对目录执行长列表格式查看时,我们可以看到 HackersArise.tar 已经被 HackersArise.tar.gz 所取代。文件大小已经压缩到 3299 字节!

kali >ls -l

­­snip­­

­rw­r­­r­­ 1 root root 3299 Nov 27 2018 13:32 HackersArise.tar.gz

­­snip­­

然后,我们可以使用gunzip命令(GNU unzip 的缩写)解压缩该文件。

kali >gunzip HackersArise.*

解压后,文件不再使用.tar.gz 扩展名保存,而是使用.tar 扩展名保存。另外,请注意,它已经返回到原来的大小 40,960 字节。试着以长列表格式列出来确认这一点。值得注意的是,gzip 还可以用于提取.zip 文件。

用 bzip2 压缩

Linux 中另一个广泛使用的压缩实用程序是bzip2,它的工作原理类似于gzip,但是具有更好的压缩比,这意味着生成的文件将更小。您可以通过输入以下命令来压缩 HackersArise.tar 文件:

kali >bzip2 HackersArise.*

当你以长列表格式列出文件,您可以看到 bzip2 将文件压缩到了 2,081 字节!还要注意,文件扩展名现在是.tar.bz2

要解压压缩的文件,使用bunzip2,如下所示:

kali >bunzip2 HackersArise.*

kali >

当您这样做时,文件将返回其原始大小,其文件扩展名将返回.tar。

用 compress 压缩

最后,可以使用命令compress压缩文件。这可能是最不常用的压缩实用程序,但是很容易记住。要使用它,只需输入命令compress和文件名,如下:

kali >compress HackersArise.*

kali >ls -l

­­snip­­

­rw­r­­r­­ 1 root root 5476 Nov 27 2018 13:32 HackersArise.tar.Z

注意,compress实用程序将文件的大小减少到 5,476 字节,是bzip2的两倍多。还要注意,文件扩展名现在是.tar.Z(大写)。

若要解压同一文件,请使用 uncompress:

kali >uncompress HackersArise.*

还可以对使用compress压缩的文件使用gunzip命令。

创建存储设备的逐位或物理副本

在信息安全和黑客的世界里,一个 Linux 归档命令在实用性方面胜过其他命令。dd命令逐个比特位复制文件、文件系统,甚至整个硬盘驱动器。这意味着即使删除的文件也会被复制(是的,重要的是要知道您删除的文件可能是可恢复的),以便于发现和恢复。大多数逻辑复制实用程序(如cp)不会复制已删除的文件。

一旦黑客拥有目标系统,dd命令将允许他们将整个硬盘驱动器或存储设备复制到他们的系统。此外,那些想要抓住黑客的人

  • 即调查调查人员 - 可能会使用此命令来制作硬盘驱动器的物理副本,其中包含已删除的文件和其他可能有助于查找针对黑客证据的构件。

需要注意的是,dd命令不应该用于典型的文件和存储设备的日常复制,因为它非常慢,其他命令执行起来更快、更有效。但是,当您需要一个没有文件系统或其他逻辑结构的存储设备的副本时(例如在取证调查中),它是非常好的。

dd命令的基本语法如下:

dd if=inputfile of=outputfile

因此,如果您想为您的闪存驱动器创建一个物理副本,假设闪存驱动器是 sdb(我们将在第 10 章中详细讨论这个名称),您将输入以下内容:

kali >dd if=/dev/sdb of=/root/flashcopy

1257441=0 records in

1257440+0 records out

7643809280 bytes (7.6 GB) copied, 1220.729 s, 5.2 MB/s

让我们分解这个命令:dd是指定输入文件的物理“复制”命令,/dev/sdb表示指定输出文件的/dev 目录下的闪存驱动器,/root/flashcopy 是要将物理副本复制到的文件的名称。(有关/dev 目录中驱动器的 Linux 系统指定的更完整说明,请参见第 10 章节)。

dd 命令可以使用许多参数选项,您可以对这些选项进行一些研究,但其中最有用的是noerror选项和bs(块大小)选项。顾名思义,即使遇到错误,noerror选项也会继续复制。bs选项允许您确定要复制的数据的块大小(每个块的读/写字节数)。默认情况下,它被设置为 512 字节,但是可以更改它以加快进度。通常,这将设置为设备的扇区大小,通常为 4KB(4096 字节)。有了这些选项,您的命令将如下所示:

kali >dd if=/dev/media of=/root/flashcopy bs=4096 conv:noerror

正如前面提到的,值得您自己多做一些研究,但是这是对该命令及其常见用法的一个很好的介绍。

总结

Linux 有许多命令可以让您组合和压缩文件,以便更容易地进行传输。对于组合文件,tar是首选命令,并且您至少有三个实用程序可以使用不同的压缩比压缩文件——gzip、bzip2 和 compression。dd命令超越了这个范围。它使您能够在没有文件系统等逻辑结构的情况下对存储设备进行物理复制,允许您恢复已删除的文件等工件。