linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)
Posted francisdrakek
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)相关的知识,希望对你有一定的参考价值。
linux 从入门到跑路 - rpm ,yum , dnf
(软件包管理三兄弟)
认识软件包管理
软件包管理是指系统中一种安装和维护软件的方法。今天,通过从 Linux 发行版中安装的软件包, 已能满足许多人所有需要的软件。这不同于早期的 Linux,人们需要下载和编辑源码来安装软件。 编辑源码没有任何问题,事实上,拥有对源码的访问权限是 Linux 的伟大奇迹。本篇,我们将查看一些用于包管理的命令行工具(rpm ,yum , dnf )。虽然所有主流 Linux 发行版都 提供了强大且精致的图形管理程序来维护系统,但是学习命令行程序也非常重要。因为它们 可以完成许多让图形化管理程序处理起来困难(或者不可能)的任务。
rpm
rpm命令是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。
rpm(选项)(参数)
rpm -i 安装
-iv 显示过程
-ivv 显示详细过程
*** -ivh 显示过程及安装进度百分比
--test 仅测试,并不真正安装
*--nodeps 在安装或卸载时忽略依赖性
--replacepkgs重复安装已安装过的包,文件覆盖
--replacefiles将要安装包的部分文件与其他已安装的包文件冲突,可继续安装,文件不覆盖
--oldpackage 已安装过新版本,现在装旧版本
*--force 等同于 --replacepkgs, --replacefiles, and --oldpackage.
--noscripts 安装时不执行包中自带的脚本
* -Uvh 新版本rpm 升级rpm包,若有旧版本,则先删除旧版本再安装新版本
若没有旧版本,则直接安装指定的rpm包
-Fvh 新版本rpm 升级rpm包,若有旧版本,则先删除旧版本再安装新版本
若没有旧版本,则不安装rpm包
当升级内核时,应使用-ivh 安装新内核,以保证旧内核依然存在.
-q 包名 查询已安装过的包的信息
-qa 列出已安装过的所有rpm包
-qa "*关键字*" 或 rpm -qa |grep 关键字
*** -qf 文件路径 查询指定文件来自于哪一个已安装的rpm包
-qi 包名 显示包的详细信息
-qp [ilcd……] rpm路径 查询信息的数据来自于rpm包
-q --provides 查询某个包提供了哪些能力
-qa --provides 查询当前系统提供的所有能力
-q --whatprovides webserver 查询某个能力由哪一个rpm包提供
-q --whatrequires webserver 查询某个能力被哪个rpm包所依赖
-q --changelog httpd 查询更新日志
*** -ql httpd 列出软件包提供的所有文件
-qc httpd 列出软件包提供的配置文件
-qd httpd 列出软件包提供的文档文件
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 mTimediffers
P capabilities differ
[[email protected] ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7
[[email protected] ~]# rpm -K /media/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
/media/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 确定
[[email protected] ~]# rpm -qa "gpg-pubkey*"
gpg-pubkey-f4a80eb5-53a7ff4b
rpm --import /media/RPM-GPG-KEY-CentOS-7 导入公钥
rpm -K vsftpd-3.0.2-22.el7.x86_64.rpm
rpm -qa "gpg-pubkey*"
[[email protected] ~]# rpm -ivh --nodeps /media/Packages/tigervnc-1.8.0-5.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:tigervnc-1.8.0-5.el7 ################################# [100%]
[[email protected] ~]# rpm -ivh --force /media/Packages/ftp-0.17-67.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:ftp-0.17-67.el7 ################################# [100%]
[[email protected] ~]# rpm -ivh /media/Packages/ftp-0.17-67.el7.x86_64.rpm
准备中... ################################# [100%]
软件包 ftp-0.17-67.el7.x86_64 已经安装
rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id
***实验:删除某文件后利用rpm2cpio解开rpm来恢复文件
1.删除文件
[[email protected](nanyibo) ~]# rm -rf /etc/rc.d/init.d/functions
2.查询文件来自于哪一个已安装rpm包
[[email protected](nanyibo) ~]# rpm -qf /etc/rc.d/init.d/functions
initscripts-9.03.58-1.el6.centos.x86_64
3.挂载光盘
[[email protected](nanyibo) ~]# mount /dev/cdrom /media/
mount: block device /dev/sr1 is write-protected, mounting read-only
4.复制rpm到一个临时目录
[[email protected](nanyibo) ~]# cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
5.进入临时目录并解开rpm包
[[email protected](nanyibo) ~]# cd /app
[[email protected](nanyibo) app]# rpm2cpio initscripts-9.03.58-1.el6.centos.x86_64.rpm |cpio -id
6.从解出的目录里找到需要的文件并复制到相关的原目录下
[[email protected](nanyibo) app]# cp etc/rc.d/init.d/functions /etc/rc.d/init.d/
[[email protected] ~]# rm -rf /etc/rc.d/init.d/functions
[[email protected] ~]# rpm -qf /etc/rc.d/init.d/functions
initscripts-9.49.41-1.el7.x86_64
[[email protected] ~]# mount /dev/cdrom /media/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /media 忙
/dev/sr0 已经挂载到 /run/media/root/CentOS 7 x86_64 上
/dev/sr0 已经挂载到 /media 上
[[email protected] ~]# cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
cp: 无法获取"/media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm" 的文件状态(stat): 没有那个文件或目录
[[email protected] ~]# cp /media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm /app
cp: 无法获取"/media/Packages/initscripts-9.03.58-1.el6.centos.x86_64.rpm" 的文件状态(stat): 没有那个文件或目录
[[email protected] ~]# cp /media/Packages/initscripts-9.49.41-1.el7.x86_64.rpm /app
[[email protected] ~]# cd /app
[[email protected] app]# rpm2cpio initscripts-9.49.41-1.el7.x86_64.rpm |cpio -id
3039 块
[[email protected] app]# cp etc/rc
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.d/
[[email protected] app]# cp etc/rc
rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.d/
[[email protected] app]# cp etc/rc.d/init.d/functions /etc/rc.d/init.d/
yum
yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
和rpm的区别rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题
yum
*** /etc/yum.repos.d/*.repo 仓库路径
[repoid] 仓库的名称,不能重复
name= 仓库的描述,可以不写,将会用repoid当作name
enabled=1|0 激活或禁用仓库,若不写该行,则默认启用
gpgcheck=1|0 是否在安装包是检测gpg签名,默认检测,即为1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 指定gpg key的路径
*** yum install 包名
repolist [enabled] 默认,只显示已激活的仓库
disabled 仅显示已禁用的仓库
all 显示所有仓库
[base]
name=Red Hat Enterprise Linux $releasever Repo
baseurl=http://172.18.0.1/centos/$releasever
enabled=1
gpgcheck=0
[epel]
name=mage epel $releasever
baseurl=http://172.18.0.1/fedora-epel/$releasever/$basearch
enabled=1
gpgcheck=0
使用在线epel
[epel]
name=mage epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
enabled=1
gpgcheck=0
yum-config-manager --add https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/
*** yum clean all 清空yum缓存
yum makecache 重建缓存,(没有缓存时,首次使用yum的任何命令都会自动重建)
*** yum list
base 未安装的包,来自于base
epel 未安装的包,来自于epel
@base 该包已经安装,且是从base安装的
@anaconda 该包已经安装,且是从操作系统的安装程序anaconda安装的
all 默认 表示列出所有包
updates 列出可更新的包
installed 列出已安装的包
@repoid 表示该包安装自指定的仓库
installed 表示该包由rpm命令手工安装
*** install 包名1 [*包名*] [包名2……]
-y 自动应答
reinstall 包名 重新安装指定的包
update 更新包
remove 卸载包 卸载时不会连同依赖包一同卸载
yum info 包名 查看指定包的详细信息
*** yum provides "*/rz" 搜索一个文件来自于哪个rpm包,可以是未安装的包
yum search 关键字 模糊搜索 软件包和描述
yum deplist php 列出指定包所依赖的所有包
*** yum history 列出所有的yum历史
info # 查看某条历史的详细信息
redo # 重做某条历史
undo # 撤消某条历史
如果该历史为install,则undo 是remove
如果该历史为remove,则undo 是install
安装本地的包
yum [local]install /path/*.rpm
*** yum grouplist 列出所有的包组名
yum groupinfo ‘包组名‘ 查看指定包组中包含哪个包
yum groupinstall ‘包组名‘
yum groupupdate ‘包组名‘
yum groupremove ‘包组名‘
-q 静默,尽量还是用 &> /dev/null
yum reinstall bind --downloadonly --downloaddir=/app 仅下载包,不安装
createrepo rpm包的目录路径 创建repodata
yum
***
实验:使用源码包安装httpd2.4(centos7)
1.下载源码 官网,教室的服务器
lftp 172.18.0.1
user thirty-three pass:thirty-three
get files/httpd-2.4.27.tar.bz2
exit
tar xvf httpd-2.4.27.tar.bz2
2.安装Development Tools
3.查看README INSTALL
4../configure --help
./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24
dnf|yum install -y apr-devel apr-util-devel pcre-devel
5.make -j 4
6.make install
7.export PATH=$PATH:/app/apache24/bin 可把这行写入/etc/profile.d/*.sh 之后,再source该文件
8.apachectl start 启动服务
9.vim /app/apache24/htdocs/index.html
10.iptables -F
11.浏览器访问
实验2:使用源码包安装httpd2.2(centos6)
dnf
DNF是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。
DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。你可以在这里获得关于 DNF 的更多知识:《 DNF 代替 YUM ,你所不知道的缘由》
DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的额 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2.
以上是关于linux 从入门到跑路 - rpm ,yum , dnf (软件包管理三兄弟)的主要内容,如果未能解决你的问题,请参考以下文章