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 做查询命令的格式如下:
[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 没了