在计算机系统上安装应用程序就像将存档中的文件(例如.zip文件)复制到目标计算机一样简单,操作系统期望应用程序所在的位置。因为我们中的许多人习惯于使用花哨的安装“向导”来帮助我们在计算机上安装软件,所以从技术上讲,这个过程似乎应该比实际情况更复杂。然而,复杂的是,什么构成了一个程序?用户认为的单个应用程序实际上包含分散在操作系统中的软件库中的各种依赖代码(例如:Linux上的.so文件、Windows上的.dll文件和macOS上的.dylib文件)。为了让用户不用担心这些程序代码之间复杂的相互依赖关系,Linux使用包管理系统包管理系统来跟踪哪些应用程序需要哪些库,哪些库或应用程序有安全或功能更新,以及每个软件将如何更新.与它一起安装了哪些附加数据文件。包管理器本质上是一个安装向导。它们易于使用,并提供图形界面和基于终端的界面,让您的生活更轻松。您对发行版的包管理器了解得越多,您的生活就会越轻松。在Linux上安装应用程序如果您正在使用Linux桌面并且偶尔想安装一个应用程序,您可能正在寻找GNOME“软件”,它是一个桌面应用程序浏览器。GNOME“软件”程序会按照您的预期进行操作:单击其界面,直到找到看起来有用的应用程序,然后单击“安装”按钮。或者,您可以在GNOME“软件”中打开从网上下载的.rpm或.flatpakref包,以便安装它。但如果您更倾向于使用命令行,请继续阅读。使用dnf搜索软件在安装应用程序之前,您可能需要确认它存在于您的发行版服务器上。通常,使用dnf搜索应用程序的通用名称就足够了。例如,假设您最近阅读了一篇有关Cockpit的文章并决定尝试一下。您可以通过搜索cockpit来验证发行版是否包含它:$dnfsearchcockpitLastmetadataexpirationcheck:0:01:46agoonTue18May202119:18:15NZST。====名称完全匹配:cockpit====cockpit.x86_64:Linux服务器的Web控制台====名称和摘要匹配:cockpit==cockpit-bridge.x86_64:Cockpit桥服务器端组件cockpit-composer。noarch:用于Cockpit[...]的ComposerGUI完全匹配。上面列出的匹配包名为cockpit.x86_64,但名称中的.x86_64部分仅表示它与该CPU架构兼容。默认情况下,你的系统会安装适合当前CPU架构的包,所以你可以忽略这个扩展。因此,您确认您正在寻找的包裹确实简称为cockpit。现在您可以使用dnfinstall安全地安装它。此步骤需要管理员权限:$sudodnfinstallcockpit一般来说,这是典型的dnf工作流程:搜索和安装。然而,有时dnf搜索的结果并不明确,或者您需要有关包的更多信息,而不仅仅是其通用名称。有一些相关的dnf子命令,具体取决于您想要的信息。包元数据如果您觉得您的搜索接近您想要的,但不确定,那么查看包的元数据(例如项目的URL和描述)通常会很有帮助。要获取此信息,请使用dnfinfo命令,顾名思义:$dnfinfoterminatorAvailablePackagesName:terminatorVersion:1.92Release:2.el8Architecture:noarchSize:526kSource:terminator-1.92-2.el8.src.rpmRepository:epelSummary:Store并在一个窗口中运行多个GNOME终端URL:https://github.com/gnome-terminatorLicense:GPLv2Description:一个窗口中的多个GNOME终端。这是一个生产:一种用:终端填充大面积屏幕空间的有效方法的项目。这是通过将窗口拆分为可调整大小的终端网格来完成的。因此,您可以非常灵活地为不同的任务安排终端。此信息告诉您可用包的版本,在您的系统上注册的存储库提供它,项目的网站以及详细的功能描述。哪个包提供了这个文件?软件包名称并不总是与您要查找的名称相匹配。例如,假设您正在阅读的文档告诉您必须安装名为qmake-qt5的东西:$dnfsearchqmake-qt5未找到匹配项。dnf数据库非常广泛,所以不要局限于搜索完全匹配的内容。您可以使用dnfprovides命令来查明您要查找的内容是否作为某个较大包的一部分提供:$dnfprovidesqmake-qt5qt5-qtbase-devel-5.12.5-8.el8。i686:qt5-qtbaseRepo的开发文件:appstreamMatched来自:文件名:/usr/bin/qmake-qt5qt5-qtbase-devel-5.15.2-3.el8.x86_64:qt5-qtbaseRepo的开发文件:appstreamMatched来自:文件名:/usr/bin/qmake-qt5可以确认应用程序qmake-qt5是名为qt5-qtbase-devel的包的一部分。它还告诉您该应用程序将安装到/usr/bin,因此您确切知道安装后它的位置。包中包含哪些文件?有时我发现自己从一个完全不同的角度来看待dnf。有时,我已经确认我的系统上安装了一个应用程序;我只是不知道我是怎么得到它的。其他时候,我知道我安装了一个特定的包,但我不知道我的系统上到底安装了什么包。如果您需要对包的有效负载进行“逆向工程”,您可以使用带有--list选项的dnfrepoquery命令。这将查看存储库中有关包的元数据并列出包提供的所有文件:$dnfrepoquery--listqt5-qtbase-devel/usr/bin/fixqt4headers.pl/usr/bin/moc-qt5/usr/bin/qdbuscpp2xml-qt5/usr/bin/qdbusxml2cpp-qt5/usr/bin/qlalr/usr/bin/qmake-qt5/usr/bin/qvkgen/usr/bin/rcc-qt5[…]这些列表可以是相当长,使用less或您最喜欢的分页命令会有所帮助。删除应用程序如果您决定不再需要系统上的某个应用程序,则可以使用dnfremove卸载它。软件包本身安装的文件和不再需要的任何依赖项都将被删除:$dnfremovebigapp有时,您会发现随一个应用程序安装的依赖项对于稍后安装的其他应用程序也很有用。如果两个包需要相同的依赖,dnfremove不会移除依赖。在安装和卸载大量应用程序后,孤立包散落一地的情况并不少见。大约每年一次,我执行dnfautoremove来清除所有未使用的包:$dnfautoremove这不是必需的,但这是一个让我的计算机感觉更好的一般清理步骤。了解dnf您对包管理器的工作原理了解得越多,在必要时安装和查询应用程序就越容易。即使您不是重度dnf用户,当您发现自己与基于RPM的发行版进行交互时,了解它也会很有用。在告别yum之后,我最喜欢的包管理器之一是dnf命令。虽然我不喜欢它的所有子命令,但我发现它是目前最强大的包管理系统之一。下载我们的dnf备忘单习惯命令,不要害怕尝试一些新技巧。一旦你习惯了它,你可能会发现很难用其他任何东西来代替它。dnf备忘单
