windows上我们安装应用程序都是通过双击事先下载好.exe格式的应用程序进行的,那么在linux中我们该如何安装和卸载软件呢,本文介绍下在linux中安装软件的三种方法:rpmyum、编译。

      rpm

      rpm是以一种数据库记录的方式来将你所需要的软件安装到你的linux系统的一套管理机制。rpm最大的的特点就是将你要安装的软件先编译过,并且打包成rpm机制的安装包,通过包装好的软件里头默认的数据库记录这个软件要安装的时候必须具备的依赖属性软件,当安装在你的Linux主机时,rpm会先依据软件里头的数据查询Linux主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予安装。那么安装的时候就将该软件的信息整个写入rpm的数据库中,以便未来的查询、验证与反安装。

      各发行版程序包管理器:

           debian:dpt,dpkg,".deb"后缀

     redhat:redhat package manager,rpm,".rpm";rpm is package manager;

     S.u.S.E:rpm,".rpm"

   程序包管理器功能:将编译好的应用程序的各组成文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作;

      rpm包命名格式:

     name-VERSION-release.arch.rpm

        VERSION: major.minor.release

        release.arch:rpm包的发行号

   rpm命令:rpm [OPTIONS][PACKAGE_FILE]

     安装:-i,--install

     升级:-U,--update,-F,--freshen

     卸载:-e,--erase

     查询:-q,--query

     校验:-V,--verify

     数据库维护:--builddb,--initdb

     安装:

        rpm{-i|--install} [install-options] PACKAGE_FILE ...

          rpm-ivh PACKAGE_FILE...:安装

          rpm -e:卸载

          GENERALOPTIONS:

             -v:verbose,详细信息

             -vv:更详细的输出

          [install-options]

             -h:hash marks输出进度条,每个#表示2%的进度;

             --test:测试安装,检查并报告依赖关系及冲突消息等

             --nodeps:忽略依赖关系,不建议

             --replacepkgs:重新安装

          注意:rpm包可以自带脚本

             四类都不执行用--noscripts

               preinstall:安装过程开始之前运行的脚本,%pre,--nopre

               postinstall:安装过程完成之后运行的脚本,%post,--nopost

               preuninstall:卸载过程真正开始执行之前运行的脚本,%preun,--nopreun

               postuninstall:卸载过程完成之后运行的脚本,%postun,--nopostun

          --nosignature:不检查包签名信息,即不检查来源合法性;

          --nodigest:不检查包完整性信息;

     升级安装包:

        rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...

        rpm{-F|--freshen} [install-options] PACKAGE_FILE ...

          -U:升级或安装;

          -F:升级,如果不存在老版本,则不升级也不安装

          rpm-Uvh PACKAGE_FILE ...

          rpm-Fvh PACKAGE_FILE ...

             --oldpackage:降级安装;

             --force:强制升级;

          注意:(1)不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核

                (2)如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供

     卸载软件包:

        rpm{-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...

          --allmatches:卸载所有匹配指定名称的程序包的各版本;

          --nodeps:忽略依赖关系

          --test:测试卸载,dry run模式

     查询程序包:

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

          [select-options]

             PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;

             -a,--all:查询所有已经安装过的包;

             -f 后跟文件路径:查询指定的文件由哪个程序包安装生成

                  rpm-qf /etc/fstab

             -p,--packagePACKAGE_FILE:用于实现对未安装的程序包执行查询操作;

             --whatprovidesCAPABILITY:查询指定的CAPABILITY由哪个程序包安装;

             --whatrequiresCAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

          [query-options]

             --changelog:查询rpm包的changlog;

             -l,--list:程序包安装生成的所有文件列表

             -i,--info:程序包相关的信息,版本号、大小、所属的包组等等;

             -c,--configfiles:查询指定的程序提供的配置文件;

             -d,--docfiles:查询指定的程序包提供的文档;

             --provides:列出指定的程序包所提供的所有CAPABILITY;

             -R,--requires:查询指定的程序包的依赖关系

             --scripts:查看程序包自带的脚本片段

        用法:

          -qa 列出所有的已经安装在本机系统上的所有软件名称

          -qiPACKAGE 列出该软件的详细信息、包含开发商、版本与说明等

          -qfFILE 后面接文件,查询系统的某个文件属于哪一个软件所有的

          -qcPACKAGE 列出该软件的所有设置文件(找出在/etc/下面的文件名而已)

          -qlPACKAGE 列出该软件所有的文件与目录所在的完整文件名

          -qdPACKAGE  列出该软件所有的帮助文件

          -qR 列出与该软件有关的依赖软件所含的文件

          -qpiPACKAGE_FILE

          -qplPACKAGE_FILE

          -qpcPACKAGE_FILE

       校验:

        rpm{-V|--verify} [select-options] [verify-options]

       S file Size differs:文件的容量大小是否被改变

       M Modediffers (includes permissions and file type):文件的类型或文件的属性是否被改变

       5 digest(formerly MD5 sum) differs:MD5这一种指纹码的内容已经不同

       D Devicemajor/minor number mismatch:设备的主/次代码已经改变

       LreadLink(2) path mismatch:link路径已被改变

       U Userownership differs:文件的所有者已被改变

       G Groupownership differs:文件的所属用户组已被改变

       T mTimediffers:文件的创建时间已被改变;

       PcaPabilities differ

 

yum

   yum通过分析rpm的标题数据后,根据各软件的相关性制作出属性依赖的解决方案,然后可以自动处理软件的依赖属性问题,以解决软件安装或删除与升级的问题;

   CentOS先将发布的软件放置到YUM服务器内,然后分析这些软件的依赖性问题,将软件内的记录信息写下来。然后再将这些信息分析后记录成软件相关性的清单列表。这些列表数据与软件所在的位置可以称为容器。当客户端有软件安装的需求时,客户端主机会主动向网络上面的yum服务器的容器网址下载清单列表,然后通过清单列表的数据与本机rpm数据库已存在的软件数据相比较,就能够一口气安装所有需要的具有依赖性属性的软件了。整个流程可以简单的用如下图所示:

  

   当客户端有升级、安装的需求时,yum会向容器要求清单的更新,等到清单更新到本机的/var/cache/yum里面后,等一下更新时就会用这个本机清单与本机的rpm数据库进行比较,这样就知道该下载什么软件。接下来yum会跑到容器服务器下载所需要的软件,然后再通过rpm的机制开始安装软件。

   yum客户端的配置:

           配置文件:

                 /etc/yum.conf:为所有仓库提供公共配置

                 /etc/yum.repos.d/*.repo:为仓库的指向提供配置

                 仓库指向的定义:

                      [repositoryID]:代表容器的名字

                            name=Some name forthis repository:只是说明一下这个容器的意义而已

                            baseurl=url://path/to/repository:指定固定的一个容器网址。

                            enabled={1|0}:是否使用这个容器,1代表使用,0表示不使用

                            gpgcheck={1|0}:是否需要查阅rpm文件内的数字证书

                            gpgkey=URL:指明密钥文件

                            enablegroups={1|0}是否支持组来进行批量管理

                            failovermethod={roundrobin|priority}url故障转移方法

                                       默认为随机

                            cost=        开销,默认为1000

                      yum命令的用法:

                            yum [options][command] [package ...]

                      显示仓库列表:

                            repolist[all|enabled|disabled]

                      显示程序包:

                            yum list

                      安装程序包:

                            yum install

                      升级程序包

                            update package

                      降级

                            downupgrade package

                      检查可用升级:

                            check-update

                      卸载程序包

                            remove|erase package

                      查看程序包的信息

                            info package

                      查看程序提供的特性(可以是某文件)是由哪个程序包所提供:

                            provides 包名             

                      清理本地缓存:

                            clean

                      构建缓存

                            makecache

                      搜索:

                            search 以指定的关键字搜索程序包名及summary信息

                      查看指定包依赖的capabilities

                            deplist package

                      查看yum事物历史

                            yum history

                      安装及升级本地程序包

                            localinstll

   如何使用光盘当作本地yum仓库

           (1)挂载光盘至某目录,例如/media/cdrom

                      mount -r -t iso9660/dev/cdrom /media/cdrom

           (2)创建配置文件

                 [CentOS 7]

                 name=

                 baseurl=

                 gpgcheck

                 enabled=

      yum的命令行选项:

           --nogpgcheck 禁止进行gpg check

           -y:自动回答为“yes

           -q:静默模式

           --disablerepo=repoidglob 临时禁用此处指定的repo

           --enablerepo=repoidglob 临时启用此处指定的repo

           --noplugins 禁用所有插件

 

编译

      程序包的编译安装步骤如下:

      第一步:configure脚本

                      选项:指定安装位置、指定启动的特性

                      --help:获取其支持使用的选项

                            选项分类

                                  安装路径设定:

                                       --prefix=/PATH/TO/SOMEWHERE:指定默认安装位置

                                       --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置

                                  system types

                                  optionalteatures:可选特性

                                  optionalpackage:可选包

           第二步:make

           第三步:makeinstall

      安装后的配置:

           (1) 导出二进制程序目录至PATH环境变量中;

                      编辑文件/etc/profile.d/NAME.sh

                            exportPATH=/PATH/TO/BIN:$PATH

           (2) 导出库文件路径

                      编辑/etc/ld.so.conf.d/NAME.conf

                            添加新的库文件所在目录至此文件中;

                      让系统重新生成缓存;

                            ldconfig [-v]

           (3) 导出头文件

                      ln -sv

           (4) 导出帮助手册

                      编辑/etc/man.config文件

                            添加一个MANPATH 即时生效