红联Linux门户
Linux帮助

linux下的压缩解压软件7zip(不会解压rar的来看一下)

发布时间:2011-02-22 23:34:23来源:红联作者:pl_014
[i=s] 本帖最后由 pl_014 于 2011-2-26 17:23 编辑 [/i]

注:只想知道如何解压RAR格式的朋友可以直接跳到后面,但注意要安装7zip的rar模块
另:linux下也可以安装unrar来解压rar文件,这里从略
简介
7-zip是一款跨平台的开源压缩/解压软件,官方网站是http://www.7-zip.org,支持7z、ZIP、GZIP、BZIP2、TAR等格式,并且可以解压RAR文件(注:由于协议关系,暂时不能压缩成RAR格式),在功能和压缩率上都可以与winRAR相媲美。苦于linux下无法解压RAR文件的同志有希望了。

关于7z格式
和RAR格式相类似,7z格式是一个支持不同压缩率的压缩格式,其最高等级的压缩率比RAR格式的还要高(即压缩出来的文件的大小,比RAR格式的还要小),当然,压缩等级越高,压缩/解压所需要的时间就越多,所占用的内存就越高(甚至会超出可分配给7zip的内存的大小,请特别注意),最低的压缩等级为0,为仅打包。

安装
debian/ubuntu下可以找开新立德软件包管理器或软件中心,搜索"7z",可以看到有p7zip之类字样的包,安装它。需要RAR格式的支持的用户,还需要安装7zip的rar模块,装好后就可以使用了。
在令命行下可以使用apt-get install p7zip-full(ubuntu用户可以在前面直接加上sudo,debian用户可能需要先用su切换至root用户)
fedora和debian/ubuntu类似,这里从略。
opensuse用户请打开官方软站,地址是http://software.opensuse.org,在搜索框中输入"7zip",并选好你的版本,搜索,通常是安装第一个。
其它发行版的用户既可以从自己的源里找,也可以从http://www.7-zip.org/download.htmlhttp://sourceforge.net/projects/p7zip/files/p7zip/上寻找相应的包或源码进行安装。
windows用户请从http://www.7-zip.org/download.html上寻找下载,安装过程很简单,这里从略。

7-zip在命令行下的使用方法
使用格式:7z [adeltux] [-] [SWITCH] ...
第一个7z是程序的名称,7zip装完后会有7z、7za、7zr三个程序,其中7z是全功能的(即启用所有模块的功能),7za是仅使用7zip本身,不启用其它模块(这种情况不支持rar等格式),7zr是精简版,只支持7z格式。
第二个参数[adeltux]是用来告诉7zip执行什么功能:a用于创建压缩文件或向压缩文件中添加文件d用于从压缩文件里删除文件;e用于解压,但不创建目录结构;l用于显示压缩文件里所包含的内容;t用于测试压缩文件是否有效;u用于更新压缩文件内的文件;x用于解压,并且创建目录结构
[-] [SWITCH]是选项开关,部分选项将稍后介绍,也可以使用命令man 7z查看详细说明。
是压缩文件的文件名,后面跟输入文件的文件名(可以使用通配符,可以有多个文件)。
比较常用的选项开关
-t:指定压缩格式,如-t7z
-m:设置压缩方法,详见/usr/share/doc/p7zip-full/DOCS/MANUAL/switches/method.htm(在debian下,若无法打开,请参照自己的man page)
-p:为压缩档案设置密码,既可以在压缩时先在输入的命令加上-p,然后在执行中输入密码,也可以直接-pPASSWORD,如-p123456
-mhe=on|off:仅适用于7z格式,开启或关闭文件列表的加密,默认为off
-si:从标准输入中读取数据,常与管道操作相结合,用于压缩/打包文件
-so:向标准输出中写入数据,常与管道操作相结合,用于解压/释放文件
-v:用于分卷压缩,比如让输出的每个文件最大为1MB,则用-v1m
-o:将解压后的文件存放到指定目录下,如想要指定解压后的文件输出到目录a下,则用-oa
-l:存储符号链接所对应的文件/目录,并替换到此链接上(注意,在所压缩的文件里不可以有递归链接)
关于命令返回值
7-zip退出后也有自己的返回值,想要查看返回值,请在命令执行完成后马上执行echo $?命令(即中间不要执行其它命令),以查看返回值,下面列出各返回值所代表的意义。
0 正常
1 警告(没有错误),比如某些文件在压缩过程中无法读取
2 错误
7 无法识别命令行参数
8 没有足够的内存来执行操作
255 用户自行按下Ctrl+C来中止程序

7-zip在命令行下的使用实例
注:所有操作若无特殊说明,均在普通用户下操作
1.基本操作
压缩
我将实验用的一些文件放到了~/temp下,其结构如下:
[attach]33761[/attach]
包含三个文件,两个目录,其中一个为隐?的freemind目录下包含两个子目录,其中一个为隐?的。
好,下面来压缩这些文件,在命令行下执行
[code]7z a temp.7z *[/code]
效果如下:
[attach]33762[/attach]
压缩成功
查看压缩文件里面所包含的文件
查看压缩文件里面都有什么,可执行命令
[code]7z l temp.7z[/code]
效果如下:
[attach]33763[/attach]
向压缩文件里添加文件
可以看到,除了.freemind之外的所有文件和目录全被加到压缩文件里面了,即这种情况无法直接压缩隐?文件和目录,可以将隐?文件在压缩后添加,即执行命令
[code]7z a temp.7z .freemind[/code]
[attach]33764[/attach]
好,现在这个隐?目录就被加进去了。
解压文件(安装rar模块后,可解压RAR文件
下面,将压缩好的文件解压,在解压时,一般用x即7z x,因为e不建立目录结构,解压后的文件直接输出到当前目录下,在本例中,将解压后的文件全放到一个指定目录t下,所以执行命令
[code]7z x -ot temp.7z[/code]
[attach]33765[/attach]
[attach]33766[/attach]
可以看到,目录t被自动创建了,并且7zip按照预期的要求解压了此文件。
注,解压可以不注明类型,7zip会自动识别。
2.加密文件
为方便演示,先将上一例中输出的文件和目录全部删掉。
为压缩后的文件加密可以使用-p参数,如
[code]7z a -p temp.7z *[/code]
[attach]33767[/attach]
这时要求你输入密码,然后再验证一次,两次完全相同,即可通过。
此时再解压文件的时候就会要求你输入密码,只有密码正确时才能将文件正常解出,否则输出的文件全为空白文件,此时7-zip的输出结果为2,如
[code]7z x -ot temp.7z[/code]
[attach]33768[/attach]
[attach]33769[/attach]
当然,也可以在-p后紧跟着密码内容,如-p123456,但密码的内容也会留在屏幕上,有泄露的危险。
3.加密文件列表
7-zip仅使用-p压缩出来的文件没有对文件列表进行加密,虽然解压必须通过密码,但文件的列表仍可以通过7z l filename.7z来查看,所以可以加上参数-mhe=on,来开启对文件列表的加密,可与-p连用(注,此方法仅适用于对7z格式的压缩),如
[code]7z a -p -mhe=on temp.7z *[/code]
[attach]33770[/attach]
这时,想要查看文件列表就必须通过密码。否则不能查看,如
[attach]33771[/attach]
4.指定压缩级别
压缩级别越高,压缩后的文件所占用的空间就越小,但压缩/解压过程所占用的内存就越高,压缩/解压所需的时间就越长,有时我们需要压缩大文件,或要压缩的所有文件的体积较大,就可能会出现因内存不够而无法压缩/解压的问题,为避免这一问题,需要调整压缩级别,调整压缩级别的参数是-mx=n,n可取0、1、3、5、7、9,其中0级为仅打包,不压缩。这里为了显示出效果,以一个稍大的文件为例。
首先我们看看默认级别的压缩,执行命令
[code]7z a z.7z openschultetable1_x86_64[/code]
[attach]33772[/attach]
大约16MB的文件被压缩成了大约3MB。
再看看最高级别
[code]7z a -mx=9 z9.7z openschultetable1_x86_64[/code]
[attach]33773[/attach]
默认级别和最高级别压缩后的大小相近(但可见默认级别并非最高级别),再看看0级
[code]7z a -mx=0 z0.7z openschultetable1_x86_64[/code]
[attach]33774[/attach]
0级压缩和原文件的大小非常接近,可以认为0级压缩就是仅打包,不压缩。
5.分卷压缩
如果想把压缩后的文件放到论坛上或邮箱上,但由于文件大小的限制却无法上传,怎么办?7-zip可以满足你,分卷压缩的参数为-v,用法为-v{Size}[b|k|m|g],比如想将压缩后的文件分为每个文件1MB大小,可以使用-v1m,如
7z a -v1m zv.7z openschultetable1_x86_64
[attach]33775[/attach]
此时,每个文件最大为1M,这个问题就解决了。
6.系统备份
特别注意:7z格式的文件本身存储用户和组信息!如果直接用于系统备份,则还原后的系统的所有文件的用户和组都将被重置为解压的用户和所在的组!
比如,我将~/temp下目录的几个文件分别设以如下权限:
[attach]33776[/attach]
使用如下命令压缩:
[code]7z a temp.7z *[/code]
再使用su命令切换到root身份:
[code]su[/code]
然后解压:
[code]7z x -ot temp.7z[/code]
[attach]33777[/attach]
看!虽然权限还保留着,但用户和组却变成了解压时的用户和所在的主组。如果直接用于备份全系统,并进行复恢,是很危险的!所以,需要先打包成tar文件,再压缩成7z格式,但一般两步可合二为一,即(注,在这里,先换回普通用户,便于演示)
[code]tar c * | 7za a -si temp.tar.7z[/code]
解压怎么办呢?使用如下命令(注,由于前面已换回普通用户,这里再用su切换至root用户):
[code]7za x -so temp.tar.7z | tar xv[/code]
[attach]33778[/attach]
好,这回可以看到,用户和组的信息就全保留下来了,不过由于这种方法使用-ot参数不再凑效,故删除了原来的文件。
注:man page中给出的压缩的命令格式是
[code]tar cf - directory | 7za a -si directory.tar.7z[/code]
但tar的参数f的意思是指定输出文件的名称,而这里是向tar的stdout(也就是7z的stdin)输出,所以可以不加f,而加上f后,需要在后面加上"-"才行,否则会出现问题。同理在解压时,如果给tar加上参数f,也需要在后面加上一个"-"(注意空格),即
[code]7za x -so directory.tar.7z | tar xf -[/code]
7.关于链接
在默认情况下,7zip将符号链接原样保存,现在,我将~/temp目录的结构和内容置为如下图所示
[attach]33782[/attach]
现在,执行ln -s ~/temp/freemind fm命令来创建一个指向freemind目录的链接,然后压缩(注,这里为了突出效果,采用0级压缩,即仅打包),执行命令
[code]7z a -mx=0 temp.7z *[/code]
[attach]33783[/attach]
使用7z x -ot temp.7z解压,然后用ls -l t查看
[attach]33784[/attach]
可见压缩档案里对符号链接是以链接形式存放的,再看看硬链接是如何存放的,先删掉t和temp.7z,执行命令
[code]ln freemind/openschultetable1_x86_64 schulte
7z a -mx=0 temp.7z *
ls -l temp.7z[/code]
[attach]33785[/attach]
可见,7zip并不能真正地识别出硬链接,在自己的压缩文件中可能会建立两个副本,但在高压缩级别中会识别出两个文件是同一个文件,故可省去不必要的硬盘开支。
有时需要把符号链接所指向的文件/目录原样放到自己的压缩文件中,而不是存放原链接,这时就需要用到-l参数,但注意:所压缩的文件中不可以包含递归链接,否则会发生错误!下面,先删除schulte和temp.7z文件,然后执行命令
[code]7z a -mx=0 -l temp.7z *[/code]
然后输入命令ls -l查看:
[attach]33786[/attach]
此时,就将符号链接所对应的文件/目录也放进压缩档案中了。

7zip在图形界面下的应用
讲了半天的命令,你可能会说:“如果能在图形界面下使用,该多好“。如果你的系统里装有file roller或ark,那么恭喜,你可以在图形界面下使用7zip了,下面,我们就来看看如何使用。
首先,保证你的系统里装有file roller(或ark)和7zip(当然是linux版的)。现在,我把待测试的文件放到~/temp下。
压缩
选中需要添加的文件,单击右键,点击“压缩”。
[attach]33759[/attach]
[attach]33760[/attach]
.7z和.tar.7z都用到了7zip,而.exe格式估计也是用7zip,好像是建立什么自解压文件吧,但仅用于在windows下,linux下需要借助模拟器。
[attach]33779[/attach]
这下会了吧,第一行就是文件名,第二行是存放的位置,点击第三行的“其它选项”,可以设置密码,可以拆分文件,不过对文件列表的加密就没的可选了,一切都好了以后,点击创建即可。
解压
解压就更好办啦,选择要解压的文件,右键单击,在右键菜单中的“使用归档管理器打开”或“使用Ark打开”(不同的发行版的叫法可能会有所偏差)就可以啦
[attach]33780[/attach]
注:可以利用这种方法在图形界面下解压RAR文件,当然,你要安装7zip的rar模块。

7-zip在wine下
当然,你也可以用windows下的7-zip借助wine来实现,安装的话可以借助PlayOnLinux(如果你的发行版可以安装的话),这样,就可以使用windows版的7-zip了。

最后,给发布者的建议
近日本人看到许多linux的网站上以rar文件发布,也看到有不少网友在linux论坛上以rar格式发布/上传文件,虽然rar等格式可以通过如上所述的方法来解压,但别忘了,任何软件都是有自己可运行的范围的,一部分linux可以解压7z、RAR格式的文件,不代表所有的linux都可以做到,而其它系统也如此,所以建议各位发布者以zip格式打包,如果说所发布的文件只需要在linux或UN*X下使用,则尽量打包成.tar.gz、.tar.bz2、.tar或.tgz,自己打包成的文件要尽量通用一些,千万不要为了省事,只弄个怪异的格式,给别人造成不必要的麻烦,当然,也不要把rar什么的再压缩一次哦。

参考资料:
这个网页给出了更多的7-zip的参数,不过冒似作者是在windows的环境下实验的,仅供参考。
http://blog.sina.com.cn/s/blog_57206c150100nrfy.html
文章评论

共有 58 条评论

  1. imax32 于 2012-12-05 17:28:10发表:

    能给多些具体的吗

  2. imax32 于 2012-12-05 17:27:49发表:

    不错哦

  3. imax32 于 2012-12-05 17:26:17发表:

    有没有BZ2的

  4. xiaoy 于 2012-12-04 23:34:55发表:

    比单纯的用rar要好多了!至少还支持.7的格式。而且如此压缩包里的中文也不会是乱码了!

  5. linux郝鑫 于 2012-10-11 17:18:16发表:

    为什么,想下载没有现金啊!!!

  6. Hoo_h 于 2012-05-21 13:17:32发表:

    收了

  7. skybuler 于 2012-04-16 16:39:15发表:

    顶下

  8. xgrq 于 2012-04-13 13:36:54发表:

    呵呵,就是啊

  9. zyzhang12 于 2012-03-07 19:17:48发表:

    在win下习惯了rar 在ubuntu下 就是不习惯阿

  10. gbyukg 于 2011-11-23 21:12:18发表:

    确实是个很强大的解压缩软件

  11. im叶飞 于 2011-11-21 21:36:08发表:

    强大啊 什么压缩格式 只要 7z x

  12. jiangsg 于 2011-11-20 23:52:13发表:

    [i=s] 本帖最后由 jiangsg 于 2011-11-20 23:53 编辑 [/i]

    [[email protected] 下载]$ 7z X jiuyenan.rar
    7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
    p7zip Version 9.20 (locale=zh_CN.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)
    Processing archive: jiuyenan.rar
    Error: Can not open file as archive

    这是怎么回事?
    我确定安装了p7zip p7zip-plugin
    所有的rar都是这个反应。

    难道是我没安装正确?

    谢谢

  13. D调漫步 于 2011-08-16 14:25:30发表:

  14. D调漫步 于 2011-08-12 11:35:48发表:

    楼主威武

  15. tan0620 于 2011-08-11 14:43:37发表:

    {:2_92:}{:2_93:}

  16. ftd505 于 2011-04-18 14:50:02发表:

    {:2_93:}

  17. ftd505 于 2011-04-18 14:49:58发表:

    {:2_93:}

  18. catherine_li 于 2011-04-15 16:06:48发表:

    不错啊

  19. catherine_li 于 2011-04-15 16:06:41发表:

    不错

  20. gjtxhj 于 2011-04-15 00:01:39发表:

    感谢分享

  21. yiyelin 于 2011-04-08 14:29:13发表:

    新手任务,得回帖,谢谢LZ分享?????????????灌水莫怪?????????????有机会一定登门拜谢????????????

  22. yiyelin 于 2011-04-08 14:28:54发表:

    新手任务,得回帖,谢谢LZ分享?????????????灌水莫怪?????????????有机会一定登门拜谢????????????

  23. pl_014 于 2011-03-17 18:16:53发表:

    引用:
    实际上压缩只减少了一点点容量嘛?看图。
    olivemsn 发表于 2011-3-17 16:40

    那得看你压缩什么样的文件了,比如你压缩png格式的图片,只减少一点容量那是很正常的,因为png已经采用了zip压缩。从总体上看,7zip的压缩率跟rar是一个级别的。

  24. olivemsn 于 2011-03-17 16:40:39发表:

    实际上压缩只减少了一点点容量嘛?看图。

  25. 5644 于 2011-03-17 16:40:09发表:

    看看

  26. olivemsn 于 2011-03-17 16:04:19发表:

    :mad:1详细,一时难以消化,先收藏。

  27. Chenyl 于 2011-03-17 14:46:23发表:

    入门中,请指教!!

  28. wst021 于 2011-03-09 20:25:26发表:

    好贴啊,顶上去。

  29. pl_014 于 2011-03-09 17:30:04发表:

    引用:
    想当初我一看zip文件就换windows系统解压,现在好了,可以使用7zip了。。
    哈哈。。
    zmj27404 发表于 2011-3-9 08:45

    呃,linux不是还可以用unzip解压吗?难道没有集成到file roller中?

  30. liuzhhit8848 于 2011-03-09 10:39:42发表:

    写的还是非常详细的嘛

  31. zmj27404 于 2011-03-09 08:45:19发表:

    想当初我一看zip文件就换windows系统解压,现在好了,可以使用7zip了。。
    哈哈。。

  32. pl_014 于 2011-03-08 20:15:42发表:

    引用:
    怎么没有PDF文档
    copylive 发表于 2011-3-8 00:36

    我确实没做PDF文档,就这么看吧。

  33. copylive 于 2011-03-08 00:36:37发表:

    怎么没有PDF文档

  34. hekui 于 2011-03-02 23:15:58发表:

    非常详细啊
    安装好了 ,感谢

  35. tzzjchao 于 2011-03-01 22:21:02发表:

    看来,真要慢慢地学!!

  36. linuxzj 于 2011-02-28 00:31:42发表:

    别发愁慢慢来,我相信你能行,加油加油再加油!!!!!!!!!!!!!!!!!!谢谢楼主倾情奉献!!!!!!!!!!!!!!!!!!!!!!!!

  37. pl_014 于 2011-02-26 17:20:35发表:

    [i=s] 本帖最后由 pl_014 于 2011-2-26 17:22 编辑 [/i]

    引用:
    cab在linux下解压用cabextract,而且不是non-free.
    zip既不是Windows的标配,也不是Linux的,Explore可以自动解看zip文件是Winzip配置的功劳,不是Explore的。
    不少Redhat9.0汉语书籍的作者的还陷于Windows的思维之 ...
    litkt 发表于 2011-2-26 11:41

    首先,在这篇贴子的最后,我主要强调的是不要压缩成像rar等带有专利保护和不常见的格式,.tar.gz和.zip都是常见的格式
    其次,虽然在win下装了解压软件以后,.tar.gz的解压应该不再成问题,但压缩未必和解压一样也不成问题,试想压缩格的种类繁多,而压缩算法也没有一个真正的标准,我曾用7zip压缩成zip格式,结果有时win下的explorer也不认识了zip,而7zip可以把许多文件直接压缩成gz格式,而中间并未经过tar格式的打包,这样的话,到linux下,难道可以用gz来识别?
    再者,虽然.tar.gz为linux等系统的标配,可适合于新手学习使用的linux也都配备unzip,而某些linux、bsd或UN*X也许没有unzip,但使用这种系统的人大多为高手,而unzip也是开源的,他们当然可以搞定zip,否则还配使用这样的系统?而zip格式无论在linux下,还是在win下,压缩起来都比较容易,新手固然可以知道在win下解压.tar.gz的方法,但也知道在win下制作.tar.gz的方法?有些新手的水平还暂时停留于虚拟机,他们也会有一些有用的资源,也愿意分享给大家,这时,只需要要求他们打包成zip格式即可,不必强求他们打包成.tar.gz,难道你还要他们把东西传到虚拟机下,打包成.tar.gz,再传回win下,再上传?或者再搞个cygwin什么的?

  38. litkt 于 2011-02-26 11:41:33发表:

    cab在linux下解压用cabextract,而且不是non-free.
    zip既不是Windows的标配,也不是Linux的,Explore可以自动解看zip文件是Winzip配置的功劳,不是Explore的。
    不少Redhat9.0汉语书籍的作者的还陷于Windows的思维之中呢。呵呵。
    我解的第一个tar.gz文件是在用Windows95上网了解Linux的时候,用当时的Winzip轻易就解开了,不比解zip多费丝毫的事。
    如此这般,在windows下还拿tar.gz束手无策的人,根本不配使用计算机。让Linuxer为他们改变自己的习惯,岂有此理。

  39. okzokz123 于 2011-02-26 10:07:49发表:

    我在用rar的LINUX版

  40. dickwatson 于 2011-02-24 15:06:57发表:

    恩 学习中!