Red Hat Linux 9实务自学手册
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第3章 软件包管理

Linux操作系统提供了RPM软件包的管理,以实施对软件包的查询、安装、卸载、升级和验证;同时,它也提供了多种文件压缩工具,使得用户可以对某些文件进行压缩,以减小文件占用的硬盘空间或方便网络传输;并且,Linux也提供了对文件打包的功能,用户可以使用其将若干文件或目录打成一个软件包。下面,本章将详细介绍上述Red Hat Linux 9下各种常见的软件包管理方式。

3.1 管理RPM包(实务4)

Red Hat Package Manager(简称RPM)工具包由于其使用简单,操作方便,可以实现软件的查询、安装、卸载、升级和验证等功能,为Linux使用者节省大量时间,所以被广泛应用于Linux下安装、删除软件。RPM软件包通常具有类似squid-2.5.STABLE1-2.i386.rpm的文件名。文件名中一般包括软件包名称(squid),版本号(2.5.STABLE1)、发行号(2)和硬件平台(i386)。RPM命令的详细使用说明可以在Linux终端使用man rpm命令显示出来。

在实际的操作过程中,可能遇到如下的实际操作需求:

● 对待安装的RPM软件包进行查询,了解其详细信息;

● 对系统中没有的RPM软件包进行安装,以完成实际应用需求;

● 针对RPM软件包安装过程中可能出现的问题,进行解决;

● 卸载系统中的RPM软件包;

● 升级RPM软件包;

● 验证RPM软件包;

● 使用Red Hat Linux 9的RPM包管理工具。

3.1.1 查询RPM软件包

在新软件安装之前,一般都要先查看一下这个软件包里有什么内容。RPM软件包的查询是使用带参数-q的rpm命令实现的,系统将会列出待查询软件包的详细资料,包括含有多少个文件、各文件名称、文件大小、创建时间、编译日期等信息。

1.RPM软件包查询命方法及参数

RPM软件包查询命令的格式如下:

        rpm {-q|--query} [select-options] [query-options]

其中,rpm是命令名称,软件包查询可使用参数-q,也可用--query,这两个参数必选其一。select-options是可选信息,query-options是查询信息。RPM查询所支持的参数有三类:详细选项、信息选项和通用选项。

详细选项包括:

● -p<file>:查询软件包的文件;

● -f<file>:查询<file>属于哪个软件包;

● -a:查询所有安装的软件包;

● --whatprovides<x>:查询提供了<x>功能的软件包;

● -g<group>:查询属于<group>组的软件包;

● --whatrequires<x>:查询所有需要<x>功能的软件包。

信息选项用于显示文件的一些属性信息,如文件列表、文件功能等,信息选项参数主要有:

● <null>:显示软件包的全部标识;

● -i:显示软件包的概要信息;

● -l:显示软件包中的文件列表;

● -c:显示配置文件列表;

● -d:显示文档文件列表;

● -s:显示软件包中文件列表及其状态;

● --scripts:显示安装、卸载、校验脚本;

● --queryformat(或--qf):以用户指定的方式显示查询信息;

● --dump:显示每个文件的所有已校验信息;

● --provides:显示软件包提供的功能;

● --requires(或-R):显示软件包所需的功能。

通用选项主要有:

● -v:显示附加信息;

● -vv:显示调试信息;

● --root<path>:指定软件安装目录;

● --rcfile<rcfile>:设置rpmrc文件为<rcfile>;

● --dbpath<path>:设置RPM资料库存所在的路径为<path>。

2.RPM软件包查询命令应用举例

下面以软件包为例,说明RPM查询命令的使用。

(1)查询系统所有已经安装的软件包

        # rpm -qa
        bzip2-libs-1.0.2-8
        glib-1.2.10-10
        losetup-2.11y-9
        shadow-utils-4.0.3-6
        MAKEDEV-3.3.2-5
        hotplug-2002_04_01-17
        findutils-4.1.7-9
        modutils-2.4.22-8
        ... ...

(2)查询系统是否存在指定软件包

        # rpm -qa |grep squid
        squid-2.5.STABLE1-2

(3)查询文件所属的软件包

        //查询文件/etc/squid/squid.conf所属的软件包
        #rpm -qf /etc/squid/squid.conf
        //显示该文件属于squid-2.5.STABLE1-2软件包
        squid-2.5.STABLE1-2

(4)查询软件包所包含的文件列表

        //查询已安装软件包squid所包含的文件列表
        #rpm -ql squid
        //以下显示该软件包所包含的所有文件列表
        /etc/logrotate.d/squid
        /etc/rc.d/init.d/squid
        /etc/squid
        /etc/squid/errors
        /etc/squid/mib.txt
        ... ...

(5)查询软件包概要信息

        //查询软件包squid-2.5.STABLE1-2.i386.rpm的概要信息
        # rpm -qi squid-2.5.STABLE1-2
        //显示概要信息如下
        Name       : squid                       Relocations: (not relocateable)
        Version    : 2.5.STABLE1                    Vendor: Red Hat, Inc.
        Release    : 2                         Build Date: 2003年01月25日 星期六
        15时19分34秒
        Install Date: 2008年07月10日 星期四 03时26分17秒     Build Host:
        porky.devel.re
        dhat.com
        Group      : 系统环境/守护进程           Source RPM:
        squid-2.5.STABLE1-2.src.
        rpm
        Size        : 3075793                       License: GPL
        Signature   : DSA/SHA1, 2003年02月24日 星期一 13时57分02秒, Key ID
        219180cddb42a
        60e
        Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
        Summary     : Squid代理缓存服务器。
        Description :
        Squid是一个万维网客户的高性能代理缓存服务器。
        它支持FTP、gopher以及HTTP数据对象。与传统
        的缓存软件不同,Squid只用一个非堵塞的I/O驱动
        的进程来处理所有请求。Squid保存元数据,特别是
        缓存在内存中的热门对象;它还缓存DNS查寻,支
        持非堵塞DNS查寻,并对失败的请求实现负缓存。
        Squid由一个主服务器程序squid,一个域名系统查寻
        程序 (dnsserver),一个用来检索FTP数据的程序 (ftpget),
        以及一些管理和客户工具组成。

3.1.2 安装RPM软件包

软件包查询完成后,用户就可以进行软件的实际安装了。使用带参数-i的RPM命令可以实现RPM软件包的安装,其命令格式如下:

        rpm -i ( or --install) options file1.rpm ... fileN.rpm

其中-i表示欲安装软件包,options是安装选项,file1.rpm到fileN.rpm表示待安装的RPM软件包名称。

1.RPM安装命令选项

带-i参数RPM命令的详细选项如下:

● -h(或者-hash):安装时输出hash记号(“#”);

● --test:只对安装进行测试,并不实际安装;

● --percent:以百分比的形式输出安装的进度;

● --excludedocs:不安装软件包中的文档文件;

● --includedocs:安装文档;

● --replacepkgs:强制重新安装已经安装的软件包;

● --replacefiles:替换属于其他软件包的文件;

● --force:忽略软件包及文件的冲突;

● --noscripts:不运行预安装和后安装脚本;

● --prefix <path>:将软件包安装到由<path>指定的路径下;

● --ignorearch:不校验软件包的结构;

● --ignoreos:不检查软件包运行的操作系统;

● --nodeps:不检查依赖性关系;

● --ftpproxy <host>:用<host>作为FTP代理;

● --ftpport <port>:指定FTP的端口号为<port>。

通用选项类似于RPM查询命令,这里不再详述。

2.RPM软件包安装方式及实例

安装方式主要包括如下几种。

● 普通安装:所谓普通安装,就是指使用最多的安装方式,采用一般的安装参数ivh,表示显示附加信息和安装进度的#符号的安装方式,举例如下:

        //安装当前目录下的squid软件包
        //显示安装过程的详细信息
        //用#号表示安装进度
        #rpm -ivh squid-2.5.STABLE1-2.i386.rpm
        Preparing...   ########################################### [100%]
        1:squid   ########################################### [100%]

● 测试安装,并不实际安装:用户对安装不确定时可以先使用该种安装方式测试安装,如果没有显示错误信息再实际安装,举例如下:

        #rpm - i test squid-2.5.STABLE1-2.i386.rpm

● 强制安装:强制安装软件,忽略软件包依赖性以及文件的冲突。如果对软件包的依赖性很清楚,而且确实要忽视文件的冲突,可以选择强制安装。建议初学者不要使用这种安装方式。

        #rpm - ivh  --force  squid-2.5.STABLE1-2.i386.rpm

3.1.3 RPM软件包安装可能出现的问题

在安装过程中,有可能出现如下几种问题,需要特别注意。

● 重复安装:如果用户的软件包已被安装,将会出现以下信息:

        #rpm -ivh squid-2.5.STABLE1-2.i386.rpm
        foo package foo-1.0-1 is already installed
        error: squid-2.5.STABLE1-2.i386.rpm cannot be installed

如果用户仍要安装该软件包,可以在命令行上使用--replacepkgs选项,RPM将忽略该错误信息强行安装。

● 文件冲突:如果用户要安装的软件包中有一个文件已在安装其他软件包时安装,会出现以下错误信息:

        #rpm -ivh squid-2.5.STABLE1-2.i386.rpm
        foo /usr/bin/foo conflicts with file from bar-1.0-1
        error: squid-2.5.STABLE1-2.i386.rpm cannot be installed

要想让RPM忽略该错误信息,请使用--replacefiles命令行选项。

● 依赖关系:RPM软件包可能依赖于其他软件包,也就是说,要求在安装了特定的软件包之后才能安装该软件包。如果在用户安装某个软件包时存在这种未解决的依赖关系,会产生以下信息:

        #rpm -ivh bar-1.0-1.i386.rpm
        failed dependencies: foo is needed by bar-1.0-1

用户必须安装完所依赖的软件包,才能解决这个问题。如果用户想强制安装,请使用--nodeps命令行选项,不推荐Linux初学者使用强制安装方式安装软件包,因为强制安装后的软件包可能不能正常运行。

3.1.4 卸载RPM软件包

如果某个软件安装后不再需要,或者为了腾出空间,RPM也提供了软件卸载功能。卸载一般使用如下命令:

        #rpm -e squid

说明

这里使用软件包的名称squid,而不是软件包的文件名squid-2.5.STABLE1-2.i386.rpm。如果其他软件包依赖于用户要卸载的软件包,卸载时则会产生类似如下的错误信息:

removing these packages would break dependencies:foo is needed by bar-1.0-1

若欲让RPM忽略这个错误继续卸载,可以使用--nodeps命令行选项。但并不提倡强制卸载,因为强制卸载后依赖于该软件包的程序可能无法运行。

3.1.5 升级RPM软件包

升级软件包用于用较新版本软件包替代旧版本软件包,应使用带-U参数的RPM命令完成,其命令格式如下:

        #rpm -U options file1.rpm ... fileN.rpm

-U参数表明欲更新软件,options是一些其他的参数选项,file1.rpm到fileN.rpm指明欲升级的软件包名称。例如:

         //用软件包squid-2.5.STABLE1-2.i386.rpm更新系统中squid软件
         //显示更新过程的信息,用#指示安装进度。
         # rpm -Uvh squid-2.5.STABLE1-2.i386.rpm
        Preparing...###########################################[100%]
        package squid-2.5.STABLE1-2 is already installed

RPM将自动卸载已安装的老板本的squid软件包,用户不会看到有关信息。事实上用户可能总是使用-U来安装软件包,因为即便以往未安装过该软件包,也能正常运行。

3.1.6 验证RPM软件包

验证软件包是通过比较已安装的文件和软件包中的原始文件信息来进行的。验证主要是比较文件的尺寸、MD5校验码、文件权限、类型、属主和用户组等。RPM采用带参数-V的命令来验证一个软件包。用户可以使用以下四种包选项来查询待验证的软件包。

● 验证单个软件包:命令格式为rpm -V package-name。例如:

        #rpm -V squid           //验证软件包squid

● 验证包含特定文件的软件包:

        # rpm -Vf /bin/vi       //验证/bin/vi文件的正确性
        #                       //没有任何显示说明软件完整无误

● 验证所有已安装的软件包:验证已经安装的所有软件包是否正确。

        # rpm -Va
        S.3....T c /etc/hotplug/usb.usermap
        S.3....T c /etc/sysconfig/pcmcia
        .......T c /etc/libuser.conf
        .......T c /etc/mail/sendmail.cf
        S.3....T c /etc/mail/statistics
        SM3....T c /etc/mail/submit.cf
        S.3....T c /usr/share/a2ps/afm/fonts.map
        S.3....T c /etc/sysconfig/rhn/rhn-applet
        SM3....T   /usr/share/rhn/rhn_applet/rhn_applet.pyc
        SM3....T   /usr/share/rhn/rhn_applet/rhn_applet_animation.pyc
        SM3....T   /usr/share/rhn/rhn_applet/rhn_applet_dialogs.pyc
        SM3....T   /usr/share/rhn/rhn_applet/rhn_applet_model.pyc
        SM3....T   /usr/share/rhn/rhn_applet/rhn_applet_rpc.pyc
        SM3....T   /usr/share/rhn/rhn_applet/rhn_applet_rpm.pyc
        SM3....T   /usr/share/rhn/rhn_applet/rhn_utils.pyc
        S.3....T   /usr/lib/qt-3.1/etc/settings/qtrc
        S.3....T   /usr/lib/openoffice/share/fonts/truetype/fonts.dir

● 根据RPM文件来验证软件包:如果用户担心用户的RPM数据库已被破坏,就可以使用这种方式。

        # rpm -Vp squid-2.5.STABLE1-2.i386.rpm

如果一切校验正常将不会产生任何输出。如果验证有不一致的地方,就会显示出相应信息。输出格式是8位长字符串,“c”用以指配置文件,接着是文件名,8位字符的每一个用以表示文件与RPM数据库中一种属性的比较结果。“.”表示测试通过。其他字符则表示对RPM软件包进行的某种测试失败。各测试错误信息如表3-1所示。

表3-1 RPM验证错误信息

3.1.7 使用添加/删除应用程序管理RPM软件包

Red Hat Linux 9也提供了与Windows安全类似的添加/删除程序的功能,那就是“添加/删除应用程序”,有时候也称为软件包管理器。可按如下步骤打开软件包管理器:

(1)单击【启动程序】按钮,Linux出现【启动程序】菜单;

(2)单击【系统设置】|【添加/删除应用程序】菜单项,Linux出现【软件包管理】窗口。

由打开【软件包管理】窗口的过程可以看出,Red Hat Linux 9在软件包管理器的名称上出现了不一致,在菜单中称为【添加/删除应用程序】,但是在窗口中称为【软件包管理】。Red Hat公司为了迎合这些用户的使用习惯,从其Red Hat Linux 9版本开始就在【启动程序】菜单中将【软件包管理器】命名为【添加/删除应用程序】。

【软件包管理器】窗口如图3-1所示。该图表明系统已经安装了桌面系统的三个程序,分别是X Window窗口系统、GNOME桌面环境、KDE桌面环境;应用程序中显示了已经安装了编辑器类软件,但是没有安装工程与科学类软件。同时还显示了这个操作系统已经占有的磁盘空间。

图3-1 【软件包管理器】窗口

● 添加Linux软件包:如果Linux没有安装某个组件,或者Linux没有安装某个组件的全部软件包而用户希望安装该组件的更多软件包,则可通过【软件包管理器】安装想要的软件包。如图3-1所示系统,其没有安装【工程和科学】软件包组件,若欲安装该类组件,可以选中【工程和科学】复选框,Linux重新计算操作系统所占磁盘大小,并且【更新(U)】按钮变得可以使用。单击“细节”链接可以更改需要安装组件的软件包配置,单击【更新(U)】按钮,系统开始更新前的软件依赖性检查,Red Hat称之为筹备系统更新,如图3-2所示。

图3-2 更新前的软件依赖性检查

如果检查依赖性没有出现问题,Linux将显示可以安装的RPM软件包数量和安装所需占用的磁盘空间,如图3-3所示。单击【继续(T)】按钮系统将自动完成所有安装工作。

图3-3 显示可以安装的RPM软件包数量和安装所需占用的硬盘空间

● 删除Linux软件包:如果Linux显示某个组件已经安装,用户欲删除该组件或该组件下某些软件包,也可以使用【软件包管理器】。例如,图3-1所示的系统已经安装了编辑器组件的两个软件包,如果不选中【编辑器】复选框,然后直接单击【更新(U)】按钮,系统将直接删除编辑器组件中所有已经安装软件包。若用户只想删除编辑器组件中已经安装的某个软件包,如Emacs,可以单击“细节”链接,系统显示编辑器软件包细节,如图3-4 所示。该图表明系统已经安装了Emacs和vim-enhanced两个软件包,单击【Emacs】复选框,使其不选中,再单击【关闭】按钮,回到如图3-1 所示【软件包管理器】窗口,单击【更新(U)】按钮系统将删除Emacs软件包。

图3-4 编辑器软件包细节

3.2 RPM软件包的密钥管理(实务5)

数字签名(Digital Signature)是一种身份认证技术。软件包增加数字签名后,其他用户可以通过校验其签名辨其真伪,从而判断软件包是否原装和是否被修改过。RPM采用的数字签名为PGP数字签名。PGP(Pretty Good Privacy)是一个公钥加密程序,应用时要产生一个密钥对,一个为公开密钥(对外公开),一个为私密密钥(自己保留)。私密密钥加密的文件任何有相应公开密钥的人均可解密,而用公开密钥加密的文件只有持有私密密钥的人才可以解密。使用PGP公钥加密法,用户可以广泛传播公钥,同时安全地保存好私钥。由于只有用户自己拥有私钥,因此任何人都可以用用户的公钥加密写给用户的信息,并可以直接在不安全通道上传输,而不用担心信息被窃听。

3.2.1 下载与安装PGP

PGP应用程序可以从http://www.pgpi.org/products/pgp/versions/freeware/unix/网站下载得到。Linux版本的下载文件为PGPcmdln_6.3.8.Lnx_FW.rpm.tar,可用下面的命令解压此软件包,并安装PGP:

        //将安装软件包tar文件解包
        # tar xvzf PGPcmdln_6.3.8.Lnx_FW.rpm.tar
        PGPcmdln_6.3.8_Lnx_FW.rpm
        PGPcmdln_6.3.8_Lnx_FW.rpm.sig
        WhatsNew.htm
        WhatsNew.txt
        //显示解包后的文件列表
        # ll
        总用量 2899
        -rwx------1 root  root  2955703   6月 15 23:24 PGPcmdln_6.3.8_Lnx_FW.rpm
        -rwx------1 root   root      66  6月 15 23:24 PGPcmdln_6.3.8_Lnx_FW.rpm.sig
        -rwx------1 root  root  2958462 6月 15 23:20 PGPcmdln_6.3.8.Lnx_FW.rpm.tar
        -rwx------1 root  root    10981   6月 15 23:24 WhatsNew.htm
        -rwx------1 root  root      8758  6月 15 23:24 WhatsNew.txt
        //安装PGPcmdln
        # rpm -iv PGPcmdln_6.3.8_Lnx_FW.rpm
        Preparing packages for installation...
        pgp-6.3.8-rsaref658

3.2.2 RPM使用PGP产生签名所需的配置

生成PGP密钥对,用pgp -kg命令来产生新的密钥对用于签名,下面是部分程序运行显示结果:

        #pgp -kg
        Pretty Good Privacy(tm) Version 6.3.8
        (c) 1999 Network Associates Inc.
        Uses the RSAREF(tm) Toolkit,which is copyright RSA Data Security,Inc.
        Export of this software may be restricted by the U.S. government.
        ...

在该过程中,系统需要用户输入一些配置信息,例如加密算法、主密钥长度、设置用户标志等,用户可以安装提示输入相关内容。密钥生成后,PGP会在用户主目录下建立一个.pgp的子目录,用于存放密钥相关的文件。下例列出了root用户.pgp子目录下的文件:

        # ls ~/.pgp
        total 32
        -rw-------1 root root 2117 Nov 8 17:10 PGPMacBinaryMappings.txt
        -rw-------1 root root 146 Nov 8 17:10 PGPgroup.pgr
        -rw-------1 root root 151 Nov 8 17:12 PGPsdkPreferences
        -rw-------1 root root0 Nov 8 17:10 pgp.cfg
        -rw-------1 root root0 Nov 8 17:10 pubring-bak-1.pkr
        -rw-------1 root root 897 Nov 8 17:12 pubring-bak-2.pkr
        -rw-------1 root root 897 Nov 8 17:12 pubring.pkr
        -rw-------1 root root 512 Nov 8 19:34 randseed.rnd
        -rw-------1 root root0 Nov 8 17:10 secring-bak-1.skr
        -rw-------1 root root 984 Nov 8 17:12 secring-bak-2.skr
        -rw-------1 root root 984 Nov 8 17:12 secring.skr

上述文件中,pubring.pkr为公开密钥文件,secring.skr为私密密钥文件。

3.2.3 配置RPM宏

RPM如果需要使用PGP数字签名的功能,必须在/usr/lib/rpm/macros宏文件或者在用户主目录下的~/.rpmmacros文件中设置以下几个宏:

● _signature:此宏定义数字签名的类型,此类型只有一个pgp,RPM仅支持这一种数字签名类型。其定义为:%_signature pgp;

● _pgpbin:此宏定义PGP执行程序名。其定义为:%_pgpbin /usr/bin/pg;

● _pgp_name:此宏定义使用哪个PGP用户的公开密钥进行签名处理(PGP可建立属于多个用户的密钥对)。其定义格式为:%_pgp_name yourname youremail。举个例子:%_pgp_name中关村username@163.com;

● pgp_path:此宏定义RPM使用的签名所在的目录,如:%_pgp_path /root/.pgp。该宏定义RPM使用/root/.pgp目录下的签名。

3.2.4 使用RPM的PGP签名选项

RPM的PGP签名主要包括如下两个选项。

● --resign:本选项用于为RPM软件包重新签名。如果原包没有数字签名,则为其添加签名;如果已有签名,则旧的签名将统统删除,之后再添加新的签名。其用法为:

        rpm --resign包裹文件1 [包裹文件2]…

● --addsign:本选项用于为RPM软件包添加数字签名(一个软件包可以有多个数字签名)。用法为:

        rpm --addsign包裹文件1 [包裹文件2]…

3.2.5 添加数字签名

数字签名也可以在建包时添加,这时须使用--sign选项。-checksig:该选项用于校验RPM包的数字签名等内容,看其是否正常。用法为:

        rpm--checksig [--nopgp] [--nogpg] [--nomd5] [--rcfile资源文件] 包裹文件 1
    序列

可选项中,--nopgp选项指示RPM不校验PGP签名,--nogpg选项指示RPM不校验GPG签名,--nomd5选项指示RPM不校验MD5检查和,--rcfile选项则用于指定RPM所利用的资源配置文件。

        # rpm --checksig lze-6.0-2.i386.rpm
        Pretty Good Privacy(tm) Version 6.3.8
        (c) 1999 Network Associates Inc.
        Uses the RSAREF(tm) Toolkit,which is copyright RSA Data Security,Inc.Export
    of this software may be restricted by the U.S. government.lze-6.0-2.i386.rpm:
    pgp md5 OK

本例子为lze软件包添加数字签名,输入密码为MYPASS。此处校验lze包的签名时,RPM显示pgp校验OK和md5校验OK,这表明lze包一切正常。

3.3 管理TAR包(实务6)

TAR命令是Linux下最常用的文件打包工具,可以将若干文件或若干目录下打包成一个文件,既有利于文件管理,也方便压缩和文件的网络传输。TAR可以为文件和目录创建档案。利用TAR,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。

3.3.1 TAR命令语法及参数选项

TAR命令使用语法如下:

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

其中,主选项是必需的,表明tar命令要完成的操作,辅选项是辅助使用的,可以有也可以没有。下面列出常用的主选项,并简要说明其功能:

● -A,--catenate,--concatenate:将若干个tar文件合并成一个tar文件;

● -c,--create:创建一个新的tar文件;

● -d,--diff,--compare:比较tar文件或文件系统的不同之处;

● --delete:从tar文件中删除文件,但不能从磁带文件删除;

● -r,--append:在tar文件尾部追加文件;

● -t,--list:显示tar文件内容;

● -u,--update:更新tar文件;

● -x,--extract,--get:从tar文件中取出文件。

每次使用tar命令时,上述8个命令参数选项必须选择一个,用以指明操作类型。下面列出tar命令的辅参数选项如下:

● --atime-preserve:转储文件时不改变文件的访问时间;

● -b,--block-size N:指定块大小;

● -B,--read-full-blocks:整块读;

● -C,--directory DIR:改变目录;

● --checkpoint:当读取tar文件时显示目录名;

● -f,--file [HOSTNAME:]F:使用tar文件还是设备;

● --force-local:表明tar文件是本地磁盘文件,即使含有冒号;

● -F,--info-script F --new-volume-script F:每处理完一卷磁带后显示信息;

● -G,--incremental:增量备份;

● -g,--listed-incremental F:增量备份;

● -h,--dereference:不转储符号链接。

● -i,--ignore-zeros:忽略tar文件中的0;

● -j,-I,--bzip:用bzip格式压缩;

● --ignore-failed-read:遇到不可读文件时不退出;

● -k,--keep-old-files:不覆盖tar文件中原有文件;

● -K,--starting-file:起始文件;

● -l,--one-file-system:创建tar文件时不转移文件系统;

● -L,--tape-length N:指明磁带长度;

● -m,--modification-time:解包文件时不取出更改时间;

● -M,--multi-volume:是否操作多卷文件;

● -N,--after-date DATE,--newer DATE:指明打包文件的最早时间;

● -o,--old-archive,--portability:指明文件格式是V7还是ANSI;

● -O,--to-stdout:取出文件到标志输出;

● -p,--same-permissions,--preserve-permissions:取出文件所有权限信息;

● -P,--absolute-paths:指明按绝对路径操作;

● --preserve:保留文件的权限信息和文件顺序;

● -R,--record-number:显示记录号;

● --remove-files:把文件加入到tar文件后即删除原文件;

● -s,--same-order,--preserve-order:保持文件间顺序;

● --same-owner:保留文件的owner信息;

● -S,--sparse:有效处理稀疏文件;

● -T,--files-from=F:获取解包出来的文件名;

● --null:读取以NULL结束的名称;

● --totals:显示创建的tar文件大小;

● -v,--verbose:显示处理文件的详细信息;

● -V,--label NAME:指明创建的tar文件名;

● --version:显示tar版本;

● -V,--label NAME:指明tar文件名;

● --version:显示tar程序版本;

● -w,--interactive,--confirmation:每一步操作都要用户确定;

● -W,--verify:创建文件后验证文件正确性;

● --exclude FILE:排除对某个文件的操作;

● -X,--exclude-from FILE:排除文件集合;

● -Z,--compress,--uncompress:压缩或解压缩;

● -z,--gzip,--ungzip:用gzip压缩或解压缩文件;

● --use-compress-program PROG:使用其他压缩程序。

3.3.2 创建tar文件

创建一个tar文件要使用主参数选项c,并指明创建tar文件的文件名。下面假设当前目录下有smart和xplns两个子目录以及cpuinfo.txt、smart.txt、tar.txt和tar_create.txt四个文件,smart目录下有smartsuite-2.1-2.i386.rpm文件,xplns目录下有xplns-cat-3.3.1-1、i386.rpm,xplns-elm-3.3.1-1.i386.rpm和xplns-img-3.3.1-1.i386.rpm三个文件。用ll -r命令显示当前目录下的文件信息如下:

        #ll -r ./*
        -rwx------1 root    root    7433   6月 12 21:25 ./tar.txt
        -rwx------1 root    root     226   6月 12 21:25 ./tar_create.txt
        -rwx------1 root    root      26   6月 12 21:25 ./smart.txt
        -rwx------1 root    root      26   6月 12 21:25 ./cpuinfo.txt
        ./xplns:
        总用量 1613
        -rwx------1 root   root     793828  6月 12 21:26 xplns-img-3.3.1-1.i386.rpm
        -rwx------1 root   root     572471  6月 12 21:26 xplns-elm-3.3.1-1.i386.rpm
        -rwx------1 root   root   1933576   6月 12 21:26 xplns-cat-3.3.1-1.i386.rpm
        ./smart:
        总用量 17
        -rwx------1 root    root   34475    6月 12 21:25 smartsuite-2.1-2.i386.rpm

若要在该目录下将所有文件打包成gong.tar文件,可以使用如下命令:

         //将当前目录下所有文件打包成gong.tar
        //参数c指明创建tar,
         //参数f指明是创建文件
         //参数v指明显示处理详细过程
         # tar cvf gong.tar ./*
        ./cpuinfo.txt
        ./smart/
        ./smart/smartsuite-2.1-2.i386.rpm
        ./smart.txt
        ./tar_create.txt
        ./tar.txt
        ./xplns/
        ./xplns/xplns-cat-3.3.1-1.i386.rpm
        ./xplns/xplns-elm-3.3.1-1.i386.rpm
        ./xplns/xplns-img-3.3.1-1.i386.rpm
        //显示当前目录下所有文件,从显示结果可以发现,当前目录下多了一个gong.tar文件,就是由
         //刚才tar命令生成的
         #ll
        总用量 4927
        -rwx------   1 root    root     3358720   6月 12 19:35 cpuinfo.txt
        -rwx------   1 root    root     6717440   6月 12 19:36 gong.tar
        drwx------   1 root    root          0    6月  8 21:37 smart
        -rwx------   1 root    root          26   6月  8 21:37 smart.txt
        -rwx------   1 root    root         226   6月 12 19:32 tar_create.txt
        -rwx------   1 root    root        7433   6月 12 17:13 tar.txt
        drwx------   1 root    root        4096   6月 12 19:34 xplns

3.3.3 显示tar文件内容

对于一个已存在的tar文件,用户可能想了解其内容,即该文件是由哪些文件和目录打包而来的,这就要用带t参数的tar命令。例如对于3.2.3节所述产生的gong.tar文件,若欲显示其文件内容,可使用如下命令:

         # tar tf gong.tar           //显示gong.tar文件内容
         ./cpuinfo.txt
        ./smart/
        ./smart/smartsuite-2.1-2.i386.rpm
        ./smart.txt
        ./tar_create.txt
        ./tar.txt
        ./xplns/
        ./xplns/xplns-cat-3.3.1-1.i386.rpm
        ./xplns/xplns-elm-3.3.1-1.i386.rpm
        ./xplns/xplns-img-3.3.1-1.i386.rpm

3.3.4 向tar文件中添加一个文件

欲向已存在的一个tar文件中添加一个文件或目录,可以使用带-r主选项参数的tar命令,例如欲向3.2.3节所述产生的gong.tar文件中添加tar_t.txt文件,可以使用如下步骤。

(1)在文件gong.tar图标上右键单击鼠标,系统显示快捷菜单,如图3-5所示。

图3-5 向tar文件中添加文件的快捷菜单

(2)单击【添加到压缩文件】菜单项,系统将显示【添加文件或文件夹】对话框,如图3-6所示,在对话框中输入欲加入的文件或文件夹,或者单击【浏览(B)】按钮选择某个文件或文件夹,若选中【仅添加新文件(N)】复选框,则当添加的文件或文件夹在tar文件中已经存在时,系统就不加入该文件或文件夹。单击【增加(A)】按钮即可完成添加工作。

图3-6 添加文件或文件夹对话框

3.3.5 从tar文件中取出文件

在已经存在的tar文件中解包,可以使用带主选项参数-x的tar命令实现。下面以3.2.3节所述产生的gong.tar文件为例,说明带主选项参数-x的tar命令的用法。

         //首先显示当前目录下文件列表,由显示结果可见,
         //当前目录下只有一个文件gong.tar。
         #ll
        总用量 3280
        -rwx------   1 root    root      6717440  6月 12 21:12 gong.tar
        //对当前目录下gong.tar文件解包
         #tar xvf gong.tar
        ./cpuinfo.txt
        ./smart/
        ./smart/smartsuite-2.1-2.i386.rpm
        ./smart.txt
        ./tar_create.txt
        ./tar.txt
        ./xplns/
        ./xplns/xplns-cat-3.3.1-1.i386.rpm
        ./xplns/xplns-elm-3.3.1-1.i386.rpm
        ./xplns/xplns-img-3.3.1-1.i386.rpm
        //再显示解包后当前目录下所有文件
         //由显示结果可以看出,tar文件中所有文件均已解出
         #ll
        总用量 4927
        -rwx------  1 root    root    3358720   6月 12 21:13 cpuinfo.txt
        -rwx------  1 root    root    6717440   6月 12 21:12 gong.tar
        drwx------  1 root    root          0   6月 12 21:13 smart
        -rwx------  1 root    root         26   6月 12 21:13 smart.txt
        -rwx------  1 root    root        226   6月 12 21:13 tar_create.txt
        -rwx------  1 root    root       7433   6月 12 21:13 tar.txt
        drwx------  1 root    root       4096   6月 12 21:13 xplns

3.4 管理压缩包(实务7)

Linux下的压缩工具有很多,下面列出Linux下常用的压缩工具及其产生文件的后缀:

● gzip/gunzip:后缀名为.gz;

● compress/uncompress:后缀名为.Z;

● zip/unzip:后缀名为.zip;

● bzip2/bunzip2:后缀名为.bz2;

● lha:后缀名为.lzh。

Linux下压缩工具中最常用的包括gzip、zip和bzip2三种,下面分别讲述这三种最常用的压缩工具。

3.4.1 gzip压缩

对文件进行压缩的目的有两个:一是可以减少存储空间;二是通过网络传输文件时,可以减少传输的网络开销。gzip是Linux最常用的软件压缩工具,在Linux终端输入man gzip命令降显示gzip的帮助文档。

该命令的使用形式为:gzip[选项]压缩或解压缩的文件名。

该命令的主要参数选项有:

● -c:将输出写到标准输出上,并保留原有文件;

● -d:将压缩文件解压;

● -l:对每个压缩文件,显示字段:压缩文件的大小,未压缩文件的大小,压缩比和未压缩文件的名字;

● -r:递归地查找指定目录并压缩其中的所有文件或者是解压缩;

● -t:测试,检查压缩文件是否完整;

● -v:对每一个压缩和解压的文件,显示文件名和压缩比;

● -num:用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢压缩方法(高压缩比)。系统默认值为6。

(1)用gzip压缩文件:下面给出使用gzip命令压缩文件的例子:

         //显示当前目录先所有文件
         #ll
        总用量 5
        -rwx------   1 root    root          26  6月 13 22:16 smart.txt
        -rwx------   1 root    root         226  6月 13 22:16 tar_create.txt
        -rwx------   1 root    root        7433  6月 13 22:16 tar.txt
        //压缩当前目录下的所有文件,并且显示压缩比,显示已经替代原来的文件
        #gzip -v *   //-v参数表明显示压缩比和文件名
        smart.txt:        0.0% -- replaced with smart.txt.gz
        tar_create.txt:  43.8% -- replaced with tar_create.txt.gz
        tar.txt:         68.3% -- replaced with tar.txt.gz
        //再显示当前目录所有文件
         //可以发现所有文件都压缩成了gz文件
         #ll
        总用量 3
        -rwx------   1 root    root          54  6月 13 22:17 smart.txt.gz
        -rwx------   1 root    root         160  6月 13 22:17 tar_create.txt.gz
        -rwx------   1 root    root        2385  6月 13 22:17 tar.txt.gz

注意

gzip只能对单个文件压缩,不能像Winzip和Winrar一样,可以将多个文件压缩成一个.zip文件或.rar文件。正因为如此,Linux才提供了tar命令,用于将若干文件或文件夹打包成一个文件,然后再压缩成一个.gz文件。

(2)用gzip解压缩文件:下面给出用gzip解压缩文件的例子:

        //显示当前目录下所有文件,从显示结果可以看出,
        //当前目录下有三个压缩文件
        # ll
        总用量 3
        -rwx------   1 root   root         54  6月 13 22:26 smart.txt.gz
        -rwx------   1 root   root         160  6月 13 22:26 tar_create.txt.gz
        -rwx------   1 root   root       2385  6月 13 22:26 tar.txt.gz
        //对当前目录下所有压缩的文件解压,并列出详细的信息。
        #gzip -dv *
        smart.txt.gz:            0.0% -- replaced with smart.txt
        tar_create.txt.gz:      43.8% -- replaced with tar_create.txt
        tar.txt.gz:              68.3% -- replaced with tar.txt
        //再显示当前目录下的所有文件,从显示结果看出,
        //所有的.gz压缩文件都已经解压缩了
        # ll
        总用量 5
        -rwx------   1 root     root          26  6月 13 22:22 smart.txt
        -rwx------   1 root     root         226  6月 13 22:22 tar_create.txt
        -rwx------   1 root     root        7433  6月 13 22:22 tar.txt

(3)显示压缩文件的内容信息:可以用带-l参数的gzip命令显示gz文件的内容。这只是显示文件内容,并不实际解压缩文件。

        # gzip -l *
        compressed       uncompressed    ratio   uncompressed_name
            54                26         0.0%     smart.txt
            160               226        43.8%    tar_create.txt
            2385              7433       68.3%    tar.txt
            2599              7685       66.5%   (totals)

(4)在tar命令中嵌入压缩命令:在tar命令中就可以直接嵌入gzip命令,从而直接将若干文件或文件夹处理成一个.tar.gz文件。在这个处理过程中,系统先将若干文件或文件夹打包成.tar,然后将生成的.tar文件压缩成.tar.gz文件。先举例如下:

        //显示当前目录下所有文件
        #ll
        -rwx------   1 root     root          26  6月 13 22:51 smart.txt
        -rwx------   1 root     root         226  6月 13 22:51 tar_create.txt
        -rwx------   1 root     root        7433  6月 13 22:51 tar.txt
        //将当前目录下所有文件打包并压缩成gong.tar.gz并显示处理进度
        # tar cvfz gong.tar.gz  ./*
        ./smart.txt
        ./tar_create.txt
        ./tar.txt
        //再显示当前目录下所有文件,
        //从显示结果可以看出,已经产生了gong.tar.gz文件
        #ll
        总用量 7
        -rwx------   1 root     root        2704  6月 13 22:59 gong.tar.gz
        -rwx------   1 root     root          26  6月 13 22:51 smart.txt
        -rwx------   1 root     root         226  6月 13 22:51 tar_create.txt
        -rwx------   1 root     root        7433  6月 13 22:51 tar.txt

3.4.2 zip/unzip压缩

zip程序位于/usr/bin目录中,可将文件压缩成.zip文件以节省硬盘空间,而当需要的时候又可将压缩文件解压缩。unzip命令用于将压缩文件解压。

(1)用zip命令压缩文件或文件夹

在Linux下输入man zip,系统显示zip的帮助文档。

zip命令的使用形式为:zip[选项]压缩后文件名 待压缩文件或文件夹。

其中:参数选项表明要完成的操作类型,压缩后的文件名是某个合法的文件名,其后缀为zip,待压缩文件或文件夹指明需要进行压缩的文件或文件夹,可以是多个文件或文件夹。zip命令的参数选项如下:

● -1:最快压缩,压缩率最差;

● -9:最大压缩,压缩率最佳;

● -b:暂存文件的路径。该参数常用于zip文件存在而硬盘现有空间不足时;

● -c:替新增或更新的文件增加一行注解;

● -d:从zip文件移出一个文件;

● -D:不要在zip文件中储存文件的目录信息;

● -f:以新文件取代现有文件;

● -F:修复已经损毁的压缩文件;

● -g:将文件压缩附加到zip文件中;

● -h:显示辅助说明;

● -i:指定要加入的某些特定文件;

● -j:只储存文件的名称,不含目录;

● -k:强迫使用MSDOS格式文件名;

● -L:显示zip命令的版权;

● -m:将特定文件移入zip文件中,并且删除特定文件;

● -n:不压缩特定扩展名的文件;

● -o:将zip文件的时间设成最后修正zip文件的时间;

● -q:安静模式,不会显示相关信息和提示;

● -r:包括子目录;

● -t:只处理mmddyy日期以后的文件;

● -T:测试zip文件是否正常;

● -u:只更新改变过的文件和新文件;

● -v:显示版本信息或详细资料;

● -x:不需要压缩的文件;

● -y:将symbolic link压缩,而不是压缩所连接到的文件;

● -z:为zip文件增加注解;

● -#:设定压缩速度。-0表示不压缩,-1表示最快速度的压缩,-9表示最慢速度的压缩(最佳化的压缩)。预设值为-6;

● -@:从标准输入读取文件名称。

注意

使用zip命令可以将许多文件压缩成一个文件,这与gzip是有区别的。

下面给出使用该命令压缩文件或文件夹的例子:

        //显示当前目录下所有文件和文件夹
        #ll
        总用量 9
        drwx------   1 root     root        4096   6月 15 19:45 gzip
        drwx------   1 root     root           0   6月 12 21:25 smart
        -rwx------   1 root     root          26   6月 13 22:51 smart.txt
        -rwx------   1 root     root         226   6月 13 22:51 tar_create.txt
        -rwx------   1 root     root        7433   6月 13 22:51 tar.txt
        drwx------   1 root     root        4096   6月 13 22:13 xplns
        //将当前目录下的所有文件和文件夹全部压缩成gong.zip压缩文件
        //显示压缩过程中每个文件的压缩比
        //-r表示递归压缩子目录下所有文件
        # zip -r gong.zip ./*
        adding: gzip/ (stored 0%)
        adding: gzip/gong.tar.gz (stored 0%)
        adding: smart/ (stored 0%)
        adding: smart/smartsuite-2.1-2.i386.rpm (deflated 5%)
        adding: smart.txt (stored 0%)
        adding: tar_create.txt (deflated 44%)
        adding: tar.txt (deflated 68%)
        adding: xplns/ (stored 0%)
        adding: xplns/xplns-cat-3.3.1-1.i386.rpm.gz (deflated 0%)
        adding: xplns/xplns-elm-3.3.1-1.i386.rpm.gz (deflated 0%)
        adding: xplns/xplns-img-3.3.1-1.i386.rpm.gz (deflated 0%)
        //再显示当前目录下所有文件
         //可以发现压缩文件gong.zip已经生成
         #ll
        总用量 1621
        -rwx------1 root        root        3301222 6月 15 19:49 gong.zip
        drwx------1 root        root        4096    6月 15 19:45 gzip
        drwx------1 root        root           0    6月 12 21:25 smart
        -rwx------1 root        root          26    6月 13 22:51 smart.txt
        -rwx------1 root        root         226    6月 13 22:51 tar_create.txt
        -rwx------1 root        root        7433    6月 13 22:51 tar.txt
        drwx------1 root        root        4096    6月 13 22:13 xplns

用带-v参数选项可以查看zip文件的内容,这点类似于带t参数选项的tar命令。只不过前者用于显示压缩的zip文件的内容,后者用于显示tar文件的内容。与带t参数选项的tar命令类似,带v参数选项的zip命令也不实际解压缩文件。用带-v参数选项的zip命令举例如下:

      //显示当前目录下所有文件,从显示结果可以看出,当前目录下只有一个gong.zip文件
      # ll
      总用量 1612
      -rwx------   1 root    root     3301222  6月 15 19:49 gong.zip
      //查看gong.zip文件的内容
      # zip -v gong.zip
      zip info: local extra (21 bytes) != central extra (13 bytes): gzip/
      zip info:local extra(21 bytes)!=central extra(13 bytes):gzip/gong.tar.gz
      zip info: local extra (21 bytes) != central extra (13 bytes): smart/
      zip info: local extra (21 bytes) != central extra (13 bytes): smart.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): xplns/

用带-d参数选项的zip命令可以从zip压缩文件中删除某个文件,而使用带-m的zip命令可以向zip压缩文件添加某个文件,对带-d和-m参数选项的zip命令举例如下:

         # zip -v gong.zip           //显示压缩文件gong.zip的文件内容
         zip info: local extra (21 bytes) != central extra (13 bytes): free.txt
        zip info: local extra (21 bytes) != central extra (13 bytes): smart.txt
        zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt
        zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt
        //删除压缩文件中smart.txt文件
      # zip -d gong.zip smart.txt
      deleting: smart.txt
      //再显示压缩文件内容,可以发现文件删除成功
      # zip -v gong.zip
      zip info: local extra (21 bytes) != central extra (13 bytes): free.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt
      //向压缩文件中gong.zip中添加rpm_info.txt文件
      # zip -m gong.zip ./rpm_info.txt
      adding: rpm_info.txt (deflated 75%)
      //再显示压缩文件内容,可以发现文件添加成功
      # zip -v gong.zip
      zip info: local extra (21 bytes) != central extra (13 bytes): free.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): tar_create.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): tar.txt
      zip info: local extra (21 bytes) != central extra (13 bytes): rpm_info.txt

(2)用unzip命令解压缩文件

unzip命令用于扩展名为zip的压缩文件的解压缩,同时,Windows下用压缩软件Winzip压缩的文件在Linux系统下也可以用unzip命令解压缩。unzip命令的语法如下:

      unzip [参数选项] 压缩文件名.zip。

所有参数选项如下:

● -x:文件列表:解压缩文件,但不包括指定的file文件;

● -v:查看压缩文件目录,但不解压缩;

● -t:测试文件有无损坏,但不解压缩;

● -d:目录:把压缩文件解压缩到指定目录下;

● -z:只显示压缩文件的注解;

● -n:不覆盖已经存在的文件;

● -o:覆盖已存在的文件且不要求用户确认;

● -j:不重建文档的目录结构,把所有文件解压缩到同一目录下。

unzip命令的常用用法有以下三种。

① 简单解压缩文件:将压缩文件解压缩到当前目录下;

      //显示当前目录下所有文件,从显示结果可以发现当前目录下只有一个文件gong.zip
      # ll
      总用量 7
      -rwx------   1 root    root       13512  6月 15 20:44 gong.zip
      //将gong.zip解压缩到当前目录
      # unzip gong.zip
      Archive:  gong.zip
      inflating: free.txt
      inflating: tar_create.txt
      inflating: tar.txt
      inflating: rpm_info.txt
      //再显示当前目录下所有文件,从显示结果可以发现,
      //gong.zip压缩文件中所有文件已经成功解压缩到当前目录
      # ll
      总用量 32
      -rwx------   1 root    root         230  6月 15 21:03 free.txt
      -rwx------   1 root    root       13512  6月 15 20:44 gong.zip
      -rwx------   1 root    root       40833  6月 15 21:03 rpm_info.txt
      -rwx------   1 root    root         226  6月 15 21:03 tar_create.txt
      -rwx------   1 root    root        7433  6月 15 21:03 tar.txt

② 解压缩文件到指定目录:将压缩文件解压缩到指定的目录下,如果已有相同的文件存在,unzip命令不覆盖原来的文件。

      //解压缩当前目录下的text.zip压缩文件,
      //-n参数选项指明不覆盖原有文件
      //-d /tmp指明将文件解压缩到/tmp目录下
      #unzip -n text.zip -d /tmp

③ 查看压缩文件目录:类似于带-v参数的zip命令,只显示压缩文件内容,并不实际解压缩文件。

      #unzip -v text.zip      //显示当前目录下text.zip压缩文件内容

3.4.3 bzip2压缩

bzip2是一个无损压缩软件,具有高质量的数据压缩能力。它能将文件压缩到原来的10%~15%,而且压缩速度和解压缩速度都非常高,因此在Linux下得到广泛使用。

bzip2从命令行读入文件名和参数,每个文件都被名为“原始文件名.bz2”的压缩文件替换。每个压缩文件都具有与原文件相同的修改时间和权限,如果可能的话,还具有相同的属主,因此在解压缩时这些特性将正确地恢复。

(1)bzip2命令参数选项

● -c:将数据压缩或解压缩至标准输出。

● -d:强制解压缩。bzip2、bunzip2和bzcat实际上是同一个程序,进行何种操作将根据程序名确定。指定该选项后将不考虑这一机制,强制bzip2解压缩。

● -z:和-d选项类似,强制进行压缩操作,而不管输入的是哪个程序名。

● -t:检查指定文件的完整性,但并不对其解压缩。实际上是对数据进行实验性的解压缩操作,而不输出结果。

● -f:强制覆盖输出文件。通常bzip2不会覆盖已经存在的文件。该选项还强制bzip2打破文件的硬链接,默认情况下bzip2不会这么做。

● -k:在压缩或解压缩时保留输入文件(不删除这些文件)。

● -s:在压缩、解压缩及检查时减少内存用量。采用一种修正的算法进行压缩和测试,每个数据块仅需要2.5个字节。这意味着任何文件都可以在2300KB的内存中进行解压缩,尽管速度只有通常情况下的一半。在压缩时,-s将选定200KB的块长度,内存用量也限制在200KB左右,代价是压缩率会降低。总之,如果机器的内存较少(8MB或更少),则可对所有操作都采用-s选项。

● -q:压制不重要的警告信息。属于I/O错误及其他严重事件的信息将不会被压制。

● -v:详尽模式--显示每个被处理文件的压缩率。命令行中更多的-v选项将增加详细的程度,使bzip2显示出许多主要用于诊断目的信息。

● -L:显示软件版本,许可证条款及条件。

● -1to-9:在压缩时将块长度设为100KB、200KB、900KB。对解压缩没有影响。

(2)用bzip2命令压缩文件

      //显示当前目录下所有文件
      # ll
      总用量 32
      -rwx------   1 root    root         230  6月 15 22:06 free.txt
      -rwx------   1 root    root       13512  6月 15 22:06 gong.zip
      -rwx------   1 root    root       40833  6月 15 22:06 rpm_info.txt
      -rwx------   1 root    root         226  6月 15 22:06 tar_create.txt
      -rwx------   1 root    root        7433  6月 15 22:06 tar.txt
      //用bzip2命令压缩当前目录下所有文件
      //用bunzip2-z * 将获得相同的效果
      #bzip2 *
      //再显示当前目录下所有文件
      //从显示结果可以看出,所有文件都压缩成了原文件名加bz2后缀的形式
      # ll
      总用量 15
      -rwx------   1 root    root         157  6月 15 22:06 free.txt.bz2
      -rwx------   1 root    root       13824  6月 15 22:06 gong.zip.bz2
      -rwx------   1 root    root        9366  6月 15 22:06 rpm_info.txt.bz2
      -rwx------   1 root    root         165  6月 15 22:06 tar_create.txt.bz2
      -rwx------   1 root    root        2326  6月 15 22:06 tar.txt.bz2

(3)用bunzip2命令解压缩文件

      //显示当前目录下所有文件
      # ll
      总用量 15
      -rwx------   1 root    root        230  6月 15 22:17 free.txt
      -rwx------   1 root    root      13824  6月 15 22:17 gong.zip.bz2
      -rwx------   1 root    root       9366  6月 15 22:17 rpm_info.txt.bz2
      -rwx------   1 root    root        165  6月 15 22:17 tar_create.txt.bz2
      -rwx------   1 root    root       2326  6月 15 22:17 tar.txt.bz2
      //用bunzip2命令解压缩当前目录下所有文件
      //其中有一个文件free.txt不是以bz2为后缀
      //从显示结果可以看出,对free.txt文件解压缩时报错
      # bunzip2 *
      bunzip2: Can't guess original name for free.txt -- using free.txt.out
      bunzip2: free.txt is not a bzip2 file.
      //再显示当前目录下所有文件,从显示结果可以看出
      //所有bz2文件都解压缩成功
      # ll
      总用量 32
      -rwx------   1 root    root         230  6月 15 22:17 free.txt
      -rwx------   1 root    root       13512  6月 15 22:18 gong.zip
      -rwx------   1 root    root       40833  6月 15 22:18 rpm_info.txt
      -rwx------   1 root    root         226  6月 15 22:18 tar_create.txt
      -rwx------   1 root    root        7433  6月 15 22:18 tar.txt