Linux-程序包管理

Linux上的软件安装有2种形式:源码二进制文件,源码需要在编译环境下编译安装,二进制可以直接安装。

1.程序包管理器 rpm

程序包管理器能够将目标二进制格式(也就是从源码编译好的二进制文件,包括:二进制程序、库文件、配置文件、帮助文件)组织成为一个或有限几个“包”文件,提供安装、升级、卸载、查询、校验等功能。

常见的程序包管理器有RPM(Redhat、CentOS)、DPKG(Debian、Ubuntu),下文提及的包管理器指RPM(因为生产环境服务器一般Redhat和CentOS居多)

1.1 程序包获取途径

(1) 系统发行版的光盘或官方的文件服务器(或镜像站点):
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 项目的官方站点
(3) 第三方组织,如:EPEL、著名的搜索引擎(如:http://pkgs.orghttp://rpmfind.nethttp://rpm.pbone.net
(4) 自己制作rmp包

建议使用rpm包前检查其合法性、来源合法性、程序包的完整性

1.2 rpm命令

rpm命令能实现软件的安装、升级、卸载、查询和校验、数据库维护等功能。

rpm命令:

语法

rpm  [OPTIONS]  [PACKAGE_FILE]

选项

安装:-i, --install
升级:-U, --update, -F, --freshen
卸载:-e, --erase
查询:-q, --query
校验:-V, --verify
数据库维护:--builddb, --initdb
1.2.1 安装

语法

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

习惯用法

rpm  -ivh  PACKAGE_FILE ...

OPTIONS

GENERAL OPTIONS:
-v:verbose,详细信息
-vv:更详细的输出
                
[install-options]:
-h:hash marks输出进度条;每个#表示2%的进度;
--test:测试安装,检查并报告依赖关系及冲突消息等;
--nodeps:忽略依赖关系;不建议;
--replacepkgs:重新安装
                    
#注意:rpm可以自带脚本,安装时可以不执行这些脚本;
preinstall:安装过程开始之前运行的脚本,%pre , --nopre
postinstall:安装过程完成之后运行的脚本,%post , --nopost
preuninstall:卸载过程真正开始执行之前运行的脚本,%preun, --nopreun 
postuninstall:卸载过程完成之后运行的脚本,%postun , --nopostun
以上四种都不执行:--noscripts
                            
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest:不检查包完整性信息;
1.2.2 升级

语法

-U:升级或安装;
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

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

习惯用法

rpm  -Uvh PACKAGE_FILE ...              
rpm  -Fvh PACKAGE_FILE ...

选项

--oldpackage:降级;
--force:强制升级;

注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
(2) 如果某原程序包的配置文件安装后曾被修改过,升级时,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,
而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

1.2.3 卸载

语法

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

选项

--allmatches:卸载所有匹配指定名称的程序包的各版本;
--nodeps:忽略依赖关系;
--test:测试卸载,dry run模式;

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

1.2.4 查询

语法

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

[select-options]

PACKAGE_NAME:查询指定的程序包是否已经安装,及其版本;
-a, --all:查询所有已经安装过的包;
-f  FILE:查询指定的文件由哪个程序包安装生成;
-p, --package PACKAGE_FILE:用于实现对未安装的程序包执行查询操作;
--whatprovides CAPABILITY:查询指定的CAPABILITY由哪个程序包提供;
--whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖;

[query-options]

--changelog:查询rpm包的changlog;
-l, --list:程序安装生成的所有文件列表;
-i, --info:程序包相关的信息,版本号、大小、所属的包组,等;
-c, --configfiles:查询指定的程序包提供的配置文件;
-d, --docfiles:查询指定的程序包提供的文档;
--provides:列出指定的程序包提供的所有的CAPABILITY;
-R, --requires:查询指定的程序包的依赖关系;
--scripts:查看程序包自带的脚本片断;
1.2.5 校验

语法

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

输出格式

输出格式是一个八个字符的字符串,和一个可能有的"c", 指明后面是一个配置文件,以及后面的文件名.
八个字符中的每一个都代表着一个文件属性与保存在RPM的数据库中的属性纪录值的比较结果. 单个的"."(句号)表明检查通过.下列字符代表特定检查的失败:

5      MD5校验和
S      文件大小
L      符号连接
T      修改时间
D      设备
U      用户
G      组
M      模式(包括许可和文件类型)

示例

[root@promote]~# rpm -V zsh
S.5....T.    /usr/share/zsh/5.0.2/functions/_SuSEconfig

导入密钥

#CentOS上获取并导入信任的包制作者或组织的密钥:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

验正
(1) 安装此组织签名的程序时,会自动执行验正;
(2) 手动验正:rpm -K PACKAGE_FILE

1.2.6 重新生成数据库

rpm管理器数据库路径:/var/lib/rpm/,rpm命令的查询操作通过此处的数据库进行。

rpm重建数据库

rpm --rebuilddb [--dbpath]

重建一个新的数据库

rpm --initdb [--dbpath]

2.程序包管理工具 yum、dnf

rpm在使用过程中遇到最头疼的事情就是需要手动处理依赖关系,搞不好捣鼓半天都解决不了,这个时候rpm包的前端管理工具yum应运而生了,它是一个客户端,自动处理rpm包的依赖关系,并从远程yum仓库自动下载需要的rpm包。有了yum,软件的查询、安装、卸载都仅需要一条命令,大大方便了运维人员。

yum - Yellowdog Updater Modified

yum配置存在于以下两个文件/目录
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置

仓库指向的定义:

[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
    #默认为:roundrobin,意为随机挑选;
cost=
    #默认为1000

详细的命令用法如下:

显示仓库列表

yum repolist [all|enabled|disabled]

显示程序包

yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]

安装程序包

yum install package1 [package2] [...]
yum reinstall package1 [package2] [...]  (重新安装)

升级程序包

yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)

检查可用升级

yum check-update

卸载程序包

yum remove | erase package1 [package2] [...]

查看程序包information

yum info [...]

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

yum provides | whatprovides feature1 [feature2] [...]

清理本地缓存

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

构建缓存

yum makecache

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

yum search string1 [string2] [...]

查看指定包所依赖的capabilities

yum deplist package1 [package2] [...]

查看yum事务历史

yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地程序包

yum localinstall rpmfile1 [rpmfile2] [...]
yum localupdate rpmfile1 [rpmfile2] [...]

包组管理的相关命令

yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

3.编译安装

通常按照习惯,程序源码应该放在/usr/local/src目录中集中管理,这是一个好的习惯。

C/C++程序编译安装步骤:

  • ./configure (首先进入源码包解压目录)
    (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
    (2) 检查依赖到的外部环境;
# 选项
# 帮助
./configure --help 
# 指定编译安装的路径 (建议使用,方便直接删除目录卸载程序)
./configure --prefix=/usr/local/nginx
  • make
    根据makefile文件,构建应用程序;此时只会产生临时文件,不会向最终目录复制文件,如果要删除临时文件不进行最终安装可以使用make clean命令。

  • make install
    向指定的安装目录拷贝程序文件。

编译安装的程序只能以全路径方式运行,而rpm包安装的程序既可以以全路径方式运行,又能以systemctl start 程序.service方式运行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容