LinuxBasicsForHackers笔记 -- 压缩和归档
压缩分为有损或无损。有损压缩对于减小文件大小非常有效,但会丢失信息的完整性。换句话说,压缩后的文件与原始文件并不完全相同。 这种类型的压缩非常适合图形、视频和音频文件,文件中的微小差异几乎不会被注意到。
本章重点介绍这种无损压缩类型,许多实用程序和算法都可以提供这种压缩类型。 不幸的是,正如您想象的那样,无损压缩不如有损压缩那么有效,但有时,完整性往往比压缩比重要得多。
将文件打包在一起
通常,压缩文件时要做的第一件事是将它们组合成存档。在大多数情况下,归档文件时,您将使用 tar
命令。Tar 代表磁带存档,指的是系统使用磁带存储数据的史前计算时代。 tar
命令从多个文件创建一个文件,该文件称为存档、tar 文件或 tarball。
您可以使用下面的命令将多个文件组合起来创建一个存档文件:tar -cvf <文件名.tar> 文件1 文件2 文件3
c
选项表示创建,v
(代表详细且可选)列出 tar 正在处理的文件,f
表示写入以下文件。
我们可以通过使用带有 -t
内容列表开关的 tar
命令来显示 tarball 中的这些文件,而无需提取它们,如下所示:tar -tvf <文件名>.tar
您可以使用带有 -x
(extract)开关的 tar
命令从 tarball 中提取这些文件,如下所示:tar -xvf <文件名>.tar
如果您想提取文件并“静默”执行,即不显示任何输出,您可以简单地删除 -v
(verbose)开关,如下所示:tar -xf <文件名>.tar
请注意,默认情况下,如果提取的文件已存在,tar 将删除现有文件并将其替换为提取的文件。
压缩文件
现在我们有一个存档文件,但该文件比原始文件的总和还要大。 如果您想压缩这些文件以便于传输怎么办?Linux 有几个能够创建压缩文件的命令。 我们将看看这些:
- gzip, which uses the extension .tar.gz or .tgz
- bzip2, which uses the extension .tar.bz2
- compress, which uses the extension .tar.z
这些都能够压缩我们的文件,但是它们使用不同的压缩算法并且具有不同的压缩率。一般来说,compress
速度最快,但生成的文件较大; bzip2
最慢,但生成的文件最小; gzip
介于两者之间。
用gzip
压缩
gzip <文件名>.tar
– 对文件进行压缩。
gunzip <文件名>.*
– 使用gunzip 命令(GNU unzip 的缩写)解压缩文件。
用bzip2
压缩
bzip2 <文件名>.tar
– 对文件进行压缩。
bunzip2 <文件名>.*
– 解压缩文件。
用compress
压缩
compress <文件名>.tar
– 对文件进行压缩。
uncompress <文件名>.*
– 解压缩文件。
创建存储设备的逐位或物理副本
dd
命令会逐位复制文件、文件系统甚至整个硬盘驱动器。 这意味着即使已删除的文件也会被复制(是的,重要的是要知道已删除的文件可能是可恢复的),从而可以轻松发现和恢复。大多数逻辑复制实用程序(例如 cp
)不会复制已删除的文件。
需要注意的是,dd
命令不应用于典型的日常文件和存储设备复制,因为它非常慢; 其他命令可以更快、更有效地完成工作。 不过,当您需要一份没有文件系统或其他逻辑结构的存储设备副本时(例如在取证调查中),它非常有用。
dd 命令的基本语法如下:dd if=inputfile of=outputfile
因此,如果您想制作闪存驱动器的物理副本,假设闪存驱动器是 sdb,您将输入以下内容:dd if=/dev/sdb of=/root/flashcopy
有许多选项可与 dd 命令一起使用,您可以对这些选项进行一些研究,但最有用的是 noerror
选项和 bs
(block size)选项。 顾名思义,noerror
选项即使遇到错误也会继续复制。 bs
选项允许您确定要复制的数据的块大小(每个块读取/写入的字节数)。默认情况下,它设置为 512 字节,但可以更改它以加快进程。例如: dd if=/dev/media of=/root/flashcopy bs=4096 conv:noerror