《循序渐进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命令配合使用。其实,上面的示例中我们已经看到了它们的组合用法。

相关文章
|
23天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
109 0
|
28天前
|
安全 Shell Linux
【Shell 命令集合 系统管理 】Linux 锁定终端 vlock命令 使用指南
【Shell 命令集合 系统管理 】Linux 锁定终端 vlock命令 使用指南
35 1
|
28天前
|
Shell Linux C语言
【Shell 命令集合 系统管理 】Linux 显示系统的平均负载情况 tload命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示系统的平均负载情况 tload命令 使用指南
39 1
|
28天前
|
安全 Shell Linux
【Shell 命令集合 系统管理 】Linux 切换当前用户身份为另一个用户 su命令 使用指南
【Shell 命令集合 系统管理 】Linux 切换当前用户身份为另一个用户 su命令 使用指南
38 1
|
28天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 显示当前登录到系统的用户信息 who命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示当前登录到系统的用户信息 who命令 使用指南
43 1
|
28天前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 显示目前登入系统的用户信息 w命令 使用指南
【Shell 命令集合 系统管理 】Linux 显示目前登入系统的用户信息 w命令 使用指南
44 2
|
28天前
|
存储 Unix Shell
【Shell 命令集合 系统管理 】⭐⭐Linux 显示系统的基本信息 uname命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐Linux 显示系统的基本信息 uname命令 使用指南
34 1
|
28天前
|
存储 Shell Linux
【Shell 命令集合 系统管理 】Linux 修改用户的属性和配置 usermod命令 使用指南
【Shell 命令集合 系统管理 】Linux 修改用户的属性和配置 usermod命令 使用指南
30 1
|
28天前
|
搜索推荐 Shell Linux
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
【Shell 命令集合 系统管理 】Linux 管理用户配置文件 userconf命令 使用指南
32 2
|
28天前
|
Shell Linux 数据库
【Shell 命令集合 系统管理 】Linux 创建新用户的命令 useradd命令 使用指南
【Shell 命令集合 系统管理 】Linux 创建新用户的命令 useradd命令 使用指南
44 1

热门文章

最新文章