Linux 文件, 档案 压缩与打包

常见的压缩指令

  为什么压缩文件这出现了扩展名? 虽然linux 系统中文件名与文件属性没有直接关系 ( 因为是分开存储的 ) , 但是由于linux中压缩命令很多, 之间存在着不能互相使用的情况, 即有可能一种压缩名命令对应一种压缩文件, 为了方便人类记忆, 所以才提供扩展名. 这样就能知道哪种扩展名的压缩文件对应哪个压缩 / 解压缩命令 .

  *.Z              compress 程序压缩档案    ( compress 不流行了, 老了 ) , gzip 可以解开这个档案

  *.gz            gzip 程序压缩档案

  *.bz2         bzip2 程序压缩档案

  *.tar           tar 程序打包数据, 并没有压缩过.

  *.tar.gz      tar 程序打包数据, 经过gzip 压缩

  *.tar.bz2   tar 程序打包数据, 经过bzip2压缩

  gzip , bzip2 比较流行.

 
gzip 可以说是应用度最广的压缩指令

gzip [-cdtv#] 档名  (  zcat 档名.gz , 解压缩 )

-c : 将压缩的数据输出到屏幕上,可透过数据流重导向来处理

-d : 解压缩的参数

-t : 可以用来检验一个压缩文件的一致性,看看档案有无错误

-v : 可以显示出原档案、压缩文件案的压缩比等信息

-# : 压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好,预设是 -6

gzip 压缩的文件,可以被WINDOWS解压缩

gzip -v abc.txt , 操作的结果是,会删除 abc.txt 生成 abc.txt.gz

zcat 档名.gz (查看内容 ) 

gzip -v a.txt 就会生成一个 a.txt.gz 的压缩文件,同时 a.txt 就没有了。 zcat a.txt.gz 可以读取该压缩包的内容

gzip -d a.txt.gz 会将刚刚压缩的内容解压缩,生成 a.txt文件,同时 a.txt.gz 没有了

 

bzip2   bzcat 档名.bz2

bzip2 就是为了取代 gzip的,更好一点

bzip2 [-cdkzv#] 档名 ( bzip2 与 gzip 用法基本相同 )

-c : 将压缩的数据输出到屏幕上,可透过数据流重导向来处理

-d : 解压缩的参数

-k : 保留源文件,而不会伸出原始档案

-z : 压缩的参数

-v : 可以显示出原档案、压缩文件案的压缩比等信息

-# : 压缩等级,-1最快,但是压缩比最差,-9最慢,但是压缩比最好,预设是 -6

 

bzcat a.txt.bz2 可以查看压缩文件的内容。

bzip2 -k a.txt 压缩完后扩展名是 .bz2 并且保留了原文件

 

打包命令 tar

虽然gzip 与 bzip2 也能够针对目录来进行压缩,不过,这两个指令对目录的压缩是 将目录内的所有档案‘分别’进行压缩的动作,而不像在windows系统,可以使用winRAR来讲好多数据压缩成一个档案。而tar 就可以实现将多个目录或档案打包成一个大档案,同时可以对该大档案进行压缩。

-c :建立打包档案

-t :查看打包档案的内容包含哪些档名

-x:解打包和解压缩

-j : 通过bzip2 进行压缩

-z : 通过 gzip进行压缩

-v :在压缩/解压缩过程中,将正在处理的文件名显示出来

-f filename : 要处理的档名

-C 目录:在特定目录解压缩

-p : 保留备份的数据原本的权限和属性

-P: 保留绝对路径

--exclude=FILE : 在压缩过程中,不将该FILE打包 

好的方式 以下是打包并且压缩

压缩  : tar -jcv -f filename.tar.bz2 要被压缩的档案或目录名称

查询 : tar -jtv -f filename.tar.bz2

解压缩 : tar -jxv filename.tar.bz2 -C 欲解压缩的目录

 

tar -jcv -f ttt.tar.bz2 linux_practice  ( 打包+压缩 )

tar -jtv -f ttt.tar.bz2  ( 读 )

tar -jxv -f ttt.tar.bz2 -C c_practice ( 解压缩 )

单个档案

tar -jtv -f ttt.tar.bz2 | grep test1 ( 只读  test1 这个档案 )

tar -jxv -f ttt.tar.bz2 linux/test1 ( 在原来压缩文件的目录上,解压一个档案  tes1)会在指定路径,比如说本文件夹内,创建一个 linux/test1 , 也就是说,会将目录一起创建

 

打包某目录,但是不包含该目录下的某些档案之做法

tar -jcv -f ccc.tar.bz2 --exclude=Makefile ( 或者等于某个文件夹比如 script,但是这要注意,是直接写档名或者文件夹名,不需要指明路径 )

 

仅比某一时刻新的档案,打包

tar -jcv -f /root/etc.newer.then.passwd.tar.bz2 --newer -mtime="2012/09/29" /etc/*

有了 tar 以后就方便多了, 举例: 备份 /tmp 文件夹内容

首先, 创建一个存放备份的文件夹 , cd / , mkdir backups, chmod 700 backups

然后, 备份, tar -cvz -f /backups/backup-tmp.tar.gz /tmp, 就可以了

将多个文件同时打包时,文件之间用空格分开(档案或目录), 不需要逗号, 例如:

tar -zcv -f all.tar.gz aa aa.tar.bz2 aa.tar.gz oo tar_test/

                                                                   (文件夹)

 

dump 完整备份工具

支持差异备份

dump 支持整个文件系统或单一个别目录的备份,但是主要还是整个文件系统的备份。

dump [-Suvj][-level][-f 备份档] 待备份资料

dump -W ( 查询在 /etc/fstab 里边的具有 dump设定的 partition 是否备份过)

-S:仅列出后面的待备份数据需要多少磁盘空间才能备份完毕

-u:将这次 dump 的事件记录到 /etc/dumpdates档案中

-v:将dump档案过程显示出来

-j:加入bzip2的支持,将数据进行压缩,默认bzip2的压缩等级是2

-level:等级,从0 ~9 共十个等级

-f:有点类似 tar,后面接缠身的档案,也可以是如 /dev/st0装置文件名

-W:列出在 /etc/fstab里边的具有 dump 设定的partition是否有备份过

dump -S /dev/sda1 测试一下需要多少空间 6694872064 单位是 byte , 需要600M+ 

dump -0u -f /backups/dump-back.dump /boot

dump -0j -f /tmp/dump-back-ttt.bz2 /ttt ( 因为使用了参数 j , 所以文件名要使用 .bz2)

restore 回复系统 ( 恢复 dump 备份的内容 )

restore -t [-f dumpfile] [-h] 查看 dump档案

restore -C [-f dumpfile] [-D 挂载点] 比较 dump与实际档案

restore -i [-f dumpfile] 进入互动模式

restore -r [-f dumpfile] 还原整个文件系统

-h: 查看完整备份数据中的 inode 与文件系统的 laebl等信息

-f : 后面就解你要处理的那个 dump档案

-D : 与 -C 进行搭配,可以查出后面接的挂载点与 dump内有不同的档案

restore -t -f /root/boot.dump

restore -C -f /root/boot.dump

光盘写入

主要是建立 ISO 文件,即磁盘镜像

首先将所需要备份的数据建成为一个映像档,利用 mkisofs 指令

mkisofs [-o 映像档案 ] [-rv] [-m file] 待备份文件 [-V vol] -graft-point isodir=systemdir

-o 后面接你想要产生的那个映像档档名

-r 透过 Rock Riddge 产生较多信息

-v 显示建立 ISO 档案过程

-m file: -m( exclude 一个意思)

-V vol 建立 Volume

-graft-point: 转嫁或移植

mkisofs -r -v -o /tmp/aa.img /tmp/tt /tmp/dd ( 注意以上是将 tmp目录下的 tt 和 dd 两个目录做成镜像文件( 要输入全路径), 保存成 aa.img )

然后将该映像文件刻录至光盘或DVD中,利用 cdrecord指令

dd 备份 ( 可以制作大的档案, 常用 )

dd if="input_file" of="output_file" bs="block_size" count="number"

if : 就是要备份的内容

of : 就是生成的备份

bs: 规划的一个block的大小。默认是512(一个sector 的大小 )

count : 多少个 bs的意思。

dd if=/etc/passwd of=/tmp/passwd.back bs=512 count=1

创建100M的空文件

dd if=/dev/zero of=hello.txt bs=100M count=1

dd if=/dev/zero of=hello.txt bs=100M count=2 ( 这时候,生成的 hello.txt 文件大小就是 200M, 因为count = 2 )

/dev/null 无底洞,通吃

/dev/zero 输入设备,用来初始化文件 ( 无穷的写入0)

 

cpio 备份 cpio 必须搭配 find 使用

cpio 可以备份任何东西 cpio 有个问题,就是不会主动去找档案来备份,所以要搭配 find 使用

cpio -ovcB > [ file | device] 备份

cpio -ivcdu < [ file | device] 还原

cpio -ivct < [ file | device ] 查看

-o : 将数据copy输出到档案或装置上

-B : 预设 512 bytes , 可以增到到 5120 bytes

-i : 将数据自档案或装置 copy出来

-d : 自动建立目录, 使用 cpio所备份的数据内容不见得会在同一层目录中,因此我们必须要让 cpio 在还原时可以建立新目录,此时就得要 -d

-u : 自动将较新的档案覆盖较旧的档案

-t : 需要配合 -i 使用,可以查看以 cpio建立的档案或装置内容

-v : 让存储的过程中文件名显示在屏幕上

-c : 一种较新的 portable format 方式存储

find /boot | cpio -ocvB > /tmp/boot.cpio

find / | cpio -0cvB > /dev/st0

cpio -idvc < /dev/st0

备份: find /boot | cpio -oBvc > /tmp/backup-boot.cpio

还原: cpio -ivcdu < /tmp/backup-book.cpio ( 貌似只能还原到原来目录 )

查看: cpio -ivct < /tmp/backup-boot.cpio

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值