压缩与解压缩命令
zip/unzip命令
功能说明
将一般的文件或者目录进行压缩或者解压,默认生成以“.zip”为后缀的压缩包。zip 命令类似于Windows 中的 winzip 压缩程序。其格式如下:
zip [选项] 压缩文件名 需要压缩的文档列表
unzip [选项] 压缩文件名
zip 命令的选项及其说明如表所示。
zip命令的选项及其说明
选 项 |
含 义 |
-r |
递归压缩,将指定目录下的所有文件以及子目录全部压缩 |
-d |
从压缩文件内删除指定的文件 |
-i “文件列表” |
只压缩文件列表中的文件 |
-x “文件列表” |
压缩时排除文件列表中指定的文件 |
-u |
更新文件到压缩文件中 |
-m |
将文件加入压缩文件压缩后,删除原始文件,即把文件移到压缩文件中 |
-F |
尝试修复损坏的压缩文件 |
-T |
检查压缩文件内的每个文件是否正确无误 |
- 压缩级别 |
压缩级别是一个 1~9 的数字 |
unzip 命令的选项及其说明如表所示。
unzip命令的选项及其说明
选 项 |
含 义 |
-x "文件列表" |
解压文件,但不包含文件列表中指定的文件 |
-t |
测试压缩文件有无损坏,并不解压 |
-v |
查看压缩文件的详细信息,具体包括压缩文件中包含的文件大小、文件名和压缩比等,并不解压 |
-n |
解压时不覆盖已经存在的文件 |
-o |
解压时覆盖已经存在的文件,并且不要求用户确认 |
-d 目录名 |
把压缩文件解压到指定目录下 |
举例
- 将/etc 目录下的所有文件以及目录进行压缩,设置压缩级别为最高,保存到文件/opt/etc.zip。
zip -9r /opt/etc.zip /etc
- 将/var目录中所有文件以及子目录压缩,除了“*.log”的文件,将压缩文件保存到/opt目录下。
zip –r /opt/var.zip /var –x "*.log"
- 将上面/opt/etc.zip中的etc/passwd文件从压缩包中删除。
zip /opt/etc.zip –d etc/passwd
- 修改了/etc/inittab文件,希望把更改信息更新到/opt/etc.zip包中。
zip –u /opt/etc.zip /etc/inittab
如果/etc目录下很多文件进行了修改或者增加了很多文件,就需要把/etc目录下的全部信息更新到/opt/etc.zip 文件。可以使用以下命令:
zip –u /opt/etc.zip /etc/*
或者使用
zip –ru /opt/etc.zip /etc
看出点玄机了吗<在上例中,其实“/etc/*”就代表了/etc 目录下的所有文件以及子目录,而这刚好是zip命令“-r”选项完成的功能。
- 将/opt/etc.zip 压缩文件全部解压到/etc 目录下,除了 etc/inittab 文件,并且在解压
unzip –o /opt/etc.zip –x etc/inittab –d /etc
过程中如果出现相同的文件就直接进行覆盖,不要求用户确认。可以使用以下命令:
gzip/gunzip命令
功能说明
将一般的文件进行压缩或者解压。压缩文件预设的扩展名为“.gz”,其实 gunzip 就是gzip的硬链接,因此无论是压缩或者解压都可以通过gzip来实现。
注意:gzip 只能对文件进行压缩,不能压缩目录,即使指定压缩的目录,也只能压缩目录内的所有文件。
其格式如下:
gzip [选项] 压缩(解压缩)的文档名
gzip 命令的选项及其说明如表所示。
gzip命令的选项及其说明
选 项 |
含 义 |
-d |
对压缩的文件进行解压 |
-r |
递归式压缩指定目录以及子目录下的所有文件 |
-t |
检查压缩文档的完整性 |
-v |
对于每个压缩和解压缩的文档,显示相应的文件名和压缩比 |
-l |
显示压缩文件的压缩信息,显示字段为压缩文档大小、未压缩文档大小、压缩比和未压缩文档名称 |
-num |
用指定的数字 num 配置压缩比,“-1”或“-fast”表示最低压缩比,“-9”或“-best”表示最高压缩比。系统默认压缩比为 6。 |
举例
- 首先将/etc目录下的所有文件以及子目录进行压缩,备份压缩包etc.zip到/opt目录,然后对etc.zip文件进行gzip压缩,设置gzip的压缩级别为9。
zip –r /opt/etc.zip /etc
gzip -9v /opt/etc.zip
- 查看上述etc.zip.gz文件的压缩信息。
gzip -l /opt/etc.zip.gz
- 解压上述etc.zip.gz文件到当前目录。
gzip –d /opt/etc.zip.gz
或者执行
gunzip /opt/etc.zip.gz
通过上面的示例可以知道“gzip –d”等价于“gunzip”命令。
bzip2/bunzip2命令
功能说明
对文件进行压缩与解压缩。此命令类似于“gzip/gunzip”命令,只能对文件进行压缩。对于目录只能压缩目录下的所有文件,压缩完成后,在目录下生成以“.bz2”为后缀的压缩包。bunzip2 其实是 bzip2 的符号链接,即软链接,因此压缩解压都可以通过 bzip2 实现。
其格式如下:
bzip2 [选项] 要压缩或解压的文件
bzip2命令的选项及其说明如表所示。
bzip2命令的选项及其说明
选 项 |
含 义 |
-d |
执行解压缩,此时选项后面跟要解压缩的文件 |
-v |
压缩或解压文件时,显示详细信息 |
-k |
bzip2 在压缩或解压缩后,会删除原始的文件,若要保留原始文件,可使用此选项 |
-f |
bzip2 在压缩或解压缩时,若输出文件与现有文件同名,预设不会覆盖现有文件。若要覆盖,就要使用此选项 |
-t |
测试“.bz2”压缩文件的完整性 |
- 压缩级别 |
压缩级别可以从 1~9 中选取,数字越大,压缩率越高 |
举例
将/opt 目录下的 etc.zip、var.zip 和 backup.zip 进行压缩,设置压缩率为最高,同时在压缩完毕后不删除原始文件,显示压缩过程的详细信息。
bzip2 -9vk /opt/etc.zip /opt/var.zip /opt/backup.zip
压缩完毕后,在/opt下就会生成相应的etc.zip.bz2、var.zip.bz2和backup.zip.bz2 文件。
tar命令
功能说明
tar是Linux下经常使用的归档工具,是对文件或者目录进行打包归档,归成一个文件, 但是并不进行压缩。其格式如下:
tar [主选项+辅助选项] 文件或者目录
tar 命令的选项很多,这里列出一些经常用到的主选项,如表所示。
tar命令的主选项及其说明
主选项 |
含 义 |
-c |
创建新的文件 |
-r |
把要归档的文件追加到档案文件的末尾 |
-t |
列出档案文件中已经归档的文件列表 |
-x |
从打包的档案文件中还原出文件 |
-u |
更新档案文件,用新的文件替换档案中的原始文件 |
辅助选项的详细信息如表所示。
tar命令的辅助选项及其说明
辅助选项 |
含 义 |
-z |
调用 gzip 命令在文件打包的过程中进行压缩/解压文件 |
-w |
在还原文件时,把所有文件的修改时间设定为现在时间 |
-j |
调用 bzip2 命令在文件打包的过程中进行压缩/解压文件 |
-Z |
调用 compress 命令过滤档案 |
-f |
“-f”选项后面紧跟档案文件的存储设备,默认是磁盘,需要指定档案文 件名;如果是磁带,只需指定磁带设备名即可。注意,在“-f”选项之 后不能再跟任何其他选项,也就是说“-f”必须是 tar 命令的最后一个选 项 |
-v |
指定在创建归档文件过程中,显示各个归档文件的名称 |
-p |
在文件归档的过程中,保持文件的属性不发生变化 |
-N “yyyy/mm/dd” |
在指定日期之后的文件才会被打包到档案文件中 |
--exclude file |
在打包过程中,不将指定 file 文件打包 |
举例
(1)将/etc 目录下的所有文件打包,并显示打包的详细文件,设置打包文件名为 etc.tar,同时保存文件到/opt目录下。
tar -cvf /opt/etc.tar /etc
这里的档案名“etc.tar”名字是我们自己随便取的,Linux上利用tar 命令打包出来的档案文件我们一般用.tar作为标识。
(2)将/etc目录下的所有文件打包并压缩,然后显示打包的详细文件,设置打包文件名为
etc.tar.gz,同时保存文件到/opt目录下。
tar -zcvf /opt/etc.tar.gz /etc
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压缩包的内容。
tar -ztvf /opt/etc.tar.gz
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下。
cd /usr/local/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目录下,并保存每个文件的权限。
tar -zcvpf /opt/etc.tar.gz /etc
(6)在/opt目录下,仅解开/opt/etc.tar.gz压缩文件中的/etc/inittab文件。
cd /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以后的文件。
tar –N “2008/7/21” –zcvf log.tar.gz /var/log
pwd
ls
log.tar.gz
(8)打包备份/home目录和/etc目录,但是不备份/home下的ixdba目录。
tar –exclude /home/ixdba -zcvf myfile.tar.gz /home/* /etc
(9)将/etc目录打包压缩后直接解压到/opt 目录下,而不生成打包的档案文件。
cd /opt
tar –zcvf - /etc | tar –zxvf –
在上面的命令中,紧跟在“f”后面的“-”是将创建的档案文件输出到标准输出上,“|”在Linux下表示管道符,命令最后的“-”表示将 tar 命令通过管道传入的档案文件作为需要解压的数据来源。
dd命令
功能说明
dd命令用来转换或拷贝文件,同时可以对设备进行备份。其格式如下:
dd if="input_file" of="output_file" bs="block_size" count="number"
dd命令的选项及其说明如下。
- if:就是输入的文件,可以是设备,例如磁盘某分区或者整个磁盘。
- of:就是输出文件,也可以是输出设备,例如磁盘、磁带等。
- bs:指定一个block的大小,如果没有指定,默认为512bytes。
- count:就是“bs”的数量。
举例
(1)将/etc/inittab文件备份到/opt/inittab.bak中。
dd if=/etc/inittab of=/opt/inittab.bak
3+1 records in
3+1 records out
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 bytes。由于没有指定“bs”大小,因此默认为 512 bytes 为一个单位块,刚好是上面的“3+1”。3 表示有 3 个完整的 512 bytes的块,而“1”表示未满 512 bytes的那个块。
(2)将/dev/sda2整个分区进行备份,保存备份文件到/opt目录。
dd if=/dev/sda2 of=/opt/sda2.back
这里是将磁盘某个分区的数据全部备份,dd命令还能够备份整个磁盘的数据,这里的备份输出路径一定不能是“/dev/sda2“所在分区,否则怎么都备份不完的。
(3)将上面例子中的备份包/opt/sda2.back恢复到相应的分区,使用以下命令:
dd if=/opt/sda2.back of=/dev/sda2
注意:在恢复目标分区时,一定要先卸载目标分区,待恢复完成,进行挂载。
还需要注意的是,备份的分区最好和恢复的分区一致,例如本例中“/opt/sda6.back” 文件是对“/dev/sda2”分区的备份,那么恢复的时候最好将“/opt/sda6.back”文件恢复到“/dev/sda2”分区下,或者恢复到大小与“/dev/sda2”一致的分区下。因为恢复的目 标分区如果大于备份时的分区,将浪费空间;相反,若恢复目标分区小于备份的分区,就将在恢复的时候提示空间不足。
cpio命令
功能说明
cpio 命令是通过重定向的方式将文件进行打包备份、还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。其格式如下:
cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
cpio命令的选项及其说明如表所示。
cpio命令的选项及其说明
选 项 |
含 义 |
-o |
将文件拷贝打包成文件或者将文件输出到设备上 |
-i |
将打包文件解压或者将设备上的备份还原到系统 |
-t |
查看 cpio 打包的文件内容或者输出到设备上的文件内容 |
-v |
显示打包过程中的文件名称 |
-d |
在 cpio 还原文件的过程中,自动建立相应的目录 |
-c |
一种较新的存储方式 |
-B |
让默认的 Blocks 可以增大到 5120bytes,默认 Blocks 为 512bytes,这样做的好处是可以加快存取速度 |
举例
(1)将/etc下的所有普通文件都备份到/opt/etc.cpio。
find /etc –type f | cpio –ocvB >/opt/etc.cpio
(2)将系统上所有资料备份到磁带机内。
find / -print | cpio -covB > /dev/st0
这里的“/dev/st0”是磁带的设备名,代表 SCSI磁带机。
(3)查看上例磁带机上备份的文件。
cpio -icdvt < /dev/st0
有时可能因为备份的文件过多,一个屏幕无法显示完毕,此时我们利用下面命令,让磁带机的文件信息输出到文件。
cpio -icdvt < /dev/st0 > /tmp/st_content
(4)将示例(1)中的备份包还原到相应的位置,如果有相同文件就进行覆盖。
cpio –icduv < /opt/etc.cpio
注意:cpio恢复的路径,如果cpio在打包备份的时候用的是绝对路径,那么在恢复的时候会自动恢复到这些绝对路径下,本例就会将备份文件全部还原到/etc路径下对应的目录中。同理,如果在打包备份时用的是相对路径,那么还原时也将恢复到相对路径下。
通过上面的示例可以看出,cpio 无法直接读取文件,它需要每个文件或者目录的完整路径名才能识别读取,而 find 命令的输出刚好做到了这点,因此 cpio 命令一般和 find 命令配合使用。其实,上面的示例我们已经看到了它们的组合用法。