linux,rpm,yum详细使用说明
本文对linux包管理工具,rpm,yum做详细使用说明。
一,RPM软件包管理器
介绍:
什么是RPM包管理器
RPM是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。
rpm的作用
打包,包管理(安装、升级、卸载、查询及校验)
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-2.2.1c-1.el7.x86_64.rpm”为例:
openssl:是软件名称。
2.2.1c-1:是软件版本。(2为主版本,2.1c为次版本,-1为软件包修正版本)
el7:软件包使用系统环境,为rhel 7.x.
x86_64:是适用的硬件平台.
其中还包含有特殊的名称:
1、fcXX,elXX:表示这个软件包的发行商版本,就像这里的fc18,说明这个软件包是在Fedora 18下使用的。而openssl-1.0.0-20.el6.x86_64.rpm表示这个软件包是在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:说明这样的软件包可以在任何平台上安装,不需要特定的硬件平台。在任何硬件平台上都可以运行。
如何获取rpm包:
1、发行版提供的程序包;
2、Fedora-EPEL
3、项目的官方站点
4、搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
RPM详细使用:
安装、升级、卸载、查询
1)安装:(首先需要下载rpm包,然后才可以安装)
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i:
-v:显示详细过程,-vv, -vvv
-h:
每个rpm包都提供一个或多个(capabilities)功能
--nodeps:忽略依赖关系安装,(不推荐,因为安装后软件包需要依赖的功能将无法实现)
--replacepkgs:重装程序包
示例:
#成功安装zsh软件包 [root@os01 Packages]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-7.el7 ################################# [100%] #安装php-mysql,依赖php-pdo(x86-64),解决方法:安装依赖包或者使用-nodeps忽略依赖关系安装 [root@os01 Packages]# rpm -ivh php-mysql-5.4.16-23.el7_0.3.x86_64.rpm error: Failed dependencies: php-pdo(x86-64) = 5.4.16-23.el7_0.3 is needed by php-mysql-5.4.16-23.el7_0.3.x86_64 [root@os01 Packages]# rpm -ivh php-mysql-5.4.16-23.el7_0.3.x86_64.rpm --nodeps #忽略依赖关系 Preparing... ################################# [100%] Updating / installing... 1:php-mysql-5.4.16-23.el7_0.3 ################################# [100%] #重新安装,重新安装php-mysql 1:php-mysql-5.4.16-23.el7_0.3 ################################# [100%] [root@os01 Packages]# rpm -ivh php-mysql-5.4.16-23.el7_0.3.x86_64.rpm --nodeps --replacepkgs Preparing... ################################# [100%] Updating / installing... 1:php-mysql-5.4.16-23.el7_0.3 ################################# [100%]
2)升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-Uvh: 如果有旧版程序包,则升级之;如果没有,则安装之;
-Fvh: 如果有旧版程序包,则升级之;如果没有,则不安装;
--nodeps
--oldpackage:降级,高版本向低版本(一般很少用)
--force: 强制安装
rpm -i --force --nodeps 可以忽略所有依赖关系和文件问题,什么包
都能安装上,但这种强制安装的软件包不能保证完全发挥功能
示例:
# 升级samba软件包,因为没有安装,没有旧版本,所以直接安装 [root@zy03 Packages]# rpm -Uvh samba-3.6.23-20.el6.x86_64.rpm --nodeps Preparing... ########################################### [100%] 1:samba ########################################### [100%] #之后下载高版本samba-4.1.12-21.el7_1.x86_64.rpm,做升级安装,提示conflicts冲突,使用--nodeps --force强行升级安装 a.txt datafile Downloads ip.txt Pictures Templates [root@zy03 ~]# rpm -Uvh samba-4.1.12-21.el7_1.x86_64.rpm --nodeps warning: samba-4.1.12-21.el7_1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Preparing... ########################################### [100%] file /usr/share/man/man1/smbstatus.1.gz from install of samba-0:4.1.12-21.el7_1.x86_64 conflicts with file from package samba-common-0:3.6.9-151.el6.x86_64 #强制安装 --force [root@zy03 ~]# rpm -Uvh samba-4.1.12-21.el7_1.x86_64.rpm --nodeps --force warning: samba-4.1.12-21.el7_1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Preparing... ########################################### [100%] 1:samba ########################################### [100%]
3)卸载:
rpm {-e|--erase} [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
示例:
#卸载刚才安装的samba 只要带包名称即可,没有消息证明卸载成功 [root@zy03 ~]# rpm -e samba #无消息证明卸载成功 [root@zy03 ~]# rpm -e samba error: package samba is not installed #--test 不真实卸载,只查看卸载需要的信息 [root@zy03 Packages]# rpm -e httpd --test error: Failed dependencies: httpd >= 2.2.0 is needed by (installed) gnome-user-share-2.28.2-3.el6.x86_64
4)查询
rpm {-q|--query} [select-options] [query-options]
查询选项:
-qa: 查询本机已经安装的所有程序包;
-qf /PATH/TO/SOMEFILE: 查询此处的文件由哪个程序包安装生成;
-qc: 查询指定程序包安装生成的配置文件
-qd: 查询指定的程序包安装生成的文档
-qi: 查询指定的程序包的相关信息;
-ql: 查询程序包安装生成的所有文件的列表;
-q --scripts:查询程序包相关的脚本:
preinstall: 安装前脚本
postinstall:安装后脚本
preuninstall: 卸载前脚本
postuninstall: 卸载后脚本
-p: 查询针对是未安装的程序包文件;
-qpl: 列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
示例:
# -qa 查询所有已安装的包,过滤出http(一般用于查询有没安装某个软件包) [root@zy03 ~]# rpm -qa|grep httpd httpd-2.2.15-47.el6.centos.x86_64 httpd-tools-2.2.15-47.el6.centos.x86_64 #-qf 查询httpd.conf文件是由哪个安装包生成 [root@zy03 ~]# rpm -qf /etc/httpd/conf/httpd.conf httpd-2.2.15-47.el6.centos.x86_64 #-qc: 查询httpd安装生成的配置文件 [root@zy03 ~]# rpm -qc httpd /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/logrotate.d/httpd /etc/sysconfig/htcacheclean /etc/sysconfig/httpd /var/www/error/HTTP_BAD_GATEWAY.html.var ........... #查询指定的httpd生成的文档 [root@zy03 ~]# rpm -qd httpd /usr/share/doc/httpd-2.2.15/ABOUT_APACHE /usr/share/doc/httpd-2.2.15/CHANGES /usr/share/doc/httpd-2.2.15/LICENSE /usr/share/doc/httpd-2.2.15/NOTICE /usr/share/doc/httpd-2.2.15/README ....... # -ql: 查询httpd安装生成的所有文件的列表; [root@zy03 bin]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf ....... # -q --scripts:查询程序包相关的脚本 [root@zy03 bin]# rpm -q --scripts m4 postinstall scriptlet (using /bin/sh): #安装后执行的脚本 if [ -f /usr/share/info/m4.info ]; then # --excludedocs? /sbin/install-info /usr/share/info/m4.info /usr/share/info/dir || : fi preuninstall scriptlet (using /bin/sh): #卸载前执行的脚本 if [ "$1" = 0 ]; then if [ -f /usr/share/info/m4.info ]; then # --excludedocs? /sbin/install-info --delete /usr/share/info/m4.info /usr/share/info/dir || : fi fi # -p: 查询针对是未安装的程序包文件; qpi qpl [root@zy03 Packages]# rpm -qpi mysql-5.1.73-5.el6_6.x86_64.rpm #包信息 Name : mysql Relocations: (not relocatable) Version : 5.1.73 Vendor: CentOS Release : 5.el6_6 Build Date: Mon 22 Jun 2015 09:08:32 PM CST Install Date: (not installed) Build Host: c6b9.bsys.dev.centos.org Group : Applications/Databases Source RPM: mysql-5.1.73-5.el6_6.src.rpm Size : 2495593 License: GPLv2 with exceptions ......... [root@zy03 Packages]# rpm -qpl mysql-5.1.73-5.el6_6.x86_64.rpm #安装生成文件列表 /usr/bin/msql2mysql /usr/bin/my_print_defaults /usr/bin/mysql /usr/bin/mysql_config /usr/bin/mysql_find_rows /usr/bin/mysql_waitpid /usr/bin/mysqlaccess /usr/bin/mysqladmin
5)校验:
rpm {-V|--verify} [select-options] [verify-options]
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
包校验:
来源合法性验正:非对称加密
完整性验正:单向加密
导入密钥:rpm --import /PATH/TO/KEY_FILE
校验:rpm -K /PATH/TO/RPM_FILE
示例:
下载并导入KEY cd /etc/pki/rpm-gpg wget http://centos.ustc.edu.cn/centos/RPM-GPG-KEY-CentOS-5rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
二,YUM包管理器
介绍
什么是YUM包管理器
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
YUM需要在系统上进行配置
YUM作用以及配置
包管理(安装、升级、卸载、查询等)
yum程序的配置文件:
/etc/yum.conf
定义全局配置:对所有仓库都适用的配置
/etc/yum.repos.d/*.repo
一个文件通常用于一个或一组功能相近或相关的仓库
定义一个仓库指向:
[REPO_ID]
name= #YUM仓库名称
baseurl= #仓库地址路径,http,ftp,file
# mirrorlist=SCHEME://HOSTNAME/PATH/TO/MIRROR_LIST_FILE #可以指定文件,文件内为yum源地址,启用后会去搜索使用这些地址
enabled={1|0} #是否启用,默认启用 1
gpgcheck={1|0} #是否检查
gpgkey= #检查key
cost= #开销,当多个源可以使用默认使用开销最小的,一般为本地yum源
定义仓库指向可用变量:
示例:
http://mirrors.ustc.edu.cn/centos/$releasever/os/$basearch
$releasever: 引用当前系统的主版本号;
$basearch: 当前系统的基本架构;
i386, i486, i586, i686: i386
http://mirrors.ustc.edu.cn/centos/7/os/x86_64/
注意:7的话代表cetos7的最后一个版本
示例:
[root@zy03 yum.repos.d]# cat yum.repo [local] name=local p_w_picpath baseurl= #本地为 ,后面的/meida为路径 enabled=1 gpgcheck=0
YUM详细使用:
yum命令:
yum [options] [command] [package ...]
命令:
安装:install
卸载:remove
升级:update
列出所有可更新的软件清单
命令:yum check-update安装所有更新软件
命令:yum update
仅安装指定的软件
命令:yum install <package_name>
仅更新指定的软件
命令:yum update <package_name>
查询:info search KEYWORD
list all|installed|availiable
provides /PATH/TO/SOMEFILE: 查询指定文件由哪个包安装生成
重新安装:reinstall
降级:downgrade
清理缓存:clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
生动生成缓存:makecache
示例:
说明:安装的包不像rpm需要给定完整包名版本,只需要给定包名即可;
yum install mysql -y -y选项可以直接指出,之后不需要确定,直接自动安装;
1)安装:install
示例
[root@zy03 yum.repos.d]# yum install mysql #只需要给包名mysql即可,自动解决依赖关系 Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package mysql.x86_64 0:5.1.73-5.el6_6 will be installed --> Processing Dependency: mysql-libs = 5.1.73-5.el6_6 for package: mysql-5.1.73-5.el6_6.x86_64 --> Running transaction check ---> Package mysql-libs.x86_64 0:5.1.66-2.el6_3 will be updated ---> Package mysql-libs.x86_64 0:5.1.73-5.el6_6 will be an update --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================== Package Arch Version Repository Size ========================================================================================================== Installing: mysql x86_64 5.1.73-5.el6_6 local 894 k Updating for dependencies: mysql-libs x86_64 5.1.73-5.el6_6 local 1.2 M Transaction Summary #为解决依赖关系,需要安装mysql-libs ========================================================================================================== Install 1 Package(s) Upgrade 1 Package(s) Total download size: 2.1 M Is this ok [y/N]: y #输入y确定安装 Downloading Packages: ---------------------------------------------------------------------------------------------------------- Total 72 MB/s | 2.1 MB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Updating : mysql-libs-5.1.73-5.el6_6.x86_64 1/3 Installing : mysql-5.1.73-5.el6_6.x86_64 2/3 Cleanup : mysql-libs-5.1.66-2.el6_3.x86_64 3/3 Verifying : mysql-libs-5.1.73-5.el6_6.x86_64 1/3 Verifying : mysql-5.1.73-5.el6_6.x86_64 2/3 Verifying : mysql-libs-5.1.66-2.el6_3.x86_64 3/3 Installed: mysql.x86_64 0:5.1.73-5.el6_6 Dependency Updated: mysql-libs.x86_64 0:5.1.73-5.el6_6 Complete! #安装成功
2)卸载:remove
示例:
[root@zy03 yum.repos.d]# yum remove mysql -y #卸载mysql Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Remove Process Resolving Dependencies --> Running transaction check ---> Package mysql.x86_64 0:5.1.73-5.el6_6 will be erased --> Finished Dependency Resolution Dependencies Resolved ========================================================================================================== Package Arch Version Repository Size ========================================================================================================== Removing: mysql x86_64 5.1.73-5.el6_6 @local 2.4 M Transaction Summary ========================================================================================================== Remove 1 Package(s) Installed size: 2.4 M Downloading Packages: Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Erasing : mysql-5.1.73-5.el6_6.x86_64 Verifying : mysql-5.1.73-5.el6_6.x86_64 Removed: mysql.x86_64 0:5.1.73-5.el6_6 Complete! #卸载成功
3)升级:update (如果不带软件包名称yum update,为升级所有软件包)
yum update samba-4.1.12-21.el7_1.x86_64.rpm
4)查询:info search KEYWORD
yum list #列出资源库中所有可以安装或更新的rpm包
yum list mozilla
yum list mozilla* #列出资源库中特定的可以安装或更新以及已经安装的rpm包
yum list updates #列出资源库中所有可以更新的rpm包
yum list installed #列出已经安装的所有的rpm包
yum search mozilla #搜索匹配特定字符的rpm包 注:在rpm包名,包描述等中搜索
yum provides /etc/fstab #查看特定文件属于哪个软件包
5)重新安装:reinstall
yum reinstall httpd -y
6)降级downgrade
yum downgrade httpd -y
7)清理缓存
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
默认情况下,yum 在 /var/cache/yum/ 目录保存临时文件,每个仓库都有自己的子目录。仓库目录中 packages/ 子目录包含了缓存的软件包。例如,目录 /var/cache/yum/development/packages/ 包含从 development 仓库下载的软件包。
#yum clean packages
从系统中删除任何缓存的软件包。我们需要注意的是当我们下载软件包之后,软件包并不会被自动地删除
#yum clean headers
删除所有的头文件,这些文件用于yum解决软件的依赖关系。
#yum clean metadata
删除yum用于确定软件包可用的一些文件(元数据文件)。使用这个选项会强制让yum下次运行的时候下载所有的元数据
#yum clean dbcache
删除sqlite缓存,这个缓存用来以很快的速度访问原数据。使用这个选项将会使得yum在下次运行的时候重新创建缓存文件。
#yum clean all
删除上面说过的所的内容。
8)生成yum缓存
#yum makecache
YUM包组管理:
grouplist #列出包组
groupinfo "GRP_NAME" #查看特定包组信息
groupinstall "GRP_NAME" #安装包组
groupremove "GRP_NAME" #删除包组
示例:
#列出包组 [root@os01 Packages]# yum grouplist Loaded plugins: fastestmirror, langpacks There is no installed groups file. Maybe run: yum groups mark convert (see man yum) Loading mirror speeds from cached hostfile * base: mirrors.nwsuaf.edu.cn * extras: mirror.neu.edu.cn * updates: mirrors.sina.cn Available environment groups: Minimal Install Compute Node Infrastructure Server ..... #查看特定包组信息 Done [root@os01 Packages]# yum groupinfo "GNOME Desktop" Loaded plugins: fastestmirror, langpacks There is no installed groups file. Maybe run: yum groups mark convert (see man yum) Loading mirror speeds from cached hostfile * base: mirrors.nwsuaf.edu.cn * extras: mirror.neu.edu.cn * updates: mirrors.sina.cn Environment Group: GNOME Desktop Environment-Id: gnome-desktop-environment Description: GNOME is a highly intuitive and user friendly desktop environment. Mandatory Groups: +base +core +desktop-debugging +dial-up +directory-client #安装包组GNOME Desktop +smart-card [root@os01 Packages]# yum groupinstall "GNOME Desktop" Loaded plugins: fastestmirror, langpacks There is no installed groups file. Maybe run: yum groups mark convert (see man yum) Loading mirror speeds from cached hostfile * base: mirrors.nwsuaf.edu.cn * extras: mirror.neu.edu.cn * updates: mirrors.sina.cn Warning: Group core does not have any packages to install. Warning: Group guest-agents does not have any packages to install. Package gtk2-immodule-xim-2.24.22-5.el7_0.1.x86_64 already installed and latest version Package imsettings-gsettings-1.6.3-9.el7.x86_64 already installed and latest version Package ibus-gtk3-1.5.3-11.el7.x86_64 already installed and latest version #删除包组GNOME Desktop [root@os01 Packages]# yum groupremove "GNOME Desktop"
仓库信息查看:
repolist [all|enabled|disabled]
repoinfo [all|enabled|disabled]
示例:
#列出启用的的repo库 (默认是列出所有 all) [root@os01 Packages]# yum repolist enabled Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.nwsuaf.edu.cn * extras: mirror.neu.edu.cn * updates: mirrors.sina.cn repo id repo name status base/7/x86_64 CentOS-7 - Base 8,652 extras/7/x86_64 CentOS-7 - Extras 181 updates/7/x86_64 CentOS-7 - Updates #列出仓库详细信息 [root@os01 Packages]# yum repoinfo enabled Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.nwsuaf.edu.cn * extras: mirror.neu.edu.cn * updates: mirrors.sina.cn Repo-id : base/7/x86_64 Repo-name : CentOS-7 - Base Repo-revision: 1427842153 Repo-updated : Wed Apr 1 06:50:46 2015 Repo-pkgs : 8,652 Repo-size : 6.3 G Repo-mirrors : http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock Repo-baseurl : http://mirrors.nwsuaf.edu.cn/centos/7.1.1503/os/x86_64/ (9 more) Repo-expire : 21,600 second(s) (last: Mon Sep 14 14:18:50 2015) Repo-filename: /etc/yum.repos.d/CentOS-Base.repo .......
创建本地yum仓库
步骤:
1,创建源的软件包目录将软件包放入此目录
2,使用createrepo 创建索引
3,创建yum配置文件
4,然后将这个目录用NFS,http或者ftp发布,其他linux主机就可以使用此yum源资源了。
示例:
#1,创建yum源目录 [root@os01 ~]# mkdir /yum-local [root@os01 ~]# mount /dev/sr0 /media/ #挂载本地光盘到/media [root@os01 ~]# cd /media/Packages/ [root@os01 Packages]# cp * /yum-local/ #2,创建好本地的仓库目录后,需要使用createrep对这个目录创建yum索引。 [root@os01 Packages]# yum install createrepo -y #安装createrepo工具 #对本地仓库文件夹创建索引,这会在/yum-local/下创建repodata目录,里面存放的就是这个目录中rpm的索引信息,每次这个文件夹中的软件包发生变化,都要重新索引一次。 [root@os01 Packages]# createrepo /yum-local/ Spawning worker 0 with 1788 pkgs Spawning worker 1 with 1788 pkgs Workers Finished Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete [root@os01 ~]# ll -d /yum-local/repodata/ drwxr-xr-x 2 root root 4096 Sep 14 14:43 /yum-local/repodata/ #3,创建yum配置文件 #如果想使用本地仓库,先要将/etc/yum.repos.d/下其他网络仓库配置文件都删除,或者备份到其他文件夹中 vi /etc/yum.repos.d/yum-local.repo [yum-local] name=localtest baseurl=file:///yum-local/ enable=1 gpgcheck=0 yum clean all #4,然后将这个目录用NFS,http或者ftp发布,其他linux主机就可以使用此yum源资源了。