Linux软件包

软件包管理

  1. 一个操作系统没有软件做支持能实现的功能非常少,Linux中的大多软件主要是给服务器来用的,不管是稳定性还是多样性还是安全性都不比Windows差甚至更好。windows的所有安装包都不能在Linux中使用,好处是Windows中大量的病毒和木马都对Linux无用,坏处是所有的软件包都必须针对Linux再做单独的开发。

  2. Linux能够识别的软件包主要有两大类:源码包和二进制包

    • 源码包:把源代码直接开放给你的包,绝大多数都是C语言写的,需要手工安装且安装的时候比较慢而且容易报错。
    • 脚本安装包:绝大多数都是源码包进行再开发之后的源码包,不需要手工安装,安装过程与Windows类似但是这种包不多,适合初学者。
    • 二进制包(系统默认包):经过编译之后的包含0和1的机器语言包,不能看到源代码,Windows大多数是exe的二进制安装包,Linux下也有二进制包,只不过编译格式不一样。二进制包是厂商在发行的时候用源码包编译好的,好处是用户安装速度相比源码包更快且安装过程报错几率大大减小,坏处是不能看到源码。
    • RPM包:Redhat系列用的二进制软件包就是RPM包
    • DPKG包:Debian系列用的二进制包,两种包除了管理系统不同,其余的基本一样,命令、配置文件保存位置、内核等基本一致。
  3. 源码包优点:

    • 开源,如果有足够的能力,可以修改源代码
    • 可以*选择所需的功能
    • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
    • 卸载方便(可以通过直接删除安装目录的方式来卸载)

    源码包缺点:

    • 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
    • 编译过程时间较长,安装比二进制安装时间长
    • 因为是编译安装,安装过程中一旦报错新手很难解决
  4. 二进制包优点:

    • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载
    • 安装速度比源码包安装快的多(跟Windows下安装软件速度差不多)

    二进制包缺点:

    • 经过编译,不再可以看到源代矼
    • 功能选择不如源码包灵活
    • 依赖性(软件包a的安装依赖软件包b,所以在安装a的时候要先安装b,卸载的时候也要先卸载a)

rpm命令管理

  1. RPM包命名规则

    包全名httpd-2.2.15-15.el6.centos.1.i686.rpm

    httpd 软件包名

    2.2.15 软件版本

    15 软件发布的次数

    el6. centos 适合的 Linux平台(不写表示任何Linux版本都可以安装)

    i686 适合的硬件平台i386/i486/i586/i686都可以在我们的普通计算机上安装,x64则只能在64位的CPU上安装,noarch指任何硬件平台都可以安装)

    rpm rpm包扩展名

    (Linux中没有文件扩展名这个概念,也就是说,文件名和扩展名可以随意命名,比如可以叫a.exe,Linux只是认为它是一个普通文件。但是所有的rpm包的扩展名必须写成.rpm,方便管理员查看

  2. RPM包依赖性:

    • 树形依赖:a->b->c。装软件包a要先装b,装软件包b要先装c。卸载的时候要先卸载a再卸载b最后卸载c。

    • 环形依赖:a->b->c->a。软件包a、b、c用一条命令同时装即可解决。

    • 模块依赖:当想要安装mysql-connector-odbc这个包的时候发现缺少依赖libodbcinst.so.2这个包,但是并没有这个依赖包,这是一个库依赖,.so.number结尾的都是库依赖,库依赖不是单独独立的一个包,它是某一个软件包中的一个软件,所以我们要安装的是这个软件所在的包。Linux软件包

      问题是我们怎么知道这个软件属于哪个包,解决方案是前往模块依赖查询网站:www.rpmfind.net,搜索之后就会找到我们要安装的依赖包。

      Linux软件包

安装升级与卸载

  1. 包全名与包名

    • 包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径
    • 包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库
  2. RPM安装:

    #rpm -ivh 包全名
    

    选项: -i(install) 安装

    ? -v(verbose) 显示详细信息

    ? -h(hash) 显示进度

    ? --nodeps 不检测依赖性(实际不使用)

  3. RPM包升级:

    #rpm -Uvh 包全名
    

    选项: -U(upgrade) 升级

  4. 卸载:

    #rpm -e 包名
    

    选项: -e(erase) 卸载

    ? --nodeps 不检查依赖性

查询

  1. 查询是否安装

    #rpm -q 包名
    

    #查询是否安装

    选项: -q(query) 查询


    #rpm -qa
    

    #查询所有已安装的RPM包

    选项: -a(all) 所有


    #rpm -qa | grep 包名
    

    #查询所有与包相关的RPM包

  2. 查询软件包详细信息

    #rpm -qi 包名
    #rpm -qip 包全名
    

    选项: -i(information) 查询软件信息

    ? -p(package) 查询未安装包信息

  3. 查询包中文件安装位置

    #rpm -ql 包名
    #rpm -qlp 包全名
    

    选项: -l(list) 列表

    ? -p(package) 查询未安装包信息(该包的计划安装位置)

  4. 查询系统文件属于哪个RPM包

    #rpm -qf 系统文件名
    

    选项: -f(file) 查询系统文件属于哪个软件包

  5. 查询软件包的依赖性

    #rpm -qR 包名
    #rpm -qRp 包全名
    

    选项: -R(requires) 查询软件包的依赖性

    ? -p(package) 查询未安装包信息

校验和文件提取

  1. RPM包校验:判断系统文件是否被人更改

    #rpm -V 已安装的包名
    

    #没有任何提示信息证明包没有做过修改

    选项: -V(verify) 校验制定RPM包中的文件

    执行结果示例S.5....T. c /etc/httpd/conf/httpd.conf,S.5....T.表示验证内容信息,c表示配置文件。

    验证内容中的8个信息的具体内容如下:(命令执行结果为8个字符,.表示相应类型没有修改)

    • S 文件大小是否改变
    • M 文件的类型或文件的权限(rwx)是否被改变
    • 5 文件MD5校验和是否改变(可以看成文件内容是否改变)
    • D 设备的中,从代码是否改变
    • L 文件路径是否改变
    • U 文件的属主(所有者)是否改变
    • G 文件的属组是否改变
    • T 文件的修改时间是否改变

    文件类型

    • c 配置文件(config file)
    • d 普通文档(documentation)
    • g “鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
    • l 授权文件(license file)
    • r 描述文件(read me)
  2. RPM包中文件提取:提取RPM包中指定文件(误操作删除系统文件后修复)

    #rpm2cpio 包全名 | cpio -idv .文件绝对路径	  
    //“.”代表把指定文件提取到当前目录下
    

    rpm2cpio将rpm包转换为cpio格式的命令

    cpio是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

    #cpio 选项<[文件|设备]
    

    选项: -i copy-in模式,还原

    ? -d 还原时自动新建目录

    ? -v 显示还原过程

    举个栗子:假设做了误操作把系统中的ls命令删掉了,执行下列命令。不知道ls命令属于哪个包可以到网上查找,这里我们查找到是coreutils-8.4-19.el6.i686.rpm这个包。

    rpm2cpio /Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls

    #提取RPM包中ls命令到当前目录的/bin/ls下

    cp /root/bin/ls /bin/

    #把ls命令复制回/bin/目录,修复文件丢失

yum在线管理

  1. yum就是为了解决依赖性问题而产生的。yum不是必须要联网,可以用本地光盘来作为yum源。yum的问题在于像Redhat这样的公司认为yum是一种售后服务,需要付费才可以使用,CentOS作为社区版Linux可以免费使用,但是在服务器上如果使用的是Redhat系列则需要付费使用。
  2. yum在线管理的意思就是yum和rpm命令管理的都是RPM包,并不存在yum包。rpm命令管理是手动操作而yum是自动管理。

网络yum源

? CentOS只要能联网,就可以直接利用CentOS官方网站的yum源进行下载安装和升级。只是CentOS的官方网站在国外,连起来有时候可能比较慢,这时候我们可以换成国内一些公开的免费的yum源地址。

? 网络yum源保存在/etc下的yum.repos.d目录当中,在这个目录中后缀名是.repo的都是合法的yum源,默认是CentOS-Baseyum源生效。

#vi /etc/yum.repos.d/CentOS-Base.repo

Linux软件包

  • [base] 容器名称,一定要放在[]中
  • name 容器说明,可以自己随便写
  • mirrorlist 镜像站点,这个可以注释掉
  • baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
  • enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
  • gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
  • gpgkey 数字证书的公钥文件保存位置。不用修改

yum命令

  1. 查询

    #yum list
    

    #查询所有可用软件包列表

    #yum search 关键字
    

    #搜索服务器上所有和关键字相关的包

  2. 安装

    #yum -y install 包名
    

    选项:install 安装

    ? -y 自动回答yes

  3. 升级

    #yum -y update 包名
    

    #update后如果不加包名则会升级所有的软件包包括Linux内核

    选项:update 升级

    ? -y 自动回答yes

  4. 卸载

    #yum -y remove 包名
    

    #remove会卸载掉该包所依赖的所有包,有可能会造成系统出现一定问题。

    选项:remove 卸载

    ? -y 自动回答yes

    Linux使用原则:安装的时候最小化安装,不安装多余软件;用什么软件装什么软件,尽量不卸载。

  5. YUM软件组管理命令

    #yum grouplist
    

    #列出所有可用的软件组列表

    #yum groupinstall 软件组名
    

    #安装指定软件组,组名可以由grouplist查询出来,如果组名有空格,则用“软件组名”这样的格式。

    #yum groupremove 软件组名
    

    #卸载指定软件组

源码包管理

  1. 区别:

    • 安装前:概念上的区别(前面已讲)
    • 安装后:安装位置不同
  2. RPM包安装位置(安装在默认位置)

    RPM包默认安装路径
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行的命令安装目录
    /usr/lib/ 程序所使用的函数库保存位置
    /usr/share/doc/ 基本的软件使用手册保存位置
    usr/share/man/ 帮助文件保存位置
  3. 源码包安装位置:安装在指定位置中,一般是/usr/local/软件名

  4. 安装位置不同的影响:

    • RPM包安装的服务可以使用系统服务管理命令(service)来管理(RPM包安装的服务的执行文件全都会安装在/etc/rc.d/init.d下),例如RPM包安
      装的apache的启动方法是:
      • #/etc/rc.d/init.d/httpd start
      • #service httpd start(Redhat专有)
    • 源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所
      以只能用绝对路径进行服务的管理,如:
      • /usr/local/apache2/bin/apachectl start

源码包安装

  1. 安装准备
    • 安装C语言编译器(gcc)
    • 下载源码包
  2. 注意事项
    • 源代码保存位置:/usr/local/src/
    • 软件安装位置:/usr/local/
    • 如何确定安装过程报错:
      • 安装过程停止
      • 出现error、warning或no的提示
  3. 源码包安装过程
    • 下载源码包;
    • 解压缩下载的源码包;
    • 进入解压缩目录(查看INSTALL安装说明README使用说明);
    • 安装说明中会有安装步骤,不熟悉安装过程的可以参考;
    • ./configure 软件配置与检查;
      • 定义需要的功能选项。
      • 检测系统环境是否符合安装要求。
      • 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
    • #make编译;
    • 至此上述操作如果失败的话不需要删除任何文件,执行#make clean清空编译产生的临时文件即可;
    • #make install安装。
  4. 源码包卸载:不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件。

脚本安装包

  • 脚本安装包并不是独立的软件包类型,常见安装的是源码包。
  • 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
  • 非常类似于Windows下软件的安装方式。
  • Linux中常见的脚本安装包主要是一些硬件驱动,硬件驱动在Linux中安装比较困难,厂商为了推广自己的硬件,针对Linux做了很多的安装脚本。

Linux软件包

上一篇:HTML中META属性详解 转载自 hero_213的博客


下一篇:超全整理!Linux性能分析工具汇总合集