学习运维第八天:软件管理

软件运行和编译

软件相关概念

ABI

ABI:(Application Binary Interface) 应用程序二进制接口

windows 与 linux 中的 ABI 格式是不兼容的

  • windows 中的是 PE (Portable Executable ) 格式

  • Linux 中的是 ELF ( Executable and Linkable Format ) 格式

查看可执行文件格式

    file <文件名>

API

API 即 Application Programming Interface,API可以在各种不同的操作系统上实现给应用程序提供完 全相同的接口,而它们本身在这些系统上的实现却可能迥异,主流的操作系统有两种,一种是Windows 系统,另一种是Linux系统。由于操作系统的不同,API又分为Windows API和Linux API。在Windows 平台开发出来的软件在Linux上无法运行,在Linux上开发的软件在Windows上又无法运行,这就导致了 软件移植困难,POSIX 标准的出现就是为了解决这个问题。

POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为应用程序 提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。

linux和windows都要实现基本的posix标准,程序就在源代码级别可移植了。

C语言程序的实现过程

C 程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接

C语言的程序编译主要经过四个过程:

预处理(Pre-Processing)

  1. 将所有的#define删除,并且展开所有的宏定义

  2. 处理所有的条件预编译指令,比如 #if,#ifdef,#elif,#else,#endif 等

  3. 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置

  4. 删除所有的注释,//,/**/

  5. 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号

  6. 保留所有的#pragma编译指令,因为编译需要使用它们

编译 (Compiling)

编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生 成的汇编代码

汇编 (Assembling)

汇编是将汇编代码转变成机器码可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇 编相对于编译过程比较简单,根据汇编指令和机器指令的对 照表一一翻译即可

链接 (Linking)

通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成 可执行文件

软件模块的静态和动态链接

链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态 和动态链接

静态链接
  • 把程序对应的依赖库复制一份到包

  • 生成模块文件libxxx.a

  • 嵌入程序包

  • 升级难,需重新编译

  • 占用较多空间,迁移容易

动态链接
  • 只把依赖加做一个动态链接

  • 生成模块文件libxxx.so

  • 连接指向

  • 占用较少空间,升级方便

模块(库)文件

查看二进制程序所依赖的库文件

ldd /PATH/TO/BINARY_FILE

#加载配置文件中指定的库文件
ldconfig 
#配置文件
/etc/ld.so.conf
/etc/ld.so.conf.d/*.conf

#缓存文件
/etc/ld.so.cache

软件包和包管理器

软件包介绍

开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在GNU/Linux上运行的软 件。用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一个管理工具 dpkg也就应运而生,可用来管理deb后缀的"包"文件。从而著名的“package”概念第一次出现在 GNU/Linux系统中,稍后Red Hat才开发自己的rpm包管理系统。

软件包中的文件分类

  • 二进制文件

  • 库文件

  • 配置文件

  • 帮助文件

利用 cpio工具查看包文件列表

rpm2cpio 包文件|cpio –itv #预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” #释放包内文件

程序包管理器

软件包管理器功能:

将编译好的应用程序的各组成文件打包一个或几个程序包文件,利用包管理器可以方便快捷地实现程序 包的安装、卸载、查询、升级和校验等管理操作

主流的程序包管理器:

  • 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.25.4.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
#httpd-2.4.37-41.module+el8.5.0+695+1fa8055e.x86_64.rpm
#nginx-1.14.1-9.module+el8.4.0+542+81547229.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以上的系统

常见的arch:

  • x86: i386, i486, i586, i686

  • x86_64: x64, x86_64, amd64

  • powerpc: ppc

  • 跟平台无关:noarch

分类和拆包

软件包为了管理和使用的便利,会将一个大的软件分类,放在不同的子包中。

包的分类

  • Application-VERSION-ARCH.rpm: 主包

  • Application-devel-VERSION-ARCH.rpm 开发子包

  • Application-utils-VERSION-ARHC.rpm 其它子包

  • Application-libs-VERSION-ARHC.rpm 其它子包

包的依赖

软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包,安装软 件包时,会因为缺少依赖的包,而导致安装包失败。

解决依赖包管理工具:

  • yum:rpm包管理器的前端工具

  • dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yum

  • apt:deb包管理器前端工具

  • zypper:suse上的rpm前端管理工具

程序包管理器相关文件

包文件组成 (每个包独有)

  • 包内的文件

  • 元数据,如:包的名称,版本,依赖性,描述等

  • 可能会有包安装或卸载时运行的脚本

数据库(公共):/var/lib/rpm

  • 程序包名称及版本

  • 依赖关系

  • 功能说明

  • 包安装后生成的各文件路径及校验码信息

包管理器rpm

CentOS系统上使用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 ...

升级注意项:

  • 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核

  • 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老 版本的配置文件,而把旧版本文件重命名(FILENAME.rpmnew)后保留

包查询

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 -evh

注意:当包卸载时,对应的配置文件不会删除(前提是该文件被改动过), 以FILENAME.rpmsave形式保 留

包校验

在安装包时,系统也会检查包的来源是否是合法的

检查包的完整性和签名

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)

#如果占位符是 .   则表示该处与安装时没有任何改变

#示例
#安装之后没有修改任何文件
[root@rocky86 v]# rpm -V vsftpd
[root@rocky86 v]# echo $?
0
#安装之后修改了配置文件
[root@rocky86 v]# rpm -V nginx
S.5....T. c /etc/nginx/nginx.conf
[root@rocky86 v]# echo $?
1

数据库

rpm包安装时生成的信息,都放在rpm数据库中

[root@rocky86 v]# ll /var/lib/rpm
total 144016
-rw-r--r--. 1 root root   5218304 Jul 27 16:11 Basenames
-rw-r--r--. 1 root root     16384 Jul 20 16:09 Conflictname
-rw-r--r--  1 root root    286720 Jul 27 16:21 __db.001
......

可以重建数据库

rpm {--initdb|--rebuilddb} 

initdb #初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作
rebuilddb #重建已安装的包头的数据库索引目录

包更新日志

rpm -q --changelog packageName

yum和dnf

CentOS使用 yum, dnf 解决 rpm 的包依赖关系

YUM: Yellowdog Update Modififier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定 位软件包,up2date的替代工具

CentOS 8 用dnf 代替了yum ,不过保留了和yum的兼容性,配置也是通用的

yum/dnf 工作原理

yum/dnf 是基于C/S 模式

  • yum 服务器存放rpm包和相关包的元数据库

  • yum 客户端访问yum服务器进行安装或查询等

yum 实现过程

先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装包时,会自动下载 repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。

yum客户端配置

yum客户端配置文件

/etc/yum.conf 				#为所有仓库提供公共配置(一般不进行更改)
/etc/yum.repos.d/*.repo 	#为每个仓库的提供配置文件

获得帮助

man 5 yum.conf

公共配置

[root@rocky86 ~]# cat /etc/yum.conf 
[main]
gpgcheck=1 							#安装包前要做包的合法和完整性校验
installonly_limit=3 				#同时可以安装3个包,最小值为2,如设为0或1,为不限制
clean_requirements_on_remove=True 	#删除包时,是否将不再使用的包删除
best=True 							#升级时,自动选择安装最新版,即使缺少包的依赖
skip_if_unavailable=False 			#跳过不可用的

repo仓库配置文件指向的定义

[repositoryID] 
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
metadata_expire=6h 						#rocky-9中新增配置,metadata 过期时间
countme=1 								#rocky-9中新增配置,默认值false,附加在mirrorlist之后,便于仓库收集客户端信息

baseurl 有多种写法,支持多种协议

baseurl=file:///cdrom/AppStream/
baseurl=https://mirrors.aliyun.com/rockylinux/8.6/AppStream/x86_64/os/
baseurl=http://mirrors.aliyun.com/rockylinux/8.6/AppStream/x86_64/os/
baseurl=ftp://10.0.0.159/

#常见变量
$arch 		#CPU架构 aarch64|i586|i686|x86_64
$basearch 	#系统基本体系结构i386|x86_64
$releasever #系统版本

#带变量的写法
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?
arch=$basearch&repo=BaseOS-$releasever

#替换后的值
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=x86_64&repo=BaseOS-8

注意:yum仓库指向的路径一定必须是repodata目录所在目录

Rocky8.6上配置aliyun的repo源

[root@rocky86 yum.repos.d]# cat aliyun-baseos.repo 
[aliyun-baseos]
name=aliyun baseos
baseurl=https://mirrors.aliyun.com/rockylinux/8.6/BaseOS/x86_64/os/
gpgcheck=0
yum-config-manager

安装

该命令来自 yum-utils 包

[root@rocky86 yum.repos.d]# rpm -qf `which yum-config-manager `
yum-utils-4.0.21-11.el8.noarch

#常用选项
--add-repo=URL #添加repo源
--disable repoid #禁用源
--enable repoid #启用源

yum命令

yum命令的用法

yum [options] COMMAND

#常用选项
-c file|--config file 		#指定配置文件,默认使用/etc/yum.conf
-v|--verbose 				#显示详细信息
-b|--best 					#尝试在可用包中寻找最匹配的版本
-y|--assumeyes 				#自动回答为 yes
--nogpgcheck 				#不进行包校验
--repo repoid|--repoid repoid #指定repo源
--enablerepo repoid 		#临时启用repo源,可用通配符
--disablerepo repoid 		#临时禁用repo源,可用通配符
--nodocs             		#不安装文档
--skip-broken 				#跳过有问题的包
--enable 					#启用源,配合 configmanager
--disable 					#禁用源,配合 configmanager
-x package|--exclude package|--excludepkgs package #排除指定包,可用通配符
--downloadonly 				#只下载,不安装


#常用子命令
autoremove               	#卸载包,同时卸载依赖
check-update             	#检查可用更新
clean                     	#清除本地缓存
downgrade                 	#包降级
group                     	#包组相关
help                     	#显示帮助信息
history                   	#显示history
info                     	#显示包相关信息
install                   	#包安装
list                     	#列出所有包
makecache                 	#重建缓存
reinstall                 	#重装
remove                   	#卸载
repolist                 	#显示或解析repo源
search                   	#包搜索,包括包名和描述
显示仓库列表

格式:

yum repolist [options]

#常用选项
-v|--verbose 					#显示详细信息
--repo repoid|--repoid repoid 	#指定repo源
--all 							#显示所有源
--enabled 						#所有enabled状态的源,默认项
--disabled 						#所有disabled 的源

#特别提醒
#yum repolist enabled 等价于 yum repolist --enabled
#但是
#yum repolist --enabled 可以写成 yum --enabled repolist
#yum repolist enabled 不能写成   yum enabled repolist
#要理解哪些是子命令,哪些是选项,哪些是参数
显示程序包

格式:

yum list [options] [PACKAGE [PACKAGE ...]

#常用选项
--all #显示所有包,包括己安装的和repo源中的可用包
--available #所有可用包 
--installed #所有己安装的包 
--extras #所有额外包
--updates #所有可更新的包

#上述选项可以替换成对应的 all,installed 这种子命令,但要注意位置

--showduplicates #相同的包,显示所有版本
安装程序包
yum install [options] PACKAGE [...]
yum reinstall [options] PACKAGE [...]

#常用选项
--installroot path 		#指定安装目录
--downloadonly 			#只下载,不安装
--downloaddir path|--destdir path #指定下载目录,如果下载目录不存在,则自动创建
卸载程序包
yum remove [options] PACKAGE [...]
yum erase [options] PACKAGE [...]
升级和降级
yum update [options] PACKAGE [...] 		#升级
yum downgrade [options] PACKAGE [...] 	#降级
yum check-update 						#检查可用升级
查询
yum info [options] PACKAGE [...] 	#查看程序包的 information 信息
yum provides [options] PROVIDE 		#查看文件是由哪个包提供  
yum search [options] KEYWORD 		#根据关健字搜索,范围包括包名和描述信息
yum deplist [options] PACKAGE [...] #查询包的依赖
仓库缓存

缓存目录为 /var/cache/dnf/ ( /var/cache/yum/ )

yum clean [options] {metadata,packages,dbcache,expire-cache,all} 	#清空缓存
yum makecache 														#构建缓存
查看yum事务历史

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条记录
安装及升级本地程序包
yum localinstall|install [options] rpmfile1 [...] 	#安装本地RPM包
yum localupdate|update [options] rpmfile1 [...] 	#使用本地RPM包升级
包组管理的相关命令
yum grouplist [options] 				#列出所有包组
yum groupinstall [options] group1 [...] #包组安装
yum groupupdate [options] group1 [...] 	#包组升级
yum groupremove [options] group1 [...] 	#包组卸载
yum groupinfo [options] group1 [...] 	#包组查询
yum Troubleshooting

故障排错:

yum 和 dnf 失败最主要原因解决方法
yum的配置文件格式或路径错误检查/etc/yum.repos.d/*.repo文件格式
yum cacheyum clean all
网络不通网卡配置

Ubuntu 软件管理

Debian 软件包通常为预编译的二进制格式的扩展名“.deb”,类似 rpm 文件,因此安装快速,无需编译 软件。包文件包括特定功能或软件所必需的文件、元数据和指令

  • dpkg:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可 以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项

  • apt:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基 于客户/服务器架构(c/s)

rhel 系列与 debian系列包管理对比

操作系统包文件后缀本地包管理器网络包管理器网络包管理工作模式配置文件
rhelrpmrpmyum/dnfC/S/etc/yum.repos.d/*.repo
debiandebdpkgaptC/S/etc/apt/sources.list

APT 工作原理

在服务器上先复制所有DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包头(Header)信 息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一旦 APT 服务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。

客户端在进行安装或升级时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载 到客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压 缩文件后,会将其解压置放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的 时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装 或是可以升级的。

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

apt 命令用法

apt命令被取代的命令命令的功能
apt installapt-get install安装软件包
apt removeapt-get remove移除软件包
apt purgeapt-get purge移除软件包及配置文件
apt updateapt-get update刷新存储库索引
apt upgradeapt-get upgrade升级所有可升级的软件包
apt autoremoveapt-get autoremove自动删除不需要的包
apt full-upgradeapt-get dist-upgrade在升级软件包时自动处理依赖关系
apt searchapt-cache search搜索应用程序
apt showapt-cache show显示安装细节
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 	#编辑软件源信息文件
编辑源
root@ubuntu22:~# apt edit-sources
root@ubuntu22:~# vim /etc/apt/sources.list
配置文件格式说明
deb URL section1 section2

#字段说明
deb 				#固定开头,表示是二进制包的仓库,如果deb-src开头,表示是源码库
URL 				#库所在的地址,可以是网络地址,也可以是本地镜像地址
section1 			#Ubuntu版本的代号,可用 lsb_release -sc 命令查看,也可以用 cat 
/etc/os-release
section2 		   #软件分类,main完全自由软件 restricted不完全自由的软件,universe社区支持的软件,multiverse非自由软件
section1 			#主仓
section1-backports 	#后备仓,该仓中的软件当前版本不一定支持
section1-security 	#修复仓,主要用来打补丁,有重大漏洞,需要在当前版本中修复时,会放此仓
section1-updates 	#非安全性更新仓,不影响系统安全的小版本迭代放此仓
section1-proposed 	#预更新仓,可理解为新版软件的测试放在此仓,测试一段时间后会移动到 updates仓或security仓,非专业人士勿用

在ubuntu库中,有两个重要目录,分别是dists和 pool

dists 目录中存放的是该源仓库中的元数据,包括软件包的名称,适用的架构平台,版本号,依赖关系等

pool 目录中存放的是具体包文件

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值