六、软件安装
rpm
RPM软件包的管理工具
补充说明
rpm命令 是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
初始化rpm数据库
通过rpm命令查询一下rpm包是否安装了,也是要通过rpm数据库来完成的;所以我们要经常用下面的两个命令来初始化rpm数据库;
rpm --initdb
rpm --rebuilddb
语法
rpm(选项)(参数)
选项
-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合"-l"参数使用;
-d:只列出文本文件,本参数需配合"-l"参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--hash:套件安装时列出标记;
-i:显示套件的相关信息;
-i<套件档>或--install<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合"-l"参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-v:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错。
参数
软件包:指定要操纵的rpm软件包。
实例
1.查询已经安装的软件
语法:rpm -q 软件名
rpm -q gaim
rpm -qa
rpm -qa |more
rpm -qa |grep install
2.查询一个已经安装的文件属于哪个软件包
语法:rpm -qf 文件名 注意:文件名所在的绝对路径要指出举例
rpm -qf /usr/lib/grub
3.查询已安装软件包都安装到何处
语法:rpm -ql 软件名 或 rpm rpmquery -ql 软件名
rpm -ql lynx
rpmquery -ql lynx
4.查询一个已安装软件包的信息
语法:rpm -qi 软件名
rpm -qi lynx
5.查看一下已安装软件的配置文件
语法:rpm -qc 软件名
rpm -qc lynx
6.查看一下已经安装软件的文档安装位置
语法:rpm -qd 软件名
rpm -qd lynx
7.查看一下已安装软件所依赖的软件包及文件
语法:rpm -qR 软件名
rpm -qR rpm-python
RPM 命令#
我们可以直接使用rpm命令,对软件包进行一些操作。
安装#
Copy
rpm –ivh <package_name>
rpm –Uvh <package_name> # 没有安装过,则安装
rpm –Fvh <package_name> # 没有安装过,则忽略
-nodeps 忽略依赖问题,一般仅用于测试
-i install;
-v 详细信息;
-h 以安装信息栏显示安装进度;
--test 可以测试是否有属性依赖问题
卸载#
Copy
rpm –e <package_name> # 有其它包依赖此RPM包时,卸载会报错
升级#
升级时使用-ivh会提示文件冲突
rpm –Uvh <package_name> 没有安装过,则安装
rpm –Fvh <package_name> 没有安装过,则忽略
查找#
rpm -q[licdR] 已安装的软件名
rpm -qp[licdR] 未安装的文件名称,注意,这里查看的前提是你本地有一个这个未安装的软件包
rpm -qf 存在于系统的某个文件名
参数:
查询已安装软件的信息:
-q 判断软件是否已安装 rpm -q mock,如果安装了,那么会列出该包的全名
-qa 列出所有的已安装在本机上的软件名称
-qi 列出软件的详细信息,开发商、版本等
-ql 列出该软件的所有文件与目录
-qc 列出该软件的所有配文件(找出在 /etc 下面的目录名而已)
-qR 列出与该软件有关的依赖软件及文件,注意了,这里不只是列出了依赖的软件
-qf 找出与后面接的文件所属哪个软件,注意文件名要「绝对路径」,例如rpm -qf /bin/rz
非已安装软件:
-qp[icdlR] 用途差不多,但是并非已安装的软件信息,比如本地有个软件 filename.x86_64.rpm,可以 rpm -qpR ./filename.x86_64.rpm。
验证#
对已安装的包进行文件校验:
Copy
rpm –V <package_name>
rpm -Vp <rpm_file>
rpm -Va
导入key:
rpm --import <RPM_KEY>
在包安装之前进行签名校验:
Copy
rpm -K <rpm_>file
重建数据库#
RPM 数据库存储在 /var/lib/rpm 内,如果文件损坏,可以重建:
Copy
rpm –rebuilddb 解决系统RPM数据库的异常
YUM 命令#
yum 其实是透明的调用 rpm,相当于在 rpm 基础上封装的更易使用的“前端”。
它主要设计来解决软件包之间的依赖性,并可从多个资源库(我们称之为“源”,典型的由 /etc/yum.repos.d/ 目录下的每个 .repo 文件定义)。
源制作#
createrepo
一般的 CentOS 系的 ISO 镜像中,都带有安装时使用的rpm包。可以将这部分文件mount到本地,创建本地源,以减少软件安装时的上网下载。
例如,你在一个有 RPM 包的文件夹下,就可以执行 createrepo . 命令,然后你的 REPO 配置一个本地源也是 OK 的。
安装#
Copy
yum install <package_name>[-<version_info>] -y
yum localinstall <rpm_file> 本地安装
yum groupinstall <group_name> 组安装
升级#
Copy
yum update [package_name]
降级#
Copy
yum downgrade <package_name>-<version_info>
卸载#
Copy
yum remove/erase <package_name>
谨慎使用: 此命令会卸载掉所有依赖此包的RPM包
查找#
Copy
yum search <pkg_name> # 搜索相关软件
yum list # 列出目前 yum 管理的所有软件 注意,这里包含了未安装的软件
yum list 以及相关的一些命令则能够为你提供有关软件包、软件包集和软件仓库的信息。所有的 yum list 命令都能够使用 glob 表达式作为参数,对输出结果进行过滤。在 glob 表达式中,你可以使用 * 代表任何数量个字符,使用 ? 代表任何一个字符。
Copy
yum list <glob_expr> [more_glob_exprs] 列出所有符合 glob 表达式的软件包
yum list all 列出所有已安装的和可用的软件包
yum list installed 列出所有已经安装在系统中的软件包。输出结果的最右边一列是取得该软件包的软件仓库。标识为 installed 的软件包则说明它是做为系统基本组件而预安装的。
yum list available 列出所有启用的软件仓库中可用的软件包
yum list --showduplicates |grep nginx |sort 这样就会显示启用的 YUM 源中 nginx 的所有版本,而不是最新版本
yum grouplist 列出所有软件包组
yum repolist [-v] 列出所有启用的软件仓库的 ID,名称 及其包含的软件包的数量
本地缓存相关#
Copy
yum clean all 清除本地缓存
yum makecache 只做本地缓存
yum history
查看 Yum 事务完整的历史记录。
Copy
info 命令查看涉及指定软件包的事务详情
yum history info httpd
其他#
使用yum info <package_name> [more_names]命令可查看一个或多个软件包的信息 (此处同样可以应用 glob 表达式)。
yum provides
依赖包下载研究#
利用 downloadonly 下载#
这种方式可能需要先安装 downloadonly 插键才行,不过我发现,我没安装就有了。
Copy
yum install --downloadonly --downloaddir=/tmp/yums/ nginx
如果主机上已经安装了 nginx,那么这个命令貌似并不会把 nginx 等相关依赖包下载下来。只有当主机上没有安装 nginx 包时,这个下载才会 OK。
利用这个命令,你可以一次下载多个包的依赖包的:
Copy
yum install --downloadonly --downloaddir=/root/mypackages/ httpd-2.2.6-40.el7 vsftpd
利用 yumdownloader 工具#
它可以一次性下载任何 RPM 软件包及其所有依赖包。如果主机上没有这个命令,则需要安装:
Copy
yum install -y yum-utils
下载包的依赖包,并指定存放的目录(如果不指定,就默认下载到当前目录):
Copy
yumdownloader --resolve --destdir=/tmp/yums/ nginx# OR
yumdownloader --resolve --destdir /tmp/yums/ nginx
我发现这个命令和上面 downloadonly 一样的现象,当 nginx 包已经安装在主机上了,它就不会去下载它的依赖包,但是和上面有所区别的是,它还是会把 nginx 这个包下载下来的。
其他#
Copy
repoquery --requires --resolve
Copy
rpmrepater會向用戶顯示已安裝包的列表,你可以使用上/下箭頭來滾動屏幕# 可以在指定包上使用"r"鍵來顯示其依賴關係,循環在指定包上按下"r"鍵可以展示出餘下的信息。# "L"標誌的意思是說這個包是一片“孤葉”,意思說說沒有任何包依賴它。# "o"標誌是說這個包是整個依賴鏈的中間部分。# 按下"b"鍵會顯示其他依賴於該包的其他包。
yum install rpmreaper
rpmreaper
如何查看与rpm包相关的文件和其他信息
下面所有的例子都假设使用软件包mysql-3.23.54a-11
1、我的系统中安装了那些rpm软件包。
rpm -qa 讲列出所有安装过的包
如果要查找所有安装过的包含某个字符串sql的软件包
rpm -qa | grep sql
2、如何获得某个软件包的文件全名。
rpm -q mysql
可以获得系统中安装的mysql软件包全名,从中可以获得当前软件包的版本等信息。这个例子中可以得到信息mysql-3.23.54a-11
3、一个rpm包中的文件安装到那里去了?
rpm -ql 包名
注意这里的是不包括.rpm后缀的软件包的名称,也就是说只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了,也可以用which,比如:
which mysql
4、一个rpm包中包含那些文件。
一个没有安装过的软件包,使用rpm -qlp **** .rpm
一个已经安装过的软件包,还可以使用rpm -ql **** .rpm
5、如何获取关于一个软件包的版本,用途等相关信息?
一个没有安装过的软件包,使用rpm -qip **** .rpm
一个已经安装过的软件包,还可以使用rpm -qi **** .rpm
6、某个程序是哪个软件包安装的,或者哪个软件包包含这个程序。
rpm -qf which 程序名
#返回软件包的全名
rpm -qif which 程序名
#返回软件包的有关信息
rpm -qlf which 程序名
#返回软件包的文件列表
注意,这里不是引号,而是,就是键盘左上角的那个键。也可以使用rpm -qilf`,同时输出软件包信息和文件列表。
7、某个文件是哪个软件包安装的,或者哪个软件包包含这个文件。
注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用whereis或者which,然后使用rpm -qf例如:
whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1
更多实例
库依赖: http://rpmfind.net/
源码包 -> 编译 -> 二进制包(rpm 包 / 系统默认包)
rpm 命名规则: 软件(软件名, 软件版本) + 系统(os 版本, os 位数) rpm 校验: SM5DLUGT -> size modified(类型/权限) md5 device L(文件路径) user group time(modified time)
yum: 解决 rpm 依赖的问题
rpm
mysql57-community-release-el6-8.noarch.rpm # 一个 rpm 包的例子
/var/lib/rpm/ # 包全名 -> 包名 的数据库
rpm -Uivh --dodeps xxx # upgrade install verbose hash
rpm -qilpfa|grep xxx # query info list(rpm包安装后的文件位置) package(rpm 包) file(文件属于哪个rpm文件) all
rpm -e # erase
rpm -V # verify
rpm2cpio | cpio -idv
rpm 默认安装位置
/etc/ 配置文件
/usr/bin/ 可执行文件
/urs/lib/ 程序使用的函数库
/usr/share/doc/ 使用手册
/usr/share/man/ manual
yum
基于RPM的软件包管理器
补充说明
yum命令 是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更新与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
语法
yum(选项)(参数)
选项
-h:显示帮助信息;
-y:对所有的提问都回答“yes”;
-c:指定配置文件;
-q:安静模式;
-v:详细模式;
-d:设置调试等级(0-10);
-e:设置错误等级(0-10);
-R:设置yum处理一个命令的最大等待时间;
-C:完全从缓存中运行,而不去下载或者更新任何头文件。
参数
install:安装rpm软件包;
update:更新rpm软件包;
check-update:检查是否有可用的更新rpm软件包;
remove:删除指定的rpm软件包;
list:显示软件包的信息;
search:检查软件包的信息;
info:显示指定的rpm软件包的描述信息和概要信息;
clean:清理yum过期的缓存;
shell:进入yum的shell提示符;
resolvedep:显示rpm软件包的依赖关系;
localinstall:安装本地的rpm软件包;
localupdate:显示本地rpm软件包进行更新;
deplist:显示rpm软件包的所有依赖关系。
实例
部分常用的命令包括:
自动搜索最快镜像插件:yum install yum-fastestmirror
安装yum图形窗口插件:yum install yumex
查看可能批量安装的列表:yum grouplist
安装
yum install #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1
更新和升级
yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1
查找和显示
检查 MySQL 是否已安装
yum list installed | grep mysql
yum list installed mysql*
yum info package1 #显示安装包信息package1
yum list #显示所有已经安装和可以安装的程序包
yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包
删除程序
yum remove | erase package1 #删除程序包package1
yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况
清除缓存
yum clean packages #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers
更多实例
yum
/etc/yum.repos.d/ yum 源配置文件
vi /etc/yum.repos.d/nginx.repo # 举个栗子: nginx yum源
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
yum mirror
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget https://mirror.tuna.tsinghua.edu.cn/help/centos/
yum makecache
添加中文语言支持
LANG=C # 原始语言
LANG=zh_CN.utf8 # 切换到中文
yum groupinstall "Chinese Support" # 添加中文语言支持