您的位置:首页 > 产品设计 > 产品经理

rpm和yum的用法说明

2015-09-15 01:00 393 查看
1、RPM(redhat package manager)是redhat的包管理器用于进行打包,包管理(安装、升级、卸载、查询及校验)等功能。
rpmbuild是rpm的打包工具
a)RPM包的命名机制:
RPM包的一般格式为:
name-version-arch.rpm
name-version-arch.src.rpm
name:软件包名称。
version:分为主、次和修订的软件包版本号。
arch:硬件平台。硬件平台包括了:i386、i486、i586、i686、x86_64、ppc、sparc、alpha
src.rpm:源代码包。
以“openssl-1.0.1c-1.fc18.i686.rpm”为例:
openssl:是软件名称。
1.0.1c-1:是软件版本。
i686:是适用的硬件平台。
其中还包含有特殊的名称:
1、fcXX,elXX:表示这个软件包的发行商版本,如fc18,说明这个软件包是在Fedora 18下使用的。el6表示这个软件包是在RHEL 6.x(Red Hat Enterprise Linux)/CentOS 6.x下使用。
2、devel:表示这个RPM包是软件的开发包,或者叫做支包,它与主包之间是有依赖关系的。例如mysql-devel-5.1.52-1.el6_0.1.i686.rpm。
3、noarch:说明这样的软件包可以在任何平台上安装,不需要特定的硬件平台。在任何硬件平台上都可以运行。
b)如何获取rpm包:
1、发行版提供的程序包,光盘或者ios,一般在/dev/cdrom下
mkdir /media/cdrom
mount -r /dev/cdrom /media/cdrom/
2、Fedora-EPEL,只收录维护的比较好或者使用率高的
3、项目的官方站点
4、搜索引擎,比较靠谱的几个 http://rpmfind.net http://rpm.pbone.net http://pkgs.org 通过cat /etc/centos-release 查找linux版本
c)基于rpm命令实现程序包管理:

安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i:表示安装操作,指名安装option
-v:显示详细过程,-vv, -vvv显示更加详细的信息
-h:表示用#号显示安装进度
我们一般安装rpm包都使用: rpm -ivh 包名
--nodeps:忽略依赖关系安装,强制安装,不过不推荐,基本不可用
--replacepkgs:重新装一次
rpm -ivh 包名 --replacepkgs

升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;
-Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;
--nodeps
--oldpackage:降级;
--force:

卸载:
rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
一般使用如下命令进行删除:rpm -e 包名
查询:
rpm {-q|--query} [select-options] [query-options]
查询选项:
-qa: 查询本机已经安装的所有程序包;
-qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;
[root@localhost ~]# rpm -qf /etc/profile.d/vim.csh
vim-enhanced-7.4.160-1.el7.x86_64
-qc: 查询指定程序包安装生成的配置文件
[root@localhost ~]# rpm -qc vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
-qd: 查询指定的程序包安装生成的文档
[root@localhost ~]# rpm -qd iptables
/usr/share/doc/iptables-1.4.21/COPYING
/usr/share/doc/iptables-1.4.21/INCOMPATIBILITIES
/usr/share/man/man1/iptables-xml.1.gz
/usr/share/man/man8/ip6tables-restore.8.gz
/usr/share/man/man8/ip6tables-save.8.gz
/usr/share/man/man8/ip6tables.8.gz
/usr/share/man/man8/iptables-extensions.8.gz
/usr/share/man/man8/iptables-restore.8.gz
/usr/share/man/man8/iptables-save.8.gz
/usr/share/man/man8/iptables.8.gz
-qi: 查询指定的程序包的相关信息;
[root@localhost ~]# rpm -qi iptables
Name : iptables
Version : 1.4.21
Release : 13.el7
Architecture: x86_64
Install Date: 2015年08月31日 星期一 13时41分40秒
Group : System Environment/Base
Size : 1541839
License : GPLv2
Signature : RSA/SHA256, 2014年07月04日 星期五 10时08分31秒, Key ID 24c6a8a7f4a80eb5
Source RPM : iptables-1.4.21-13.el7.src.rpm
Build Date : 2014年06月10日 星期二 13时02分48秒
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.netfilter.org/ Summary : Tools for managing Linux kernel packet filtering capabilities
Description :
The iptables utility controls the network packet filtering code in the
Linux kernel. If you need to set up firewalls and/or IP masquerading,
you should install this package.
-ql: 查询程序包安装生成的所有文件的列表;
[root@localhost ~]# rpm -ql vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
-q --scripts:查询程序包相关的脚本:
[root@localhost ~]# rpm -q --scripts iptables
preinstall scriptlet (using /bin/sh):
for p in /etc/alternatives/iptables.*; do
if [ -h "$p" ]; then
ipt=$(readlink "$p")
echo "Removing alternatives for ${p##*/} with path $ipt"
/usr/sbin/alternatives --remove "${p##*/}" "$ipt"
fi
done
for p in /etc/alternatives/ip6tables.*; do
if [ -h "$p" ]; then
ipt=$(readlink "$p")
echo "Removing alternatives for ${p##*/} with path $ipt"
/usr/sbin/alternatives --remove "${p##*/}" "$ipt"
# create dummy alternatives entry to fix iptables-ipv6 package removal
/usr/sbin/alternatives --install /sbin/ip6tables.dummy "${p##*/}" "$ipt" 90
fi
done
postinstall program: /sbin/ldconfig
postuninstall program: /sbin/ldconfig
posttrans scriptlet (using /bin/sh):
# cleanup dummy alternatives to fix iptables-ipv6 package removal if still there
for p in /etc/alternatives/ip6tables.*; do
if [ -h "$p" ]; then
ipt=$(readlink "$p")
/usr/sbin/alternatives --remove "${p##*/}" "$ipt" || :
fi
done
脚本分为四类,分类如下:
preinstall: 安装前脚本
postinstall:安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本
-p: 查询针对是未安装的程序包文件;

校验:主要检查安装的包是否被改动
rpm {-V|--verify} [select-options] [verify-options]
S 表示文件大小被改动
M 权限被改变
5 校验码被改变
D 设备文件主设备号被改变
U 文件属主被改变
G 文件属组被改变
T 时间戳被改变
P caPabilities differ

包校验:
主要校验两个方面:
1.来源合法性验证:借助于非对称加密方式验证
2.完整性验证:借助于单向加密来实现
先要有对方的公钥,光盘有/etc/pki/rpm-gpg/下也有
导入密钥:rpm --import RPM-CPC-KEY-CentOS-7
然后校验:rpm -K RPM包
2、YUM(Yellowdog Updater Modified)RPM包的前端管理工具,能够自动解决RPM包的依赖关系。
YUM命令详解
yum check-update:列出所有可更新的软件清单
yum update:安装所有更新软件
yum install packagename:安装指定的软件
yum update packagename:更新指定的软件
yum list:列出所有可安裝的软件清单
yum list updates:列出所有可更新的软件包
yum list installed:列出所有已安装的软件包
yum remove packagename:删除指定的软件包及与之依赖的包
yum info packagename:用来获取包的用途
yum search packagename:查找包
yum provides filename:查询指定文件是哪个包生成的
yum reinstall packagename:重新安装
yum localinstall packagename:安装本地文件,这命令已经不用了,都用yum install
yum downgrade packagename:降级安装
yum makecache:生成缓存

清除YUM缓存
yum 会把下载的软件包和header存储在cache中,而不会自动删除。如果我们觉得它们占用了磁盘空间,可以使用yum clean指令进行清除,更精确 的用法是yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all全关掉
1.清除缓存目录(/var/cache/yum)下的软件包
命令:yum clean packages
2.清除缓存目录(/var/cache/yum)下的 headers
命令:yum clean headers
3.清除缓存目录(/var/cache/yum)下旧的 headers
命令:yum clean oldheaders
4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers
命令:yum clean, yum clean all (= yum clean packages; yum clean oldheaders)
还有一系列的包组安装删除查看命令用法同上面,只是在命令前加上了group,用来管理一组包的操作:
grouplist
groupinfo "GRP_NAME"
groupinstall "GRP_NAME"
groupremove "GRP_NAME"
仓库命令:
repolist [all|enabled|disabled]:列出可用仓库
repoinfo [all|enabled|disabled]:查看仓库香港信息

yum repositories的访问方式有3种: ftp://hostname/PATH/TO/REPO http://hostname/PATH/TO/REPO
file:///PATH/TO/REPO
yum程序的配置文件:
/etc/yum.conf:定义全局配置:对所有仓库都适用的配置
/etc/yum.repos.d/*.repo:一个文件通常用于一个或一组功能相近或相关的仓库
定义一个仓库指向即repo文件:
[REPO_ID] #自己定义就好了
name= #指名一个名字,这个可以自己定义
baseurl= #指名可以使用的路径见上面的3种方法,可以指定多个,但是包内容必须一致
# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE这个可以去网上抄一个
enabled={1|0} #表示是否启用
gpgcheck={1|0} #是否需要校验,1表示校验则必须填写gpgkey值通常是个文件,0表示不需要,则gpgkey可以不需要
gpgkey= #用于检验的文件名
cost= #开销是多少,越大开销越大,默认是1000
定义仓库指向可用变量:
写法如下:参考自己的设备状况及linux版本号选择相应值,不然会不可用 http://mirrors.magedu.com/CentOS/$releasever/os/$basearch $releasver用来引用当前系统主版本号
$basearch用来引用当前系统的基本架构
使用发行版光盘创建本地仓库:
1.挂载光盘
2.建一个仓库
[Centos7]
name=Centos7
baseurl=file:///media/cdrom
grpcheck=0
enabled=1
cost=100
创建本地仓库:
yum install createrepo
createrepo /PATH/TO/RPMFILES/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yum rpm