Linux 文件压缩和打包命令
一、文件压缩命令
#文件压缩介绍在 Linux 系统中,文件压缩具有多方面的重要意义,主要体现在以下几个方面:节省存储空间:通过压缩文件,可以将文件的大小减小,从而在硬盘、存储设备或服务器上占用更少的空间。这对于存储大量数据的场景,如数据库备份、日志文件存储、文件服务器等非常有帮助,可以降低硬件成本,延长存储设备的使用寿命。加快数据传输速度:在网络传输中,压缩后的数据量减少,能够更快地在网络上传输。无论是通过局域网进行文件共享,还是通过互联网进行远程文件传输、软件更新、在线备份等操作,压缩都可以显著缩短传输时间,提高网络带宽的利用率,减少用户等待时间。提高数据处理效率:一些应用程序在处理数据时,可能会先将数据压缩后再进行存储或处理。这样可以减少内存和磁盘 I/O 的使用,提高数据处理的效率。例如,在数据库中,对一些不经常访问但占用大量空间的数据进行压缩,可以减少数据库的存储体积,加快查询和备份恢复等操作的速度。方便数据管理和归档:压缩可以将多个文件或目录打包成一个压缩文件,方便对数据进行组织、管理和归档。例如,将项目文件、文档、图片等相关资料压缩成一个文件,便于存储、备份和传输,同时也可以避免文件丢失或混乱。保护数据安全:某些压缩算法还支持加密功能,对压缩文件进行加密可以保护数据的安全性,防止敏感信息被未经授权的访问或窃取。在数据传输和存储过程中,即使数据被截获,没有正确的解密密钥也无法获取其中的内容。#压缩比介绍压缩比是衡量压缩算法或工具压缩效果的一个重要指标,它表示原始数据大小与压缩后数据大小之间的比例关系。压缩比的计算公式为:压缩比 = 原始数据大小 / 压缩后数据大小。例如,一个文件原始大小为100MB,压缩后变为20MB,那么它的压缩比就是100 / 20 = 5,通常表示为5:1。不同类型的数据具有不同的压缩比。一般来说,文本数据由于具有较高的冗余度,通常能获得较高的压缩比;而图像、音频和视频等二进制数据,虽然也可以压缩,但由于其本身已经经过了一定的编码处理,压缩比相对较低。不同的压缩算法对同一数据的压缩效果可能会有很大差异。例如,gzip 使用的是 DEFLATE 算法,bzip2 采用的是 Burrows - Wheeler 变换和霍夫曼编码等技术,xz 则基于 LZMA 算法。这些算法在压缩比和压缩速度上各有侧重。比如一个20G的文件,压到10G只要10分钟,但是压到2G要1个小时,那么具体压到多少才合理?这是需要测试还有综合考虑的。许多压缩工具允许用户指定“压缩级别”,通常级别越高,压缩比越高,但压缩时间也越长。以 gzip 和 bzip2 为例,它们都可以通过指定 1 - 9 的数字来设置压缩级别,9 代表最高压缩比,1 则表示最快的压缩速度但压缩比相对较低。#linux常见压缩命令1.gzipgzip 是 Linux 中最常用的压缩工具之一,它可以将文件压缩成 .gz 格式。(1)压缩[root@centos79-68-78 src]# ll -h /usr/lib/locale/locale-archive-rw-r--r--. 1 root root 102M Feb6 17:49 /usr/lib/locale/locale-archive[root@centos79-68-78 src]# cp /usr/lib/locale/locale-archive test[root@centos79-68-78 src]# ll -htotal 102M-rw-r--r-- 1 root root 102M Feb 11 15:59 test[root@centos79-68-78 src]# gzip test [root@centos79-68-78 src]# ll -htotal 23M-rw-r--r-- 1 root root 23M Feb 11 15:59 test.gz(2)解压缩方法1:[root@centos79-68-78 src]# gzip -d test.gz [root@centos79-68-78 src]# ll -htotal 102M-rw-r--r-- 1 root root 102M Feb 11 15:59 test方法2:[root@centos79-68-78 src]# gzip test [root@centos79-68-78 src]# gunzip test.gz [root@centos79-68-78 src]# ll -htotal 102M-rw-r--r-- 1 root root 102M Feb 11 15:59 test(3)保留原文件压缩[root@centos79-68-78 src]# gzip -c test > test.gz[root@centos79-68-78 src]# ll -htotal 125M-rw-r--r-- 1 root root 102M Feb 11 15:59 test-rw-r--r-- 1 root root23M Feb 11 16:18 test.gz(4)指定压缩级别-1,--fast最快压缩,压缩效果差,压缩比最小-9,--best最慢压缩,压缩效果好,压缩比大[root@centos79-68-78 src]# gzip -c test -1> test-level1.gz[root@centos79-68-78 src]# gzip -c test -9> test-level9.gz[root@centos79-68-78 src]# ll -htotal 148M-rw-r--r-- 1 root root 102M Feb 11 15:59 test-rw-r--r-- 1 root root24M Feb 11 16:20 test-level1.gz-rw-r--r-- 1 root root23M Feb 11 16:21 test-level9.gz执行命令的时候可以发现-9花费的时间很多,但实际效果只是少了1M。2.bzip2bzip2 也是一种常用的压缩工具,它通常能提供比 gzip 更高的压缩比,但压缩和解压缩速度相对较慢。(1)压缩[root@centos79-68-78 src]# bzip2 test [root@centos79-68-78 src]# ll -htotal 21M-rw-r--r-- 1 root root 21M Feb 11 15:59 test.bz2可以和gzip进行一下对比,bzip2压缩后的文件是更小的。(2)解压缩方法1:[root@centos79-68-78 src]# bzip2 -d test.bz2 [root@centos79-68-78 src]# ll -htotal 102M-rw-r--r-- 1 root root 102M Feb 11 15:59 test方法2:[root@centos79-68-78 src]# bzip2 test [root@centos79-68-78 src]# bunzip2 test.bz2 [root@centos79-68-78 src]# ll -htotal 102M-rw-r--r-- 1 root root 102M Feb 11 15:59 test(3)压缩保留原文件[root@centos79-68-78 src]# bzip2 -k test [root@centos79-68-78 src]# ll -htotal 122M-rw-r--r-- 1 root root 102M Feb 11 15:59 test-rw-r--r-- 1 root root21M Feb 11 15:59 test.bz2(4)指定压缩级别-1 .. -9set block size to 100k .. 900k--fastalias for -1--bestalias for -9[root@centos79-68-78 src]# bzip2 -k-1 test -c> test-level1.bz2[root@centos79-68-78 src]# [root@centos79-68-78 src]# bzip2 -k-9 test -c> test-level9.bz2[root@centos79-68-78 src]# ll -htotal 158M-rw-r--r-- 1 root root 102M Feb 11 15:59 test-rw-r--r-- 1 root root21M Feb 11 15:59 test.bz2-rw-r--r-- 1 root root16M Feb 11 16:34 test-level1.bz2-rw-r--r-- 1 root root21M Feb 11 16:35 test-level9.bz23.xzxz 是一种高效的压缩工具,它可以提供比 gzip 和 bzip2 更高的压缩比,但压缩和解压缩速度相对较慢。(1)压缩[root@centos79-68-78 src]# xztest [root@centos79-68-78 src]# ll -htotal 3.3M-rw-r--r-- 1 root root 3.3M Feb 11 15:59 test.xz(2)解压缩[root@centos79-68-78 src]# xz -d test.xz [root@centos79-68-78 src]# ll -htotal 102M-rw-r--r-- 1 root root 102M Feb 11 15:59 test(3)压缩保留原文件[root@centos79-68-78 src]# xz -c test > test.xz[root@centos79-68-78 src]# ll -htotal 105M-rw-r--r-- 1 root root 102M Feb 11 15:59 test-rw-r--r-- 1 root root 3.3M Feb 11 16:48 test.xz(4)指定压缩级别[root@centos79-68-78 src]# xz -c test -0> test-level0.xz[root@centos79-68-78 src]# xz -c test -1> test-level1.xz[root@centos79-68-78 src]# xz -c test -9> test-level9.xz[root@centos79-68-78 src]# ll -htotal 127M-rw-r--r-- 1 root root 102M Feb 11 15:59 test-rw-r--r-- 1 root root 9.5M Feb 11 16:49 test-level0.xz-rw-r--r-- 1 root root11M Feb 11 16:50 test-level1.xz-rw-r--r-- 1 root root 2.2M Feb 11 16:50 test-level9.xz-rw-r--r-- 1 root root 3.3M Feb 11 16:48 test.xz4.zipzip 是一种跨平台的压缩工具,它可以将多个文件和目录压缩成一个 .zip 文件,在 Windows 和 Linux 系统中都广泛使用。(1)压缩文件和目录zip-r archive.zip directory/ file1 file2[root@centos79-68-78 src]# zip -r test.zip etc/ test [root@centos79-68-78 src]# ll -htotal 137Mdrwxr-xr-x 83 root root 8.0K Feb 11 18:01 etc-rw-r--r--1 root root 102M Feb 11 15:59 test-rw-r--r--1 root root35M Feb 11 18:02 test.zip(2)解压缩[root@centos79-68-78 src]# rm -rf etc/ test[root@centos79-68-78 src]# ll -htotal 35M-rw-r--r-- 1 root root 35M Feb 11 18:02 test.zip[root@centos79-68-78 src]# unzip test.zip [root@centos79-68-78 src]# ll -htotal 137Mdrwxr-xr-x 91 root root 8.0K Feb 11 18:01 etc-rw-r--r--1 root root 102M Feb 11 15:59 test-rw-r--r--1 root root35M Feb 11 18:02 test.zip#注意gzip、bzip2、xz 这几个命令本身主要用于压缩单个文件,通常不直接支持压缩目录和多个文件,但可以通过一些变通方法来实现对多个文件或目录的压缩。如果要压缩目录,通常需要结合 tar 命令来实现。以 gzip 为例,先使用 tar 命令将目录打包成一个归档文件,再用 gzip等压缩命令对归档文件进行压缩
二、文件打包命令-归档
tar 本身不是压缩工具,但它可以将多个文件和目录打包成一个 .tar 文件,这种将多个文件打包的操作就是归档,打包后的tar文件就是归档文件,这么做的好处是方便对这些文件进行统一管理、存储和传输,tar命令通常与 gzip 或 bzip2 结合使用来实现压缩功能。1.打包文件和目录:tar-cvf archive.tar directory/ file1 file2-c 选项表示创建新的归档文件,-v 选项用于显示详细的打包过程,-f 选项指定归档文件的名称。2.解包文件:tar-xvf archive.tar-x 选项表示解包归档文件。3.使用 gzip 压缩打包:tar-zcvf archive.tar.gz directory/ file1 file24.解压缩并解包 tar.gz 文件:tar-zxvf archive.tar.gz5.使用 bzip2 压缩打包:tar-jcvf archive.tar.bz2 directory/ file1 file2-j 选项表示使用 bzip2 进行压缩,将文件和目录打包并压缩成 archive.tar.bz2 文件。6.解压缩并解包 tar.bz2 文件:tar-jxvf archive.tar.bz27.使用 xz 压缩打包:tar-Jcvf8.查看 archive.tar 文件中包含的文件和目录。tar-tvf archive.tar9.将 archive.tar 文件解包到 /tmp 目录。tar-xvf archive.tar -C /tmp-C(--directory):指定解包文件的目标目录。10.将 project 目录打包成 project.tar,但排除 project/logs 目录。tar-cvf project.tar --exclude=project/logs project/--exclude:在打包或压缩时排除指定的文件或目录。#注意在使用 tar 命令时,选项的顺序通常不影响结果,但 -f 选项后面必须紧跟归档文件的名称。当使用压缩选项(如-z、-j、-J)时,tar 会自动识别并使用相应的解压算法进行解包操作,无需手动指定。在解包归档文件时,要确保当前用户有足够的权限将文件解包到指定目录。