Linux软件包管理

来源:互联网 发布:金刚1024控台怎么编程 编辑:程序博客网 时间:2024/06/13 19:16

一、软件包管理简介

源码包:
           开源
           自由选择所需功能
           编译安装更适合自己系统,执行效率更高
           卸载方便干净

           安装步骤较多
           编译过程时间长

二进制包(RPM包、系统默认包):
           包管理系统简单,通过几个命令实现软件包的安装、升级、卸载
           安装速度快

           无法看到源代码,功能选择不灵活
           依赖性

二、RPM包管理-rpm命令

1. RPM包命名规格

    httpd-2.2.15.15.e16.centos.1.i686.rpm

http           软件包名
2.2.15         软件版本号
15              软件发布次数
e16.centos  适合的Linux平台
i686           适合的硬件平台

2. RPM包依赖性

树形依赖:a->b->c(安装时先安装c再安装b,a,卸载时先卸载a再卸载b,c)
环形依赖:a->b->c->a(解决:一条命令同时安装a、b、c)
模块依赖:软件包依赖某个软件包中的某个模块/库,通常依赖的显示以.so.数字结尾,www.rpmfind.net可以查看该模块/库属于哪个软件包

3. 安装、升级与卸载

    包全名:操作的包是没有安装的软件包,通常是安装和升级时使用

    包名:操作已经安装的软件包,搜索/var/lib/rpm/中的数据库

(1)RPM安装

语法:rpm [ivh] 包全名
        -i(install) 安装
        -v(verbose) 显示详细信息
        -h(hash) 显示进度
        –nodeps 不检测依赖性
注意:–nodeps只推荐在实验时使用,在实际中如果底层依赖包没有安装完成那么安装完成后的软件多半是不能用的或者底层功能缺失

(2)RPM升级

语法:rpm [-Uvh] 包全名
        -U(upgrade)升级

(3)RPM卸载

语法:rpm [-e] 包名
        -e(erase) 卸载
        –nodeps 不检测依赖性

4. 查询

语法:rpm [-qailRpf] [包名/包全名/系统文件名]
        -q(query) 查询
        -a(all) 与-q一起使用,查询所有已安装的软件包
        -i(information) 与-q一起使用,查询软件信息
        -l(list) 与-q一起使用,列出软件包中文件
        -R(requires) 与-q一起使用,查询软件包的依赖性
        -p(package) 与上面选项一起使用,查询未安装软件包,跟包全名而不是包名
        -f(file) 与-q一起使用,查询文件属于哪个软件包,跟系统文件名
例子:rpm -qip zip-3.0-1.el6.i686.rpm查询未安装软件包信息
          rpm -qlp zip-3.0-1.el6.i686.rpm 查询包中安装/打算安装的文件位置

5. 校验

    使用校验判断系统文件是否被人修改

语法:rpm [-V] 包名
        -V(verify) 校验指定RPM包中的文件

    修改标志

这里写图片描述

6. 文件提取

    用于修复系统文件

语法:rpm2cpio 包全名 | cpio -idv .文件绝对路径
提示:cpio 用于创建软件档案文件和从档案文件中提取文件
例子:rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.e16.i686.rpm | cpio -idv ./bin/ls 提取RPM包中的ls命令到当前目录的/bin/ls下

语法:cpio [-idv] < [文件/设备]
        -i copy-in模式,从文件中提取数据
        -d 自动新建目录
        -v 显示还原过程

三、RPM包管理-yum在线管理

    Yum是一个基于RPM包管理的字符前端软件包管理器,能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包。

1. 网络yum源

    网络yum源其实都已经默认配置了,只要能看懂即可,使用命令vim /etc/yum.repos.d/CentOs-Base.repo查看配置内容

这里写图片描述

[base] 容器名称
name 容器说明
mirrorList 镜像站点
baseurl yum源服务器地址,默认是CentOS官方的yum源服务器(因为我是用的阿里云服务器,所以镜像是阿里云的yum源)
enabled 此容器是否生效,不写或设为1都是生效
gpgcheck RPM的数字证书是否生效
gpgkey 数字证书的公钥文件保存位置

2. yum命令

(1)查询

语法:yum list 查询所有可用软件包列表(远程服务器上)
          yum search 关键字(包名) 搜索服务器上所有和关键字相关的包
注意:包名和包全名的概念在rpm命令中存在

(2)安装、升级或卸载

语法:yum [-y] [install/update/remove] 包名
          -y 自动回答yes
注意:如果yum -y update后不增加包名会更新所有软件包,包括Linux内核,内核升级完成后需要在本地做配置,如果是远程执行这条命令,那么就会导致服务器崩溃
          一旦卸载某个包,它所依赖的包也会相应的被卸载

(3)软件组管理

语法:yum grouplist 列出所有可用的软件组列表

          yum [groupinstall/groupremove] 软件组名 安装或卸载指定软件组

3. 光盘yum源搭建

(1)挂载光盘

    mount /dev/sr0 /mnt/cdrom/

(2)失效网络yum源
    可以进入yum源文件将所有enable=0,但是吧,很麻烦。而yum源在检测时是通过.repo后缀,所以可以将其后缀名修改后失效。

mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOs-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak

(3)生效光盘yum源
    使得仅有CentOS-Media.repo(光盘yum源)生效,即enable=1,baseurl=file:///mnt/cdrom(光盘的挂载点)

四、源码包管理

1. 源码包和RPM包的区别

这里写图片描述

    源码包通常是手工指定安装位置,一般是/usr/local/软件名/

    安装位置不同带来的影响

RPM包安装的服务可以使用系统服务管理命令(service)管理,如/etc/rc.d/init.d/httpd start或者service httpd start(service会在系统默认位置/etc/rc.d/init.d下找服务)

而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径,所以只能使用绝对路径管理,如/usr/local/apache/bin/apachectl start

2. 源码包安装过程

(1)安装C语言编译器

yum -y install gcc

(2)下载源码包解压缩后进入目录

    所有源码包中目录中都有个INSTALL文件,其中有写入完整的安装过程,只需要按照上面的步骤执行即可

    ./configure –prefix=/usr/local/apache/

./configure 软件配置与检查
        定义需要的功能选项,如 –prefix=绝对路径 来定义安装位置
        检测系统环境是否符合安装要求,如是否安装了gcc
        把定义好的功能选项和检测系统环境的信息都写入Makefile文件用于后续编辑(即完成./configure后就会生成Makefile文件)

    make

编译,调用gcc,把源码包翻译成机器语言

make和./configure都不会向指定的安装位置下写入任何数据,如果这时候出现错误,只需要执行make clean清空编译产生的临时文件达到软件包的完整清空

    make install

真正向/usr/local/apache中写入数据,源码包的安装也就完成

(3)源码包的卸载

    无须卸载命令,直接删除安装目录即可,不会遗留任何垃圾文件

五、脚本安装包

    脚本安装包不是独立的软件包类型,只是人为的把安装过程写成了自动安装的脚本,只需要执行脚本定义简单参数就可以完成安装

(1)下载源码包解压缩后进入目录

    可以看到目录中有如setup.sh的脚本文件

(2)执行安装脚本

./setup.sh
执行脚本后按照提示设置回车执行下一步即可

原创粉丝点击