Linux常见压缩指令小结

为什么需要压缩技术

我们都知道文件是以byte作为单位的,如果我们的文件仅仅在低位占一个1

复制代码
0000 0001

这种情况我们完全可以压缩一下,将高位的0全部抹掉即可。

如上所说是一种压缩技术,还有一种就是将1111(此处省略96个)一共100个1,用类似于"100个1"的方式。

zip/unzip

命令选项


递归基础压缩

为了方便演示压缩,我们在tmp下创建一个包含3个文件的zipDir

复制代码
[root@localhost tmp]# mkdir zipDir
[root@localhost tmp]# cd zipDir
[root@localhost zipDir]# touch file1
[root@localhost zipDir]# touch file2
[root@localhost zipDir]# touch file3

使用最高级别9,将zipDir文件夹下所有文件或者文件夹通通压缩到zipDir.zip中

复制代码
zip -9r  /tmp/zipDir.zip /tmp/zipDir/

排除指定文件压缩

例如我们希望压缩zipDir目录时,不压缩zipDir3

复制代码
zip -9r /tmp/zipDirWithoutFile3.zip  /tmp/zipDir    -x "/tmp/zipDir/file3"

如下图可以看到压缩过程中,并没有包括file3

删除压缩包中的文件

将zipDir.zip中的file3文件从压缩包中删除,命令如下所示,注意-d后面要制定和压缩包中相同的文件名所在操作系统中的路径

复制代码
 zip /tmp/zipDir.zip -d   /tmp/zipDir/file3

补充文件到压缩包

上文中,我们将file3中zipDir.zip中删除,我们希望将其添加到压缩包中,就可以使用下面这条命令

复制代码
zip -u  /tmp/zipDir.zip  /tmp/zipDir/file3

这条指令同样支持将文件夹下的指定内容添加到压缩包中,命令如下

复制代码
# 将file打头的文件添加到压缩包中
zip -u  /tmp/zipDir.zip  /tmp/zipDir/file*

解压缩

-o:解压时无脑覆盖目标路径文件

-x 解压时若目标文件夹有该文件则不覆盖

-d 指定目标解压位置

复制代码
unzip -o  /tmp/zipDir.zip -x zipDir/file3 -d  /tmp/unzipDir/

gzip/gunzip

选项

该命令只能对文件进行压缩,若指定目录也仅仅是对目录下的文件进行压缩。

递归压缩文件

同样我们为演示gzip增加测试文件夹

复制代码
mkdir gzipDir;cd gzipDir;touch file1;touch file2;touch file3;

# 因为gzip无法直接压缩文件夹所以需要先用zip压缩一下文件夹
 zip -r /tmp/gzipDir.zip /tmp/gzipDir/;
 # gzip以最高级别压缩比压缩文件,并显示压缩过程
 gzip -9v /tmp/gzipDir.zip

显示压缩比

复制代码
gzip -l /tmp/gzipDir.zip.gz

解压缩到当前目录

复制代码
gzip -d /tmp/gzipDir.zip.gz

bzip2/bunzip2

命令选项

与gzip差不多,都是用于压缩文件的,压缩时会删除文件的信息,但是用如下选项即可完成使用最高压缩比,并且压缩时不删除源文件,显示压缩进度的完成压缩

复制代码
bzip2 -9vk /tmp/*

解压缩同样使用-d即可。

tar

选项

该指令仅仅是对文件或者文件夹做打包而已,对应选项如下


普通压缩

创建示例文件夹和文件

复制代码
 mkdir tarDir;cd tarDir;touch file1;touch file2;touch file3;

显示过程并新建文件的执行压缩

复制代码
tar -cvf  /tmp/tardir.tar /tmp/tarDir/

调用gzip、bzip2压缩

调用gzip压缩,添加一个-z即可

复制代码
tar -zcvf tardir.tar.gz tardir.tar

调用bz2压缩

复制代码
tar -jcvf tardir.tar.bz2 tardir.tar

解压缩

将上文的c改为x即可

例如上文压缩原始压缩文件tardir.tar,我们压缩命令为

复制代码
tar -xvf tardir.tar

gz结尾的tar文件,则用

复制代码
tar -zxvf tardir.tar.gz

bz2结尾的tar文件则用

复制代码
tar -jxvf tardir.tar.bz2

dd

常用于文件备份,将指定文件输出到对应文件夹

备份示例

将/etc/inittab备份至/etc/inittab.bak

复制代码
dd if=/etc/inittab of=/etc/inittab.bak

我们都知道操作系统存储最基础单位为块。可以看到备份过程中,用了0+1的块。说明使用了0个完整的块+1个不到的块完成文件备份。

cpio

选项

该命令也是用于文件备份和还原的

备份

将tarDir备份到tmp的backDir.cpio中

复制代码
find /tmp/tarDir/ | cpio -ocvB >/tmp/backDir.cpio

恢复

为了演示还原,笔者将被压缩的源文件删除,使用cpio将直接备份的文件原原本本还原为原来路径的原来文件,如下

复制代码
cpio -icduv < /tmp/backDir.cpio

参考文献

鸟哥的Linux私房菜

循序渐进Linux(第2版)

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式