什么是 RPMRPM 全称为:Red-Hat Package Manager,即红帽 linux 发行版的软件包管理器 。RPM 的出现,提升了 Linux 软件安装、升级的便捷性 。RPM 遵循 GPL 协议,除了红帽 Linux 发行版,Caldera OpenLinux、SUSE 以及 Turbo Linux 等 Linux 的发行版也使用 RPM,因此 RPM 是 Linux 软件包管理的行业标准 。为了使读者能够较为深入理解 RPM,我们先介绍软件的构建方法 。
计算机软件的软件是从源代码构建出来的 。源代码是人们以人类可读的语言书写的、让计算机执行任务的指令 。人类可读的语言格式和规范,就是编程语言 。
从源代码制作软件的过程,称之为是软件编译 。从源代码构建成软件的编译有两种方式:
- 本机编译 (Natively Compiled),对应编译型语言 。
- 解释编译(Interpreted Compiled),对应解释性语言 。
与本机编译可以独立执行相对应,某些编程语言不能将软件编译成计算机可以直接理解的格式,而需要语言解释器或语言虚拟机(如 JVM),我们称之为解释编译 。常用的解释语言有 Byte Compiled(源代码需要编译成字节代码,然后由语言虚拟机执行,如 Python)和 Raw Interpreted(原始解释语言完全不需要编译,它们由解释器直接执行,如 Bash shell)两种 。
我们常用的 bash shell 和 Python 是解释型的,这种方式编译出的程序与硬件架构无关,通过这种方式编译出的 RPM 会被标注为 noarch(说明 RPM 包不依赖于特定 linux 发行版) 。
在介绍了源代码的编译方式后,接下来我们通过实验的方式展现软件的编译过程 。
从源代码构建软件在正式开始验证之前,我们需要在 Linux 中安装编译工具 。
# yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils
接下来,我们分别介绍本机编译和解释编译 。本机编译代码在编程语言中,C 语言是本机编译 。我们查看一个源代码文件,如清单 1 所示:
清单 1. C 语言源码文件
# cat cello.c#include <stdio.h>int main(void) {printf("Hello World, I'm DavidWei!n");return 0;}
调用 C 编译器 gcc 进行编译:# gcc -o cello cello.c
编译成功后,我们可以执行结果输出 。
# ./cello
Hello World, I'm DavidWei!
为了实现自动化构建代码,我们添加 Makefile,这是大型软件开发中常用的方法 。
首先创建一个 Makefile,如清单 2 所示:
清单 2. Makefile 文件
# cat Makefilecello:gcc -o cello cello.cclean:rm cello
接下来,通过 make 来完成编译 。执行 make 会自动编译源代码,然后可以成功执行,如下图 1 所示:
图 1. 编译并运行代码
文章插图
执行 make clean 会删除编译结果,如下图 2 所示:图 2. 删除编译结果
文章插图
在介绍了本机编译后,我们介绍解释编译 。
解释型代码对于用解释型编程语言编写的软件,如果是 Byte Compiled 语言如 Python,就需要一个编译步骤,把源代码构建成 Python 的语言解释器(称为 CPython)的可以执行文件 。
我们查看一个 python 的源代码,如清单 3 所示:
清单 3. Python 源代码文件
# cat pello.py#!/usr/bin/env pythonprint("Hello World, I'm DavidWei!")
对源代码进行编译:# python -m compileall pello.py
Compiling pello.py ...
编译成功后运行:
# python pello.pyc
Hello World, I'm DavidWei!
我们看到,对源.py 文件进行字节编译后会生成一个.pyc 文件,这是 python 2.7 字节编译的文件类型,这个文件可以使用 python 语言虚拟机运行 。
查看文件类型:
# file pello.pyc
pello.pyc: python 2.7 byte-compiled
和 python 相对应,无需编译的解释性代码是 Raw Interpreted,如我们日常使用的 bash shell 。
我们看一个 shell 文件,如清单 4 所示:
清单 4. Shell 文件
# cat bello#!/bin/bashprintf "Hello World, I'm DavidWei!n"
对于 Raw Interpreted 源码,我们使文件可执行、然后直接运行即可,如下图 3 所示:图 3. 修改权限运行 shell
推荐阅读
- Linux 5.7内核新特性介绍
- 家中wifi网络老不好?救星来了
- Javascript中操作String字符串的33种方法,你都知道吗?
- 茶的存储注意事项,谭洋功夫茶饮用中的注意事项
- 分享几款免费的连接Linux的使用工具
- linux服务器上创建mysql5.7定时任务,实现自动发布文章
- 茶馆在中国的出现,茶坊在古代与现代的介绍
- 穿衣搭配|中性女生应该如何穿搭,才不过于浮夸,显得年轻又时尚?
- 顶谷大方茶好喝吗,大方茶中的上品顶谷大方茶
- 大陆游客不来,中国茶叶博物馆推出猜茶谜