Linux命令行与Shell脚本编程
第九章 安装软件
文章目录
九,安装软件
9.1 软件包管理基础
软件包管理系统使用数据库来记录:
·Linux系统中已安装的软件包。
·每个软件包安装了哪些文件。
·每个已安装的软件包的版本。
软件包存储在称为仓库(repository)的服务器上,可以利用本地Linux系统中的软件包管理器通过 Internet访问,在其中搜索新的软件包,或是更新系统中已安装的软件包。
软件包通常存在依赖关系,被依赖的包必须提前安装。软件包管理器会 检测 依赖关系 并安装 额外的软件包。
Linux中广泛使用的两种主要的软件包管理系统基础工具是dpkg和rpm。
基于 Debian的发行版( Ubuntu和Linux Mint)使用的是dpkg命令。
dpkg会直接和Linux系统中的软件包管理系统交互,用于安装、管理和删除软件包。
基于Red Hat的发行版( Fedora、CentOS和 openSUSE)使用的是rpm命令。
rpm命令可以安装、管理和删除软件包。
9.2 基于 Debian 的系统
dpkg命令是基于Debian的软件包管理器的核心,用于在Linux系统中安装、更新、删除 DEB 包文件。
dpkg命令 假定 已经将DEB包文件下载到本地Linux系统或是以URL的形式提供。
所以从 Linux发行版仓库中安装软件包需要使用 APT(advanced package tool)工具集。
·apt-cache
·apt-get
·apt
9.2.1 使用apt管理软件包
apt list命令会显示仓库中所有可用的软件包,加入--installed选项,就可以限制仅输出那些已安装在系统中的软件包:
$ apt --installed list
acl/focal,now 2.2.53-6 amd64 [installed,automatic]
apt show 显示软件包详细信息
$ apt show package_name
与特定软件包相关的所有文件。需要使用dpkg命令:
dpkg -L package_name
$ dpkg -L acl
/.
/bin
/bin/chacl
/bin/getfacl
...
找出特定的文件属于哪个软件包
dpkg --search absolute_file_name
$ dpkg --search /bin/getfacl
acl: /bin/getfacl
9.2.2 使用apt安装软件包
查找特定的软件包,时使用apt命令与search命令
apt search package_name
search 自带通配符效果;
search命令显示 在名称或描述中 包含搜索关键字的 软件包;只想搜索软件包名称,可以加入--name-only选项:
$ apt --names-only search zsh
Sorting... Done
Full Text Search... Done
fizsh/focal,focal 1.0.9-1 all
Friendly Interactive ZSHell
...
使用apt安装: apt会自动解析必要的依赖关系,根据需要安装额外的库和软件包
apt install package_name
$ sudo apt install zsh
9.2.3 使用apt升级软件
upgrade命令可以使用仓库中的任何新版本安全地升级系统中所有的软件包:
apt upgrade
upgrade会将所有已安装的软件包升级为仓库中可用的最新版本,有利于系统的稳定性
upgrade命令在升级过程中不会删除任何软件包。如果必须删除某个软件包才能完成升级,可以使用以下命令:
apt full-upgrade
9.2.4 使用apt卸载软件包
apt的remove命令可以删除软件包,同时保留数据和配置文件。
要将软件包以及相关的数据和配置文件全部删除,需要使用 purge选项:
$ sudo apt purge zsh
软件包存在依赖,不能自动删除,可以使用 autoremove 命令将其删除:
$ sudo apt autoremove
9.2.5 apt仓库
仓库位置保存在文件/etc/apt/sources.list中。
为软件包管理系统加入一些额外的软件仓库,需要修改文件。
$ cat /etc/apt/sources.list
main restricted
deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted
格式:
deb (or deb-src) address distribution_name package_type_list
deb 或 deb-src 软件包的类型。
deb表明是一个已编译程序的仓库源,
deb-src表明是一个源代码的仓库源。
address 软件仓库的网址。
distribution_name 该软件仓库的发行版的版本名称。
package_type_list 表明仓库里面有什么类型的软件包,可能不止一个单词
9.3 基于Red Hat的系统
基于Red Hat的系统有以下几种前端工具。
·yum:用于Red Hat、CentOS和Fedora。
·zypper:用于openSUSE。
·dnf:yum的升级版,有一些新增的特性。
9.3.1 列出已安装的软件包
已安装的软件包
dnf list installed
输出的信息可能会在屏幕上一闪而过,所以最好是将已安装软件的列表重定向到一个文件中,然后使用more命令或less命令(或GUI编辑器)来仔细查看:
dnf list installed > installed_software
找出文件系统中的某个文件是由哪个软件包安装的
dnf provides file_name
9.3.2 使用dnf安装软件
安装软件包
dnf install package_nam
9.3.3 使用dnf升级软件
查看已安装软件包的所有可用更新
dnf list upgrades
升级所有软件包
dnf upgrade
升级指定软件包
dnf upgrade package_name
upgrade-minimal 命会将软件包升级至最新的bug修复版或安全补丁版,而不是最新的最高版本
9.3.4 使用dnf卸载软件
dnf remove package_name
9.3.5 处理损坏的依赖关系
软件包的依赖关系可能会被另一个软件包搞乱。称为依赖关系损坏(broken dependency)。
dnf clean all
dnf upgrade
还解决不了问题,尝试:
dnf repoquery --deplist package_name
会显示指定软件包的所有依赖关系以及哪些软件包提供了这种依赖
yum工具的upgrade命令支持 --skip-broken 选项,可以跳过依赖关系损坏的软件包,同时仍尝试继续升级其他包。dnf工具则自动执行该操作。
9.3.6 RPM仓库
查看当前拉取软件的仓库
dnf repolist
没有所需仓库就需要编辑 dnf仓库的定义:
·配置文件/etc/dnf/dnf.conf。
·/etc/yum.repos.d目录中的单独文件。
9.4 使用容器管理软件
云计算带来了应用程序打包方式的一种新范式:应用程序容器(application container)。
应用程序容器创建了一个环境,其中包含了应用程序运行所需的全部文件,包括运行时库文件。
9.4.1 使用snap容器
snap打包系统会将应用程序所需的所有文件集中到单个snap分发文件中
snapd应用程序运行在后台,你可以使用snap命令行工具查询snap数据库,显示已安装的snap包,以及安装、升级和删除snap包。
snap version命令检查snap是否正在运行:
$ snap version
snap 2.44.3+20.04
snapd 2.44.3+20.04
series 16
ubuntu 20.04
kernel 5.4.0-31-generic
使用snap list命令查看当前已安装的snap应用程序列表:
$ snap list
snap find命令可以在snap仓库中搜索指定程序:
$ snap find solitaire
Name Version Publisher Notes Summary
solitaire 1.0 1bsyl - usual Solitaire card game,
snap info命令可以查看snap应用程序(简称为snap)的详细信息:
$ snap info solitaire
snap install命令可以安装新的snap:
$ sudo snap install solitaire
安装snap的时候,snapd程序会将其作为驱动器挂载。可以使用mount命令查看新的snap挂载。
删除某个snap
$ sudo snap remove solitaire
9.4.2 使用flatpak容器
Red Hat、CentOS和Fedora都倾向于使用flatpak.
使用flatpak list命令列出已安装的应用程序容器:
$ flatpak list
Name Application ID Version Branch Installation
Platform org.fedoraproject.Platform f32 system
flatpak search命令可以在flatpak仓库中搜索指定应用程序:
$ flatpak search solitaire
Name Description Application ID Version Branch Remotes
Aisleriot Solitaire org.gnome.Aisleriot stable fedora
GNOME Mahjongg org.gnome.Mahjongg 3.32.0 stable fedora
使用容器时,必须使用其Application ID值,而不是名称。
使用flatpak install命令安装应用程序:
$ sudo flatpak install org.gnome.Aisleriot
使用flatpak uninstall命令删除应用程序容器:
$ sudo flatpak uninstall org.gnome.Aisleriot
9.5 从源代码安装
软件包管理系统和应用程序容器出现前,只能以源代码形式分发软件,需要在系统中自行编译。源代码形式的软件包通常以 tarball 的形式发布。
下载完成之后,就可以使用tar命令解包了:
$ tar -Jxvf sysstat-12.3.3.tar.xz
tarball 中所有文件都已经被解包到目录,进入该目录继续完成后续操作。
在目录的列表中, README文件或INSTALL文件 写明了软件安装所需的操作步骤。
用make命令来构建各种二进制文件。make命令会编译源代码,然后由链接器生成最终的可执行文件
$ make
make命令结束后,可运行的程序就出现在目录中。将其安装在Linux系统的常用位置。使用 make命令的install选项
# make install