liunx学习笔记之--档案与文件系统的压缩与打包

来源:互联网 发布:软件产品与软件服务 编辑:程序博客网 时间:2024/05/16 15:04

1        Linux常见压缩指令

1.1.       gzip, zcat

1) gzip:

减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。
语法:gzip [选项] 压缩(解压缩)的文件名
各选项的含义:
-c 将输出写到标准输出上,并保留原有文件。
-d 将压缩文件解压。
-l 对每个压缩文件,显示下列字段:
压缩文件的大小
未压缩文件的大小
压缩比
未压缩文件的名字
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 测试,检查压缩文件是否完整。
-v 对每一个压缩和解压的文件,显示文件名和压缩比。
-num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统缺省值为6。
假设一个目录/home下有文件mm.txt、sort.txt、xx.com。
例1:把/home目录下的每个文件压缩成.gz文件。
$ cd /home
$ gzip *
$ ls
m.txt.gz sort.txt.gz xx.com.gz
例2:把例1中每个压缩的文件解压,并列出详细的信息。
$ gzip -dv *
mm.txt.gz 43.1%-----replaced with mm.txt
sort.txt.gz 43.1%-----replaced with sort.txt
xx.com.gz 43.1%-----replaced with xx.com
$ ls
mm.txt sort.txt xx.com
例3:详细显示例1中每个压缩的文件的信息,并不解压。
$ gzip -l *
compressed uncompr. ratio uncompressed_name
277 445 43.1% mm.txt
278 445 43.1% sort.txt
277 445 43.1% xx.com
$ ls
mm.txt.gz sort.txt.gz xx.com.gz
例4:压缩一个tar备份文件,如usr.tar,此时压缩文件的扩展名为.tar.gz
$ gzip usr.tar
$ ls
usr.tar.gz

2) zcat:

zcat命令能够不用将.gz的压缩文件解压就能查看里面的内容。

zcat命令执行方式为:

#zcat 压缩文件名

1.2.       bzip2, bzcat

bzip2, bzcat 命令

[root@linux ~]# bzip2 [-cdz] 档名

[root@linux ~]# bzcat 档名.bz2

 

参数:

◆-c :将压缩的过程产生的资料输出到萤幕上!

◆-d :解压缩的参数

◆-z :压缩的参数

◆-# :与 gzip 同样的,都是在计算压缩比的参数, -9 最佳, -1 最快!

 

范例一:

将刚刚的 /tmp/man.config 以 bzip2 压缩

[root@linux tmp]# bzip2 -z man.config

此时 man.config 会变成 man.config.bz2 !

 

范例二:

将范例一的文件内容读出来!

[root@linux tmp]# bzcat man.config.bz2

此时萤幕上会显示 man.config.bz2 解压缩之后的文件内容!!

 

范例三:

将范例一的文件解压缩

[root@linux tmp]# bzip2 -d man.config.bz2

 

范例四:

将范例三解开的 man.config 用最佳的压缩比压缩,并保留原本的文件

[root@linux tmp]# bzip2 -9 -c man.config> man.config.bz2

2        打包指令: tar

语法:tar [主选项+辅选项]文件或者目录

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

主选项:

c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。相当于打包。

x 从档案文件中释放文件。相当于拆包。

t 列出档案文件的内容,查看已经备份了哪些文件。

特别注意,在参数的下达中, c/x/t仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。

辅助选项:

-z :是否同时具有 gzip的属性?亦即是否需要用 gzip压缩或解压?一般格式为xx.tar.gzxx. tgz

-j :是否同时具有 bzip2的属性?亦即是否需要用 bzip2压缩或解压?一般格式为xx.tar.bz2  

-v :压缩的过程中显示文件!这个常用

-f :使用档名,请留意,在 f之后要立即接档名喔!不要再加其他参数!

-p :使用原文件的原来属性(属性不会依据使用者而变)

--exclude FILE:在压缩的过程中,不要将 FILE打包!

 

范例:

范例一:将整个 /etc目录下的文件全部打包成为 /tmp/etc.tar

[root@linux ~]# tar -cvf /tmp/etc.tar/etc<==仅打包,不压缩!

[root@linux ~]# tar -zcvf/tmp/etc.tar.gz /etc<==打包后,以 gzip压缩

[root@linux ~]# tar -jcvf/tmp/etc.tar.bz2 /etc<==打包后,以 bzip2压缩

# 特别注意,在参数 f之后的文件档名是自己取的,我们习惯上都用 .tar来作为辨识。

# 如果加 z参数,则以 .tar.gz .tgz 来代表 gzip 压缩过的 tar file

# 如果加 j参数,则以 .tar.bz2来作为附档名啊~

# 上述指令在执行的时候,会显示一个警告讯息:

# tar: Removingleading `/" from member names』那是关於绝对路径的特殊设定。

 

范例二:查阅上述 /tmp/etc.tar.gz文件内有哪些文件?

[root@linux ~]# tar -ztvf/tmp/etc.tar.gz

# 由於我们使用 gzip压缩,所以要查阅该 tar file内的文件时,

# 就得要加上 z这个参数了!这很重要的!

 

范例三:将 /tmp/etc.tar.gz文件解压缩在 /usr/local/src底下

[root@linux ~]# cd /usr/local/src

[root@linux src]# tar -zxvf/tmp/etc.tar.gz

# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说

# 我先将工作目录变换到 /usr/local/src底下,并且解开 /tmp/etc.tar.gz

# 则解开的目录会在/usr/local/src/etc,另外,如果您进入 /usr/local/src/etc

# 则会发现,该目录下的文件属性与 /etc/可能会有所不同喔!

 

范例四:在 /tmp底下,我只想要将 /tmp/etc.tar.gz内的 etc/passwd解开而已

[root@linux ~]# cd /tmp

[root@linux tmp]# tar -zxvf/tmp/etc.tar.gz etc/passwd

# 我可以透过 tar -ztvf来查阅 tarfile内的文件名称,如果单只要一个文件,

# 就可以透过这个方式来下达!注意到! etc.tar.gz内的根目录 / 是被拿掉了!

 

范例五:我要备份 /home, /etc,但不要 /home/dmtsai

[root@linux ~]# tar --exclude/home/dmtsai -zcvf myfile.tar.gz /home/* /etc

 

另外:tar命令的C参数

$ tar -cvf file2.tar /home/usr2/file2
tar: Removing leading '/' from members names
home/usr2/file2
该命令可以将/home/usr2/file2文件打包到当前目录下的file2.tar中,需要注意的是:使用绝对路径标识的源文件,在用tar命令压缩后,文件名连同绝对路径(这里是home/usr2/,根目录'/'被自动去掉了)一并被压缩进来。使用tar命令解压缩后会出现以下情况:
$ tar -xvf file2.tar
$ ls
…… …… home …… ……
解压缩后的文件名不是想象中的file2,而是home/usr2/file2

$ tar -cvf file2.tar -C /home/usr2 file2
该命令中的-C dir参数,将tar的工作目录从当前目录改为/home/usr2,将file2文件(不带绝对路径)压缩到file2.tar中。注意-C dir参数的作用在于改变工作目录,其有效期为该命令中下一次-C dir参数之前
使用tar-C dir参数,同样可以做到在当前目录/home/usr1下将文件解压缩到其他目录,例如:
$ tar -xvf file2.tar -C /home/usr2
tar不用-C dir参数时是无法做到的:
$ tar -xvf file2.tar /home/usr2
tar: /tmp/file: Not found in archive
tar: Error exit delayed from previous errors

3        完整备份工具:dump, restore

dump 支持分卷和增量备份(所谓增量备份是指备份最近一次备份以来修改过的文件,也称差异备份)。restore 命令用来恢复已备份的文件,可以从备份磁带或由dump 生成的备份文件中恢复原文件。

 

dump语法如下:

 

dump [ -cu]  [-123456789]  [ -f <设备名称>]  [-T <日期>]   [ 目录或文件系统]

 

dump []-wW

 

-c : 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。

 

-0123456789:备份的层级。0为最完整备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份以来修改或新增的文件。

 

-f <设备名称>: 指定备份设备

 

-T <日期>: 指定开始备份的时间与日期

 

-u :备份完毕后,在/etc/dumpdares中记录备份的文件系统,层级,日期与时间等。

 

-t : 指定文件名,若该文件已存在备份文件中,则列出名称

 

-W :显示需要备份的文件及其最后一次备份的层级,时间 ,日期。

 

-w :与-W类似,但仅显示需要备份的文件。

 

dump命令例子:

 

将/home目录所有内容备份到/tmp/homeback.bak 文件中,备份层级为“0”并在/etc/dumpdates中记录相关信息,

 

‍dump -0u -f /tmp/homeback.bak  /home

 

将/home目录所有内容备份到/tmp/homeback.bak 文件中,备份层级为“1”(只备份上次使用层次“0”备份后发生过改变的数据)并在/etc/dumpdates中记录相关信息,

 

dump  -1u   -f   /tmp/homeback.bak  /home

 

通过dump命令的备份层级,可实现完整+增量备份  完整+差异备份,在配合crontab可以实现无人值守备份。

 

restore命令语法如下:

 

-C :使用对比模式,将备份的文件与已存在的文件相互对比。

 

-f <备份设备>:从指定的文件中读取备份数据,进行还原操作

 

-h:仅还原目录而不包括与该目录有关的所有文件。

 

-i:使用交互模式,在进行还原操作时,restors指令将依序询问用户

 

-r:进行还原操作

 

-R:全面还原文件系统是,检查应从何处开始进行。

 

-v:显示命令执行过程

 

-y不询问任何问题,一律以同意回答并继续执行指令

 

使用 restore 来执行还原

要还原使用 dump 保存的信息,可以使用 restore 命令。像 tar 一样, dump 能够列出( -t )归档文件的内容,并与当前文件作比较( -C )。使用 dump 時必须小心的地方是还原数据。有两种非常不同的还原方法,您必须使用正确的方法才能获得可预测的结果。

重建 (-r)

记住,在设计 dump 时考虑得更多的是文件系统,而不是单独的文件。因此,存在两种不同的文件还原风格。要重建一个文件系统,可使用 -r 命令行开关。设计重建的目的是为了能在空文件系统上操作,并将它还原为已保存的状态。在执行重建之前,您应该已经创建、格式化和装载(mount)了该文件系统。不应该对包含文件的文件系统执行重建。

下面是使用上面执行的转储来执行完全重建的例子。

restore -rf /dev/nst0

上面这个命令需要针对要还原的每个文件系统分别执行。

在需要的时候,可以重复这个过程来添加增量备份。

提取 (-x)

如果需要使用单独的文件而不是使用整个文件系统,您必须使用 -x 开关来提取它们。例如,要仅从我们的磁带备份中提取 /etc 目录,可使用以下命令:

restore -xf /dev/nst0 /etc

交互式还原 (-i)

restore 提供的另外一个特性是交互式模式。使用命令:

restore -if /dev/nst0

将把您置于交互式 shell 中,同时还显示了包含在该归档文件中的项。键入“help”将会显示一个命令列表。然后您就可以浏览并选择希望提取的项。务必记住,您提取的任何文件都将进入当前目录。

原创粉丝点击