《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》——4.4 压缩与解压

简介: 对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。bunzip2其实是bzip2的符号链接,即软链接,因此压缩、解压都可以通过bzip2实现。

本节书摘来自异步社区《循序渐进Linux(第2版) 基础知识 服务器搭建 系统管理 性能调优 虚拟化与集群应用》一书中的第4章,第4.4节,作者:高俊峰著,更多章节内容可以访问云栖社区“异步社区”公众号查看

4.4 压缩与解压

4.4.1 zip/unzip命令
1.功能说明
将一般的文件或者目录进行压缩或者解压,默认生成以“.zip”为后缀的压缩包。zip命令类似于Windows中的winzip压缩程序。其格式如下。

zip [选项] 压缩文件名需要压缩的文档列表
unzip [选项] 压缩文件名

zip命令的选项及其说明如表4.27所示。
screenshot
screenshot
2.举例
1)将/etc 目录下的所有文件以及目录进行压缩,设置压缩级别为最高,保存到文件/opt/etc.zip。

[root@mylinux ~]# zip -9r /opt/etc.zip /etc
2)将/var目录中所有文件以及子目录压缩,除了“*.log”文件之外,将压缩文件保存到/opt目录下。

[root@mylinux ~]#zip –r /opt/var.zip /var –x "*.log"
3)将上面/opt/etc.zip中的etc/passwd文件从压缩包中删除。

[root@mylinux ~]#zip /opt/etc.zip–d etc/passwd
deleting:etc/passwd

4)修改了/etc/inittab文件,希望把更改信息更新到/opt/etc.zip包中。

[root@mylinux ~]#zip –u /opt/etc.zip /etc/inittab
如果/etc目录下很多文件进行了修改或者增加了很多文件,就需要把/etc目录下的全部信息更新到/opt/etc.zip文件。可以使用以下命令。

[root@mylinux ~]#zip –u /opt/etc.zip /etc/* 或者使用
[root@mylinux ~]#zip–ru /opt/etc.zip /etc

看出点玄机了吗?在上例中,其实“/etc/*”就代表了/etc目录下的所有文件以及子目录,而这刚好是zip命令“-r”选项完成的功能。

5)将/opt/etc.zip压缩文件全部解压到/etc目录下,除了etc/inittab文件之外,并且在解压过程中如果出现相同的文件就直接进行覆盖,不要求用户确认。可以使用以下命令。

[root@mylinux ~]#unzip –o /opt/etc.zip –x etc/inittab –d /etc
4.4.2 gzip/gunzip命令
1.功能说明
将一般的文件进行压缩或者解压。压缩文件预设的扩展名为“.gz”,其实gunzip就是gzip的硬链接,因此无论是压缩或者解压都可以通过gzip来实现。

注意
 gzip只能对文件进行压缩,不能压缩目录,即使指定压缩的目录,也只能压缩目录内的所有文件。
其格式如下。

gzip [选项] 压缩(解压缩)的文档名
2.举例
1)首先将/etc目录下的所有文件以及子目录进行压缩,备份压缩包etc.zip到/opt目录,然后对etc.zip文件进行gzip压缩,设置gzip的压缩级别为9。

[root@mylinux ~]#zip –r /opt/etc.zip /etc
[root@mylinux ~]#gzip -9v /opt/etc.zip
etc.zip:     6.5% -- replaced with etc.zip.gz

2)查看上述etc.zip.gz文件的压缩信息。

[root@mylinux ~]# gzip -l /opt/etc.zip.gz 
compressed    uncompressed ratio uncompressed_name
      11938745      12767265  6.5% /opt/etc.zip

3)解压上述etc.zip.gz文件到当前目录。

[root@mylinux ~]#gzip –d /opt/etc.zip.gz或者执行
[root@mylinux ~]#gunzip /opt/etc.zip.gz

通过上面的示例可以知道“gzip -d”等价于“gunzip”命令。

4.4.3 bzip2/bunzip2命令
1.功能说明
对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。bunzip2其实是bzip2的符号链接,即软链接,因此压缩、解压都可以通过bzip2实现。其格式如下。

bzip2 [选项] 要压缩或解压的文件
2.举例
将/opt目录下的etc.zip、var.zip和backup.zip进行压缩,设置压缩率为最高,同时在压缩完毕后不删除原始文件,显示压缩过程的详细信息。

[root@mylinux~]# bzip2 -9vk/opt/etc.zip /opt/var.zip /opt/backup.zip   
etc.zip: 1.048:1, 7.633 bits/byte, 4.59% saved, 49490414 in, 4721194 out.
var.zip: 1.048:1, 7.633 bits/byte, 4.59% saved, 49490414 in, 2821065 out.
backup.zip: 1.046:1,7.647 bits/byte, 4.42% saved, 8410 in, 8823 out.

压缩完毕后,在/opt下就会生成相应的etc.zip.bz2、var.zip.bz2和backup.zip.bz2文件。

4.4.4 tar命令
1.功能说明
tar是Linux下经常使用的归档工具,对文件或者目录进行打包归档,归档成一个文件,但是并不进行压缩。其格式如下。

tar [主选项+辅助选项] 文件或者目录
tar命令的选项很多,这里列出一些经常用到的主选项,如表4.31所示。
screenshot
2.举例
1)将/etc目录下的所有文件打包,并显示打包的详细文件,设置打包文件名为etc.tar,同时保存文件到/opt目录下。

[root@dbbackup oracle]#tar -cvf /opt/etc.tar /etc
这里的档案名“etc.tar”名字是我们自己随便取的,Linux上利用tar命令打包出来的档案文件一般用.tar作为标识。

2)将/etc目录下的所有文件打包并压缩,然后显示打包的详细文件,设置打包文件名为etc.tar.gz,同时保存文件到/opt目录下。

[root@dbbackup oracle]#tar -zcvf /opt/etc.tar.gz /etc
[root@dbbackup oracle]#tar -jcvf /opt/etc.tar.bz2 /etc

“zcvf”选项表示在打包完成后调用gzip命令对档案文件进行压缩,这里的档案名“etc.tar.gz”也是我们随便取的,“.tar”表示是用tar命令打包的,“.gz”表示调用了gzip命令进行了压缩。同理,“jcvf”选项表示在打包完成后调用bzip2命令对档案文件进行压缩,档案命名标识中“.bz2”表示调用了bzip2命令进行了压缩处理。

这里对档案文件的取名没有硬性的规定,上面采用的命名规则,可以很方便地让我们知道文件的类型以及对应的解压方式,因为压缩方式不同,解压方式也是不同的。同时,这种规则也是默许的一种潜规则。如果你不喜欢这种规则,完全可以按照自己喜欢的方式命名档案文件。

3)查阅上面/opt/etc.tar.gz压缩包的内容。

[root@dbbackup oracle]#tar -ztvf /opt/etc.tar.gz
[root@dbbackup oracle]#tar -jtvf /opt/etc.tar.gz

注意
 “etc.tar.gz”可能包含很多个文件,无法一个屏幕显示完毕,这时可以使用more命令,比如,“tar -zxvf /opt/etc.tar.gz|more”。
4)将/opt/etc.tar.gz解压到/usr/local/src下。

[root@dbbackup oracle]#cd /usr/local/src
[root@dbbackup src]#tar -zxvf /opt/etc.tar.gz

一般情况下,可以把/opt/etc.tar.gz在任何地方解压,这里首先切换到了/usr/local/src目录下,然后解压/opt/etc.tar.gz,因此/usr/local/src/etc目录就是解压的目录。

5)将/etc目录下的所有文件打包备份到/opt目录下,并保存每个文件的权限。

[root@dbbackup oracle]#tar -zcvpf /opt/etc.tar.gz /etc
6)在/opt目录下,仅解压/opt/etc.tar.gz压缩文件中的/etc/inittab文件。

[root@dbbackup oracle]# cd /opt
[root@dbbackup opt]#tar -zxvf /opt/etc.tar.gz etc/inittab

首先可以通过“tar-ztvf”查看“etc.tar.gz”文件中包含的文件,然后找到需要解压的文件,通过上面的方式解压。后面指定的需要解压出来的文件一定要是通过“tar -ztvf”显示出来的文件完整路径。这样就在/opt目录下解压出了一个etc目录,而etc目录下的inittab就是我们需要的文件。

7)打包备份/var/log目录中2008/7/21以后的文件。

[root@dbbackup oracle]#tar –N "2008/7/21"–zcvf log.tar.gz /var/log
[root@dbbackup oracle]#pwd
/opt/oracle
[root@dbbackup oracle]#ls
log.tar.gz

8)打包备份/home目录和/etc目录,但是不备份/home下的ixdba目录。

[root@dbbackuporacle]#tar–exclude/home/ixdba -zcvf myfile.tar.gz /home/* /etc
9)将/etc目录打包压缩后直接解压到/opt目录下,而不生成打包的档案文件。

[root@dbbackuporacle]#cd /opt
[root@dbbackupopt]#tar –zcvf - /etc | tar –zxvf –

在上面的命令中,紧跟在“f”后面的“-”将创建的档案文件输出到标准输出,“|”在Linux下表示管道符,命令最后的“-”表示将tar命令通过管道传入的档案文件作为需要解压的数据来源。

4.4.5 dd命令
1.功能说明
dd命令用来转换或复制文件,同时可以对设备进行备份。其格式如下。

dd if="input_file" of="output_file" bs="block_size" count="number"
dd命令的选项及其说明如下。

if:就是输入文件,可以是设备,例如,磁盘某分区或者整个磁盘。
of:就是输出文件,也可以是输出设备,例如,磁盘、磁带等。
bs:指定一个block的大小,如果没有指定,默认为512字节。
count:就是“bs”的数量。
2.举例
1)将/etc/inittab文件备份到/opt/inittab.bak中。

[root@mylinux ~]# dd if=/etc/inittab of=/opt/inittab.bak
3+1 records in
3+1 records out
[root@mylinux ~]#ls –al /etc/inittab/opt/inittab.bak
-rw-r--r-- 1 root root 1666 Jul 22 17:37 /etc/inittab
-rw-r--r-- 1 root root 1666 Jul 23 08:09 /opt/inittab.bak

上面两个文件的大小没有任何异同,都是1666字节。由于没有指定“bs”大小,因此默认512字节为一个单位块,刚好对应上面的“3+1”。3表示有3个完整的512字节的块,而“1”表示未满512字节的那个块。

2)将/dev/sda2整个分区进行备份,保存备份文件到/opt目录。

[root@mylinux ~]# dd if=/dev/sda2 of=/opt/sda2.back
这里将磁盘某个分区的数据全部备份,dd命令还能够备份整个磁盘的数据,这里的备份输出路径一定不能是“/dev/sda2”所在分区,否则怎么都备份不完的。

3)将上面例子中的备份包/opt/sda2.back恢复到相应的分区,使用以下命令。

[root@mylinux ~]#dd if=/opt/sda2.back of=/dev/sda2
注意
 在恢复目标分区时,一定要先卸载目标分区,待恢复完成,再进行挂载。
还需要注意的是,备份的分区最好和恢复的分区一致,例如,本例中“/opt/sda6.back”文件是对“/dev/sda2”分区的备份,那么恢复的时候最好将“/opt/sda6.back”文件恢复到“/dev/sda2”分区下,或者恢复到大小与“/dev/sda2”一致的分区下。因为恢复的目标分区如果大于备份的分区,将浪费空间;相反,若恢复的目标分区小于备份的分区,就将在恢复的时候提示空间不足。

4.4.6 cpio命令
1.功能说明
cpio命令是通过重定向的方式将文件进行打包、备份、还原、恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。其格式如下。

cpio [选项] >文件名或者设备名
cpio [选项] <文件名或者设备名

2.举例
1)将/etc下的所有普通文件都备份到/opt/etc.cpio中。

[root@mylinux ~]#find /etc –type f | cpio –ocvB >/opt/etc.cpio
2)将系统上所有资料备份到磁带机内。

[root@mylinux ~]#find / -print | cpio -covB > /dev/st0
这里的“/dev/st0”是磁带的设备名,代表SCSI磁带机。

3)查看上例磁带机上备份的文件。

[root@mylinux ~]#cpio -icdvt < /dev/st0
有时可能因为备份的文件过多,一个屏幕无法显示完毕,此时利用下面的命令,让磁带机的文件信息输出到文件。

[root@mylinux ~]#cpio -icdvt < /dev/st0> /tmp/st_content
4)将示例1)中的备份包还原到相应的位置,如果有相同文件就进行覆盖。

[root@mylinux ~]#cpio –icduv < /opt/etc.cpio
注意
 如果cpio在打包、备份的时候用的是绝对路径,那么在恢复的时候会自动恢复到这些绝对路径下,本例就会将备份文件全部还原到/etc路径下对应的目录中。同理,如果在打包备份时用的是相对路径,那么还原时也将恢复到相对路径下。
通过上面的示例可以看出,cpio无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别、读取,而find命令的输出刚好做到了这点,因此cpio命令一般和find命令配合使用。其实,上面的示例中我们已经看到了它们的组合用法。

相关文章
|
5天前
|
存储 安全 虚拟化
Omnissa ThinApp 2503 - 应用虚拟化软件
Omnissa ThinApp 2503 - 应用虚拟化软件
33 8
Omnissa ThinApp 2503 - 应用虚拟化软件
|
26天前
|
Ubuntu Linux
Linux系统管理:服务器时间与网络时间同步技巧。
以上就是在Linux服务器上设置时间同步的方式。然而,要正确运用这些知识,需要理解其背后的工作原理:服务器根据网络中的其他机器的时间进行校对,逐步地精确自己的系统时间,就像一只犹豫不决的啮齿动物,通过观察其他啮齿动物的行为,逐渐确定自己的行为逻辑,既简单,又有趣。最后希望这个过程既能给你带来乐趣,也能提高你作为系统管理员的专业素养。
105 20
|
19天前
|
Ubuntu Linux PHP
利用PHP压缩音频:Linux环境下的ffmpeg简易安装指南
希望这个指南能为你的编程之旅提供帮助。只需记住,每一行代码都像音乐的音符,组合在一起,创造出美妙的旋律。祝你编程愉快!
65 6
|
6月前
|
安全 Ubuntu Linux
Linux系统中的软件管理工具主
Linux系统中的软件管理工具主
91 7
|
2月前
|
Linux
Linux压缩与解压“助手”
gzip压缩解压 因为都是系统自带的我们不需要安装; ls 看一下目录当前的文件,创建一个 touch 123.txt 文件; 原文件消失,压缩解压 gzip 进行压缩,(“ gzip 123.txt ”),这样就压缩完毕了; gzip 进行解压,(“ gzip -d 123.txt.gz”),这样就解压完毕了; 原文件保留,gzip -k 123.txt、gzip -dk 123.txt.gz ;
55 9
|
2月前
|
机器学习/深度学习 安全 Linux
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
107 5
|
4月前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
6月前
|
Ubuntu Linux 测试技术
Linux系统之Ubuntu安装cockpit管理工具
【10月更文挑战第13天】Linux系统之Ubuntu安装cockpit管理工具
496 4
Linux系统之Ubuntu安装cockpit管理工具
|
5月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
90 5
|
5月前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
97 6

热门文章

最新文章