本页面使用表格展示了部分主流 Linux 发行版中软件包管理命令的对应关系。其灵感源于 openSUSE 的软件管理命令行比较。
提示 必须暂时使用其他 Linux 发行版的 Arch 用户可以使用
pacapt,这是一个简单的跨软件包管理器包装器。
基本操作
| 动作 |
Arch |
Red Hat/Fedora |
Debian/Ubuntu |
SLES/openSUSE |
Gentoo |
| 搜索软件包。各工具默认搜索的字段有所不同,但大多数选项能实现类似的功能。 |
pacman -Ss |
dnf search |
apt search |
zypper search 或 zypper se [-s] |
emerge --search (-s)或 emerge --searchdesc (-S)
|
| 按名称安装软件包 |
pacman -S |
dnf install |
apt install |
zypper install 或 zypper in |
emerge
|
| 仅打印目标而不执行实际操作 |
pacman -p (或 --print) |
dnf --setopt=tsflags=test |
apt --simulate (或 -s, --dry-run, --just-print) |
zypper --dry-run |
emerge --pretend (-p) |
| 切换手动确认 |
pacman --confirm 或 pacman --noconfirm |
dnf --assumeyes (-y) 或 dnf --assumeno |
apt --yes (-y) |
zypper --non-interactive (-n) 或 zypper --no-confirm (-y) |
emerge --ask (-a) |
| 刷新本地软件仓库 |
pacman -Sy (参见关于部分更新的警告) |
dnf check-update 或 dnf makecache 或 dnf upgrade (内置自动功能) |
apt update |
zypper refresh 或 zypper ref [-s] |
emerge --sync
|
| 升级软件包 - 安装已安装软件包的更新版本 |
pacman -Syu |
dnf upgrade |
apt upgrade |
zypper update 或 zypper 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 remove 或 zypper rm |
emerge --depclean (-c) |
| 移除软件包及其配置文件 |
pacman -Rn |
? |
apt purge |
? |
不适用 |
| 移除软件包、其所有依赖项及配置文件 |
pacman -Rns |
? |
apt autoremove --purge |
? |
不适用 |
| 移除不再需要的依赖项(孤儿包),例如移除依赖该包的软件后留下的依赖项。 |
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 |
不可用 (功能请求 + 变通方案) |
emerge --oneshot (-1) |
| 仅下载给定的软件包,不解压或安装它们 |
pacman -Sw |
dnf download |
apt install --download-only (存入软件包缓存) 或 apt download (跳过缓存) |
zypper --download-only |
emerge --fetchonly (-f) |
| 清理所有本地缓存。选项可限制实际清理的内容。 |
pacman -Sc 或 pacman -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 -Si 或 pacman -Qi |
dnf list 或 dnf info |
apt show 或 apt-cache policy |
zypper info 或 zypper if |
emerge -S, emerge -pv 或 eix |
| 显示本地软件包信息:名称、版本、描述等。 |
pacman -Qi |
rpm -qi / dnf info installed |
dpkg -s 或 aptitude show |
zypper --no-remote info 或 rpm -qi |
emerge -pv 或 emerge -S |
| 显示远程软件包信息:名称、版本、描述等。 |
pacman -Si |
dnf info |
apt-cache show 或 aptitude show |
zypper info |
emerge -pv 和 emerge -S 或 equery meta |
| 显示本地软件包提供的文件 |
pacman -Ql |
rpm -ql |
dpkg -L |
rpm -ql |
equery files 或 qlist |
| 显示远程软件包提供的文件 |
pacman -Fl |
dnf repoquery -l 或 repoquery -l (来自 yum-utils 包) |
apt-file list |
|
pfl
|
| 查询提供 FILE 的软件包 |
pacman -Qo |
rpm -qf (仅已安装) 或 dnf provides (所有) 或 repoquery -f (来自 yum-utils 包) |
dpkg -S 或 dlocate |
rpm -qf (仅已安装) 或 zypper search -f (所有) |
equery belongs 或 qfile |
| 列出软件包包含的文件。同样,此功能可通过更复杂的命令模拟。 |
pacman -Ql 或 pacman -Fl |
dnf repoquery -l |
dpkg-query -L |
rpm -ql |
equery files 或 qlist |
| 显示提供给定表达式(即反向提供)的软件包。主要作为搜索特定字段的快捷方式。其他工具可能通过搜索命令提供此功能。 |
pacman -F |
dnf provides |
apt-file search |
zypper what-provides 或 zypper wp (精确匹配) 或 zypper se --provides (模糊匹配) |
equery belongs (仅已安装软件包) 或 pfl |
| 搜索所有软件包以找到包含指定文件的那个。 |
pacman -F |
dnf provides |
apt-file search 或 auto-apt 使用此功能。 |
zypper search -f |
equery belongs 或 qfile |
| 显示软件包的更新日志 |
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 search 或 zypper se -s |
emerge -S 或 eix |
| 列出有可用更新的软件包。注:部分工具提供特殊命令来限制输出到特定安装源,其他则使用选项。 |
pacman -Qu |
dnf list updates 或 dnf check-update |
apt list --upgradable |
zypper list-updates 或 zypper patch-check (仅限补丁) |
emerge -uDNp @world
|
| 显示软件包管理所处理的所有安装源中的所有软件包列表。一些工具提供选项或附加命令来限制输出到特定安装源。 |
pacman -Sl |
dnf list available |
apt-cache dumpavail 或 apt-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 -l 或 apt list --installed |
zypper search -si 或 rpm -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 leaves 或 package-cleanup --leaves --all |
deborphan -anp1 |
zypper packages --unneeded |
emerge -pc
|
| 列出显式安装的软件包(非依赖项) |
pacman -Qe |
dnf history userinstalled |
apt-mark showmanual |
zypper packages --userinstalled |
emerge -pvO @selected 或 eix --selected |
| 列出自动安装的软件包(作为依赖项) |
pacman -Qd |
|
apt-mark showauto |
zypper packages --autoinstalled |
|
查询软件包依赖
| 动作 |
Arch |
Red Hat/Fedora |
Debian/Ubuntu |
SLES/openSUSE |
Gentoo |
| 显示需要 X 才能安装的软件包,即显示反向依赖。 |
pacman -Sii 或 pacman -Qii |
dnf repoquery --whatrequires 或 repoquery --whatrequires |
apt-cache rdepends 或 aptitude search ~D$pattern |
zypper search --requires |
equery depends
|
| 显示与给定表达式(通常为包名)冲突的软件包。搜索命令也可模拟此功能。 |
pacman -Si 或 pacman -Qi |
dnf repoquery --conflicts |
aptitude search '~C$pattern' |
zypper search --conflicts |
|
| 列出给定软件包所需的所有软件包,即显示依赖项。 |
pacman -Si 或 pacman -Qi |
dnf repoquery --requires 或 repoquery -R |
apt-cache depends 或 apt-cache show |
zypper info --requires |
emerge -ep
|
| 列出当前软件包提供的内容 |
pacman -Sii 或 pacman -Qii |
dnf repoquery --provides |
dpkg -s 或 aptitude show |
zypper info --provides |
equery files 或 qlist |
| 列出所有需要特定软件包的软件包 |
pacman -Sii |
dnf repoquery --installed --whatrequires |
aptitude search ~D{depends,recommends,suggests}:$pattern 或 aptitude why 或 apt-cache rdepends |
zypper search --requires |
equery depends -a
|
| 显示所有被指定软件包废弃(obsoletes)的软件包。 |
pacman -Si 或 pacman -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 |
layman 或 eselect repository |
| 向系统添加安装源。某些工具为特定源提供附加命令,另一些允许在 add 命令中使用所有类型的 URI。还有像 apt 这样强制编辑源列表的。apt-cdrom 是特殊命令,提供专为 CD/DVD 设计的源选项。 |
编辑 /etc/pacman.conf |
dnf config-manager |
apt-cdrom add |
zypper ar <URL 或 .repo 文件> |
layman 或 overlays |
| 刷新关于指定安装源或所有安装源的信息。 |
pacman -Sy (之后务必升级整个系统) |
dnf clean expire-cache 然后 dnf check-update |
apt-get update |
zypper refresh 或 zypper ref -s |
emerge --sync 或 layman -S |
| 打印所有安装源列表,包括 URI、别名等重要信息。 |
cat /etc/pacman.d/mirrorlist |
cat /etc/yum.repos.d/* |
apt-cache policy |
zypper repos 或 zypper lr --uri --alias |
layman -l 或 eselect 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 package 或 apt-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;对于共享库级别,使用 findbrokenpkgsAUR 或 lddd (来自 devtools) |
dnf repoquery --unsatisfied |
apt-get --fix-broken 然后 aptitude install |
zypper verify |
revdep-rebuild
|
| 为软件包系统添加检查点以便后续回滚 |
|
(无需,每次事务都会自动完成) |
|
不适用 |
|
| 从系统中移除检查点 |
不适用 |
不适用 |
|
不适用 |
|
| 提供所有系统检查点列表 |
不适用 |
dnf history list |
|
不适用 |
|
| 将整个软件包回滚到特定日期或检查点 |
不适用 |
dnf history rollback |
|
不适用 |
|
| 撤销指定的单个事务 |
不适用 |
dnf history undo |
|
不适用 |
|
使用软件包文件与构建软件包
| 动作 |
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 |
不适用 |
cp package-filename /usr/portage/distfiles
|
| 解压软件包 |
tar -xvf |
rpm2cpio | cpio -vid |
dpkg-deb -x |
rpm2cpio | cpio -vid |
tar -jxvf
|
| 安装/移除软件包以满足构建依赖。使用源代码包中的信息 |
使用 ABS 和 makepkg -seoc |
dnf builddep |
apt-get build-dep |
zypper si -d |
emerge -o
|
| 显示给定软件包名称的源包 |
|
dnf repoquery -s |
apt-cache showsrc |
不适用 |
|
| 下载给定软件包名称对应的源代码包 |
使用 ABS 和 makepkg -o |
dnf download --source |
apt-get source 或 debcheckout |
zypper source-install |
emerge --fetchonly
|
| 构建软件包,首先检查并安装所需的依赖项 |
makepkg -s |
rpmbuild -ba (常规) 或 mock (在 chroot 中) |
debuild |
rpmbuild -ba,然后构建,再 osc build |
ebuild 或 quickpkg |
| 检查可能的打包问题 |
namcap (需要 namcap) |
rpmlint |
lintian |
rpmlint |
repoman
|
日志文件轮转
默认情况下,Arch Linux 不轮转 pacman.log。例如参见 FS#11272 和 FS#20428#comment66480。这与大多数其他 Linux 发行版的默认策略相反。一些发行版(特别是 Gentoo)默认几乎不写入日志文件。
参见