简介 7-zip是一款跨平台的开源压缩/解压软件,官方网站是,支持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用户请打开官方软站,地址是,在搜索框中输入"7zip",并选好你的版本,搜索,通常是安装第一个。
其它发行版的用户既可以从自己的源里找,也可以从、上寻找相应的包或源码进行安装。
windows用户请从上寻找下载,安装过程很简单,这里从略。
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:设置压缩方法,详见[url=file:///usr/share/doc/p7zip-full/DOCS/MANUAL/switches
/method.htm]/usr/share/doc/p7zip-full/DOCS/MANUAL/switches
/method.htm[/url](在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下,其结构如下:
包含三个文件,两个目录,其中一个为隐蔵的freemind目录下包含两个子目录,其中一个为隐蔵的。
好,下面来压缩这些文件,在命令行下执行
效果如下:
压缩成功
查看压缩文件里面所包含的文件
查看压缩文件里面都有什么,可执行命令
效果如下:
向压缩文件里添加文件
可以看到,除了.freemind之外的所有文件和目录全被加到压缩文件里面了,即这种情况无法直接压缩隐蔵文件和目录,可以将隐蔵文件在压缩后添加,即执行命令
好,现在这个隐蔵目录就被加进去了。
解压文件(安装rar模块后,可解压RAR文件)
下面,将压缩好的文件解压,在解压时,一般用x即7z x,因为e不建立目录结构,解压后的文件直接输出到当前目录下,在本例中,将解压后的文件全放到一个指定目录t下,所以执行命令
可以看到,目录t被自动创建了,并且7zip按照预期的要求解压了此文件。
注,解压可以不注明类型,7zip会自动识别。
2.加密文件
为方便演示,先将上一例中输出的文件和目录全部删掉。
为压缩后的文件加密可以使用-p参数,如
这时要求你输入密码,然后再验证一次,两次完全相同,即可通过。
此时再解压文件的时候就会要求你输入密码,只有密码正确时才能将文件正常解出,否则输出的文件全为空白文件,此时7-zip的输出结果为2,如
当然,也可以在-p后紧跟着密码内容,如-p123456,但密码的内容也会留在屏幕上,有泄露的危险。
3.加密文件列表
7-zip仅使用-p压缩出来的文件没有对文件列表进行加密,虽然解压必须通过密码,但文件的列表仍可以通过7z l filename.7z来查看,所以可以加上参数-mhe=on,来开启对文件列表的加密,可与-p连用(注,此方法仅适用于对7z格式的压缩),如
- 7z a -p -mhe=on temp.7z *
这时,想要查看文件列表就必须通过密码。否则不能查看,如
4.指定压缩级别
压缩级别越高,压缩后的文件所占用的空间就越小,但压缩/解压过程所占用的内存就越高,压缩/解压所需的时间就越长,有时我们需要压缩大文件,或要压缩的所有文件的体积较大,就可能会出现因内存不够而无法压缩/解压的问题,为避免这一问题,需要调整压缩级别,调整压缩级别的参数是-mx=n,n可取0、1、3、5、7、9,其中0级为仅打包,不压缩。这里为了显示出效果,以一个稍大的文件为例。
首先我们看看默认级别的压缩,执行命令
- 7z a z.7z openschultetable1_x86_64
大约16MB的文件被压缩成了大约3MB。
再看看最高级别
- 7z a -mx=9 z9.7z openschultetable1_x86_64
默认级别和最高级别压缩后的大小相近(但可见默认级别并非最高级别),再看看0级
- 7z a -mx=0 z0.7z openschultetable1_x86_64
0级压缩和原文件的大小非常接近,可以认为0级压缩就是仅打包,不压缩。
5.分卷压缩
如果想把压缩后的文件放到论坛上或邮箱上,但由于文件大小的限制却无法上传,怎么办?7-zip可以满足你,分卷压缩的参数为-v,用法为-v{Size}[b|k|m|g],比如想将压缩后的文件分为每个文件1MB大小,可以使用-v1m,如
- 7z a -v1m zv.7z openschultetable1_x86_64
此时,每个文件最大为1M,这个问题就解决了。
6.系统备份
特别注意:7z格式的文件本身不存储用户和组信息!如果直接用于系统备份,则还原后的系统的所有文件的用户和组都将被重置为解压的用户和所在的组!
比如,我将~/temp下目录的几个文件分别设以如下权限:
使用如下命令压缩:
再使用su命令切换到root身份:
然后解压:
看!虽然权限还保留着,但用户和组却变成了解压时的用户和所在的主组。如果直接用于备份全系统,并进行复恢,是很危险的!所以,需要先打包成tar文件,再压缩成7z格式,但一般两步可合二为一,即(注,在这里,先换回普通用户,便于演示)
- tar c * | 7za a -si temp.tar.7z
解压怎么办呢?使用如下命令(注,由于前面已换回普通用户,这里再用su切换至root用户):
- 7za x -so temp.tar.7z | tar xv
好,这回可以看到,用户和组的信息就全保留下来了,不过由于这种方法使用-ot参数不再凑效,故删除了原来的文件。
注:man page中给出的压缩的命令格式是
- tar cf - directory | 7za a -si directory.tar.7z
但tar的参数f的意思是指定输出文件的名称,而这里是向tar的stdout(也就是7z的stdin)输出,所以可以不加f,而加上f后,需要在后面加上"-"才行,否则会出现问题。同理在解压时,如果给tar加上参数f,也需要在后面加上一个"-"(注意空格),即
- 7za x -so directory.tar.7z | tar xf -
7.关于链接
在默认情况下,7zip将符号链接原样保存,现在,我将~/temp目录的结构和内容置为如下图所示
现在,执行ln -s ~/temp/freemind fm命令来创建一个指向freemind目录的链接,然后压缩(注,这里为了突出效果,采用0级压缩,即仅打包),执行命令
使用7z x -ot temp.7z解压,然后用ls -l t查看
可见压缩档案里对符号链接是以链接形式存放的,再看看硬链接是如何存放的,先删掉t和temp.7z,执行命令
- ln freemind/openschultetable1_x86_64 schulte
-
7z a -mx=0 temp.7z *
-
ls -l temp.7z
此时,就将符号链接所对应的文件/目录也放进压缩档案中了。
7zip在图形界面下的应用
讲了半天的命令,你可能会说:“如果能在图形界面下使用,该多好“。如果你的系统里装有file roller或ark,那么恭喜,你可以在图形界面下使用7zip了,下面,我们就来看看如何使用。
首先,保证你的系统里装有file roller(或ark)和7zip(当然是linux版的)。现在,我把待测试的文件放到~/temp下。
压缩
选中需要添加的文件,单击右键,点击“压缩”。
.7z和.tar.7z都用到了7zip,而.exe格式估计也是用7zip,好像是建立什么自解压文件吧,但仅用于在windows下,linux下需要借助模拟器。
这下会了吧,第一行就是文件名,第二行是存放的位置,点击第三行的“其它选项”,可以设置密码,可以拆分文件,不过对文件列表的加密就没的可选了,一切都好了以后,点击创建即可。
解压
解压就更好办啦,选择要解压的文件,右键单击,在右键菜单中的“使用归档管理器打开”或“使用Ark打开”(不同的发行版的叫法可能会有所偏差)就可以啦
注:可以利用这种方法在图形界面下解压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
阅读(3409) | 评论(0) | 转发(0) |