Erlo

Linux 软件管理

收藏 2022-06-21 10:00:01   15   博客园
页面报错/反馈
点赞

Linux管理软件的三种方法:

  1. 包管理
  2. 使用仓库管理
  3. 编译安装

软件相关概念:

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 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接

image

预处理: 预处理(宏定义、注释、加入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

静态链接: (不常用)

程序文件和第三方库形成一个文件。运行程序的时候需要把库和程序文件都加载到内存中了。

特点:

  1. 需要嵌入程序包
  2. 升级难,需重新编译
  3. 占用较多空间,迁移容易

动态链接:(共享库)

只把依赖加做一个动态链接,生成二进制程序文件的时候这个文件里面只有它自己的程序,没有库相关的程序。

特点:

  1. 如果多个程序使用到同一个库,就只需要加载一次库到内存。
  2. 占用较少空间,升级方便
  3. 程序迁移不方便

库(模块)文件

显示程序调用的库文件: ldd命令

例如: lss /usr/bin/ls
库文件很重要,破坏了库文件相关程序(命令)无法正常运行

库文件破坏修复方法:

  1. 通过救援模式使用光盘启动(光盘会加载要给简化的系统)
  2. 利用光盘中的系统来修复损坏的系统。

管理及查看本机装载的库文件
配置文件:
缓存文件:

软件包和包管理器

源代码直接编译安装很繁琐。为了减少使用开源软件的难度。一些开源公司把程序预先编译完成并且把相关的文件打成一个包,成为一个独立的包文件。
源码编译生成二进制文件+相关的文件(配置文件、文档文档文件等、脚本文件等) = 包文件

软件包:

刚开始只提供.tar.gz的方式打包源码文件。需要用户手动编译,后来debian诞生的时候,一个叫做dpkg的管理工具出现。它可以管理deb后缀的‘包’文件 (pkg -- package)
再后来redhat开发了自己的rpm包管理器。
查看包种有哪些文件的方法:cpio命令

软件包中的文件分类:

  1. 二进制文件
  2. 库文件
  3. 配置文件
  4. 帮助文件
  5. 脚本文件

包的命名:

源代码包:

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包:

  1. 包文件:文件列表、元数据、脚本
  2. 数据库:/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:重建已安装的包头的数据库索引目录

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认