Linux 压缩打包
目录:
一.什么叫压缩
在讲压缩工具之前,我们先来讲解一下压缩原理。目前我们使用的计算机系统是使用bytes单位计量的,但是实际上,计算机中最小的计量单位是bits,我们知道1byte=8bits,加入我们在记录一个数字1的时候是如何来记录的?
我们之前讲过一个byte是8bits我们可以理解成如下样子:
一个空格代表一个bit,1byte就是8个空格子,当我们在存放数字1的时候,根据二级制计数,在这里存放的是00000001,7个0一个1,实际上前面7个0都是空的,但是由于要满足我们操作系统的存取方式,必须以8位为单位存储,所会造成有一些空间并没有填满。压缩就是将这些没有使用到的空间丢出来,让文件的占用空间变小,这就是压缩技术。
解压缩技术就是将压缩完的数据还原成未压缩的状态。
压缩比就是指压缩后与压缩前的文件所占用磁盘空间的大小比值。
我们常见的网站数据传输一般都是使用的压缩技术,数据在网络传输过程中是使用的压缩数据,当压缩数据达到用户主机时,通过解压缩,再展示出来。
二.压缩与解压命令
(zip和unzip命令主要用于处理zip包)
-d | 从压缩文件内删除指定的文件 |
---|---|
-f | 参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中 |
-u | 更换较新的文件到压缩文件内 |
-j | 只保存文件名称及其内容,而不存放任何目录名称 |
-r | 递归处理,将指定目录下的所有文件和子目录一并处理 |
-v | 显示指令执行过程或显示版本信息 |
-y | 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效 |
- <压缩效率> | 压缩效率是一个介于1-9的数值 |
注:压缩率:描述压缩文件的效果名,是文件压缩后的大小与压缩前的大小之比。
例如:把100m的文件压缩后是90m,压缩率为90/100*100%=90%,压缩率一般是越小越好,但是压得越小,解压时间越长。
压缩效率(compressionefficiency)越大压缩后的文件越小,解压时间越长。
例1:压缩install.log文件
例2:压缩效率分别为3和9
例3:将test目录下的所有文件和文件夹全部压缩成test.zip文件,-r表示递归压缩了目录下所有文件
例4:解压lin.zip
(gzip命令用来压缩文件。gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。
gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。 )
-a | 使用ASCII文字模式 |
---|---|
-d | 解开压缩文件 |
-f | 强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接 |
-l | 列出压缩文件的相关信息 |
-L | 显示版本与版权信息 |
-n | 压缩文件时,不保存原来的文件名称及时间戳记 |
-N | 压缩文件时,保存原来的文件名称及时间戳记 |
-r | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-S或<压缩字尾字符串>或----suffix<压缩字尾字符串> | 更改压缩字尾字符串 |
-v | 显示指令执行过程 |
-t | 测试压缩文件是否正确无误 |
-<压缩效率> | 压缩效率是一个介于1~9的数值,预设值为“6”,指定愈大的数值,压缩效率就会愈高 |
例1:把test目录下的每个文件压缩成.gz文件
例2:解压上面的文件,并列出详细信息
事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成
(bzip2 命令同 gzip 命令类似,只能对文件进行压缩(或解压缩),对于目录只能压缩(或解压缩)该目录及子目录下的所有文件。当执行压缩任务完成后,会生成一个以“.bz2”为后缀的压缩包)
-c | 将压缩与解压缩的结果送到标准输出 |
---|---|
-d | 执行解压缩 |
-f或-force | bzip2在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖。请使用此参数 |
-k | bzip2在压缩或解压缩后,会删除原始文件。若要保留原始文件,请使用此参数 |
-s | 降低程序执行时内存的使用量 |
-t | 测试.bz2压缩文件的完整性 |
-v | 压缩或解压缩文件时,显示详细的信息 |
-z | 强制执行压缩 |
-V | 显示版本信息 |
例1:压缩文件file
例2:解压文件file
这一处的解压和gzip类似
4).xz和unxz命令
xz [option] … FILE…
-d | 解压缩 |
---|---|
-# | 指定压缩比,默认是6,数字越大压缩比越大(1-9) |
-k | 保留原文件 |
三.打包归档命令
首先要弄清两个概念:打包和压缩。
打包是指将一大堆文件或目录变成一个总的文件;
== 压缩则是将一个大的文件通过一些压缩算法变成一个小文件。==
为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzipbzip2命令)。
1).tar命令
tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
-c | 建立压缩档案 |
---|---|
-x | 解压 |
-t | 查看内容 |
-r | 向压缩归档文件末尾追加文件 |
-u | 更新原压缩包中的文件 |
-A | 追加tar文件至归档 |
这六个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
-z | 有gzip属性的 |
---|---|
-j | 有bz2属性的 |
-J | 有xz属性的 |
-Z | 有compress属性的 |
-v | 显示所有过程 |
-O | 将文件解压到标准输出 |
-N [date | file] somedir |
-f:必须的选项,这个参数是最后一个参数,后面要接的是压缩文件名
例1:打包文件file1和file2,仅打包不压缩
例2:先将file文件打包成lin1.tar,并且执行gzip压缩
tar -jcvf lin2.tar.bz2 file
tar -Jcvf lin3.tar.xz file
这两指令与上述图片方法相同,只是压缩文件格式不同(参照上述图片)
在 文件夹当中,比某个日期新的文件才备份
四.转换或拷贝文件dd命令
用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
- dd if=/dev/zero of=/tmp/file bs=1K count=10
- if:标准输入:输入的文件名,指定源文件
- of:标准输出,输出的文件名,指定目的文件
- count:拷贝多个块
- bs:指定输入输出块大小
ibs:读入块 obs:输出块
- skip=* :从输入的文件跳过多少个块后复制
- seek=* :从输出的文件跳过多少个块后复制
- conv= *:用指定的参数转换文件
conv=* 参数:
ascii | ascii:转换ebcdic为ascii |
---|---|
ebcdic | 转换ascii为ebcdic |
ibm | ibm:转换ascii为alternateebcdic |
block | 把每一行转换为长度为cbs,不足部分用空格填充 |
unblock | 使每一行的长度都为cbs,不足部分用空格填充 |
lcase | 把大写字符转换为小写字符 |
ucase | 把小写字符转换为大写字符 |
swab | 交换输入的每对字节 |
noerror | 出错时不停止 |
notrunc | 不截短输出文件 |
sync | 将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。 |
例1:将本地的/dev/sda整盘备份到/dev/sdb(备份磁盘)
[[email protected] ~]#dd if=/dev/sda of=/dev/sdb
例2:将/dev/sda全盘数据备份到指定路径的file文件中(备份磁盘到文件)
[[email protected] ~]#dd if=/dev/sda of=/tmp/file
或
[[email protected] ~]#dd if=/dev/sda | gzip > /tmp/file.gz
例3:将备份文件恢复到指定磁盘
[[email protected] ~]#dd if=/tmp/file of=/dev/sdd
例4:备份与恢复MBR
备份磁盘开始的512字节大小的MBR信息到指定文件[[email protected] ~]#dd if=/dev/sdd of=/tmp/file count=1 bs=512
恢复:(将备份的MBR信息写道磁盘开始部分)[[email protected] ~]#dd if=/tmp/file of=/dev/had
例5:拷贝内存文件
[[email protected] ~]#dd if=/dev/mem of=/tmp/file bs=1m count=1024
例6:测试硬盘的读写速率
[[email protected] ~]#dd if=/dev/zero of=/tmp/file bs=100K count=1024
例7:测试硬盘的最佳块大小,1K 4K 8 K 16K
[[email protected] ~]#dd if=/dev/zero of=/tmp/file bs=1024 count=1000000 [[email protected] ~]#dd if=/dev/zero of=/tmp/file bs=4096 count=250000 [[email protected] ~]#dd if=/dev/zero of=/tmp/file bs=8192 count=125000
例8:大写转换此文件
[[email protected] ~]#dd if=/tmp/file of=/tmp/file1 conv=ucase
五.cpio备份命令
cpio是用来建立,还原备份档案的工具程序,它可以加入,解开cpio,img或tra备份档内的文件
常见的操作模式:
1).备份: cpio -ocvB > file
2).还原: cpio -ivcdu > file
3).查看: cpio -ivct > file
-o | 拷贝文件到某个文件或者设备 |
---|---|
-c | 存储方式 |
-v | 显示存储过程 |
-B | 将输入/输出的区块大小改成 5210 Bytes |
-i | 从某个文件或者设备拷贝出 |
-d | 自动创建目录 |
-u | 自动将新文件覆盖旧文件 |
-t | 查看文件或者设备中的内容 |
例1:将所有系统上的资料统统写入磁带机内
[[email protected] ~]# find / -print | coip -covb>dev/st0