Linux软件安装
本文涉及:
软件包管理简介
rpm命令管理
yum在线管理
源码包管理
脚本安装
软件包管理
软件包分类
- 源码包
- 二进制包(rpm包,系统默认包)
源码包
源码包的优点:
- 开源
- 自由选择功能
- 编译安装,系统稳定效率高(Windows就是反例,系统越用越大)
- 卸载方便
源码包的缺点:
- 安装过程步骤较多,尤其是安装大型软件集合时(LAMP环境搭建时)
- 编译时间长,比二进制安装时间久
- 编译一旦出错,出问题新手很难解决
RPM包
二进制包的优点:
- 包管理系统简单,只通过几个命令就可以实现包安装、升级、查询和卸载
- 安装速度快于源码包
二级制包的缺点:
- 经过编译,源码不可见
- 功能选择不如源码包灵活
- 依赖性
脚本安装包(本质不是一种分类)
将复杂的软件包安装过程写成shell脚本,初学者可以执行脚本实现一键安装。但是实际还是源码包或者二进制包
- 优点:安装简单
- 缺点:丧失自定义
rpm命令管理
rpm包命名规则
rpm包的来源
rpm包在系统光盘中,虚拟机中连接光驱,找到系统光盘,挂载光盘。
1 | #创建挂载点 |
rpm包命名原则
- httpd-2.2.15-15.el6.centos.1.i686.rpm
- httpd软件包名
- 2.2.15软件版本
- 15软件发布的次数
- el6.cento适合的软件平台
- i686适合的硬件平台
- rpm包扩展名
包全名和包名是有区别的,httpd-2.2.15-15.el6.centos.1.i686.rpm
是包全名,httpd
是包名。
如果操作的是没有安装的包,要使用全面,为了让操作系统找到包,还要使用绝对路径。
操作安装的软件包时,使用包名就可以,系统搜索/var/lib/rpm/
中的数据库。
rpm包依赖性
- 树形依赖:a->b->c,容易解决
- 环形依赖:a->b->c->a,将a、b、c放到一条命令中
- 模块依赖:也叫库依赖,解决方法查询网站:www.rpmfind.net
使用yum在线安装,可以解决依赖问题。
安装命令
rpm安装
- rpm -ivh 包全名
- 选项:
- -i (install) 安装
- -v (verbose) 显示详细信息
- -h (hash) 显示进度
- –nodeps 不检测依赖性(真实使用时没有太大用)
升级和卸载
升级命令
- rpm -Uvh 包全名
- 选项:
- -U (upgrade) 升级
- -v (verbose) 显示详细信息
- -h (hash) 显示进度
这里使用的是包全名,而不是包名。原因是,对于操作系统,升级后的包也是完全陌生的包。
卸载命令
- rpm -e 包名
- 选项:
- -e (erase) 卸载
- –nodeps不检查依赖性
卸载时也会有依赖性,不检查依赖性可以卸载了选定的包,但是可能会出现其他包使用不正常。
rpm包查询
rpm包管理实际上比较麻烦,所以有了yum在线管理,但是,yum不能进行查询和校验。
查询是否安装
rpm -q 包名
查询是否安装
- -q (query) 查询
rpm -qa
查询所有安装的rpm包
- -a (all) 所有
查询软件包详细信息
rpm -qi 包名
选项:
-q (query) 查询
-i (information)查询软件信息
-p (package)查询未安装包信息
查询包中文件安装的位置
- rpm -ql 包名
- 选项:
- -q (query)查询
- -l (list)列表
- -p (package)查询未安装包的信息
rpm包默认安装位置:
安装位置有包的作者决定的,所以可以查询未安装的包的打算安装位置。
查询系统文件属于哪个rpm包
- rpm -qf 系统文件名
- 选项:
- -f (file)查询系统文件属于哪个软件包
查询软件包的依赖
- rpm -qR 包名
- 选项:
- -R (requires)查询依赖性
- -p (package)查询未安装包的信息
rpm包校验
校验命令
- rpm -V 已安装的包名
- 选项:
- -V (verify)校验指定rpm包中的文件
- 验证内容中的8个信息具体内容:
- S 文件大小是否改变
- M 文件的类型或文件的权限(rwx)是否被改变
- 5 文件MD5校验和是否改变
- D 设备的主从代码是否改变
- L 文件路径是否改变
- U 文件的属主是否改变
- G 文件的属组是否改变
- T 文件的修改时间是否改变
- 文件类型:
- c (config file)配置文件
- d (documentation)普通文件
- g (ghost file)“鬼”文件,很少见,就是该文件不应该被rpm包所包含(可能是人为导致的,需要仔细检查)
- L (license file)授权文件
- r (read me)描述文件
rpm包中文件提取
rpm2cpio 包全名 | cpio -idv .文件绝对地址
rpm2cpio 将rpm包装换位cpio格式的命令
cpio 一个标准工具,用于创建软件档案文件和从档案文件中提取文件
cpio 选项 < [文件 | 设备]
选项:
- i (copy-in)模式,还原
- d 还原时自动新建目录
- v 显示还原过程
造成误删ls命令的假象,修复文件丢失。
1 | rpm -qf /bin/ls |
yum在线管理
rpm包安装的方式存在一个致命的缺点,就是解决依赖性问题时,很麻烦。对此Linux给出yum在线安装,可以自动解决依赖性问题。
Redhat认为,yum是售后服务,需要付费。centos的yum免费。
yum源文件
默认四个文件中,base文件生效,其他文件不生效。
- vi /etc/yum.repos.d/CentOS-Base.repo
- [base] 容器名称,一定要放在[]中,例如[base]、[update],每个容器都包含后面几个字段
- name 容器说明, 可以随便写
- mirrorlist 镜像站点,可以注释掉
- baseurl yum源服务器的地址,默认是centos官方的yum源服务器,是可以使用的,也可以换源
- enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0是不生效
- gpgcheck 如果是1是rpm的数字证书生效,如果是0则不生效,用于检验下载的rpm包,打开更安全
- gpgkey 数字证书的公钥文件保存位置,不用修改
光盘搭建yum源
yum默认是使用网络进行安装,但有些环境不能使用网络,如何使用yum进行包管理呢?可以使用光盘搭建本地yum。
挂载光盘
1 | mkdir /mnt/ckrom |
使网络yum源失效
1 | cd /etc/yum.repos.d/ |
使光盘yum源生效
- vim CentOS-Media.repo
- [c6-media]
- name=CentOS-$releasever - Media
- baseurl=file:///mnt/cdrom #地址为光盘挂载目录
# file:///media/cdrom/
#注释# file:///mnt/cdrecorder/
#注释两个不存在的地址- gpgcheck=1
- enabled=1 #让这个yum源文件生效
- gpgkey=file:///etc/pki/rpm-gpg/RPM-KEY-CentOS-6 #这里仅为示例,软件版本不同,地址不同
yum命令
常用yum命令
查询
- yum list
查询所有可用的软件包列表
- yum search 关键字
搜索服务器上所有和关键字相关的包
安装
- yum -y install 包名
- 选项:
- install 安装
- y 自动回答yes
例如:
1 | yum -y install gcc |
yum可以使用包名安装软件包,因为yum会去服务器上找,不使用全名也能找到。
升级
- yum -y update 包名
- 选项:
- update 升级
- y 自动回复yes
关于要不要对服务器升级软件:
能不升级就不升级!因为升级可能意味着重启服务,对于需要长期稳定运行的服务来说,不是好的选择。所以不是新版本解决了致命的问题,可以不用升级。
后面不跟包名会升级系统中的所有的软件包,也会升级Linux内核,需要大量的时间。对内核的更新,新的内核需要配置,可能会导致系统崩溃。如果是远程服务器,配置可能不够及时,所以不建议这样用。所以这条命令是完全没有必要的!!!
卸载
- yum -y remove包名
- 选项:
- remove 卸载
- y 自动回复yes
建议:服务器使用最小化安装,用什么软件装什么软件!尽量不卸载。
卸载也会有依赖性,yum会把依赖的包全部卸载,但无法保证系统不会依赖这些包!卸载两三个包,可能会导致系统崩溃。
不建议使用yum
卸载软件包!!!
yum软件组管理命令
yum grouplist
列出所有的软件组列表
yum groupinstall 软件组名
安装指定软件组,组名可以由grouplist查询
yum groupremove 软件组名
卸载指定软件组
源码包管理
源码包和rpm包的区别
区别
安装前的区别:概念上的区别
安装后的区别:安装位置不同
rpm包安装过程
安装在默认位置一般由作者确定,但一般在以下目录:
rpm包默认安装路径 | |
---|---|
/etc/ | 配置文件安装位置 |
/usr/bin/ | 可执行的命令安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
源码包安装位置
安装在指定位置中,一般为
/usr/local/软件名/
安装位置不同带来的影响
rpm包安装的服务可以使用系统服务命令(service)来管理,例如rpm包安装的Apache的启动方法:
- /etc/rc.d/init.d/httpd start
- service httpd start #Redhat特有命令,不是Linux标志命令,但是源码包不可以,因为它搜索特定位置
而源码包安装的服务则不能被服务管理命令管理,因为没有安装在默认路径中,所以只能用绝对路径管理,如:
- /usr/local/apache2/bin/apachectl start
源码包安装过程
安装准备
安装c语言编译器,用于编译源码
下载源码包(从官网或者国内镜像下载)
注意事项
源码包保存位置:/usr/local/src/
软件安装位置:/usr/local/
如何确定安装过程报错:
- 安装停止
- 出现error、warning或no的提示
源码包安装过程
- 下载源码包
- 解压缩
- 进入解压缩目录(必须执行)
- ./configure 软件配置与检查
- 定义需要的功能选项
- 检测系统环境是否符合安装要求
- 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑
- make编译
- make clean 清除编译缓存文件,从头再来
- make install 编译安装
脚本安装包
准备工作
- 关闭rpm包安装的httpd和mysql
- 保证yum源正常使用
- 关闭SELinux和防火墙
SELinux是增强安全组件,vim /etc/selinux/config
,使得SELINUX=disabled
,重启Linux。
下载一键安装包
网址(下载 - LNMP一键安装包)
LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache)、LAMP(Apache/MySQL/PHP)生产环境的Shell程序。
脚本一键安装
wget http://soft.vpser.net/lnmp/lnmp1.9.tar.gz -cO lnmp1.9.tar.gz && tar zxf lnmp1.9.tar.gz && cd lnmp1.9 && ./install.sh lnmp
执行之后结果如下:
install.sh脚本分析
- 所谓的一键安装包,实际上还是安装的源码包或rpm包,只是把安装过程写成了脚本,便于使用
- 优点:简单、快速、方便
- 缺点:
- 不能定义安装软件的版本
- 不能定义所需要的软件功能
- 源码包优势丧失