linux下程序包管理

我是一个老实人从来不说实话,我是一个好人从来不说真话,学习linux有段时间了,太高深的东西还不懂,就写一下最近学习的程序包管理吧。

大家都知道在我们学习linux主要是搞运维的,那么我们每天上班的时候就避免不了跟程序包打交道,你不信啊?反正我上班的时候领导总是在我不经意的抬头瞬间给我抛一个媚眼,我立马就领悟了领导的意思,有活要干了,最好不是服务器挂了老天保佑。

有时候我们需要在系统上安装某个软件或者服务(就是程序包),可能需要现在本地磁盘上查一下有没有这些程序包,有的话我们可以直接使用rpm 命令来执行安装,没有的话我们需要去自己的小仓库或者公司提供的程序仓库当中查找安装。还是没有的话,就需要我们去天之涯海之角很远很远的地方取经了,好比网上活雷锋提供的云仓库。我知道的好用安全的云仓库有:

搜狐的:mirrors.sohu.com

网易的:mirrors.163.com

马云的:mirrors.aliyun.com

第三方程序包提供者:epel

http://www.loveyun.net/centos修改镜像为国内的阿里云源或者163源等国内源/)这里可以参考一下



基本的程序包(软件包)管理命令有两个(其实有多个,这里我们只介绍两个):rpm与yum

rpm 与 yum 的区别主要是yum执行安装时会一并安装所有存在依赖关系的安装包,rpm安装时若遇到存在依赖关系的安装包,必须手动下载此安装包先进行安装才能进行接下来的步骤。

centos上rpm程序包的管理:

一.安装

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

-i或者--install后面跟程序包名表示静默安装程序包

-h:以#组成的排列表示安装进度

-v:显示安装过程中的详细信息,v越多越详细,如-vv,-vvv...

--nodeps:安装时忽略依赖关系,直接安装(装完了有可能无法正常使用)

--replacepkgs:覆盖安装,重新安装并覆盖原有文件

--force:强制安装

--test:不是真的安装,仅报告依赖关系以及冲突信息

安装时常用组合-ivh,-ivvh

例如:我们要安装wireless-tools-29-5.1.1.el6.x86_64.rpm这个程序包用来实现linux的无线网功能。

1.下载程序包wireless-tools-29-5.1.1.el6.x86_64.rpm到本地目录~/local/rpmmanagertest

2.使用rpm -ivh wireless-tools-29-5.1.1.el6.x86_64.rpm安装这个程序包



二.查询

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

[select-options]:

1、查询某包或某些包是否安装:

rpm -q PACKAGE_NAME...

2、查询已经安装的所有包:

rpm -qa

3、查询某文件是由哪个包安装生成:

rpm -qf /PATH/TO/SOMEFILE

4、查询尚未安装的包文件的相关信息

-p

# rpm -qpi PACKAGE_FILE

[query-options]:

1、查询某包的简要说明信息:

rpm -qi PACKAGE_NAME

2、查询某包安装生成的文件列表:

rpm -ql PACKAGE_NAME

3、查询某包安装完成后生成的所有配置文件:

rpm -qc PACKAGE_NAME

4、查询某包安装完成后生成的所有帮助文件:

rpm -qd PACKAGE_NAME

5、查看某包制作时随版本变化的changelog信息:

rpm -q --changelog PACKAGE_NAME

6、查询某包提供的capabilities:

rpm -q --provides PACKAGE_NAME

7、查询某包所依赖的capabilities:

rpm -q --requires PACKAGE_NAME

8、查询某包安装或卸载时执行脚本:

rpm -q --scripts PACKAGE_NAME

脚本有四类:

preinstall: 安装过程开始之前执行的脚本;

postinstall: 安装过程完成之后执行的脚本;

preuninstall: 卸载开始之前执行的脚本 ;

postuninstall: 卸载过程完成之后执行的脚本;



三、升级

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

-U: 升级或安装

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

-F:升级

组合:-Uvh, -Fvh

--nodeps:忽略依赖关系升级

--force:强制升级

--oldpackage:降级到旧版本;

注意:一定不要对内核执行升级;Linux允许多内核共存,所以,可以直接安装多个不同版本内核;

注意:如果程序包的配置文件安装后曾被修改,升级时,新版本的文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存;



四、卸载

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

--nodeps:忽略依赖关系;

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

--allmatches: 如果一个程序包同时安装多个版本,则此选项一次全部卸载之;

简单用法:rpm -e PACKAGE_NAME...

注意:如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀.rpmsave)后留存;



五、程序包的校验

查看程序包安装之后生成的文件是否遭到改动过

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

-V可以验证程序包安装后有哪些内容遭改动

S file Size differs

M Mode differs (includes permissions and file type)

5 digest (formerly MD5 sum) differs

D Device major/minor number mismatch

L readLink(2) path mismatch

U User ownership differs

G Group ownership differs

T mTime differs

P caPabilities differ

没有信息显示说明php程序安装之后并没有遭到改变



因为linux安全等级并不是很高,如果装载了来源不明或者内容遭到恶意修改留有漏洞和后门的程序包,对系统安全来说是极大的隐患,尤其在生产环境中更是如此,绝对不能装载来源不明的程序包。那么我们怎么检测一个程序包是不是遭遇修改,是不是来源与信得过的发布者呢?

程序包的合法性验正:

来源合法:

由我们信任的制作者提供

依赖于:制作者的数字签名;签名是作者使用自己的私钥加密程序包的特性码进行的;

内容合法:

包未被二次修改;完整性校验成功

依赖于:制作者提供的程序特征码;

验正方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较;

验正其光盘中程序包的来源合法性及完整性:

因为光盘中会附带验证码文件,我们要验证光盘里某个程序包的完整性合法性,首先要提取这个文件,例如:我系统光盘挂载到/media/dvd

其中RPM-GPG-KEY-CentOS-6文件就是验证centos上程序包的合法及完整性的文件,我们使用rpm --import命令将文件导入到内存

rpm --import /path/to/RPM-GPG-KEY-FILE

例如:# rpm --import RPM-GPG-KEY-CentOS-6

验正:rpm {-K|--checksig} PACKAGE_FILE

--nosignature: 不检查来源合法性

--nodigest: 不检查完整性

例如:#cd Packages

#rpm -K php-5.3.3-38.el6.x86_64.rpm

rsa sha1 (md5) pgp md5 OK说明程序包的合法性OK完整性OK啊,哈哈,好不容易啊,注意所有操作都要在当前目录下操作。导入KEY文件在文件坐在当前目录执行--import,验证rpm包在rom包所在目录下执行-K。



rpm管理器数据库:/var/lib/rpm

我们知道rpm实现查找一个程序包生成哪些文件和配置文件,这些相关的信息为什么可以生成呢?那是因为安装rpm工具的时候给它创建了一个数据库,这个数据库在/var/lib/rpm中,当我们安装一个程序包时,rpm会自动将所有相关信息存储到/var/lib/rpm中,这样当我们回头或查找或卸载软件包时,就会直接从此数据库中读取信息。

在时期的linux运行过程中,由于各种不确定因素会导致此数据库文件丢失或者损坏(可能人为误删,可能磁盘坏了导致文件丢失),那么我们就需要重新建立此数据库(工作环境中不允许重装系统)。

重建数据库:

rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]

--initdb: 初始化数据库,即数据库完全不存时,可新建之;

--rebuilddb: 无论当前数据存在与否,都会直接重建此库;



yum程序包管理

下面是某度对yum的解释

Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。

我们要使用yum命令对程序包执行安装、卸载、升级、查询的工作,首先要配置好yum所指向的各种仓库(仓库里藏着很多程序包)才能自动下载它们为我所用。

yum的配置文件有两个

主配置文件:

/etc/yum.conf为个仓库指向提供公共默认规则,比如定义调用仓库资源时默认是不是要检测程序包合法性的gpgcheck。

各个分仓库文件的定义:

分仓库一般是在/etc/yum.repos.d/*.repo中定义的。每个分仓库文件必须用.repo命名才能生效,且每个文件中可以定义多个库指向。

文件中通常需要定义以下几项内容(较常用的,不常用的不说了):

[repositoryid]:此ID唯一标识此分库的指向,必须是整个单词,不能与别的库相同;

name=描述信息

mirrorlist=url指向镜像站点地址列表(就是所有的指向仓库路径的列表,因为路径太多一个一个使用baseurl指定太麻烦,我们就生成个地址列表,用mirrorlist指向这个列表文件就行了)

baseurl=url指向镜像站点(就是指向仓库的路径)

url分为:

本地:file:///生成了repodata目录仓库;

ftp路径:ftp://生成了repodata目录仓库

http路径:http://生成了repodata目录的仓库;

gpgcheck={1|0}:1表示启用检测,0表示关闭

enabled={1|0}:1表示启用该分库,0表示关闭



由于使用yum命令必须有可用的仓库,所以我们先来创建一个本地仓库

1.我们建立一个http指向的本地仓库,首先要开启httpd服务(如果无法开启则需要安装httpd包),还要关闭防火墙service iptables stop;

2.我们使用cp命令到挂载的光盘中下载一些程序包到/var/www/html/xen4中,然后使用createrepo命令在此目录下创建repodata(此命令需要提前安装createrepo程序包)

3.cd到/etc/yum.repos.d/下创建一个仓库配置文件

4.使用yum clean命令清理缓存,使用yum makecache命令创建新缓存,使用yum repolist查看可以使用的仓库



我们已经创建了一个包含许多PHP程序包的本地仓库,使用http可以访问,下面我们介绍一下yum对仓库内程序包的管理。

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

可用选项:

-y: 自动回答为“yes”

--disablerepo=: 临时禁用在配置文件中配置并启用的某repository;

--enablerepo=:临时启用指定的某repo;

--nogpgcheck: 禁止做包校验;



一、查看所有以创建的仓库配置文件.repo

yum listrepo

二、清理缓存文件

yum clean all

三、创建新的缓存

yum makecache



四、程序包查找

yum list [all | glob_exp1] [glob_exp2] [...]

查找所有的程序包文件,后面可以使用glob表达式给定查看条件

yum list {available|updates|installed|extras|obsoletes} [glob_exp1] [...]

查找 可用的/可升级的/已安装的/更新的/过时的程序包

yum grouplist [hidden] [groupwildcard] [...]

查找包组文件



五、程序包安装

yum install package1 [package2] [...]

注意: 只需要提供包名;如果某包有在不同仓库中有多个不同版本,默认会安装最新版本;如果要安装指定版本:install PACKAGE-VERSION ...

重新安装(覆盖安装)

yum reinstall package1 [package2] [...]



六、程序包升级

update [package1] [package2] [...]

程序包降级:

downgrade package1 [package2] [...]

检查有哪些升级可用:

check-update



七、程序包卸载

yum remove|erase package

所有依赖于此程序包的其他程序包都会被卸载



八、程序包信息查询

查询程序的相关简要信息:info PACKAGE ...

在包名和sumary信息中搜索指定的关键字:search KEYWORD ...

查询指定文件由哪个程序包安装生成:provides|whatprovides /PATH/TO/SOMEFILE



九、安装或升级本地程序包

localinstall rpmfile1 [rpmfile2] [...]

用于安装仓库中并不存在的程序包文件,这些程序包有可能又依赖于仓库中的某些程序包;我们可以从其他途径获取一些程序包下载到本地目录,使用此命令安装。

localupdate rpmfile1 [rpmfile2] [...]

用本地下载的程序包对已安装的一些包进行升级



十、包组管理:

列出所有包组:grouplist

显示指定包组详情:groupinfo group1 [...]

安装:groupinstall group1 [group2] [...]

卸载:groupremove group1 [group2] [...]

升级:groupupdate group1 [group2] [...]

Note: 可直接用install、remove或update来管理包组:

@GROUP_NAME

例如:# yum install @"Server Platform Development"



写完这篇博客真是头大啊,开始还不太熟悉的一些命令,现在全都能熟练使用了,这就是写博客的好处,写的不仅仅是rpm/yum,我在家里写没有环境,自己搭的,下载到win上的程序包怎么加载linux虚拟机上让我费劲脑汁,最终博客写完了我又学会了好几项技能。我先去万达喝杯coffee,看看美女提高下肾上腺,晚上要好好休息下。

时间: 2024-09-29 19:38:43

linux下程序包管理的相关文章

Linux下程序包管理之YUM

实验环境: CentOS release 6.6 (Final)  一台 IP地址:172.16.249.230 附带:CentOS release 6.6光盘镜像文件 CentOS-6.6-x86_64-bin-DVD1.iso CentOS-6.6-x86_64-bin-DVD2.iso YUM(Yellow dog Updater, Modified) 由Duke University团队,修改Yellow Dog Linux的Yellow Dog Updater开发而成, 是一个基于 R

Linux下程序包管理工具RPM

实验环境: CentOS release 6.6 (Final)  一台 IP地址:172.16.249.230 RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:在CentOS .Redhat.Fedora .SuSE.YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用: 一.RPM程序包管理的用途: 1.可以安装.删除.升级和管理软件:当然也支持在线安装和升级软件:

linux之程序包管理器(rpm)

linux下的程序包可支持多种工具编写的,如C.C++.PERL等. 但是这种高级语言编写出来的代码是我们人能看懂的,但是计算机是看不懂的,那么计算机怎么执行,怎么了解人要它做什么呢? 这就需要我们做一些转换了,把人能读懂的语言让机器也能识别,这个过程就是由编译器完成的,通常是吧代码语言转换成二进制语言. 过程:预处理.编译.汇编.链接 一个程序的运行大部分时间是离不开库的. 什么是库呢?库也是一种程序,只不过与其他程序不同,库没有执行入口,不能独立运行,只能被其他独立运行的程序调用的时候才能执

linux的程序包管理-rpm

我们知道,程序就是指令加上数据的集合或者称为算法加上数据结构的集合.应用程序以源代码和二进制的形式存在:源代码是包含了整个应用程序的编程语言的所有代码的文本文件:二进制则是将源代码经过一系列的转换操作之后得到的可以直接执行的文件.    使用源代码安装应用程序的步骤为:预处理(预处理器) --> 编译(编译器) --> 字节码 --> 汇编(汇编器) --> 链接(链接器) --> 可以直接执行的二进制程序文件.当我们使用源代码安装应用程序时,不同操作系统的相同操作安装出来的

Linux中程序包管理

u    无论我们使用哪种操作系统,仅使用操作系统自带的程序包一般都满足不了我们的使用需求,所以我们都需要安装程序.这篇博文我们来讲解一下在Linux操作系统中我们该如何安装程序. 本篇文章会涉及rpm管理程序包.yum管理程序包.yum仓库的指定.自己编译源码安装程序.简要介绍一下该如何自己建立一个yum仓库给其他主机提供程序包. 一.rpm管理程序包 (1)如何获取安装包 1)系统发行版的光盘或者官方的文件服务器(或者镜像站点): http://mirrors.aliyun.com/ htt

Linux系统程序包管理

Linux程序包管理 API:Application Program Interface ABI:Application Binary INnterface Unix-like,系统上的二级制格式的应用程序文件格式为 ELF Windows系统的二级制格式的应用程序文件格式为: exe,msi 库级别的虚拟化: Linux:WinE,可以实现在Linux系统上运行Windows的二进制可执行程序 Windows:Cywin,可以实现在Windows系统上运行Linux的位二进制可执行程序 各种编

Linux的程序包管理器(上)——rpm详解

在使用Linux操作系统的过程中,我们需要的一些服务(例如Nginx)并没有提供,需要用户自行安装相应的程序包,才能使用相应的服务.本文以CentOS6.6为例,分三小节为读者朋友们尽可能详细的讲解rpm.yum以及程序包的编译安装三种程序包的管理方法. rpm rpm包管理工具是Red Hat公司贡献的一款rpm程序包管理器,在RHEL.CentOS.Fedora.SUSE等主流发行版本中,被广泛使用. rpm包管理工具可用于安装,升级,卸载,重新安装程序:也可以用于查询当前系统上安装了哪些程

Linux的程序包管理

软件包管理工具:rpm.yum POSIX:Portable Openratin System  跨平台调用 API:兼容,意味开发库兼容,因此,源代码可跨平台 ABI:兼容,编译后的程序可以跨平台 库为函数,function 库:可执行程序,本身不能作为程序执行入口,但可以被调用 是编译好的二进制格式 程序的过程:预编译.编译.汇编.链接 静态链接:将库包含在程序中 动态链接:dll,so(shared object) 编译:源代码翻译成cpu指令集的过程 注意: os平台:编译好的应用程序必

谢烟客---------Linux之程序包管理基础知识

内核不提供特定的功能:功能由程序提供 程序的格式,ABI Windows:EXE Linux:ELF 程序编译的过程: 源程序 --> 编译 --> 汇编代码 --> 汇编 --> 二进制程序 --> 链接 编译的分类: 静态编译: 将程序运行时依赖的库编译进程序 动态编译:编译后需要链接库,在程序运行时,依据链接找到共享的库 程序跨平台运行 1.库虚拟化,虚拟出对应平台的库和ABI;程序运行在库之上 1).Linux上运行WINE程序,即可虚拟出Linux程序运行所依赖的库