资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,12,章 软件安装和内核升级,本章讨论了在,Linux,系统中,RPM,和编译安装两种方式的优缺点,介绍了,apt,自动化包管理的方法,讨论了软件包的编译安装方式。最后就升级内核和核心编译的方法进行了介绍。,12.1,软件安装与升级,在,Linux,系统中最常见的软件安装程序有两种:,一种是软件的源代码,需要自己动手编译它。这种软件安装包通常是用,gzip,压缩过的,tar,包(后缀为,.,tar.gz,)。,另一种是软件的可执行程序,RPM,包,后缀为,.rpm,。,RPM,是,RedHat,公司开发的软件包管理器,使用它可以很容易地对,RPM,形式的软件包进行安装、升级、卸载、验证、查询等操作,安装简单,卸载时也可以将软件安装在多处目录中的文件删除干净,因此推荐初学者尽可能使用,RPM,形式的软件包。,12.1.1,使用预编译的,RPM,管理程序,配合,RPM,包使用的管理程序被相应地命名为,rpm,。,rpm,以多种不同的模式运行,不过最常见的任务是安装、升级、查询、验证和删除。,因为需要访问文件系统和,rpm,数据库,,rpm,的安装和删除必须以,root,身份执行。,常用的,rpm,命令参数,rpm-,ivh,wget-1.9.1-20.i386.rpm /,安装当前目录下的,wget-1.9.1-20.i386.rpm,rpm-e,wget,/,删除已经安装的,wget,,这里只需要输入包名,rpm-,qf,/bin/bash /,显示,/bin/bash,文件属于哪个,rpm,包,rpm-,Uvh,wget-1.2-1.i386.rpm /,升级,wget,,原有配置被保留,rpm-,qpi,wget-1.2-1.i386.rpm /,显示当前目录下未安装的该,.rpm,文件的包头信息,rpm-,ql,wget,/,显示已安装的,wget,包内所有的文件,rpm-,qpl,wget-1.2.1-1.i386.rpm /,显示当前目录下未安装的该,rpm,文件内包含的所有文件,rpm-,qa,/,显示系统上已经安装的所有,rpm,包的名称,rpm-,qv,wget,/,显示已经安装的,wget,的版本号。,rpm-V,wget,/,校验已安装的,wget,是否与初始状态相同。检测软件是否被改动。,rpm-,Va,/,校验系统上所有的,rpm,包。,rpm-,rebuilddb,/,重建,RPM,数据库。,1.,用,RPM,安装软件包,在第一次安装某个包时,要使用,-i,开关或安装模式。格式为:,rpm-i,只需将,rpm,指向某个二进制包并执行它,,rpm,就会把该包安装到系统上。安装过程一般只需几秒钟。经常会在安装包时使用,-v,(详细)开关来提供关于该过程的更多信息,以及使用,-h,开关输出在控制台上的哈希(,#,)符号提供安装进度更新。,最简单的命令如下:,rpm-,ivh,rpmfile.i386.rpm,可能出现如下几种错误信息:,Package,Alrealy,Installed!/,软件包已经安装,也可使用,-,replcepkgs,强制替换,Cnflicting,files,可加,-,replacepkgs,,,/,该软件包含其他软件包安装过的文件,Unreslved,Dependency /,可加,-,ndeps,,但不推荐使用,安装某个包的例子,下面是安装某个包的例子:,【,例,12.1】,安装,MyPackage,$rpm-,ivh,MyPackage-1.0.0.i386.rpm,Preparing.#100%,1,:,MyPackage,#100%,现在,,MyPackage,已经安装完成,可供使用了。,2.,用,RPM,删除安装软件包,要删除已安装的包,可使用,-e,开关。,rpm,将使用数据库来删除该包的所有文件。如果有已安装的其他包依赖正在删除的包,,rpm,将会异常退出。必须使用,ndeps,开关来执行强制删除(,ndeps,还可以用于强制安装)。在使用这个开关来强制安装或删除时,务必非常小心。删除了其他包所依赖的包,可能会导致灾难性的结果。,rpm-e f /,可通过,rpm-,qa,|,egrep,f,查看是否安装了此软件包,错误信息:,.is needed by./,可加,-,ndeps,,但不推荐使用,下面这个命令删除在上面安装的包:,$rpm-e,MyPackage,注意,包的删除并不一定需要它的完整名称(包括版本号)。安装时需要完整名称,因为是在引用一个文件。已安装的包仅需引用它的名称。包的名称是版本号之前的所有内容。,3.,用,RPM,校验软件包,校验开关,-V,将包文件的当前状态与它的原始状态作比较。,S,文件大小不一致,M,模式不一致(包括权限和文件类型),5 MD5,校验和不一致,D,设备主要,/,次要编号不匹配,L,readLink,(,2,)路径不匹配,U,用户拥有关系不一致,G,群组拥有关系不一致,T,mTime,不一致,如果对某个包运行,rpm-V,,并且发现某个可执行文件的大小发生了变化,可能就是安全漏洞的征兆。,rpm-V f/,检查校验该软件包中的文件是否存在,rpm-,Vf,/bin/vi /,校验软件包中的单个文件,rpm-,Va,/,校验安装的所有软件包,rpm-,Vp,f-1.0.1.i386.rpm /,比较一个源软件包和已经安装的软件包,4.,用,RPM,升级软件,一旦某个包已经安装,尝试安装具有相同名称的包将产生一条消息,指出该包已经安装。如果想要将某个包升级到更新的版本,可使用,-U,开关来升级。当对多个包名称运行升级时,它将设法按依赖关系的顺序放置包。不管某个包是否已经安装,都可以使用升级开关,许多人使用它而不是使用,-i,开关来执行安装和升级。,rpm-,Uvh,f-2.0-1.i386.rpm,会自动删除相应软件包的老版本,如果配置文件同新版本不兼容,则会自动将其保存为另一个,ldconfig.rpmsave,文件,.,下面是使用升级开关来加载多个,rpm,包的例子:,【,例,12.2】,交互式升级,$rpm-,Uvh,My*.rpm,Preparing.#100%,1,:,bMyPackageDep,#50%,1,:,aMyPackageNew,#100%,在上面的例子中,,bMyPackageDep,是,aMyPackageNew,的前提条件,因此尽管文件名称以相反的顺序排列,,rpm,也会对它正确排序。,【,例,12.3】,在,Quick AS4,上安装控制台流量监视工具,iptraf,。,iptraf,是一款,linux,环境下,监控网络流量的一款免费小软件,,iptraf,的最新版本是,2.7.0,,可以从下面的地址下载,dwnlad.quicklinux.rg/test/iptraf-2.7.0-16.QL.i386.rpm,安装,iptraf,:,$rpm-,Uvh,iptraf-2.7.0-16.QL.i386.rpm,安装程序会将执行程序安装到,/,usr,/local/bin,目录下,并创,/,var/local/iptraf,目录放置,iptraf,的配置文件,同时创建,/,var/lg/iptraf,目录放置,iptraf,产生的日志文件,确认环境变量的,PATH,变量包含路径,/,usr,/local/bin,后,运行,iptraf,。,#,iptraf,图,12.1,iptraf,的字符界面菜单,运行,iptraf,后会产生一个字符界面的菜单,所有命令都可以通过字符界面的菜单完成,如图,12.1,所示。,点击,x,可以退出,iptraf,。,5.,查询软件包,可以从,rpm,数据库中查询多种有用的信息。对,rpm,数据库拥有读访问权限的任何用户都能够运行查询。默认情况下,全部用户都拥有读访问权限。要运行一个查询,可使用,-q,开关带上要查询的包的名称。这样将返回该包的版本。,$rpm-q,MyPackage,MyPackage-1.0.0,包的名称必须精确匹配,不允许使用通配符。然而,如果记不住包的完整名称,可以使用,grep,工具来帮助查找。,grep,是一个具有广泛用途的文本搜索工具。默认情况下,,grep,将搜索文件以显示指定的行。,grep,是脚本编写和控制台工作方面的一个强大工具。,可以使用,-,qa,开关来查询所有已安装的包,并用,grep,来管道输出能记住的信息。例如,在下面的例子中,它搜索单词“,IBM”,:,$rpm-,qa,|,grep,IBM,除了版本号外,,rpm-q,还可以提供关于包的其他有用信息。例如:,rpm-q,changelog,显示包的开发变更历史记录,rpm-qc,显示包的配置文件,rpm-,qd,显示包的文档文件,rpm-,qi,显示包描述,rpm-,ql,显示包的文件的列表,rpm-,qR,显示包的依赖关系,还有另一个有趣的查询命令,它针对文件而不是针对运行包。,rpm-q,whatprovides,上面这个命令将识别与给定的,filename,(文件名)相关联的包。,filename,必须包括文件的绝对路径,因为信息就是以这种方式存储在,rpm,数据库中的。,具体可使用如下参数:,rpm-,qa,查询系统安装的所有软件包,rpm-,qf,filename,查询包含该文件的软件包,rpm-,qF,输入为标准输入,如,find/,usr,/bin|rpm-,qF,rpm-,qp,软件包名 查询该软件包,rpm-,qP,同,-p,参数,但输入为标准输入,6.,使用,Webmin,管理软件包,从控制台操作,rpm,很容易,但有时使用图形用户界面会更方便。在,Webmin,【,系统,】,窗体中选择,【,软件包,】,,就可以进入,Webmin,处理,RPM,包的一个界面,包括“,Installed packages”,、“,Install a new package”,、“,Identify a File”,和“,Upgrade all packages”,。如图,12.2,所示。,可以从这个界面安装、删除和查询软件,也可以直接从,URL,站点安装软件。如果安装了如,apt,或,Redhat,Netwrk,之类的,rpm,增强工具,,Webmin,将识别它并为它提供一个界面。,图,12.2,Webmin,RPM,界面,12.1.2,使用,apt get,在线升级,由于历史原因,,RPM,软件包管理系统对软件之间的依赖关系没有内部定义,造成安装,RPM,软件时经常出现令人费解的软件依赖问题。,Debian,Linux,使用,apt,(,Advanced Packaging Tool,)工具进行软件包管理,可以自动解决并安装依赖软件包,因此,apt,工具被认为是目前最好的软件包管理工具之一。为了解决,Redhat,包管理系统的致命问题,,Conectiva,Linux,将,apt,系统移植到了使用,rpm,软件包管理系统的,Linux,系统下,使得基于,RPM,软件包的系统可以利用,apt,工具提供的自动解决依赖关系的能力。,1.APT,简介,APT,可以检测,rpm,包的依赖关系,自动解决包之间的依赖性关系,自动安装需要的包。,Quick Enterprise Linux AS4,使用,RPM+APT,的复合软件包管理方式,并使用,APT,作为默认的在线安装、升级程序。,APT,最重要的配置文件是,/etc/apt/,sources.list,,该文件记载了软件仓库服务器的地址、登录账号等信息。因此,在使用,APT,之前,请先执行:,apt-get update,更新本地,apt-get,的本地数据库,使其与服务器的,pkglist,文件同步。在升级以前一般都要执行该命令实现与服务器的一致。,软件升级,执行:,apt-get upgrade,用户往往很难顾及到系统上所安装的数十甚至数百套的软件是否有新版本出现,现在只要下这个命令,系统便会自动找出所有的新版的软件并逐一升级。,安装新软件,以安装,vim,为例,执行:,apt-get install vim,删除软件,以删除,vim,为例,执行:,apt-get remove vim,同,apt-get install,一样,,apt-get remove,也可自动处理依赖性关系。,清除下载回来的,rpm,文件:,apt-get clean,通过,apt-get,指令安装的任何,RPM,文件都会先下载到,/,var,/cache/apt/archives/,目录下。默认情况下,apt,在安装完之后不会删除这些文件。一段时间后如果觉得系统空间不足,可以执行,apt-get clean,让系统自动清理这个目录。为了对,apt,工具的特性有一个大致的了解,下面介绍几个使用,apt with rpm,管理系统的实例:,(,1,)删除一个软件包时自动删除相关软件包:,rootlinux,root#apt-get remove,nessus,-common,Processing File Dependencies.Done,Reading Package Lists.Done,Building Dependency Tree.Done,The following packages will be REMOVED,:,nessus,-client,nessus,-common,nessus,-server,0 packages upgraded,0 newly installed,3 to remove,(,replace,),and 0 not,upgraded.Need,to get 0B of archives.After unpacking,4863kB will be freed.,Do you want to continue?Y/n,Executing RPM,(,-e,),.,warning,:,/etc/,nessus/nessusd.conf,saved as,/etc/,nessus/nessusd.conf.rpmsave,rootlinux,root#,(,2,)自动下载安装依赖包:,rootlinux,root#apt-get install,nessus,-server,Processing File Dependencies.Done,Reading Package Lists.Done,Building Dependency Tree.Done,The following extra packages will be installed,:,nessus,-common,nmap,The following NEW packages will be installed,:,nessus,-common,nessus,-server,nmap,0 packages upgraded,3 newly installed,0 to remove,(,replace,),and 0 not,upgraded.Need,to get 1239kB of archives.After,unpacking 4889kB will be used.,Do you want to continue?Y/n,Get,:,1 ,freshrpms/7.2/freshrpms,nessus,-common 1,:,1.1.12-fr1 101kB,Get,:,2 ,freshrpms/7.2/freshrpms,nessus,-server 1,:,1.1.12-fr1 895kB,Get,:,3 ,redhat/i386/7.2/os,nmap,2.54BETA22-3 243kB,Fetched 1239kB in 54s,(,22.8kB/s,),Executing RPM,(,-U,),.,Preparing.#,100%,1,:,nessus,-common#,33%,2,:,nmap,#66%,3,:,nessus,-server#,100%,rootlinux,root#,(,3,)维护系统软件,自动更新系统,rootlinux,root#apt-get upgrade,Processing File Dependencies.Done,Reading Package Lists.Done,Building Dependency Tree.Done,The following packages will be upgraded,at libxml2 libxml2-devel,openldap,openldap,-clients,openldap-devel,rsync,7 packages upgraded,0 newly installed,0 to remove,(,replace,),and 0 not,upgraded.Need,to get 2132kB of archives.After,unpacking 560kB will be freed.,Do you want to continue?Y/n,Get,:,1 apt-,rpm.tuxfamily.org,redhat-updates-7.2/redhat/os at 3.1.8-23 42.6kB,Get,:,2 apt-,rpm.tuxfamily.org,redhat-updates-7.2/redhat/os libxml2 2.4.10-0.7x.2 360kB,Get,:,3 apt-,rpm.tuxfamily.org,redhat-updates-7.2/redhat/os libxml2-devel 2.4.10-0.7x.2,617kB,Get,:,4 apt-,rpm.tuxfamily.org,redhat-updates-7.2/redhat/os,openldap,2.0.21-1 424kB,Get,:,5 apt-,rpm.tuxfamily.org,redhat-updates-7.2/redhat/os,openldap,-clients 2.0.21-1 114kB,Get,:,6 apt-,rpm.tuxfamily.org,redhat-updates-7.2/redhat/os,openldap-devel,2.0.21-1 462kB,Get,:,7 apt-,rpm.tuxfamily.org,redhat-updates-7.2/redhat/os,rsync,2.4.6-8 112kB,Fetched 2132kB in 3m8s,(,11.3kB/s,),Executing RPM,(,-U,),.,Preparing.#100%,1,:,libxml2#14%,2,:,rsync,#28%,3penldap#42%,4penldap-clients#57%,5penldap-devel#71%,6,:,at#85%,7,:,libxml2-devel#100%,rootlinux,root#,2.,使用,apt,前的检查,apt,是,AS4,默认安装的在线升级软件之一。使用,apt,在线升级之前需要先检查一下,/etc/apt/,sources.list,sources.list,文件。步骤是:,(,1,),root,用户登录服务器;,(,2,)输入:,cd,/etc/apt,(,3,)输入:,vi,sources.list,现在就可以看到文件内容了。,内容一般如下:,#Quick Linux AS4,rpm ftp:/192.168.2.1 pub/quickas4,os,updates,#rpm file,:,/var/ftp/pub/quickas4,os,updates,注意:前面带有,#,符号的为注释,不起作用,不带,#,号的为定义的,apt,服务器、目录等。,rpm ftp:/192.168.2.1 pub/quickas4,os,updates,即为,rpm,安装,,ftp,服务器,IP,为,192.168.2.1,,目录为,ftp,服务器上的,pub/quickas4,,包含,os,(操作系统全部)和,updates,(升级包)。,如果出现一行以上未注释的多个服务器,则,apt,会跳过连接失败的服务器,自动连接下一个服务器。,如果需要加入新的,apt,站点上的服务器,需要修改这个文件,将新的地址填入。,3.,定制,apt-rpm,(,1,)添加软件资源列表,在,apt-rpm,系统里面添加软件资源非常容易,只需要按照提供,apt,服务的服务器的说明在,/etc/apt/,sources.list,里面加入对网站的描述即可。,这一行参数的格式为:,rpm,uri,distribution compnent1 cmpnenent2.,其中,,uri,为软件资源的地址,可以是,http,,,ftp,,,file,等,URL,地址,,distribution,是,Redhat,发行版本,如,7.2,7.3,8.0,等等,后面的,compnent,可以忽略。有时候可能只对某软件资源的一部分或几部分感兴趣,那么可以在这里明确指出。,例如添加,,apt.unl.edu,/,提供的,Redhat,KDE 3.1,的测试软件包,只需要在,sources.list,里面添加一行:,cde,:,rpm ftp:/,apt.unl.edu,/apt/8.0 kde3-test,就将该网站的,kde3,部分加入了列表。,(,2,)把,Quick Linux AS4,安装盘添加到软件源,有的时候需要从,Quick Linux AS4,安装光盘或者,is,文件安装、卸载软件,这时可以把,Quick Linux AS4,安装光盘设置为软件源。这种工作方式需要首先扫描安装光盘上的软件包,并在,/,var/lib/apt/cdroms.list,文件中建立光盘软件列表。,如果使用,Quick Linux AS4,光盘,只需要把光盘插入光驱,下面命令会自动,mount,光盘并建立列表:,rootmylinux,root#apt-,cdrom,add,如果是使用,IS,文件安装,首先,mount IS,文件到,mount-point,把,mount point,输入,就可以自动搜索,RPM,软件列表了。,rootmylinux,root#apt,4.,运行命令更新,主要运行命令如下:,(,1,)更新软件列表,获取远程,rpm,服务器上的软件列表和相互依赖关系列表,所有可用软件的下载地址都在,/etc/apt/,sources.list,里面定义,下面的多数下载操作地址也是在这里定义的。在使用,apt,之前,最好先使用,apt-get update,命令同步一下文件索引。这是因为服务器上的文件经常更新,,apt-get update,从服务器上下载最新的文件索引,以后就可以安装索引内含有的新文件了。如果不进行,apt-get update,,新文件不会被发现。,rootmylinux,root#apt-get update,(,2,)检查本地软件依赖关系合法性,由于,rpm,系统的问题,很多系统会存在一些依赖问题,用下面命令检查依赖关系,同时,apt-get,会提供一些修复方案,只有本机没有依赖关系问题了才能良好地使用,apt-rpm,。一个新安装的干净系统不会有依赖关系问题。,rootmylinux,root#apt-get check,(,3,)安装或升级一个新软件,rootmylinux,root#apt-get install package-name,package-name,是,rpm,包的名字的前面部分,不包含版本号,如果选择不同的处理器类型,可以在后面添加,i686,等标识。,apt-get,能够自动判断,rpm,包的依赖关系,例如在线安装一个,phpmyadmin,就会显示要求,php-mysql,等一堆其他包,询问,yes/n,,这时候输入,y,就可以了,,apt,会自动把所有需要的,rpm,包都安装全,安装完以后,phpmyadmin,就可以正常使用了。,(,4,)升级所有系统软件,rootmylinux,root#apt-get upgrade,(,5,)全面升级,比,upgrade,更加智能化的升级,同时解决升级时的一些依赖关系,rootmylinux,root#apt-get dist-upgrade,(,6,)卸载软件,同时卸载依赖软件,rootmylinux,root#apt-get remove package-name,(,7,)清除本地下载的,rpm,包,,rpm,包下载后保存在,/,var/cache/apt/archieves,下面,本命令清除已下载安装过的,rpm,文件,rootmylinux,root#apt-get clean,5.,大型企业,Linux,补丁管理,可以利用,apt,的自动升级特性来完成补丁升级工作。首先,需要建立一个补丁库,开放,http,或者,FTP,供客户机下载安装。以开放,FTP,为例:,(,1,)在,FTP,的默认根目录为,/,var,/ftp,下建立个目录,patch,,,在,patch,目录里再建立一个子目录,RPMS.update,。,(,2,)把需要升级的,rpm,文件全部复制到,RPMS.update,下;,(,3,)执行,/,usr/bin/genbasedir,-flat-blat-bz2nly,/,var,/ftp/patch update,这行命令建立了,apt,所需要的索引文件,(,4,)启动,FTP,服务,使其他客户机能正常访问。,接下来,在安装每台,Linux,客户机时编辑一下,/etc/apt/,sources.list,文件,将,FTP,的,IP,和目录输入,格式如下:,rpm ftp:/IP/patch update,客户机在需要更新的时候可以执行两条命令:,apt-get update,(同步,FTP,更新服务器上的索引),apt-get upgrade,(自动检测需要的升级版本并更新),最后,可以设置,Linux,客户机的自动升级。如果希望客户机在每次启动时进行更新工作,就在,/etc/,rc.d/rc.lcal,里加上两行更新命令:,apt-get update,apt-get upgrade,如果客户机不能停机,则可以使用,corntab,定时任务,设置某个时间点自动执行更新命令。,经过以上步骤,已经实现了一个全自动的补丁升级方案。不管客户机有多少台,管理员只要把更新文件复制一次到,FTP,目录下,然后重建一次索引即可。这样的方案也适合企业全球部署的,Linux,机器群,用户也可以设置一些,FTP,密码或者使用,ssh,来增强安全性。,这样的方案也适合企业全球部署的,Linux,机器群,用户也可以设置一些,FTP,密码或者使用,ssh,来增强安全性。,12.2,从源码编译安装软件,Linux,是开放源代码的操作系统,它附带了编译软件所需的所有开发工具。虽然大多数包以二进制,RPM,方式提供,但也可以为系统下载原始源代码,并以自定义的方式进行编译。,编译源代码可能导致问题,例如可能不再支持系统上正在使用的商业软件(比如,IBM DB2,)。然而,熟悉从源代码编译软件的过程可以对软件应用补丁,并使用从其他环境移植过来的包。一旦成功地编译代码,甚至可以创建自己的,RPM,。,12.2.1,编译源程序方式安装,由于存在着时间与空间的因素,在安装完系统之后,部份软件可能已经在因特网上发表了新版本,或者有些新软件还来不及纳入该发布版中。用户通过各种渠道获得软件并自己动手将取得的软件安装到自己的,Linux,系统中,便显得越来越重要。,1.Linux,软件的格式,从因特网上的,FTP,服务器取得的,Linux,软件,其格式大多是下列几种中的一种:,(,1,)*,.tar-,直接用,tar,将所有文件打包。,(,2,)*,.,gz,-,使用,gzip,或,compress,压缩的文件。,(,3,)*,.z,(,4,)*,.,tar.gz,(,5,)*,.tar.-,先使用,tar,将文件打包后,再用,gzip,或,compress,将该文件压缩后的文件。,(,6,)*,.,tgz,2.,解包的方法和工具,常用的文件打包、压缩、解包的工具:,(,1,),tar,tar,命令的功能是将多个文件打包成一个合并的文件。软件作者可将所有文件打包成一个文件。用户也要用,tar,来将这些文件解包。,(,2,),gzip,GNU Zip,是一个在,Unix,系统中常用的压缩、解压缩命令。,Gzip,压缩过的文件大都会在文件名后面加上,.,gz,或,.z,。,(,3,),compress,compress,是,Unix,系统中传统的压缩命令,它可以压缩文件以减小文件的大小,,compress,压缩过的文件名后会加上,.Z,。,compress,文件保留原文件的权限和一些时间属性。,(,4,),zcat,zcat,命令的功能是解压缩由,compress,或,gzip,命令产生的压缩文件,并把结果送标准输出设备,且保留原压缩文件。,(,5,),zless,与,zcat,类似,可以直接查看一个由,gzip,压缩的文件内容。,3.,解包的一些实际例子,以,myfile.tar.gz,为例,可以看出这类型的文件是由,tar,打包后再由,gzip,压缩的产物。对于这个文件的解包方法是:先使用,gzip,将该文件解压缩为原始的,tar,文件,然后执行,tar,将这些被打包在一起的文件一一还原。,(,1,)用,gzip,解压缩,gzip,-d,myfile.tar.gz,“,gzip,?,d,文件名”是解压缩的使用方法,在执行过解压缩的处理后,原来的压缩文件将不存在,而仅仅保留解压缩后的文件,不会额外占用磁盘空间。所以在执行完此命令后,将看不到原先的,myfile.tar.gz,而只有,myfile.tar,。,(,2,)执行,tar,将文件解开,用“,tar,xvf,文件名,的方式将一个,tar,文件解开。,tar,对文件名没有特别规定,因此,在使用,tar,时,要给予完整的文件名,否则,tar,会找不到要处理的文件。,tar,xvf,myfile.tar,(,3,)查看压缩文件的内容,由于,tar,可将多个指定目录的文件打包产生成一个文件,在这个文件中不仅含有原文件的内容也包括了文件目录以及文件属性,因此在解开一个,tar,格式的文件之前,最好也清楚一下这个,tar,文件内的目录结构,以免解开后,文件产生到其他目录中。,下面的命令可以知道,myfile.tar,中究竟包含了哪些文件。,tar,tvf,myfile.tar,同样,,gzip,也提供此类的功能,可以使用,gzip,-l,来查看压缩文件中的内容。,gzip,-l,myfile.tar.gz,注意,在使用,tar,xvf,文件名,解开文件时,,tar,会根据所记录的每个原始文件所在目录来解开这些文件,,tar,在执行时,会先在当前目录里找这个目录,如果找不到就建立该目录,然后逐一建立文件。,例如,有一个,tar,文件要解开,先使用“,tar,tvf,文件名,的方式查看该内容,发现列出来的文件名开头都是,usr,/local/,。如果在,$HME,目录下进行解包,那么,tar,将在该目录下分别建立,usr,/local/,等目录。可见,用,root,身份在根目录解包比较恰当。所以在处理一个不知内容的,tar,文件前,先看一下文件内的目录结构是必要的。,(,4,)综合应用,上面的方法是解开一个软件包的分解动作,下面要说的是其综合应用。,例如,要查看,/source,中的,myfile.tgz,的内容:,zcat,/source/,myfile.tgz,|tar,tvf,-,说明:,zcat,将一个,gzip,压缩文件解开并输出到标准输出设备。,通过管道功能,将,zcat,的结果转向,tar,来处理。,使用,tar,tvf,来查看文件内容。,使用,-,是告诉,tar,要处理的文件数据是由标准输入设备而来的。,要解开文件时使用:,zcat,/source/,myfile.tgz,|,tar,xvf,-,和原先分步执行结果相比较,执行综合应用后,压缩文件仍然存在。上面介绍的两种方法都可以达到解开文件的目的,可以随个人喜好来选择不同的方法。,3.,安装软件,新软件的原始文件解开后,接下来的工作就是查阅作者附在里面的一些文件,如,README.xxx,、,RELEASE,、,SETUP,、,TD,、,doc,、,INSTALL,、,ChangeLg,等文件。因为,在这些文件里往往会有些主要功能的说明,编译时系统环境的限制,以及软件环境参数设置的方式和软件安装的步骤。所以,必须要阅读这些数据以免造成遗憾。软件安装时还应注意以下几个方面。,(,1,),Linux,系统版本的限制,Linux,版本更新速度相当快,所以如果该软件使用到较新版本的特有功能时,则该软件无法在旧版本的,Linux,系统中执行。,(,2,),GNU C,或,C Runtime Library,版本的限制,如果直接安装软件的可执行文件时,如果,Runtime,Library,的版本与作者编译该软件时的版本差异过大时,那么就会产生错误导致无法执行。如果要重新编译该软件并且该软件用到一些新版才提供的函数时就会发生编译错误。因此如果有此限制时,只有放弃该软件和升级系统两种选择。,(,3,)内存、硬盘的限制,有一些软件在编译或执行时有特定的要求,例如要求系统至少要有多少的内或硬盘空间。如果没有注意到这一点,就有可能花了很多功夫结果得到的是一个错误信息。,(,4,)其他相关软件,有一些软件会使用到其他软件,因此如果系统没有此相关软件,那也没法安装该软件。,(,5,)软件安装步骤说明,对于较为复杂的软件,软件作者为了利于用户正确安装,一般都会附上一份简要的安装说明。所以如果有这类文件最好看一下。,(,6,)其他方面,有些软件有多个更新版本,可能会附上文件来说明每个版本更新的主要内容以及错误修正的情况,这类文件也可以参考。,如果该软件是以可执行文件的方式安装,就没有别的要说的了,一切安装工作也就到此为止。如果是以原代码方式提供的话,那么就要编译软件。简单一点说就是直接在软件的原代码所在目录键入,make,就可以完成编译工作。通常作者在原代码目录中会建立该软件编译所要的,Makefile,,使用者直接用,make,就可以完成编译工作。,12.2.2,软件补丁程序,下面看一个范例性的,patch,文件:,$cat bash-2.03-profile.patch,-bash-2.03/config-top.h.profile Mon Feb 22 14,:,37,:,17 1999,+bash-2.03/config-top.h Mon Feb 22 14,:,37,:,29 1999,-3,6+3,8,/*This contains various user-settable options not under the control of,autoconf,.*/,+#define NON_INTERACTIVE_LOGIN_SHELLS,+,/*Define CONTINUE_AFTER_KILL_ERROR if you want the kill command to,continue processing arguments after one of them fails.This is,what POSIX.2 specifies.*/,其实真正的应该注意的行只有里面用,-,和,+,开始的行。这两行的含义是,以,+,开头的行中指出的文件应该被修改
展开阅读全文