首页 > 系统相关 >8-Linux软件管理

8-Linux软件管理

时间:2022-10-04 14:04:10浏览次数:88  
标签:管理 -- 安装 软件包 程序包 yum Linux 软件 rpm

  1. 关于软件运行和编译
  • ABI
  • ABI-Application Binary Interface
  • Windows与Linux的ABI不兼容
  • W:PE
  • L:ELF
  • 范例
  • 查看Linxu内置文件的格式

8-Linux软件管理_linux

  • 查看Windows环境中创建的文件

8-Linux软件管理_版本号_02

8-Linux软件管理_版本号_03

8-Linux软件管理_linux_04

8-Linux软件管理_包管理器_05

  • linux 中不同版本的 ABI 是通用的

8-Linux软件管理_包管理器_06

8-Linux软件管理_linux_07

8-Linux软件管理_包管理器_08

8-Linux软件管理_linux_09

  • API
  • API-Application Programming Interface
  • POSIX-Protable Operating System Interface
  • 基于posix标准实现的API接口使得Linux和Windows平台的程序可进行一定程度上的相互移植

//这段代码在win和 linux 下都可以编译通过
//因为 win 和 linux 中都有相同的头文件printf和 sleep 函数,且参数一样
#include <stdio.h>
#include<unistd.h>
int main() {
while (true){
printf("hello world\n");
sleep(1);
}
return 0;
}

  • C语言程序的实现过程
  • C源码→预处理→编译→汇编→链接
  • 编写C源码
  • 预处理
  • 删除#define,展开宏定义
  • 处理条件预编译指令(例如 #if #ifdef #elif #else #endif)
  • 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置
  • 删除所有的注释,//,/**/
  • 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号
  • 保留所有的#pragma编译指令,因为编译需要使用它们
  • 编译
  • 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成的汇编代码
  • 汇编
  • 汇编是将汇编代码转变成机器码可以执行的命令
  • 链接
  • 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件
  • 维护映射关系
  • 技术背景:一般商业的项目中,会有成百上千的源码文件相互耦合以打包成一个完整的项目文件,所以需要维护繁杂的映射关系【包括头文件,库文件(库里面又有自定义库,第三方库,标准库),各种依赖关系,编译的先后顺序等】
  • 软件模块的静态链接和动态链接
  • 区别
  • 静态编译
  • 在编译时,把所有模块都编译进可执行文件里,当启动这个可执行文件时,所有模块都被加载进来
  • 优点:
  • 代码的装载速度快,执行速度也比较快
  • 缺点:
  • 程序体积会相对较大
  • 如果静态库需要更新,程序需要重新编译
  • 如果多个应用程序使用的话,会被装载多次,浪费内存。
  • 动态编译
  • 应用程序需要的模块都编译成动态链接库,启动程序(初始化)时,这些模块不会被加载,运行时用到哪个模块就调用哪个
  • 优点:
  • 多个应用程序可以使用同一个动态库,而不需要在磁盘上存储多个拷贝
  • 缺点
  • 当用户的系统上没有该动态库时,应用程序就会运行失败
  • ​由于是运行时加载,可能会影响程序的前期执行性能
  • 查看本地Linux装载的库文件

#加载配置文件中指定的库文件
ldconfig

#显示本机已经缓存的所有可用库文件名及文件路径映射关系
ldconfig -p

2.软件包和包管理器

  • 功能概述
  • 将编译好的应用程序的各组成文件打包一个或几个程序包文件,利用包管理器可以方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作
  • 主流程序包管理器
  • redhat:rpm文件, rpm 包管理器,rpm:Redhat Package Manager,RPM Package Manager
  • debian:deb文件, dpkg 包管理器
  • 包命名规则

#----源码打包----
name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
#例
nginx-1.22.0.tar.gz
#major 主版本号
#minor 次版本号
#release 修正版本号

#----rpm打包----
name-VERSION-release.arch.rpm
VERSION: major.minor.release
release:release.OS
#例
http-parser-2.8.0-9.el8.x86_64.rpm
#major 主版本号
#minor 次版本号
#release 修正版本号
#el8 EL是Red Hat Enterprise Linux(EL)的缩写, EL8是Red Hat 8.x,CentOS 8.x,
el8.4.0+ 是指 适配redhat8.4.0以上及centos8.4.0以上的系统

实际案例:源码打包

8-Linux软件管理_版本号_10

8-Linux软件管理_linux_11

8-Linux软件管理_包管理器_12

同样的rpm包也会遵循相应规则命名

常见的arch:

  1. x86: i386, i486, i586, i686
  2. x86_64: x64, x86_64, amd64
  3. powerpc: ppc
  4. 跟平台无关:noarch
  • 包的分类
  • Application-VERSION-ARCH.rpm: 主包
  • Application-devel-VERSION-ARCH.rpm 开发子包
  • Application-utils-VERSION-ARHC.rpm 其它子包
  • Application-libs-VERSION-ARHC.rpm 其它子包
  • 包的依赖
  • 为了方便维护安装软件包时附带的与其他软件包之间的依赖关系,有一些常用的依赖包管理器可供使用:
  • yum:rpm包管理器的前端工具
  • dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替
  • yum apt:deb包管理器前端工具
  • zypper:suse上的rpm前端管理工具
  • 其他
  • 包管理器相关文件
  • 包内文件
  • 元数据
  • 安装或卸载脚本
  • 数据库(/var/lib/rpm)
  • 程序包名称及版本
  • 依赖关系
  • 功能说明
  • 包安装后生成的各文件路径及校验码信息
  • 包管理器rpm(用的不多)
  • 安装

rpm {-i|--install} [install-options] PACKAGE_FILE…
-v|verbose #显示详细信息
-vv #更详细
-h #显示安装进度条
--test #测试安装,但不真正执行安装,即dry run模式
--nodeps #忽略依赖关系
--replacefiles #忽略软件包之间的冲突的文件
--replacepkgs #如果软件包已经有了,重新安装软件包
--nosignature #不检查来源合法性
--nodigest #不检查包完整性
--noscripts #不执行程序包脚本,相当于 --nopre --nopost --nopreun --nopostun -
-nopretrans --noposttrans
--nopre #不执行程序包中安装前脚本
--nopost #不执行程序包中安装前脚本
--nopreun #不执行程序包中卸载前脚本
--nopostun #不执行程序包中卸载后脚本
--nopretrans #安装前不执行与程序同名脚本
--noposttrans #安装后不执行与程序同名脚本
#常用组合
rpm -ivh PACKAGE_FILE ...

  • 升级或降级

rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade #安装有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”
freshen #安装有旧版程序包,则“升级”, 如果不存在旧版程序包,则不执行升级操

--oldpackage #降级
--force #强制安装
#常用组合
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...

  • 包查询

rpm {-q|--query} [select-options] [query-options]
[select-options]
-a #所有包
-f #查看指定的文件由哪个程序包安装生成
-p rpmfile #针对尚未安装的程序包文件做查询操作
--whatprovides CAPABILITY #查询指定的CAPABILITY由哪个包所提供
--whatrequires CAPABILITY #查询指定的CAPABILITY被哪个包所依赖
[query-options]
--changelog #查询rpm包的changelog
-c #查询程序的配置文件
-d #查询程序的文档
-i #information
-l #查看指定的程序包安装后生成的所有文件
--scripts #程序包自带的脚本
--provides #列出指定程序包所提供的CAPABILITY
-R #查询指定的程序包所依赖的CAPABILITY
#常用查询组合
-qi PACKAGE
-qf FILE
-qc PACKAGE
-ql PACKAGE
-qd PACKAGE
-qpi PACKAGE_FILE
-qpl PACKAGE_FILE
-qa

  • 包卸载

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test]
PACKAGE_NAME ...

  • 包校验签名是否合法

rpm -K|checksig rpmfile
#范例
#在检查包的来源和完整性前,必须导入所需要公钥
#导入公钥
[root@rocky86 v]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
#查看己导入的公钥
[root@rocky86 v]# rpm -qa "gpg-pubkey"
gpg-pubkey-2f86d6a1-5cf7cefb
gpg-pubkey-6d745a60-60287f36
#查看
[root@rocky86 v]# rpm -qi gpg-pubkey-6d745a60-60287f36
Name : gpg-pubkey
Version : 6d745a60
Release : 60287f36
Architecture: (none)
......

  • 包内文件变化查询

rpm {-V|--verify} [select-options] [verify-options]
#字段说明
S #文件大小不一样
M #文件权限不一样或文件类型不一样
5 #md5 校验值不一样
D #版本号值不一样
L #链接路径不一样
U #属主发生了改变
G #属组发生了改变
T #修改时间发生了改变
P #功能发生了改变
c|d|g|l|r #文件类型 c配置文件, d数据文件,g该文件不属于此处,l许可文件(licens
file),r自述文件(READ ME)
#如果占位符是 . 则表示该处与安装时没有任何改变

  • 包安装数据库

8-Linux软件管理_包管理器_13

  • 包更新日志

rpm -q --changelog packageName

  • yum和dnf
  • yum:Yellowdog Update Modififier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具.
  • dnf:CentOS 8 用dnf 代替了yum ,不过保留了和yum的兼容性,配置也是通用的
  • yum/dnf基于C/S模式
  • yum客户端配置

8-Linux软件管理_包管理器_14

gpgcheck=1 #安装包前要做包的合法和完整性校验
installonly_limit=3 #同时可以安装3个包,最小值为2,如设为0或1,
为不限制
clean_requirements_on_remove=True #删除包时,是否将不再使用的包删除
best=True #升级时,自动选择安装最新版,即使缺少包的依

skip_if_unavailable=False #跳过不可用的

8-Linux软件管理_包管理器_15

#repo仓库配置文件指向的定义
name=Some name for this repository #仓库名称
baseurl=url://path/to/repository/ #仓库地址
mirrorlist=http://list/ #仓库地址列表,在这里写了多个 baseurl指向
的地址
enabled={1|0} #是否启用,默认值为1,启用
gpgcheck={1|0} #是否对包进行校验,默认值为1
gpgkey={URL|file://FILENAME} #校验key的地址
enablegroups={1|0} #是否启用yum group,默认值为 1
failovermethod={roundrobin|priority} #有多个baseurl,此项决定访问规则,
roundrobin 随机,priority:按顺序访问
cost=1000 #开销,或者是成本,YUM程序会根据此值来决定优先访问哪个源,默认为1000

查询已经安装的repoID

8-Linux软件管理_版本号_16

自定义repo

  • 显示指定源具体信息

8-Linux软件管理_包管理器_17

8-Linux软件管理_版本号_18

8-Linux软件管理_linux_19

  • 安装或卸载程序包
#装载
yum install [options] PACKAGE [...]
yum reinstall [options] PACKAGE [...]
#常用选项
--installroot path #指定安装目录
--downloadonly #只下载,不安装
--downloaddir path|--destdir path #指定下载目录,如果下载目录不存在,则自动创建

#卸载(erase 同时卸载多个)
yum remove [options] PACKAGE [...]
yum erase [options] PACKAGE [...]

8-Linux软件管理_包管理器_20

8-Linux软件管理_版本号_21

8-Linux软件管理_linux_22

  • 查询安装包信息
yum info [options] PACKAGE [...] #查看程序包的 information 信息
yum provides [options] PROVIDE #查看文件是由哪个包提供
yum search [options] KEYWORD #根据关健字搜索,范围包括包名和描述信息
yum deplist [options] PACKAGE [...] #查询包的依赖

8-Linux软件管理_版本号_23

8-Linux软件管理_linux_24

8-Linux软件管理_包管理器_25

  • 仓库缓存
  • 缓存目录为 /var/cache/dnf/ ( /var/cache/yum/ )
  • 缓存内容为一些命令脚本,若删除再次使用需要重新下载或构建
yum clean [options] {metadata,packages,dbcache,expire-cache,all} #清空缓存
yum makecache #构建缓存
  • yum事务日志
  • 执行安装卸载命令会记录到相关日志中
  • 日志文件 /var/log/dnf.log ( /var/log/yum.log )
yum history [options] [info|list|redo|undo]
yum history #默认查看所有
yum history list #同上
yum history package #查看与指定包有关的日志
info N #查看第N条记录的具体执行内容
undo N #回滚第N条记录
redo N #重新执行第N条记录

8-Linux软件管理_包管理器_26

  • 建立yum私仓
  • 步骤概述
  • 在 yum server 机上搭建 web 服务,保证其它机器能能过web服务访问本机
  • 在 yum server 机上搭建 yum 仓服务
  • 在 client 机上将yum 的 repos 源指向 yum server 机
  • 测试
  • 实操

开始搭建

(用150【Rocky86】作为建仓服务器,153作为客户端【Rocky86】)

8-Linux软件管理_版本号_27

150开启相关服务

8-Linux软件管理_linux_28

8-Linux软件管理_linux_29

8-Linux软件管理_包管理器_30

8-Linux软件管理_linux_31

*创建repo层级,目录结构可以参照其他商业网站,比如阿里

8-Linux软件管理_linux_32

8-Linux软件管理_版本号_33

8-Linux软件管理_版本号_34

为了更方便的创建目录,我们可以直接复制固件中自带的repo结构,如下操作

挂载光驱到mnt文件下

8-Linux软件管理_版本号_35

8-Linux软件管理_版本号_36

8-Linux软件管理_linux_37

153添加repo源地址,并测试链接repo源

8-Linux软件管理_linux_38

尝试安装

8-Linux软件管理_linux_39

150服务端同步其他源信息补充repo源

比如我们补充一个阿里extra

​https://mirrors.aliyun.com/rockylinux/8.6/extras/x86_64/os/​

8-Linux软件管理_linux_40

8-Linux软件管理_包管理器_41

8-Linux软件管理_版本号_42

8-Linux软件管理_包管理器_43

同步开始

8-Linux软件管理_版本号_44

8-Linux软件管理_linux_45

8-Linux软件管理_linux_46

151客户端添加repo源地址

8-Linux软件管理_linux_47

8-Linux软件管理_linux_48

8-Linux软件管理_版本号_49

8-Linux软件管理_包管理器_50

*同步命令

dnf/yum reposync --repoid=REPOID --download-metadata -p /path
dnf/yum reposync --help #查看帮助
  • Ubuntu软件管理
  • dpkg包管理器
dpkg [<option> ...] <command>
#常用选项
-i|--install package.deb #安装包
--unpack package.deb #解包
-r|--remove packageName #删除包,不建议,不自动卸载依赖于它的包
-P|--purge packageName #删除包(包括配置文件)
-V|--verify packageName #检查包是否安装
--get-selections pattern #根据正则筛选包,并打出列表
--set-selections #从标准输入里读出要选择的软件。
--clear-selections #取消选中所有不必要的软件包。
--update-avail packageFile #替换现有可安装的软件包信息。
--merge-avail packageFile #把文件中的信息合并到系统中。
--clear-avail #清除现有的软件包信息。
--forget-old-unavail #忘却已被卸载的不可安装的软件包。
-s|--status packageName #显示指定软件包的详细状态,类似于 rpm -qi
-p|--print-avail packageName #显示当前机器上所有可安装的包
-L|--listfiles packageName #列出属于指定软件包的文件,类似于 rpm -ql
-l|--list [pattern] #列出当前己安装的包,类似于rpm -qa
-S|--search pattern #根据文件查询是来自于哪个包,类似于 rpm -
qf
-C|--audit [pattern] #检查是否有软件包残损
--yet-to-unpack #列出标记为待解压的软件包
--predep-package #列出待解压的预依赖
--compare-vesions v1 - b #比较版本号
--force-help #显示本强制选项的帮助信息
-Dh|--debug=help #显示有关出错调试的帮助信息
--info packageFile #列出包相关信息
-c packageFile #列出包内文件,类似于 rpm -qpl

用法和rpm异曲同工

  • apt
  • Debian 使用apt 工具集来管理包系统,apt-get 是其中一个常用的命令行工具,另外一款较为流行的命令行与 GUI 兼顾的工具是 aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、aptcache和 apt-config 这三条命令中。
apt [options] command
#options
-h|--help #显示帮助
-v|--version #显示版本
-y|--yes #自动回答yes
-q|--quiet #安静模式
#command
list #根据名称列出软件包
search #搜索软件包描述
show|info #显示软件包细节
install #安装软件包
remove #移除软件包
autoremove #卸载所有自动安装且不再使用的软件包
update #更新可用软件包列表,只更新索引文件,不具体更新软

upgrade #通过 安装/升级 软件来更新系统
full-upgrade #通过 卸载/安装/升级 来更新系统
edit-sources #编辑软件源信息文件
apt --fix-broken install

标签:管理,--,安装,软件包,程序包,yum,Linux,软件,rpm
From: https://blog.51cto.com/u_15791168/5731238

相关文章

  • 如何使用Sentry管理Hive仓库目录外的其他目录的acl同步
    温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。Fayson的github:​​https://github.com/fayson/cdhproject​​提示:代码块部分可......
  • 软件开发工具填空题_20221004
    1第三代程序设计语言一般都是(  )语言。进入二十一世纪以来,软件开发工具的发展有两个鲜明的特点,第一个特点是面向网络,另一个特点是(来源软件的兴起和运用)。填空题1712......
  • Baklib知识分享|企业文档管理的一些策略
    在信息化的数字时代,任何一个工作流程都涉及到各种文档数据的产生、存储、使用和管理,员工可以在此基础上完成在线编辑任务,跨组织跨地域的文件共享,以及企业知识的积累和沉淀。......
  • #yyds干货盘点# 软件测试的目的和对象
    一、不论是哪个时期的定义,软件测试的目的实际上是一致的,这个目的就是“保证软件质量”。具体来讲就是要保证软件或系统符合相关的法律法规、技术标准和应用需求,降低软件的......
  • 使用云服务器搭建linux环境
    (文章目录)一、关于云服务器的挑选首先来说,挑选云服务器,有阿里云,华为云以及腾讯云,博主建议挑选腾讯云(因为价格在这几家最低)点击这里进入腾讯云校园计划发现2核2G......
  • Linux命令
    命令编译辅助Tab键#自动补齐反斜杠\#强制换行快捷键Ctrl+U#清空至行首快捷键Ctrl+K#清空至行尾快捷键Ctrl+L#清屏快捷键Ctrl+C#取消本次命......
  • Linux内存占用过高排查过程
    1查看服务器状态系统是CentOSLinuxrelease7.5.1804(Core)使用top命令看了下系统的状态系统的整体负载和cpu并不高,但是内存使用比较高(总8G使用了7.2G)。使用M按内存......
  • 学会 Git 02: Git 分支管理之简单操作分支进行开发
    Git分支管理:简单操作分支进行开发什么是分支?上一篇,我们gitbranch显示的信息就是本地数据库中的各个分支名。分支是为了在多人协作的时候,防止互相干扰,协同开发而诞生......
  • 【Azure API 管理】APIM服务资源删除后,为什么不能马上创建相同名称的APIM服务呢?
    问题描述使用AzureAPIM服务,在删除旧资源准备新建相同名称的新APIM服务时,尝试多次都是出现“指定的服务名称已正在使用”错误。但实际上同名称的服务已经被删除。为什么多次......
  • Linux nohup命令
    目录Linuxnohup命令语法格式转载声明Linuxnohup命令nohup英文全称为nohangup,用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行.nohup命令,在默认情况......