Linux 命令行与 shell 脚本编程大全 9 安装软件程序
2019-12-18 本文已影响0人
asing1elife
介绍 Linux 中能见到的各种包管理系统,以及可以用于安装、管理、删除软件的命令行工具
更多精彩
- 更多技术博客,请移步 IT人才终生实训与职业进阶平台 - 实训在线
导览
- 基于 Debian 的 Linux 使用 dpkg 作为 PMS 的核心工具
- 基于 Red Hat 的 Linux 使用 rpm 作为 PMS 的核心工具
-
dpkg 的用户交互命令是
aptitude
命令 -
rpm 的用户交互命令是
yum
命令,但还有urpm
和zypper
- 使用
yum list installed
命令可以查看当前系统已安装的软件包 - 使用
yum list packageName
命令可以查看当前系统已安装和可以安装的指定软件包 - 使用
yum list installed packageName
命令可以查看当前系统已安装的指定软件包 - 使用
yum info packageName
命令可以查看指定软件包的详细信息 - 使用
yum install packageName
命令可以安装指定软件包 - 使用
yum list updates
命令可以查看当前系统已安装的并且可以更新的软件包 - 使用
yum update
命令可以更新当前系统需要更新的所有软件包 - 使用
yum update packageName
命令可以更新指定软件包 - 使用
yum remove packageName
命令可以卸载指定软件包,但保留配置文件和数据 - 使用
yum erase packageName
命令可以卸载指定软件包,并且删除配置文件和数据 - 使用
yum clean all
命令可以清理软件包依赖关系 - 使用
yum deplist packageName
命令可以查看指定软件包的依赖关系 - 使用
yum repolist
命令可以查看当前系统已配置的软件仓库
9.1 包管理基础
- 各种版本的 Linux 都采用了 包管理系统( Package Management System ,PMS ) 来控制系统中软件和库的安装
- PMS 使用专有的数据库来记录系统上安装的软件、软件中的文件、软件的版本
- PMS 会连接到系统预配置好的软件仓库,可以从这些在线仓库中搜索、安装、更新软件
- PMS 在安装软件时,可以很好的处理软件的依赖关系, 确保软件及其依赖的额外包都能正确的安装到系统中
- dpkg 和 rpm 是 Linux 中主要的 PMS 底层工具
- 基于 Debian 的 Linux 使用 dpkg
- 基于 Red Hat 的 Linux 使用 rpm
9.2 基于 Debian 的系统
- 基于 Debian 的 Linux 中的 PMS 各种工具的关系如下图
- dpkg 做为 PMS 的核心,直接与 PMS 进行交互
- aptitude 则是将整个 PMS 中的功能包装整合后提供一个统一的命令接口供用户使用
- 直接使用
aptitude
命令可以有效防止注入 软件依赖关系缺失 、系统环境变量不稳定 等各种软件安装问题
- 手上没有基于 Debian 的环境,所以如何使用 aptitude 命令的笔记就只是单纯的记录,不提供演示效果
9.2.1 使用 aptitude 命令管理软件包
- 直接输入
aptitude
命令可以进入管理软件包的交互式界面 - 使用
aptitude show packageName
命令查看指定软件包的详细信息 - 使用
dpkg -L packageName
命令可以查看指定软件包的相关文件列表- 该效果无法直接使用
aptitude
命令实现
- 该效果无法直接使用
- 使用
dpkg --search fileName
命令可以查看指定文件属于哪个软件包- 文件名称必须携带完整路径
- 该效果无法直接使用
aptitude
命令实现
9.2.2 使用 aptitude 命令安装软件包
- 使用
aptitude search packageName
命令可以从在线的软件仓库中查找指定软件包- packageName 默认支持模糊匹配
- 在搜索结果中每行数据的最前端会显示一个字符:p 、v 、i 或者 c
- p 和 v 表示该软件包可以使用,但当前系统还没有安装
- i 表示该软件包已经安装到当前系统
- c 表示该软件包被从当前系统卸载,但当前系统中仍然保留着该软件包的配置文件和数据
- 使用
aptitude install packageName
命令可以安装指定软件包
9.2.3 使用 aptitude 命令更新软件包
- 使用
aptitude safe-upgrade
命令可以从在线的软件仓库中获取当前系统已安装的所有软件包的最新版本,并进行安全更新 -
aptitude
命令的更新操作不需要指定软件包名,因为对于系统来说,整体更新比局部更新更安全 -
aptitude
命令的更新操作除了safe-upgrade
之外还有full-upgrade
和dist-upgrade
,但并不推荐使用后面两者-
safe-upgrade
的好处在于,在执行完整更新时,会自动检测各个软件包之间的依赖关系,确保更新后的软件包之间的依赖关系依旧完整
-
9.2.4 使用 aptitude 命令卸载软件包
- 使用
aptitude remove packageName
命令可以删除软件包,但保留该软件包的数据和配置文件 - 使用
aptitude purge packageName
命令可以完整删除软件包,不保留该软件包的任何信息
9.2.5 aptitude 仓库
- 在基于 Debian 的 Linux 系统中,使用
aptitude
命令时连接的在线仓库被配置在/etc/apt/source.list
文件中 - 通常情况下不需要修改该文件,因为系统的开发人员为了保证系统软件包的安全以及完整性,已经对在线仓库进行了严格的筛选
- 如果说你想使用的某个软件还没有出现在这些官方支持的仓库中,只能说明该软件可能还不够安全,最好是等官方仓库支持后再从官方仓库进行安装
9.3 基于 Red Hat 的系统
- 基于 Red Hat 的 Linux 中 PMS 只有一个底层工具,如下图
- 从 rpm 中分别衍生出了以下三种用户交互命令
- 本章只介绍最常用的 yum
9.3.1 使用 yum 命令列出已安装软件包
- 使用
yum list installed
命令可以显示当前系统已安装的所有软件包,如下图
- 使用
yum list packageName
命令可以查看指定软件包的信息,如下图-
可以看到默认不支持软件包名的模糊匹配,需要显式的进行模糊匹配才能搜索到对应软件包的信息
-
- 使用
yum list installed packageName
命令可以查看指定已安装软件包的信息,如下图- 从上图中可以看到,直接使用
yum list packageName
命令,不仅会列出当前系统已安装的软件包信息,还会列举没有安装但可以安装的软件包信息 - 而使用
yum list installed packageName
命令则只会显示当前系统已安装的软件包信息
- 从上图中可以看到,直接使用
- 使用
yum provides fileName
命令可以查看指定文件属于哪个软件包,如下图-
可以看到,文件名必须使用绝对路径
-
9.3.2 使用 yum 命令安装软件包
- 在安装软件之前,需要先知道软件的完整名称,使用
yum list packageName
命令可以列出当前系统支持安装的软件包列表,再使用yum info packageName
命令可以查看该软件包的详细信息,如下图
- 确定软件完整名称后,使用
yum install packageName
命令就可以安装该软件包,如下图
-
通常情况会先检查该软件包的依赖关系,确认之后会弹出命令确认操作,需要输入 y 并回车已确认安装,如下图
-
如果安装成功会显示下图,如果没有成功在最后会输出一段错误信息
- 想要确认安装是否成功,可以使用
yum list installed tomcat
命令,如下图-
在已安装软件包列表中显示了 tomcat ,说明安装成功
-
9.3.2.1 使用 yum 命令安装本地软件包
- 通常情况下,安装在线软件包即可满足需求,而且在线安装是一种更安全、更能确保系统中各种软件依赖关系完整的做法
- 但如果当前系统网络不通,则还是可以使用
yum localinstall packageName.rpm
命令来进行软件包的本地安装 - 前提当然是把需要安装的软件包的 rpm 文件放置到当前系统中,然后再执行本地安装命令
9.3.3 使用 yum 命令更新软件
- 使用
yum list updates
命令可以查看当前系统中需要更新的软件包,如下图
- 使用
yum update
命令可以更新当前系统所有需要更新的软件包 - 使用
yum update packageName
命令可以更新指定的软件包,如下图- 升级过程和安装过程其实差不多,都会先检查依赖关系,然后弹出确认操作,最后告知结果
-
如果更新的软件包的依赖关系也需要更新,则会被一并更新
-
整个更新过程非常的完整和安全,最后也会将更新所做的操作完整的告知,如下图
9.3.4 使用 yum 命令卸载软件
- 如果想要卸载已安装的软件,可以使用
yum remove packageName
命令,或者yum erase packageName
命令 -
yum remove packageName
命令只会删除软件,但保留配置文件和数据 -
yum erase packageName
命令则会在删除软件的同时,将与软件相关的配置文件和数据一并删除 - 前文中我们使用
yum install tomcat
安装的 Tomcat 软件就需要被删除,实测发现并不建议使用这种方式来安装 Tomcat ,因为安装版的 Tomcat ,其目录是分散在各处的,如下图- 首先使用
whereis tomcat
命令查看哪些目录下存在 tomcat 的映射 - 然后在
/usr/share/tomcat
目录可以看到整个 Tomcat 的各种目录其实被分散在各个目录下 -
所以 Tomcat 建议使用官网下载的解压版,而不是安装版
- 首先使用
- 使用
yum erase tomcat
命令可以完整删除 Tomcat ,如下图-
删除时也会执行一系列检测,之后弹出确认操作,确认后才会执行删除
-
- 删除之后再查看 Tomcat 的目录映射,如下图
-
可以看到,基本都被删了,但还是有一些残留,目前我也不知道为啥,没有深入研究
-
9.3.5 使用 yum 命令处理损坏的包依赖关系
- 损坏的包依赖关系( Broken Dependency ) 是指在安装多个软件包时,某个软件包的依赖关系被另一个软件包覆盖掉,导致前者的依赖关系丢失
- 使用
yum clean all
命令可以清理依赖关系 - 使用
yum deplist packageName
命令可以查看指定软件包的依赖关系 - 使用
yum update --skip-broken
命令可以跳过损坏的包,对那些没有损坏的包进行更新操作
9.3.6 yum 软件仓库
- 使用
yum repolist
命令可以查看当前系统已配置的软件仓库列表,如下图- 这些仓库具体的配置位于
/etc/yum.repos.d/
目录中
- 这些仓库具体的配置位于
9.4 从源码安装
- 如果在线安装、本地安装都不好使,还可以选择 源码安装
- 也就是直接将源码编译后进行安装,通常需要进行以下几个步骤
- 先下载对应软件的源码包,使用
tar -zxvf packageSourceName.tar.gz
命令进行解压 - 之后前往解压目录,使用
./configure
命令进行配置 - 再执行
make
命令来构建各种二进制文件 - 最后使用
make install
命令来安装软件包
- 先下载对应软件的源码包,使用