一, Linux软件包和包管理器的分类
一,包管理器的分类
在linux中包管理器理论上是同用的,但不同的发行版本有开发单独的包管理器,常见的包管理器有RPM和APT
按照包管理器分发行版本主要分为两大类:
- RedHat系列:主要支持RPM包管理器
- Debian系列:主要支持APT包管理器
RedHat系列包括CentOS,Mandrive等
Debian系列包括Ubuntu,SUSE等
Mandrive收费的发行版本,现在大多数使用ContOS和Ubuntu两发行版本(CoentOS是开源免费)
注:这里的包管理器是二进制包管理器,源码包是没有包管理器的
版本名称
|
网 址
|
特 点
|
软件包管理器
|
Debian Linux
|
开放的开发模式,且易于进行软件包升级
|
apt
|
|
Fedora Core
|
拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新
|
up2date(rpm),yum (rpm)
|
|
CentOS
|
CentOS 是一种对 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,由于 Linux 是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS 就是将商业的 Linux 操作系统 RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞
|
rpm
|
|
SUSE Linux
|
专业的操作系统,易用的 YaST 软件包管理系统
|
YaST(rpm),第三方 apt (rpm)软件库(repository)
|
|
Mandriva
|
操作界面友好,使用图形配置工具,有庞大的社区进行技术支持,支持 NTFS 分区的大小变更
|
rpm
|
|
KNOPPIX
|
可以直接在 CD 上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用
|
apt
|
|
Gentoo Linux
|
高度的可定制性,使用手册完整
|
portage
|
|
Ubuntu
|
优秀已用的桌面环境,基于 Debian 构建
|
apt
|
二,软件包的分类
在Linux中可以直接安装的软件包主要分两类:
1,源码包
1)脚本安装包
2,二进制包(RPM包或APT包,系统默认包)
一,源码包
源码包:就是源文件包,通常一个软件或者框架都会提供,一般以tar.gz压缩包的方式提供下下载,它需要手动安装安装过程比较繁琐
源码包的优点:
- 开源,可以查看源码
- 可以自由配置和选择所需的功能
- C语言软件编译安装,所有更加适合自己的系统,有较高的稳定性
- 解压后是一个完整的文件(没有被分散目录),方便查看目录结构,整理和卸载也更加方便
注:和window不一样Linux一切皆文件,一个软件文件提供一个软件服务,在源码安装的情况下rm删除那个文件就能卸载那个软件,不会有残留,但RPM安装就不行,RPM安装的软件文件被分散在各个默认目录中没有办法进行一次性删除,只能使用RPM卸载功能
源码包的缺点:
- 安装步骤较繁琐,尤其安装大型软件集合时,容易出现拼写错误的情况
- 编译过程时间较长,比二近制安装时间长(Mysql源码安装就需要20分钟)
- 因为编译安装,安装过程中一旦报错,对刚接触学习的新手不用友好
源码包语言分类:
- C语言源码包:由C语言或者C++编写的软件或者框架,这类软件安装一般需要安装GCC进行make手动编译才能使用(比如Nginx,Redis等)
- Java语言源码包:由java语言编写的框架和软件,这类软件一般不需要进行手动编译只需要安装JDK环境即可(比如:Hadoop,Hive,Zookeeper等)
注:Linux中可以使用压缩方式有多种,比如zip,rar,tar,gz,z,tar.gz……,tar只是打包工具提供压缩,当tar.gz提供压缩,tar.gz是最常用的,tar.gz压缩率比较高,很多软件默认提供tar.gz压缩包供linux安装
脚本安装包:对源码包进行了二次开发,它提供安装界面,只需要执行安装程序,省去了手动配置(就相当于windows安装软件一样),一般只有极少数的软件会提供这个安装包
二,二进制包(.RPM包,.APT包)
二进制包是Linux发展的产物,早期都是源码安装较多,选择单一,安装较繁琐,花费时间长,没有统一的自动管理工具,这时产生了二进制包,它可以被RPM或APT进行统一管理
注:二进制包RPM和APT安装和源码安装本质上没有优劣之分(各有优缺点),只是根据不同情况的选择问题
二进制包:源码经过编译后的包,这类包看不到源代码
二进制包的优点:
- 这类包提供包管理系统(RPM),只通过几个命令就可以实现包的安装,升级,查询,卸载等操作
- 安装速度比源码包快很多,安装时间少
二进制包的缺点:
- 经过编译,不可以看见源代码
- 功能选择,功能配置较固定修改麻烦,不如源码包灵活
- 二进制包有依赖性问题(安装软件包A时提示依赖软件包B,B依赖C……)
源码包和二进制包的区别(类举): 你的Leader叫你做一个Java WEB的分布式微服务网站,你自己做起来相当麻烦且费时间,然后你把这个网站交于第三外包,它有团队也有丰富这方面的开发经验,以前的代码也能复用,写起来相当简单,写完后它帮你部署和维护,你只需要访问,你要加功能只需要联系他们即可,你看不到源代码,但你花费时间少(源码包就是自己写,二进制包就是找外包)
三,源码包或者二进制包的安装区别
-
RPM包主要安装在系统默认的位置,文件是被分散的
-
原码包安装位置可以指定,且文件没有分散
1,RPM包的安装位置
安装在默认位置中,这些位置是RPM开发者约定俗成的
/etc
|
配置文件安装目录
|
/usr/bin
|
可执行命令安装目录
|
/usr/lib
|
程序所使用的函数库保存位置
|
/usr/share/doc
|
基本的软件使用手册保存位置
|
/usr/share/man
|
帮助文件保存位置
|
/var/log
|
软件日志文件
|
……
|
……
|
安装位置自定义,一般企业中都保存在/usr/local/软件名中
3,安装位置不同带的影响
RPM二进制包安装的服务可以使用系统服务管理命令(service)来管理
rpm启动有两种方式:
- service命令进行启动
- 绝对路径的方式,进入软件的启动目录进行启动
注:service是一个RPM软件启动的一个自动化过程,它其实本质是进入RPM可执行目录寻找软件的启动文件进行启动,service实现了自动化
例如:启动httpd软件和重启网络
service httpd start
service network restart
源码包安装的服务不能被服务管理命令进行管理,因为没有安装在RPM默认位置中,所有只能通过绝对路经的方式进行服务管理(也可以配置环境变量这样就不受路径限制)
二,RPM包管理器
rpm全称是RedHat Package Manager(RedHat软件包管理工具)
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux的分发版本中,它生成具有.RPM拓展名的文件
rpm在Linux的分发版本如redhat,centos,suse都有使用,可以算是公认的行业标准
一,RPM包命名规则和依赖性
一,RPM的存放位置
RPM包主要存放在两个位置:
- 本地光盘
- 网络yum源服务器
本地光盘和远程YUM服务器都存有所有的RPM包
查看光盘中的RPM包:
- 挂载光盘(不细谈)
- 进行光盘的Package目录
二,RPM包的命名规则
以tar-1.26-35.el7.x86_64.rpm包为
- tar :软件包名
- 1.26: 软件版本
- 35: 软件发布的次数
- el7: 适应于Linux平台
- X86_64:表示适应于64位的系统
- rpm: 后缀名
注:如果有i686,i386表示适用于32位系统,noarch表示64和32都适用
RPM的包名和包全名的应用:
- 在没有安装某个RPM包时使用包全名(如 rpm -ivh 包全名)
- 安装了某个RPM包,后续都是使用包名(如 rpm -qi 包名)
三,RPM包的依赖性
其实在具体安装过程中,问题最大的就是依赖性问题,像看不到源码,文件分散都是小问题(后面yum的出现解决了这一问题)
依赖性就是一个软件包安装时需要依赖另一个软件包或者库文件
RPM依赖性的两个依赖因素:
- 包依赖:就是具体的另一个软件
- 库依赖:是另有一个软件中的某一个文件(这类依赖要去这具体的文件对于的软件包)
依赖性主要分三类:
1)树形依赖(如:A->B->C->D): 要想安装软件 A,必须先安装 B,而安装 B 需要先安装 C…….解决此类型依赖的方法是从后往前安装,即先安装 D,再安装 C,然后安装 B,最后安装软件 A
2)环形依赖(如:A->B->C->D->A): 各个软件安装的依赖关系构成“环状”,解决此类型依赖的方法是用一条命令同时安装所有软件包,即使用rpm -ivh 软件包A 软件包B ...
3)模块依赖: 软件包的安装需要借助其他软件包的某些文件(比如库文件),解决模块依赖最直接的方式是通过 http://www.rpmfind.net 网站找到包含此文件的软件包,安装即可
模块依赖案例:安装mysql-connector-odbc-5.2.5-8.el7.x86_64.rpm包
1,下载
二,RPM包管理的命令
一,基础命令
一,RPM的安装,升级,卸载
1,安装:rpm -ivh 包全名
参数:
- -i(install):安装
- -v(verbose):显示安装的详细信息
- -h(hash):显示进度条
- --nodeps:不检查依赖性
注:一般安装不用nodeps参数,因为底层的软件包不安装,上层的软件包安装了也运行不了
2,升级:rpm -Uvh 包全名
参数:
- -U(upadata):升级
注:升级时必须要光盘有最新的RPM包,才能更新
3,卸载:rpm -e 包名
参数:
- e(erase):卸载:默认卸载有依赖性,底层的依赖包卸载会报错,需要由上至下卸载
- --nodeps:不检查依赖性
注:卸载也不推荐使用nodeps,假如底层的软件包卸载成功,上层的软件也会使用不了
二,RPM的查询
rpm 选项 包名
参数:
- -q:查询
- -a(all):所有
- -i(information):软件详细信息
- -p(package):未安装包详细(未安装的需要进入光盘package目录)
- -l(list):软件包安装形成的文件和目录位置
- -f(file):系统文件目录属于那个软件包
- -R(requires):查询软件包的依赖性
注:q是前提参数,没有查询后面参数都是没有的
1,rpm -q:查询包是否已经安装(成功输出包全名)
2,rpm -qa:查询所有已经安装的RPM包(可以加一些过滤推荐如:grep,tail,wc……)
3,rpm -qi:查询软件包的详细信息
4,rpm -ql:查询软件包安装形成的文件和目录
注:RPM包的安装位置在是事先被系统绝对好了的
5,rpm -qf:查询系统文件属于那个软件包
6,rpm -qR:查询软件包的依赖性
二,RPM包的校验和文件提取
一,RPM包效验
RPM包效验就是检查包中文件是否被修改过,可以检查其他用户修改
命令:rpm -V 已安装的包名
参数:
- -V:效验指定RPM包中的文件
假如没有被修改返回空,被修改了返回8个字节的验证信息和修改文件的位置
8个字节的验证信息(为.表明没有被修改):
- S:文件大小是否改变
- M:文件的类型或文件权限(rwx)是否被修改
- 5:文件MD5效验和是否被改变(文件内容是否改变)
- D:设备的代码是否改变
- L:文件路径是否改变
- U:文件所有者是否改变
- G:文件的所属组是否改变
- T:文件的修改时间是否改变
例:效验httpd包
1,修改httpd包中的httpd/conf/httpd.conf文件
2,包效验
文件效验信息有S,5,T:说明文件大小,文件内容,文件修改时间被改变
二,RPM包文件提取
RPM包安装是安装全部文件,RPM提取是提取RPM包中指定某个文件
文件提取的主要作用:解决误操作问题,假如你误删了系统的/etc目录,这时就可以先找到/etc文件属于的软件包(rpm -qf),然后再从软件包中把etc文件提取出来进行复源
命令:rpm2cpio 包全名 | cpio-idv .提取的文件目录
两个子命令:
1,rpm2cpio:将rpm包转化为cpio格式的命令
2,cpio:一个标准的工具,它用于创建软件档案文件和从档案中提取文件
- -i:copy-in模式,还原
- -d:还原时自动新建目录
- -v:显示还原进程
三,YUM插件
YUM(yellowdog updater modified)是一个RPM系统的自动更新和软件包安装/卸载器。它可以自动计算依赖和找出想要安装的软件包。这使得它更容易而不必手动更新每一个使用RPM维护机器的”软件组“。YUM有一个添加简单功能的插件接口
普通的RPM包管理是通过手动进行安装管理的,需要自己解决依赖性问题,yum是一种在线较为自动化的包管理工具,相当于一个基于RPM包管理的一个插件,本质上它属于RPM包管理器(都是对RPM包进行管理)
yum出现的一个重要原因就是解决传统RPM安装的依赖性问题,它安装一个软件包,可以一次把软件包和依赖软件包都安装
yum有两种安装源:
- 网络源:从网络yum源服务器上下载rpm包(默认源)
- 本地源:把光盘作为源,从本地光盘中进行下载
注:并不是使用yum都要联网,网络源需要配置网络,本地源则不需要
一,YUM源的配置
一,网络yum源
首先需要配置网络(不细讲)
网络yum源是默认源,安装后就不需要配置,但我们看一下它的配置文件
1,默认yum的源是在/etc/yum.repos.d文件中
默认yum源以repo作为后缀名
- CentOS-Base.repo:网络yum源(默认使用)
- CentOS-Media.repo:本地光盘yum源
- CentOS-Vault.repo:虚拟yum源
- CentOS-Deduginfo.repo:修复yum源、
2,查看CentOS-Base.repo网络源的内容
- [base]:容器的名称,一定要放在[]中
- name:容器说明,可以自己随便写
- mirrorlist:镜像站点,这个可以注释一般使用真实yum源服务器地址
- baseurl:真实的yum源服务器地址,默认是CentOS官方的yum源服务器,是可以使用的,如果慢可以换成国内的yum源服务器地址
- enabled:此容器是否生效,如果不写或者写成enable=1都是生效,写成enable=0就是不生效
- gpgcheck:如果是1是指的数字证书生效,如果是0则不生效
- gpgkey:数字证书公钥的保存位置,不用修改
二,光盘本地yum源
本地光盘yum源默认是不支持的,需要手动配置
步骤:
1,挂载光盘(不详讲):mout /dev/cdrom /mnt/cdrom
2,让网络yum源和其他yum源失效(添加一个bak无法识别的后缀名)
[root@localhost yum.repos.d]# mv CentOS-Base.repo CentOS-Base.repo.bak [root@localhost yum.repos.d]# mv CentOS-Vault.repo CentOS-Vault.repo.bak [root@localhost yum.repos.d]# mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
3,修改光盘yum源文件
修改项:
- 真实源服务器地址改为光盘挂载地址(file:///是本地文件协议)
- 注释两不存在的地址
- 把enabled=0改为enabled=1,让源生效
修改前:
[c7-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
修改后:
[c7-media] name=CentOS-$releasever - Media baseurl=file:///mnt/cdrom/ # file:///media/cdrom/ # file:///media/cdrecorder/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
二,yum操作命令
yum使用的全部都是包名而不是部分使用包全名,因为是可以直接去服务器搜索
一,yum查询
yum查询是对源服务器上的可用的RPM软件包进行查询输出的,查询也是联网的
查询参数:
- list:查询源服务器上所有可用软件包列表
- search:搜索服务器上所有和搜索包有依赖性的包(类似于 rpm -R 包名)
二,yum安装
yum安装不需要考虑依赖性问题,一次性把安装和依赖包都安装
安装参数:
- install:安装
- -y:自动回答yes
三,yum升级和卸载
升级参数:
- update:升级
- -y:自动回答yes
注:升级命令不接包名如yum -y update 会把系统所有的rpm包都升级,会导致系统错误无法正常运行,因此更新时要加包名
卸载参数:
- remove:卸载
- -y:自动回答yes
注:卸载也解决了依赖性问题但不推荐,因为你卸载一个上层包它会把你依赖的所有下层包全部卸载,假如还有很多的上层包依赖这些下层包,就会出现大量的软件报错(推荐使用rpm原生的卸载命令)
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109