ubuntu软件包管理

1、Linux软件包按封装类型

Linux软件包按封装类型分为3类:

  • Debian,其文件扩展名为“.deb”
    发行版代表:Debian/Ubuntu,
    软件管理机制:DPKG, 使用指令:dpkg;
    在线升级机制:apt-get 或新工具 apt。
  • Red Hat, 其文件扩展名为“.rpm”
    发行版代表:Red Hat/Fedora,
    软件管理机制:RPM, 使用指令:rpm/rpmbuild;
    在线升级机制:yum。
  • Tarball,其扩展名有“.tar.gz”、“.tar.bz2”或“TGZ”
    源码安装,执行makefile文件,使用gcc将源码文件编译成可执行的二进制文件。

2、第一类:debian包和dpkg

2.1、debian包

  我们在Linux环境下安装软件时,最简单的方法是从网上下载这个二进制程序文件,放到Linux系统中的默认路径下面就可以了。
  但是有些程序是采用动态链接编译的,运行时需要依赖一些动态共享库,因此在 Debian 和 Ubuntu 环境下,我们将二进制程序文件、动态链接库、软件文档说明、安装信息、甚至有一些自动安装的脚本等文件以deb格式压缩为xxx.deb的压缩包。

2.2、dpdk工具

dpkg是一个底层的本地软件包管理系统,主要用于对已下载到本地和已安装的软件包(xxx.deb)进行管理,具体使用命令如下:

dpkg -i package.deb     	# 安装包,如果安装时遇到了软件依赖问题,可以用apt-get -f install解决依赖问题,再考虑信赖问题。
dpkg -r package			    # 删除包,不是完全的卸载,它的配置文件还存在。
dpkg -P package      	    # 删除包(包括配置文件)查看和配置已安装软件包的信息
dpkg -L package             # 列出与该包关联的文件,软件包安装的文件及目录
dpkg -l package       	    # 列出当前已安装的包的简单信息,包括名字,版本,架构,简单描述。 dpkg -l \*dpkg*
dpkg -s package            # 查看指定已安装软件的状态信息
dpkg --configure package   # 配置包
dpkg -S keyword            # 查询系统中某个文件属于哪个软件包. (类似于rpm -qf)解压xxx.deb软件包
dpkg -c package.deb        # 列出deb包的内容
dpkg --unpack package.deb  # 解开deb包的内容,但不配置安装

3、软件源/软件仓库

3.1、软件源

  因为每个人都可以编译、制作deb包、并随意发布到网上,这就很容易造成混乱,甚至有些包还有可能是一个病毒软件。
  因此Ubuntu系统采用一个软件仓库来管理这些deb软件包,把这些包放到一个官方的网站服务器上,用户使用apt命令安装软件时,只能到这个服务器上下载软件。这些服务器我们也称为软件源 (repository) 或者简称为“源”。
  考虑到全球各个地方的网络环境差异,往往会在全球各地同时配置几个镜像服务器,这样全球各地的Ubuntu用户都可以根据网络状况到最合适的服务器上去下载和安装deb软件包了。
主要的软件仓库有:Main、Restricted、Universe、Multiverse这4个

Main:包含Ubuntu官方支持的自由软件。
Restricted:包含Ubuntu官方支持的非自由软件,如硬件驱动程序。
Universe:包含社区支持的自由软件。
Multiverse:包含社区支持的非自由软件。

官方源或其镜像源(这个是不需要密钥的)地址保存文件:
/etc/apt/source.list
第三方源地址保存文件:
*/etc/apt/source.list.d文件夹下的所有 .list 文件

3.2、软件源资源索引

  软件源配置文件只是告知Ubuntu系统可以访问的镜像站点地址,但那些镜像站点具体都拥有什么软件资源并不清楚。若每安装一个软件包,就在服务器上寻找一遍,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。
  apt-get update命令扫描 /etc/apt/sources.list 文件记录的源服务器,自动连网寻找每个源服务器对应的Packages/Sources/Release列表文件,将服务器所具有软件包资的索引文件下载更新到本地。
存放在本地的/var/lib/apt/lists/目录下。

4、apt-get 工作原理: dpkg + 软件源

主要解决:软件包的下载安装,在线升级,软件安装时的依赖问题。

4.1、apt-get使用的关键目录

/* 文件的内容是软件包的描述信息,包括详细的软件包信息,包括软件版本、软件依赖的包等。
该软件包括当前系统所使用的所有软件包,其中包括当前系统中已安装的和未安装的软件包。
 */
/var/lib/dpkg/available
/* 目录是在用 apt-get install 安装软件时,软件包的临时存放路径 */
/var/cache/apt/archives

/* 存放的是软件源站点 */
/etc/apt/sources.list
/etc/apt/source.list.d文件夹下的所有 *.list 文件

/* 使用apt-get update命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录 */
/var/lib/apt/lists

4.2、apt-get instal下载软件包流程

大体分为4步:apt-get命令维护软件时,会自动识别并下载相应的依赖软件。

  1. 扫描本地存放的软件包更新列表(由“apt-get update”命令刷新更新列表,也就是/var/lib/apt/lists/),找到最新版本的软件包;
  2. 进行软件包依赖关系检查找到支持该软件正常运行的所有软件包;/var/lib/dpkg/available 文件记录了当前系统已安装和未安装的软件包信息,包括依赖;或者使用 apt-cache depends package 查看此软件包的依赖信息。
  3. 从软件源所指 的镜像站点中,下载相关软件包(包含所依赖的软件包),并存放在/var/cache/apt/archive;
  4. 使用dpkg来解压软件包,并自动完成应用程序的安装和配置。

4.3、如何管理软件版本

  1. 使用“apt-getupdate”命令刷新软件源,更新软件源的资源列表,获得软件的最新版本信息,存放在本地的/var/lib/apt/lists/目录中。
  2. 检查系统的软件包列表,这个列表包含了所有已安装的软件包及其相关信息,如软件包的名称、版本、依赖关系等。
  3. apt-get会对本地的软件包列表和服务器上的最新软件包列表进行比较,找出需要更新的软件包。
  4. 对于需要更新的软件包,apt-get会检查它们的依赖关系,并按照依赖关系的顺序逐个下载和安装。

apt-get upgrade更新时忽略指定包

 // 使用这个命令可以将指定的包的版本hold住,这样在更新的时候就会忽略掉这个包。 
 apt-mark hold packagename		  
 // 将 hold 替换为 unhold 就可以取消对这个包版本的锁定了。 
 apt-mark unhold packagename

4.4下载软件包指定版本

  1. 查询指定软件的版本
    通过网站搜索 https://packages.ubuntu.com/

  2. 使用 apt-cache madison 列出软件的所有来源

$ apt-cache madison vim
       vim | 2:8.0.1453-1ubuntu1.9 | http://archive.ubuntu.com/ubuntu bionic-updates/main amd
       vim | 2:8.0.1453-1ubuntu1.9 | http://security.ubuntu.com/ubuntu bionic-security/main a
       vim | 2:8.0.1453-1ubuntu1 | http://archive.ubuntu.com/ubuntu bionic/main amd64 Package
  1. 下载指定版本软件
apt-get install vim=2:8.0.1453-1ubuntu1.9

4.5、apt-get和dpkg的区别

dpkg:用来安装.deb文件时,不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件,可以用于安装本地的deb文件。
apt-get:会解决和安装模块的依赖问题,并会咨询软件仓库,但不会安装本地的deb文件,apt-get是建立在dpkg之上的软件管理工具。

5、apt-get 常用命令

5.1、apt-cache:用于查询软件包信息

  1. apt-cache search package    #搜索包
  2. apt-cache show package   #获取包的相关信息,如说明,大小,版本。
  3. apt-cache depends package #了解使用依赖
    apt-cache rdepends package #查看该包被哪些包依赖

5.2、apt-get:用于管理软件包,包括安装、卸载、升级等操作

apt-get rdepends package				 /* 查看该包被哪些包依赖 */
sudo apt-get install package 			 /* 安装包 */
sudo apt-get install package=version   	 /* 安装制定版本的包 */
sudo apt-get install package --reinstall /* 重新安装包 */
sudo apt-get -f install 				 /* 修复安装(你更新完源之后,如果APT还不能自行解决依赖关系,就可以执行一下这个命令) */	
sudo apt-get source package 			 /* 下载该包的源代码 */
sudo apt-get remove package 			 /* 删除包 */
sudo apt-get remove package --purge 	 /* 删除包,包括删除配置文件等 */
sudo apt-get update 					 /* 更新apt软件源数据库 */
sudo apt-get upgrade 					 /* 更新以安装的包 */
sudo apt-get dist-upgrade  				 /* 升级系统 */
sudo apt-get dselect-upgrade 			 /* #使用dselect升级 */
sudo apt-get build-dep package 			 /* #安装相关的编译环境 */
sudo apt-get clean & sudo apt-get autoclean /* #清理无用的包 */
sudo apt-get check   						/* #检查是否有损坏的依赖 */
sudo apt-get install --download-only XXXX	/* #使用命令下载Vim包到/var/cache/apt/archives目录中,而不安装它们 */
sudo dpkg -i XXXX							/* #转到缓存文件夹/var/cache/apt/archives,并安装 */	

6、安装来自第三方软件源中的软件

6.1、使用 add-apt-repository 工具添加三方源

~# apt-get install python-software-properties #Ubuntu12.04以下
~# apt-get install software-properties-common #Ubuntu12.10版本以上
例如,要添加Node.js的PPA源,可以使用以下命令: sudo add-apt-repository ppa:用户名/仓库名
sudo add-apt-repository ppa:nodejs/ppa
sudo apt-get update
sudo apt-get install -y nodejs

6.2、手动添加三方源

在 /etc/apt/source.list.d/ 目录下新建 xxx.list 文件,并向文件写入第三方软件源。
sudo apt-get update 更新apt软件源数据库
sudo apt-get install -y package 下载安装软件包

6.3、获取第三方软件的软件包 xxx.deb ,使用 dpkg -i 安装程序

6.4、通过第三方软件源码,tarball 包 编译并安装程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值