Linux软件包管理系统

包管理系统简介

曾几何时,软件都是通过 FTP 或邮件列表(即通过邮件列表发布源代码的补丁包)来分发的(最终这些发布方式在互联网的迅猛发展下都演化成为一个个现今常见的软件发布网站)。(一般在一个 tar 文件中)只有一个非常小的文件包含了创建二进制的说明。你需要做的是先解压这个包,然后仔细阅读当中的 README 文件, 然后通过./configure、make、make install进行软件安装。可以想象,为你系统上的每一个软件都执行上述的流程将是多么无聊费时,更不用说如果更新一个已经安装的软件将会多复杂,多么需要精力投入。

软件包(package)这个概念是用来解决在软件安装、升级过程中的复杂性的。包将软件安装升级中需要的多个数据文件合并成一个单独的文件,这将便于传输和(通过压缩文件来)减小存储空间,包中的二进制可执行文件已根据开发者所选择的编译标识预编译。包本身包括了所有需要的元数据,如软件的名字、软件的说明、版本号,以及要运行这个软件所需要的依赖包等等。

不同流派的 Linux 发行版都创造了它们自己的包格式,其中最常用的包格式有:

  • .deb:这种包格式由 Debian、Ubuntu、Linux Mint 以及其它的变种使用。这是最早被发明的包类型。
  • .rpm:这种包格式最初被称作 红帽包管理器(Red Hat Package Manager)(LCTT 译注: 取自英文的首字母)。使用这种包的 Linux 发行版有 Red Hat、Fedora、SUSE 以及其它一些较小的发行版。
  • .tar.xz:这种包格式只是一个软件压缩包而已,这是 Arch Linux 所使用的格式。(LCTT 译注:这种格式无需特别的包管理器,解压即可)

尽管上述的包格式自身并不能直接管理软件的依赖问题,但是它们的出现将 Linux 软件包管理向前推进了一大步。

多年以前,非 Linux 世界的用户是很难理解软件仓库的概念的。甚至今时今日,大多数完全工作在 Windows 下的用户还是习惯于打开浏览器,搜索要安装的软件(或升级包),下载然后安装。但是,智能手机传播了软件商店(AppStore/应用)市场这样一个概念。智能手机用户获取软件的方式和包管理器的工作方式已经非常相近了。些许不同的是,尽管大多数软件商店还在费力美化它的图形界面来吸引用户,大多数 Linux 用户还是愿意使用命令行来安装软件。总而言之,软件仓库是一个中心化的可安装软件列表,上面列举了在当前系统中预先配置好的软件仓库里所有可以安装的软件。

linux-package-management

在Linux发行版中,几乎每一个发行版都有自己的包管理器。常见的有:

  • Debian的dpkg以及它的
    • 前端apt(使用于Debian、Ubuntu)。
  • Red Hat的RPM包管理器以及它的
    • 前端dnf(使用于Fedora、 CentOS 8)
    • 前端yum(使用于Red Hat Enterprise Linux、CentOS 7及以下)
    • 前端ZYpp(使用于openSUSE)
    • 前端urpmi(使用于Mandriva Linux、Mageia)
  • 其他包管理器有
    • ArchLinux中使用的Pacman
    • Gentoo使用的基于源代码的Portage
    • Mac系统下的Homebrew等

使用包管理器将大大简化在Linux发行版中安装软件的过程。

有了包管理器为什么还要有其前端工具?

包管理器如RPM与DPKG只能做到检查相依性,在安装或移除时告知相依性的不满足,接下来就需要用户自行去找出所需的组件来安装。 这样非常不方便,为了实现可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装,前端工具如APT及YUM就诞生了。

基于 Debian 的包管理器

dpkg

dpkg 是Debian Packager的简写。为 Debian专门开发的套件管理系统,方便软件的安装、更新及移除。软件都是以.deb结尾的编译好的二进制包。所有源自“Debian”的“Linux ”发行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等。

常用命令:

1)安装软件
命令:dpkg -i <.deb file name>
示例:dpkg -i avg71flm_r28-1_i386.deb
2)安装一个目录下面所有的软件包
命令:dpkg -R
示例:dpkg -R /usr/local/src
3)释放软件包,但是不进行配置
命令:dpkg –-unpack package_file 如果和-R一起使用,参数可以是一个目录
示例:dpkg –-unpack avg71flm_r28-1_i386.deb
4)重新配置和释放软件包
命令:dpkg –configure package_file
如果和-a一起使用,将配置所有没有配置的软件包
示例:dpkg –configure avg71flm_r28-1_i386.deb
5)删除软件包(保留其配置信息)
命令:dpkg -r
示例:dpkg -r avg71flm
6)替代软件包的信息
命令:dpkg –update-avail
7)合并软件包信息
dpkg –merge-avail
8)从软件包里面读取软件的信息
命令:dpkg -A package_file
9)删除一个包(包括配置信息)
命令:dpkg -P
10)丢失所有的Uninstall的软件包信息
命令:dpkg –forget-old-unavail
11)删除软件包的Avaliable信息
命令:dpkg –clear-avail
12)查找只有部分安装的软件包信息
命令:dpkg -C
13)比较同一个包的不同版本之间的差别
命令:dpkg –compare-versions ver1 op ver2
14)显示帮助信息
命令:dpkg –help
15)显示dpkg的Licence
命令:dpkg –licence (or) dpkg –license
16)显示dpkg的版本号
命令:dpkg –version
17)建立一个deb文件
命令:dpkg -b directory [filename]
18)显示一个Deb文件的目录
命令:dpkg -c filename
19)显示一个Deb的说明
命令:dpkg -I filename [control-file]
20)搜索Deb包
命令:dpkg -l package-name-pattern
示例:dpkg -I vim
21)显示所有已经安装的Deb包,同时显示版本号以及简短说明
命令:dpkg -l
22)报告指定包的状态信息
命令:dpkg -s package-name
示例:dpkg -s ssh
23)显示一个包安装到系统里面的文件目录信息
命令:dpkg -L package-Name
示例:dpkg -L apache2
24)搜索指定包里面的文件(模糊查询)
命令:dpkg -S filename-search-pattern
25)显示包的具体信息
命令:dpkg -p package-name
示例:dpkg -p cacti

apt

APT(全称为Advanced Packaging Tools)与 YUM对应, 是Linux下的一款安装包管理工具。APT由几个名字以“apt-”打头的程序组成。apt-get、apt-cache 和apt-cdrom是处理软件包的命令行工具。

常用命令:

apt-cache search package #搜索包
apt-cache show package #获取包的相关信息,如说明、大小、版本等
apt-cache depends package #了解使用依赖
apt-cache rdepends package #查看该包被哪些包依赖
apt-get source package #下载该包的源代码
sudo apt-get install package #安装包
sudo apt-get install package=version #安装指定版本的包
sudo apt-get install package –reinstall #重新安装包
sudo apt-get -f install #修复安装, “-f = –fix-missing”
sudo apt-get remove package #删除包
sudo apt-get remove package –purge #删除包,包括删除配置文件等
sudo apt-get update #更新apt软件源信息
sudo apt-get upgrade #更新已安装的包
sudo apt-get dist-upgrade #升级系统
sudo apt-get dselect-upgrade #使用dselect升级
sudo apt-get build-dep package #安装相关的编译环境
sudo apt-get clean && sudo apt-get autoclean #清理无用的包
sudo apt-get check #检查是否有损坏的依赖

apt与apt-get命令的区别

Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注。随着 apt install package 命令的使用频率和普遍性逐步超过 apt-get install package,越来越多的其它 Linux 发行版也开始遵循 Ubuntu 的脚步,开始鼓励用户使用 apt 而不是 apt-get。那么,apt-get 与 apt 命令之间到底有什么区别呢?如果它们有类似的命令结构,为什么还需要新的 apt 命令呢?是否 apt 真的比 apt-get 更好?普通用户应该使用新的 apt 命令还是坚持旧有习惯继续使用 apt-get 呢?

在开始对比 apt 与 apt-get 命令的区别之前,我们先来看看这两个命令的背景,以及它们要试图达到的目的。Debian 作为 Ubuntu、Linux Mint 和 elementary OS 等 Linux 操作系统的母板,其具有强健的「包管理」系统,它的每个组件和应用程序都内置在系统中安装的软件包中。Debian 使用一套名为 Advanced Packaging Tool(APT)的工具来管理这种包系统,不过请不要把它与 apt 命令混淆,它们之间是其实不是同一个东西。在基于 Debian 的 Linux 发行版中,有各种工具可以与 APT 进行交互,以方便用户安装、删除和管理的软件包。apt-get 便是其中一款广受欢迎的命令行工具,另外一款较为流行的是 Aptitude 这一命令行与 GUI 兼顾的小工具。

如果你已阅读apt-get 命令指南,可能已经遇到过许多类似的命令,如apt-cache、apt-config 等。如你所见,这些命令都比较低级又包含众多功能,普通的 Linux 用户也许永远都不会使用到。换种说法来说,就是最常用的 Linux 包管理命令都被分散在了 apt-get、apt-cache 和 apt-config 这三条命令当中。apt 命令的引入就是为了解决命令过于分散的问题,它包括了 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt-config 命令中很少用到的功能。在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt-config,而且 apt 更加结构化,并为用户提供了管理软件包所需的必要选项。简单来说就是:apt = apt-get、apt-cache 和 apt-config 中最常用命令选项的集合。

通过 apt 命令,用户可以在同一地方集中得到所有必要的工具,apt 的主要目的是提供一种以「让终端用户满意」的方式来处理 Linux 软件包的有效方式。apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。除此之外,它默认启用的几个特性对最终用户也非常有帮助。例如,可以在使用 apt 命令安装或删除程序时看到进度条。apt 还会在更新存储库数据库时提示用户可升级的软件包个数。如果你使用 apt 的其它命令选项,也可以实现与使用 apt-get 时相同的操作。

虽然 apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令。也就是说,可以用 apt 替换部分 apt-get 系列命令,但不是全部。

apt 命令 取代的命令 命令的功能
apt install apt-get install 安装软件包
apt remove apt-get remove 移除软件包
apt purge apt-get purge 移除软件包及配置文件
apt update apt-get update 刷新存储库索引
apt upgrade apt-get upgrade 升级所有可升级的软件包
apt autoremove apt-get autoremove 自动删除不需要的包
apt full-upgrade apt-get dist-upgrade 在升级软件包时自动处理依赖关系
apt search apt-cache search 搜索应用程序
apt show apt-cache show 显示装细节

当然,apt 还有一些自己的命令:

新的apt命令 命令的功能
apt list 列出包含条件的包(已安装,可升级等)
apt edit-sources 编辑源列表

需要大家注意的是:apt 命令也还在不断发展, 因此,你可能会在将来的版本中看到新的选项。

目前还没有任何 Linux 发行版官方放出 apt-get 将被停用的消息,至少它还有比 apt 更多、更细化的操作功能。对于低级操作,仍然需要 apt-get。既然两个命令都有用,那么我该使用 apt 还是 apt-get 呢?作为一个常规 Linux 用户,建议大家尽快适应并开始首先使用 apt。不仅因为广大 Linux 发行商都在推荐 apt,更主要的还是它提供了 Linux 包管理的必要选项。最重要的是,apt 命令选项更少更易记,因此也更易用,所以没理由继续坚持 apt-get。

基于 RPM 包格式的包管理器

rpm

RPM包管理员(简称RPM,全称为The RPM Package Manager或Redhat Package Manager)是在Linux下广泛使用的软件包管理器。使用RPM的发行版:

  • Fedora和Red Hat Enterprise Linux
  • openSUSE和SUSE Linux Enterprise
  • Mandriva Linux和Mageia
  • PCLinuxOS

RPM软件包分为二进制包(Binary)、源代码包(Source)和Delta包三种。二进制包可以直接安装在计算机中,而源代码包将会由RPM自动编译、安装。源代码包经常以src.rpm作为后缀名。RPM仅适用于安装用RPM来打包的软件,目前是GNU/Linux下软件包资源最丰富的软件包类型之一。

rpm的常用命令:

1)安装软件包
rpm -ivh PACKAGE_NAME-VERSION.rpm
2)测试安装软件包,不做真实的安装
rpm -ivh –test PACKAGE_NAME-VERSION.rpm
3)安装软件包,并重新定义安装路径
rpm -ivh –relocate /=/usr/local/PACKAGE_NAME PACKAGE_NAME-VERSION.rpm
4)强行安装软件包,忽略依赖关系
rpm -ivh PACKAGE_NAME-VERSION.rpm –force –nodeps
5)升级软件包
rpm -Uvh PACKAGE_NAME-VERSION.rpm
6)强行升级软件包,忽略依赖关系
rpm -Uvh PACKAGE_NAME-VERSION.rpm –force –nodeps
7)删除软件包,并忽略依赖关系
rpm -e PACKAGE_NAME –nodeps #只是包名,不需要跟版本号
8)导入签名
rpm –import RPM-GPG-KEY
9)查询某个包是否已经安装
rpm -q PACKAGE_NAME
10)查询系统中所有已安装的包
rpm -qa
11)查询某个文件属于哪个包
rpm -qf /etc/auto.misc
12)查询某个已安装软件所包含的所有文件
rpm -ql PACKAGE_NAME
13)查询某个包的依赖关系
rpm -qpR PACKAGE_NAME-VERSION.rpm
14)查询某个包的信息
rpm -qpi PACKAGE_NAME-VERSION.rpm
15)删除软件包
rpm -e PACKAGE_NAME

yum

yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系。在建立好yum服务器后,yum客户端可以通过 http、ftp方式获得软件包,并使用方便的命令直接管理、更新所有的rpm包,甚至包括kernel的更新。

yum的常用命令:

1.安装yum包:
$ yum install PACKAGE_NAME
2.删除yum包:
$ yum remove PACKAGE_NAME
3.重新安装一个yum包:
$ yum reinstall PACKAGE_NAME
4.搜索yum包:
$ yum search PACKAGE_NAME
5.显示yum包的信息:
$ yum info PACKAGE_NAME
6.更新安装的yum包:
$ yum update
7.更新具体的yum包:
$ yum update PACKAGE_NAME
8.显示yum历史:
$ yum history
9.显示已启用的yum存储库的列表:
$ yum repolist
10.找出哪个yum包提供了一个特定的文件(例如:/usr/bin/nc)):
$ yum whatprovides “*bin/nc”
11.清除yum缓存:
$ yum clean all

查询相关:

1.使用YUM查找软件包
命令:yum search ~
2.列出所有可安装的软件包
命令:yum list
3.列出所有可更新的软件包
命令:yum list updates
4.列出所有已安装的软件包
命令:yum list installed
5.列出所有已安装但不在Yum Repository內的软件包
命令:yum list extras
6.列出所指定软件包
命令:yum list ~
7.使用YUM获取软件包信息
命令:yum info ~
8.列出所有软件包的信息
命令:yum info
9.列出所有可更新的软件包信息
命令:yum info updates
10.列出所有已安裝的软件包信息
命令:yum info installed
11.列出所有已安裝但不在Yum Repository內的软件包信息
命令:yum info extras
12.列出软件包提供哪些文件
命令:yum provides~

dnf

DNF 是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。

dnf的常用命令:

1. 查看 DNF 包管理器版本
# dnf –version
2.查看系统中可用的 DNF 软件库
# dnf repolist
3.查看系统中可用和不可用的所有的 DNF 软件库
# dnf repolist all
4.列出所有 RPM 包
# dnf list
5.列出所有安装了的 RPM 包
# dnf list installed
6.列出所有可供安装的 RPM 包
# dnf list available
7.搜索软件库中的 RPM 包
# dnf search nano
8.查找某一文件的提供者
# dnf provides /bin/bash
9.查看软件包详情
# dnf info nano
10.安装软件包
# dnf install nano
11.升级软件包
# dnf update systemd
12.检查系统软件包的更新
# dnf check-update
13.升级所有系统软件包
# dnf update 或 # dnf upgrade
14.删除软件包
# dnf remove nano 或 # dnf erase nano
15.删除无用孤立的软件包
# dnf autoremove
16.删除缓存的无用软件包
# dnf clean all
17.获取有关某条命令的使用帮助
# dnf help clean
18.查看所有的 DNF 命令及其用途
# dnf help
19.查看 DNF 命令的执行历史
# dnf history
20.查看所有的软件包组
# dnf grouplist
21.安装一个软件包组
# dnf groupinstall ‘Educational Software’
22.升级一个软件包组中的软件包
# dnf groupupdate ‘Educational Software’
23.删除一个软件包组
# dnf groupremove ‘Educational Software’
24.从特定的软件包库安装特定的软件
# dnf –enablerepo=epel install phpmyadmin
25.更新软件包到最新的稳定发行版
# dnf distro-sync
26.重新安装特定软件包
# dnf reinstall nano
27.回滚某个特定软件的版本
# dnf downgrade acpid

DNF 和 Yum 的区别

由于 Yum 中许多长期存在的问题仍未得到解决,这些问题包括性能差、内存占用过多、依赖解析速度变慢等。因此 Yum 包管理器已被 DNF 包管理器取代。

编号 DNF(Dandified YUM) YUM(Yellowdog Updater, Modified)
1 DNF 使用 libsolv 来解析依赖关系,由 SUSE 开发和维护 YUM 使用公开的 API 来解析依赖关系
2 API 有完整的文档 API 没有完整的文档
3 由 C、C++、Python 编写的 只用 Python 编写
4 DNF 目前在 Fedora、RHEL 8、CentOS 8、OEL 8 和 Mageia 6/7 中使用 YUM 目前在 RHEL 6/7、CentOS 6/7、OEL 6/7 中使用
5 DNF 支持各种扩展 Yum 只支持基于 Python 的扩展
6 API 有良好的文档,因此很容易创建新的功能 因为 API 没有正确的文档化,所以创建新功能非常困难
7 DNF 在同步存储库的元数据时,使用的内存较少 在同步存储库的元数据时,YUM 使用了过多的内存
8 DNF 使用满足性算法来解决依赖关系解析(它是用字典的方法来存储和检索包和依赖信息) 由于使用公开 API 的原因,Yum 依赖性解析变得迟钝
9 从内存使用量和版本库元数据的依赖性解析来看,性能都不错 总的来说,在很多因素的影响下,表现不佳
10 DNF 更新:在 DNF 更新过程中,如果包中包含不相关的依赖,则不会更新 YUM 将在没有验证的情况下更新软件包
11 如果启用的存储库没有响应,DNF 将跳过它,并继续使用可用的存储库处理事务 如果有存储库不可用,YUM 会立即停止
12 dnf update 和 dnf upgrade 是等价的 在 Yum 中则不同
13 安装包的依赖关系不更新 Yum 为这种行为提供了一个选项
14 清理删除的包:当删除一个包时,DNF 会自动删除任何没有被用户明确安装的依赖包 Yum 不会这样做
15 存储库缓存更新计划:默认情况下,系统启动后 10 分钟后,DNF 每小时会对配置的存储库检查一次更新。这个动作由系统定时器单元 dnf-makecache.timer 控制 Yum 也会这样做
6 内核包不受 DNF 保护。不像 Yum,你可以删除所有的内核包,包括运行中的内核包 Yum 不允许你删除运行中的内核
17 libsolv:用于解包和读取资源库。hawkey: 为 libsolv 提供简化的 C 和 Python API 库。librepo: 提供 C 和 Python(类似 libcURL)API 的库,用于下载 Linux 存储库元数据和软件包。libcomps: 是 yum.comps 库的替代品。它是用纯 C 语言编写的库,有 Python 2 和 Python 3 的绑定。 Yum 不使用单独的库来执行这些功能
18 DNF 包含 29000 行代码 Yum 包含 56000 行代码
19 DNF 由 Ales Kozumplik 开发 YUM 由 Zdenek Pavlas、Jan Silhan 和团队成员开发

zypp

Zypper 是用来管理 RPM 包的另外一个包管理器。这个包管理器主要用于 SUSE(和 openSUSE),在MeeGo、Sailfish OS、Tizen 上也有使用。它最初开发于 2006 年,已经经过了多次迭代。除了作为系统管理工具 YaST 的后端和有些用户认为它比 YUM 要快之外也没有什么好多说的。

zyppd的常用命令:

1. 安装包
语法: # zypper install 示例:安装Mozilla firefox
# zypper install MozillaFirefox
2. 安装源码包
语法:# zypper source-install 示例:从库中安装 apache
# zypper source-install apache2-mod_nss
3. 更新包
更新某一软件包: # zypper update 更新所有软件包: # zypper update
查看所有可用的更新列表:# zypper list-updates
4. 删除包
语法:# zypper remove 示例:移除Mozilla Firefox
# zypper remove MozillaFirefox
5. 查找包
语法:# zypper search 示例:查找所有usb开头的软件包
# zypper search usb*
6. 查看软件包详情
语法: zypper info 示例:查看usbutils的信息
# zypper info usbutils
7. 打补丁
查看所有可打补丁: zypper patches
安装指定补丁:zypper patch
8. 锁住包
软件包被锁之后将不能被移除或升级,下面演示一下如何加锁
1)加al选项锁住包文件“usbutils”, al 是 add lock的缩写
# zypper al usbutils
Specified lock has been successfully added.
2) 加ll选项查看所有已被锁住的软件包, ll 是 List Locks的缩写
# zypper ll
# | Name | Type | Repository
–+—————–+———+———–
1 | usbutils | package | (any)
9. 解锁包
加rl选项解锁usbutils, rl 是 remove lock的缩写
# zypper rl usbutils
10. 用zypper添加库
语法:# zypper addrepo
# zypper addrepo –check –refresh –name “Mozilla-repo”
11. 创建本地库
我们可以使用zypper从本地目录中创建一个包含所有rpm文件的本地库
语法: # zypper addrepo
示例:创建一个名为Linuxprobe_Repo的本地目录,包含所有rpm文件
# zypper addrepo /var/stormgt/dsminst Linuxprobe_Repo
12. 查看库
# zypper lr
13. 在库中搜索包
列出指定库Mozillarepo的所有软件包
# zypper search –repo Mozillarepo
14. 库重命名
重命名库可以用 renamerepo 选项
示例:将库”Linuxprobe_Repo”的名字改成”MyLinuxRepo”
# zypper renamerepo Linuxprobe_Repo MyLinuxRepo
15. 删除库
用removerepo选项来移除库
# zypper removerepo MyLinuxRepo
16. 备份库
用export选项可以备份一系列库文件
# zypper lr –export /var/tmp/backup.repo
17. 从备份文件中添加库
# zypper addrepo /var/tmp/backup.rep
18. 禁用/使用库
示例: 用 modifyrepo 选项的 -d 参数来禁用Mozilla库
# zypper modifyrepo -d Mozillarepo
Repository ‘Mozillarepo’ has been successfully disabled.
示例: 用 modifyrepo选项 -e 参数来允许使用Mozilla库
# zypper modifyrepo -e Mozillarepo
Repository ‘Mozillarepo’ has been successfully enabled.
19. 刷新库
示例: 刷新Mozilla库
# zypper refresh Mozillarepo
示例: 自动刷新指定库
# zypper modifyrepo –refresh Linuxprobe_Repo
Autorefresh has been enabled for repository ‘Linuxprobe_Repo’.

urpmi

urpmi是Mageia/MandrivaLinux及其派生发布版的软件包管理系统,用于安装、移除、升级和查询本机或远程(即提供软件包的服务器)的软件包。它解决了RPM包管理员容易让用户经常遇到相依性地狱的问题。它可以从官方或非官方的来源获得软件包(非官方来源如企鹅解放阵线)。它有一个图形前端:Rpmdrake。 除了被MandrivaLinux所使用外,它也被用在MageiaLinux(一个基于MandrivaLinux的派生版本),以及ROSALinux(同样是基于MandrivaLinux的分支)。

urpmi系列命令:

urpmi 安装或升级
urpme 删除
urpmq 软件包查找
urpmf 文件名查找
urpmi.addmedia 添加源
urpmi.removemedia 删除源
urpmi.update 更新 (升级)
urpmi.update -a 查看所有升级包
urpmi –auto –auto-select 自动升级
urmq –list 列出所有软件包
urpmq –list-media 列出软件源的media
urpmq -d 输出某软件包的依赖信息
urpmq -f 输出某软件包的名字、版本、所属架构
urpmq -i 安装,相当于urpmi
urpmq -y yword> 查找包含某关键字的软件包(或者-a)
urpmf 按某RPM包的准确名字查找

主要的 urpmi 配置文件 :

/etc/urpmi/urpmi.cfg 软件源信息
/etc/urpmi/skip.list 非自动升级的软件包列表
/etc/urpmi/inst.list 需安装而非升级的软件包列表
/var/lib/urpmi/list.* 库中所有软件包列表
/var/lib/urpmi/hdlist.* 库中所有软件包的headers
/var/lib/urpmi/synthesis.hdlist.* 软件包的依赖信息

基于 Arch 的包管理器

Arch Linux 使用称为 pacman 的包管理器。和 .deb 以及 .rpm 不同,它使用更为传统的 LZMA2 压缩包形式 .tar.xz 。这可以使 Arch Linux 包能够比其它形式的压缩包(如 gzip)有更小的尺寸。自从 2002 年首次发布以来, pacman 一直在稳定发布和改善。使用它最大的好处之一是它支持 Arch Build System,这是一个从源代码级别构建包的构建系统。该构建系统借助一个叫 PKGBUILD 的文件,这个文件包含了如版本号、发布号、依赖等等的元数据,以及一个为编译遵守 Arch Linux 需求的包所需要的带有必要的编译选项的脚本。而编译的结果就是前文所提的被 pacman 所使用的 .tar.xz 的文件。

上述的这套系统技术上导致了 Arch 用户仓库(Arch User Respository)(AUR)的产生,这是一个社区驱动的软件仓库,仓库里包括有 PKGBUILD 文件以及支持补丁或脚本。这给 Arch Linux 带了无穷无尽的软件资源。最为明显的好处是如果一个用户(或开发者)希望他开发的软件能被广大公众所使用,他不必通过官方途径去在主流软件仓库获得许可。而不利之处则是它必须将依赖社区的流程,类似于 Docker Hub、 Canonical 的 Snap Packages,或者其它类似的机制。有很多特定于 AUR 的包管理器能被用来从 AUR 里的 PGKBUILD 文件下载、编译、安装。

使用 pacman 和官方软件仓库

Arch 的主要包管理器:pacman,使用标识位而不是像 yum 或 apt 一样使用命令词。例如,要搜索一个包,你要用 pacman -Ss 。和 Linux 上别的命令一样,你可以找到 pacman 的手册页和在线帮助。pacman 大多数的命令都使用了同步(-S)这个标识位。

Pacman 命令详解
Pacman 是一个命令行工具,这意味着当你执行下面的命令时,必须在终端或控制台中进行。
1、更新系统
在 Arch Linux 中,使用一条命令即可对整个系统进行更新:
pacman -Syu
如果你已经使用 pacman -Sy 将本地的包数据库与远程的仓库进行了同步,也可以只执行:
pacman -Su
2、安装包
pacman -S 包名 例如,执行 pacman -S firefox 将安装 Firefox。你也可以同时安装多个包,只需以空格分隔包名即可。
pacman -Sy 包名 与上面命令不同的是,该命令将在同步包数据库后再执行安装。
pacman -Sv 包名 在显示一些操作信息后执行安装。
pacman -U 安装本地包,其扩展名为 pkg.tar.gz。
3、删除包
pacman -R 包名 该命令将只删除包,不包含该包的依赖。
pacman -Rs 包名 在删除包的同时,也将删除其依赖。
pacman -Rd 包名 在删除包时不检查依赖。
4、搜索包
pacman -Ss 关键字 这将搜索含关键字的包。
pacman -Qi 包名 查看有关包的信息。
pacman -Ql 包名 列出该包的文件。
5、其他用法
pacman -Sw 包名 只下载包,不安装。
pacman -Sc Pacman 下载的包文件位于 /var/cache/pacman/pkg/ 目录。该命令将清理未安装的包文件。
pacman -Scc 清理所有的缓存文件。

参考链接:

Related Post

发表回复