Linux文件与文件系统的压缩与打包

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

Linux文件与文件系统的压缩与打包

注意:压缩的时候,会将源文件整个替换成压缩文件,源文件就不在了。解压缩也是同个道理。避免这种情况可以使用‘-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都是只能针对单一一个文件进行压缩,不能对目录进行压缩如下图所示:

Linux文件与文件系统的压缩与打包
会提示输入的并不是一个文件,所以需要先打包,再压缩

命令格式

# 打包与压缩
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:保留备份数据的原本权限和属性(常用于备份重要的配置文件)

Linux文件与文件系统的压缩与打包
其实用法就是这样子

压缩: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  路径/待解开文件名

如下图所示:
Linux文件与文件系统的压缩与打包

  • 不压缩某个文件
    使用命令
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