Linux 软件管理
文章目录
- dpkg软件包管理工具
- APT软件包管理工具
- apt-get命令
- apt-cache
Linux操作系统主要支持RPM和Deb两种软件包管理工具。
RPM(Redhat Package Manager)是一种用于互联网下载包的打包及安装工具。
其原始设计理念是开放的,不仅可以在Redhat平台上使用,也可以在SUSE上使用。
dpkg软件包管理工具
dpkg创建于1993年,是最早的Deb包管理工具,可用于安装、编译、卸载和查询Deb软件包。
dpkg不能从镜像站获取软件包,主要用于对已下载到本地和已安装的软件包进行管理。
dpkg在安装软件包时,无法检查软件包的依赖关系,
因此在对一个软件的依赖关系不清楚的情况下,使用dpkg对用户的开发工作不太友好。
为了帮助用户获取软件包(获取存在依赖关系的软件包),则出现了更高级的APT软件包管理工具。
dpkg软件包管理命令的语法格式如下所示。
dpkg [选项] <package>
选项 | 功能 |
---|---|
-i | 安装一个已经下载至本地的.deb 软件包 |
-s | 检测软件包的安装状态 |
-r | 移除一个已安装成功的软件包 |
-L | 列出安装的软件包清单 |
-P | 移除已经安装的软件包以及配置文件 |
如果已经获取到Deb软件包,并且确定需要安装该软件包时,就可以使用命令“dpkg –i”进行安装,
该命令并不能自动解决Deb软件包的依赖性问题。
选择已经下载的本地安装包进行测试。
dpkg -i *.deb # 安装软件
用户在不确定某一软件包是否安装的情况下,
为了避免出现软件包重复安装或者未安装导致系统服务无法使用,
可以使用命令“dpkg -s”检测软件包的安装状态。
dpkg -s gcc # 检测软件包的安装状态
用户不再需要使用某个软件包时,可以考虑将其从系统中移除,从而减少磁盘空间的占用。
命令“dpkg -r”与“dpkg -P”都可以实现对软件包的卸载。
其中“dpkg -r”只卸载软件包安装到系统中的文件,但保留原有的配置文件,
如果重新安装该软件,仍然可以使用原有的配置;
命令“dpkg -P”删除软件的同时清除原有的配置文件。
上述两种方式在卸载文件时都不解决软件包的依赖性问题,只会显示相应的提示。
因此使用时需要慎重考虑依赖性问题,避免出现卸载失败,导致产生垃圾文件。
用户需要查询与某个系统功能相关的软件包是否安装,
但又不确定软件包的具体名字与信息时,可以使用命令“dpkg -l”进行查询,
其功能为查看当前系统中已经安装的所有软件包信息。
一般可以借助管道符号“|”进行分页的查询
sudo dpkg -l | less # 查看软件包信息
用户需要获取软件包安装到系统中的文件列表时,可以使用命令“dpkg -L”。
通俗地说,软件包安装到系统之后,其产生的各种配置文件可能会分布在系统的各个子目录中,
用户需要对某些配置文件进行重新设置时,即可通过此命令进行寻找。
sudo dpkg -L gcc # 查看软件配置文件的路径
软件包的命名规则:Filename_Version_Reversion_Architechure.deb
Filename - 代表软件包的名字;
Version - 代表软件版本;
Reversion - 代表修订版本;
Architechure - 代表体系结构。版本修订由系统开发者或软件创建人指定。
Linux操作系统为每一个软件包设置了优先级,用来作为软件包管理器进行安装或卸载的依据。
在Linux操作系统中,任何高优先级的软件包都不能依赖于低优先级的软件包。
试想如果一个用来维护整个系统运行的软件包却依赖于一个可选择安装的软件包,
那么被依赖的软件如果不安装,系统必然将无法运行。
使用命令“dpkg -l”除了可以显示已经安装的软件包以外,还可以显示软件包的状态,
这些状态记录了用户的安装行为。Ubuntu对软件包定义了两种状态。
(1)期望状态:用户希望某个软件包处于的状态。
(2)当前状态:用户操作软件包后的状态。
类别 | 定义 |
---|---|
required(必须) | 该级别软件包为保证系统正常运行所必须的 |
important(重要) | 该级别软件包实现系统底层功能,若缺少将会影响系统正常使用 |
standard(基本) | 该级别软件包是操作系统的标准件 |
optional(可选) | 该级别软件包是否安装不影响系统的正常运行 |
extra(额外) | 该级别软件包可能与其他高级别软件包存在冲突 |
类别 | 状态 | 状态符 | 描述 |
---|---|---|---|
期望状态 | 未知(unknown) | u | 用户对软件包的未定义具体的操作 |
期望状态 | 已安装(install) | i | 软件包已安装或升级 |
期望状态 | 删除(remove) | r | 软件包已删除,不删除配置文件 |
期望状态 | 清除(purge) | p | 用户期望完全删除软件包,包括配置文件 |
期望状态 | 保持(hold) | h | 用户希望软件包保持现有状态 |
期望状态 | 未安装(Not) | n | 软件包的描述信息已知,未在系统中安装 |
当前状态 | 已安装(installed) | i | 已完全安装配置了该软件包 |
当前状态 | 仅存配置(config - file) | c | 软件包已删除,配置文件依然保留 |
当前状态 | 仅解压缩(unpacked) | U | 已将软件包中的所有文件释放,但未执行安装和配置 |
当前状态 | 配置失败(Failed - config) | F | 尝试安装此软件,但由于错误没有完成安装 |
当前状态 | 不完全安装(Half - installed) | H | 已经开始提取后的配置工作,但由于错误没有完成安装 |
依赖关系 | 关系描述 |
---|---|
依赖(depends) | 运行软件包 A 必须安装软件包 B,可能还需要软件包 B 的特定版本 |
推荐(recommends) | 软件包 A 缺少的用户需要使用的功能可以由软件包 B 提供 |
建议(suggests) | 软件包 B 能够增强软件包 A 的功能 |
替换(replaces) | 软件包 B 安装的文件被软件包 A 的文件删除或覆盖 |
冲突(conflicts) | 如果系统中安装了软件包 B,则软件包 A 将无法运行 |
提供(provides) | 软件包 A 中包含了软件包 B 的所有文件和功能 |
APT软件包管理工具
APT(Advanced Packaging Tool)是一种快速、实用、高效的软件包管理工具。
当软件包更新时,能自动管理关联文件和维护已有的配置文件。
Ubuntu将所有的开发软件包存放在Internet上的镜像站点中,用户可以选择合适的镜像站点作为软件源,然后利用APT工具的帮助,完成对软件包的管理维护工作,包括从软件镜像站点获取相关软件包、安装升级软件包、自动检测软件包依赖关系等。
最常用的APT实用程序有apt-get、apt-cache等。
APT软件包管理工具不同于dpkg,其解决了一个重要的问题,就是软件卸载过程中的软件包的依赖性问题。
Ubuntu系统采用集中式的软件仓库机制,将各种类型的软件包存放在软件仓库中,然后将仓库置于各种镜像服务器中,并保持一致。对于用户而言,这些散布在互联网中的服务器就是软件源(Reposity),或者称为镜像源站点。服务器会定期上传软件包的最新版本,这样Ubuntu的用户就可以随时获取最新版本的软件包由于每个用户所处的网络环境不同,因此用户并不是随意地访问镜像站点。
Ubuntu系统使用软件源配置文件“/etc/apt/sources.list”列出最适合访问的镜像站点地址,从而保证用户可以有选择地访问。
软件源配置文件只是列出了Ubuntu系统可以访问的镜像站点地址,并没有明确镜像站点中的软件资源。
因此,安装软件包会导致查询整个服务器上的所有资源,工作效率是很低的。
于是就有必要为这些软件资源建立索引文件,以便于主机进行查询。
APT相关配置文件
(1)镜像站配置文件
“/etc/apt/sources.list”是APT镜像站配置文件,初始存放的是Ubuntu的官方镜像站点地址,用户从该地址获取所需的软件包资源。
(2)本地索引列表
“/var/lib/apt/lists”目录中存放的是APT本地软件包的索引文件。每一个索引文件与“/etc/apt/sources.list”文件中配置的每一个仓库相对应,并且列出相应软件仓库中每一个软件的最新版本信息。APT通过这些索引文件确定软件包的安装状态等信息。
(3)本地文件下载缓存
“/var/cache/apt/archives”目录是APT的本地缓存目录,用来保存最新下载的Deb软件包。
apt-get命令
在Ubuntu系统中,通常使用apt-get管理软件包。
在了解软件包名字的情况下,通过apt-get可以自动完成软件包的获取、更新、编译、卸载等,
并检测软件包的依赖关系。
apt-get会自动下载安装与原软件包具有依赖性关系的软件包,
但不会下载与原软件包存在推荐和建议关系的软件包。
需要注意的是,apt-get本身不具备管理软件功能,只提供一个软件包管理的命令行平台。
通过在该平台运行各种子命令,可完成具体的管理任务。
apt-get [子命令] [子选项] 软件包名
子命令 | 功能描述 |
---|---|
update | 下载更新软件包列表信息 |
upgrade | 将系统中所有软件包升级到最新版本 |
install | 下载所需安装包并安装配置 |
remove | 卸载软件包 |
autoremove | 将不满足依赖关系的软件包自动卸载 |
source | 下载源码包 |
build - dep | 为源码包构建编译环境 |
dist - upgrade | 发布版升级 |
dselect - upgrade | 根据 dselect 的选择来进行软件包升级 |
clean | 删除缓存区中所有已经下载的包文件 |
autoclean | 删除缓存区中老版本的已下载的包文件 |
check | 检查系统中依赖关系的完整性 |
子选项 | 选项描述 |
---|---|
-d | 仅下载软件包,不安装或解压 |
-f | 修复系统中存在的软件包依赖性问题 |
-m | 当出现缺少关联软件包时,仍试图继续进行 |
-q | 将输出作为日志保留,不获取命令执行进度 |
-purge | 与 remove 子命令一起使用,删除软件包以及配置文件(完全删除) |
-reinstall | 与 install 子命令一起使用,重新安装软件包 |
-b | 在下载完源码包后,编译生成相应的软件包 |
-s | 不做实际操作,只模拟命令执行结果 |
-y | 对执行过程中的所有询问都执行肯定的回答,不用手动输入回应 |
-u | 获取已升级的软件包列表 |
-h | 获取帮助信息 |
-v | 获取 apt-get 版本号 |
将表所示的子命令和子选项进行合理搭配即可实现不同的需求。
其中“apt-get check”与“apt-get install -f”通常组合使用,
即检查软件包依赖关系之后,进行依赖关系修复。
使用命令“apt-get update”可刷新软件源,并建立一个更新软件包列表。
具体而言,执行命令“apt-get update”会扫描软件源服务器,
并为该服务器的软件包资源建立索引文件,并保存在“/var/lib/apt/lists”目录中。
当用户需要安装、更新软件时,系统将根据这些索引文件,向服务器申请资源。
因此,在计算机空闲情况下,可经常使用“apt-get update”进行软件源刷新,
以便于用户获取或更新需要的软件服务。
用户在通过apt-get下载软件时,经常会遇到下载慢或卡顿停止的现象。
这与Ubuntu系统的默认镜像站点有很大关系,
一般情况下“/etc/apt/sources.list”中设置的站点为Ubuntu官方镜像站点,这会导致默认从国外下载软件。
针对上述情况,用户可选择将软件源更换为国内的镜像站点,这样软件下载速度会变得更快。
最好选择与自己所使用的Ubuntu版本一致的镜像源。
例如,输入“Ubuntu 16.04更新源”进行搜索,即可获取到网易云、阿里云、高等院校等各种开源镜像站。
更换镜像源的步骤如下所示。
(1)对镜像站点配置文件进行备份,避免出现修改失误导致文件损坏的情况。
(2)通过gedit编辑器打开配置文件,并将文件中的所有内容全部删除。
(3)将图中指示复制的部分,复制到配置文件中,保存退出。
(4)刷新软件源,获取服务器中软件资源并建立索引。如例所示。
linux@ubuntu:~$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.old # (1)
linux@ubuntu:~$ sudo gedit /etc/apt/sources.list # (2)
linux@ubuntu:~$ sudo apt-get update # (4)
使用命令“apt-get upgrade”即可将系统中所有软件包一次性升级到最新版
(如需获取软件包并安装,则使用“apt-get install”)。
此时系统将会扫描软件包更新列表(update刷新列表),找到最新版软件包;
然后检查软件包的依懒关系,找到支持该软件正常运行的其他所有软件包,并从镜像站点下载;
最后解压软件包,并自动完成安装与配置。
示例:下载安装XChat聊天室软件的过程
Ubuntu轻松上手:教你一招安装XChat,打造个性化聊天体验
软件包列表读取完成后,apt-get开始检查xchat软件包的依赖关系,
可以看到与xchat存在依赖关系的软件包有4个,
分别是tcl8.5、liblaunchpad-integration1、libsexy2、xchat-common。
选择继续执行后,开始下载软件包,全部下载结束后,软件包开始解压缩,
并按照依赖关系的先后顺序,依次完成安装与配置。
(1)不完全卸载:apt-get remove,删除一个软件包时,也会删除与该软件包有依赖关系的其他软件包。
(2)完全卸载:apt-get --purge remove,在卸载软件包文件的同时,删除该软件包所使用的配置文件。
linux@ubuntu:~$ sudo apt-get remove xchat
linux@ubuntu:~$ sudo apt-get --purge remove xchat
当已经安装的软件包出现损坏的情况需要修复,或者需要更新软件包中的文件到最新版本,
可以使用命令“apt-get --reinstall install”进行软件包的重新安装。
如果软件包在安装过程中产生故障导致安装中断,则可能会造成关联的软件包只安装了一部分。
此时可能会出现既不能重新安装也不能删除的情况。
如出现该情况,则可以使用“apt-get -f install”命令修复软件包依赖关系。
另外,也可以使用“apt-get check”检查依赖关系。
如果用户认为软件包缓存区中的文件没有任何价值,则可以选择将其删除。
命令“apt-get clean”用于清理整个软件包缓存区。
如果用户希望保留最新版本的软件包,只删除其余版本的软件包,则可以使用“apt-get autoclean”。
linux@ubuntu:~$ ls /var/cache/apt/archives
linux@ubuntu:~$ sudo apt-get autoclean
apt-cache
apt-cache是APT软件包管理工具的另一个工具集。
不同的子命令与子选项配合使用,可实现查询软件源和软件包的相关信息以及软件包依赖关系。
apt-cache命令的语法格式如下所示。
通过在该平台运行各种子命令,可完成具体的管理任务。
apt-cache [子选项] [子命令] 软件包名apt-cache stats # 查询数据源的统计信息
apt-cache search xchat # 通过关键字查询软件包信息
apt-cache show gcc # 用来获取指定软件包的详细信息
apt-cache dumpavail # 获取软件包信息
apt-cache showpkg # 获取软件包信息
apt-cache policy quota # 获取软件包当前的安装状态,确认软件包的版本
子选项 | 描述 |
---|---|
-p | 软件包缓存 |
-s | 源代码包的缓存 |
-q | 关闭进度获取 |
-i | 与 unmet 命令一起使用,获取重要的依赖关系 |
-c | 读取指定的配置文件 |
-h | 获取帮助信息 |
子命令 | 描述 |
---|---|
showpkg | 获取二进制软件包的常规描述符信息 |
showsrc | 获取源码包的详细描述信息 |
show | 获取二进制软件包的详细描述信息 |
stats | 获取软件源的基本统计信息 |
dump | 获取软件源的所有软件包的简要信息 |
dumpavail | 获取当前系统中已安装的所有软件包的描述信息 |
unmet | 获取所有未满足的依赖关系 |
search | 根据正则表达式检索软件包 |
depends | 获取该软件包的依赖信息 |
rdepends | 获取所有依赖于该软件包的软件包 |
pkgnames | 列出所有已安装软件包的名字 |
policy | 获取软件包当前的安装状态 |