Linux文件与文件系统的压缩与打包
Linux系统常见的压缩命令
*.Z:compress程序压缩的文件
*.gz:gzip程序压缩的文件
*.bz2:bzip2程序压缩的文件
*.tar:tar程序打包的数据,并没有压缩过
*.tar.gz:tar程序打包的文件,其中经过gzip的压缩
*.tar.bz2:tar程序打包的文件,其中经过bzip2的压缩
常见的压缩命令就是gzip与bzip2,至于compress已经不再流行了。
从压缩效果上来看,compress < gzip < bzip2
关于gzip,zcat
命令格式
gzip [-cdtv#] filename
-c:将压缩的数据输出到屏幕上,可以通过数据流重定向来处理
-d:解压缩的参数
-t:可以用来检验一个压缩文件的一致性,看看文件有无错误
-v:可以显示出源文件/压缩文件的压缩比等信息
-k:保留源文件
-#:压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好。默认是-6
示例
# 新建了一个testfile的文档
# 压缩命令
gzip -v testfile.txt
# 查看压缩里面的内容
zcat testfile.txt.gz
# 解压缩
gzip -d testfile.txt.gz
注意:压缩的时候,会将源文件整个替换成压缩文件,源文件就不在了。解压缩也是同个道理。避免这种情况可以使用‘-k’的选项,或者使用重定向。
gzip -k file.txt
gzip -9 -c file.txt > file.txt.gz
其中-9表示压缩等级,而-c表示重定向,’>'配合重定向
关于bzip2,bzcat
其实bzip2的压缩命令和gzip是几乎一样的,但是效果要优于gzip
命令格式
bzip2 [-cdkzv#] filename
bzcat filename.bz2
-c:将压缩过程中产生的数据输出到屏幕上
-d:解压缩的参数
-k:保留原文件
-z:压缩的参数
-v:显示源文件/压缩文件的压缩比
-#:与gzip同理的压缩等级
示例:
# 压缩
bzip2 -zk file.txt
# 查看压缩内容
bzcat file.txt.bz2
# 解压缩
bzip2 -d file.txt.bz2
(由于指令内容和gzip没有太大差别,所以这里就不贴图了)
打包命令tar
需要注意的是:gzip,bzip2都是只能针对单一一个文件进行压缩,不能对目录进行压缩如下图所示:
会提示输入的并不是一个文件,所以需要先打包,再压缩
命令格式
# 打包与压缩
tar [-j][-z][cv] [-f 新建的文件名] filename
# 查看文件名
tar [-j|-z][tv] [-f 新建的文件名]
# 解压缩
tar [-j|-z][xv] [-f 新建的文件名] [-C 目录]
-c:新建打包文件,可搭配-v来查看过程中被打包的文件名
-t:查看打包文件爱你的内容含有哪些文件名,重点在看文件名
-x:解打包或解压缩,可以搭配-C在特定的目录中解开
-j:通过bzip2的支持进行压缩/解压缩(此时文件名后缀最好是 .tar.bz2)
-z:通过gzip的支持进行压缩/解压缩(此时文件名后缀最好是 .tar.gz)
-v:在压缩/解压缩的过程中,将正在处理的文件名显示出来
-f filename:-f 后面要接被处理的文件名,建议-f 单独写成一个参数
-C 目录:这个参数在解压缩时,指定目录进行解压缩
-P:保留备份数据的原本权限和属性(常用于备份重要的配置文件)
其实用法就是这样子
压缩:tar -jcv -f filename.tar.bz2 被压缩的文件或目录
查询:tar -jtv -f filename.tar.bz2
解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
关于针对单个文件的操作
- 解压缩包中的某个文件的操作
首先查看我们要的文件名是否在压缩包中
tar -jtv 压缩包名.tar.bz2 | grep '要找的文件名'
找到之后,单独解压这个文件。解压的时候还是会有目录的路径,不是说就解压出一个文件,而是解压出一个文件夹,里面只含这个文件。(当然,多层文件夹就有多层目录)
tar -jxv -f 压缩包名.tar.bz2 路径/待解开文件名
如下图所示:
- 不压缩某个文件
使用命令
tar -jcv -f 压缩包名称.tar.bz2 被压缩文件/文件夹 --exclude="路径/不参与压缩的文件"
``
### 关于基本名称
tarfile:仅打包而已
tar -cv -f file.tar
tarball(tar球)
tar -jcv -f file.tar.bz2
### 完整备份工具dump
可以用于备份整个文件系统,并且可以增量备份。具体可以查看man dump。这里不做详细介绍
### dd
dd可以读取磁盘设备的内容(几乎是直接读取扇区),然后将整个设备备份成一个文件。
命令格式:
dd if=“input file” of=“output file” bs="block size"count=“number”
-if:表示input file
-of:表示output file
-bs:表示规划的一个block大小,默认微512bytes
-count:表示多少个bs的意思
示例
查看文件系统
df -h
备份磁盘第一个扇区
dd if=/dev/hdc of=/tmp/mbr.back