Unix 工作实战。第二部分:软件

大家好!我是大聪明-PLUS

在本节中,我将探讨操作系统中"不存在"的、"不必要的"软件这一主题。哪些软件可用,哪些不可用,从哪里获取,以及如何处理所有这些软件。

历史性的时刻

消费软件的历史复杂且充满矛盾,涉及截然不同的意识形态、用户自身的需求以及行业的技术能力之间的冲突。

尽管个人电脑本身是作为商业产品诞生和销售的,但人们对软件价值的态度过去和现在都......各不相同。

有些人认为软件是一种独立的商业产品,应该在商店里和电脑一起摆放在货架上出售。

另一些人则认为,每个体面的绅士都应该能够从源代码构建自己的系统,包括编译器和应用软件。而且源代码应该免费分发:

"编译器能识别自己的程序"------如果你连编译都做不到,那说明你不适合使用计算机。

另一些人则认为,虽然源代码应该保持开放,但应该通过收取现金费用来帮助用户进行组装和安装。

第一组的想法最终发展成了微软和苹果,第二组的想法在阳光明媚的加利福尼亚州仍然很流行,第三组的想法已经发展成了现代的红帽和Suse。

但这一切都已成为"过去式",如今关于软件未来命运的各种观点都已变得非常混乱:

Unix的作者们在他们的鼎盛时期。

Unix文化

与 Mac 和 Windows 不同,在 Mac 和 Windows 中,每个或多或少复杂的程序都是一个独立的产品 ,有自己的价格、广告和促销活动;而在 Unix 世界中,程序主要是实用程序

这些组件的第二大价值(仅次于功能性)是能够它们彼此组合并组装成处理链:

复制代码
find` . `-type` f  `-exec` `grep` `-i` `"test"` {} `+` | `wc` `-l

在上面的例子中,实际上使用了三个不同的程序findgrepwc,它们以这样的处理链连接在一起。

该组合首先在当前目录的所有文件中以不区分大小写的方式搜索单词"test",然后统计该单词出现的总次数并将其显示出来。

这就是典型的"Unix方式":

众多小型实用程序,每个实用程序都做好一件事,它们组合成一个链条来实现最终结果。

除了显而易见的优点外,这种方法也带来了一些不太明显的缺点,其中最主要的缺点是不确定性

虽然没有现成的方案,但借助bask、grep和awk,你甚至可以组织一次登月之旅。

经验丰富的 Unix 用户往往会以这种方式回应经验不足的管理者,这当然会在后者身上造成某种程度的不协调。

经验丰富的 Unix 用户第一百次看到典型的自动化任务(文本处理/归档/移动文件)通过 Java/.NET/C++ 创建一个完整的应用程序。

但经理的观点也有一定道理:

这里有一款功能和价格都明确的现成产品------你买下它,安装它,然后使用。就这么简单。

然后,砰的一声,原来公司里一个至关重要的流程竟然是用一些难以理解的"Bash脚本" 来实现的。

简单来说,以下是该系列的解释:

程序只有两种状态:运行/未运行"或"作为链接库的 grep 与作为独立应用程序的 grep 没有区别(除了运行时间不同)"。

遗憾的是,实际上它们并不奏效。

Windows 10 下的三个姐妹操作系统(Ubuntu、Suse 和 Fedora)。

那种"不存在的软件"

由于上述 Unix 理念、源代码的可用性以及(坦白说)缺乏真正的商业兴趣,所有基本的类 Unix 软件早已与依赖项混杂在一起,并合并成一个几乎单一的平台,该平台现在是统一的,并且在所有现代 *BSD 和 Linux 系统上或多或少都能以相同的方式运行。

因为这样更简单:

更容易操作、更容易维护、更容易组装。

请查看以下两张截图:

FreeBSD 14 系统中 /usr/bin 目录的内容

在 Ubuntu Linux 系统中,目录是相同的。

该目录/usr/bin遵循可追溯到旧版 Unix 5 时代的传统, 包含一组用户软件------用户将这些实用程序组合成处理链来执行其日常任务。

正如你所看到的,即使是技术上截然不同的 FreeBSD 和 Ubuntu,这套配置也并没有太大区别,我认为这完美地说明了这一点:

在过去的 20 年里,Unix 世界的开发工具、关键库和基本控制台实用程序一直保持着相同和统一的状态。

这种统一一度催生了GNU/Linux这个术语,因为 GNU 工具开始提供基本的用户环境。如今,例如Debian项目就正式称自己为"GNU/Linux" 。

至于 BSD,值得引用英文维基百科的内容,它(在某些方面)比翻译要准确得多:

因此,从一开始,BSD 更像是一套面向最终用户的现成应用软件集合(即前文提到的"软件发行版"),而不是一个操作系统内核。时至今日,BSD 社区的现状基本依然如此:

尽管 BSD 的"三位一体"(FreeBSD/NetBSD/OpenBSD)各自拥有独立、独特的内核,但它们不像 Linux 那样重视手动重建内核。

当然,用户完全可以从源代码构建内核和整个系统,但这既不是一项特殊的成就,也不是 BSD 系统的必要条件。

每个 BSD 系统仍然被其用户视为现成的产品,并因其"符合既定现实"而受到重视------官方手册中描述的内容是可信的。

残酷的一刻

上次我们发现 CSDN上有不少人对 Solaris 等经典旧 Unix 系统感兴趣,所以我就简单介绍一下那里的软件情况。

尽管基本的 Solaris 系统(截至 2005 年)拥有足够的应用软件,但这仍然不足以让人过上相对舒适的生活。

更糟糕的是,Solaris 系统中许多系统实用程序(如 grep、awk、make 等)都有自己的特殊版本,这些版本在操作逻辑或密钥方面与 GNU 集不兼容。

因此,自从Solaris 的x86 版本( 2003年)问世以来,就出现了一个项目,该项目为外部可插拔存储库提供开源软件:

OpenCSW(发音为 open-cashew /ˈkæʃuː/)是一款易于使用的开源软件发行版,可安装在 Solaris 和基于 Solaris 的系统上。

从该存储库安装的第一件事是 GNU 的一组实用程序,包括gcc编译器,因为使用标准编译器编译比"Hello World"更复杂的任何程序都会出现问题。

如您所见,该项目仍然活跃,并允许在现代版本的 Solaris 中使用大量开源软件。

当然,这并不那么重要------现在的基本发行版包含的开源软件比 20 年前多得多。

总而言之:

无论你使用的是"复杂的" FreeBSD还是"用户"Ubuntu,你今天都会发现几乎相同的基本实用程序和应用程序:grep等等。

当然,两者之间存在差异(有时差异很大),但多年来差异越来越少,趋势是朝着更大的统一和统一方向发展。

顺便说一下,Python 总是保持最新状态,所以你不会因为操作系统稀少。

总的来说,这些基础软件涵盖了所有自动化任务以及日常工作中出现的大部分例行任务。

因此,在任何现代 Unix 系统上,您都不太可能遇到缺少必要工作工具的问题。

现在我们来聊点悲伤的话题。

是的,这是Linux 版的Maya。现在正式发布了。

专业软件

有很多历史悠久的专业软件,对它们来说,操作系统只不过是一个启动按钮。

Adobe 产品,主要是Photoshop、3D 建模软件(Maya、3DMax)、工程师和建筑师软件(Autocad)等等。

对于这类软件而言,操作系统就像一个"开始"按钮,而整个工作解决方案则是经过专门挑选和配置的硬件、支持和配置的操作系统,以及安装在其上的专业软件。

有时需要对整个硬件和软件系统以及专业人员进行认证。

本软件自然是闭源的,并且仅针对支持的平台进行了优化。

我认为很明显,这类软件完全不符合"Unix之道"的理念,所以期待官方发布某种"FreeBSD版Photoshop"是没有意义的。

当然,这可以当作玩笑来做(我承认,我自己就这么做过),但是指望这样的软件包能正常工作,更别提尝试将其用于实际工作了,那就太过分了。

然而,情况正在逐步改善,此类系统的开源类似物正在开发中:Blender、Gimp、FreeCAD、LibreOffice------ 所有这些项目在过去 10 年中都取得了长足的进步。

就我个人而言,我很难判断完全取代 Adobe 或 Autodesk 产品的可能性,因为我从未从事过专业的图形设计工作,但我越来越注意到,至少学生和初级作者正在充分利用开源图形软件的潜力,并取得了相当鼓舞人心的成果。

我还要补充一点,专业软件制造商本身也正逐渐开始积极支持 Linux,越来越多的此类软件也开始至少在一定程度上支持 Linux,这令人鼓舞。

那些记得往事的人,会流下怀旧的泪水。

仿真

解决某些罕见操作系统软件缺失问题的方案之一是模拟

值得注意的是,在 Unix 系统中,模拟机制运行良好:

针对硬件和特定环境,有很多不同的模拟器

我现在就来告诉你其中最重要的几件事。

Dosbox

不妨从著名的Dosbox开始,它能解决 DOS 及其环境的各种版本和变体中可能出现的所有软件问题。

除了 DOS 之外,该模拟器还允许您运行旧版本的 Windows(3.1、95、98、NT):

在 Dosbox 中运行 Windows 3.1

我还要补充一点,Dosbox 项目还有功能更强大的高级分支,甚至还有移植到其他语言的版本。

顺便一提,作者曾用 Dosbox 移植到 Java 的程序做过一个实验,结果天网在机器人掌权后肯定会杀了他。

Wine

对于现代 Unix 用户来说,下一个重要的工具是Wine。只要有足够的时间和耐心,它甚至可以让你在不应该运行的地方运行最新一代的AAA游戏:

在 Gentoo Linux 上运行 Cyber​​punk 2077。

由于我很少玩电脑游戏,所以我很欣赏 Wine 能够运行更多普通日常软件的功能:

运行在 Manjaro Linux 上的 Microsoft Office 2019

虚拟化

下一个值得讨论的话题是虚拟化,主要是利用现代处理器功能的硬件虚拟化。

在 Linux 中,KVM子系统负责实现这一点,但最近类似的解决方案已被移植到所有 BSD 系统:OpenBSD、NetBSD和FreeBSD。

以 FreeBSD 为例,这种虚拟化技术为现代 WiFi 网卡的驱动程序问题提供了一个有趣的解决方案。

最重要的一点是:

与VirtualBox或VMWare 等传统解决方案相比,硬件虚拟化可以显著提高客户操作系统的性能。

因此,借助它,可以做到类似这样的事情。

但经典的VirtualBox模拟器本身 并非致命缺陷,因为它具有可移植性,即使在 FreeBSD 下也能良好运行。

例如,MacOS 在此模拟器中运行:

一个手动打过补丁的 VirtualBox 版本,可以比较成功地运行 MacOS 和 Xcode。

BSD 和桌面

此外,还值得探讨在工作站上使用 BSD 系统的经验,因为这种做法相当罕见。

FreeBSD

FreeBSD 是所有 BSD 系统中用户最友好的,拥有最广泛的应用软件。几乎所有 Linux 上可用的软件都可以在 FreeBSD 上找到(极少数例外)。

除了包含现成软件包的存储库(如 Linux 中的存储库)之外,还有一个ports系统,它是一组用于下载源代码和在本地构建应用程序的脚本。

遗憾的是,BSD 系统没有以现成构建版本形式分发软件的做法,因此如果某个应用程序不在官方存储库或 ports 中,您将不得不从源代码自行构建它。

虽然这听起来很可怕,但实际上(在大多数情况下)并不会造成任何严重问题。

值得一提的是,有一个专门的脚本可以大大简化在桌面上安装 FreeBSD 的过程。运行此脚本,只需几个步骤即可获得一个功能齐全的用户系统,并带有图形界面。

OpenBSD升级过程。

OpenBSD

OpenBSD是一个使用起来复杂得多的系统,而且对于桌面应用来说,其安全系统必须大幅削弱,因此才有了他们那句名言:

默认安装中只有两个远程漏洞,真是太久了!

将不再与您的安装有任何关联。

与 FreeBSD 一样,OpenBSD 既有提供现成软件包的官方软件仓库,也有自己的ports 系统。

遗憾的是,目前可用的应用软件仍然非常有限,而且由于该操作系统的安全要求不断提高,其审批和纳入官方软件库的过程也十分复杂。

因此,值得关注WIP(进行中工作)存储库,开发人员正在其中进行特定应用程序的移植工作。

对于这种罕见的操作系统,这通常是获得无需虚拟化的原生版本的唯一方法。

值得注意的是,由于该系统的某些特性,Wine在OpenBSD下无法运行。

NetBSD

NetBSD操作系统那句著名的口号"当然可以运行NetBSD"并不适用于应用软件。因此,例如,在Amiga上运行NetBSD并不意味着LibreOffice、Chromium以及所有其他常用的用户软件都能在其上运行。

至于在普通的 x86 架构上使用NetBSD,也会出现一些令人不快的意外情况。

从桌面用户的角度来看,最重要的是缺少 Chrome/Chromium。

这些人根本跟不上 Chromium 项目近年来保持的惊人发展速度。

相比之下,FreeBSD每周会收到几次 Chromium稳定版本的更新,而 OpenBSD 的补丁集看起来是这样的,就源代码大小而言,它接近该操作系统内核的大小。

将 Chromium 移植到 NetBSD 的工作仍在进行中,所有工作都在WIP存储库中进行,但作者始终无法从这些源代码完全构建 Chromium------总是会出问题。

所以目前 NetBSD 唯一支持的原生浏览器是Firefox Nightly。

至于现成的软件包,这里和其他所有 BSD 系统一样,有一个官方仓库、一个软件包管理器,以及它自己的端口系统。

后者也具有跨平台特性,不仅可以在 NetBSD 上使用:

平台 日期支持已添加
NetBSD 1997年8月
Solaris 1999年3月
Linux 1999年6月
Darwin(Mac OS X) 2001年10月
FreeBSD 2002年11月
OpenBSD 2002年11月
IRIX 2002年12月
BSD/操作系统 2003年12月
AIX 2003年12月
Interix (适用于 Unix 的 Microsoft Windows 服务) 2004年3月
DragonFlyBSD 2004年10月
OSF/1 2004年11月
HP-UX 2007年4月
QNX 2007年10月
俳句 2010年9月
MirBSD 2011年1月

当然,软件集高度依赖于架构,即使某些软件包存在于端口中,也不是每个软件包都能在罕见的架构上构建。

总而言之

由于不断进行统一化进程,现代 Unix 世界的软件可用性非常好------特定操作系统之间的差异(从用户的角度来看)每年都在缩小。

现在从 Linux 切换到任何 BSD 系统时,您不太可能像过去切换到 AIX 或 Solaris 等大型商业 Unix 系统时那样感到完全迷失方向。

您不太可能需要学习每个特定操作系统的任何特殊命令,因为所有细节都保留在配置和访问控制层面,而不是日常使用层面。

唯一情况还不太好的领域 是现代专业、高度专业化的商业软件,例如 Adobe Photoshop。

它过去在 Linux 和 *BSD 系统中并不存在(极少数例外情况除外),现在也不存在,而且很可能以后也不会存在:

一旦操作系统变成商业产品的"启动"按钮,所有"Unix之道"的魔力就荡然无存,使用开源操作系统执行此类任务的意义也随之消失。

但即使是这样的软件,也可以通过模拟和虚拟化技术在 Unix 环境中运行,尽管运行速度会大幅下降。

相关推荐
HLC++11 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室13 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy15 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫17 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生17 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1118 小时前
linux基础IO
linux·运维·服务器
BelongPanda20 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯21 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983421 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器