无论是Windows系统还是Linux系统,我们用户想要在操作系统上获得更多的乐趣还是更多的功能的话,就需要在一个干净的系统上安装各式各样的软件程序,Linux上的是ELF格式的,目前比较常见的程序包管理器如:
Redhat软件包管理器---rpm
Debian软件包管理器---dpkg
一、1、RPM
安装:rpm {-i|--install} [install-options] PACKAGE_FILE...
-v: verbose,详细信息
-vv: 更详细的输出
-h: hashmarks输出进度条;每个#表示2%的进度;
注意:在使用rpm进行程序包安装时一定要指明包的绝对路径,如:rpm –ivh /mnt/cdrom/Packageszsh-5.0.2-7.el7.x86_64.rpm; 也可以先进入到程序包所在的路径下再执行安装,如上操作;
[install-options]
--test:测试安装,但并不执行安装,只是帮助检测依赖关系及冲突;
--nodeps: 忽略程序包的依赖关系,直接进行安装;
--replacepkgs: 对程序包不卸载的情况下进行重新安装;
在这里要说明一下,rpm在安装时可以自带脚本,分为安装前、安装后、卸载前、卸载后四个类别; preinstall: 安装过程开始之前运行的脚本,%pre,
不运行preinstall脚本:--nopre
postinstall: 安装过程完成之后运行的脚本,%post,
不运行postinstall脚本:--nopost
preuninstall:卸载过程开始执行之前运行的脚本,%preun
不运行preuninstall脚本:--nopreun
postuninstall: 卸载过程完成之后运行的脚本,%postun
不运行postuninstall脚本:--nopostun
注:如果都不安装脚本可使用参数:--noscripts
--nosignature:不检查包签名信息,不检查来源合法性;
--nodigest: 不检查包完整性信息;
2、升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen}[install-options] PACKAGE_FILE ...
-U –upgrade: 表示有安装老版本程序时则升级,没有安装老版本程序时则进行安装;
-F –freshen: 表示有安装老版本程序时刚升级,没有安装老版本程序时不执行安装;
注意:(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,直接安装新版本内核;
(2) 如果某原程序包的配置文件安装后曾被修改过,升级后,新版本的程序提供的同一个配置文件不会覆盖原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
3、卸载
rpm {-e|--erase} [--allmatches] [--nodeps][--noscripts] [--test] PACKAGE_NAME ...
rpm –e zsh(注意卸载时不需要像安装时给出文件路径,卸载可以不用)
--allmatches: 卸载所有匹配指定名称的程序包的各版本;
--nodeps: 忽略依赖关系;
-test: 测试卸载;(同程序包安装)
4、查询
rpm {-q|--query} [select-options][query-options]
[select-options]
PACKAGE_NAME: 查询指定的程序包是否已经安装,及其版本;
-a,--all:查询所有已经安装过的包;
-f FILE: 查询指定的文件由哪个程序包安装生成;
[query-options]
--changelog: 查询rpm包的changelog;显示在什么时候做过更改;
-l,--list: 程序包安装生成的所有文件列表;
-i,--info: 程序包相关的信息,版本号、大小、所属的包组,等;
-c,--configfiles: 查询指定的程包提供的配置文件;
-d,--docfiles: 查询指定的程序包提供的文档;
-p,--packagePACKAGE_FILE: 用于实现对未安装的程序包执行查询操作;
注意:由于程序未被安装,所以在查询时必须要指定全路径,否则会报错;我的是挂载在/mnt目录下,所以指定的为上面的路径;
-p选项还可以查询指定程序包的信息、版本、配置文件、安装文档… 具体实现方法同
上面类似,如:rpm –qpl /mnt/cdrom/Packages/zsh-5.0.2-7.el7.x86_64.rpm
rpm –qpi /mnt/cdrom/Packages/zsh-5.0.2-7.el7.x86_64.rpm
rpm –qpf /mnt/cdrom/Packages/zsh-5.0.2-7.el7.x86_64.rpm
…
5、校验
rpm {-V|--verify}[select-options] [verify-options]
-V: 如果程序包中的某个文件发生改变,该文件被改变的属性将被输出至屏幕;
S.5....T.:对应文件的属性值,共有9个字符串;
S 文件大小是否改变
M 文件权限是否改变
5 md5码是否改变
D 主次版本号是否不匹配
L readLink路径是否不匹配
U 属主是否改变
G 属组是否改变
T 时间戳是否改变
P 功能差异
6、包的验证
每个程序包都是由某个机构或个人制作而出的,他们在程序包制作完成后都会在包的背后加盖上自己的印签,加盖的印签就叫做数字签名;数字签名是使用非对称加密方式实现的。在包制作完成后制作者会用自己的私钥对包进行加密,我们如果要验证包的合法性就要使用与制作者私钥相对应的公钥进行解密,如成功则包合法,不成功则包被修改过;
如果带有私钥的包被作者以外的人修改,但没有拿包制作者的私钥重新加密的,使用者用公钥就不能把私钥解密;
如果是包制作者使用把包制作好后使用自己的私钥进行加密的,使用者就可以用公钥进行解密,从而可以放心使用;
获取并导入信任的包制作者的密钥:
对于CentOS 7发行版来说: rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
验证:
(1) 安装此组织签名的程序时,会自动执行验证;
(2) 手动验证: rpm -K PACKAGE_FILE
7、数据库重建
rpm {--initdb|--rebuilddb}
--initdb: 初始化数据库,当前无任何数据库可初始化创建一个新的;当前有时不执行任何操作;
--rebuilddb: 重新构建,通过读取系统上所有已经安装过的程序包进行重新创建;
二、YUM命令
yum是由yellow dog团队开发,它的全称为:YellowdogUpdate Modefier;yum是rpm包前端管理器,yum的架构基于C/S(C/S就是访问yum所依赖的文件服务器是C/S的,而yum本身不是),服务器端称为yum repository(简称 yum repo)而客户则是通过更改配置文件中的url来确定访问哪一台yum服务器的;yum repo存储了许多的rpm包,客户端安装包时会从yum repo里面下载并分析并解决依赖关系,方便程序包的安装;
要使用yum首先要做的就是对yum配置文件进行创建或修改成自己需要对应的仓库;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(gpg的密钥文件)
enablegroups={1|0}(是否允许组)
failovermaethod={roundrobin|priority}(默认为:roundrobin,意为随机)
cost(开销)=默认为1000
yum命令的使用方法
yum [options] [command] [package ...]
显示仓库列表:
repolist [all|disabled|enabled]
显示程序包List:
yumlist[all|glob_exp1] [glob_exp2]...
yum {list available|installed|updates} [glob_exp1] [...]
安装程序包:
install package1 [package2] [...]
reinstall package1 [package2] [...] (重新安装)
升级程序包:
update[package1] [package2] [...]
downgrade package1 [package2] [...] (降级)
例:yum update zsh
检查可用升级
check-update
例:yum check-update
卸载程序包:
remove | erase package1 [package2] [...]
例:yum remove gcc
查看程序包information:
info [...]
例:yum info gcc
查看指定的特性(可以是某文件)是由哪个程序包所提供
provides | whatprovides feature1 [feature2] [...]
例:yum provides /bin/ls
清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
例:yum clean all
构建缓存:
Makecache
例:yum makecache
搜索:模糊匹配
search string1 [string2] [...]
例:yum search bash
查看指定包所依赖的capabilities;
deplist package1 [package2] [...]
例:yum deplist gcc
查看yum事务历史:
history[info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
例:yum history summary
yum history
yum history list
安装及升级本地程序包:(不是仓库中的包)
* localinstall rpmfile1[rpmfile2] [...]
(maintained for legacy reasonsonly - use install)
* localupdate rpmfile1 [rpmfile2][...]
(maintained for legacy reasons only - use update)
yum的命令行选项:
--nogpgcheck: 禁止进行gpg check;
例:yum --nogpgcheck installzsh
-y: 自动回答为“yes”
-q, --quiet: 启用静默模式;
例:yum –y -q install gcc
--disablerepo=repoidglob: 临时禁用此处指定的repo;
--enablerepo=repoidglob: 临时启用此处指定的repo;
--noplugins: 禁用所有插件;
yum的repo配置文件中可用的变量;
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;
$basearch: 基础平台;
$YUM0-$YUM9…
例:http://mirrors.magedu.com/centos/$releasever/$basearch/os
创建yum仓库;
createrepo [options] <directory>
例:yum install createrepo
createrepo./
有时候可能找不到合适的rpm包,或我们想需要更多的功能的时候就需要对程序包进行编译安装了。
源码包里面有众多文件,在这些文件会存在依赖关系,我们不可能通过gcc的方式来手动进行编译,这时就需要用到makefile用于指导make命令调用相应处理器来处理这些事情,而make文件对用户而言并非是写死特定的,可以根据用户的需要自由生成,所以make文件并不是事先存在的,从头看一下,进入源码包后,在文件中有一个configure的文件,conofigure可以生成makefile.in模版,最后生成makefile文件;如图:
编译安装主要分为三个步骤:
第一步:
./configure
选项:指定安装路径–prefix=/PATH/TO/SOMEWHERE
配置文件路径–sysconfigdir=/PATH/TO/SOMEWHERE
开启某些选项–enable-FEATURE
关闭某些选项–disable-FEATURE
第二步:make
第三步:make install
每三步过后,编译安装就结束了,剩下的就是去配置使用安装好的文件了!
原文地址:http://519137.blog.51cto.com/509137/1728404