Linux源码包的安装与升级
文章目录
- Linux源码包的安装与升级
- 什么是源代码、编译器与可执行文件
- 什么是函数库
- 什么是make与configure
- 什么是Tarball的软件
- 如何安装与升级软件
Linux源码包的安装与升级
如果你想在自己的Linux服务器上运行网站,就需要安装一个Web服务器软件,否则无法提供Web服务。所以学会如何安装软件非常重要。
在Windows操作系统上安装软件很简单,只需要一直按下一步就可以。但是,因为Windows软件源代码是封闭的,所以无法修改它的功能或添加新功能
。这就意味着,如果你的电脑受到病毒或黑客攻击,你只能等待软件开发商提供的修补程序,而不能自己修补。
相比之下,如果你在Linux上安装软件,你可以修改和自定义软件功能,甚至可以修补软件漏洞,因为Linux的软件源代码是开放的
。这样可以增加你的电脑安全性,减少受到攻击的风险。
==Linux的优点在于它的软件几乎都是开放源代码的,这意味着每个软件都提供源代码,你可以自己修改它,以适合自己的需求。==开放源代码的好处在于你可以自由定制软件,增加或减少功能,甚至修补漏洞。但是,你需要理解什么是开放源代码,源代码是什么,以及在Linux上安装软件时,安装文件和源代码之间的关系。不同版本的Linux是否可以使用相同的执行文件,还是需要重新转换源代码,这些都是需要了解的概念。下面就以源代码与可执行文件来进行说明
什么是源代码、编译器与可执行文件
在Linux系统中,可执行文件是指二进制程序,比如 /usr/bin/passwd
和 /bin/touch
等文件。这些文件需要具有可执行权限(即有 x permission)才能被执行。与之不同的是,shell脚本是使用 shell 程序(如 bash)的功能进行一些判断,最终还是需要执行一些已经编译好的二进制程序。因此,shell本身也是一个二进制程序。
要判断一个文件是否为二进制程序,可以使用 file
命令来查看。
[root@localhost ~]# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=85e3da5a087950e7aaeb7893c056218a8874d2e5, stripped
# 还有系所提供的/etc/init.d/network
[root@localhost ~]# file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable
看到了吗?如果一个文件是二进制程序,并且具有可执行权限,那么使用 file
命令时会显示它的执行文件类别(如 ELF 64-bit LSB executable),同时也会显示是否使用动态函数库(shared libs)。如果一个文件只是一般的脚本,那么 file
命令会显示它是文本可执行文件(text executable)等字样。
既然Linux操作系统真正认识的其实是二进制程序,那么我们是如何做出这样的一个二进制程序的呢?制作一个二进制程序的过程分为两步:编写源代码和编译源代码
。编写源代码时,我们使用的是文本编辑器,比如 vim,来写出一段程序的文字描述;这个文件就是源代码文件,它本质上是一个纯文本文件。接着,我们需要使用编译器来将这个源代码文件编译成操作系统认识的二进制程序
。在Linux系统中,最常用的编程语言是C语言,所以我们可以使用标准的C语言编译器——gcc,来将C语言源代码文件编译成可执行的二进制程序。
流程图如下:
在编译过程中,编译器会将源代码文件编译成目标文件(object file),这些目标文件通常以 *.o 的扩展名存储。同时,我们在编写程序时,可能会引用或调用其他外部的子程序或函数,这时候我们需要在编译的过程中将这些函数库加入到我们的程序中。这样,编译器就会将所有的程序代码与函数库链接在一起,生成最终的可执行文件。在C语言中,源代码文件通常以 *.c 作为扩展名,而函数库文件通常以 *.a 或 *.so 的扩展名存储。
- 开放源代码:就是程序代码,写给人类看的程序语言,但机器并不认识,所以无法执行
- 编译器:将程序代码转译成为机器看得懂的语言,就类似翻译者的角色
- 可执行文件:经过编译器变成的二进制程序,机器看得懂所以可以执行
什么是函数库
在前面的流程图中,提到了函数库,那么什么是函数库?函数库是一组编写好的程序代码,可以在其他程序中被调用和重复使用。它们通常被组织成一个或多个文件,以便在需要时链接到程序中。在Linux系统中,PAM模块就是一个函数库,提供了验证用户身份和记录日志等功能,其他程序可以直接调用PAM的函数来实现身份认证,而不需要重新编写认证机制。此外,Linux内核也提供了很多函数库,可以供硬件开发者使用。
函数库又分为动态与静态函数库
如上图,如果需要使用一个函数库里面的函数,就需要在编译程序的时候加入相关的设置,让程序知道去哪里找到这个函数库。在Linux系统中,提供了很多与内核相关的函数库和参数,这些信息对于设计硬件驱动程序非常有用,它们通常被放置在/usr/include、/usr/lib、/usr/lib64这些目录中。
- 函数库:就类似子程序角色,是可以被调用来执行的一段功能函数
什么是make与configure
在使用类似gcc这样的编译器编译程序时,有多个程序文件需要编译,并且还需要写一个最终的链接程序。对于程序代码比较简短的情况,这并不是很麻烦,但是对于像WWW服务器软件(比如Apache)或者内核这样的大型程序,编译过程非常繁琐,需要写很多编译命令。为了简化这个过程,我们可以使用make命令来自动化编译过程,从而减少编译命令的编写量。
当使用make命令时,它会在当前目录下查找Makefile文件,这个文件记录了源代码如何编译的详细信息。make命令会自动判断源代码是否被修改过,如果有修改,则自动更新执行文件,这使得make成为了软件工程师非常实用的辅助工具。
make是一个程序,会去找Makefile,那么Makefile怎么写?通常软件开发商都会写一个检测程序来检测用户的操作环境,以及该操作环境是否有软件开发商所需要的其他功能,该检测程序检测完毕后,就会主动地建立中Makefile的规则文件,通常这个检测程序的文件名为configure或是config。
为什么要检测环境呢?因为不同版本的内核所使用的系统调用可能不同,每个软件所需要依赖的内核函数库也不同,同时,软件开发商不仅针对Linux开发,还可能针对整个UNIX-like系统进行开发,因此需要检测操作系统平台是否提供了所需要的编译器等工具。一般来说没检测程序会检测的内容大约有下面这些:
- 是否有适合的编译器可以编译本软件的程序代码
- 是否已经存在本软件所需要的函数库,或其他需要的依赖文件
- 操作系统平台是否适合本软件,包括Linux的内核版本
- 内核的头文件是否存在(驱动程序必须要的检测)
下面的图表明了整个过程中需要完成两个任务:
(1)执行configure来建立Makefile,这个步骤必须成功完成,只有成功之后才能(2)调用make命令进行编译所需的数据。
简单来说,configure是在检测和设置编译环境之后生成Makefile,而make则是根据Makefile来编译执行文件。这两个命令在整个编译过程中起到了非常重要的作用。
什么是Tarball的软件
Tarball文件就是将软件的源代码文件使用tar命令打包成一个文件,再使用压缩技术将其压缩。
最常见的压缩技术是gzip,因此Tarball文件的扩展名一般为.tar.gz或.tgz。由于利用了tar和gzip的功能,Tarball文件可以将软件的所有源代码文件打包在一起,方便用户进行传输和备份。近来,由于bzip2和xz的压缩率较高,Tarball文件也开始使用这些压缩技术,并相应地更改了扩展名,如.tar.bz2和.tar.xz等。用户在下载Tarball文件后,需要使用tar命令和相应的压缩解压工具进行解压缩,然后按照软件提供的安装说明进行编译和安装。所以说Tarball是一个软件包,你将它解压缩后,里面的文件通常就会有:
- 源代码文件
- 检测程序文件(可能是configure或config等文件)
- 本软件的建议说明与安装说明(README 或 INSTALL)
如何安装与升级软件
使用源代码编译安装:有些软件可能没有官方的软件包,只提供源代码,可以通过下载源代码并进行编译安装来安装软件,繁琐时间很漫长。
直接以编译好的二进制程序来安装与升级:这样做的好处就是省略了检测与编译等繁杂的过程。
那么源码包如何安装呢?基本流程是这样的
- 将Tarball 由厂商的网站下载
- 将Tarball 解开,产生很多的源代码文件
- 开始以GCC 进行源代码的编译 (会产生目标文件 object files)
- 然后以 gcc 进行函数库、主、子程序的链接,以形成主要的二进制文件
- 将上述的二进制文件以及相关的配置文件安装至自己的主机上面
相关文章:

Linux源码包的安装与升级
文章目录 Linux源码包的安装与升级什么是源代码、编译器与可执行文件什么是函数库什么是make与configure什么是Tarball的软件如何安装与升级软件 Linux源码包的安装与升级 如果你想在自己的Linux服务器上运行网站,就需要安装一个Web服务器软件,否则无法…...

电子合同签署协议开源版系统开发
电子合同签署协议开源版系统开发 H5TP6mysqlphp 源码开源不加密 以下是电子合同系统可能包含的功能列表: 用户注册和登录:用户可以注册并登录系统,以便创建、签署和管理合同。合同创建:用户可以创建新合同,包括填写合…...
【每日一题Day221】LC2455可被三整除的偶数的平均值 | 模拟
可被三整除的偶数的平均值【LC2455】 给你一个由正整数组成的整数数组 nums ,返回其中可被 3 整除的所有偶数的平均值。 注意:n 个元素的平均值等于 n 个元素 求和 再除以 n ,结果 向下取整 到最接近的整数。 思路 遍历数组,如果某…...

NCI架构-1
1、NFCC和DH通过物理连线相连,物理连线对应为Transport Layer(传输层),支持SPI、I2C、UART、USB等; 2、DH中所有和NFC相关的应用程序都可视为DH-NFCEE(EE:Execution Enviroment),图左的NFCEE模块可运行一些…...
lambda使用场景
字符串转换为数组: [rootmaster pyflink]# cat t300.py f(lambda i: (i, 1)) x11 22 33 print(f(x)) [rootmaster pyflink]# python t300.py (11 22 33, 1) [rootmaster pyflink]# cat t301.py f(lambda i: i[0]) x(aa,11, 22, 33) print(f(x)) [rootmaster pyflink]# pyth…...
Python模拟Postgres数据库连接
psycopg2 psycopg2是一个Python库,用于在Python应用程序中连接和操作PostgreSQL数据库。它是PostgreSQL数据库的官方驱动程序之一,具有广泛的应用和支持。 以下是一些psycopg2的特点和功能: 连接到PostgreSQL数据库:psycopg2提供…...

(转载)基于粒子群算法的多目标搜索算法(matlab实现)
1 理论基础 在实际工程优化问题中,多数问题是多目标优化问题。相对于单目标优化问题,多目标优化问题的显著特点是优化各个目标使其同时达到综合的最优值。然而,由于多目标优化问题的各个目标之间往往是相互冲突的,在满足其中一个…...

皮卡丘存储型xss、DOM型xss、DOM型xss-x
1.存储型xss 看题目,我们先留言,看它的过滤机制 发现可以永久存储并输出我们的留言 之后插入payload: <script>alert(xss)</script> 成功弹窗! 2.DOM型xss Dom型xss,简单的说,就是向文档对象传入xss参…...

ThreadLocal源码
介绍 ThreadLocal是一个线程的本地变量,也就意味着这个变量是线程独有的,是不能与其他线程共享的。这样就可以避免资源竞争带来的多线程的问题。 但是,这种解决多线程安全问题的方式和加锁方式(synchronized、Lock) 是有本质的区…...
Hive学习---3、DML(Data Manipulation Language)数据操作、查询
1、DML(Data Manipulation Language)数据操作 1.1 Load load语句可将文件导入到Hive表中 1、语法 load data [local] inpath filepath [overwrite] into table tablename [partition(partcol1val1,partcol2val2...)]2、关键字说明 (1&…...

chatgpt赋能python:Python去除重复元素的几种方法
Python去除重复元素的几种方法 在Python编程中,去除列表、集合、字典等数据结构中的重复元素是一个常见的操作。本文将介绍Python中去除重复元素的几种方法,并分析它们的优缺点。 方法一:使用set去重 Set是Python中的一种集合类数据结构&a…...

2年测试我迷茫了,软件测试大佬都会哪些技能?我的测试进阶之路...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…...

21天学会C++:Day7----auto关键字
CSDN的uu们,大家好。这里是C入门的第七讲。 座右铭:前路坎坷,披荆斩棘,扶摇直上。 博客主页: 姬如祎 收录专栏:C专题 目录 1. 知识引入 2. auto的使用 2.1 auto与指针和引用结合起来使用 2.2 在同一…...

Vue3 + ElementPlus实战学习——模拟简单的联系人列表管理后台
文章目录 📋前言🎯demo 介绍🎯功能分析🧩数据的展示与分页功能🧩编辑功能🧩删除功能 🎯部分代码分析🎯完整代码📝最后 📋前言 这篇文章介绍一下基于 Vue3 和…...

【Go语言从入门到实战】并发篇
Go语言从入门到实战 — 并发篇 协程 Thread vs Groutine 相比之下,协程的栈大小就小很多了,创建起来也会更快,也更节省系统资源。 一个 goroutine 的栈,和操作系统线程一样,会保存其活跃或挂起的函数调用的本地变量…...
img标签请求 添加自定义header(二)
之前写过一篇关于img添加自定义请求头的处理方式(点击这里),那么本篇我们来看另外几种实现方法。 自定义指令 以Vue为例,我们可以定义一个全局指令,对img标签进行一些处理。 <template><img :src"src…...
Set和weakSet Map和WeakMap
Set和weakSet的用法和区别 1.Set 和weakSet 它是类似于数组,且成员值都是唯一的, 2.Set有 add has delete clear size keys values forEach entries 3.weakSet 有add has delete 4.WeakSet中只能存放对象类型,不能存放基本类型 5.WeakSet它是…...

Qt基础之三十六:异常处理
本文将介绍如何在Qt中使用try...catch和调试dump文件来处理异常。 Qt版本5.12.6 一.使用try...catch 一段简单的捕获异常的代码,新建一个控制台工程,pro文件不用修改 #include <QCoreApplication> #include <QDebug>int main(int argc, char *argv[]) {QCoreA…...

【HMS Core】【ML Kit】活体检测FAQ合集
【问题描述1】 使用示例代码集成活体检测SDK时,报错state code -7001 【解决方案】 使用示例代码前请详细阅读示例工程中的“README”文件。您需要完成以下操作后才可以运行示例代码。 在AppGallery Connect网站下载自己应用的“agconnect-services.json”文件&a…...

ChatGPT:使用OpenAI创建自己的AI网站,使用 flask web框架快速搭建网站主体
使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白,有OpenAI的账号,但想调用OpenAI的API搞一些有意思的事,那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。 使用 flask web框架快速搭建网站主体 之前…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...