Linux基础14 RPM包管理, 安装, 查询, 升级, 卸载, 软件运行和编译
阿里云rpm包下载地址
https://developer.aliyun.com/mirror/
RPM包管理:
RPM全称RPM Package Manager缩写,由红帽开发用于软件包的安装,升级卸载与查询
yum安装的全是RPM包
mysql-5.6.40.tar.gz 源码包,也可通过mysql-5.6.40.rpm安装
RPM包: i686/noarch tree- 1.6.0- 10. el7 .x86_64 .rpm 包名 版本 发布次数 centos7 包的架构(64位)(x86_32为i686) 后缀 noarch 32位 64位都兼容 跟平台无关 # centos7可以装centos6的包。centos6不一定能装centos7的包 (需要依赖的,比如依赖内核的不能装)
#http-parser-2.8.0-9.el8.x86_64.rpm
#httpd-2.4.37-41.module+el8.5.0+695+1fa8055e.x86_64.rpm
#nginx-1.14.1-9.module+el8.4.0+542+81547229.x86_64.rpm
#el8 EL是Red Hat Enterprise Linux(EL)的缩写, EL8是Red Hat 8.x,CentOS 8.x, el8.4.0+ 是指 适配redhat8.4.0以上及centos8.4.0以上的系统
源代码打包文件命名
name-VERSION.tar.gz|bz2|xz VERSION: major.minor.release
#nginx-1.22.0.tar.gz #major 主版本号 #minor 次版本号 #release 修正版本号
Linux中软件包分类
分类 安装 版本 rpm包 预先编译打包,安装简单 软件版本偏低 tree-1.6.0-10.el7.x86_64.rpm 源码包 手动编译打包,安装繁琐 软件版本随意 mysql-5.6.42.tar.gz 二进制包 解压即可使用, 安装简单 不能修改源码 mysql-5.6.42-linux-glibc2.12-x86_64.tar.gz
用vm创建centos的话,在虚拟机选项,设置选项中,可以看到硬件挂载centos镜像。镜像里rpm包。
mount /dev/cdrom /mnt
在/mnt/Packages中可以看到镜像中的rpm包
RPM包管理命令:安装
-i: #安装 -v: #详细信息 -h: #安装进度 --test: #测试是否能够安装成功 --force: #强制重新安装(有时候有用,如果缺依赖还是不能装) --nodeps: #忽略依赖关系(装上也没意义,没依赖无法用) rpm -ivh tree-1.6.0-10.el7.x86_64.rpm # 如果只用i参数, 不知道装没装完 #仅测试,是否能安装成功。不进行安装 [root@oldboyedu Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm --test Preparing... ################################# [100%] #强制安装,忽略依赖 [root@oldboyedu Packages]# rpm -ivh --nodeps --force samba-client-4.8.3-4.el7.x86_64.rpm
注: rpm包里,如果没有放依赖的话,需要提前安装依赖包
RPM包管理命令:查询
rpm -q #查看指定软件包是否安装 rpm -qa #查看系统中已安装的所有RPM软件包列表 rpm -qi #查看指定软件的详细信息 rpm -ql #查询指定软件包所安装的目录、文件列表 (查找软件启动程序位置) rpm -qc #查询指定软件包的配置文件 rpm -qd #查询指定软件包的帮助文档 rpm -qf #查询文件或目录属于哪个RPM软件 rpm -q --scripts #查询rpm包安装前和安装后执行的脚本 # 不常用的命令 rpm -qip # 查询未安装的rpm包详细信息 rpm-qlp # 查询未安装的软件包会产生哪些文件 [root@oldboyedu Packages]# rpm -q nginx # 查看是否安装了nginx [root@oldboyedu Packages]# rpm -qa|grep vim # 查看vim相关的包是否安装 [root@oldboyedu Packages]# rpm -qi tree # 查看tree的详细信息 [root@oldboyedu Packages]# rpm -qf `which useradd` # 查看命令属于哪个RPM软软件包 [root@localhost ~]# rpm -ql shadow-utils-4.1.5.1-18.el7.x86_64 # 查看软件包所安装的目录、文件列表 [root@localhost ~]# rpm -qc shadow-utils-4.1.5.1-18.el7.x86_64 # 查看软件包配置文件
RPM包管理命令:升级
-U 如果老版本不存在,就全新安装,如果存在有新版即升级 -f 老版本必须存在(可用于没有老版本就不升级) 如果有新版则升级, 软件升级不要跨操作系统主版本号 [root@zls ~]# rpm -Uvh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
RPM包管理命令:卸载
卸载包时需要先把依赖的包卸载掉,如果依赖的包是系统所必须的,那就不能卸载这个包,否则会造成系统崩溃。 rpm -e # 卸载,后面跟包名 //先查询, 然后卸载 [root@zls ~]# rpm -qa |grep sh [root@zls ~]# rpm -e zsh
练习:
1.根据mysql命令 查找 mysql的配置文件在哪?
rpm -qc $(rpm -qf `which mysql`)
2.根据/etc/hostname找出修改主机名的命令?
[root@localhost ~]# rpm -ql $(rpm -qf /etc/hostname)|grep 'bin/hostname' /usr/bin/hostnamectl
3.找到nginx的rpm包,安装上,并列出nginx的相关命令路径,以及配置文件,还有站点目录
下载地址: https://mirrors.aliyun.com/epel/7/x86_64/Packages/n/nginx-1.20.1-10.el7.x86_64.rpm 安装 rpm -ivh nginx-1.20.1-10.el7.x86_64.rpm
# 如果报错,缺少依赖,根据缺少的内容,在https://mirrors.aliyun.com/epel/7/x86_64/Packages/n上下载后,rpm -ivh依次安装后,在装nginx
查配置文件
rpm -qc nginx
查站点目录
rpm -ql nginx|grep html
查命令
rpm -ql nginx|grep bin
4.找到zabbix-agent的rpm安装包,3.x 4.2版本,下载,升级
下载 wegt https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-agent-3.0.0-1.el7.x86_64.rpm
wegt https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.1-1.el7.x86_64.rpm
安装
rpm -ivh zabbix-agent-3.0.0-1.el7.x86_64.rpm # 此处缺少依赖,用下方yum方法,localinstall参数可以从源里直接下载安装依赖源
yum localinstall -y zabbix-agent-3.0.0-1.el7.x86_64.rpm
升级
rpm -Uvh zabbix-agent-4.2.1-1.el7.x86_64.rpm
5.尝试使用rpm命令,远程安装,不下载到本地
rpm -ivh rpm包下载地址
软件运行和编译
ABI: 应用程序二进制接口
windows 与 linux 中的 ABI 格式是不兼容的 windows 中的是 PE (Portable Executable ) 格式 Linux 中的是 ELF ( Executable and Linkable Format ) 格式
API:
API可以在各种不同的操作系统上实现给应用程序提供完 全相同的接口,而它们本身在这些系统上的实现却可能迥异,主流的操作系统有两种,一种是Windows 系统,另一种是Linux系统。
由于操作系统的不同,API又分为Windows API和Linux API。在Windows 平台开发出来的软件在Linux上无法运行,在Linux上开发的软件在Windows上又无法运行,这就导致了 软件移植困难,
POSIX 标准的出现就是为了解决这个问题。
POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为应用程序 提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。
linux和windows都要实现基本的posix标准,程序就在源代码级别可移植了。
C语言程序的实现过程
C 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
C语言的程序编译主要经过四个过程:
预处理(Pre-Processing) 1 将所有的#define删除,并且展开所有的宏定义 2 处理所有的条件预编译指令,比如 #if,#ifdef,#elif,#else,#endif 等 3 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置 4 删除所有的注释,//,/**/ 5 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号 6 保留所有的#pragma编译指令,因为编译需要使用它们 编译 (Compiling) 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成的汇编代码 汇编 (Assembling) 汇编是将汇编代码转变成机器码可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对 照表一一翻译即可 链接 (Linking) 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件
但实际工作中的商业项目,会有成百上千的源码文件,包括头文件,库文件(库里面又有自定义库,第三 方库,标准库),各种依赖关系,编译的先后顺序等,所以在实际的开发工作中,几乎不会用这种手动编 译的方式去编译项目;
软件模块的静态和动态链接
链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态 和动态链接
静态链接
- 把程序对应的依赖库复制一份到包
- 生成模块文件libxxx.a
- 嵌入程序包
- 升级难,需重新编译
- 占用较多空间,迁移容易
动态链接
- 只把依赖加做一个动态链接
- 生成模块文件libxxx.so
- 连接指向
- 占用较少空间,升级方便
程序包编译
程序包编译安装: 源代码-->预处理-->编译-->汇编-->链接-->执行 多文件:文件中的代码之间,很可能存在跨文件依赖关系
虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软 件,可能需要自已下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特 性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具 可以大大减少编译过程的复杂度。
编译源码的项目工具
C、C++的源码编译:使用 make 项目管理器 configure脚本 --> Makefifile.in --> Makefile 相关开发工具: oconf: 生成confifigure脚本 automake:生成Makefifile.in java的源码编译: 使用 maven
C语言源代码编译安装过程
利用编译工具,通常只需要三个大的步骤
1. ./configure (1) 通过选项传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及Makefifile.in文件生成Makefile (2) 检查依赖到的外部环境,如依赖的软件包 2. make 根据Makefifile文件,构建应用程序 make -j N #并行编译,N为cpu 核数 3. make install 复制文件到相应路径 总结 ./configure make && make install #make install完了,把安装好的文件删了,再次make install,还是一样能安装出文件
编译安装准备
准备:安装相关的依赖包
- 开发工具: gcc (c/c++编译器GNU C Complier),make
- 开发环境:开发库(glibc:标准库),头文件,可安装开发包组 Development Tools
- 特定软件相关依赖包
生产实践:基于最小化安装的系统建议安装下面相关包
yum install gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools
iotop bc bzip2 zip unzip nfs-utils man-pages
编译安装
第一步:运行 confifigure 脚本,生成Makefile
文件 其选项主要功能:
- 可以指定安装位置
- 指定启用或禁用某些特性
获取其支持使用的选项
./configure --help #常用选项 #安装路径设定 --prefix=/PATH #指定默认安装位置,默认为/usr/local/ --sysconfdir=/PATH #配置文件安装位置 #软件特性和相关指定 #Optional Features: 可选特性 --disable-FEATURE | --without-poll_module #手动禁用,表示默认是开启的 --enable-FEATURE[=ARG] | --with-FEATURE #通过这种手动添加特性,表示默认没 有此特性 #Optional Packages: 可选包 --with-PACKAGE[=ARG] #依赖包 --without-PACKAGE #禁用依赖关系 注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于 name-devel-VERSION
第二步:make
第三步:make install
安装后的配置
1. 二进制程序目录导入至PATH环境变量中
编辑文件 /etc/profile
export PATH=/PATH/TO/BIN:$PATH
2. 相关用户及文件
有些开源软件编译完成后,还需要创建相关的用户及文件