引言 Linux 系统有着众多特点,而灵活性便是其中之一。而这一灵活性的具体体现就是软件的安装是可以通过多种方法途径来实现的。因此,掌握多种 Linux 系统上软件安装方法便是一个开发者以及爱好者的必备技能。本文以下部分将阐述笔者所了解掌握的几种 Linux 系统安装软件的方法。当然,这几种方法主要是 Arch 系发行版的 Linux 系统。
一.通过 pacman 命令安装 pacman
软件包管理器是 Arch Linux 的一大亮点。它将一个简单的 二进制包格式
和易用的 构建系统
结合了起来。pacman
的目标是简化对软件包的管理,无论软件包是来自 官方软件仓库
还是 用户自己创建
的软件包。
关于 pacman
命令的部分用法将在下面几节详细介绍。如果想查看更加完整的技术文档,可参考:ArchWiki—Pacman(英文完整版) , ArchWiki—Pacman(中文) 。
注 :
pacman 软件包管理器拥有很强的管理能力。使用软件包而不是自己编译和安装程序有很多好处:
轻松升级:pacman 会在更新可用时立即更新已安装的软件包
依赖检查:pacman 会为你处理依赖问题,只需要指明程序(名),pacman 就会将它和它所需的所有其他程序都一起安装。
干净卸载:pacman 持有软件包包含的所有文件的列表。这样一来,当你决定移除软件包时,不会无意留下任何文件。
1.1 安装软件包 一个软件包就是一个归档包,其中包含:
该软件所有(编译好的)文件,并按照每个文件的安装位置储存在一个与根目录结构相同的目录中;
该软件的元数据,如软件名称、版本和依赖等;
供 pacman 使用的其它描述性文件;
(可选)在安装、升级、卸载时执行的安装脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # ------------------------------------------------------------------------------ # 下载软件包但不安装 pacman -Sw <包名># 安装「单个」或者「一系列」软件包(含依赖) pacman -S <包名> # 安装单个软件包 pacman -S <包名1 包名2 ...> # 安装一系列软件包# 通过正则表达式安装「一系列」软件包 pacman -S $(pacman -Ssq 包正则表达式)# ------------------------------------------------------------------------------ # 存放在不同仓库的多版本软件需要在软件包前指定仓库名 pacman -S <仓库名/包名># ------------------------------------------------------------------------------ # 安装多个相似名称的软件包,用花括号扩展,举例: pacman -S plasma-{desktop,mediacenter,nm}# 多个相似名称的软件包可以多层扩展,举例: pacman -S plasma-{workspace{,-wallpapers},pa}# ------------------------------------------------------------------------------ # 安装包组,会提示选择安装包组中需要安装的包 pacman -S <包组名># 查询安包组内的包含的具体软件名 pacman -Sg <包组名># ------------------------------------------------------------------------------ # 从本地安装软件包(不从源中获取) pacman -U /path/to/package/package_name-version.pkg.tar.zst# 从远程安装软件包(从源或者指定链接中获取) pacman -U http://www.example.com/repo/example.pkg.tar.zst# 将本地包保存至缓存 pacman -U file:///path/to/package/package_name-version.pkg.tar.zst# ------------------------------------------------------------------------------
1.2 删除软件包 pacman
命令的删除指令如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 # ------------------------------------------------------------------------------ # 删除单个软件包 pacman -R <包名># 删除指定软件包,并删除未被其他已安装软件包使用的依赖 pacman -Rs <包名># -Rs命令在移除包含其他所需包的组时有时候会拒绝运行,可采用如下指令 pacman -Rsu <包名># 删除软件包和依赖这个软件包的所有程序,「递归操作,谨慎使用」 pacman -Rsc <包名># ------------------------------------------------------------------------------ # 删除被其他软件包依赖的软件包,但是不删除依赖这个软件包的其他软件包: pacman -Rdd <包名># ------------------------------------------------------------------------------
1.3 查询包数据库 在 pacman
中,可使用 -Q
参数查询本地软件包数据库, -S
查询同步数据库,以及 -F
查询文件数据库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 # ------------------------------------------------------------------------------ # 显示软件包的依赖树,「这一命令依赖于 pacman-contrib 包」 pactree <package_name># ------------------------------------------------------------------------------ pacman -Q --help #本地软件包数据库的帮助文档 pacman -S --help #同步数据库的帮助文档 pacman -F --help #文件数据库的帮助文档# ------------------------------------------------------------------------------ # 1.本地软件包数据库 # 在本地软件包数据库中查询匹配「单个」或者「多个」字符串的软件包 pacman -Qs <string> # 匹配单个字符串 pacman -Qs <string1 string2 ...> # 匹配多个字符串# 在本地软件包数据库中查询指定软件包的详细信息 pacman -Qi <package_name># 在本地软件包数据库中查询指定软件包所包含文件的列表 pacman -Ql <package_name># ------------------------------------------------------------------------------ # 2.同步数据库 # 在同步数据库中查询匹配「单个」或者「多个」字符串的软件包 pacman -Ss <string> # 匹配单个字符串 pacman -Ss <string1 string2 ...> # 匹配多个字符串# 在同步数据库中获取指定软件的详细信息 pacman -Si <package_name> # ------------------------------------------------------------------------------ # 3.文件数据库 # 在文件数据库中按文件名查找「单个」或者「一系列」文件 pacman -F <string> # 单个文件 pacman -F <string1 string2 ...> # 一系列文件# 查询远程库中软件包包含的文件 pacman -Fl <package_name># ------------------------------------------------------------------------------
1.4 清除包缓存 pacman
命令下载的软件包保存在 /var/cache/pacman/pkg/
路径中,并且它不会自动移除旧的和未安装版本的软件包。
1 2 3 4 5 6 7 8 9 10 11 # ------------------------------------------------------------------------------ # 启用 和 启动 paccache.timer 每周删除不使用的包 paccache -r# 设置保留最近几个版本的软件数量 paccache -rk1# ------------------------------------------------------------------------------ # 删除目前没有安装的所有缓存的包,和没有被使用的同步数据库 pacman -Sc# 删除缓存中的全部文件(两个c强制删除) pacman -Scc# ------------------------------------------------------------------------------
1.5 其他命令 除了上面几节介绍的命令之外,还有一些 pacman
相关的零碎指令如下所示:
1 2 3 4 5 6 7 8 # ------------------------------------------------------------------------------ # 升级整个系统,y 是更新数据库,yy 是强制更新数据库,u 是升级软件 pacman -Syyu# ------------------------------------------------------------------------------ # 升级系统时安装「单个」或者「一系列」软件包 pacman -Syu <包名> #「单个」软件包 pacman -Syu <包名1 包名2 ...> #「一系列」软件包# ------------------------------------------------------------------------------
二.通过 yay 命令安装 yay 命令是一个 Arch Linux 系统的命令行软件。在使用此命令安装软件时需要确保在 /etc/pacman.conf
文件中正确配置了 Arch 源。yay 是 AUR 助手的其中一种,与其他的 AUR 助手的对比可以参考:ArchWiki—AUR 助手
使用 yay 这类 AUR 助手的好处是:
自动解决软件包间依赖关系 ;
动态地搜索 、编译 和构建 包;
安装与管理 AUR 中的包。
注 :
要想使用 yay 命令行软件,需要确保安装了 base-devel
包和 git
包,然后再安装 yay 命令。如果没有安装,可参考如下命令安装:
1 2 # 加入 `--needed` 参数不会重新安装已经安装的软件包 sudo pacman -S --needed base-devel git
值得注意的是, yay
命令可以从 AUR 上获取软件并安装,也可以从官方源获取软件包再安装。
yay
使用与 pacman
相类似的命令结构。因此本节下面部分将展示 yay 的部分指令用法,更加详细的可参阅:ArchWiki—Yay 。
2.1 安装软件包 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # ------------------------------------------------------------------------------ # 在 AUR 上搜索包名 yay <AUR包名># 下载软件包但不安装 yay -G <AUR包名># ------------------------------------------------------------------------------ # 安装「单个」或者「一系列」软件包(含依赖) yay -S <AUR包名> # 安装单个软件包 yay -S <AUR包名1 AUR包名2 ...> # 安装一系列软件包# 通过正则表达式安装「一系列」软件包 yay -S $(pacman -Ssq AUR包正则表达式)# ------------------------------------------------------------------------------ # 存放在不同仓库的多版本软件需要在软件包前指定仓库名 yay -S <仓库名/AUR包名># ------------------------------------------------------------------------------ # 安装包组,会提示选择安装包组中需要安装的包 yay -S <包组名># 查询安装包组内包含的具体软件名 yay -Sg <包组名># ------------------------------------------------------------------------------
2.2 删除软件包 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # ------------------------------------------------------------------------------ # 删除软件包 yay -R <AUR包名># 删除指定软件包,并删除未被其他已安装软件包使用的依赖 yay -Rs <AUR包名># -Rs命令在移除包含其他所需包的组时有时候会拒绝运行,可采用如下指令 yay -Rsu <AUR包名># 删除包及其依赖项 yay -Rns <AUR包名># 删除软件包和依赖这个软件包的所有程序,「递归操作,谨慎使用」 yay -Rsc <AUR包名># 删除被其他软件包依赖的软件包,但是不删除依赖这个软件包的其他软件包: yay -Rdd <AUR包名># ------------------------------------------------------------------------------
2.3 查询包数据库 在 yay
中,可使用 -Q
参数查询本地软件包数据库, -S
查询同步数据库,以及 -F
查询文件数据库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # ------------------------------------------------------------------------------ # 1.本地软件包数据库 # 在本地软件包数据库中查询匹配「单个」或者「多个」字符串的软件包 yay -Qs <string> # 匹配单个字符串 yay -Qs <string1 string2 ...> # 匹配多个字符串# 在本地软件包数据库中查询指定软件包的详细信息 yay -Qi <package_name># 在本地软件包数据库中查询指定软件包所包含文件的列表 yay -Ql <package_name># ------------------------------------------------------------------------------ # 2.同步数据库 # 在同步数据库中查询匹配「单个」或者「多个」字符串的软件包 yay -Ss <string> # 匹配单个字符串 yay -Ss <string1 string2 ...> # 匹配多个字符串# 在同步数据库中获取指定软件的详细信息 yay -Si <package_name> # ------------------------------------------------------------------------------ # 3.文件数据库 # 在文件数据库中按文件名查找「单个」或者「一系列」文件 yay -F <string> # 单个文件 yay -F <string1 string2 ...> # 一系列文件# 查询远程库中软件包包含的文件 yay -Fl <package_name># ------------------------------------------------------------------------------
2.4 清除包缓存 yay
常用的清除缓存指令如下:
1 2 3 4 5 6 # ------------------------------------------------------------------------------ # 删除目前没有安装的所有缓存的包,和没有被使用的同步数据库 yay -Sc# 删除缓存中的全部文件(两个c强制删除) yay -Scc# ------------------------------------------------------------------------------
2.5 其他命令 除了上面几节介绍的命令之外,还有一些 yay
相关的零碎指令如下所示:
1 2 3 4 5 6 7 # ------------------------------------------------------------------------------ # 其他命令 # 升级整个系统,y 是更新数据库,yy 是强制更新数据库,u 是升级软件 yay -Syyu # 仅输入 yay 则等效于 yay -Syu# 仅升级 AUR 包 yay -Sua# ------------------------------------------------------------------------------
2.6 常用指令汇总 更加详细的指令信息如下图所示:
命令
描述
yay
升级系统,相当于 yay -Syu
yay
显示包安装选择菜单
yay -Bi
安装依赖并构建本地 PKGBUILD
yay -G
从 ABS 或 AUR 下载 PKGBUILD (yay v12.0以上版本)
yay -Gp
打印 ABS 或 AUR 的 PKGBUILD 到 stdout
yay -Ps
打印系统统计信息
yay -Syu –devel
执行系统升级,但同时检查开发包的更新
yay -Syu –timeupdate
执行系统升级并使用PKGBUILD修改时间(不是版本号)来确定更新
yay -Wu
取消对包的投票 (需要设置 AUR_USERNAME 和 AUR_PASSWORD 环境变量) (yay v11.3以上版本)
yay -Wv
投票支持包 (需要设置 AUR_USERNAME 和 AUR_PASSWORD 环境变量) (yay v11.3以上版本)
yay -Y –combinedupgrade –save
使组合升级成为默认模式
yay -Y –gendb
生成用于开发更新的开发包数据库
yay -Yc
清理不需要的依赖
注 :
如果方便,也可在命令行中键入 yay --help
或者是 yay -h
指令查看 yay 命令的用法。
三.通过 AUR 安装 AUR 全称 Archlinux User-community Repository,即 Archlinux 用户社区的软件库。具体的介绍可以参考:ArchWiki—AUR 。AUR 是为用户而建,并由用户主导的 Arch 软件仓库。AUR 中的软件包以软件包生成脚本(PKGBUILD)的形式提供,用户自己通过 makepkg 生成软件包,再由 pacman 安装软件包。
Archlinux 的灵魂是 PKGBUILD、 AUR 和 ABS ,在 AUR 仓库能查到的软件包,都可以使用上述的方法进行安装。为了演示这一方法的可行性,这里以 WingIDE
软件的安装为例演示安装流程:
首先,去到 AUR 官方网站并在 Package Search
栏目搜索软件包(WingIDE)
搜索软件包会跳转到搜索结果页,在这一页面可能会有许多相关的软件,选择自己需要的软件点击查看详情即可
进入软件详情页会有许多具体信息,通过 AUR 社区安装软件需要复制对应软件的 Git Clone URL
获取到软件的 Git Clone URL
后在终端中输入 git clone <Git Clone URL>
将软件包克隆至本地
紧接着,进入到克隆下来的软件包文件夹,使用 makepkg -s
指令构建软件包
最后通过 pacman
命令的本地安装功能进行文件夹中的 .pkg.tar.zst
软件包安装
至此,通过 AUR 安装软件的介绍到此结束。
注 :
如果仅使用 makepkg
指令,可能会因为依赖包问题而报错,因此最好是使用 makepkg -s
。
使用 makepkg -s
命令会构建好软件包,但是安装还需要调用 pacman -U <Packge Name>
指令进行本地安装,因此可以换做 makepkg -si
指令在构建完后自动安装软件包。
四.通过转换 deb 包安装 AUR 上储备了相当数量的软件,在上面能获取到日常使用的大部分软件。它虽然很好用了,但是一些无法编译的包(闭源代码软件包),或是在 AUR 上生成报错的软件包则还是需要另外的途径编译构建新的包。此时便可以通过本文所述的这一粗糙的方法将 deb 包转换成 archlinux 包。
4.1 debtap 软件部署 4.1.1 安装 debtap
想要在 Manjaro 系统上转换 deb 格式的包,需要的就是先安装 debtap 软件。可使用如下命令安装 debtap 软件:
在安装完 debtap 软件之后,这里相当建议更新一次 debtap 的源以创建或者更新 pkgfile 和 debtap 数据库。这里可以通过如下命令更新 debtap 的源:
示例结果如下图所示:
注 :
这条指令在安装完 debtap 软件之后至少需要运行一次,否则调用 debtap 软件时可能会报错。
4.1.2 debtap 换源 值得注意的是 debtap 默认的官方源在大陆地区访问很卡,因此需要给 debtap 更换本地的镜像源。换源的方式也很简单,那就是修改 /usr/bin/debtap
配置文件。修改配置文件可以通过如下两种方式进行:
一种是利用 vim 命令访问该配置文件,然后更改文件中的这两项内容:
1 2 3 sudo vim /usr/bin/debtap# 替换 http://ftp.debian.org/debian/dists 为 https://mirrors.ustc.edu.cn/debian/dists # 替换 http://archive.ubuntu.com/ubuntu/dists 为 https://mirrors.ustc.edu.cn/ubuntu/dists/
另外一种便更加简单粗暴,就是在命令行中直接将指定信息写入该配置文件。
1 2 sudo sed -i "s|http://ftp.debian.org/debian/dists|https://mirrors.ustc.edu.cn/debian/dists|g" /usr/bin/debtap sudo sed -i "s|http://archive.ubuntu.com/ubuntu/dists|https://mirrors.ustc.edu.cn/ubuntu/dists|g" /usr/bin/debtap
4.2 安装 deb 包格式的软件 在如下的示例中笔者都以 Typora 软件安装参考。debtap 命令的使用很简单
4.2.1 转换格式 直接对下载的 deb 软件包使用 debtap 命令即可转换包格式
1 debtap <Deb Package Name>
转换包格式的参考示例执行结果如下图所示:
在图中可以看到笔者有多个版本的 Typora 软件,这里转换格式的是 1.8.9
版本的 Typora 软件。同时上图也展示出出了转换后软件包格式类型为: .pkg.tar.zst
。
注 :
在包转化的过程中,你不想回答任何问题,使用 -q
略过除了编辑元数据之外的所有问题。当然,也可使用 -Q
略过所有问题。命令的格式如下所示:
1 2 3 4 # 略过除了编辑元数据之外的所有问题 debtap -q <Deb Package Name># 略过所有问题 debtap -Q <Deb Package Name>
如果想要查看 debtap 的帮助文档,可执行如下命令获取:
运行的参考示例如下图所示:
4.2.2 本地安装 将 deb 包转换成 ArchLinux 系统格式的软件包后便可以本地安装了。可以通过如下命令安装
1 sudo pacman -U <Packge Name>
安装软件的参考示例执行结果如下图所示:
笔者之前已经安装过 Typora 软件,因此看到上面提示重新安装。至此,已成功本地安装转换后的软件包。
五.通过 AppImage 包安装 这种方式是在打包程序时就将所需的库以及依赖通过打包到 AppImage 文件中再发布,此种方式的好处是这种安装包可以在任意发行版 Linux 系统中运行而无需另外安装应用。更具体内容可参照 AppImage官网 描述。
5.1 技术特点
简单 :AppImage 核心思想即:一个文件就是一个应用程序
,就是说每个 AppImage 文件都包含应用程序以及应用程序运行所需的所有文件。换言之,除了操作系统本身的基础组件,Appimage不需要依赖包即可运行
可靠 :AppImage 格式是上游应用打包
的理想选择,这意味着可以直接从开发者那里获取软件,而不需要任何中间步骤。
快速 :AppImage应用可以直接下载并且运行,无需安装,并且不需要root权限。
5.2 命令行实现 运行 AppImage 文件非常简单,下载后,通过以下步骤即可运行程序:
下载需要的 AppImage 软件到运行文件夹,例如:/path/to/AppImage
打开当前发行版 Linux 系统终端(Terminal)
进入 AppImage 文件所在目录,例如:cd /path/to/AppImage
给需要运行的 AppImage 文件赋予相应的权限,例如:sudo chmod a+x my.AppImage
这样便可以运行 AppImage 软件了,例如:./my.AppImage
这里在代码行中做个汇总:
1 2 3 4 5 6 7 8 # 进入文件目录 cd /path/to/AppImage # 查看目录中文件 ls -l # 更改文件权限 sudo chmod a+x my.AppImage# 运行程序 ./my.AppImage
笔者在本人系统中运行如下图所示:
5.2 沙盒实现 通过命令行操作可能很繁琐,那么可以通过诸如 AppImageLauncher 的沙盒程序来整合 AppImage 程序。下面将阐述利用沙盒程序整合 AppImage 文件的步骤:
首先在当前发行版 Linux 系统中安装沙盒程序,笔者使用的是 AppImageLauncher 程序。
然后下载需要运行的 AppImage 文件。
通过文件资源管理器进入 AppImage 所在目录,然后点击运行该 AppImage 文件。
至此,AppImageLauncher 就将 AppImage 文件整合到对应的目录统一管理。并且在整合的过程中在开始菜单自动生成了访问图标。