软件安装细碎知识点
LFS推荐的软件安装方面文章,将源码安装,二进制安装描述的及其详细,同时也介绍了源码安装相关技术
Building and Installing Software Packages for Linux
Beginner's Guide to Installing from Source
Linux下可执行文件
虽说Linux上一个文件是否可以执行要看他有没有x权限,但Linux真正识别的可执行文件是二进制文件。shell script不是二进制文件却可以执行,本质上shell script时利用了Bash内置的一些功能(eg.判断),其他仍是调用已编译好的二进制可执行文件。
函数库
函数库包括动态库,静态库。很多软件在开发的时候都是直接取用系统内核提供的函数库与include文件,这样才能与操作系统兼容。
库文件位置/usr 和 /usr/lib
头文件位置/usr/include
make和configure
尽管每个Linux distribution都是用Linux这个内核,但是不同版内核使用的系统调用可能不同,每个软件需要的相关函数库也可能不同。因此软件安装之前,configure会根据检测当前环境,包括:
是否有合适的编译器——>用于编译本软件的源代码
是否有本软件需要的函数库,以及依赖软件
操作系统平台是否适合本软件,包括 Linux 的核心版本;
Kernel的头文件是否存在(取动程序必须检测)
检测通过后,configure会生成一个makefile给make执行。
tarball
所谓tarball就是将软件的源码文件先以tar打包,然后再用压缩工具进行压缩,最常见的就是gzip、bzip2。tarball的扩展名通常是*.tar.gz,*.tgz,*.tar.bz2。
tarball方式安装软件可以实现跨平台,因为C语言代码在各个平台上是可以通用的。
tarball一般安装过程:
取得源文件:将 tarball 在 /usr/local/src 下解压
查看安装文档:查看INSTALL 或 README
configure生成makefile
make clean,清除源码中可能残留的上次编译过的目标文件(.o文件)
make,依据makefile进行编译。顺利的话会生成可执行文件、库文件、配置文件、man手册等等
make install,这部就是将上一步生成的文件拷贝到指定目录,一般是/usr/local/src{etc,bin,lib,man}
软件安装位置
Linux distribution的软件一般放在/usr下面
用户自行安装的软件一般在/usr/local下面
推荐做法是安装在/usr/local/softname/下面,通常软件安装完后会生成4个字目录,etc、man、lib、bin。分别对应配置文件,man手册,库文件,可执行文件。
可执行文件需要加入到PATH,也可以在PATH的搜索路径中为可执行文件创建一个软连接
man手册需要在/etc/man.config下新增刚安装软件的man手册位置
软件打补丁
很多软件开发商在更新了源码中后,都会发布所谓的patch file。通过patch file,旧版源码直接变成新版源码,不需要下载最新tarball。patch file更新源马后,直接make,make install编译、安装。由于make工作机制,未改动过的文件不需要编译,改动过的文件可以自动更新,整个过程会很快完成。
软件卸载
软件卸载一定要从上往下卸载,就像拆楼,要先拆上面的,再拆下面的。
检验软件正确性
在软件正确性检验方面,主要分为内外两者机制。外部检验由厂商负责,内部检验更多是系统管理员的责任。
外部检验技术主要有2种
1、指纹编码机制,常用MD5或者SHA1,和Git底层原理使用SHA1道理类似,指纹时根据文件内容算出来的一堆数字。软件下载后可以使用md5sum或者sha1sum命令计算
该软件包的指纹,看看是否和官网给的一致。不一致说明软件包有问题。
这种方法也有问题,如果官网的软件包和指纹一起被改了,用户这面是发现不了的。
2、数字证书机制,参考:软件包数字签名
内部检验技术
/var/lib/rpm下面的数据库与当先系统下所有软件文件做对比
rpm -V :后面接软件名称,若该软件所含的文件被更动过,就会列出来
rpm -Va :列出目前系统上面所有可能被更动过的文件;
rpm -Vp :后面接文件名称,列出该软件内可能被更动过的文件;
rpm -Vf :列出某个文件是否被更动过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决