在linux中软件管理一共有两种管理方法,即dpkg和apt,dpkg不能自己根据软件的所需安装全部的依赖,apt可以连接互联网进行软件包更新。
三个比较重要的文件
/etc/apt/sources.list 软件源的存放
/var/lib/apt.lists/* 本地的存放位置
/var/cache/apt/archives 缓存目录
本部分用到的命令如下
file +软件包 查询他的软件包的类型
dpkg 软件管理
dpkg + i <软件包> 安装软件包
dpkg + r <软件包> 删除软件包
dpkg + P <软件包> 彻底删除软件包
dpkg + L <软件包> 列出安装的软件包清单(用它可以找到这个软件包的安装位置)
dpkg + s <软件包> 展示软件包当前状态
一:deb软件包管理
1)软件包管理机制
-
Debian(Deb软件包)
-
将程序的二进制文件,配置文件,man/info文件打包在一个压缩包中,使用dpkg命令完成获取,安装,卸载,查询等操作。
-
-
Rpm
-
rpm命令,全称为Red Hat Package Manager,是用于管理Linux各项套件的程序。它最初是由Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎,逐渐受到其他发行版的采用。(但是有些Linux版本不支持这个就需要使用到sudo apt installl rpm下载)
-
-
APT 软件管理器
-
从Internet上的软件源下载最新的软件包元数据、二进制包或源代码包
-
利用下载到本地的软件包元数据,完成软件包的搜索和系统的更新
-
安装和卸载软件包时自动寻找最新版本,并自动解决软件的依赖关系
-
2)软件包类型
(1)二进制软件包(deb)。
(2)源码包(deb-src)编译,处理 核心区别就一个:一个能拿来直接用,一个需要自己编译。
file命令
file +软件包 查询他的软件包的类型
#软件包的命名
Filename_Version-Reversion_Architecture.deb
软件包名 软件版本 修订版本 体系架构
软件包管理工具(远程服务器)
类别 | 常用工具 | 描述 |
命令行 | dpkg,apt | 在命令行模式完成各项操作, |
文本窗口 | dselect,sptiude,tasksel | 在文本窗口中,使用窗口完成 |
图形界面 | synaptic | 类似与win的可交互性好 |
3)dpkg相关命令
dpkg - i <包名> 安装软件(第一个下划线前是软件名称)
dpkg - r <包名> 删除软件包
dpkg - P <包名> 移除软件包的配置文件
dpkg -L 列出安装的软件包清单(用它可以找到这个软件包的安装位置)
dpkg -s 显出软件包的安装状态
*dpkg和apt管理器有啥区别
-
dpkg没有考虑软件包依赖关系(没有网的情况下,需要自己先下载好,自己设立依赖关系)
-
apt +上互联网,可以把软件的全部依赖都可以装上,有网就好了。
二:APT软件包管理
1)APT工作原理
软件源:将各种各样的软件存放在软件仓库里面,再分别建立镜像服务器,我们通过调用镜像服务器就可以下载各种软件,这些就叫做软件源。(集中式软件仓库机制)
工作原理:
-
/etc/apt/sources.list 软件源仓库
-
列出能够访问的镜像地址,(但是安一个就全部找一遍效率比较低下)所以apt的作用就是管理这些软件资源,建立索引,便于我们的主机查询。(有点类似于哈希表查找)
所以这个时候就听出来了更换软件源(使用linux的第一步就是换源)
-
合适的软件源能够很快的下载文件,不合适的软件源就会出现下载失败等各种错误。
2)APT软件源的修改
根据对他维护人员的不同可以分为官方维护的开源软件,社区开源软件,官方维护不开源(商业化)软件,以及多元化等。
对于使用ubuntu系统来说,装好系统的第一步就应该是更换合适的软件源,才能够包子我们有一个合适的下载镜像。具体修改软件源如下所示。
修改软件源(每一次换新的)
-
打开软件源的存放文本文件
sudo vi /etc/apt.sources.list //打开这个文本文件
:wq保存之后
apt-get update //更新我们的索引
为什么要换源呢:
/var/lib/apt.lists/* 本地的存放位置
3)APT的常用指令
(1)apt子命令
-
语法:sudo apt-get +子命令
子命令 | 功能描述 |
update | 下载更新软件包 |
upgrade | 将系统的所有软件包升级到最新的版本 |
install | 下载所需的软件包并进行相关配置 |
remove | 卸载软件包 |
autoremove | 卸载不满足依赖的软件包 |
source | 下载源码包 |
build-dep | 为源码包构建编译环境 |
dist-upgrade | 发布版本升级 |
dselect-upgrade | 根据dselect选择进行软件包升级 |
clean | 删除缓存区中下载的包文件 |
autoclean | 删除缓存区老版本的已下载文件 |
check | 检查系统依赖关系的完整性 |
(2)软件依赖关系的破坏或者冲突解决
-
sudo apt-get check 检查软件包之间的依赖关系。
-
当软件正在下载的时候,突然断网,导致软件包只有部分安装,此时软件不能重装也不能卸载。
-
解决方案:使用sudo apt-get -f install 就会自动下载剩余的依赖文件。(他两是组合命令)
-
*但是他只会自动下载强依赖(depends),不会主动下载推荐(recommends)和建议(suggests)的软件包。
(3)apt三板斧 修复+下载+全部更新
sudo apt-get -f install
sudo apt-get update //下载更新软件包
sudo apt-get upgrade //所以软件包一次性升级
(4)使用apt来安装卸载
-
安装部分:
命令: sudo apt-get install +软件包名
sudo apt-get reinstall 重新安装(加一个re)
-
扫描本地的索引(软件源)sudo apt-get update
-
依赖关系检查,安装需要的依赖软件
-
从站点下载软件包+依赖
-
解压软件包,自动完成程序安装和配置
-
卸载部分
命令:sudo apt-get remove +软件包名
sudo apt-get purge remove 彻底卸载
-
清除缓冲区(ros开发中缓冲区过多会导致卡死)
命令:sudo apt-get clean+软件包名
sudo apt-get auto clean+软件包名 只保留最新版软件缓存
/var/cache/apt/archives 缓存目录
补充:rm指令也可以删除,但是需要明白具体路径。(否则就可能出现自己把电脑干崩溃掉)
(5)查询软件包的信息
-
获取详细信息show
命令:sudo apt-cache show
作用:获取软件包的详细信息包括,安装状态,版本,依赖关系。
-
查询安装状态
命令:sudo apt-cache policy (警察)
作用:查询软件包的安装状态(dpkg -s)和这个命令差不多
依赖冲突:
查询依赖那些软件包就是用
sudo apt-cache depends 查询自己依赖那些
sudo apt-cache rdepends查询自己被那些依赖