12.软件管理

软件包管理器功能:

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

主流的程序包管理器:

redhat:rpm文件, rpm 包管理器,( rpm:Redhat Package Manager )

debian:deb文件, dpkg 包管理器

1、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 ...

注意:当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
★ 包校验
软件在安装时,会将包里的每个文件的元数据,如:大小,权限,所有者,时间等记录下来,
可以用来检查包中的文件是否和当初安装时有所变化

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)

如果占位符是 .   则表示该处与安装时没有任何改变
2、yum客户端配置 (repo仓库配置)

yum/dnf 是基于C/S 模式 :

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

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

yum 实现过程 :

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

★ yum客户端配置文件
/etc/yum.conf 				#为所有仓库提供公共配置
/etc/yum.repos.d/*.repo 	#为每个仓库的提供配置文件

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

★ 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

★ repo仓库配置
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#ls
[root@localhost yum.repos.d]#cp -r ../yum.repos.d/ /tmp/
[root@localhost yum.repos.d]#ls /tmp/yum.repos.d/
[root@localhost yum.repos.d]#rm -rf *
[root@localhost yum.repos.d]#ls
[root@localhost yum.repos.d]#yum repolist 
No repositories available

★ 配置南京大学的appstream.repo
[root@localhost yum.repos.d]#vim nju-appstream.repo

[nju-appstream]
name=nju appstream
baseurl=https://mirrors.nju.edu.cn/rocky/8.9/AppStream/x86_64/os/
        https://mirrors.aliyun.com/rockylinux/8.9/AppStream/x86_64/os/
gpgcheck=0


[root@localhost yum.repos.d]#yum repolist 
repo id                             repo name
nju-appstream                       nju appstream
[root@localhost yum.repos.d]#yum repolist -v

★ 配置本地baseos.repo
[root@localhost yum.repos.d]#ls /mnt/
hgfs
[root@localhost yum.repos.d]#mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@localhost yum.repos.d]#ls /mnt/
AppStream  EFI     isolinux  media.repo
BaseOS     images  LICENSE   TRANS.TBL
[root@localhost yum.repos.d]#ls /mnt/BaseOS/  (路径指到repodata)
Packages  repodata
[root@localhost yum.repos.d]#vim cdrom-baseos.repo

[cdrom-baseos]
name=cdrom baseos
baseurl=https://mirrors.nju.edu.cn/rocky/8.9/BaseOS/x86_64/os/
        file:///mnt/BaseOS/
        https://mirrors.aliyun.com/rockylinux/8.9/BaseOS/x86_64/os/
gpgcheck=0


[root@localhost yum.repos.d]#yum repolist 
repo id                             repo name
cdrom-baseos                        cdrom baseos
nju-appstream                       nju appstream
[root@localhost yum.repos.d]#yum repolist -v --repoid=cdrom-baseos

[root@localhost yum.repos.d]#ls
cdrom-baseos.repo  nju-appstream.repo

★ 配置aliyun extras.repo 
[root@localhost yum.repos.d]#vim aliyun-extras.repo 

[aliyun-extras]
name=aliyun extras
baseurl=https://mirrors.aliyun.com/rockylinux/8.9/extras/x86_64/os/
        https://mirrors.nju.edu.cn/rocky/8.9/extras/x86_64/os/
gpgcheck=0

[root@localhost yum.repos.d]#yum repolist 
repo id                             repo name
cdrom-baseos                        cdrom baseos
nju-appstream                       nju appstream
nju-extras                          nju extras
[root@localhost yum.repos.d]#yum repolist -v --repoid=nju-extras

[root@localhost yum.repos.d]#yum repolist --all
repo id                         repo name                        status
cdrom-baseos                    cdrom baseos                     enabled
nju-appstream                   nju appstream                    enabled
nju-extras                      nju extras                       enabled
★ 使用yum-config-manager配置repo

[root@localhost yum.repos.d]#yum -y install yum-utils

添加epel源
[root@rocky86 ~]# yum-config-manager --add-repo=https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
Adding repo from: https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/

查看
[root@rocky86 yum.repos.d]# cat mirrors.nju.edu.cn_epel_8_Everything_x86_64_.repo 
[mirrors.nju.edu.cn_epel_8_Everything_x86_64_]
name=created by dnf config-manager from https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
baseurl=https://mirrors.nju.edu.cn/epel/8/Everything/x86_64/
enabled=1

禁用源
[root@rocky86 yum.repos.d]# yum-config-manager --disable mirrors.nju.edu.cn_epel_8_Everything_x86_64_

启用源
[root@rocky86 yum.repos.d]# yum-config-manager --enable mirrors.nju.edu.cn_epel_8_Everything_x86_64_
3、实现私用 yum仓库

1.在 yum server 机上搭建 web 服务,保证其它机器能能过web服务访问本机

2.在 yum server 机上搭建 yum 仓服务

3.在 client 机上将yum 的 repos 源指向 yum server 机

★ 服务端配置
[root@localhost ~]#yum -y install httpd
[root@localhost ~]#systemctl stop firewalld.service  (关闭防火墙)
[root@localhost ~]#systemctl enable --now httpd.service (开启httpd服务)
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@localhost ~]#cd /var/www/html/
[root@localhost html]#ls
[root@localhost html]#vim index.html

<style type="text/css">

html{padding:25px}
</style>

<a href="./AppStream">AppStream</a><br />

<a href="./BaseOS">BaseOS</a><br />

<a href="./extras">extras</a><br />

★ 将本地光盘中的内容CP到web目录中,给客户端使用
[root@localhost html]#ls
index.html
[root@localhost html]#mkdir AppStream
[root@localhost html]#mkdir BaseOS
[root@localhost html]#ls
AppStream  BaseOS  index.html
[root@localhost html]#cp -r /mnt/AppStream/* ./AppStream/
[root@localhost html]#cp -r /mnt/BaseOS/* ./BaseOS/

★ 将阿里云的extras 源的相关数据下载到本地,给客户端使用
[root@localhost html]#vim /etc/yum.repos.d/aliyun-extras.repo

[aliyun-extras]
name=aliyun extras
baseurl=https://mirrors.aliyun.com/rockylinux/8.9/extras/x86_64/os/
gpgcheck=0

[root@localhost html]#yum reposync --repoid=aliyun-extras --download-metadata -p /var/www/html/
[root@localhost html]#mv aliyun-extras/ extras
★ 客户端配置
[/dev/pts/0 15:33:04 root@localhost yum.repos.d]#vim private-appstream.repo

[private-appstream]
name=private appstream
baseurl=http://10.0.0.102/AppStream/
gpgcheck=0
[/dev/pts/0 15:36:37 root@localhost yum.repos.d]#yum repolist --repoid=private-appstream -v

[/dev/pts/0 14:21:24 root@localhost yum.repos.d]#vim private-baseos.repo
[private-baseos]
name=private baseos
baseurl=http://10.0.0.102/BaseOS/
gpgcheck=0           

[/dev/pts/0 14:29:18 root@localhost yum.repos.d]#yum repolist --repoid=private-baseos -v

[/dev/pts/0 15:43:45 root@localhost yum.repos.d]#vim private-extras.repo

[private-extras]
name=private extras
baseurl=http://10.0.0.102/extras/
gpgcheck=0 

[/dev/pts/0 15:45:18 root@localhost yum.repos.d]#yum repolist --repoid=private-extras -v
4、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 											#启用源,配合 config-manager
--disable 											#禁用源,配合 config-manager
-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状态的源,默认项(同 yum repolist)
--disabled 						#所有disabled 的源
★ 显示程序包
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 														#构建缓存

5、dnf

DNF,即DaNdiFied,是新一代的RPM软件包管理器。DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户 体验,内存占用,依赖分析,运行速度等

yum程序在安装的过程中,如果被终止,下次再执行将无法解决依赖,DNF可解决此问题

★ 配置文件
/etc/dnf/dnf.conf

★ 仓库文件
/etc/yum.repos.d/ *.repo

★ 日志
/var/log/dnf.rpm.log 
/var/log/dnf.log

★ 使用帮助
man dnf
★ dnf 用法与yum一致

dnf [options] <command> [<arguments>...] 
dnf --version
dnf repolist 
dnf reposync 
dnf install httpd 
dnf remove httpd 
dnf clean all 
dnf makecache 
dnf list installed 
dnf list available 
dnf search nano 
dnf history undo 1
6、Ubuntu 软件管理

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

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

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

7、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
8、apt
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 	#编辑软件源信息文件
9、编译安装

C 语言源代码编译安装过程

利用编译工具,通常只需要三个大的步骤

./configure

  • (1) 通过选项传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及Makefile.in文 件生成Makefile
  • (2) 检查依赖到的外部环境,如依赖的软件包

make 根据Makefile文件,会检测依赖的环境,进行构建应用程序

make install 复制文件到相应路径

注意:安装前可以通过查看README,INSTALL获取帮助

编译安装准备

准备:安装相关的依赖包

  • 开发工具:make, gcc (c/c++编译器GNU C Complier)
  • 开发环境:开发库(glibc:标准库),头文件,可安装开发包组 Development Tools
  • 软件相关依赖包

注意:通常被编译操作依赖的程序包,需要安装此程序包的"开发"组件,其包名一般类似于name-devel-VERSION

编译安装

# 安装相关的依赖包
[root@Rocky89 ~]#yum -y install wget tar gcc openssl-devel pcre-devel make

# 下载源码并解压
[root@Rocky89 ~]#wget https://nginx.org/download/nginx-1.24.0.tar.gz
[root@Rocky89 ~]#tar -xvf nginx-1.24.0.tar.gz -C /usr/local/src/

# 进入解压缩的目录,README和INSTALL
[root@Rocky89 src]#cd /usr/local/src/nginx-1.24.0

# 第一步:运行 configure 脚本,生成 Makefile 文件
[root@Rocky89 nginx-1.24.0]#./configure --prefix=/apps/nginx

# 第二步:make
[root@Rocky89 nginx-1.24.0]#make -j 2

# 第三步:make install
[root@Rocky89 nginx-1.24.0]#make install

相关依赖包

注意:通常被编译操作依赖的程序包,需要安装此程序包的"开发"组件,其包名一般类似于name-devel-VERSION

编译安装

# 安装相关的依赖包
[root@Rocky89 ~]#yum -y install wget tar gcc openssl-devel pcre-devel make

# 下载源码并解压
[root@Rocky89 ~]#wget https://nginx.org/download/nginx-1.24.0.tar.gz
[root@Rocky89 ~]#tar -xvf nginx-1.24.0.tar.gz -C /usr/local/src/

# 进入解压缩的目录,README和INSTALL
[root@Rocky89 src]#cd /usr/local/src/nginx-1.24.0

# 第一步:运行 configure 脚本,生成 Makefile 文件
[root@Rocky89 nginx-1.24.0]#./configure --prefix=/apps/nginx

# 第二步:make
[root@Rocky89 nginx-1.24.0]#make -j 2

# 第三步:make install
[root@Rocky89 nginx-1.24.0]#make install
  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值