![为什么在Linux中不能离线安装软件?](https://linux22.com/image/1497541/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8Linux%E4%B8%AD%E4%B8%8D%E8%83%BD%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%E8%BD%AF%E4%BB%B6%EF%BC%9F.png)
为什么 Linux(桌面)不提供像 Windows 那样只需下载软件并双击即可安装的功能。您必须在线安装所有软件,这很烦人。
从技术上来说这是否是不可能的,还是仅仅是一个设计决定?
答案1
首先,正如前面提到的,你的假设是错误的:你能在 Ubuntu 或我所知道的任何其他 Linux 版本中离线安装软件。(可能存在极端情况,但据我所知没有。)
正确的问题是“为什么我不应该......?”或“为什么 Ubuntu 的 vlc 包不完整?”两者都依赖于彼此背后的基础知识。所以,让我们先了解一下情况。
当你获取要在 Windows 中安装的软件包时,它包括一切安装该软件包所需的:驱动程序、子系统、支持库 (DLL) 等。当您运行安装程序时,它会查看系统以查看需要什么和不需要什么,希望只安装需要的,而不会覆盖其他软件包使用的任何类似文件。由于包含所有需要的内容,因此只需下载一次即可完成所有操作。如果您的系统没有安装 VLC 所需的 MP3 编解码器,则会安装下载软件包中包含的编解码器。即使您有其他 MP3 编解码器,VLC 并未编写该编解码器供使用,您仍然可以从 VLC 的安装程序中获得另一个编解码器。
当您在 Linux 中安装软件包时,它仅包含该程序。它可能需要的其他程序均不包含在内。如果 VLC 播放器需要安装 MP3 编解码器,那么您也必须安装它,否则 VLC 将无法播放 MP3 文件。这同样适用于软件包可能列出的任何其他依赖项。
如果你做了适当的研究,比如检查软件包依赖关系,你能下载.deb
文件(适用于 Ubuntu,或.rpm
适用于 RedHat 的文件),然后离线安装所有需要的软件包。这项工作非常繁重,如果您遗漏了某些内容,则必须返回并下载并安装。完成后,它仍然有效,并且全部是离线安装的。
发行版的包管理器将为您处理所有这些工作。如果你需要安装每一个依赖该软件包,您必须先下载所有依赖项。在 Windows 中,如果您要安装软件包,您还必须先下载其所有依赖项,然后再安装它。不同之处在于 Windows 安装程序已将所有这些依赖项捆绑到一个下载文件中,而 Linux 将每个软件包放在自己的文件中。
现在,如果您在 Windows 中安装了五个不同的媒体播放器,会发生什么情况?几乎所有媒体播放器都需要系统中相同的基本库集,例如 MP3 编解码器、声音系统接口、窗口管理器接口以及从文件系统读取文件的方式等。如果您先安装 VLC,它将安装所有这些帮助程序,因为尚未安装任何其他程序。然后,当您安装 Banshee 时,大多数帮助文件都已安装。因此,安装程序几乎无需执行任何操作,只需找到它们并为该程序创建指向它们的链接即可。当您安装最后一个播放器时(无论它是什么),很有可能所需的每个帮助文件都已存在,并且安装过程非常快。
如果您在 Linux 中安装了五个媒体播放器,会发生什么情况?几乎是相同的。如果您使用包管理器并观察其进度,您甚至会看到第一个播放器安装的帮助文件列表很长,第二个播放器安装的帮助文件列表短得多,而第五个播放器可能没有。
那么,有什么区别呢?没有区别,对吧?错误的。所有五个 Windows 安装程序都将包含所有帮助文件。因此,您将下载 MP3 编解码器的五个副本、WMA 编解码器的五个副本、FLAC 编解码器的五个副本、窗口管理器界面的五个副本等。另一方面,在 Linux 中,您将下载每个帮助文件的一个副本,而不是五个,并且您的带宽使用量将更小。如果您将安装程序保存以供以后使用,那么您使用的磁盘空间也会少得多。此外,许多帮助文件可能已经安装,因此您不需要下载或保存任何文件。
通过查看两个具有 Unundu.deb
和 Windows 的软件包.exe
或.msi
进行正面比较,我们得到:
-rw-r--r-- 1 gypsy users 23052120 May 11 22:35 Banshee-2.4.0.msi
-rw-r--r-- 1 gypsy users 30533688 May 11 21:49 vlc-2.2.4-win32.exe
--------
Total = 53585808
-rw-r--r-- 1 gypsy users 2731866 May 11 22:36 banshee_2.9.0+really2.6.2-7ubuntu2_amd64.deb
-rw-r--r-- 1 gypsy users 2002764 May 11 21:52 vlc_2.2.4-4_amd64.deb
--------
Total = 4734630
比较这两个播放器的软件包大小,Windows 的下载量大约是 Linux 的十倍。显然,有些程序会更糟,而有些程序会更好。例如,要在 Windows 上使用 Strawberry Perl 安装 Perl,我需要下载一个 84.3 MB 的.msi
文件。要在 Linux 中安装,我需要下载 15.6 MB 的源代码,这只有 Linux 的五分之一大小。
为什么会有差异?主要是因为哲学。在Linux 哲学继承自Unix的,是只做一件事,并把它做好。因此,软件包的安装程序不必知道如何安装、链接和测试所需的所有辅助库,只需检查它们是否位于应在的位置。Firefox 的安装程序不必安装 OpenSSL 来检查网站证书是否为 HTTPS,只需知道它是否有权访问它。
Linux 哲学的另一部分是选择。这就是为什么有这么多 Linux 发行版可供选择,以及为什么你可以安装这么多不同的窗口管理器和其他程序的原因之一。你还可以选择要使用的 MP3 编解码器,并且有开源和专有版本可供选择。
尽管如此,还是有一些情况是有人创建了一个包,只需一步就可以安装某个包或其他包。我马上想到的一个是信箱中的邮件。但是,即便如此,它仍然需要在线安装,因为它会像包管理器一样查找并根据需要下载使其工作的其他库。它仍然不会将所有内容“捆绑”到一次下载中。
底线
如果你必须离线安装,使用包管理器为您进行分类、筛选和选择。只需告诉它不要安装文件,只下载它们。然后您可以离线并自己进行安装。如果您想在安装中更具冒险精神,请下载原始源 tarball 并编译包。您可能会获得更好的性能作为奖励。如果您愿意,可以使用节省的磁盘空间来播放更多音乐、视频和游戏。要真正进入“狂野一面”,请尝试从头开始创建自己的 Linux,包括编译内核本身。从头开始学习 Linux是这样的,所有步骤都会为你解决。但是,在备用计算机上执行此操作,因为它将不是需要一夜之间才能安装完成,而且安装完成后,您仍然需要做更多的事情才能恢复您习惯的窗口 GUI。
答案2
“为什么 Linux 不提供这个功能” 的答案是亩。
日语单词,据称意思是“您的问题无法回答,因为它依赖于错误的假设”。
为了证明这个不寻常的答案:
很久以前,在各种版本的 Linux 中,您都可以自己下载和安装软件包(或从源代码构建)或使用某种管理器。后者是 Windows 世界中的新技术。如果任何系统要求您必须以一种方式而不是另一种方式进行安装,那么它肯定不是 Linux。
答案3
当然可以。您用于安装软件的存储库通常只不过是一个以文件形式提供软件包的 ftp/http 服务器。对于基于 Debian 的发行版,这些是 .deb 文件。您可以下载这些文件并离线安装。
包管理器通常甚至提供“仅下载”的选项。
通常您使用在线包管理器,因为这样它可以处理依赖项(需要安装才能使实际想要的程序运行的程序/库)并检查签名,以便没有人可以向您提供经过修改的、可能是恶意的包。