本文经授权转自公众号CSDN(ID:CSDNnews)
编译 | 张仕影,责编 | 郑丽媛
我将 Linux 作为唯一使用的操作系统已经大约有 15 年了。最近,我开始了一份非常棒的新工作,但唯一的问题是——它配备了一台 Windows 10 笔记本电脑。
这是我时隔 15 年后第一次使用 Windows。
Windows 桌面的混乱程度实在是令人震惊,Linux 常会因为桌面不稳定的问题受到批评,但显然 Windows 的情况更糟糕。在 Windows 中,一半是“新”的UI(用户界面),一半是旧的 Win 32(应用程序编程接口)/GDI(图形设备接口)类型的 UI——这看似和 KDE (K桌面环境)/GTK(通用图形库)一样糟糕,但不同点在于:在 Linux 发行版中可全部配置为 KDE、GTK 或其他方式启动;但在 Windows 中,你只能一开始就被困于两者的随机混合。
值得庆幸的是,Windows 有一个黑暗主题可用,不过只适用于新 UI——也就是说,你可能会发现一些旧的非主题 UI 在黑暗模式下还呈现亮白色!
与完全可定制的 Linux 相比, 你几乎只能选择用 Microsoft 为你提供的任何东西;反之,用户可以从头开始构建自己的 Linux 版本。不过,我与几乎所有 Linux 用户一样没有选择自己构建,而是使用 Linux 发行版。我可以自由选择最接近自己需求的发行版,并定制任何我想要的内容。多年来,我一直在使用 Xubuntu(基于 Ubuntu 的衍生 Linux 发行版),它很适合我,除此之外还有数百种 Linux 发行版可供我选择 。
作为一名软件和 Web 开发人员,我认为 Linux 是一个工具箱,里面装满了软件开发人员历经数十年为广大开发者精心打造的高度完善的工具。但 Windows 却不同,它是一个商业操作系统,主要面向的是 Word、Excel 和 Outlook 用户。你在使用时可以明显地感觉到二者的差异。
非组合式软件
构成标准 Linux/Unix 工具箱的命令行工具(echo、cat、grep、sed、awk、find、cut、sort、curl、ssh 等......)都是可组合且通用的,你可以像拼乐高积木一样将它们组合在一起,用任何你喜欢的组合方式来制作新工具。你可以在命令行上执行此操作,方法是将文本流从一个工具传送到另一个工具,并根据需要使它们进行转换。
遗憾的是,没有人真正想出如何制作这样通用且可组合的 GUI 软件。Windows 一直非常关注 GUI,甚至几乎完全排除命令行——这意味着它没有这种可组合软件工具的基础。Windows 几乎所有东西都是一个特殊用途的 GUI 软件,因此你必须亲自去寻找,然后下载和安装。
解决方案:
你可以获得大多数标准 *nix userland utils(GNU核心实用程序命令列表)的 Windows 版本,它们似乎可以与 PowerShell 一起使用:
$ scoop install coreutils
路径
如果你只是在 GUI 文件管理器中点击内容,那么带有大量空格的冗长路径并不重 要,可如果你试图使用命令行,那么它们就只是持续的对立。
不过老实说,自我上次使用 Windows 以来,他们已经消除了路径中的很多空格。此外,PowerShell 也确实为主文件夹提供了~ 别名,并且cd ~ 也可以正常工作。
环境变量
环境变量看起来像这样:%PROFILE% ,而不是这样:$HOME 。虽然有差异,但也都很好,并且 PowerShell 似乎两种形式都接受。
不太好的是,它们显然是存储在 Windows 注册表中的。如果你使用setx %var% value 或 GUI 来更新这些,你就必须重新启动 shell——即输入exit,窗口/选项卡消失,然后再打开另一个窗口。
解决方案:
我还没有尝试过这种方法,但是我认为如果你想要在当前运行的 shell 中添加持久的环境变量,应该在 $profile 文件中放置一个 setx 命令,然后重新加载 .$profile,或者可以运行 myvar="value" && setx %myvar% "value" 等类似的命令。
在 Windows 中,大多数情况下安装软件仍然是去网站,下载一个.exe或是.msi,然后运行。然而当你试图去运行它们时,你可能会收到一些警告,但这仍然是安装很多软件的唯一方法!2022 年了,这种安装方式还是令人不放心。
虽然现在有了 Microsoft Store(微软商店),但情况依旧很糟糕。它比多数 Linux 发行版中“应用商店”所拥有的软件还少,甚至与 Debian 软件库(有大约 6 万个软件包)和 Arch 的AUR(7.3 万个软件包)相比,简直是微不足道(不过这些计数包括整个 Linux 操作系统,它们是用同一个软件包管理器安装的)。
像 Netflix(流媒体播放平台)一样,Microsoft Store 故意让人看不出他们到底有多少东西,但在大多数有用的类别中,它都空荡荡的。起码到目前为止,它没有我需要的东西。
例如,尝试安装一个字体。如果你已经下载了某个字体,那么你就可以右键单击它,或者是设置新字体安装内容以安装本地字体文件;但它同时也会建议你访问只有 19 种字体可用的 Microsoft Store 商店。
粗略地看了一下apt list | rg 'ttf|otf' | wc -l,我发现我的谷歌字体/Ubuntu(以桌面应用为主的Linux操作系统)盒子中有 101 个字体,目前有 1364 个字体系列。这些都是开源且免费许可的,并且这些字体能够在 Windows 上运行良好,因此如果微软想要的话,他们同样也能安装。
如果有一个合适的包管理器,Microsoft Store 本可以通过他们的商店来解决这个问题,但他们似乎没有这样做:Microsoft Store 的一些团队抄袭 AppGet 来创建 WinGet,最后又选择弃之不用;另外一些团队创建了MSIX(一种全新的安装包格式),也有其他一些团队创建了商店……
最近出现了一些适用于 Windows 的“包管理器”——nuget、choclaty、scoop、winget 等……可惜,这些只是在弥补漏洞。因为 Windows 中很多东西都不是开源的,所以他们仍然没有自己的包存储库、可复制的构建、包签名等,只能自动化进入网站、下载安装程序以及运行的过程。
Windows 的这些“包管理器”只是在单纯的自动下载和安装,还称不上是真正的包管理器。而 Linux 的包管理器并不像 Windows 的一样,它们通常会执行以下操作:
1.拥有某种形式的包存储库,主要存储包列表、元数据和二进制安装包,有时也会存储源代码
2.包签名、可复制的构建、安全下载等
3.浏览和搜索这些包
4.在本地安装存储库中的包,这意味着:
(1)如果是源码包系统,需要编译源码并进行测试
(2)将文件复制到系统中,将它们放在正确的位置,然后运行可选的安装脚本和钩子
(3)记录所有安装的文件,了解哪个文件属于哪个包
5.卸载时:
(1)自动删除所有的包文件
(2)运行可选的卸载脚本和钩子
(3)确保软件被安全彻底地卸载
6.能够更新软件包,这意味着:
(1)知道安装了哪些包,以及什么版本
(2)能够下载和更新任何过时的包
重要的是,整个操作系统以及所有应用程序都是通过这个系统安装的,一切都以相同的方式安装和更新。
更不用说 Nix 包管理器和 NixOS一起进行的完全下层的东西了。
客观来说,Microsoft Store 的 MSI(管理信息系统)确实做了一些还不错的事,只是 MSI 软件包从刚开始到现在都很难创建,所以很多软件仍然没有使用 MSI 文件,因此 20 年后它们还带有 Nullsoft/InstallShield/Inno/homegrown setup.exe。不过,有一个新的 MSIX 系统还不错,它更容易创建,并且增加了应用的集装箱化/沙盒化(如 flatpak/snap)及更新,但由于是新的,所以几乎没有人使用它。
即使考虑到这一点,似乎也没有一种观念认为:系统作为一个整体可以提供某种内聚力的应用程序安装和更新体验。据我所知,Windows Update 为操作系统提供了这个功能,不过即使它们使用了新的 MSIX 安装程序系统,应用程序也还是单独更新的。我认为 Microsoft Store 应该这样做,因为这样我们就可以从中安装少量的应用了。
除此之外,这些不同的“包管理器”并不都有相同的包/应用程序可用,所以你最终可能会安装好几个“包管理器”。此外,由于“包管理器”并不支持所有更新,所以当你想更新时,必须记住你安装的是哪个东西。
我完全理解它的历史和商业原因,但与 Linux 相比,它对终端用户来说仍然是一个非常糟糕的体验。
解决方案:
到目前为止,Scoop(Windows 下的安装源搜索工具)似乎是最好的。
$ scoop search wget
$ scoop info postgres
$ scoop install coreutils wget xh bat ripgrep
安装在 Windows 上的 shell 和终端应用非常糟糕,就像 20 世纪 80 年代的 DOS(磁盘操作系统)在一个窗口中坏了——自从我 15 年前最后一次使用它们以来就再也没有改变过。现在有一个名为 PowerShell 的新 shell 可以在你那可怕的 80 年代的终端窗口中运行,但在其中运行的终端仍然很糟糕。
我有时候在想,VS Code(跨平台编辑器)团队在编辑器的内置终端上投入了这么多精力的原因究竟是什么。我曾经在 Linux 上尝试过一次,然后再也没有碰过它,因为我的编辑器旁边的终端窗口在各方面都要好得多。在我使用 Windows 终端一段时间后,终于理解它存在的理由了。
解决方案:
事实证明,这个问题的答案是安装 Windows 终端。
在这个终端内运行的 shell 是可配置的,不过我目前正在使用的是 PowerShell。我认为,如果你愿意学习它,将会发现它的功能相当强大。比起 cmd.exe + 旧 shell,这无疑是巨大改进。
一天早上,当我登录上 Windows 时,我惊讶的发现:一夜之间我丢失了所有打开的终端、SSH(安全外壳协议)会话以及所有的 VSCode 窗口。由于我的 Outlook、Teams 和 Edge 窗口都还在,所以我最初以为是它们崩溃了,但在浏览了事件查看器之后,我发现实际是 Windows Update 在没有询问我的情况下重新启动了机器!
事实证明,有些 Windows 应用程序是“可重新启动的”,而有些则不是——这意味着当你重新启动时,它们会重新加载所有窗口。
我后来发现 Windows Terminal Preview Edition(Windows 终端预览版)现在也是“可重新启动的”。但这并不奇怪,它仅意味着你的终端窗口和选项卡会返回,而不是它们的内容或 SSH 会话等。
而我们在 Linux 领域做事的方式是:
$ uptime
09:33:15 up 56 days, 16:33, 1 user, load average: 1.36, 1.29, 0.91
解决方案:
你可以关闭这个功能——除非你的 IT 部门已通过政策设置了此功能,比如我就是这种情况。
Linux 一直以来(30 年)都拥有坚如磐石的多个虚拟桌面/工作区的支持,而 Windows 10 却才实现这一点。以前虚拟桌面/工作区可通过第三方软件实现,但根据我的经验,它非常的“黑客”,而且效果不好。
使用多个工作区/虚拟桌面是我在 Linux 上工作流程的核心部分——我目前有 20 个工作区,所以这对我来说相当重要。
Windows 10 中的这个功能似乎比以前的第三方软件更好用,但我对它仍有一些不满:
除非回到切换器中,否则没有办法看到你在哪个桌面上。
据我所知,win+tab 桌面切换器屏幕可以做很多事情——包括在桌面之间移动窗口的唯一方法,但它可能有点慢且不稳定。
当应用程序重新启动时,它们最终都会出现在第一个桌面上,但因为很明显,所以 Microsoft Store 的人不会使用多个桌面。
解决方案:
安装虚拟桌面指示器以在任务栏中获取桌面编号指示器,在切换和鼠标滚轮切换时弹出桌面名称。
安装 PersistentWindows(多屏调整工具),它能够实时跟踪窗口位置,并自动将窗口布局恢复到上次匹配的监视器设置。
似乎当 Windows 将 DisplayPort 显示器发送到睡眠状态时,它每一次都会马上忘记自己执行了此操作,并表现得像你断开了它们的连接一样,然后将这些显示器上的所有窗口移动到主显示器上。因此,当你唤醒它时,你必须再次将所有的窗户放回原来的位置。
这种情况似乎自 Windows 7 发布以来就一直在发生,对此好多人都在抱怨但却无济于事。
解决方案:
将屏幕睡眠超时设置得很长,或者在接通电源时关闭
安装 PersistentWindows——实时跟踪窗口位置,并自动将窗口布局恢复到上次匹配的显示器设置
Linux 有多个剪切板,默认有主选区和次选区。要注意,主选区和次选区并不是主要和次要的关系,只是功能不同,如主选区始终有你从任何地方选择的最后一个文本的副本,你可以通过点击鼠标中键粘贴到任何地方。你只需选择一些文本即可——你不需要再执行任何其他操作,然后你可以在任意位置单击鼠标中键粘贴。另外,“辅助”剪贴板可以进行“正常”的剪切、复制、粘贴、Ctrl+c 与 Ctrl+v 中的一项。
主剪贴板非常有用,但 Windows 完全没有任何等同的东西。
Windows 终端可以在右键单击时粘贴剪贴板的内容,并将最后一个选择复制到剪贴板上,但这只在 Windows 终端中起作用。另外,因为 Windows 只有一个剪贴板,所以每次你在 Windows 终端中选择任何内容时,它都会覆盖剪贴板,而 Linux 有另一个剪贴板的原因就是防止这种情况的出现。
解决方案:
什么都没有?
我听说 PuTTY(一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件)是 Windows 上很好的 SSH,所以我尝试使用过,但最终发现它……一点也不好。不过 PowerShell 的确带有一个 SSH 客户端,所以一旦你有了一个合理的终端,你就可以正常地使用 SSH。
解决方案:
使用 Windows/PowerShell 自带的 SSH。
我已经开始使用一些有用的键盘快捷键了:
同样,这些都不是完全可定制的——你可以通过使用 PowerToys 键盘管理器获得更多的全局热键定制,但是由于某种原因,有很多组合都是不可能的。比如我想用 Win+Enter 来启动一个新的终端窗口,以匹配我的 Linux 工作流程,但这种组合就是不被允许的。
不少网友在阅读完 Duncan Lock 作者的这篇文章后,都发表了自己的一些看法。一部分网友对 Duncan Lock 的观点表示赞同:
网友@cmehdy:“在切换到 Windows 之前,我也曾使用了 Mac 10 年以上,而我的感受和文章讲的基本相同。”
网友@brokenmachine:“我在家里同时使用 Linux 和 Windows,虽然每当我在 Linux PC 上进行更新时,它总是会破坏很多东西,但通常我可以修复所有内容,并且在修复后它仍然可以保持原来的状态并可靠地工作,直到我选择进行另一次更新为止,所以我仍然喜欢 Linux。而我使用 Windows 的唯一原因是有些软件无法在 Linux 上运行。”
也有一部分网友并不赞同 Duncan Lock 的观点,认为他的评价有失公正:
网友@jmmv:“切换平台、重新适应是需要很长时间的,如果没有经过长时间的调整,那么很容易产生抱怨的,而且很难提供公平的评价......”
网友@libraryatnight:“作为一个整天使用 AD、Azure 和 Windows 服务器的人,我认为 Windows Powershell 是非常棒的。”
那么,你是否满意目前的 Windows 系统,对它又有何看法?
参考链接:https://news.ycombinator.com/item?id=30944438
https://duncanlock.net/blog/2022/04/06/using-windows-after-15-years-on-linux/
本文转自公众号“CSDN”,ID:CSDNnews
---END---