免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 886 | 回复: 0
打印 上一主题 下一主题

Linux unix 的压缩和解压 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-30 10:24 |只看该作者 |倒序浏览

Linux unix 的压缩和解压
磁针石
联系方式:
QQ:37391319 gmail and gtalk: xurongzhong@gmail.com

 TOC \o "1-5" \h \z \u 参考资料...  PAGEREF _Toc197658221 \h 1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320031000000
gzip.  PAGEREF _Toc197658222 \h 1
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320032000000
基本的压缩解压...  PAGEREF _Toc197658223 \h 2
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320033000000
同时压缩解压多个文件...  PAGEREF _Toc197658224 \h 2
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320034000000
压缩效率...  PAGEREF _Toc197658225 \h 3
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320035000000
其他重要参数...  PAGEREF _Toc197658226 \h 4
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320036000000
gzip与输入输出...  PAGEREF _Toc197658227 \h 4
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320037000000
tar  PAGEREF
_Toc197658228 \h 5
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320038000000
tar 与gzip and bzip2配合使用...  PAGEREF _Toc197658229 \h 6
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200320039000000
tar 技巧...  PAGEREF _Toc197658230 \h 7
08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F0054006F0063003100390037003600350038003200330030000000

参考资料
*《OReilly.Running.Linux.5th.Edition.Dec.2005》之
12.5. Archive and Compression Utilities
*《鸟哥的 Linux 私房菜》之 “
档案的压缩与打包


gzip
gzip, gunzip, zcat - compress or expand
files

       Unix
一般使用compress和uncompress压缩解压文件。不过它们效率较低,也不允许采用其他算法。bzip2产生得比gzip晚,不过比它高10-20%的效率。压缩时间更长。Gzip可以解压compress的文件(*.Z),bzip2则不可以。Gzip和bzip2互相也不兼容。Gzip的旧版本使用.z后缀。bzip2和gzip的命令有很多类似的地方,不另外介绍。

常用参数:
-c  :将压缩的数据输出到屏幕上,可透过数据流重导向来处理;
-d  :解压缩的参数;
-t  :可以用来检验一个压缩档的一致性~看看档案有无错误;
-#  :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!预设是
-6 ~

基本的压缩解压
# ls -lh
total 1012K
-rw-r--r--  1 root root 1001K Apr 30 09:41 csc_basic.log
# gzip csc_basic.log
# ls -lh
total 48K
-rw-r--r--  1 root root 41K Apr 30 09:41 csc_basic.log.gz
可以见压缩后,原文件被删除,自动为压缩文件添加gz的后缀。
# gunzip csc_basic.log.gz、
# ls -lh
total 1012K
-rw-r--r--  1 root root 1001K Apr 30 09:41 csc_basic.log

同时压缩解压多个文件
可以使用通配符或者直接接多个文件名。

# ll -lh
total 1.1M
-rw-r--r--  1 root root 1001K Apr 30 09:41 csc_basic.log
-rw-------  1 root root
7.6K Apr 30 09:47 maillog
-rw-------  1 root root  
16K Apr 30 09:47 maillog.1
-rw-------  1 root root  
16K Apr 30 09:47 maillog.2
-rw-------  1 root root  
16K Apr 30 09:47 maillog.3
-rw-------  1 root root  
16K Apr 30 09:47 maillog.4
[root@css09 tmp]# gzip *
[root@css09 tmp]# ls -lh
total 88K
-rw-r--r--  1 root root
41K Apr 30 09:41 csc_basic.log.gz
-rw-------  1 root root 2.2K Apr 30 09:47 maillog.1.gz
-rw-------  1 root root 2.2K Apr 30 09:47 maillog.2.gz
-rw-------  1 root root 2.1K Apr 30 09:47 maillog.3.gz
-rw-------  1 root root 2.1K Apr 30 09:47 maillog.4.gz
-rw-------  1 root root 1.4K Apr 30 09:47 maillog.gz
[root@css09 tmp]# gunzip *
[root@css09 tmp]# ls -lh
total 1.1M
-rw-r--r--  1 root root 1001K Apr 30 09:41 csc_basic.log
-rw-------  1 root root
7.6K Apr 30 09:47 maillog
-rw-------  1 root root  
16K Apr 30 09:47 maillog.1
-rw-------  1 root root  
16K Apr 30 09:47 maillog.2
-rw-------  1 root root  
16K Apr 30 09:47 maillog.3
-rw-------  1 root root  
16K Apr 30 09:47 maillog.4
解压也可以使用gzip –d
压缩效率
# gzip -l *
        
compressed      
uncompressed  ratio
uncompressed_name
              41766             1024052  95.9% csc_basic.log
               2171               15737
86.4% maillog.1
               2155               15717  86.5% maillog.2
               2123               15733  86.7% maillog.3
               2065               15733  87.1% maillog.4
               1395                7775  82.4% maillog
              51675             1094747  95.3% (totals)

    rutabaga$ gzip
-l garbage.txt.gz

    compressed  uncompr. ratio uncompressed_name
       103115   
312996  67.0% garbage.txt
压缩效率可以使用-1到-9,前者最快,后者最慢,默认为-6
其他重要参数
-N 保存原文件名
    rutabaga$ gzip
garbage.txt

rutabaga$ mv garbage.txt.gz rubbish.txt.gz
    rutabaga$ gunzip
-N rubbish.txt.gz

    rutabaga$ ls
-l garbage.txt

    -rw-r--r--   1 mdw     
hack       312996 Nov 17 21:44
garbage.txt
如果不加-N,解压出来的文件将是rubbish.txt. 该参数适合文件名有长度限制的系统。


gzip与输入输出

[root@css09 tmp]# ll
total 1016
-rw-r--r--
1 root root 1024052 Apr 30 09:41 csc_basic.log
-rw-r--r--
1 root root       0 Apr 30 10:06
mysqlaccess.log
[root@css09 tmp]# ls -laR  | gzip > filelist.gz
[root@css09 tmp]# ls
csc_basic.log  filelist.gz
mysqlaccess.log
[root@css09 tmp]# zcat filelist.gz
.:
total 1036
drwxr-xr-x  
2 root root    4096 Apr 30 10:07 .
drwxr-x---
20 root root    4096 Apr 30 09:41
..
-rw-r--r--  
1 root root 1024052 Apr 30 09:41 csc_basic.log
-rw-r--r--  
1 root root       0 Apr 30 10:07
filelist.gz
-rw-r--r--  
1 root root       0 Apr 30 10:06
mysqlaccess.log
[root@css09 tmp]#

zcat filelist.gz 等同于gunzip -c filelist.gz。类似的命令还有zless,zmore,bzcat,bzless,
bzmore等。

用最佳的压缩比压缩,并保留原本的档案
[root@linux tmp]# gzip -9 -c man.config
> man.config.gz


tar
Tar是tape archive的缩写,原本是为磁带存档设计的。
语法如下:tar functionoptions
files...



c    to create a new
archive
x    to extract
files from an archive
t    to list the
contents of an archive
r    to append files
to the end of an archive
u    to update files
that are newer than those in the archive
d    to compare
files in the archive to those in the filesystem
最常用的是:c, x,
and t
最常用的options为:
k
解压的时候保留原文件。
f filename
      使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
   例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
   『 tar -zcvPf tfile sfile』才对喔!
z
是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩
j
是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩
v
压缩的过程中显示档案!这个常用,但不建议用在背景执行过程!

-p  :使用原档案的原来属性(属性不会依据使用者而变)
-P  :可以使用绝对路径来压缩!
-N  :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!

比如我们有这样一个目录:
# ls -lh temp/
total 28K
-rw-r--r--  1 root root  314 May
4 09:22 mtab
-rw-r--r--  1 root root 2.0K
May  4 09:22 mtools.conf
-rw-r--r--  1 root root 5.0K
May  4 09:22 my.cnf

       使用以下都可以进行压缩。
# tar cf temp.tar temp
# tar -cf temp.tar temp
杠的意义并不大。一些版本中,第一个参数字符必须为功能参数。记得要添加压缩文件名,否则会覆盖第一个要压缩的文件。多次使用v参数可以获取更详细的信息,比如:tar cvvf mt.tar mt
tar默认使用相对路径,P参数可以使之使用绝对路径。
解压之前最好先查看:tar tvf mt.tar
# tar tvf temp.tar
drwxr-xr-x root/root         0
2008-05-04 09:23:55 temp/
-rw-r--r-- root/root       314
2008-05-04 09:22:25 temp/mtab
-rw-r--r-- root/root      1983
2008-05-04 09:22:25 temp/mtools.conf
-rw-r--r-- root/root      5091
2008-05-04 09:22:25 temp/my.cnf

解压单个文件:tar xvf tarfile
files
, 比如
# tar xvf
temp.tar  temp/my.cnf
temp/my.cnf

将 /etc/ 内的所有档案备份下来,并且保存其权限!
[root@linux ~]# tar -zcvpf /tmp/etc.tar.gz /etc

在 /home 当中,比 2005/06/01
新的档案才备份
[root@linux ~]# tar -N '2005/06/01'
-zcvf home.tar.gz /home

我要备份 /home, /etc ,但不要
/home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf
myfile.tar.gz /home/* /etc



tar 与gzip and bzip2配合使用
比较麻烦的实现,通过输入输出重定向。
tar cvf - files... |
gzip -9 > tarfile.tar.gz
gunzip -c tarfile.tar.gz
| tar xvf –

使用z参数。
tar cvzf tarfile.tar.gz
files...
tar xvzf tarfile.tar.gz
扩展名必须使用:.tar.gz或者.tgz
使用j参数
tar cvf tarfile.tar.bz2
--use-compress-program=bzip2 files...
tar cvjf tarfile.tar.bz2 files

# tar -ztvf /tmp/etc.tar.gz
# 由于我们使用 gzip 压缩,所以要查阅该 tar file 内的档案时,
# 就得要加上 z 这个参数了!这很重要的!


简写命令:
.bashrc中添加:
    tarc ( ) { tar
czvf $1.tar.gz $1 }
    tarx ( ) { tar
xzvf $1 }
tart ( ) { tar tzvf $1 }

就可以这样简单使用了:    tarc directorytart file.tar.gz,
tarx file.tar.gz

简写这一部分暂时还不太理解。

Winzip可以解开tar和gz文件。不过不支持bzip2。Linux可以使用unzip来解压zip文件。

tar 技巧
Tar能保留权限,目录结构,符号和硬链接。
比如以下是cp难以实现的:
    cd from-stuff
    tar cf - . | (cd ../to-stuff;
tar xvf -)

将 /etc/ 打包后直接解开在 /tmp 底下,而不产生档案!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -


rsh (or ssh)也可以实现这个功能,include an appropriate rsh (or ssh) command
within the subshell on the right side of the pipe.。本机的拷贝还要实践。(Actually, GNU tar has facilities to read or write tar files automatically from other machines over the
network; see the tar(1) manual page for
details.)




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/21908/showart_652784.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP