文件压缩备份(命令实例)
一:命令列表
ar 建立、修改或抽取备存文件
compress/uncompress 文件压缩/解压
gzip/ gunzip 文件的压缩/解压
bzip2/ bunzip2 文件的压缩/解压
bzip2recover修复损坏的.bz2文件
zip/unzip 打包压缩文件/解压缩文件
zipinfo 显示zip压缩文件的信息
cpio 备份文件与目录
tar 把一大堆的文件和目录全部打包成一个文件
dump /restore 文件或文件系统的备份/恢复
注意:bunzip2是bzip2的一个符号连接,类比,还有zip和unzip、gzip和gunzip、compress和uncompress。
二、实例解说
名称:ar
功能:集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限。
语法:ar[-dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>][备存文件][成员文件]
参数:
-d 删除备存文件中的成员文件。
-m 变更成员文件在备存文件中的次序。
-p 显示备存文件中的成员文件内容。
-q 将文件附加在备存文件末尾端。
-r 将文件插入备存文件中。
-t 显示备存文件中所包含的文件。
-x 自备存文件中取出成员文件。
选项参数
a<成员文件> 将文件插入备存文件中指定的成员文件之后。
b<成员文件> 将文件插入备存文件中指定的成员文件之前。
c 建立备存文件。
o 保留备存文件中文件的日期。
s 若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。
S 不产生符号表。
u 只将日期较新文件插入备存文件中。
说明:(1)不能添加目录文件;(2)添加的文件必须是普通文件
范例:
#1打包多个文件
[root@localhost ~]# ar -rv one.bak/etc/passwd /etc/shadow /etc/group
#2打包以.c结尾的文件
[root@localhost ~]# ar rv two.bak *.c
#3显示打包文件的内容
[root@localhost ~]# ar t one.bak
#4删除打包文件的成员文件
[root@localhost ~]# ar d one.bak passwd
[root@localhost ~]# ar t one.bak //查看结果
#5构造可重用的库文件
[root@localhost testlib]# ar -rv lib a1 a2
#6检查示lib上的成员文件,并添加一个新的文件
[root@localhost testlib]# ar tv lib
[root@localhost testlib]# ar qv lib a3
#7在lib库中的a2文件前面插入文件a4
[root@localhost testlib]# ar -rv -b a2 liba4
#8自lib库文件中取出成员文件a1
[root@localhost testlib]# ar xv lib a1
名称:gzip
功能:压缩文件
语法:gzip [选项] 压缩(解压缩)filename
参数:
-c 将输出写到标准输出上,并保留原有文件。
-d 将压缩文件解压。
-l 显示对每个压缩文件信息
-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。
-t 测试,检查压缩文件是否完整。
-v 对每一个压缩和解压的文件,显示文件名和压缩比。
-num 用指定的数字num调整压缩的速度,系统缺省值为6。-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。
注:gzip不能压缩整个目录。压缩完文件后会产生.gz的压缩文件,并删除原始文件。
范例
[root@localhost yp]# gzip * #把当前目录下的每个文件压缩成.gz文件,不保留原文件
[root@localhost yp]# gzip -c * #把当前目录下的每个文件压缩成.gz文件,保留原文件
[root@localhost yp]# gzip -d * #把当前目录下的每个.gz文件解压,不保留压缩文件
[root@localhost dzip]# gzip -r yp #把目录yp下的每个文件压缩成.gz文件,不保留原文件
名称:gunzip
功能:解*.gz压缩文件
语法:gunzip [-acfhlLnNqrtvV][-s <压缩字尾字符串>][文件...]
或 gunzip[-acfhlLnNqrtvV][-s <压缩字尾字符串>][目录]
参数:
-a或--ascii 使用ASCII文字模式。
-c或--stdout或--to-stdout 把解压后的文件输出到标准输出设备。
-f或-force 强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-l或--list 列出压缩文件的相关信息。
-n或--no-name 解压缩时,对原来的文件名称及时间戳记,则将其忽略不予处理。
-N或--name 解压缩时,对原来的文件名称及时间戳记,则将其回存到解开的文件上。
-r或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-S<压缩字尾字符串>或--suffix<压缩字尾字符串> 更改压缩字尾字符串。
-t或--test 测试压缩文件是否正确无误。
范例:
[root@localhost yp]# gunzip -v *.gz #解压缩当前目录下所有xxx.gz文件,并显示详细过程。
名称:bzip2
功能:压缩文件
语法:bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级][要压缩的文件]
参数:
-c或--stdout 将压缩与解压缩的结果送到标准输出。
-d或--decompress 执行解压缩。
-f或--force bzip2在压缩或解压缩时,覆盖同名文件,默认不会覆盖现有的文件。
-k或--keep bzip2在压缩或解压缩后,会删除原始的文件。若要保留原始文件,请使用此参数。
-s或--small 降低程序执行时内存的使用量。
-v或--verbose 压缩或解压缩文件时,显示详细的信息。
默认bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始文件。
范例
[root@localhost dzip]# bzip2 -vks passwd #压缩passwd文件,保留原文件
[root@localhost dzip]# bzip2 -dc passwd.bz2 #压缩文件的原始内容显示到屏幕上,并不解压
名称:bunzip2
功能:解*.bz2的压缩文件
语法:bunzip2 [-fkLsvV][.bz2压缩文件]
参数:
-f或--force 解压缩时,覆盖同名文件,默认不会覆盖现有的文件。
-k或--keep 在解压缩后,预设会删除原来的压缩文件。若要保留压缩文件,请使用此参数。
-s或--small 降低程序执行时,内存的使用量。
-v或--verbose 解压缩文件时,显示详细的信息。
范例
bunzip2是bzip2的符号连接,执行bunzip2与bzip2 -d的效果相同。
#对当前目录下以.bz2结尾的文件进行解压缩,保留原压缩文件,覆盖同名文件。
[root@localhost dzip]# bunzip2 -kf *.bz2
#对当前目录下以.bz2结尾的文件进行解压缩,并删除原文件
[root@localhost dzip]# bunzip2 *.bz2
名称:bzip2recover
功能:修复损坏的.bz2文件
语法:bzip2recover [xxx.bz2]
参数:
bzip2是以区块的方式来压缩文件,每个区块视为独立的单位。因此,当某一区块损坏时,便可利用bzip2recover,试着将文件中的区块隔开来,以便解压缩正常的区块。通常只适用在压缩文件很大的情况。
范例:
[root@localhost yp]# bzip2 t3.txt #压缩文件
[root@localhost yp]# bzip2recovert3.txt.bz2 #修复文件
名称:zip
功能:压缩文件与目录(即可打包)
语法:zip [参数] [打包后的文件名] [打包的目录路径]
参数:
-F 尝试修复损坏的压缩文件
-m 将文件压缩之后,删除源文件
-n 特定字符串不压缩具有特定字尾字符串的文件
-o 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间
-q 安静模式,在压缩的时候不显示指令的执行过程
-r 将指定的目录下的所有子目录以及文件一起处理
-S 包含系统文件和隐含文件(S是大写)
-t 日期 把压缩文件的最后修改日期设为指定的日期,日期格式为mmddyyyy
范例
[root@localhost yp]# zip -r yp.zip * #把当前目录下所有文件压缩成为一个yp.zip文件
[root@localhost dzip]# zip -r yp.zipyp.conf yp #把yp.conf和目录yp压缩为一个yp.zip文件
#将/var/log这个目录下所有文件和文件夹打包到当前目录下的log.zip
[root@localhost dzip]# zip -r log.zip/var/log
名称:unzip
功能:解压zip文件
语法:unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x<文件>]
参数:
-x 文件列表, 解压缩文件,但不包括指定的file文件。
-v 查看压缩文件目录,但不解压。
-t 测试文件有无损坏,但不解压。
-d 目录, 把压缩文件解到指定目录下。
-z 只显示压缩文件的注解。
-n 不覆盖已经存在的文件。
-o 覆盖已存在的文件且不要求用户确认。
-j 不重建文档的目录结构,把所有文件解压到同一目录下。
范例:
#将压缩文件yp.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,不覆盖原文件。
[root@localhost dzip]# unzip -n yp.zip -d/tmp
[root@localhost dzip]# unzip -v yp.zip #查看压缩文件的目录,但不解压。
[root@localhost dzip]# unzip yp.zip yp.conf #只解压yp.zip中的yp.conf文件
[root@localhost dzip]# unzip -j yp.zip -d /tmp #把所有文件解压到同一目录/tmp下
[root@localhost dzip]# unzip -Z yp.zipyp.conf #显示压缩文件中指定文件的信息
名称:zipinfo
功能:显示zip压缩文件的信息
语法:zipinfo [-12hlmMstTvz][压缩文件][文件...]
参数:
-1 只列出文件名称。
-2 此参数的效果和指定"-1"参数类似,但可搭配"-h","-t"和"-z"参数使用。
-h 只列出压缩文件的文件名称。
-l 此参数的效果和指定"-m"参数类似,但会列出原始文件的大小而非每个文件的压缩率。
-m 此参数的效果和指定"-s"参数类似,但多会列出每个文件的压缩率。
-M 若信息内容超过一个画面,则采用类似more指令的方式列出信息。
-s 用类似执行"ls-l"指令的效果列出压缩文件内容。
-t 只列出压缩文件内所包含的文件数目,压缩前后的文件大小及压缩率。
-T 将压缩文件内每个文件的日期时间用年,月,日,时,分,秒的顺序列出。
-v 详细显示压缩文件内每一个文件的信息。
-x<范本样式> 不列出符合条件的文件的信息。
-z 如果压缩文件内含有注释,就将注释显示出来。
范例:
zipinfo和“unzip-Z”的功能一样
[root@localhost dzip]# zipinfo -vM yp.zip #显示压缩文件内每一个文件的信息
[root@localhost dzip]# zipinfo -x y* yp.zip #显示压缩文件中所有以y开头的文件
名称:cpio
功能:用来建立,还原备份档的工具程序,它可以加入,解开cpio或tar备份档内的文件
语法:cpio –i[bcdmrtuv] [patterns]
cpio –o [abcv]
cpio –p [adlmuv][directory]
说明:cpio 共有三种基本模式,
-o即copy-out 模式,将一组文件copy到一个文件库,
-i 即copy-in 模式,读取文件库,并将其 展开在当前目录。
-p 能从某个目录读取所有文件(包括子目录到另一个目录),且不以archive(归档)的方式存放。
参数:
-a或--reset-access-time 重新设置文件的存取时间。
-A或--append 附加到已存在的备份档中,且这个备份档必须存放在磁盘上,而不能放置于磁带机里。
-d或--make-directories 如有需要cpio会自行建立目录。
-F<备份档>或--file=<备份档> 指定备份档的名称,用来取代标准输入或输出,也能借此通过网络使用另一台主机的保存设备存取备份档。
-i或--extract 执行copy-in模式,还原备份档。
-o或--create 执行copy-out模式,建立备份档。
-O<备份档> 指定备份档的名称,用来取代标准输出,也能借此通过网络 使用另一台主机的保存设备存放备份档。
-p或--pass-through 执行copy-pass模式,略过备份步骤,直接将文件复制到目的目录。
-R<拥有者><:/.><所属群组> 在copy-in模式还原备份档,或copy-pass模式复制文件时,可指定这些备份,复制的文件的拥有者与所属群组。
范例:
#1将当前目录下的所有文件复制成backuparchive file
[root@localhost ~]# ls | cpio -o>/tmp/backup/lsroot.backup
#2复制工作目录中的所有的c程序.
[root@localhost ~]# ls *.c | cpio -o>/tmp/backup/all_c.backup
#3复制当前工作目录下的文件到/usr/tempdir目录,不生成archive file
[root@localhost ~]# ls | cpio -p/usr/tempdir
#4将上层目录的initrd文件释放到当前文件夹
[root@localhost ~]# cpio -i < ../initrd
#5仅复原*.f 文件
[root@localhost ~]# cpio –i</usr/linfs/old1 *.f
名称:tar
功能:
语法:tar [-cxtzjvfpPN] 文件与目录 ....
参数:打包、压缩文件与目录
-c :建立一个压缩文件的参数指令(create的意思);
-x :解开一个压缩文件的参数指令!
-t :查看 tarfile 里面的文件!
注意:在与下面参数混合使用中,c/x/t 仅能存在一个!不可同时存在!
-z :是否同时具有 gzip 的属性?亦即是否需要用gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用bzip2 压缩?
-v :压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-p :使用原文件的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中!
--exclude FILE:在压缩的过程中,不要将FILE 打包!
范例:
#1将整个 /etc 目录下的文件全部打包成为/tmp/etc.tar
[root@localhost ~]# tar -cvf/root/dzip/etc.tar /etc #仅打包成etc.tar文件,不压缩
[root@localhost ~]# tar -zcvf/root/dzip/etc.tar.gz /etc #先打包,后z参数是以 gzip 压缩
[root@localhost ~]# tar -jcvf/root/dzip/etc.tar.bz2 /etc #先打包,后j参数是以 bzip2 压缩
#2查阅上述 /root/dzip/etc.tar.gz文件内有哪些文件
[root@localhost ~]# tar -ztvfdzip/etc.tar.gz #*.gz结尾,则使用z参数
[root@localhost ~]# tar -jtvfdzip/etc.tar.bz2 #*.bz2结尾,则使用j参数
#3将 /root/dzip/etc.tar.gz文件解压缩在 /usr/local/dzip_bak目录下
[root@localhost dzip_bak]# cd/usr/local/dzip_bak/
[root@localhost dzip_bak]# tar -zxvf/root/dzip/etc.tar.gz #解压*.gz压缩文件
#4将/root/dzip/etc.tar.gz内的 etc/passwd 解开
[root@localhost dzip_bak]#tar –zxvf/root/dzip/etc.tar.gz etc/passwd
注意:在 etc.tar.gz 内的根目录 / 是被拿掉了
#5将 /etc/ 内的所有文件备份下来,并且保存其权限。
[root@localhost dzip]# tar -zcvpf/root/dzip/etc_01.tar.gz /etc #关键加参数p
#6在 /home 当中,比 2015/12/26新的文件才备份
[root@localhost dzip]# tar -N"2015/12/26" -zcvf home.tar.gz /home
#7备份 /home, /etc ,但不要/home/dmtsai
[root@localhost dzip]#tar --exclude/home/dmtsai -zcvf myfile.tar.gz /home/* /etc
#8将 /etc/ 打包后直接解开在 /usr/local/dzip_bak/目录下,而不产生打包文件
[root@localhost ~]# cd /usr/local/dzip_bak/
[root@localhost dzip_bak]# tar -cvf - /etc|tar -xvf -
名称:dump
功能:将目录或整个文件系统备份至指定的设备,或备份成一个大文件。
语法:dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d<密度>][-f <设备名称>][-h <层级>][-s <磁带长度>][-T <日期>] 待备份的目录或文件系统
或dump [-wW]
参数:
-0123456789 备份的层级。
-b<区块大小> 指定区块的大小,单位为KB。
-B<区块数目> 指定备份卷册的区块数目。
-c 修改备份磁带预设的密度与容量。
-d<密度> 设置磁带的密度。单位为BPI。
-f<设备名称> 指定备份设备。
-h<层级> 当备份层级等于或大雨指定的层级时,将不备份用户标示为"nodump"的文件。
-n 当备份工作需要管理员介入时,向所有"operator"群组中的使用者发出通知。
-s<磁带长度> 备份磁带的长度,单位为英尺。
-T<日期> 指定开始备份的时间与日期。
-u 备份完毕后,在/etc/dumpdates中记录备份的文件系统,层级,日期与时间等。
-w 与-W类似,但仅显示需要备份的文件。
-W 显示需要备份的文件及其最后一次备份的层级,时间与日期。
范例:
#1先测试一下,如果要备份此文件系统,需多少容量,然后完整备份/boot为 /root/boot.dump ,同时升级记录档。
[root@localhost ~]# df –h
[root@localhost ~]# dump -0u -f /root/boot.dump /boot
#2查看有哪些系统文件被dump记录
[root@localhost dzip_bak]# dump -W
#3、用 dump 备份非文件系统,亦即单一目录的方法,将 /etc 整个目录透过 dump 进行备份,且含压缩功能。
[root@localhost ~]# dump -0j -f/root/etc.dump.bz2 /etc
名称:restore
功能:
语法:
参数:
-t :此模式用在察看 dump起来的备份档中含有什么重要数据!类似 tar -t 功能;
-C :此模式可以将 dump 内的数据拿出来跟实际的文件系统做比较,
最终会列出在 dump 文件内有记录的,且目前文件系统不一样的文件;
-i :进入互动模式,可以仅还原部分文件,用在 dump 目录时的还原!
-r :将整个filesystem 还原的一种模式,用在还原针对文件系统的 dump 备份;
其他较常用到的选项功能:
-h :察看完整备份数据中的inode 与文件系统 label 等资讯
-f :后面就接你要处理的那个dump 文件罗!
-D :与 -C 进行搭配,可以查出后面接的挂载点与 dump 内有不同的文件!
参数常用模式:
restore -t [-f dumpfile] [-h] <==用来察看 dump 档
restore -C [-f dumpfile] [-D 挂载点] <==比较dump与实际文件
restore -i [-f dumpfile] <==进入互动模式
restore -r [-f dumpfile] <==还原整个文件系统
范例:
#1用 restore 观察 dump 后的备份数据内容
[root@localhost dzip_bak]# restore -t -f/root/boot.dump
#2看原文件系统与备份文件之间的差异!,查看boot目录现在与当时备份是有哪些文件不同。
[root@localhost boot]# restore -C -f/root/boot.dump
#3仅还原部分文件的 restore 互动模式
restore -i -f /root/etc.dump