快如闪电:Linux多线程压缩软件pigz和压缩神器zstd

快如闪电:Linux多线程压缩软件pigz和压缩神器zstd,第1张

pigz是GZip的并行版(pigz,即 Parallel Implementation of GZip),作者为Mark Adler。

它充分利用了现代多核处理器的性能,大幅提高压缩解压的速度。

1、压缩单个文件

2、解压单个文件

3、压缩文件夹

4、解压文件夹

Zstandard 简称Zstd,是一种快速的无损压缩算法,以 zlib 级为目标的实时压缩场景和更好的压缩比。它可以将压缩速度交换为更高的压缩比率,同时支持非常快的解码器。Zstd压缩包为 .zst 格式。

1、压缩单个文件

2、解压单个文件

3、压缩文件夹

4、解压文件夹

tar 的功能类似于 Windows 中的 WinRAR。它可以将多个目录或文件打包成一个大文件,在打包的过程中还可以透过 gzip/bzip2/xz 的支持,对文件进行压缩 1 。

tar 的选项参数很多,主要用到的有以下这些:

还是太多,记不住怎么办? 记住下面这些最常用的命令即可:

总结一下:z 为gzip;j 为bzip2;J 为xz。c 为压缩;t 为查询;x 为解压缩。最后跟着 vf。f 一定要是最后一个,如果放在其他选项之前,tar 就会把文件名搞错。比如 tar -zcfv xxx 命令,tar 指令就会认为压缩文件名为 v!

压缩的文件名称要根据压缩算法加上响应的后缀:

只有知道了压缩算法,我们才能解的出来,你说是吗?所以文件名规范很重要。

假设我们需要备份 /etc 文件夹,把它打成一个压缩包 1 。这在实际应用中很常见,因为 /etc 文件夹存放了系统主要配置文件。在英文中完整单词是etc.,也就是后面会带上一个句点,表示“等等”之意。

接下来,我们分别使用 gzip、bzip2与 xz 算法对 /etc 文件夹进行打包压缩。

gzip 压缩指令: time tar -zpcvf /root/etc.tar.gz /etc

bzip2压缩指令: time tar -jpcvf /root/etc.tar.bz2 /etc

xz 压缩指令: time tar -Jpcvf /root/etc.tar.xz /etc

从 real 中可以看出: gzip 的压缩速度最快,而 xz 的压缩速度最慢。

从大小上来看,xz 的压缩率最高,而gzip 压缩率最差。

压缩率高,自然需要时间成本。因此需要压缩的文件夹很大,那么就要多多考虑时间成本咯。因为 gzip 压缩速度快,这也是 *.tar.gz 比较流行的原因之一。

假设有这样一种场景:我们需要打包某个文件夹(/root),但这个文件夹中的某个文件或者子文件夹不想打包进去(带 etc 前缀)。也就是希望这个文件夹部分打包,部分不打包。可以执行以下指令:

tar -zcvf /root/test.tar.gz --exclude=/root/etc* --exclude=/root/test.tar.gz /root

加了 --exclude=/root/test.tar.gz 是为了排除自身,否则压缩包中会包含一个大小为 0 的自身文件,这恐怕不是我们希望看到的:

通过 tar -ztvf test.tar.gz 就可以查看刚刚新打的压缩包中所包含的文件列表:

使用命令 tar -ztvf etc.tar.gz 查看刚刚打好的压缩包。注意要使用匹配的解压缩算法才能正确解压,比如示例中是 gz 作为后缀,所以加了 -z 选项表示使用 gzip 算法进行解压。

部分输出内容:

可以看到该命令把文件的权限、账户以及归属组也一并打印出来了。

而且还有一点很关键,这些文件都没有根目录。如果没有拿掉根目录,解压缩后的文件名就会是绝对路径, 亦即解压缩后的数据一定会被放置 到 /etc/xxx 去 1 !这样系统的 /etc 文件夹就会被覆盖,后果很严重。所以,tar 打包指令默认都会去除放入包中文件的根目录。除非通过 -P 显示要求保留这些文件的根目录。

(1)完全解压

利用 tar -zxvf etc.tar.gz -C /tmp 命令把 etc.tar.gz 解压到 /tmp。解压成功后,就会在 /tmp 下看到 /etc 文件夹。

如果需要在本地路径下直接解开,那直接执行 tar -zxvf etc.tar.gz 即可。

(2)部分解压

假设我们需要把压缩包(etc.tar.gz)中的 vconsole.conf 解压出来。可以先执行以下命令,查询出该文件所对应的相对路径:

tar -ztvf etc.tar.gz | grep ‘console’

拿到需要解压的文件路径之后,就可以执行 tar -zxvf etc.tar.gz etc/vconsole.conf

进入当前目录的 etc 文件夹,就可以看到 vconsole.conf 已经被解压出来了:

【1】 鸟哥. 鸟哥的Linux私房菜 基础学习篇[M]. 第四版. 北京: 人民邮电出版社,2018:359-362.

归档,也称为打包,指的是一个文件或目录的集合,而这个集合被存储在一个文件中。归档文件没有经过压缩,因此,它占用的空间是其中所有文件和目录的总和。

和归档文件类似,压缩文件也是一个文件和目录的集合,且这个集合也被存储在一个文件中,但它们的不同之处在于,压缩文件采用了不同的存储方式,使其所占用的磁盘空间比集合中所有文件大小的总和要小。

压缩是指利用算法将文件进行处理,已达到保留最大文件信息,而让文件体积变小的目的。其基本原理为,通过查找文件内的重复字节,建立一个相同字节的词典文件,并用一个代码表示。比如说,在压缩文件中,有不止一处出现了

"C语言中文网",那么,在压缩文件时,这个词就会用一个代码表示并写入词典文件,这样就可以实现缩小文件体积的目的。

由于计算机处理的信息是以二进制的形式表示的,因此,压缩软件就是把二进制信息中相同的字符串以特殊字符标记,只要通过合理的数学计算,文件的体积就能够被大大压缩。把一个或者多个文件用压缩软件进行压缩,形成一个文件压缩包,既可以节省存储空间,有方便在网络上传送。

如果你能够理解文件压缩的基本原理,那么很容易就能想到,对文件进行压缩,很可能损坏文件中的内容,因此,压缩又可以分为有损压缩和无损压缩。无损压缩很好理解,指的是压缩数据必须准确无误有损压缩指的是即便丢失个别的数据,对文件也不会造成太大的影响。有损压缩广泛应用于动画、声音和图像文件中,典型代表就是影碟文件格式

mpeg、音乐文件格式 mp3 以及图像文件格式 jpg。

采用压缩工具对文件进行压缩,生成的文件称为压缩包,该文件的体积通常只有原文件的一半甚至更小。需要注意的是,压缩包中的数据无法直接使用,使用前需要利用压缩工具将文件数据还原,此过程又称解压缩。

Linux下,常用归档命令有2个,分别是tar和dd(相对而言,tar的使用更为广泛)常用的压缩命令有很多,比如gzip、zip、bzip2等。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7216087.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存