zoukankan      html  css  js  c++  java
  • Linux学习笔记(六)——应用程序安装

                      安装及管理应用程序

      同windows操作系统一样,使用一个操作系统,肯定要安装一些软件,这篇随笔主要介绍Linux上软件的安装。首先我们应该了解Linux应用程序的组成、熟悉RPM软件包的管理机制,接着就是会使用RPM包管理工具,并且从源码包编译安装应用程序。

      一、Linux应用程序简介

      1、Linux命令与应用程序的关系

       (1)、文件位置

    系统命令:一般在/bin和/sbin目录中,或为Shell内部指令
    应用程序:通常在/usr/bin和/usr/sbin目录中
    (2)、主要用途
    系统命令:完成对系统的基本管理工作,例如IP配置工具
    应用程序:完成相对独立的其他辅助任务,例如网页浏览器
    (3)、适用环境
    系统命令:一般只在字符操作界面中运行
    应用程序:根据实际需要,有些程序可在图形界面中运行
    (4)、运行格式
    系统命令:一般包括命令字、命令选项和命令参数
    应用程序:通常没有固定的执行格式

       (个人理解:在Linux中严格区分命令和程序也并无太大意义,对于“安装软件包”与“安装应用程序”这两种说法,也并不做严格的区分 

      2、Linux应用程序的组成

      这部分与Linux的目录层次有紧密关系,下面列出的是典型应用程序的目录结构:

    文件类型

    保存目录

    普通执行程序文件

    /usr/bin

    服务器执行程序文件和管理程序文件

    /usr/sbin

    应用程序配置文件

    /etc

    日志文件

    /var/log

    应用程序文档文件

    /usr/share/doc

    应用程序手册页文件

    /usr/share/man

        如果应用程序的配置文件较多,通常会以软件名建立专门的子文件夹来保存,如“/etc/httpd”

        例如查看sendmail软件包时,执行rpm -ql sendmail查看。

      3、软件包的封装类型

      封装类型有多种,常见的是RPM软件包,扩展名为“.rpm”,源代码软件包,一般为“.tar.gz”、“.tar.bz2”等格式的压缩包包含程序的原始代码;这两种较常用。其它的有deb软件包,扩展名为“.deb”,提供安装程序的软件包,一般是install.sh、setup、.bin格式的文件,类似windows中的exe安装文件,还有绿色免安装的软件包,在压缩包内提供已编译好的执行程序文件,解开压缩包后的文件即可直接使用。(备注使用tar命令制作而成的源代码包文件,经常被称为“TarBall,即“Tar包”

      二、使用RPM包管理工具

      1、RPM简介

      PRM:RedHat Package Manager,因为这个RPM格式的关键包格式是由Red Hat公司首先提出并使用的,后得到广泛使用。它建立统一的数据库文件,详细记录软件包安装、卸载等变化信息,能够自动分析软件包依赖关系。

      RPM包的一般格式为:bash-3.1-16.1.i386.rpm(软件名称版本号发布次数硬件平台,扩展名)

        当然这个格式不固定,因为有时候可能还会加上所适用的操作系统信息,如:wget-1.10.2-7.el5.i386.rpm

      2、使用RPM包管理命令

      RPM命令的主要功能是:

    (1). 查询RPM软件、包文件的相关信息
    查询已安装的RPM软件信息:rpm  -q[子选项]   [软件名]
    查询文件/目录属于哪个RPM软件 :rpm  -qf   文件/目录名
    (备注:使用“-q”选项时实际上调用了“/usr/bin/rpmquery”程序完成查询工作,对于“-qa”查询选项,命令参数(即软件包名)是非必须的;一般查询时,软件名不需要指定版本号
    [root@localhost ~]# rpm -q bash     ==>查询是否已安装有bash软件包
    bash-3.1-16.1
    [root@localhost ~]# rpm -qa | grep bash
    bash-3.1-16.1
    
    [root@localhost ~]# rpm -qf /usr/bin/vim    ==>查询vim是由哪个软件包安装的
    vim-enhanced-7.0.109-3
    
    [root@localhost ~]# rpm -ql dhcp   ==>查询dhcp软件包安装的文件列表
    /etc/dhcpd.conf
    /etc/rc.d/init.d/dhcpd
    ……
    查询未安装的RPM软件包文件:rpm  -qp[子选项]  [RPM包文件] 
    用法:结合不同的子选项 完成不同查询
    -qpi:通过.rpm包文件查看该软件的详细信息
    -qpl:查看.rpm安装包内所包含的目录、文件列表
    -qpc:查看.rpm安装包内包含的配置文件列表
    -qpd:查看.rpm安装包内包含的文档文件列表 
    [root@localhost Server]# rpm -qpl lynx-2.8.5-28.1.i386.rpm
    /etc/lynx-site.cfg
    /etc/lynx.cfg
    ……
    ==>查询lynx安装包中的文件列表
    (2). 安装、升级、卸载RPM软件包
    安装或升级RPM软件:rpm  [选项]  [RPM包文件]...  
    用法:不同选项适用于不同情况
     -i:安装一个新的rpm软件包
     -U:升级某个rpm软件,若原本未装,则进行安装
     -F:更新某个rpm软件,若原本未装,则放弃安装
    卸载指定的RPM软件:rpm  -e  软件名 (备注:卸载软件时只需要指定软件名即可,无需指定版本号
     辅助选项简单介绍: 
    --force:强制安装所指定的rpm软件包
    --nodeps:安装、升级或卸载软件时,忽略依赖关系
    -h:以“#”号显示安装的进度
    -v:显示安装过程中的详细信息 
     (备注:--force 辅助选项主要应用于以下两种情况:

        1)缺失某个软件包的文件时,需要进行覆盖安装以找回丢失文件

        2)安装一个比现有软件版本陈旧的软件包(多为测试用途)

      当安装、卸载软件包时,提示缺少依赖包无法进行时,如果仍要继续执行,应结合 --nodeps 选项而不   是 --force 选项 

    [root@localhost ~]# rpm -ivh lynx-2.8.5-28.1.i386.rpm  ==>安装一个新的RPM包
    warning: lynx-2.8.5-28.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
    Preparing...    ########################################### [100%]
       1:lynx       ########################################### [100%]
                              ==>安装lynx软件包同事显示安装进度
    [root@localhost ~]# rpm -q lynx
    lynx-2.8.5-28.1
    [root@localhost ~]# rpm -e lynx  ==>卸载lynx软件包
    [root@localhost ~]# rpm -q lynx
    package lynx is not installed

     (备注:“warning:……NOKEY……”的警告信息是由于没有导入RedHat提供的公钥所致,但并不影响安装效果,可以忽略,如果需要导入公钥文件,可以参考如下步骤(以后从RHEL5光盘中安装软件时,就不会再出现警告提示了):[root@localhost ~]# cd /media/cdrom

                      [root@localhost cdrom]# rpm --import RPM-GPG-KEY-redhat-release)

    [root@localhost ~]# rpm -i wget-1.10.2-3.2.1.i386.rpm
    [root@localhost ~]# rpm -q  wget
    wget-1.10.2-3.2.1
    [root@mail ~]# rpm -Uvh /media/cdrom/wget-1.10.2-7.el5.i386.rpm ==>升级wget软件包
    warning: /media/cdrom/wget-1.10.2-7.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
    Preparing... ########################################### [100%]
       1:wget    ########################################### [100%]
    [root@localhost ~]# rpm -q  wget
    wget-1.10.2-7.el5

    (备注:在系统中不存在被升级的软件包时,升级命令的功能等同于安装命令

      解决软件包依赖关系:

    1)、安装有依赖关系的多个软件时
    被依赖的软件包需要先安装
    同时指定多个.rpm包文件进行安装
    (备注:如果需要同时安装相互依赖的数十个.rpm软件包,可以结合Shell通配符“*”同时指定这些文件作为参数 
    2)、卸载有依赖关系的多个软件时
    依赖其他程序的软件包需要先卸载
    同时指定多个软件名进行卸载
    3)、忽略依赖关系
    结合“--nodeps”选项,但可能导致软件异常
     (3). 维护RPM数据库信息

         当RPM数据库损坏时,需要进行数据库重建:rpm  --rebuilddb  或者rpm  --initdb  

      三、从源码包编译安装程序

      1、源码编译简介

      既然有了RPM安装,那么为什么需要源码安装呢?首先它能获得最新的软件版本,及时修复bug;然后它那能根据用户需要,灵活定制软件功能。它的应用场合也非常广泛,比如安装较新版本的应用程序时、当前安装的程序无法满足需要时或者需要为应用程序添加新的功能时等。

      Tarball封包:多为.tar.gz或者tar.bz2格式。

      确认源代码编译环境:

      需要安装支持C/C++程序语言的编译器。

    [root@localhost ~]# gcc --version  ==>或g++ -v  [--version]
    gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
    Copyright (C) 2006 Free Software Foundation, Inc.
    本程序是自由软件;请参看源代码的版权声明。本软件没有任何担保;
    包括没有适销性和某一专用目的下的适用性担保。
    [root@localhost ~]# g++ --version
    g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
    ……

    (备注:在实际编译安装软件的操作中,大多数情况是通过 make 来自动调用gcc或g++进行工作,无需用户手动执行gcc等命令)

      2、从源码编译安装程序的基本过程

    解包 —— tar
        解包、释放出源代码文件
    配置 —— ./configure    configure 一般是位于软件包目录中的可执行脚本文件
        针对当前系统、软件环境,配置好安装参数
    编译 —— make
        将源代码文件变为二进制的可执行程序
    安装 —— make install
        将编译好的程序文件复制到系统中
      3、源码编译安装程序示例
      1)、解包
    习惯上将软件包释放到 /usr/src/ 目录;解包后的源代码文件位置:/usr/src/软件名-版本号/
    [root@localhost ~]# tar zxvf axel-1.0a.tar.gz -C /usr/src/
    [root@localhost ~]# ls /usr/src/axel-1.0a/
    API     axelrc.example  configure  CREDITS  gui       nl.po     tcp.c
    axel.1  CHANGES         conn.c     de.po    http.c    README    tcp.h
    axel.c  conf.c          conn.h     ftp.c    http.h    search.c  text.c
    axel.h  conf.h          COPYING    ftp.h    Makefile  search.h

    ==>configure执行脚本用于下一步的配置,README或INSTALL文件可提供安装方法

      2)、配置

      (需将工作目录切换到软件源码所在目录;使用源码目录中的 configure 脚本;执行“./configure --help” 可以查看帮助;典型的配置选项: --prefix=软件安装目录)

    [root@localhost ~]# cd /usr/src/axel-1.0a
    [root@localhost axel-1.0a]# ./configure --prefix=/usr/local/axel 
    ==>若不指定任何配置选项,将采用默认值

    (备注:不同的应用程序其配置参数会存在区别,因此学会使用“./configure --help”非常重要(“./”表示当前目录);用户应用程序习惯上安装到“/usr/local/软件名”文件夹中;编译过程中如果出现错误,通常是由于缺少依赖软件包所致;根据软件大小不同,配置过程可能会需要不同的时间)

      3)、编译  :执行make命令

      4)、安装  :执行make  install命令 

    [root@localhost axel-1.0a]# make
    [root@localhost axel-1.0a]# make install

        验证已编译安装完成的程序:

    [root@localhost axel-1.0a]# ls /usr/local/axel/  /usr/local/axel/bin/
    /usr/local/axel/:
    bin  etc  share
    /usr/local/axel/bin/:
    axel
    [root@localhost axel-1.0a]# /usr/local/axel/bin/axel –help
    Usage: axel [options] url1 [url2] [url...]
    --max-speed=x      -s x    Specify maximum speed (bytes per second)
    ……

       如有错误,欢迎指正,谢谢!

  • 相关阅读:
    容器适配器————priority_queue
    容器适配器————queue
    容器适配器之总结
    序列式容器之总结
    序列式容器————forward_list
    序列式容器————list
    序列式容器————dequeue
    13.软件项目管理与敏捷方法——如何变更职责笔记
    10.软件项目管理与敏捷方法——沟通管理笔记
    09.软件项目管理与敏捷方法——人力资源管理笔记
  • 原文地址:https://www.cnblogs.com/zhoujie/p/linux6.html
Copyright © 2011-2022 走看看