- A+
Linux管理软件的三种方法:
- 包管理
- 使用仓库管理
- 编译安装
软件相关概念:
ABI:
ABI:Application Binary Interface。应用程序的二进制接口。windows和Linux的二进制格式不一样(ABI标准不同)
Windows与Linux不兼容
ELF (Executable and Linkable Format) --- Linux格式
PE (Portable Executable)--- Windows格式
API:
API:Application Programming Interface。应用程序开发接口。(开发者使用第三方的模块直接调用对应API接口)
windows的API和linux的API无法相互运行。
POSIX:
POSIX:Portable Operating System Interface 可移植操作系统接口。是一种接口的标准。(定义库的开发标准)降低了不同平台迁移的标准。
软件运行环境
Linux中的程序大部分都是C语言开发的
C程序实现过程:
C 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接
预处理: 预处理(宏定义、注释、加入include包含的文件等)生成 .i结尾的文本文件。
编译:生成汇编代码(汇编语言贴近机器语言) ,生成 .s结尾的汇编文本文件
汇编:将上面的文本文件转换成二进制(机器指令)文本文件。 .o (object -- 对象文件)结尾的二进制文本文件
链接:把别的一些.o文件链接在一起形成一个统一的文件。
实现这个过程所用到的工具:gcc
范例:gcc的编译过程 #分步骤编译运行 gcc -E hello.c -o hello.i 对hello.c文件进行预处理,生成了hello.i 文件 ---预处理 gcc -S hello.i -o hello.s 对预处理文件进行编译,生成了汇编文件 --- 编译 gcc -c hello.s -o hello.o 对汇编文件进行编译,生成了目标文件 --- 汇编 gcc hello.o -o hello 对目标文件进行链接,生成可执行文件 --- 链接 #一步实现编译过程 gcc hello.c -o hello 直接编译链接成可执行目标文件
静态链接和动态链接:
链接:程序用到的第三方模块库和程序链接在一起。
库:libary --- lib
静态链接: (不常用)
程序文件和第三方库形成一个文件。运行程序的时候需要把库和程序文件都加载到内存中了。
特点:
- 需要嵌入程序包
- 升级难,需重新编译
- 占用较多空间,迁移容易
动态链接:(共享库)
只把依赖加做一个动态链接,生成二进制程序文件的时候这个文件里面只有它自己的程序,没有库相关的程序。
特点:
- 如果多个程序使用到同一个库,就只需要加载一次库到内存。
- 占用较少空间,升级方便
- 程序迁移不方便
库(模块)文件
显示程序调用的库文件: ldd命令
例如: lss /usr/bin/ls
库文件很重要,破坏了库文件相关程序(命令)无法正常运行
库文件破坏修复方法:
- 通过救援模式使用光盘启动(光盘会加载要给简化的系统)
- 利用光盘中的系统来修复损坏的系统。
管理及查看本机装载的库文件
配置文件:
缓存文件:
软件包和包管理器
源代码直接编译安装很繁琐。为了减少使用开源软件的难度。一些开源公司把程序预先编译完成并且把相关的文件打成一个包,成为一个独立的包文件。
源码编译生成二进制文件+相关的文件(配置文件、文档文档文件等、脚本文件等) = 包文件
软件包:
刚开始只提供.tar.gz的方式打包源码文件。需要用户手动编译,后来debian诞生的时候,一个叫做dpkg的管理工具出现。它可以管理deb后缀的‘包’文件 (pkg -- package)
再后来redhat开发了自己的rpm包管理器。
查看包种有哪些文件的方法:cpio命令
软件包中的文件分类:
- 二进制文件
- 库文件
- 配置文件
- 帮助文件
- 脚本文件
包的命名:
源代码包:
name-VERSION.tar.gz|bz2|xz
程序名-版本号
rpm包:
name-VERSION-release.arch.rpm
软件名-版本号-打包相关信息-cpu架构
包的分类和拆包
linux种为了更好的选择包,就把大的软件拆开了。--- 避免只想使用一个功能,但是被迫把所有功能都装上了。
比如:httpd这个软件就把他拆成了很多个小包
包的依赖
软件包之间可能存在依赖关系。
程序包管理器:
用来管理包文件的。
将编译好的应用程序进行打包,实现程序的安装、卸载等功能。
常见的包管理器:
redhat: rpm包管理器,管理rpm文件 --- rpm:redhat package manager
debian:dpkg包管理器,管理deb文件
例:查看rpm包中存在那些文件:
#使用rpm2cpio转化为cpio流,然后使用cpio查看: rpm2cpio file.rpm | cpio -tv
程序包管理器相关软件
程序包管理器相关文件
rpm包:
- 包文件:文件列表、元数据、脚本
- 数据库:/var/lib/rpm -- 存放已安装的包名、文件列表、依赖关系、安装路径等
利用这个数据库就可以知道系统已经安装的rpm包和里面包含的文件、属性。
安装和卸载软件都会首先检查这个数据库。
程序包的来源
1.系统光盘或官网
2.第三方组织
3.软件官方站点
4.自己制作
rpm 包管理器
- 安装
- 卸载
- 查询(用的最多)
- 升级
安装:rpm {-i|--install} [install-options] PACKAGE
安装的时候要写软件包的路径
命令选项:
-h:显示进度
-v:显示安装过程
安装选项:
--nodeps:忽略依赖关系
--test:测试安装
升级:rpm {-U|--upgrade} [install-options] PACKAGE
选项:
--force: 强制安装
查询:rpm {-q|--query} [select-options] [query-options]
选项:
-a:所有包
-f:查看指定的文件由哪个程序包安装生成
-c:查询程序的配置文件
-l:查看指定的程序包安装后生成的所有文件
例如:
rpm -ql 软件名 --- 查看已经装好的包里面包含的文件分别放在那些目录下。
rpm -qf file --- 查询磁盘上的文件来自于那个包
卸载: rpm {-e|--erase} PACKAGE
注意:当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
卸载只需要写软件的名称
选项:
--nodeps:强制删除
rpm包的数据库维护
rpm包安装生成的信息都放在:/var/lib/rpm 这个文件中
重建数据库:rpm {--initdb|--rebuilddb}
initdb: 初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录