目录
一.Linux软件包简介
在Linux操作系统中,除了一些系统命令之外,还需要一些能根据实际需求,相对独立的完成其他任务的应用程序,这些应用程序通常没有固定的执行格式,完全由程序开发者自行定义。在Linux环境中,需要使用时就会安装这些程序,即特定的软件包。
Linux软件包分为源码包和二进制包。
1.Linux源码包
Linux源码包:是按照特定的格式和语法编写的一堆源代码组成的程序。
2.Linux二进制包
Linux二进制包:是由源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快,且安装过程报错几率大大减小。
3.优缺点
源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball。
使用源码包安装软件具有以下几点好处:
-
开源。如果你有足够的能力,则可以修改源代码。
-
可以自由选择所需的功能。
-
因为软件是编译安装的,所以更加适合自己的系统,更加稳定,效率也更高。
-
卸载方便。
但同时,使用源码包安装软件也有几点不足:
-
安装过程步骤较多,尤其是在安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误。
-
编译时间较长,所以安装时间比二进制安装要长。
-
因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决
4.封装过程
-
预处理(Pre-Processing)
1)将所有的#define删除,并且展开所有的宏定义。
2)处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等。
3)处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
4)删除所有注释 "//"和"/* */".
5)添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
6)保留所有的#pragma编译器指令,因为编译器需要使用它们。
-
编译 (Compiling)
编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成相应的汇编代码。
-
汇编 (Assembling)
汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。
-
链接 (Linking)
通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件。
5.封装类型
文件类型 | 保存目录 |
RPM软件包 | 扩展名为“.rpm”,适用于RHEL、CentOS等系统 |
DEB软件包 | 扩展名为“.deb”,适用于Ubuntu、Debian等系统 |
源代码软件包 | 一般为“.tar.gz”,“.tar.bz2”等格式的压缩包,包含程序的原始代码,需要编译安装 |
绿色免安装的软件包 | 软件包的扩展名不一,以TarBall格式的居多 在压缩包内提供已编译好的执行程序文件 解开压缩包后的文件即可直接使用 |
-
RPM包 : RPM Package Manager的缩写 是红帽公司自主研发的一款工具,实用性强。RPM包是预先在linux机器上编译好并打包好的文件,安装起来非常快捷。但是也有一些缺点,比如安装的环境必须与编译时的环境一致或者相当;包与包之间存在相互依赖的情况。
-
DEB包:在Linux系统中类似于windows中的软件包(exe),几乎不需要什么复杂的编译即可通过鼠标点击安装使用。此外,deb广泛应用于越狱后iOS软件及MeeGo(含Maemo软件)中。Debian包是将包的文件信息以及包内容,经过gzip和tar打包而成。
-
源代码软件包 :是需要我们自己把源代码编译成二进制的可执行文件。如果你读得懂这些源代码,那么你就可以去修改这些源代码自定义功能,然后再去编译成你想要的。使用源码包的好处除了可以自定义修改源代码外还可以定制相关的功能,因为源码包在编译的时候是可以附加额外的选项的。
-
绿色免安装的软件包 :顾名思义自行理解比如Windows的截图软件。
二.RPM
RPM软件可以实现几乎所有的功能,新增,删除,更新等。
在安装RPM软件包时,软件包之间可能存在依赖关系,甚至循环依赖。
如果因为缺少依赖的包,会导致安装包失败。
RPM有三个作用:
①.查询、验证rpm软件的相关信息
②.安装卸载rpm软件包
③.维护rpm的数据库信息
1.查询、验证rpm软件的相关信息
命令 | 效果 |
rpm -q 软件名 | 查询指定软件是否已安装 |
rpm -qi 软件名 | 显示已安装的指定软件的详细信息 |
rpm -ql 软件名 | 显示已安装的指定软件的文件列表 |
rpm -qc 软件名 | 列出已安装的指定软件的配置文件 |
rpm -qd 软件名 | 列出已安装的指定软件的软件包文档所在位置 |
rpm -qR 软件名 | 列出已安装的指定软件的依赖的软件包及文件 |
rpm -qf 文件或目录 | 查询已安装的指定软件属于哪个安装包 |
rpm -qa | 显示当前系统中以rpm方案安装的所有软件列表 |
2.安装卸载rpm软件包
命令 | 效果 |
-i | 安装一个新的RPM软件包 |
-h | 在安装或升级软件包的过程中,以“#”号显示安装进度 |
-v | 显示软件安装过程中的详细信息 |
-e | 卸载指定名称的软件包 |
-U | 升级某个软件包,若未安装过,则进行安装 |
-F | 升级某个软件包,若未安装过,则放弃安装 |
–force | 强制安装某个软件包,比如要安装版本更旧的软件包 |
–nodeps | 在安装或升级、卸载一个软件包时,不检查与其他软件包的依赖关系 |
3.维护rpm的数据库信息
RPM数据库:用于记录在Linux系统中安装、卸载、升级应用程序的相关信息,由RPM包管理系统自动完成维护,一般不需要用户干预。当RPM数据库发生损坏(误删文件、非法关机、病毒破坏等导致),且Llinut系统无法自动完成修复时,将导致无法使用rpm命令正常地安装、下载及查询软件包,这时可以使用以下两个命令重建RPM数据库。
rpm --rebuilddb
rpm --initdb
三.yum
1.yum的安装原理
①.客户端会根据配置文件自带的yum服务端仓库位置找到yum仓库
②.服务端接收到请求后,客户端会下载元信息。
元信息包括所有安装包的位置和对应的依赖关系。
③.客户端根据元信息找到相应包的位置,并发起下载请求。
④.服务端接收请求后,客户端便会把包下载到本地。
2.建立本地yum仓库
①.建立本地yum仓库原理
当实际环境中,如果一台客户端没有网络能访问服务端,这时这台客户端便需要建立本地yum仓库,以便于yum软件包的安装。
建立本地yum仓库的客户端也变相于服务端。
②.建立本地yum仓库过程
第一步:需要将光盘镜像挂载到一个目录,这里比较常用是/mnt目录
mount /dev/sr0 /mnt
第二步:备份系统自带的yum仓库
cd /etc/yum.repos.d/
mkdir backups
mv *.repo backups
第三步:写入本地yum配置信息
vim local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
enable=1
第四步:清理缓存,生成新元信息并检验
yum clean all
yum makecache
yum install -y tree
#把光盘镜像挂载到mnt目录
[root@localhost ~]#mount /dev/sr0 /mnt
#进入到系统自带的yum仓库
[root@localhost /]#cd /etc/yum.repos.d
#创建一个备份的仓库目录
[root@localhost yum.repos.d]#mkdir backups
#把系统自带的转移到备份目录中
[root@localhost yum.repos.d]#mv *.repo backups/
#创建一个本地yum仓库配置文件
[root@localhost yum.repos.d]#vim local.repo
#清理系统原缓存,生成新的缓存元信息
[root@localhost yum.repos.d]#yum clean all && yum makecache
#检验yum仓库源
[root@localhost yum.repos.d]#yum install -y tree
四.编译安装
1.编译安装步骤
①. ./confgiure :检测安装环境,设置安装目录和模块
②. make编译 :生成可执行的二进制文件
③. make install : 复制二进制文件到系统,配置应用环境
2.编译安装过程
第一步:下载.tar软件包并解压
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf nginx-1.18.0.tar.gz
第二步:解决安装所需要的安装环境
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
第三步:创建并指定安装目录
mkdir /apps/nginx -p
./configure --prefix=/apps/nginx
第四步:编译和安装
make
make install
第五步:做软连接补全命令,启动并检验
ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
nginx
ss -natp |grep 80
#下载nginx软件包
[root@localhost opt]#wget http://nginx.org/download/nginx-1.18.0.tar.gz
#解压软件包
[root@localhost opt]#tar xf nginx-1.18.0.tar.gz
#进入软件包目录安装所需环境
[root@localhost opt]#cd nginx-1.18.0/
[root@localhost nginx-1.18.0]#yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
#自定义安装目录
[root@localhost nginx-1.18.0]#mkdir /apps/nginx -p
#指定安装目录
[root@localhost nginx-1.18.0]#./configure --prefix=/apps/nginx
#编译
[root@localhost nginx-1.18.0]#make
#安装
[root@localhost nginx-1.18.0]#make install
#做软连接补全命令
[root@localhost nginx-1.18.0]#ln -s /apps/nginx/sbin/nginx /usr/sbin/nginx
启动nginx
[root@localhost nginx-1.18.0]#nginx
#检验是否成功
[root@localhost nginx-1.18.0]#ss -natp |grep 80
LISTEN 0 128 *:80 *:* users:(("nginx",pid=6117,fd=6),("nginx",pid=6116,fd=6))