pacman/Rosetta

来自 ArchWiki

本页使用表格展示了一些最流行的 Linux 发行版之间软件包管理命令的对应关系。最初的灵感来自于 openSUSE 的软件包管理命令行对比

提示: 需要临时使用其他 Linux 发行版的 Arch 用户可以使用 pacapt,它是对其他软件包管理器的简单封装。

基本操作

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
搜索软件包。默认搜索的确切字段因工具而异。大多数选项使工具功能相当。 pacman -Ss dnf search apt search zypper searchzypper se [-s] emerge --search (-s)

emerge --searchdesc (-S)

通过名称安装软件包 pacman -S dnf install apt install zypper installzypper in emerge
获取源码包和构建依赖 makepkg -s PKGBUILD dnf builddep apt build-dep zypper source-install (zypper si) 或 zypper install -d emerge,或显式地 emerge --with-bdeps
仅打印目标而不执行实际操作 pacman --print (或 -p) dnf --setopt=tsflags=test apt --simulate (或 -s, --dry-run, --just-print) zypper --dry-run emerge --pretend (-p)
切换手动确认 pacman --confirmpacman --noconfirm dnf --assumeyes (-y) 或 dnf --assumeno apt --yes (-y) zypper --non-interactive (-n) 或 zypper --no-confirm (-y) emerge --ask (-a)
刷新本地软件包仓库 pacman -Sy (参见关于部分更新的警告) dnf check-updatednf makecachednf upgrade (内置自动功能) apt update zypper refreshzypper ref [-s] emerge --sync
升级软件包 - 安装已安装的旧版本软件包 pacman -Syu dnf upgrade apt upgrade zypper updatezypper up emerge -[a]uDN @world
升级软件包 - 更新命令的另一种形式,可以执行更复杂的更新,例如发行版升级。当通常的更新命令会忽略包含依赖项更改的软件包更新时,此命令可以执行这些更新。 pacman -Syu dnf distro-sync apt dist-upgrade zypper dup emerge -[a]uDN @world
通过名称移除软件包及其所有依赖 pacman -Rs dnf remove apt autoremove zypper removezypper rm emerge --depclean (-c)
移除软件包及其配置文件 pacman -Rn ? apt purge ? n/a
移除软件包及其所有依赖和配置文件 pacman -Rns ? apt autoremove --purge ? n/a
移除不再需要的依赖项(孤立软件包),例如,因为需要这些依赖项的软件包已被移除。 pacman -Qdtq | pacman -Rs - (-Qdttq 也移除可选依赖) dnf autoremove apt autoremove zypper rm -u (仅用于移除软件包) 或 zypper packages --unneeded (仅列出) emerge --depclean (-c)
移除不再包含在任何仓库中的软件包。 pacman -Qmq | pacman -Rs - dnf repoquery --extras aptitude purge '~o' ?
将先前作为依赖项安装的软件包标记为显式需要。 pacman -D --asexplicit dnf mark install apt-mark manual zypper install --force (需要重新安装软件包的变通方法) emerge --select (-w)
将软件包作为依赖项安装 / 不标记为显式需要。 pacman -S --asdeps dnf install 然后 dnf mark remove apt-mark auto n/a (功能请求 + 变通方法) emerge --oneshot (-1)
仅下载给定的软件包,而不解包或安装它们 pacman -Sw dnf download apt install --download-only (到软件包缓存中) 或 apt download (绕过软件包缓存) zypper --download-only emerge --fetchonly (-f)
清理所有本地缓存。选项可能会限制实际清理的内容。 pacman -Scpacman -Scc dnf clean all apt autoclean 仅移除不需要的、过时的信息 或 apt clean zypper clean eclean distfiles
启动一个 shell 以在一个会话中输入多个命令 dnf shell zypper shell
显示软件包管理所执行操作的日志。 读取 /var/log/pacman.log dnf history 读取 /var/log/dpkg.log 读取 /var/log/zypp/history 或由附加软件包提供的 zypper-log 读取 /var/log/portage
获取整个系统信息的转储 - 打印、保存或类似操作软件包管理系统的当前状态。首选输出为文本或 XML。(注意:这里为什么是“或”?没有工具提供选择输出格式的选项。) 查看 /var/lib/pacman/local 查看 /var/lib/rpm/Packages apt-cache stats emerge --info
通过电子邮件发送软件包更改通知 apt install apt-listchanges eselect news read

查询特定软件包

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
显示关于软件包的所有或大部分信息。默认命令的工具详细程度各不相同。但是通过选项,这些工具的功能彼此相当。 pacman -Sipacman -Qi dnf listdnf info apt showapt-cache policy zypper infozypper if emerge -S, emerge -pveix
显示本地软件包信息:名称、版本、描述等。 pacman -Qi rpm -qi / dnf info installed dpkg -saptitude show zypper --no-remote inforpm -qi emerge -pvemerge -S
显示远程软件包信息:名称、版本、描述等。 pacman -Si dnf info apt-cache showaptitude show zypper info emerge -pvemerge -Sequery meta
显示本地软件包提供的文件 pacman -Ql rpm -ql dpkg -L rpm -ql equery filesqlist
显示远程软件包提供的文件 pacman -Fl dnf repoquery -lrepoquery -l (来自软件包 yum-utils) apt-file list pfl
查询提供 FILE 的软件包 pacman -Qo rpm -qf (仅限已安装) 或 dnf provides (所有) 或 repoquery -f (来自软件包 yum-utils) dpkg -Sdlocate rpm -qf (仅限已安装) 或 zypper search -f (所有) equery belongsqfile
列出软件包包含的文件。同样,此功能可以通过其他更复杂的命令来模拟。 pacman -Qlpacman -Fl dnf repoquery -l dpkg-query -L rpm -ql equery filesqlist
显示提供给定 exp 的软件包。也称为反向提供。主要是搜索特定字段的快捷方式。其他工具可能会通过搜索命令提供此功能。 pacman -F dnf provides apt-file search zypper what-provideszypper wp (精确匹配) 或 zypper se --provides (模糊匹配) equery belongs (仅限已安装软件包) 或 pfl
搜索所有软件包以查找包含指定文件的软件包。 pacman -F dnf provides apt-file searchauto-apt 正在使用此功能。 zypper search -f equery belongsqfile
显示软件包的变更日志 pacman -Qc dnf changelog apt-get changelog rpm -q --changelog equery changes -f

查询软件包列表

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
通过在名称、描述、简短描述中搜索表达式来搜索软件包。默认搜索的确切字段因工具而异。大多数选项使工具功能相当。 pacman -Ss dnf search apt search zypper searchzypper se -s emerge -Seix
列出有可用更新的软件包。注意:有些提供特殊命令来限制输出到特定的软件包源,其他则使用选项。 pacman -Qu dnf list updatesdnf check-update apt list --upgradable zypper list-updateszypper patch-check (仅用于补丁) emerge -uDNp @world
显示软件包管理处理的所有软件包源中的所有软件包列表。有些工具提供选项或附加命令来限制输出到特定的软件包源。 pacman -Sl dnf list available apt-cache dumpavailapt-cache dump (仅缓存) 或 apt-cache pkgnames zypper packages portageq all_best_visible /
生成已安装软件包的列表 pacman -Q dnf list installed dpkg --list | grep ^i zypper packages --installed-only qlist -IC
列出已安装但不再在任何软件包源中可用的软件包。 pacman -Qm dnf list extras apt --installed list | grep ,local zypper packages --installed-only --orphaned eix-test-obsolete
列出最近添加到软件包源之一的软件包,即对该源来说是新的软件包。 dnf list recent aptitude search '~N'aptitude forget-new eix-diff
列出已安装的本地软件包及其版本 pacman -Q rpm -qa dpkg -lapt list --installed zypper search -sirpm -qa qlist -ICv
在本地安装的软件包中搜索名称或描述 pacman -Qs rpm -qa '*<str>*' aptitude search '~i(~n $name|~d $description)' zypper search --installed-only --search-descriptions eix -S -I
列出任何其他软件包都不需要的软件包 pacman -Qtt dnf leavespackage-cleanup --leaves --all deborphan -anp1 zypper packages --unneeded emerge -pc
列出显式安装的软件包(不是作为依赖项) pacman -Qe dnf history userinstalled apt-mark showmanual grep -E '^i\+' (变通方法) emerge -pvO @selectedeix --selected
列出自动安装的软件包(作为依赖项) pacman -Qd grep -E '^i[^+]' (变通方法) apt-mark showauto

查询软件包依赖关系

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
显示需要安装 X 的软件包,也称为显示反向依赖关系。 pacman -Siipacman -Qii dnf repoquery --alldeps --whatrequiresrepoquery --whatrequires apt-cache rdependsaptitude search ~D$pattern zypper search --requires equery depends
显示与给定表达式(通常是软件包)冲突的软件包。搜索也可以用来模拟此功能。 pacman -Sipacman -Qi dnf repoquery --conflicts aptitude search '~C$pattern' zypper search --conflicts
列出给定软件包所需的所有软件包,也称为显示依赖关系。 pacman -Sipacman -Qi dnf repoquery --requiresrepoquery -R apt-cache dependsapt-cache show zypper info --requires emerge -ep
列出当前软件包提供的功能 pacman -Siipacman -Qii dnf repoquery --provides dpkg -saptitude show zypper info --provides equery filesqlist
列出需要特定软件包的所有软件包 pacman -Sii dnf repoquery --installed --alldeps --whatrequires aptitude search ~D{depends,recommends,suggests}:$patternaptitude whyapt-cache rdepends zypper search --requires equery depends -a
显示指定软件包废弃的所有软件包。 pacman -Sipacman -Qi dnf list obsoletes apt-cache show zypper info --obsoletes
为给定的软件包生成适合使用 dotty 处理的输出。 apt-cache dotty

软件包源管理

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
软件包源管理 编辑 /etc/pacman.conf 编辑 /etc/yum.repos.d/${REPO}.repo 编辑 /etc/apt/sources.list 编辑 /etc/zypp/repos.d/${REPO}.repo laymaneselect repository
向系统添加软件包源。有些工具为某些源提供附加命令,其他工具允许添加命令的所有类型的源 URI。还有一些,例如 apt 强制编辑源列表。apt-cdrom 是一个特殊命令,它为 CD/DVD 作为源提供了特殊选项设计。 编辑 /etc/pacman.conf dnf config-manager apt-cdrom add zypper ar <URL or .repo file> laymanoverlays
刷新关于指定软件包源或所有软件包源的信息。 pacman -Sy (之后总是升级整个系统) dnf clean expire-cache 然后 dnf check-update apt-get update zypper refreshzypper ref -s emerge --synclayman -S
打印所有软件包源的列表,包括 URI、别名等重要信息。 cat /etc/pacman.d/mirrorlist cat /etc/yum.repos.d/* apt-cache policy zypper reposzypper lr --uri --alias layman -leselect repository list
列出某个仓库中的所有软件包 paclist <repo> zypper packages -r <repo>zypper pa -r <repo> eix --in-overlay
为操作禁用软件包源 dnf --disablerepo= emerge package::repo-to-use
从与已安装发行版不同的版本下载软件包。 pacman -S repo_name/package dnf --releasever= apt-get install -t release packageapt-get install package/release (不包含依赖项) zypper install -r <repo> package echo "category/package ~amd64" >> /etc/portage/package.keywords 然后 emerge package

覆盖

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
添加软件包锁定规则以防止其当前状态被更改 编辑 /etc/pacman.conf 修改 IgnorePkg 数组 编辑 dnf.conf 添加/修改 exclude 选项 apt-mark hold pkg zypper al 或将软件包名称放入 /etc/zypp/locks /etc/portage/package.mask
删除软件包锁定规则 编辑 /etc/pacman.conf 从 IgnorePkg 行中移除软件包 apt-mark unhold pkg zypper rl 或从 /etc/zypp/locks 中移除软件包名称 /etc/portage/package.mask (或 package.unmask)
显示所有锁定规则的列表 cat /etc/pacman.conf /etc/apt/preferences zypper ll 或查看 /etc/zypp/locks cat /etc/portage/package.mask
设置给定软件包的优先级,以避免升级、强制降级或覆盖任何默认行为。也可以用于首选来自特定软件包源的软件包版本。 编辑 /etc/pacman.conf 修改 HoldPkg 和/或 IgnorePkg 数组 /etc/apt/preferences, apt-cache policy zypper mr -p 编辑 /etc/portage/package.accept_keywords 添加一行 =category/package-version
移除先前设置的优先级 /etc/apt/preferences zypper mr -p 编辑 /etc/portage/package.accept_keywords 移除冲突行
显示已设置优先级的列表 apt-cache policy/etc/apt/preferences zypper lr -p grep -r . /etc/portage/package.accept_keywords

验证与修复

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
验证单个软件包 pacman -Qk (可以添加另一个 k) rpm -V debsums rpm -V equery check
验证所有软件包 pacman -Qk (可以添加另一个 k) rpm -Va debsums rpm -Va equery check
重新安装给定的软件包;这将重新安装给定的软件包而无需处理依赖关系 pacman -S dnf reinstall apt install --reinstall zypper install --force emerge -1O
验证完整系统的依赖关系;如果在安装过程中被强制终止时使用 pacman -Dk dnf repoquery --requires apt-get check zypper verify emerge -uDN @world
使用一些魔法来修复系统中损坏的依赖关系 对于 pacman 依赖级别,使用 pacman -Dk;对于共享库级别,使用 findbrokenpkgsAURlddd (来自 devtools) dnf repoquery --unsatisfied apt-get --fix-broken 然后 aptitude install zypper verify revdep-rebuild
为软件包系统添加检查点以便稍后回滚 (不必要,它在每次事务中都会完成) n/a
从系统中移除检查点 n/a n/a n/a
提供所有系统检查点的列表 n/a dnf history list n/a
将整个软件包回滚到特定日期或检查点 n/a dnf history rollback n/a
撤销单个指定的事务 n/a dnf history undo n/a

使用软件包文件和构建软件包

操作 Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
查询在命令行上提供的软件包,而不是软件包管理数据库中的条目 pacman -Qp rpm -qp dpkg -I
列出软件包文件的内容 pacman -Qpl rpmls rpm -qpl dpkg -c rpm -qpl
安装本地软件包文件,例如 app.rpm,并使用软件包源来解析依赖关系 pacman -U dnf install dpkg -i zypper in emerge
使用本地软件包更新软件包,并使用软件包源来解析依赖关系 pacman -U dnf upgrade debi emerge
将本地软件包添加到本地软件包缓存,主要用于调试目的。 cp package-filename /var/cache/pacman/pkg/ apt-cache add package-filename n/a cp package-filename /usr/portage/distfiles
提取软件包 tar -xvf rpm2cpio | cpio -vid dpkg-deb -x rpm2cpio | cpio -vid tar -jxvf
安装/移除软件包以满足构建依赖关系。使用源码包中的信息 使用 ABSmakepkg -seoc dnf builddep apt-get build-dep zypper si -d emerge -o
显示给定软件包名称的源码包 dnf repoquery -s apt-cache showsrc n/a
下载给定软件包名称的对应源码包 使用 ABSmakepkg -o dnf download --source apt-get sourcedebcheckout zypper source-install emerge --fetchonly
构建软件包 makepkg -s rpmbuild -ba (正常) 或 mock (在 chroot 中) debuild rpmbuild -ba,然后构建,然后 osc build ebuildquickpkg
检查可能的打包问题 namcap
(需要 namcap)
rpmlint lintian rpmlint repoman

日志文件轮换

默认情况下,Arch Linux 不轮换 pacman.log。例如,参见 FS#11272FS#20428#comment66480。这与其他大多数 Linux 发行版的默认策略形成对比。一些发行版,特别是 Gentoo,默认情况下几乎不写入日志文件。

参见