Linux软件管理:rpm软件包及rpm命令介绍

图片[1]-Linux软件管理:rpm软件包及rpm命令介绍-不念博客

Linux软件安装包

简介

Linux下的软件包众多,且几乎都是经 GPL 授权、免费开源(无偿公开源代码)的。这意味着如果你具备修改软件源代码的能力,只要你愿意,可以随意修改。

GPL,全称 General Public License,中文名称“通用性公开许可证”,简单理解 GPL 就是一个保护软件自由的一个协议,经 GPL 协议授权的软件必须开源

Linux软件包类型

#源码包    
一大堆源代码程序。源码包的安装需要把源代码编译为二进制代码,因此安装时间较长。为解决此问题出现了二进制包


# 二进制包    
源码包经过成功编译之后的包。安装速度快 安装过程报错几率小
二进制包是 Linux 下默认的软件安装包,因此二进制包又被称为默认安装软件包。
# 目前主要有以下两大主流的二进制包管理系统:
1、RPM 包管理系统
RPM全称RPM Package Manager缩写,红帽开发,功能强大,安装、升级、査询和卸载非常简单方便。很多 Linux 发行版都默认使用此机制作为软件安装的管理方式。

2、DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。(.deb结尾)

# 怎么选?
前者相当于自己动手做家具,板材、油漆、颜色和样式都由自己决定。后者相当于去商场买家具

# 注意:1、不管是源码包,还是二进制包,安装时都可能会有依赖关系!2、rpm对应自动解决依赖是用yum安装,rpm命令安装不解决依赖。
3、yum与rpm的区别总结:yum适用于所有环境,而rpm要搭建本地yum源才可以使用!yum是上层管理工具,自动解决依赖性,而rpm是底层管理工具。rpm只能安装已经下载到本地机器上的rpm包,yum可以在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这是rpm所不具备的

RPM包命名规则

#RPM 二进制包命名的一般格式如下:


包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名


# 以tree命令为例 我卸载下,重新安装时便显示包名


tree-1.6.0-10.el7.x86_64.rpm  


tree 软件名
1.6.0 版本号
-10 发行次数
el7 el是软件发行商。7:适用于系统的版本 Cent7 redhat7
x86_64 适合的硬件平台 系统平台
rpm 包扩展名 给人看的

RPM软件包的获取途径

1.光盘(通过挂载的方式访问)
2.网络下载,比如
RedHat或官方网站 ftp://ftp.redhat.com/
RPM查询官网网站 http://rpmfind.net/
Nginx软件官方网站 https://nginx.org/
MySQL软件官方网站 https://www.mysql.com/


# PS:挂载相关命令:
mount 挂载对象 挂载到哪里(一般是创建个空目录)
mount可将指定设备中指定的文件系统加载到Linux目录下(也就是装载点)
卸载 umount

RPM包的安装(rpm命令)

# 安装 RPM 的命令格式一般为:
[root@localhost ~]# rpm -ivh 包全名


# 注意一定是包全名。如果软件包在光盘中,需提前做好设备的挂载工作。
# 选项
-i   安装(install)
-v   显示安装过程(verbose)
-h   显示安装进度条(hash)


--test:     #仅测试,不安装
--force:    #强制安装
--nodeps:   #忽略依赖关系直接安装

实操举例

## 例如:
[root@localhost /]# mkdir xxx               创建xxx目录
[root@localhost /]# mount /dev/cdrom xxx     挂载
[root@localhost /]# df -h                   看一眼:
Filesystem     Size Used Avail Use% Mounted on(挂载点)
/dev/sda3       19G  1.3G   18G   7% /
devtmpfs       476M     0 476M   0% /dev
tmpfs           487M     0 487M   0% /dev/shm
tmpfs           487M  7.6M 479M   2% /run
tmpfs           487M     0 487M   0% /sys/fs/cgroup
/dev/sda1       497M 120M 378M  25% /boot
tmpfs           98M     0   98M   0% /run/user/0
/dev/sr0        4.3G  4.3G     0 100% /xxx            
[root@localhost /]# ll /xxx/Packages         这时可以看到/xxx/Packages下面好多rmp包文婧


.......
-rw-rw-r--. 1 root root    61792 Nov 12  2018 python2-blockdev-2.18-3.el7.x86_64.rpm
-rw-rw-r--. 1 root root   514504 Apr 25  2018 python2-cryptography-1.7.2-2.el7.x86_64.rpm
-rw-rw-r--. 1 root root    30040 Nov 12  2018 python2-futures-3.1.1-5.el7.noarch.rpm
-rw-rw-r--. 1 root root   696780 Nov 12  2018 python2-ipaclient-4.6.4-10.el7.centos.noarch.rpm
-rw-rw-r--. 1 root root   676840 Nov 12  2018 python2-ipalib-4.6.4-10.el7.centos.noarch.rpm
-rw-rw-r--. 1 root root  1535668 Nov 12  2018 python2-ipaserver-4.6.4-10.el7.centos.noarch.rpm
(省略)


# 然后安装samba-4.8.3-4.el7.x86_64.rpm,显示需要依赖


[root@localhost /]# rpm -ivh /xxx/Packages/samba-4.8.3-4.el7.x86_64.rpm




## 再如:先删除tree,再安装(已挂载在mnt下)
[root@localhost ~]# mount /dev/cdrom /mnt
[root@localhost ~]# rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm 需要指定软件包绝对路径
Preparing...                          ################################# [100%]
Updating / installing...
  1:tree-1.6.0-10.el7                ################################# [100%]


注意,直到出现两个 100% 才是真正的安装成功,第一个 100% 仅表示完成了安装准备工作。


#在软件包所在目录下可以不指定绝对路径
[root@zls ~]# cd /mnt/Packages/
[root@zls Packages]# rpm -ivh zsh-5.0.2-28.el7.x86_64.rpm



--test:     #测试安装。不会实际安装,只是检测一下依赖性。
--force:    #强制安装


--nodeps:   #忽略依赖关系
软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。


例:
#测试一个软件包是否能在该系统上安装
[root@zls ~]# rpm -ivh --test /mnt/Packages/samba-4.8.3-4.el7.x86_64.rpm


#如果软件包存在, 强制再次安装
[root@zls ~]# rpm -ivh --force /mnt/Packages/tree-1.5.3-3.el6.x86_64.rpm


#安装samba服务需要依赖其他组件, 使用--nodeps可重新强制安装
[root@zls ~]# rpm -ivh --nodeps /mnt/Packages/samba-4.8.3-4.el7.x86_64.rpm

RPM包查询

使用 rpm 做查询命令的格式如下:
[root@localhost ~]# rpm 选项 已安装包名 (包名即可识别,不需全名)
# 选项
rpm -q         # 查看指定的rpm包是否安装
rpm -qa        # 查看系统中已安装的所有RPM软件包列表
rpm -qi         查看指定软件的详细信息
rpm -ql         列出rpm包相关的配置文件和目录
rpm -qc        # 只查询指定软件包的配置文件
rpm -qd         查询指定软件包的帮助文档
rpm -qf         反向查,查询文件或目录属于哪个RPM软件


rpm -qp         查询未安装的包相关信息
rpm -q --scripts   查询rpm包安装前和安装后执行的脚本


#查询包是否安装
[root@localhost ~]# rpm -q httpd
package httpd is not installed


#查询系统是否已安装tree、vim、lrzsz(安装过会显示出来,没有则不显示)
[root@sky /]# rpm -qa |grep -E 'tree|vim|lrzsz'
lrzsz-0.12.20-36.el7.x86_64
vim-common-7.4.629-8.el7_9.x86_64
vim-minimal-7.4.160-5.el7.x86_64
vim-filesystem-7.4.629-8.el7_9.x86_64
vim-enhanced-7.4.629-8.el7_9.x86_64
[root@sky /]# tree
-bash: tree: command not found


查询vsftpd软件包的相关信息
[root@zls ~]# rpm -qi vsftpd


查询rpm包所安装的文件
[root@zls ~]# rpm -ql vsftpd


查询rpm包相关的配置文件
[root@zls ~]# rpm -qc vsftpd


查询配置文件或命令来自于哪个rpm包
[root@zls ~]# rpm -qf /etc/vsftpd/vsftpd.conf
[root@zls ~]# rpm -qf /usr/sbin/vsftpd




//查询未安装的软件包会产生哪些文件
[root@zls ~]# rpm -qlp /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm


//查询未安装的软件包会产生哪些文件
[root@zls ~]# rpm -qip /mnt/Packages/samba-3.6.23-41.el6.x86_64.rpm


#以上查询只能查询已存在 已安装的包,如果没有安装,需要联网查询

RPM包升级

U:如果老版本存在就升级,老版本不存在就安装


例子 -ivh 安装时提示已经有了旧版本 无法安装
这时就-Uvh




wget 两个包
[root@localhost ~]# wget https://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.12.0-1.el7.ngx.x86_64.rpm


-rw-r--r--.  1 root root 655648 Apr 26  2016 nginx-1.10.0-1.el7.ngx.x86_64.rpm
-rw-r--r--.  1 root root 732968 Apr 13  2017 nginx-1.12.0-1.el7.ngx.x86_64.rpm




# 先把10装上
[root@localhost ~]# rpm -ivh nginx-1.10.0-1.el7.ngx.x86_64.rpm  nginx-1.12.0-1.el7.ngx.x86_64.rpm
查看下
[root@localhost ~]# rpm -qa | grep nginx
nginx-1.10.0-1.el7.ngx.x86_64                  10已经安上了
 


# 如果用-ivh再装12 就会报错 安装不上 再看还是10
[root@localhost ~]# rpm -ivh nginx-1.12.0-1.el7.ngx.x86_64.rpm
......


[root@localhost ~]# rpm -qa | grep nginx
nginx-1.10.0-1.el7.ngx.x86_64


# 用rpm -Uvh即可更新安装
[root@localhost ~]# rpm -Uvh nginx-1.12.0-1.el7.ngx.x86_64.rpm
warning: nginx-1.12.0-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:nginx-1:1.12.0-1.el7.ngx         ################################# [ 50%]
Cleaning up / removing...
   2:nginx-1:1.10.0-1.el7.ngx         ################################# [100%]
[root@localhost ~]# rpm -qa | grep nginx
nginx-1.12.0-1.el7.ngx.x86_64

RPM包卸载

卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。
rpm -e 要卸载的包名


[root@localhost ~]# rpm -qa | grep nginx
nginx-1.12.0-1.el7.ngx.x86_64
[root@localhost ~]# rpm -e $(rpm -qa | grep nginx)   $调用
[root@localhost ~]# rpm -qa | grep nginx  没了




[root@localhost ~]# rpm -qa | grep nginx
nginx-1.12.0-1.el7.ngx.x86_64
[root@localhost ~]# rpm -e nginx-1.12.0-1.el7.ngx.x86_64
[root@localhost ~]# rpm -q nginx-1.12.0-1.el7.ngx.x86_64
package nginx-1.12.0-1.el7.ngx.x86_64 is not installed     没了
© 版权声明
THE END
喜欢就支持一下吧
点赞135赞赏 分享
评论 抢沙发
头像
欢迎光临不念博客,留下您的想法和建议,祝您有愉快的一天~
提交
头像

昵称

取消
昵称代码图片

    暂无评论内容