Below：一个时间旅行的资源监控器

Summary: 一个用于现代 Linux 系统的 Apache 2.0 许可的资源监视器。below 可以让你重放以前记录的数据。

![](/data/attachment/album/202110/06/093522hdsb82nm1cb4b4b6.jpg)

在这篇文章中，我们将介绍 `below`：一个用于现代 Linux 系统的 Apache 2.0 许可的资源监视器。`below` 可以让你重放以前记录的数据。

![](/data/attachment/album/202110/06/093147jq8qbn12yiqijfpx.jpg)

### 背景

内核的主要职责之一是调度对资源的访问。有时这可能意味着分配物理内存，使多个进程可以共享同一主机。其他时候，它可能意味着确保 CPU 时间的公平分配。在这些场景里，内核提供了机制，而将策略留给了“别人”。近来，这个“别人”通常是 systemd 或 dockerd 这样的运行时。运行时接受来自调度器或最终用户的输入（类似于运行什么和如何运行）并在内核上转动正确的旋钮和拉动正确的杠杆，从而使工作负载能够*好好*工作。

在一个完美的世界里，故事就到此结束了。然而，现实情况是，资源管理是一个复杂的、相当不透明的技术混合体，在几十年里计算技术不断发展。尽管其中一些技术有各种缺陷和死角，但最终的结果是，容器运作得比较好。虽然用户通常不需要关心这些细节，但对于基础设施运营商来说，对他们的技术架构拥有可见性是至关重要的。可见性和可调试性对于检测和调查错误的配置、问题和系统性故障至关重要。

让事情变得更加复杂的是，资源中断往往难以重现。经常需要花费数周时间等待一个问题重新出现，以便调查其根本原因。规模的扩大进一步加剧了这个问题：我们不能在*每台*主机上运行一个自定义脚本，希望在错误再次发生时记录下关键状态的片段。因此，需要更复杂的工具。这就出现了 `below`。

### 动机

历史上，Facebook 一直是 [atop](https://www.atoptool.nl/) 的忠实用户。`atop` 是一个用于 Linux 的性能监视器，能够报告所有进程的活动以及各种系统级活动。与 `htop` 等工具相比，`atop` 最引人注目的功能之一是能够作为一个守护程序记录历史数据。这听起来是一个简单的功能，但在实践中，这使得调试无数的生产问题成为可能。有了足够长的数据保留，就有可能在时间上回溯，查看在问题或故障发生之前、期间和之后的主机状态。

不幸的是，随着时间的推移，人们发现`atop` 有某些不足之处。首先，<ruby> <a href="https://en.wikipedia.org/wiki/Cgroups">  控制组 </a> <rt>  cgroup </rt></ruby> 已经成为控制和监视 Linux 机器上资源的实际方式。`atop` 仍然缺乏对这一基本构建模块的支持。第二，`atop` 用自定义的 delta 压缩方法在磁盘上存储数据。这在正常情况下运行良好，但在沉重的资源压力下，主机很可能会丢失数据点。由于使用了 delta 压缩，在数据最重要的时间段内，数据可能会大面积丢失。第三，用户体验有一个陡峭的学习曲线。我们经常听到 `atop` 的资深用户说，他们喜欢密集的布局和众多的键盘绑定。然而，这也是一把双刃剑。当一个刚进入这个领域的人想要调试一个生产问题时，他们现在要同时解决两个问题：手头的问题和如何使用 `atop`。

`below` 是由 Facebook 的资源控制团队为其设计和开发的，并得到了 `atop` 生产环境用户的支持。顾名思义，资源控制团队负责的是规模化的资源管理。该团队由内核开发人员、容器运行时开发人员和硬件人员组成。认识到下一代系统监控器的机会，我们在设计 `below` 时考虑到以下几点：

* 易用性：`below` 必须既能为新用户提供直观的体验，又能为日常用户提供强大的功能。 \*有意义的统计数据：`below` 显示准确和有用的统计数据。即便可以，但我们尽量避免收集和倾倒统计数字。
* 灵活性：当默认设置不合适时，我们允许用户自定义他们的体验。例如包括可配置的键绑定、可配置的默认视图，以及脚本界面（默认为终端用户接口）。

### 安装

安装该软件包：

```
# dnf install -y below

```

打开记录守护进程：

```
# systemctl enable --now below

```

### 快速介绍

`below` 最常用的模式是重放模式。顾名思义，重放模式是重放以前记录的数据。假设你已经启动了记录守护程序，那么通过运行以下程序启动一个会话：

```
$ below replay --time "5 minutes ago"

```

然后你会看到控制组视图：

![](/data/attachment/album/202110/06/093148pjt6aa4nm4my6mot.png)

如果你不知道该怎么操作，或者忘记了一个键位，按 `?` 可以进入帮助菜单。

屏幕的最上方是状态栏。状态栏显示关于当前样本的信息。你可以通过按 `t` 和 `T` 分别向前和向后移动样本。中间的部分是系统概览。系统概览包含了关于整个系统的统计数据，一般来说，这些数据总是很有用的。第三部分也是最下面的部分是多用途视图。上面的图片显示了控制组视图。此外，还有进程和系统视图，分别通过按 `p` 和`s` 来访问。

按 `↑` 和 `↓` 来移动列表选择。按回车键来折叠和展开控制组。假设你发现了一个感兴趣的控制组，你想看看它里面有哪些进程在运行。要放大进程视图，选择控制组并按 `z`：

![](/data/attachment/album/202110/06/093149aiqozqniiiiqi97h.png)

再按 `z` 返回到控制组视图。这个视图有时会有点长。如果你对你要找的东西有一个模糊的概念，你可以通过按 `/` 并输入一个过滤器来过滤控制组名称。

![](/data/attachment/album/202110/06/093150lwn16dadjm7vvqq2.png)

在这一点上，你可能已经注意到了一个我们还没有探索过的标签系统。要在标签中向前和向后循环，可以分别按 `Tab` 和 `Shift` + `Tab`。我们把这个问题留给读者去做练习。

### 其他功能

在底层，`below` 有一个强大的设计和架构。Facebook 正在不断升级到更新的内核，所以我们从不假设数据源是可用的。这种默契的假设使得内核和 `below`版本之间能够完全向前和向后兼容。此外，每个数据点都用 zstd 压缩并完整地存储。这解决了我们看到的 `atop` 在大规模时的 delta 压缩问题。根据我们的测试，我们的每个样本压缩可以达到平均 5 倍的压缩率。

`below` 也使用 [eBPF][8] 来收集关于短暂进程（生存时间短于数据收集间隔的进程）的信息。相比之下，`atop` 使用 BSD 进程核算来实现这一功能，这是一个已知缓慢且容易发生优先级转换的内核接口。

对于用户来说，`below` 还支持实时模式和一个转储接口。实时模式将记录守护程序和 TUI 会话合并到一个进程中。这对于浏览系统状态是很方便的，不需要为数据存储投入长期运行的守护程序或磁盘空间。转储接口是一个可编写脚本的接口，用于所有的 `below` 数据存储。转储既强大又灵活，详细的数据以 CSV、JSON 和人类可读格式提供。

### 总结

`below` 是一个 Apache 2.0 许可的开源项目，我们（`below` 的开发者）认为它比资源监控领域的现有工具具有引人注目的优势。我们已经花了大量的精力来准备 `below`，以提供开源使用，所以我们希望读者和社区有机会尝试 `below`，并报告错误和功能要求。

---

via: <https://fedoramagazine.org/below-a-time-traveling-resource-monitor/>

作者：[Daniel Xu](https://fedoramagazine.org/author/dxuu/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


学习 Core Java 的 8 个原因

今天的是阿三那边的文章？XD

查了下，原作者确实是三哥。就职于一家印度公司。

吐槽一下，我逛linuxcn，是因为时不时可以读到冷僻的技术文章和最新的技术新闻。

这么肤浅内容的文章，登载受众是谁？

因为也有人希望读到初级的文章啊。

>
> 在学习建立在 Java 之上的所有相关工具时，了解 Core Java 会给你带来很大的优势。
>
>
>

![](/data/attachment/album/202110/06/094720iax1d49c5sc0sd48.jpg "Learning and studying technology is the key to success")

计算机编程（也被称为 *编码*）的重点不是使用哪种编程语言，而是发展编程逻辑和学习像程序员一样思考。你一开始使用的编程语言应该是在这一努力过程中对你帮助最大的语言。因此，你必须问自己一个问题，“作为一个程序员，你想开发什么？”

例如，如果你想从事安卓应用开发、视频游戏开发、桌面 GUI 应用，或者只是一般的软件开发，我认为学习 Java 是一个很好的选择。我选择的语言是 Java，它为我提供了一个完整的编程世界。在我居住的印度，Java 程序员的平均工资约为每年 59 万印度卢比（LPA）（根据你的经验，可以高达 100 LPA）。

不过，Java 是一种庞大的语言，有很多框架和变体可供选择。Core Java 是科技行业发展出来的术语，指的是 Java 语言的中心组件，人们用它来编写框架，并围绕 Java 发展了丰富的产业。我认为，Core Java 是你能获得的最强大的技能之一，因为在学习建立在它之上的所有相关工具时，了解 Java 的基础知识会给你带来巨大的优势。

以下是我选择 Core Java 的八大理由，我想你也会认可：

### 1、Java 是一种不断发展的编程语言

Java 有重要的企业支持，但 Java 开发中最重要的组成部分是 [OpenJDK](https://developer.ibm.com/components/open-jdk/)，这是个开源的 Java 开发工具包。OpenJDK 社区以促进和维护开发源码、开放创新和开放标准为使命，致力于改进和维护 Java 及其工具链的开源实现。

它的每一个版本都会增加创新和便利，使 Java 对开发者和用户都更容易。例如，就在 Java 11 中，他们增加了运行 .java 文件的能力。现在，运行一个单文件的 Java 应用程序所需要的只是 `java` 命令，不需要进行编译：

```
$ java ./hello.java

Hello world

```

你可以使用 Java 做 Web、移动或桌面的应用程序编程。它是一种高度通用的语言。它有许多有趣的特点，如动态编码、多种安全功能、平台无关的特点和以网络为中心的设计。

### 2、Java 锚定了安卓应用开发

你可以使用 Java 来创建安卓用程序。安卓市场巨大，对移动程序员的需求只会越来越大。即使你对成为一个专业的应用程序开发人员不感兴趣，定制你的移动体验的能力也是很强大的，而 Java 使之成为可能。

而且，这比你想象的要容易得多！学习 Core Java 可以让你轻松地掌握安卓开发工具包或可以输出到移动平台的框架，如 [Processing](http://processing.org/)。

### 3、丰富的 API 使得 Java 易于使用

Java 的 API（<ruby> 应用编程接口 <rt>  Application Programming Interface </rt></ruby>）包括类、包、接口等。Java 主要有三种类型的 API：

* 官方的 Java Core API
* 最佳的官方 Java API
* 非官方的 API

API 使编程更容易，因为你可以在不知道其内部实现的情况下构建应用程序。根据我的经验，许多公司喜欢用 Java 而不是其他选择，就是因为 Java API 的力量。

### 4、开源库

几乎有无穷无尽的 Java 开源库，包括 Maven、Guava、Apache Commons、Jhipster，等等。你可以复制、学习和分享这些库的资源。它们使编程更容易获得、更快、更便宜，也更有教育意义。

### 5、Java 有可靠的开发工具

Java 有一些我最喜欢的 IDE（<ruby> 集成开发环境 <rt>  Integrated Development Environments </rt></ruby>），包括 [Eclipse](https://opensource.com/article/20/12/eclipse)、[NetBeans](https://opensource.com/article/20/12/netbeans)、[BlueJ](https://opensource.com/article/20/7/ide-java#bluej) 和 IntelliJ IDEA。它们提供了调试、语法高亮、代码补完、语言支持、自动重构等功能。简而言之，IDE 在 Java 的成功和你在 Java 学习中起着至关重要的作用！

### 6、印度对 Java 开发人员的需求

谷歌、Netflix 和 Instagram 等巨头都使用 Java 进行后台开发。印度公司正在积极寻找雇用 Java 程序员来开发安卓应用程序、新的 API 和云上的微服务。这种需求转化为更多的工作机会。

### 7、Java 有庞大的编程社区

Java 程序员的社区庞大，囊括了从初学者到专家的所有人。我发现这个社区很热情待人，当你寻求支持的时候，他们会给予帮助。最重要的是，通过参与在线讨论，我学到了大量的新技巧。作为社区的一分子，这是我了解最新趋势、学习更多语言和跟上发展的重要途径。

### 8、Java 是独立于平台

Java 是平台无关的，这一点使它具有很高的价值。Java 源代码被编译成字节码，在 Java 虚拟机（JVM）上运行。任何运行 JVM 的平台（支持所有主要平台）都可以运行你的 Java 应用程序。你只需写一次，就可以在任何地方运行！这并不只是理论上的，Java 实际上已经实现了这一点。你可以在你开发的任何平台上编写 Java，并将其交付给你的所有目标平台。

网上有很多学习 Java 的资源，包括 [Opensource.com](http://Opensource.com) 上有一个 [速查表](https://opensource.com/downloads/java-cheat-sheet)。还有一个很好的 [在线 Java 课程](https://www.learnvern.com/course/core-java-programming-tutorial)，可以用印地语免费学习。

---

via: <https://opensource.com/article/21/10/why-i-learned-core-java>

作者：[Shantam Sahai](https://opensource.com/users/shantam-sahai) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #416 微软的 .NET 基金会受到辞职的前董事抨击

Summary: 更多：• Firefox Focus 迎来重大更新 • 科学家可以在几分钟内将数据记录到 DNA 上

![](/data/attachment/album/202110/06/143202jbbbb0lw48bwx88l.jpg)

### 微软的 .NET 基金会受到辞职的前董事抨击

![](/data/attachment/album/202110/06/143210t989trjjj7lw630z.jpg)

微软的 .NET 基金会是为了管理和支持开源的 .NET 和相关项目而设立的，但其作用受到了 [一位前董事会成员的质疑](https://www.theregister.com/2021/10/05/microsoft_net_foundation_under_fire/)，这位成员因沮丧而辞职。该成员认为，“基金会对社区的任何事情都不透明”，并质疑，“你们是来执行微软对 .NET 开源的意志，还是来帮助培养和促进一个健康的社区？对于后者来说，成绩看起来并不理想。”他对基金会提出的“成熟度模型”意见很大，“它看起来太微软的官僚主义，……更多关注的是监督和命令，而不是培养和帮助。”

>
> 老王点评：被单一官方支持的基金会，往往和社区主导的基金会的行为模式大相径庭。似乎我们确实没有感受到 .NET 基金会发挥的作用。
>
>
>

### Firefox Focus 迎来重大更新

![](/data/attachment/album/202110/06/143252pruvp1v9umm3j33z.jpg)

Firefox Focus 推出于 2016 年，是一个以隐私为重点的移动浏览器。[这次的更新](https://www.engadget.com/mozilla-firefox-focus-mobile-updates-130514586.html) 增加了新的外观标识、快捷键和更多隐私控制。此外它还带来了一个新的盾牌图标，让用户可以直接从图标上快速打开和关闭跟踪器，并增加了一个新的全局计数器，向用户显示他们被屏蔽的所有跟踪器。

>
> 老王点评：在 FireFox 市场份额急剧丢失的今天，似乎 Firefox Focus 还值得一观。
>
>
>

### 科学家可以在几分钟内将数据记录到 DNA 上

![](/data/attachment/album/202110/06/143310x8th66lrln7p8wz8.jpg)

西北大学的研究人员设计了一种 [将信息记录到 DNA 的新方法](https://interestingengineering.com/scientists-have-successfully-recorded-data-to-dna-in-a-few-short-minutes)，只需几分钟而不是几小时或几天。目前依赖于将新信息与现有 DNA 序列相结合的多部分过程，这可能需要超过 10 小时才能完成。他们发现的新方法利用一种新的酶系统合成全新的 DNA，而不是复制它的一个模板。该方法使数据能够在几分钟内被记录到遗传密码中。

>
> 老王点评：随着技术的进步，人类越来越对 DNA 缺乏“敬畏”了，我觉得或许有一天会发现我们那么多静默的 DNA 片段里面记录了些什么。
>
>
>


由 Facebook 事故引发的 BGP 工具探索

Summary: 这篇博文展示了一些你可以用来查询 BGP 信息的工具。

原来如此

这篇博文展示了一些你可以用来查询 BGP 信息的工具。

![](/data/attachment/album/202110/07/093743krr8ftrpvgfrvffx.jpg)

昨天，Facebook 发生了由 BGP 引起的离线事故。我对学习更多关于 BGP 的知识已经隐约感兴趣了很长时间，所以我阅读了一些文章。

我感到很沮丧，因为没有一篇文章告诉我如何在我的电脑上实际查找与 BGP 有关的信息，因此我 [写了一条询问有关工具的推特](https://twitter.com/b0rk/status/1445199475195236356)。

我一如既往地得到了一堆有用的回复，所以这篇博文展示了一些你可以用来查询 BGP 信息的工具。这篇文章中可能会有较多的错误，因为我对 BGP 不是很了解。

### 我不能发布 BGP 路由

我从来没有了解过 BGP 的原因之一是，据我所知，我没有在互联网上发布 BGP 路由的权限。

对于大多数网络协议，如果需要，你可以非常轻松地自己实现该协议。例如，你可以：

* 发行你自己的 TLS 证书
* 编写你自己的 HTTP 服务器
* 编写你自己的 TCP 实现
* 为你的域名编写你自己的权威 DNS 服务器（我现在正在为一个小项目尝试这样做）
* 建立你自己的证书机构（CA）

但是对于 BGP，我认为除非你拥有自己的 ASN，否则你不能自己发布路由（你*可以*在你的家庭网络上实现 BGP，但这对我来说有点无聊，当我做实验的时候，我希望它们真的在真正的互联网上）。

无论如何，尽管我不能用它做实验，但我仍然认为它超级有趣，因为我喜欢网络，所以我将向你展示我找到的一些用来学习 BGP 的工具。

首先我们来谈谈 BGP 的一些术语。我打算很快掠过，因为我对工具更感兴趣，而且网上有很多关于 BGP 的高水平解释（比如这篇 [cloudflare 的文章](https://blog.cloudflare.com/october-2021-facebook-outage/)）。

### AS 是什么？

我们首先需要了解的是 AS（“<ruby> 自治系统 <rt>  autonomous system </rt></ruby>”）。每个 AS：

1. 由一个组织拥有（通常是一个大型组织，如你的 ISP、政府、大学、Facebook 等）。
2. 控制一组特定的 IP 地址（例如，我的 ISP 的 AS 包括 247,808 个 IP 地址）。
3. 有一个编号 ASN（如 1403）。

下面是我通过做一些实验对 AS 的一些观察：

* 一些相当大的科技公司并没有自己的 AS。例如，我在 BGPView 上查看了 Patreon，就我所知，他们没有自己的 AS，他们的主要网站（`patreon.com`，[104.16.6.49](https://bgpview.io/ip/104.16.6.49)）在 Cloudflare 的 AS 中。
* 一个 AS 可以包括许多国家的 IP。Facebook 的 AS（[AS32934](https://bgpview.io/asn/32934#prefixes-v4)）肯定有新加坡、加拿大、尼日利亚、肯尼亚、美国和其他国家的 IP 地址。
* 似乎 IP 地址可以在一个以上的 AS 中。例如，如果我查找 [209.216.230.240](https://bgpview.io/ip/209.216.230.240)，它有 2 个 ASN 与之相关：`AS6130` 和 `AS21581`。显然，当这种情况发生时，更具体的路线会被优先考虑 —— 所以到该 IP 的数据包会被路由到 `AS21581`。

### 什么是 BGP 路由？

互联网上有很多的路由器。例如，我的 ISP 就有路由器。

当我给我的 ISP 发送一个数据包时（例如通过运行 `ping 129.134.30.0`），我的 ISP 的路由器需要弄清楚如何将我的数据包实际送到 IP 地址 `129.134.30.0`。

路由器计算的方法是，它有一个**路由表**：这是个有一堆 IP 地址范围的列表（比如 `129.134.30.0/23`），以及它知道的到达该子网的路由。

下面是一个 `129.134.30.0/23` （Facebook 的一个子网）的真实路由的例子。这不是来自我的 ISP。

```
11670 32934
  206.108.35.2 from 206.108.35.254 (206.108.35.254)
    Origin IGP, metric 0, valid, external
    Community: 3856:55000
    Last update: Mon Oct  4 21:17:33 2021

```

我认为这是在说通往 `129.134.30.0` 的一条路径是通过机器 `206.108.35.2`，这是在它的本地网络上。所以路由器接下来可能会把我的 ping 包发送到 `206.108.35.2`，然后 `206.108.35.2` 会知道如何把它送到 Facebook。开头的两个数字（`11670 32934`）是 ASN。

### BGP 是什么？

我对 BGP 的理解非常浅薄，它是一个公司用来公布 BGP 路由的协议。

昨天发生在 Facebook 身上的事情基本上是他们发布了一个 BGP 公告，撤销了他们所有的 BGP 路由，所以世界上的每个路由器都删除了所有与 Facebook 有关的路由，没有流量可以到达那里。

好了，现在我们已经涵盖了一些基本的术语，让我们来谈谈你可以用来查看 AS 和 BGP 的工具吧！

### 工具 1：用 BGPView 查看你的 ISP 的 AS

为了使 AS 这个东西不那么抽象，让我们用一个叫做 [BGPView](https://bgpview.io)的 工具来看看一个真实的 AS。

我的 ISP（EBOX）拥有 [AS 1403](https://bgpview.io/asn/1403)。这是 [我的 ISP 拥有的 IP 地址](https://bgpview.io/asn/1403#prefixes-v4)。如果我查找我的计算机的公共 IPv4 地址，我可以看到它是我的 ISP 拥有的IP地址之一：它在 `104.163.128.0/17` 块中。

BGPView 也有这个图，显示了我的 ISP 与其他 AS 的连接情况。

![](/data/attachment/album/202110/07/093746uzbsdyq1wffs3q8s.png)

### 工具 2：traceroute -A 和 mtr -z

好了，我们感兴趣的是 AS 。让我们看看我从哪些 AS 中穿过。

`traceroute` 和 `mtr` 都有选项可以告诉你每个 IP 的 ASN。其选项分别是 `traceroute -A` 和 `mtr -z`。

让我们看看我用 `mtr` 在去 `facebook.com` 的路上经过了哪些 AS！

```
$ mtr -z facebook.com
 1. AS???    LEDE.lan
 2. AS1403   104-163-190-1.qc.cable.ebox.net
 3. AS???    10.170.192.58
 4. AS1403   0.et-5-2-0.er1.mtl7.yul.ebox.ca
 5. AS1403   0.ae17.er2.mtl3.yul.ebox.ca
 6. AS1403   0.ae0.er1.151fw.yyz.ebox.ca
 7. AS???    facebook-a.ip4.torontointernetxchange.net
 8. AS32934  po103.psw01.yyz1.tfbnw.net
 9. AS32934  157.240.38.75
10. AS32934  edge-star-mini-shv-01-yyz1.facebook.com

```

这很有意思，看起来我们直接从我的 ISP 的 AS（`1403`）到 Facebook 的 AS（`32934`），中间有一个“互联网交换”。

>
> 我不确定 <ruby> <a href="https://en.wikipedia.org/wiki/Internet_exchange_point">  互联网交换 </a> <rt>  internet exchange </rt></ruby>（IX）是什么，但我知道它是互联网的一个极其重要的部分。不过这将是以后的事了。我猜是，它是互联网中实现“对等”的部分，就假设它是一个有巨大的交换机的机房，里面有无限的带宽，一堆不同的公司把他们的电脑放在里面，这样他们就可以互相发送数据包。
>
>
>

#### mtr 用 DNS 查找 ASN

我对 `mtr` 如何查找 ASN 感到好奇，所以我使用了 `strace`。我看到它看起来像是在使用 DNS，所以我运行了 [dnspeep](https://github.com/jvns/dnspeep/)，然后就看到了！

```
$ sudo dnspeep
...
TXT   1.190.163.104.origin.asn.cymru.com 192.168.1.1          TXT: 1403 | 104.163.176.0/20 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.160.0/19 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.128.0/17 | CA | arin | 2014-08-14
...

```

所以，看起来我们可以通过查找 `1.190.163.104.origin.asn.cymru.com` 上的 `txt` 记录找到 `104.163.190.1` 的 ASN，像这样：

```
$ dig txt 1.190.163.104.origin.asn.cymru.com
1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.160.0/19 | CA | arin | 2014-08-14"
1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.128.0/17 | CA | arin | 2014-08-14"
1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.176.0/20 | CA | arin | 2014-08-14"

```

这很好！让我们继续前进吧。

### 工具 3：数据包交换所的观察镜

PCH（“<ruby> 数据包交换所 <rt>  packet clearing house </rt></ruby>”）是运行大量互联网交换点的组织。“<ruby> 观察镜 <rt>  looking glass </rt></ruby>”似乎是一个通用术语，指的是让你从另一个人的计算机上运行网络命令的 Web 表单。有一些观察镜不支持 BGP，但我只对那些能显示 BGP 路由信息的观察镜感兴趣。

这里是 PCH 的观察镜： <https://www.pch.net/tools/looking_glass/> 。

在该网站的 Web 表单中，我选择了多伦多 IX（“TORIX”），因为 `mtr` 说我是用它来访问 `facebook.com` 的。

#### 操作 1：显示 ip bgp 摘要

下面是输出结果。我修改了其中的一些内容：

```
IPv4 Unicast Summary:
BGP router identifier 74.80.118.4, local AS number 3856 vrf-id 0
BGP table version 33061919
RIB entries 513241, using 90 MiB of memory
Peers 147, using 3003 KiB of memory
Peer groups 8, using 512 bytes of memory

Neighbor        V         AS MsgRcvd MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd
...
206.108.34.248  4       1403  484672  466938        0    0    0 05w3d03h           50
...
206.108.35.2    4      32934  482088  466714        0    0    0 01w6d07h           38
206.108.35.3    4      32934  482019  466475        0    0    0 01w0d06h           38
...

Total number of neighbors 147

```

我的理解是，多伦多 IX（“TORIX”）直接连接到我的 ISP （EBOX，AS 1403）和 Facebook（AS 32934）。

#### 操作 2：显示 ip bgp 129.134.30.0

这是筛选自 `show ip bgp` 对 `129.134.30.0`（Facebook 的一个 IP 地址）的输出：

```
BGP routing table entry for 129.134.30.0/23
Paths: (4 available, best #4, table default)
  Advertised to non peer-group peers:
  206.220.231.55
  11670 32934
    206.108.35.2 from 206.108.35.254 (206.108.35.254)
      Origin IGP, metric 0, valid, external
      Community: 3856:55000
      Last update: Mon Oct  4 21:17:33 2021

  11670 32934
    206.108.35.2 from 206.108.35.253 (206.108.35.253)
      Origin IGP, metric 0, valid, external
      Community: 3856:55000
      Last update: Mon Oct  4 21:17:31 2021

  32934
    206.108.35.3 from 206.108.35.3 (157.240.58.225)
      Origin IGP, metric 0, valid, external, multipath
      Community: 3856:55000
      Last update: Mon Oct  4 21:17:27 2021

  32934
    206.108.35.2 from 206.108.35.2 (157.240.58.182)
      Origin IGP, metric 0, valid, external, multipath, best (Older Path)
      Community: 3856:55000
      Last update: Mon Oct  4 21:17:27 2021

```

这似乎是在说，从该 IX 到 Facebook 有 4 条路线。

**魁北克 IX 似乎对 Facebook 一无所知**。

我也试过从魁北克 IX（“QIX”，它可能离我更近，因为我住在蒙特利尔而不是多伦多）做同样的事情。但 QIX 似乎对 Facebook 一无所知：当我输入`129.134.30.0` 时，它只是说 “% 网络不在表中”。

所以我想这就是为什么我被送到多伦多 IX 而不是魁北克的 IX。

#### 更多的 BGP 观察镜

这里还有一些带观察镜的网站，可以从其他角度给你类似的信息。它们似乎都支持相同的 `show ip bgp` 语法，也许是因为他们运行的是同一个软件？我不太确定。

* <http://www.routeviews.org/routeviews/index.php/collectors/>
* <http://www.routeservers.org/>
* <https://lg.he.net/>

似乎有很多这样的观察镜服务，远不止这 3 个列表。

这里有一个与这个列表上的一个服务器进行会话的例子：`route-views.routeviews.org`。这次我是通过 telnet 连接的，而不是通过 Web 表单，但输出的格式看起来是一样的。

```
$ telnet route-views.routeviews.org

route-views>show ip bgp 31.13.80.36

BGP routing table entry for 31.13.80.0/24, version 1053404087
Paths: (23 available, best #2, table default)
  Not advertised to any peer
  Refresh Epoch 1
  3267 1299 32934
    194.85.40.15 from 194.85.40.15 (185.141.126.1)
      Origin IGP, metric 0, localpref 100, valid, external
      path 7FE0C3340190 RPKI State valid
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
  6939 32934
    64.71.137.241 from 64.71.137.241 (216.218.252.164)
      Origin IGP, localpref 100, valid, external, best
      path 7FE135DB6500 RPKI State valid
      rx pathid: 0, tx pathid: 0x0
  Refresh Epoch 1
  701 174 32934
    137.39.3.55 from 137.39.3.55 (137.39.3.55)
      Origin IGP, localpref 100, valid, external
      path 7FE1604D3AF0 RPKI State valid
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
  20912 3257 1299 32934
    212.66.96.126 from 212.66.96.126 (212.66.96.126)
      Origin IGP, localpref 100, valid, external
      Community: 3257:8095 3257:30622 3257:50001 3257:53900 3257:53904 20912:65004
      path 7FE1195AF140 RPKI State valid
      rx pathid: 0, tx pathid: 0
  Refresh Epoch 1
  7660 2516 1299 32934
    203.181.248.168 from 203.181.248.168 (203.181.248.168)
      Origin IGP, localpref 100, valid, external
      Community: 2516:1030 7660:9001
      path 7FE0D195E7D0 RPKI State valid
      rx pathid: 0, tx pathid: 0

```

这里有几个路由的选择：

* `3267 1299 32934`
* `6939 32934`
* `701 174 32934`
* `20912 3257 1299 32934`
* `7660 2516 1299 32934`

我想这些都有不止一个 AS 的原因是，`31.13.80.36` 是 Facebook 在多伦多的 IP 地址，所以这个服务器（可能在美国西海岸，我不确定）不能直接连接到它，它需要先到另一个 AS。所以所有的路由都有一个或多个 ASN。

最短的是 `6939`（“Hurricane Electric”），它是一个 “全球互联网骨干”。他们也有自己的 [Hurricane Electric 观察镜](https://lg.he.net/) 页面。

### 工具 4：BGPlay

到目前为止，所有其他的工具都只是向我们展示了 Facebook 路由的当前状态，其中一切正常，但这第四个工具让我们看到了这个 Facebook BGP 互联网灾难的历史。这是一个 GUI 工具，所以我将包括一堆屏幕截图。

该工具在 <https://stat.ripe.net/special/bgplay>。我输入了 IP 地址 `129.134.30.12`（Facebook 的一个 IP），如果你想一起试试。

首先，让我们看看一切出错之前的状态。我点击了在 10 月 4 日 13:11:28 的时间线，得到了这个结果：

![](/data/attachment/album/202110/07/093746oyeaf1iuyqm5uwmz.png)

我最初发现这很让人不知所措。发生了什么事？但后来有人在推特上指出，下一个要看的地方是点击 Facebook 灾难发生后的时间线（10 月 4 日 18 点 38 分）。

![](/data/attachment/album/202110/07/093746bm0mohvic22fm07u.png)

很明显，这张图有问题：所有的 BGP 路线都不见了！哦，不要！

顶部的文字显示了最后一条 Facebook BGP 路由的消失：

```
Type: W > withdrawal Involving: 129.134.30.0/24
Short description: The route 50869, 25091, 32934 has been withdrawn.
Date and time: 2021-10-04 16:02:33 Collected by: 20-91.206.53.12

```

如果我再点击“<ruby> 快进 <rt>  fast forward </rt></ruby>”按钮，我们看到 BGP 路由开始回来了。

![](/data/attachment/album/202110/07/093746xy11g97y1vey7yvv.png)

第一个宣告的是 `137409 32934`。但我不认为这实际上是第一个宣布的，在同一秒内有很多路由宣告（在 2021-10-04 21:00:40），我认为 BGPlay 内部的排序是任意的。

如果我再次点击“<ruby> 快进 <rt>  fast forward </rt></ruby>”按钮，越来越多的路由开始回来，路由开始恢复正常。

我发现在 BGPlay 里看这个故障真的很有趣，尽管一开始界面很混乱。

### 也许了解一下 BGP 是很重要的？

我在这篇文章的开头说，你不能改变 BGP 路由，但后来我想起在 2016 年或 2017 年，有一个 [Telia 路由问题](https://news.ycombinator.com/item?id=14246888)，给我们的工作造成了一些小的网络问题。而当这种情况发生时，了解为什么你的客户无法到达你的网站其实是很有用的，即使它完全不受你控制。当时我不知道这些工具，但我希望能知道！

我认为对于大多数公司来说，应对由其他人的错误 BGP 路由造成的中断，你所能做的就是“什么都不做，等待它得到修复”，但能够\_自信地\_什么都不做是很好的。

### 一些发布 BGP 路由的方法

如果你想（作为一个业余爱好者）真正发布 BGP 路由，这里有一些评论中的链接：

* [获取你自己的 ASN 的指南](https://labs.ripe.net/author/samir_jafferali/build-your-own-anycast-network-in-nine-steps/)
* [dn42](https://dn42.eu/Home) 似乎有一个 BGP 的实验场（它不在公共互联网上，但确实有其他人在上面，这似乎比自己在家里做 BGP 实验更有趣）

### 目前就这些了

我想还有很多 BGP 工具（比如 PCH 有一堆 [路由数据的每日快照](https://www.pch.net/resources/Routing_Data/IPv4_daily_snapshots/)，看起来很有趣），但这篇文章已经很长了，而且我今天还有其他事情要做。

我对我作为一个普通人可以得到这么多关于 BGP 的信息感到惊讶，我一直认为它是一个“秘密的网络巫师”这样的东西，但显然有各种公共机器，任何人都可以直接 telnet 到它并用来查看路由表！没想到！

---

via: <https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Linux 上 5 个基于 Chromium 的浏览器

主brave，辅firefox

主brave,辅vivaldi(主要是没有ipad版)

谢谢分享！！！

Edge吧，主要还是书签同步管理方便，扩展也丰富，而且widows、mac、linux下皆可方便使用。体验还不错@！～

>
> 谷歌浏览器可能不是 Linux 用户的最佳浏览器。在这里，我们探讨了 Linux 平台的其他潜在选择。
>
>
>

![](/data/attachment/album/202110/07/131604zyqqiy2ghxc1kg9i.png)

想摆脱谷歌？想为你的 Linux 系统寻找可能比谷歌浏览器（和类似的）更好的浏览器？

幸运的是，有多个谷歌浏览器的替代品，你可以试试。

它们中的每一个都带来了一些有趣的东西，同时也保持了 Chrome 所特有的奇妙兼容性。请继续阅读，了解这些浏览器的更多信息。

### 比谷歌浏览器更好的选择

>
> 注：虽然 [自由和开源软件在取代科技巨头方面扮演着关键角色](https://news.itsfoss.com/save-privacy-with-foss/)，但除了谷歌浏览器之外，Linux 上的任何选择都是一个好的开始。因此，你也会发现一些非 FOSS 的选择。
>
>
>

在我看来，Chrome 的最佳替代品是基于 Chromium 的浏览器，这意味着它们与 Chrome 共享相同的基因。这样做的好处是，它们已经拥有与 Chrome 相同的功能，同时有更多时间来增加自己的功能。

另外，如果你愿意，你可以了解一下不基于 Chromium 的 [Chrome 开源替代品](https://itsfoss.com/open-source-browsers-linux/)。

无论如何，即使谷歌浏览器的替代品对你来说并不优越，也值得尝试远离科技巨头。

我们收集了一些在各方面与 Chrome 相当或更好的浏览器。闲话少说，以下是我挑选的五款比 Chrome 本身更好的类似 Chrome 的浏览器：

* UnGoogled Chromium
* Brave
* Edge
* Vivaldi
* Opera

这份名单没有排名顺序。

### 1、UnGoogled Chromium

![](/data/attachment/album/202110/07/131605wgygnlqf4x6z8f7v.png)

特点：

* 移除针对谷歌域名的功能
* 在运行时阻止对 Google 的内部请求
* 从源代码中剥离谷歌的二进制文件
* 许多新的命令行开关和 `chrome://flags` 条目
* 强制所有弹出式窗口为标签

对于那些隐私爱好者来说，[UnGoogled Chromium](https://github.com/Eloston/ungoogled-chromium) 浏览器将是一个天赐良机。虽然它可能看起来与 Chrome 相同，但它有许多隐私方面的调整。

顾名思义，对于 Chrome 浏览器的用户来说，最大的倒退将是没有谷歌的服务集成。但这也意味着不再有对谷歌的内部请求、谷歌网址跟踪等等。

它没有吹嘘任何非凡的东西来保护你的隐私，但它应该比谷歌浏览器更好。

你也可以选择通过 `chrome://flags` 设置来探索和切换隐私设置。

总而言之，UnGoogled Chromium 提供了一种熟悉的浏览体验，同时还加入了一套隐私功能。它是可靠的，而且还与 Chrome 扩展程序庞大的生态系统兼容。

### 2、Brave

![](/data/attachment/album/202110/07/131607jqp9z90aqwxxhjsp.png)

特点：

* 内置广告拦截器
* 更快的页面加载时间
* Brave 奖励计划
* 能够在设备之间进行同步
* 支持 Chrome Web 商店

当 [Brave](https://brave.com) 在 2016 年首次登上舞台时，世界各地的人们都震惊于它的隐私和性能特点。在发布时，这包括了一个内置的广告屏蔽器和一个新的用户界面。

从那时起，该浏览器有了更多的功能，包括奖励计划和 [Tor](https://itsfoss.com/tor-guide/) 整合。这使得它成为增长最快的浏览器之一。

### 3、Edge

![](/data/attachment/album/202110/07/131609mp1yyy3555z0p5nq.png)

特点：

* 支持 Chrome Web 商店
* 儿童浏览模式（额外的保护和更简单的用户界面）
* 良好的 PDF 编辑工具
* 内置优惠券搜索器
* 阅读模式
* 内置密码生成器

当微软 [Edge](https://www.microsoftedgeinsider.com/en-us/download) 在 2015 年首次与 Windows 10 一起发布时，它因缓慢和有缺陷而被广泛批评。然而，在 2020 年初，它使用 Chromium Web 引擎完全重新制作了。

这也是 Chrome 浏览器所基于的引擎，这提供了现代和快速的浏览体验。这种转变的一个好处是 Web 浏览器能够在许多不同的平台上运行，从 Windows 7 和 macOS 到 Ubuntu 和其他基于 Linux 的发行版。

我知道，如果你因为某些原因讨厌微软，这可能不会吸引你 —— 但 Linux 版的微软 Edge 是谷歌 Chrome 浏览器的一个重要替代品。

### 4、Vivaldi

![](/data/attachment/album/202110/07/131611tb5ki54jnrgu6uw4.png)

特点：

* 内置翻译器
* Vivaldi Email（Beta）
* Feed 阅读器（Beta）
* Vivaldi 日历（Beta）
* 可高度定制的用户界面
* 内置广告拦截器
* 支持 Chrome Web 商店
* 标签分组
* 分屏标签

[Vivaldi](https://vivaldi.com) 于 2016 年首次发布，它在浏览器大战中迅速崛起。它最初是为对 [Presto](https://en.wikipedia.org/wiki/Presto_(browser_engine)) [布局引擎](https://en.wikipedia.org/wiki/Browser_engine) 过渡不满的 Opera 用户设计的，它已经成功地重新实现了 Opera 过渡到 Chromium 期间失去的许多功能。

令人惊讶的是，它在基于 Chromium 的情况下还能做到这一点（正是 Opera 放弃这些功能的原因）。

最新的 [Vivaldi 4.0 版本](https://news.itsfoss.com/vivaldi-4-0-release/) 也为高级用户提供了一些功能。

虽然它不是 100% 的自由软件，但其 93% 的源代码是可用的，只有用户界面是专有的。考虑到 Vivaldi 的开发团队积极关注着 Linux 用户的改进，Vivaldi 提供了大量的功能，这可能是一个值得权衡的结果。

### 5、Opera

![](/data/attachment/album/202110/07/131613olt3m85d58eeq8qt.png)

特点：

* 内置虚拟专用网络
* 轻松访问社交媒体
* 内置加密货币钱包
* 欺诈和恶意软件保护
* 高度可见的网站安全徽章

虽然 [Opera](https://www.opera.com) 从未成为 Web 浏览器之王，但它一直存在于关于使用何种浏览器的争论中。它最初是基于其内部的 Presto 布局引擎的，在 2013 年切换到 Chromium。

不幸的是，这一转换意味着 Opera 团队被迫放弃了其最知名的一些功能，为 Vivaldi 和 Firefox 等替代品填补 Opera 留下的空间铺平道路。

这并不是说 Opera 缺乏功能，它包含了许多功能。

### 总结

在这里，我们列出了为 Linux 桌面平台上用户量身定做的浏览器。

无论你是想要更多的功能、更好的用户界面，还是想要帮助你摆脱谷歌的束缚，都有一个选择适合你。

由于所有这些浏览器都是基于 Chromium 的，它们都能像 Chrome 一样提供良好的兼容性和用户体验。因此，请切换到这些类似 Chrome 的浏览器中，享受它们各自赋予的自由吧。

2021 年，你最喜欢的 Linux 上谷歌浏览器的替代品是什么？请在下面的评论中告诉我。

---

via: <https://news.itsfoss.com/chrome-like-browsers-2021/>

作者：[Jacob Crume](https://news.itsfoss.com/author/jacob/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #417 微软允许第三方浏览器在其商店上架

Summary: 更多：• Canonical 推出适用于嵌入式显示器的 Ubuntu Frame • 微软官方提供绕过 TPM 检查安装 Windows 11 的方法

![](/data/attachment/album/202110/07/151027dx7rgnexjenrmtpm.jpg)

### 微软允许第三方浏览器在其商店上架

![](/data/attachment/album/202110/07/150703znt59lgc5mhz0cm8.jpg)

随着 Windows 11 的推出，微软商店也进行了彻底重构，其中最大的变化之一是微软解除了一些限制。微软已经改变了 [关于浏览器引擎的政策](https://news.softpedia.com/news/mozilla-firefox-to-launch-in-the-windows-11-store-534163.shtml)，允许浏览器使用自己的引擎在微软商店发布。Mozilla 对这一变化表示赞赏，并说 Firefox 将在今年年底前在微软商店中提供。其他大型浏览器也有可能在微软商店上线，虽然 Google 还没有对此发表看法。此外，微软不再阻止第三方商店在微软商店中上市，所以像 Epic 游戏商店这样的“店中店”也可以下载了。

>
> 老王点评：微软是越来越开放了，与之形成鲜明对比是水果铺子了。
>
>
>

### Canonical 推出适用于嵌入式显示器的 Ubuntu Frame

![](/data/attachment/album/202110/07/150738n2mm03irqyeihmhh.jpg)

这款新产品旨在为开发者提供一种方法，使其能够轻松地在信息亭等嵌入式显示器上构建和部署应用程序。[据该公司称](https://ubuntu.com/blog/canonical-launches-ubuntu-frame-the-foundation-for-embedded-displays)， Ubuntu Frame 意味着开发者不需要集成和维护部分解决方案，如 DRM、KMS、输入协议或安全策略。Ubuntu Frame 与 Flutter、Qt、GTK、Electron 和 SDL2 等工具包兼容，它还为基于 HTML5 和 Java 等的应用程序提供了解决方案。Canonical 称，“它的可靠性已经在现场得到了广泛的测试，相关技术已经开发了 7 年多。”为确保设备在其整个生命周期内得到支持，Ubuntu Frame 将被支持 10 年。

>
> 老王点评：相比其手机版本，我觉得这种瞄准信息亭的解决方案更有前景。
>
>
>

### 微软官方提供绕过 TPM 检查安装 Windows 11 的方法

![](/data/attachment/album/202110/07/151037wapj4vo74kojke3h.jpg)

为了避免人们通过使用非标准化的第三方脚本来破坏他们的系统，微软发布了一个 [新的支持网页](https://support.microsoft.com/en-us/windows/ways-to-install-windows-11-e0edbbfb-cfc5-4011-868b-2ce77ac7c70e)，提供了一个官方方法来绕过 TPM 2.0 和 CPU 检查。但微软一再提醒，在不支持的硬件上安装 Windows 11 伴随着一些隐患。这一方法至少需要 TPM 1.2，但是如果你连这个都没有，还是需要一个第三方的方法来 [绕过所有 TPM 检查](https://gist.github.com/AveYo/c74dc774a8fb81a332b5d65613187b15)。

>
> 老王点评：强制限制硬件这种做法并不好，如果因为缺乏某些硬件，导致功能和安全性降级，用户应该有自行承担的决定权。
>
>
>


用 jconsole 在 Linux 上监控你的 Java

Summary: 如何使用 Java 开发工具包中的 Java 监控和管理控制台。

如何使用 Java 开发工具包中的 Java 监控和管理控制台。

>
> 如何使用 Java 开发工具包中的 Java 监控和管理控制台。
>
>
>

![](/data/attachment/album/202110/08/131129bf3h3gv18388fl11.jpg)

Java 开发工具包（JDK）提供了开发 Java 应用程序的二进制文件、工具和编译器。其中一个有用的工具是 `jconsole`。

为了演示，我将使用 WildFly J2EE 应用服务器，它是 JBOSS 开源应用服务器项目的一部分。首先，我启动了一个独立的实例。

```
~/wildfly/24.0.1/bin$ ./standalone.sh
=========================================================================
  JBoss Bootstrap Environment
  JBOSS_HOME: /home/alan/wildfly/24.0.1
  JAVA: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-5.fc34.x86_64/bin/java

```

现在，在另一个终端，输入 `jconsole`。

```
$ jconsole

```

启动后，jconsole 会列出本地实例。选择“<ruby> 本地进程 <rt>  Local Process </rt></ruby>”，然后选择进程的名称并点击“<ruby> 连接 <rt>  Connect </rt></ruby>”。这就是连接并开始使用运行中的 Java 虚拟机（JVM）的 jconsole 的全部过程。

![jconsole 与本地进程的新连接屏幕](/data/attachment/album/202110/08/131136m8wqj69qkwk90rzj.png "new connection")

### 概述

这个 Java 监控和管理控制台在仪表板的顶部显示进程标识符（PID）。“<ruby> 概述 <rt>  Overview </rt></ruby>”标签有四个图表，显示“<ruby> 堆内存使用情况 <rt>  Heap Memory Usage </rt></ruby>”、“<ruby> 线程 <rt>  Threads </rt></ruby>”、“<ruby> 类 <rt>  Classes </rt></ruby>”和“<ruby> CPU 使用情况 <rt>  CPU Usage </rt></ruby>”的重要信息。

![jconsole 仪表板显示堆内存使用量、线程、类和 CPU 使用量](/data/attachment/album/202110/08/131137qk2lkqddkvdlv8r8.png "tab overview")

沿着顶部的标签提供每个区域的更详细的视图。

### 内存

“<ruby> 内存 <rt>  Memory </rt></ruby>”标签显示 JVM 所使用的内存的各个方面的图表。分配给 JVM 的服务器系统内存量被称为“<ruby> 堆 <rt>  Heap </rt></ruby>”。这个屏幕还提供了关于堆的内部组件使用情况的详细信息，例如 “<ruby> 伊甸园 <rt>  Eden Space </rt></ruby>”、“<ruby> 老年代 <rt>  Old Gen </rt></ruby>” 和 “<ruby> 幸存者区 <rt>  Survivor Space </rt></ruby>”。你也可以手动请求一个垃圾收集动作。

![jconsole 内存标签](/data/attachment/album/202110/08/131137tzd4ynzxg39xgggn.png "memory tab")

### 线程

“<ruby> 线程 <rt>  Threads </rt></ruby>”标签显示有多少线程在运行。你也可以手动检查是否存在死锁。

![jconsole 线程仪表板显示了随时间变化的线程数量和滚动的线程列表](/data/attachment/album/202110/08/131137mw40o0jozz4meomo.png "threads tab")

### 类

“<ruby> 类 <rt>  Classes </rt></ruby>”标签告诉你有多少类被加载，有多少被卸载。

![jconsole 类标签显示随着时间推移加载的类数量](/data/attachment/album/202110/08/131138i00nh2mbuyaghuze.png "classes tab")

### 虚拟机摘要

“<ruby> 虚拟机摘要 <rt>  VM Summary </rt></ruby>”标签提供了许多关于应用程序和主机系统的细节。你可以了解你所处的操作系统和架构、系统内存总量、CPU 数量，甚至交换空间。

![jconsole 虚拟机摘要标签](/data/attachment/album/202110/08/131138q3slr1secu5slbjt.png "VMsummary tab ")

摘要中显示的关于 JVM 的进一步细节，包括当前和最大的堆大小以及正在使用的垃圾收集器的信息。底部的窗格列出了传递给 JVM 的所有参数。

### MBeans

最后一个标签，MBeans，让你通过所有的 MBeans 向下钻取，以查看每个 MBeans 的属性和值。

![MBeans 标签](/data/attachment/album/202110/08/131138qwtfriqlutiitn5u.png "MBeans tab")

### 总结

Java 已经存在了很长时间，它将继续为全球数百万的系统提供动力。有很多开发环境和监控系统可以使用，但像 `jconsole` 这样的包含在基本工具包中的工具非常有价值。

---

via: <https://opensource.com/article/21/10/monitor-java-linux-jconsole>

作者：[Alan Formy-Duval](https://opensource.com/users/alanfdoss) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


NMState：一个声明式网络配置工具

Summary: 这意味着你可以通过 API 定义所需的配置状态，而工具则通过提供者来应用配置。

这意味着你可以通过 API 定义所需的配置状态，而工具则通过提供者来应用配置。

![](/data/attachment/album/202110/08/145714mqcyh6sshchomyot.jpg)

这篇文章描述并演示了 NMState，这是一个使用声明式方法配置主机的网络管理器。这意味着你可以通过 API 定义所需的配置状态，而工具则通过<ruby> 提供者 <rt>  provider </rt></ruby>来应用配置。

### 配置方法：命令式与声明式

网络管理有时候是一项非常复杂的任务，这取决于环境的规模和多样性。在 IT 的早期，网络管理依赖于网络管理员在网络设备上手动执行命令。如今，<ruby> 基础设施即代码 <rt>  Infrastructure as Code </rt></ruby>（IaC）允许以不同的方式将这些任务自动化。z这基本上有两种方法：命令式或声明式。

在命令式方法中，你会定义“如何”达到所需的配置状态。而在声明式范式里则定义了“什么”是所需的配置状态，所以它不确定哪些步骤是必需的，也不确定它们必须以何种顺序执行。这种方法目前正在聚集更多的人员参与，你可以在目前使用的大多数管理和编排工具上找到它。

### NMState：一个声明式的工具

NMState 是一个网络管理器，允许你按照声明式方法配置主机。这意味着你通过一个北向的声明式 API 定义所需的配置状态，这个工具通过南向的<ruby> 提供者 <rt>  provider </rt></ruby>应用配置。

目前 NMState 支持的唯一的提供者是 NetworkManager，它是为 Fedora Linux 提供网络功能的主要服务。不过，NMState 的开发计划中将逐渐增加其他提供者。

关于 NMState 的进一步信息，请访问其项目 [站点](https://nmstate.io/) 或 GitHub [仓库](https://github.com/nmstate/nmstate)。

### 安装

NMState 在 Fedora Linux 29+ 上可用，需要在系统上安装并运行 NetworkManager 1.26 或更高版本。下面是在 Fedora Linux 34 上的安装情况：

```
$ sudo dnf -y install nmstate
...
输出节略
...
Installed:
  NetworkManager-config-server-1:1.30.4-1.fc34.noarch      gobject-introspection-1.68.0-3.fc34.x86_64      nispor-1.0.1-2.fc34.x86_64              nmstate-1.0.3-2.fc34.noarch
  python3-gobject-base-3.40.1-1.fc34.x86_64                python3-libnmstate-1.0.3-2.fc34.noarch          python3-nispor-1.0.1-2.fc34.noarch      python3-varlink-30.3.1-2.fc34.noarch

Complete!

```

这样，你可以使用 `nmstatectl` 作为 NMState 的命令行工具。请参考 `nmstatectl -help` 或 `man nmstatectl` 以了解关于这个工具的进一步信息。

### 使用 NMstate

首先要检查系统中安装的 NMState 版本：

```
$ nmstatectl version
1.0.3

```

检查一个网络接口的当前配置，例如 `eth0` 的配置：

```
$ nmstatectl show eth0
2021-06-29 10:28:21,530 root         DEBUG    NetworkManager version 1.30.4
2021-06-29 10:28:21,531 root         DEBUG    Async action: Retrieve applied config: ethernet eth0 started
2021-06-29 10:28:21,531 root         DEBUG    Async action: Retrieve applied config: ethernet eth1 started
2021-06-29 10:28:21,532 root         DEBUG    Async action: Retrieve applied config: ethernet eth0 finished
2021-06-29 10:28:21,533 root         DEBUG    Async action: Retrieve applied config: ethernet eth1 finished
---
dns-resolver:
  config: {}
  running:
    search: []
    server:
    - 192.168.122.1
route-rules:
  config: []
routes:
  config: []
  running:
  - destination: fe80::/64
    metric: 100
    next-hop-address: ''
    next-hop-interface: eth0
    table-id: 254
  - destination: 0.0.0.0/0
    metric: 100
    next-hop-address: 192.168.122.1
    next-hop-interface: eth0
    table-id: 254
  - destination: 192.168.122.0/24
    metric: 100
    next-hop-address: ''
    next-hop-interface: eth0
    table-id: 254
interfaces:
- name: eth0
  type: ethernet
  state: up
  ipv4:
    enabled: true
    address:
    - ip: 192.168.122.238
      prefix-length: 24
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    dhcp: true
  ipv6:
    enabled: true
    address:
    - ip: fe80::c3c9:c4f9:75b1:a570
      prefix-length: 64
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    autoconf: true
    dhcp: true
  lldp:
    enabled: false
  mac-address: 52:54:00:91:E4:4E
  mtu: 1500

```

正如你在上面看到的，这个网络配置显示了四个主要部分：

* `dns-resolver`：这部分是这个接口的名字服务器配置。
* `route-rules`：它说明了路由规则。
* `routes`：它包括动态和静态路由。
* `interfaces`：这部分描述了 ipv4 和 ipv6 设置。

### 修改配置

你可以在两种模式下修改所需的配置状态：

* 交互式：通过 `nmstatectl edit` 编辑接口配置。这个命令调用环境变量 `EDITOR` 定义的文本编辑器，因此可以用 yaml 格式编辑网络状态。完成编辑后，NMState 将应用新的网络配置，除非有语法错误。
* 基于文件的：使用 `nmstatectl apply` 应用接口配置，它从先前创建的 yaml 或 json 文件中导入一个所需的配置状态。

下面几节告诉你如何使用 NMState 来改变网络配置。这些改变可能会对系统造成破坏，所以建议在测试系统或客户虚拟机上执行这些任务，直到你对 NMState 有更好的理解。

这里使用的测试系统有两个以太网接口，`eth0` 和 `eth1`：

```
$ ip -br -4 a
lo               UNKNOWN        127.0.0.1/8
eth0             UP             192.168.122.238/24
eth1             UP             192.168.122.108/24

```

#### 互动配置模式的例子

使用 `nmstatectl edit` 命令将 `eth0` 接口的 MTU 改为 9000 字节，如下所示：

```
$ sudo nmstatectl edit eth0

---
dns-resolver:
  config: {}
  running:
    search: []
    server:
    - 192.168.122.1
route-rules:
  config: []
routes:
  config: []
  running:
  - destination: fe80::/64
    metric: 100
    next-hop-address: ''
    next-hop-interface: eth0
    table-id: 254
  - destination: 0.0.0.0/0
    metric: 100
    next-hop-address: 192.168.122.1
    next-hop-interface: eth0
    table-id: 254
  - destination: 192.168.122.0/24
    metric: 100
    next-hop-address: ''
    next-hop-interface: eth0
    table-id: 254
interfaces:
- name: eth0
  type: ethernet
  state: up
  ipv4:
    enabled: true
    address:
    - ip: 192.168.122.123
      prefix-length: 24
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    dhcp: true
  ipv6:
    enabled: true
    address:
    - ip: fe80::c3c9:c4f9:75b1:a570
      prefix-length: 64
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    autoconf: true
    dhcp: true
  lldp:
    enabled: false
  mac-address: 52:54:00:91:E4:4E
  mtu: 9000

```

在保存并退出编辑器后，NMState 应用新的网络期望状态：

```
2021-06-29 11:29:05,726 root         DEBUG    Nmstate version: 1.0.3
2021-06-29 11:29:05,726 root         DEBUG    Applying desire state: {'dns-resolver': {'config': {}, 'running': {'search': [], 'server': ['192.168.122.1']}}, 'route-rules': {'config': []}, 'routes': {'config': [], 'running': [{'destination': 'fe80::/64', 'metric': 102, 'next-hop-address': '', 'next-hop-interface': 'eth0', 'table-id': 254}, {'destination': '0.0.0.0/0', 'metric': 102, 'next-hop-address': '192.168.122.1', 'next-hop-interface': 'eth0', 'table-id': 254}, {'destination': '192.168.122.0/24', 'metric': 102, 'next-hop-address': '', 'next-hop-interface': 'eth0', 'table-id': 254}]}, 'interfaces': [{'name': 'eth0', 'type': 'ethernet', 'state': 'up', 'ipv4': {'enabled': True, 'address': [{'ip': '192.168.122.238', 'prefix-length': 24}], 'auto-dns': True, 'auto-gateway': True, 'auto-route-table-id': 0, 'auto-routes': True, 'dhcp': True}, 'ipv6': {'enabled': True, 'address': [{'ip': 'fe80::5054:ff:fe91:e44e', 'prefix-length': 64}], 'auto-dns': True, 'auto-gateway': True, 'auto-route-table-id': 0, 'auto-routes': True, 'autoconf': True, 'dhcp': True}, 'lldp': {'enabled': False}, 'mac-address': '52:54:00:91:E4:4E', 'mtu': 9000}]}
--- output omitted ---
2021-06-29 11:29:05,760 root         DEBUG    Async action: Update profile uuid:2bdee700-f62b-365a-bd1d-69d9c31a9f0c iface:eth0 type:ethernet started
2021-06-29 11:29:05,792 root         DEBUG    Async action: Update profile uuid:2bdee700-f62b-365a-bd1d-69d9c31a9f0c iface:eth0 type:ethernet finished

```

现在，使用 `ip` 命令和 `eth0` 的配置文件来检查 `eth0` 的 `MTU` 是不是 9000 字节。

```
$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:91:e4:4e brd ff:ff:ff:ff:ff:ff
    altname enp1s0

$ sudo cat /etc/NetworkManager/system-connections/eth0.nmconnection
[sudo] password for admin:
[connection]
id=eth0
uuid=2bdee700-f62b-365a-bd1d-69d9c31a9f0c
type=ethernet
interface-name=eth0
lldp=0
permissions=

[ethernet]
cloned-mac-address=52:54:00:91:E4:4E
mac-address-blacklist=
mtu=9000

[ipv4]
dhcp-client-id=mac
dhcp-timeout=2147483647
dns-search=
method=auto

[ipv6]
addr-gen-mode=eui64
dhcp-duid=ll
dhcp-iaid=mac
dhcp-timeout=2147483647
dns-search=
method=auto
ra-timeout=2147483647

[proxy]

```

#### 基于文件的配置模式的例子

让我们使用基于文件的方法来设置一个新的配置状态。这里我们禁用 `eth1` 接口的 IPv6 配置。

首先，创建一个 yaml 文件来定义 `eth1` 接口的期望状态。使用 `nmstatectl show` 来保存当前设置，然后使用 `nmstatectl edit` 来禁用 IPv6。

```
$ nmstatectl show eth1 > eth1.yaml

$ vi eth1.yaml
---
dns-resolver:
  config: {}
  running:
    search: []
    server:
    - 192.168.122.1
route-rules:
  config: []
routes:
  config: []
  running:
  - destination: fe80::/64
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
  - destination: 0.0.0.0/0
    metric: 101
    next-hop-address: 192.168.122.1
    next-hop-interface: eth1
    table-id: 254
  - destination: 192.168.122.0/24
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
interfaces:
- name: eth1
  type: ethernet
  state: up
  ipv4:
    enabled: true
    address:
    - ip: 192.168.122.108
      prefix-length: 24
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    dhcp: true
  ipv6:
    enabled: false
    address:
    - ip: fe80::5054:ff:fe3c:9b04
      prefix-length: 64
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    autoconf: true
    dhcp: true
  lldp:
    enabled: false
  mac-address: 52:54:00:3C:9B:04
  mtu: 1500

```

保存新的配置后，用它来应用新的状态：

```
$ sudo nmstatectl apply eth1.yaml

2021-06-29 12:17:21,531 root         DEBUG    Nmstate version: 1.0.3
2021-06-29 12:17:21,531 root         DEBUG    Applying desire state: {'dns-resolver': {'config': {}, 'running': {'search': [], 'server': ['192.168.122.1']}}, 'route-rules': {'config': []}, 'routes': {'config': [], 'running': [{'destination': 'fe80::/64', 'metric': 101, 'next-hop-address': '', 'next-hop-interface': 'eth1', 'table-id': 254}, {'destination': '0.0.0.0/0', 'metric': 101, 'next-hop-address': '192.168.122.1', 'next-hop-interface': 'eth1', 'table-id': 254}, {'destination': '192.168.122.0/24', 'metric': 101, 'next-hop-address': '', 'next-hop-interface': 'eth1', 'table-id': 254}]}, 'interfaces': [{'name': 'eth1', 'type': 'ethernet', 'state': 'up', 'ipv4': {'enabled': True, 'address': [{'ip': '192.168.122.108', 'prefix-length': 24}], 'auto-dns': True, 'auto-gateway': True, 'auto-route-table-id': 0, 'auto-routes': True, 'dhcp': True}, 'ipv6': {'enabled': False}, 'lldp': {'enabled': False}, 'mac-address': '52:54:00:3C:9B:04', 'mtu': 1500}]}
--- output omitted ---
2021-06-29 12:17:21,582 root         DEBUG    Async action: Update profile uuid:5d7244cb-673d-3b88-a675-32e31fad4347 iface:eth1 type:ethernet started
2021-06-29 12:17:21,587 root         DEBUG    Async action: Update profile uuid:5d7244cb-673d-3b88-a675-32e31fad4347 iface:eth1 type:ethernet finished
--- output omitted ---
Desired state applied:
---
dns-resolver:
  config: {}
  running:
    search: []
    server:
    - 192.168.122.1
route-rules:
  config: []
routes:
  config: []
  running:
  - destination: fe80::/64
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
  - destination: 0.0.0.0/0
    metric: 101
    next-hop-address: 192.168.122.1
    next-hop-interface: eth1
    table-id: 254
  - destination: 192.168.122.0/24
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
interfaces:
- name: eth1
  type: ethernet
  state: up
  ipv4:
    enabled: true
    address:
    - ip: 192.168.122.108
      prefix-length: 24
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    dhcp: true
  ipv6:
    enabled: false
  lldp:
    enabled: false
  mac-address: 52:54:00:3C:9B:04
  mtu: 1500

```

你可以检查看到 `eth1` 接口没有配置任何 IPv6：

```
$ ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.122.238/24 fe80::5054:ff:fe91:e44e/64
eth1             UP             192.168.122.108/24

$ sudo cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1
uuid=5d7244cb-673d-3b88-a675-32e31fad4347
type=ethernet
interface-name=eth1
lldp=0
permissions=

[ethernet]
cloned-mac-address=52:54:00:3C:9B:04
mac-address-blacklist=
mtu=1500

[ipv4]
dhcp-client-id=mac
dhcp-timeout=2147483647
dns-search=
method=auto

[ipv6]
addr-gen-mode=eui64
dhcp-duid=ll
dhcp-iaid=mac
dns-search=
method=disabled

[proxy]

```

#### 临时应用改变

NMState 的一个有趣的功能允许你临时配置一个期望的网络状态。如果你对这个配置感到满意，你可以事后提交。否则，当超时（默认为 60 秒）过后，它将回滚。

修改前面例子中的 `eth1` 配置，使它有一个 IPv4 静态地址，而不是通过 DHCP 动态获得。

```
$ vi eth1.yaml

---
dns-resolver:
  config: {}
  running:
    search: []
    server:
    - 192.168.122.1
route-rules:
  config: []
routes:
  config: []
  running:
  - destination: fe80::/64
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
  - destination: 0.0.0.0/0
    metric: 101
    next-hop-address: 192.168.122.1
    next-hop-interface: eth1
    table-id: 254
  - destination: 192.168.122.0/24
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
interfaces:
- name: eth1
  type: ethernet
  state: up
  ipv4:
    enabled: true
    address:
    - ip: 192.168.122.110
      prefix-length: 24
    auto-dns: true
    auto-gateway: true
    auto-route-table-id: 0
    auto-routes: true
    dhcp: false
  ipv6:
    enabled: false
  lldp:
    enabled: false
  mac-address: 52:54:00:3C:9B:04
  mtu: 1500

```

现在，使用选项 `no-commit` 临时应用这个配置，让它只在 30 秒内有效。这可以通过添加选项 `timeout` 来完成。同时，我们将运行 `ip -br a` 命令三次，看看配置在 `eth1` 接口的 IPv4 地址是如何变化的，然后配置就会回滚。

```
$ ip -br a && sudo nmstatectl apply --no-commit --timeout 30 eth1.yaml && sleep 10 && ip -br a && sleep 25 && ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.122.238/24 fe80::5054:ff:fe91:e44e/64
eth1             UP             192.168.122.108/24
2021-06-29 17:29:18,266 root         DEBUG    Nmstate version: 1.0.3
2021-06-29 17:29:18,267 root         DEBUG    Applying desire state: {'dns-resolver': {'config': {}, 'running': {'search': [], 'server': ['192.168.122.1']}}, 'route-rules': {'config': []}, 'routes': {'config': [], 'running': [{'destination': 'fe80::/64', 'metric': 101, 'next-hop-address': '', 'next-hop-interface': 'eth1', 'table-id': 254}, {'destination': '0.0.0.0/0', 'metric': 101, 'next-hop-address': '192.168.122.1', 'next-hop-interface': 'eth1', 'table-id': 254}, {'destination': '192.168.122.0/24', 'metric': 101, 'next-hop-address': '', 'next-hop-interface': 'eth1', 'table-id': 254}]}, 'interfaces': [{'name': 'eth1', 'type': 'ethernet', 'state': 'up', 'ipv4': {'enabled': True, 'address': [{'ip': '192.168.122.110', 'prefix-length': 24}], 'dhcp': False}, 'ipv6': {'enabled': False}, 'lldp': {'enabled': False}, 'mac-address': '52:54:00:3C:9B:04', 'mtu': 1500}]}
--- output omitted ---
Desired state applied:
---
dns-resolver:
  config: {}
  running:
    search: []
    server:
    - 192.168.122.1
route-rules:
  config: []
routes:
  config: []
  running:
  - destination: fe80::/64
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
  - destination: 0.0.0.0/0
    metric: 101
    next-hop-address: 192.168.122.1
    next-hop-interface: eth1
    table-id: 254
  - destination: 192.168.122.0/24
    metric: 101
    next-hop-address: ''
    next-hop-interface: eth1
    table-id: 254
interfaces:
- name: eth1
  type: ethernet
  state: up
  ipv4:
    enabled: true
    address:
    - ip: 192.168.122.110
      prefix-length: 24
    dhcp: false
  ipv6:
    enabled: false
  lldp:
    enabled: false
  mac-address: 52:54:00:3C:9B:04
  mtu: 1500
Checkpoint: NetworkManager|/org/freedesktop/NetworkManager/Checkpoint/7
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.122.238/24 fe80::5054:ff:fe91:e44e/64
eth1             UP             192.168.122.110/24
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.122.238/24 fe80::5054:ff:fe91:e44e/64
eth1             UP             192.168.122.108/24

```

从上面可以看到，`eth1` 的 IP 地址从 `192.168.122.108` 暂时变成了 `192.168.122.110`，然后在超时结束后又回到了 `192.168.122.108`。

### 总结

NMState 是一个声明式的网络配置工具，目前可以通过 NetworkManager API 在主机中应用所需的网络配置状态。这种状态既可以用文本编辑器交互式地定义，也可以用基于文件的方法创建一个 yaml 或 json 文件。

这种工具提供了“基础设施即代码”，它可以自动化网络任务，也减少了使用传统配置方法可能出现的潜在错误配置或不稳定的网络情况。

---

via: <https://fedoramagazine.org/nmstate-a-declarative-networking-config-tool/>

作者：[Maurizio Garcia](https://fedoramagazine.org/author/malgnuz/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #418 乔布斯曾试图让戴尔 PC 预装 MacOS

Summary: 更多：• Asahi Linux 已可以在 M1 Mac 上作为一个基本的 Linux 桌面使用 • 微软称俄罗斯支持了 58% 的国家黑客

![](/data/attachment/album/202110/08/155905hxnndge3niazn8xn.jpg)

### 乔布斯曾试图让戴尔 PC 预装 MacOS

![](/data/attachment/album/202110/08/155924cek2s2e5ws2ef6vw.jpg)

乔布斯重掌苹果公司后，他向迈克尔·戴尔提出让戴尔公司的 PC 也可以运行 MacOS。当时的 MacOS 已经可以在戴尔 PC 的 x86 CPU 上运行。[乔布斯建议说](https://www.cnet.com/tech/computing/the-steve-jobs-deal-with-dell-that-could-have-changed-apple-and-tech-history/)，让 PC 买家选择在他们的机器上安装苹果或微软的系统。戴尔认为这是个好主意，他可以为每台出售的带有 MacOS 的电脑支付许可费。但乔布斯则要求在每台戴尔电脑上装载 MacOS 和 Windows，让客户决定使用哪种软件，但不管使用哪个系统，每台售出的戴尔电脑都要向苹果支付费用。最终双方不欢而散。

>
> 老王点评：可惜历史没有假如，否则 MacOS 的市场或许更大。
>
>
>

### Asahi Linux 已可以在 M1 Mac 上作为一个基本的 Linux 桌面使用

![](/data/attachment/album/202110/08/155948fgldmzgrfhggabdq.png)

今年 8 月，Asahi Linux 已经可以在苹果 M1 机器上启动 GNOME 桌面，虽然“不是很好，但可以使用”。今年早些时候，最底层的 M1 驱动程序也已经并入了 Linux 内核。今天，该项目发表的 [9 月进展报告](https://www.phoronix.com/scan.php?page=news_item&px=Asahi-Linux-September-2021)称，它已经可以作为一个基本的 Linux 桌面使用了，尽管还没有 GUI 加速。但 M1 的 CPU 是如此强大，以至于软件渲染的桌面表现也非常好。不过该项目也承认，在提供所需的顺滑体验之前，仍需要打磨大量的粗糙细节，尤其是 GPU。

>
> 老王点评：在没有任何苹果官方提供的支持下，能做到这个程度很厉害了。
>
>
>

### 微软称俄罗斯支持了 58% 的国家黑客

![](/data/attachment/album/202110/08/160001y34rn9s8dy7yzllx.jpg)

[微软公司表示](https://apnews.com/article/technology-business-china-europe-united-states-e13548edf082992a735a0af1da39b6c8)，在过去一年中，俄罗斯占了微软公司检测到的大部分国家支持的黑客行为，占 58%，这些黑客主要是针对美国的政府机构和智囊团。报告还称，美国是迄今为止受勒索软件攻击最多的国家，其攻击次数是第二大目标国家的三倍以上。但与美国政府机构密切合作的微软公司的报告并没有涉及美国政府的黑客行为。

>
> 老王点评：大哥别说二哥黑，美国在这方面的记录一样糟糕。
>
>
>


如何从 Linux 发行版的仓库中安装 Java

>
> 无论你喜欢哪个发行版和包管理器，都可以都很容易地在你的 Linux 系统上安装 Java。
>
>
>

![](/data/attachment/album/202110/09/092717ean17be0alz10kt5.jpg "Coffee beans and a cup of coffee")

把 Java 安装到你的 Linux 桌面上有多种方法。一个明显的方式是使用你的 Linux 发行版中提供的软件包。请注意，这并不适合所有人。例如，有些用户可能需要一个非常具体的 Java 版本。

在你开始之前，你必须确定你需要“哪种 Java”。你是否只需要运行一些 `.class` 文件或 `.jar` 文件？还是你正在编写一些需要编译的代码？

就我而言，我运行的大部分 Java 都是我自己（至少部分）编写的 Java，所以安装完整的 Java 开发工具包（或称 JDK）总是有意义的，它包含了 Java 编译器、库和一些非常有用的工具。当然，在这里，我们更倾向于使用开源的 JDK，称为 [OpenJDK](https://openjdk.java.net/)。

由于我主要在 Ubuntu Linux 发行版上工作，我的软件包管理器是 `apt`。我可以用 `apt` 来查找哪些 OpenJDK 包是可用的：

```
apt list OpenJDK\*

```

这个命令的输出看起来像这样：

```
Listing... Done
openjdk-11-dbg/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64
openjdk-11-dbg/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386
openjdk-11-demo/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64
openjdk-11-demo/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386
openjdk-11-doc/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 11.0.11+9-0ubuntu2 all
openjdk-11-jdk-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64
openjdk-11-jdk-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386
openjdk-11-jdk/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64
openjdk-11-jdk/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386
openjdk-11-jre-dcevm/hirsute 11.0.10+1-1 amd64
openjdk-11-jre-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64
openjdk-11-jre-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386
openjdk-11-jre-zero/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64
openjdk-11-jre-zero/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386
openjdk-11-jre/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64
openjdk-11-jre/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386
openjdk-11-source/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 11.0.11+9-0ubuntu2 all
openjdk-15-dbg/hirsute 15.0.3+3-1 amd64
openjdk-15-dbg/hirsute 15.0.3+3-1 i386
openjdk-15-demo/hirsute 15.0.3+3-1 amd64
...
openjdk-8-jre/hirsute-updates,hirsute-security 8u292-b10-0ubuntu1 i386
openjdk-8-source/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 8u292-b10-0ubuntu1 all

```

我在上面用 `...` 省略了不少行。

事实证明，即使限制在 OpenJDK 中，我仍然有很多选择：

* 不同的架构（在我的例子中，i386 还是 amd64）。
* 不同的 Java 版本（就我而言，有 8、11、15、16、17 等）。
* 纯粹的 OpenJDK 或无头版本。
* Java 运行时环境（JRE）。
* 用于调试、演示，以及是否包含源代码等。

同样，在我的情况中，我主要对纯粹的普通 OpenJDK 感兴趣。

假设我想为我的 amd64 架构安装 Java 11 版本的普通 OpenJDK，我可以输入：

```
sudo apt install -a=amd64 openjdk-11-jdk

```

几分钟后，我就可以编译、运行、调试和打包我的 Java 代码了。

注意，很有可能需要同时安装多个版本的 Java，有时甚至是必要的。在 Ubuntu 中，有一个有用的工具，叫做 `update-java-alternatives`，它可以 [显示并配置在使用哪个 Java 环境](http://manpages.ubuntu.com/manpages/hirsute/man8/update-java-alternatives.8.html)。

那些使用不同 Linux 发行版的人，一般来说，可以采取类似的方法。其他的几个发行版（如 Debian 和 Mint）也使用 `apt` ，尽管可用的软件包可能不同。发行版可能使用不同的软件包管理器。例如， [Fedora 安装 Java 的文档页面](https://docs.fedoraproject.org/en-US/quick-docs/installing-java/) 显示了如何使用 Fedora `dnf` 包管理器来处理安装。首先，为了显示可用的版本，输入：

```
dnf search openjdk

```

接下来，要安装完整的开发 x86\_64 架构版本，请输入：

```
sudo dnf install java-11-openjdk-devel.x86_64

```

同样地，Fedora 提供了 `alternatives` 工具来 [显示和配置 Java 环境](https://tecadmin.net/install-java-on-fedora/)。

再比如，[很棒的 Arch Linux 维基](https://wiki.archlinux.org/title/java#OpenJDK) 显示对应的软件包是 `jdk11-openjdk`。该维基还解释了许多在 Arch 中使用 Java 的其他重要细节，比如使用 `archlinux-java` 工具来显示安装了哪些 Java 环境或选择一个不同的默认环境。Arch 使用一个叫 `pacman` 的包管理器，它也有文档 [在 Arch Linux 维基上](https://wiki.archlinux.org/title/pacman#Querying_package_databases)。

不管你喜欢哪个发行版和软件包管理器，在你的 Linux 系统上获得 Java 是很容易的。当然，在安装之前，要考虑版本和功能。还要记住，在同一台电脑上有管理两个或多个 Java 版本的方法。我的大多数例子都使用了 `apt`，但也要记得可以选择使用 `dnf`。

---

via: <https://opensource.com/article/21/9/install-java-linux-repositories>

作者：[Chris Hermansen](https://opensource.com/users/clhermansen) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


《赛博朋克 2077》等 DirectX 11/12 游戏可在 Linux 上体验 DLSS 了

>
> 通过 Steam Proton 的实验版本，期待已久的 Nvidia DLSS 支持在 Linux 上的 DirectX 11/12 大作中出现。
>
>
>

![](/data/attachment/album/202110/09/103426ybb6ybxcletltgt1.png)

6 月，英伟达 [宣布](https://www.nvidia.com/en-us/geforce/news/june-2021-rtx-dlss-game-update/) 通过 Steam Proton 支持 Linux 中的 DLSS，并为基于 Vulkan 的游戏提供了测试版驱动程序。

DLSS 是指<ruby> 深度学习超级采样 <rt>  Deep Learning Super Sampling </rt></ruby>。它利用由 RTX GPU 中的 Tensor 核心提供支持的深度学习算法来提升游戏中的图像。这将使图像更清晰、更锐利，并提高帧率。

![来源：英伟达](/data/attachment/album/202110/09/103427iyuncn4ubosyzei9.jpg)

这种 [升级技术](https://news.itsfoss.com/intel-xess-open-source/) 类似于 AMD 的 Fidelity FX，甚至更接近于英特尔即将推出的 XeSS，与 DLSS 不同的是这两者都是开源的。玩家已经可以通过 [GloriousEggroll](https://github.com/GloriousEggroll/proton-ge-custom) 的定制 Proton GE 版本体验到 Fidelity FX。

此外，英伟达还计划在今年秋天之前将支持范围扩大到 DirectX 游戏。

而且，随着最新的 Proton 实验性支持，这一切终于实现了。使用英伟达 GPU 的 Linux 游戏玩家现在可以用 DLSS 玩他们最喜欢的基于 DX11/12 的游戏。

考虑到我们很快就能在 Linux 上玩各种多人游戏，并且 [Proton 中添加了对 BattleEye & Easy-Anti Cheat 的支持](https://news.itsfoss.com/easy-anti-cheat-linux/)，这是进行这项添加的最好时机。

### Steam Porton 的重大更新

几天前，伴随着 Proton 6.3-7 的一波改进，Valve 终于设法将 DLSS 支持添加到 Proton 的 DirectX 11/12 游戏实验分支中。

在此之前，需要一个测试版驱动程序才能将 DLSS 用于基于 Vulkan 的游戏，例如 DOOM Eternal。

但是，现在不再如此 —— 尽管推荐使用最新的驱动程序。

作为补充，DXVK 和 Steamworks SDK 也已经更新到最新的开发版本。此外，还修复了特定游戏的性能问题和其他错误。

你可以查看 Proton 的 [官方 GitHub 更新日志](https://github.com/ValveSoftware/Proton/wiki/Changelog) 来了解到目前为止支持的所有游戏的改进列表。

### 为 DX11/12 游戏启用 DLSS

启用 DLSS 是一个简单明了的过程。

首先，你必须确保你的 Windows 游戏可以在 Proton Experimental 上运行。

这可以通过右键点击游戏并选择“<ruby> 属性 <rt>  Properties </rt></ruby>”来完成。然后在“<ruby> 兼容性 <rt>  Compatibility </rt></ruby>”下，你需要勾选“<ruby> 强制使用特定的 Steam Play 兼容工具 <rt>  Force the use of a specific Steam Play compatibility tool </rt></ruby>”复选框。接下来，从下拉菜单中选择 “Proton Experimental”。

![](/data/attachment/album/202110/09/103428ulo7xjkjlhemnrz7.png)

最后，你需要在“<ruby> 启动选项 <rt>  Launch Options </rt></ruby>”中插入命令：`PROTON_HIDE_NVIDIA_GPU=0 PROTON_ENABLE_NVAPI=1 %command%` 。

![](/data/attachment/album/202110/09/103428uayj119c888hoo7g.png)

这就行了。你就可以用 DLSS 玩你的游戏了！

### 总结

英伟达 DLSS 对于许多游戏来说是一个非常需要的功能，因为它的作用很大。

Linux 从一开始就没有对 DLSS 的全面支持。但是，看起来它很快就会在未来的 Proton 稳定版本中提供，并进行必要的改进。

Linux 玩家终于可以用基于 RTX 的 GPU 在许多游戏中体验到更好的帧率和视觉质量。

虽然我在 AMD 显卡上使用 Fidelity FX，但我仍然渴望在 RTX GPU 上尝试 DLSS！

你对英伟达 DLSS 的到来有什么感觉？你会很快尝试它吗？欢迎在下面分享你的评论。

转自：[GamingOnLinux](https://www.gamingonlinux.com/2021/10/proton-experimental-expands-nvidia-dlss-support-on-linux-to-directx-11-titles)。

---

via: <https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/>

作者：[Rishabh Moharir](https://news.itsfoss.com/author/rishabh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #419 2046 年的互联网会是什么样子？

Summary: 更多：• Facebook 禁用了“一键取关”工具 • 谷歌数据中心尝试转向主线内核

![](/data/attachment/album/202110/09/113625l7hmmzum3w7yy3ya.jpg)

### 2046 年的互联网会是什么样子？

![](/data/attachment/album/202110/09/113638mb0f8kcx280hocia.jpg)

以提供“[网站时光机](https://web.archive.org/)”著称的互联网档案馆最近开发了一个未来时光机： [Wayforward Machine](https://wayforward.archive.org/) ，它可以直接“快进”到 2046 年。当然，这只是一个对当前充斥这广告、隐私盗取的互联网的讽刺。

>
> 老王点评：你可以在其中输入 URL，然后按回车看看你访问的网站将来会是什么样子？
>
>
>

### Facebook 禁用了“一键取关”工具

![](/data/attachment/album/202110/09/113704gy0v73b4yf9vydh3.jpg)

一位开发了一个让人们自动取消关注 Facebook 上的朋友和团体的工具的开发者说，他的作品已经[被这家社交网站永久禁止](https://www.theverge.com/2021/10/8/22716044/facebook-unfollow-everything-tool-louis-barclay-banned-for-life)了。Facebook 允许用户单独取消关注，从而将他们的内容从 Facebook 的算法控制的“消息提要”中删除。而该工具将这一过程自动化，瞬间抹去用户的“新闻源”。作者称，我没有失去什么，因为我仍然可以通过直接进入我最喜欢的朋友页面和群组看到他们。但我却获得了惊人的控制力，我不再被诱惑着向下滚动无限的内容。一夜之间，我的“Facebook 瘾”变得可控了。Facebook 称他创建的软件使用户互动自动化，违反了该网站的服务条款。

>
> 老王点评：虽然说干脆删掉 Facebook App 是最好的，但是你这个“一键取关”工具让 Facebook 情何以堪。
>
>
>

### 谷歌数据中心尝试转向主线内核

![](/data/attachment/album/202110/09/113730wxa8xivgp79p4ax8.jpg)

谷歌数据中心产品系统运行的内核被称为 Prodkernel，它是基于较旧版本的 Linux 内核，加上谷歌打上的大约 9000 个补丁，补丁包括各种内部 API、硬件支持、性能优化，以及其它必要的微调。每隔两年左右时间，这些补丁会移植到较新版本的内核。但是谷歌发现这种工作模式面临越来越大的挑战。[为了解决这个问题](https://lwn.net/SubscriberLink/871195/d7e9acf5894446e6/)，谷歌发起了一个新的内核项目 Project Icebreaker。

>
> 老王点评：事实证明，关起门来发展私有分支在 Linux 内核发展迅猛的今天，已经越来越不可行。
>
>
>


白话版《openEuler 21.09 技术白皮书》

Summary: 我阅读了这份几十页的《openEuler 21.09 技术白皮书》，发现其中有些值得重视的技术变化被掩盖在了枯燥的技术术语之中

分析得真好

与时俱进

![](/data/attachment/album/202110/09/163504iri7gw576c7a9vg0.jpg)

2021 国庆前一天，欧拉操作系统按照既定的半年发布一个创新版本的节奏，发布了第三个创新版本 **openEuler 21.09**。在前不久召开的“**华为全连接** **2021 大会**”上，我听到了欧拉即将进行“全新”发布的消息。作为一名长期观察欧拉发展的业内人士，我对这“全新”的说法是好奇的，这究竟是一种宣传的手法，亦或是真的有了很大不同？

怀着这个疑问，我对在“华为全连接 2021”后几天发布的 [openEuler 21.09](https://www.openeuler.org/) 是颇为关注的，希望可以第一时间拿到它的白皮书一窥究竟。几天后，欧拉发布了该版本的技术白皮书。我在翻阅后感觉，与其说欧拉是一辆粉饰一新的新车，不如说是它在引擎盖下做了颇多改进。

在这份几十页的《**openEuler 21.09 技术白皮书**》，颇有一些值得重视的技术变化被掩盖在了枯燥的技术术语之中，因此，本着一飨读者的想法，我对其中值得关注的地方，用更浅显的语言进行了一些解读。

### openEuler 发布

首先回顾一下欧拉的基本情况。欧拉最初脱胎于华为内部的 Linux 发行版 EulerOS，后于 2019 年底宣布开源，成为 **openEuler**。其主要面对的是服务器基础设施领域，并在次年春季发布了第一个 LTS 版本。欧拉的主要技术路线沿袭了红帽系的技术方向，无论是从软件包管理、文件系统布局、操作系统体验方面，都吸收了不少 CentOS/RHEL 惯例。但是，欧拉又不是一个 CentOS 的某个版本的下游分支版本，因为其从内核、特性、技术演进方向，都有自己的独立而确定的发展计划，这一点和 SUSE 公司的 openSUSE/SLES 发行版家族类似。

欧拉采用了定期发布版本的发行计划，每两年发布一个长期支持版本（LTS）。除了作为服务器操作系统所重视的长期支持和特性稳定之外，欧拉也是一个技术孵化器，它每半年发布一次的创新版，集成了社区的最新技术成果，将社区验证成熟的特性逐步回合到发行版中。从 2020 年 3 月发布第一个 LTS 版本之后，它已经发布了三个创新版本，按照计划，下一个 LTS 版本将于 2022 年 3 月到来。

![](/data/attachment/album/202110/09/161926ye5bbzd3005tudcc.jpg)

*openEuler 版本图*

如上所述，这次发布的 21.09 是一个创新版本，主要是迭代演进即将放入到下一个 LTS 版本中的新特性。在这个版本中，重点引入和发展的特性有：

* 内核的创新：新介质文件系统和内存分级扩展
* 云原生创新：容器操作系统、安全容器和双平面部署
* 增强的特性：对语言编译器的支持、对运维的支持
* 全场景创新：对编译计算、嵌入式场景的支持和集群加速引擎

下面，我们就这些特性展开来了解一下。

### 白话解析白皮书

如果不是欧拉社区的相关贡献者和长期参与者，你可能会觉得这份技术白皮书有些难读。我也是这样觉得的，不过，进行梳理之后，我把这几十页的内容凝聚成了几个关键字：**内核特性****、****容器技术****、****架构支持****和****场景支持**。

#### 内核特性

Linux 系统给你的感受是什么？可能有很多答案，但是归根到底，这是一幢建立在 Linux 内核基础之上的华厦。内核提供的各种新特性，通过上层的应用最终提供了各种公用。因此，一个 Linux 操作系统的根本就是内核。

说句题外话，国内流行的 CentOS，主要的原因还是大家信任它的内核。这一点，谁做过运维谁知道。而华为作为国内首屈一指的在 Linux 内核方面颇有建树的企业，这些年来，在 Linux 内核方面已经做出了诸多贡献。

![](/data/attachment/album/202110/09/162014mjavhqzixvggjgde.jpg)

*内核贡献图*

华为在芯片架构、ACPI、内存管理、文件系统、介质、内核文档、内核质量加固及代码重构等方面，十余年来总计向社区贡献 17000+ 个补丁。而在 Linux 内核 5.10 和 5.14 版本中，欧拉内核研发团队代码贡献量排名全球第一。

那么我们来看看具体在这个版本中，欧拉在内核方面做了什么努力。

欧拉 21.09 还是基于 Linux 内核 5.10 构建，但在进程调度、内存管理、网络等方面带来了 12 处创新，这主要有：用来提升性能的进程调度优化、大页内存性能优化、OOM 内存回收优化、XDP 网络性能优化等。

除了这些隐蔽但重要的内核改进之外，如今在运维领域已经大量使用的非易失性内存（NVDIMM）存储介质，在使用传统的 ext4 文件系统时，尚缺乏针对性的优化，因为 Ext4 本身是针对旋转式硬盘设计的文件系统。尤其在元数据管理方面，基于现有日志同步机制，元数据管理开销大，且容易出现写放大问题，NVDIMM 优势无法充分发挥。华为推出的 Eulerfs 创新的元数据软更新技术，减少了元数据同步开销，有效提升文件系统的系统调用性能。在单机应用、云原生分布式应用高性能数据存储场景，可以代替 Ext4、XFS 等文件系统。

#### 容器技术

现在的运维领域，几乎是言必称云原生。一个操作系统的对云原生、虚拟化的支持力度，也成了一种试金石。

欧拉面向云原生业务混合部署场景提出了一种 QAS 算法。它是一种适用于云原生场景，业务混合部署的全新调度算法，可以确保在线任务对 CPU 的快速抢占，确定性的调度运行，同时压制离线任务干扰。此外，在欧拉中还优化了 OOM（内存使用超量）时内存回收调度算法，在发生 OOM 时，优先对低优先级的进程组进行内存回收，保障在线业务的正常运行。这些改进适用于对交互类等时延敏感型业务（比如 MySQL、Redis、Nginx 等）和 CPU 消耗重且时延不敏感的业务（如 AI 离线训练）混合部署，它包括了容器与容器、容器与进程、容器与虚机、虚机与虚机等多种混合部署场景。

Kubernetes 已经成为事实上的云原生软件基础设施底座。业界的主流操作系统厂商都推出了针对云原生场景的操作系统。欧拉自然也不甘人后，推出了容器化操作系统 KubeOS，实现云原生集群操作系统的统一容器化管理。它可以对操作系统容器化管理、对接 Kubernetes、原子化的生命周期管理；它也对操作系统进行了轻量化裁剪，减少不必要的冗余包，可实现系统的快速升级、替换等。

再往底层看，欧拉结合虚拟化运行时 StratoVirt、容器管理引擎 iSulad 构建了安全容器方案，较之传统的 Docker + Qemu 方案，其底噪和启动时间优化高达 40% 以上，为应用提供了一个轻量、安全的执行环境，隔离了容器和宿主机操作系统间、容器间的安全风险。

#### 架构支持

针对不同的硬件架构，欧拉在编程语言和架构方面还做了支持。

欧拉提供的毕昇 JDK 是基于 OpenJDK 开发的增强版本，具备高性能、高可用等优点，可用于生产环境。值得一提的是，它积累了大量使用场景，并针对 ARM 进行了性能优化。毕昇 JDK 支持 OpenJDK 8 和 OpenJDK 11 两个版本。

在欧拉中也有鲲鹏处理器打造的高性能编译器，Kunpeng GCC 编译器是基于 GCC 开发的，可以充分发挥鲲鹏的硬件特性，运行效率更高。

据测试，毕昇 JDK 在 SPECjbb2015 等基准测试中性能优于 OpenJDK。Kunpeng GCC 编译器在 SPEC CPU 2017 等基准测试中性能大幅优于上游社区的 GCC 10.3 版本。欧拉最初就是针对华为鲲鹏硬件架构开发的操作系统，因此，在欧拉中自然提供了针对性的优化，以充分发挥鲲鹏服务器硬件特性，这也算是应有之义。

在这次发布中，华为还重点提及，欧拉最初是作为对鲲鹏硬件的支持出现的，但是现在已经扩展到支持 x86、ARM、RISC-V 等多处理器架构，未来还会扩展 PowerPC、SW64 等更多芯片架构支持。但是从白皮书中，我们尚没有看到对其它处理器架构的特定优化工作和测试数据。

#### 场景支持

从白皮书中我们看到，欧拉现在从对服务器场景的应用，逐步拓展到云计算、边缘计算、嵌入式等更多场景，正成为覆盖全场景的操作系统。

欧拉透露，它将发布面向边缘计算的版本 openEuler 21.09 Edge 和面向嵌入式的版本 openEuler 21.09 Embedded。这两个针对不同场景的版本突破了原有的服务器基础设施领域，但是，从我了解到的情况看，这其实已经不是 Linux 内核为基础的操作系统了，而是基于华为本身在这些领域的内核及应用开发的。可以理解为在一个统一的框架下的不同内核、不同操作系统。

![](/data/attachment/album/202110/09/162152afkaijwf7sapt3ff.jpg)

*欧拉的多场景支持*

当然，除此以外，在这次发布的欧拉 21.09 中，还有很多具体方向的创新和改进，感兴趣的同学可以获取这份技术白皮书以了解究竟。

### 结语

每半年发布的一个创新版，我认为并不是很适合于需要特性稳定的产品环境部署，但是通过这些创新版本，社区和相关生态的企业可以提前针对新的特性进行开发、测试和优化。而无论是服务器环境，还是嵌入式、边缘技术，都需要一个具备稳定性、高性能、精细调优的操作系统，这就是明年 3 月将发布的下一个 LTS 版本的目标。而且，除了长期支持以外，我们可以期待在创新版中发布的新特性，也会经过打磨后融入到 LTS 版本中。

当然，我认为，LTS 版本并不是一个口号，而是需要真正地提供支持和维护。这是一种并不像发布新版本那么令人激动的工作，但是这种持续的支持，才是一个企业级的操作系统的根本。我们期望看到欧拉能够践行其对技术创新和长期支持的承诺和落实。

---

想要进一步了解这份《**openEuler 21.09 技术白皮书**》，可以[点击此处下载](https://www.openeuler.org/whitepaper/openEuler-whitepaper-2109.pdf)。


Dialect：Linux 下的开源翻译应用

>
> Dialect 是一个简单明了的应用，可以让你使用 Web 服务进行语言间的翻译。想要了解更多的话，让我们来一窥究竟。
>
>
>

![](/data/attachment/album/202110/10/115724t5xgx8agu8asag0u.jpg)

虽然你可以启动 Web 浏览器并直接使用任何翻译服务来完成工作，但桌面应用有时会派上用场。

Dialect 是一个简单的翻译应用，可以利用 Web 服务进行翻译，同时给你一些额外的能力。

### 使用谷歌翻译和 LibreTranslate 的开源翻译应用

![](/data/attachment/album/202110/10/115731zqpkk7zddoce733k.png)

Dialect 是一个主要为 GNOME 桌面定制的应用，但它在其他桌面环境下也应该能正常工作。

它可以让你快速翻译语言，同时还有一些额外的选项。

在其核心部分，你可以选择谷歌翻译或 LibreTranslate 翻译服务。

尽管 LibreTranslate 达不到谷歌翻译的准确性，但把它作为一个选项来切换是一个很好的补充。至少，对于一些基本的用法，如果用户不想利用谷歌的服务，你的桌面上就有一个备选方案。

### Dialect 的特点

![](/data/attachment/album/202110/10/115731fbze0k0a5zuaakka.png)

除了切换翻译服务外，你还能得到如下个功能：

* 发音
* 文本到语音（TTS）功能（谷歌）
* 黑暗模式
* 翻译快捷方式
* 实时翻译
* 剪贴板按钮可快速复制/粘贴
* 翻译历史（撤销/重做）

正如你在截图中所注意到的，实时翻译功能可能会因为滥用 API 而使你的 IP 地址被禁止使用服务。

![](/data/attachment/album/202110/10/115731lh3jso3z9vv99xv1.png)

我试着使用 LibreTranslate（如上图所示）和谷歌翻译，并启用实时翻译功能，它工作得很好。

也许，如果你经常依赖翻译，你可能想避免这个实时翻译。但是，对于我的临时使用，在相当多的测试中，该服务并没有导致 IP 地址被禁止。

重要的是要注意，如果你想，你可以指定一个自定义的 LibreTranslate 实例。默认情况下，它使用 “[translate.astian.org](http://translate.astian.org)” 作为实例。

你可能找不到一个单独显示的翻译历史区域，但窗口左上角的箭头按钮会让你看到你以前的翻译，以及翻译设置。

所以，它也可以作为一个重做/撤销的功能。

### 在 Linux 中安装 Dialect

[Dialect](https://flathub.org/apps/details/com.github.gi_lom.dialect) 是以 [Flatpak](https://itsfoss.com/what-is-flatpak/) 的形式提供的。所以，你应该能够在你选择的任何 Linux 发行版上安装它。如果你是新手，你可能想看看我们的 [Flatpak 指南](https://itsfoss.com/flatpak-guide/) 以获得帮助。

首先，添加 Flathub 仓库：

```
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

```

然后安装应用：

```
flatpak install flathub com.github.gi_lom.dialect

```

安装后，在系统菜单中寻找它，并从那里启动它。

你也可以浏览它的 [GitHub 页面](https://github.com/dialect-app/dialect/) 了解更多信息。

---

via: <https://itsfoss.com/dialect/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何在 Linux 上手动安装 Java

Summary: 手动安装可以让用户更好的控制 Java 运行时环境。

手动安装可以让用户更好的控制 Java 运行时环境。

>
> 手动安装可以让用户更好的控制 Java 运行时环境。
>
>
>

![](/data/attachment/album/202110/10/143844wm2x4d18b1mb8md1.jpg "Penguin driving a car with a yellow background")

[使用 Linux 发行版的软件包管理工具来安装 Java 软件包](/article-13864-1.html) 是很容易的。然而，有时你需要手动安装 Java。这对基于 Java 的应用服务器（如 Tomcat 或 JBoss）的管理员特别重要。许多开源和专有软件产品都依赖于这些服务。

### 开发者或运行时套件？

<ruby> Java 虚拟机 <rt>  Java Virtual Machine </rt></ruby>（JVM）以两种不同的形式提供：<ruby> Java 开发工具包 <rt>  Java Development Kit </rt></ruby>（JDK）或 <ruby> Java 运行时环境 <rt>  Java Runtime Environment </rt></ruby>（JRE）。

软件开发人员通常需要 JDK。它包含编译、运行和测试源代码所需的二进制文件。部署一个预先建立的 Java 应用程序通常只需要 JRE。它不包括编译器和其他开发工具。由于安全性的提高和空间的限制，通常在生产环境中安装 JRE。

### 获取 Java

你可以从网上下载开源的 Java 软件。你可以在 [Red Hat Developer](https://developers.redhat.com/products/openjdk/download)、[Adoptium.net](https://adoptium.net/) 下载 OpenJDK 打包文件，或从 Azul 下载 [Zulu 社区版](https://www.azul.com/downloads/zulu-community) 。

### 安装 Java

设置一个目录来存放 Java 文件。我喜欢创建一个简单的名为 `java` 的目录，这样我就可以在一个专门的目录中下载并解压打包文件：

```
$ mkdir -p java/jdk

```

让我们在这个例子中使用 JDK。将下载的文件保存到 `jdk` 目录下。然后换到该目录：

```
$ cd java/jdk
$ ls
OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz

```

提取该打包文件。注意，`tar` 会创建一个新的目录：

```
$ tar xvzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz
$ ls
jdk-11.0.12+7 OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz

```

使用 `-version` 选项确认新 JVM 的版本。

```
$ cd jdk-11.0.12+7/bin
$ ./java -version

```

JVM 的版本输出看起来类似这样：

```
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7)
OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode)

```

#### 环境变量

为了确保一个特定的应用程序能够正常工作，它需要确切地知道如何定位 JVM。有两个主要的变量需要设置：`JAVA_HOME` 和 `PATH`。

```
$ echo $JAVA_HOME
$ echo $PATH

```

这些可以在用户的 `.bashrc` 文件中设置。确保这些变量出现在 [任何设置 PATH 的现有代码](https://opensource.com/article/17/6/set-path-linux) 之后：

```
#Set the JAVA_HOME
export JAVA_HOME=~/java/jdk/jdk-11.0.12+7
#Add the JAVA_HOME to the PATH
export PATH="$JAVA_HOME/bin:$PATH"

```

### 手动安装的情况

有几种情况需要手动安装 Java。请考虑以下三种情况：

一种情况可能是要求使用不同的，也许是较早的，在你的 Linux 发行版的软件库中已经没有的 Java 版本。

另一个例子可能是由安全推动的决定，即 Java 不会被默认安装在操作系统上或在“根级别”上。

第三种情况是可能需要几个不同版本的 Java，通常是因为 J2EE Web 应用程序的多个实例在同一台服务器上运行。由于越来越多地使用虚拟机和容器来隔离进程，这种操作系统共享在今天已经不太常见了。然而，由于需要维护不同的容器镜像，对手动安装的理解仍然至关重要。

### 总结

我演示了我手动安装 Java 运行时环境的方式，但你可以制定一个最适合你需求的惯例。最终，手动安装让用户可以更好的控制 Java 运行时环境。

---

via: <https://opensource.com/article/21/9/install-java-manually-linux>

作者：[Alan Formy-Duval](https://opensource.com/users/alanfdoss) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #420 Firefox 93 在地址栏显示广告

Summary: 更多：• Python 登顶 TIOBE 排行榜 • 微软再次改进了 Windows Linux 子系统（WSL）

小狐狸都穷的揭不开锅了，还不赶紧救救孩子 lol

![](/data/attachment/album/202110/10/155954vvew5huwjue7sseh.jpg)

### Firefox 93 在地址栏显示广告

![](/data/attachment/album/202110/10/160004z5ye273f9ks2t3lg.jpg)

Firefox 的 URL 地址栏已不再满足于在用户输入时通过浏览器历史记录来提供相关建议，而是引入了来自“可信赖合作伙伴”的“相关建议”与“赞助建议”。通俗地说，就是你在地址栏输入 URL 时会 [显示广告](https://www.howtogeek.com/760425/firefox-now-sends-your-address-bar-keystrokes-to-mozilla/)！在用户启用输入建议时，键盘按下信息会被送到 Mozilla；在点击了建议链接后，该链接会被反馈给 Mozilla；此外，用户的地理位置也会发给 Mozilla。Mozilla 声称这么做有助于 Firefox 的后续开发与优化，说它会“非常保守地处理这些数据”。需要补充的是，这个输入建议功能可以被关闭。

>
> 老王点评：连谷歌都不敢这样干啊！
>
>
>

### Python 登顶 TIOBE 排行榜

![](/data/attachment/album/202110/10/160025klitmlixti8tm5mi.jpg)

[TIOBE 指数宣布](https://www.tiobe.com/tiobe-index/)，“20 多年来，我们第一次有了一个新的领导者 …… Java 和 C 的长期霸权已经结束。”Python 之父 Guido 对此说：“我想感谢整个 Python 社区，是他们让 Python 如此成功。” Python 胜出主要是其他语言的搜索量下降而不是 Python 上升的结果。它的搜索份额为 11.27%，与去年 10 月持平。虽然这些年数据科学的兴起及其机器学习软件库的生态系统为它提供了源源不断的动力。

另外，[Python 3.10 刚刚发布](https://docs.python.org/3.10/whatsnew/3.10.html)，这是从 Python 2 过渡以来的第一个重要版本。其中一个重要的功能是引入“结构模式匹配”，这种处理数据的技术已经在 C、Java、JavaScript 中使用。此外还有提供用于调试的更精确和可靠的行号，以及管道操作符的重载等。

>
> 老王点评：Python 已经是一种必备技能了，像我这种早些年用 Perl 人对此真是羡慕的很。
>
>
>

### 微软再次改进了 Windows Linux 子系统（WSL）

![](/data/attachment/album/202110/10/160041pnpbrsbgs2k2ikwo.jpg)

在 Windows 10 和 11 上，WSL 的部署过程已[显著简化](https://arstechnica.com/gadgets/2021/10/the-best-part-of-windows-11-is-a-revamped-windows-subsystem-for-linux/)，可以通过 `wsl --install` 和 `wsl --update` 更快地安装和更新系统。而之前大约需要 3 到 4 个步骤才能启用 WSL。用户可以在 WSL 中安装图形应用程序，让它们与 Windows 应用程序一起运行，并且支持 GPU 加速的 3D 图形及音频。

>
> 老王点评：我看相当一部分 Linux 桌面用户会被吸引到 WSL 上。
>
>
>


在 Linux 上使用 jps 命令检查 Java 进程

Summary: 系统上运行着诸多进程，通过 jps 命令能够快速有效识别 Java 进程。

系统上运行着诸多进程，通过 jps 命令能够快速有效识别 Java 进程。

>
> 系统上运行着诸多进程，通过 `jps` 命令能够快速有效识别 Java 进程。
>
>
>

![](/data/attachment/album/202110/11/102806lhhtyalq2lv2vbte.jpg "Coffee beans")

在 Linux 中，有一些用于查看系统上运行进程的命令。进程是指由内核管理的正在进行的事件。每启动一个应用程序时，就会产生一个进程，但也有许多在计算机后台运行的进程，如保持系统时间准确的进程、监听新文件系统的进程、索引化文件的进程等。有一些可以用来监测这些进程的实用程序，比如包含在 [procps-ng 包](https://opensource.com/article/21/8/linux-procps-ng) 中的程序，但它们往往都是对各种进程通用的。它们会查看计算机上的所有进程，你可以根据需要过滤结果列表。

在 Linux 中，可以通过 `ps` 命令查看进程。这是查看当前系统上运行进程最简单的方法。

```
$ ps
    PID TTY          TIME CMD
   4486 pts/0    00:00:00 bash
  66930 pts/0    00:00:00 ps

```

你也可以通过 `ps` 命令，并配合结果输出管道符进行 `grep`，从而查看系统上运行的 Java 进程，。

```
$ ps ax |grep java
  67604 pts/1    Sl+    0:18 /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-4.fc34.x86_64/bin/java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties -jar /home/alan/wildfly/24.0.1/jboss-modules.jar -mp /home/alan/wildfly/24.0.1/modules org.jboss.as.standalone -Djboss.home.dir=/home/alan/wildfly/24.0.1 -Djboss.server.base.dir=/home/alan/wildfly/24.0.1/standalone

```

然而，OpenJDK 有自己专属的进程监视器。<ruby> Java 虚拟机进程状态 <rt>  Java Virtual Machine Process Status </rt></ruby>（jps）工具可以帮你扫描系统上所有运行的 Java 虚拟机（JVM）实例。

要想实现与 `ps` 命令类似的输出，可以使用 `-v` 选项。这很实用，这与 `ps` 相比，可以减少你的输入。

```
$ jps -v
67604 jboss-modules.jar -D[Standalone] -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties

```

`jps` 命令的默认输出包含进程标识符，类名或 Jar 文件名。

```
$ jps
67604 jboss-modules.jar
69430 Jps

```

**注意：** `jps` 的手册页指出此命令是试验性且不受支持的。尽管如此，它仍然是一个不错的选择，因为一个系统通常运行着许多进程，这种只识别 Java 进程的快速方法是很有用的。

当下的 Java 仍然是一种流行的语言，所以熟悉 Java 开发工具包和运行时环境仍然很重要。它们包含着许多适用于 Java 应用程序开发和维护的工具。

---

via: <https://opensource.com/article/21/10/check-java-jps>

作者：[Alan Formy-Duval](https://opensource.com/users/alanfdoss) 选题：[lujun9972](https://github.com/lujun9972) 译者：[unigeorge](https://github.com/unigeorge) 校对：[turbokernel](https://github.com/turbokernel)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


基于 KDE 的最佳 Linux 发行版

Summary: KDE 是目前最具定制性和最快速的桌面环境之一。

第一句的"最快速"，我坚决不认同

来自广东佛山的 Chrome Mobile 71.0|Android 6.0 用户

后面有个“之一”嘛，约定俗成

KDE 是目前最具定制性和最快速的桌面环境之一。

![](/data/attachment/album/202110/11/115436wngdi7vndoodjnfd.jpg)

KDE 是目前最具定制性和最快速的桌面环境之一。虽然你可以随时安装 KDE，但最好选择一个 KDE 开箱即用的 Linux 发行版。

在这里，让我列出一些最好的基于 KDE 的 Linux 发行版。

无论你选择什么作为你的首选发行版，你都可以参考我们的 [KDE 定制指南](https://itsfoss.com/kde-customization) 来调整你的体验。

注意：该列表没有特定的排名顺序。

### 1、KDE Neon

![](/data/attachment/album/202110/11/115459ekqu4ncauq447oss.jpg)

主要亮点：

* 官方 KDE 发行版
* 最新的 KDE Plasma 稳定版
* 专注于最新的 KDE 软件
* 不是桌面发行版的完美替代品

如果你想获得 KDE Plasma 的最新体验，[KDE Neon](https://neon.kde.org/index) 是最佳选择之一。

即使它是建立在稳定版的 Ubuntu LTS 基础之上，你也总是能在最新的 KDE 版本发布后立即得到交付。

与其他发行版不同，它不注重完整的桌面用户体验，而是重点关注在 KDE 软件包上。所以，它可能不是每个人的完美桌面替代品。然而，如果你希望使用最新的 KDE 软件，KDE Neon 是一个不错的选择。

其“用户版”应该是你需要的，但如果你愿意尝试预先发布的功能，你也可以选择尝试“测试版”或“不稳定版”。

如果你想知道它与 Kubuntu 有什么不同，你应该查看 [KDE Neon vs Kubuntu](https://itsfoss.com/kde-neon-vs-kubuntu/) 的比较来探索它。

### 2、Kubuntu

![](/data/attachment/album/202110/11/115459ar460aw7q9xu4jqa.jpg)

主要亮点：

* 基于 Ubuntu 的以桌面为重点的 Linux 发行版
* 提供 LTS 和非 LTS 版本
* 良好的硬件兼容性

如果 KDE 软件套件不是你关注的重点，那么 Kubuntu 应该是你可以作为 Linux 桌面使用的一个优秀发行版。

Kubuntu 是 Ubuntu 的一个官方版本，它为其 LTS 版本提供了三年的更新支持。与 KDE Neon 不同的是，你可以得到对各种应用程序更好的支持，而不仅仅是局限于 KDE 软件。

你可以选择 LTS 版或非 LTS 版来获得最新的 Ubuntu 功能。

与其他一些基于 KDE 的发行版相比，Kubuntu 具有更好的硬件兼容性。考虑到它可以为各种笔记本电脑提供动力，如 Kubuntu Focus、Slimbook 等，其硬件兼容性是你可以信赖的。

### 3、Manjaro KDE

![](/data/attachment/album/202110/11/115459prgp9sqgrqqgdzoo.jpg)

主要亮点：

* 基于 Arch 的 Linux 发行版
* 滚动式发布更新
* 对于新的 Linux 用户来说学习难度不大

Manjaro 是一个基于 Arch Linux 的发行版，它使得使用 Arch 作为桌面 Linux 平台变得容易。

它按照滚动发布的时间表进行发布，这应该有助于你快速获得最新的软件包，而不必担心软件更新时间。

如果你是一个新的 Linux 用户，你可以考虑一直使用 Flatpak 或 Snaps 来安装各种应用程序。虽然 Manjaro 让你很容易使用 Arch，但它对新用户来说多多少少还是有一点学习曲线。所以，你可能需要查看 [Arch 维基](https://wiki.archlinux.org) 来了解更多信息。

### 4、Fedora KDE Spin

主要亮点：

* 一个独特的基于 KDE 的 Linux 发行版（如果你不喜欢主流的 Ubuntu/Arch 发行版）
* 为工作站和服务器量身定做
* 对于新的 Linux 用户来说可能需要适应
* 硬件兼容性可能是个问题

Fedora 是一个独立的发行版（不基于 Ubuntu/Arch），作为 Red Hat Enterprise Linux 的上游。

而 Fedora Spin 版为用户提供了各种备用的桌面。如果你想要 KDE，你需要下载 Fedora 的 KDE Spin。

像 KDE Neon 一样，Fedora 并不专注于提供一个最佳的桌面体验，而是旨在实验对工作站或服务器有用的最新技术。

因此，如果你有信心解决 Linux 发行版上较新技术实现所带来的任何问题/挑战，[Fedora KDE Spin](https://spins.fedoraproject.org/en/kde/) 是一个不错的选择。

### 5、openSUSE

![](/data/attachment/album/202110/11/115459ymy1a14chr4z45a8.png)

主要亮点：

* 适用于需要使用多种工具的系统管理员和开发人员
* 有两个不同的版本，包括稳定版和滚动版

[openSUSE](https://www.opensuse.org) 是另一个独立的 Linux 发行版，默认采用 KDE 桌面。虽然它把自己定位为桌面用户的选择之一，但我在过去曾遇到过硬件兼容性问题。

然而，对于想在桌面上使用 YaST、Open Build Service、Kiwi 等工具的系统管理员或开发者来说，它是一个很好的选择，开箱即用。

它提供了一个稳定版和一个滚动发布版。根据你的要求选择最适合你的。

### 6、Garuda Linux

![](/data/attachment/album/202110/11/115459xbyziihc9zhhzcb8.png)

主要亮点：

* 滚动发布的发行版
* BTRFS 作为默认文件系统
* 预装了基本的 GUI 工具，使 Arch Linux 的使用变得简单

[Garuda Linux](https://garudalinux.org) 是一个基于 Arch 的现代发行版，专注于开箱即用的定制体验。

KDE 版本（或 Dr460nized 版本）提供了漂亮的体验，同时可使用类似 macOS 的工作流程进行调整。

当然，如果你是一个有经验的 Linux 用户，你可以定制你现有的发行版来模仿同样的体验。

锦上添花的是，Garuda Linux 还提供了其 KDE 版本的不同变体，一个预装了游戏工具，一个用于渗透测试，另一个作为基本的 Linux 桌面系统。

### 7、Nitrux OS

![](/data/attachment/album/202110/11/115459uirgjibj8cv8gs77.png)

主要亮点：

* 基于 Debian 的发行版，不同的风格
* 独特的桌面体验

一个基于 Debian 的 Linux 发行版，具有开箱即用的 KDE。与 Kubuntu 不同，Nitrux 最终可能提供的是一个更快的 KDE Plasma 更新和较新的 Linux 内核升级。

[Nitrux OS](https://nxos.org) 在以其 NX 桌面为特色的同时，提供了一个美丽而独特的体验。

如果你想尝试一些不同的 KDE 搭载，Nitrux OS 将是一个不错的选择。

### 8、MX Linux KDE

![](/data/attachment/album/202110/11/115459fi1gzff53431cgit.jpg)

主要亮点：

* 基于 Debian 的发行版
* 轻量级
* 预装了有用的 MX 工具

不在意外观，但想要一个简单的、可定制的、基于 Debian 的 KDE 桌面？[MX Linux KDE 版](https://mxlinux.org) 应该是一个很好的选择，因为它以迅捷的性能和预装的基本工具而闻名。

如果你想调整默认的用户体验，你还可以得到几个 KDE 主题。

### 总结

在这个列表之外，其他几个 Linux 发行版也将 KDE 桌面作为他们的首选。

总体来说，Nitrux OS 应该是一个独特的选择，如果你想远离基于 Ubuntu 的发行版，还有像 Garuda Linux 和 Manjaro 这样基于 Arch 的可靠发行版可以尝试。

你最喜欢的基于 KDE 的 Linux 发行版是什么？你是专注于开箱即用的定制，还是喜欢自己定制 KDE 体验？

---

via: <https://itsfoss.com/best-kde-distributions/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #421 FSF 称 Windows 计算机不应叫做“个人电脑”

Summary: 更多：• 研究发现，iOS 应用的隐私性并不比安卓好 • 针对 Linux 系统新的 FontOnLake 恶意软件家族出现

不只是服务器领域，桌面用户领域也在增加使用LINUX的比例

很多是老舊電腦，沒TPM2.0之類。我的是i7-4770

PC基本上是微軟電腦的專稱，PC健康檢查 這稱呼沒有任何問題

Iphone肯定比android安全，更保護私隱，更少追蹤

![](/data/attachment/album/202110/11/132200t2fnbaoendobxc4x.jpg)

### FSF 称 Windows 计算机不应叫做“个人电脑”

![](/data/attachment/album/202110/11/132210vq50nkq20500nee1.jpg)

[FSF 在声明中称](https://www.fsf.org/news/lifes-better-together-when-you-avoid-windows-11)，“把 Windows 机器称为‘个人电脑（PC）’已经不再合适，因为它对微软的服从超过了对用户的服从。”Windows 11 现在需要一个微软账号连接每个用户账号，允许微软关联用户行为和个人身份。即使是那些认为自己没有什么可隐瞒的人，也应该对与任何公司分享其潜在的所有计算活动保持警惕，更不用说像微软这样有滥用记录的公司。FSF 也说，“微软将检查是否兼容 Windows 11 的程序称为 ‘PC 健康检查’是很讽刺的，因为一台‘健康’的电脑是应该尊重用户意愿，而不是故意限制用户。”

>
> 老王点评：似乎只有 FSF、EFF 等少数组织才在意自由和隐私，而大部分普通人都不在意。
>
>
>

### 研究发现，iOS 应用的隐私性并不比安卓好

![](/data/attachment/album/202110/11/132229xaha855v8a333c8a.jpg)

[据报道](https://www.tomsguide.com/uk/news/ios-android-app-privacy-parity)，根据牛津大学的 [研究报告](https://arxiv.org/pdf/2109.13722.pdf)，“在我们研究的各个维度上，两个平台的隐私都没有明显的优势。”iOS 应用往往会像安卓应用一样经常侵犯你的隐私。研究人员分析了每个平台上随机选择的 12,000 个免费应用的代码、权限和网络流量，这些应用程序更新或发布于 2018 年或之后。研究发现，89% 的安卓应用都至少包含一个追踪库，这几乎总是谷歌游戏服务。而在 iOS 上这一比例是 79%，基本上是苹果自己跟踪广告的 SKADNetwork。另外，90% 的安卓应用和超过 60% 的 iOS 应用与谷歌旗下的追踪公司共享数据。有一点需要注意，该研究是在 2021 年 4 月推出的 iOS 14.5 系统之前进行的，在这个版本使 iPhone 上的跟踪和应用隐私标签成为强制性选择。

>
> 老王点评：被跟踪、被定位、被分析，这就是如今的消费科技生态，几乎没有净土。
>
>
>

### 针对 Linux 系统新的恶意软件家族出现

![](/data/attachment/album/202110/11/132250y8zz70kvsa71808d.jpg)

[ESET 报告说](https://www.securityweek.com/fontonlake-linux-malware-used-targeted-attacks)，发现了一个以前未知的、针对 Linux 系统的模块化恶意软件家族，它用于收集凭证并获得对受害者系统的访问。这个被称之为 FontOnLake 的恶意软件家族采用了一个 rootkit 来掩盖其存在，并在其中集成了木马和后门，还为每个样本使用了不同的命令和控制服务器以加强隐蔽性。与这个家族有关的第一批恶意软件样本出现在去年 5 月。

>
> 老王点评：现在越来越多的针对 Linux 系统了，因为 Linux 广泛使用在服务器领域。
>
>
>


/e/ 云：一个去谷歌化的 Google Drive 替代方案

![](/data/attachment/album/202110/12/122933awf0z9vnqdzslv1q.jpg)

>
> /e/ 云是 e.foundation 使用 Nextcloud 等开源工具创立的，以作为 Google Drive 和 Gmail 的替代品。
>
>
>

![](/data/attachment/album/202110/12/122940to6rre7ekmi8ksxs.png)

Google Drive 是一种流行的云存储服务，在大多数情况下效果很好。

然而，它可能不是最关注隐私的选择。因此，要完全控制你的数据，最好的办法是启动一个 [Nextcloud](https://itsfoss.com/nextcloud/) 实例，存储你的基本数据，并可以访问其他协作工具。

虽然这听起来不错，但不是每个人都能投入精力来创建和维护他们的实例。这就是 /e/ 云上场的时候了，它是由 [去谷歌化的安卓操作系统 /e/ 操作系统](https://itsfoss.com/e-os-review/) 背后的同一个团队建立的。

/e/ 云主要将自己定位为一个新的 Google Drive 私人替代品，并提供一个取代 Gmail 的邮箱。

### /e/ 云：带有邮箱的 Nextcloud 及 OnlyOffice

![](/data/attachment/album/202110/12/122941axxs9kxocq2512zx.png)

当你创建一个 /e/ 账户时，它会给你一个私人电子邮件地址 [xyz@e.email](mailto:xyz@e.email)。

而且，同邮箱地址一起，你会得到 1GB 的免费 /e/ 云存储空间和一个由 Nextcloud 和 OnlyOffice 为核心的协作平台。

因此，如果你想利用 Nextcloud 和 OnlyOffice 来取代谷歌的工具套件，而不需要自己全部设置，/e/ 云可以成为一个引人注目的以隐私为中心的选择。

![](/data/attachment/album/202110/12/122943xcbc4oed4bx0tqqq.png)

除了 OnlyOffice 的文件存储和文档支持外，你还可以使用日历，存储笔记，并添加任务。

因此，它也可以成为一个正式的以隐私为中心的协作平台，你可以免费使用。

如果你想要更多的存储空间，你可以将你的订阅升级到付费计划，你可以根据需要选择 20 到 1TB 的存储空间，并按月/年计费。定价计划起价低至 3 美元/月。

毫无疑问，如果你在手机上使用 /e/ 操作系统或使用一个 /e/ 智能电话，这应该是一种无缝体验。

但是，你也可以使用第三方邮件客户端和 Nextcloud 移动应用在任何设备上使用它。

* [注册 /e/ 云](https://e.foundation/e-email-invite/)

### 总结

考虑到它相对较新，正计划增加几个功能，包括端到端加密，从 Google Drive 迁移等。

你可以注册一个帐户并免费试用。

对于像 /e/ 云这样以 Nextcloud 为核心的主流解决方案，除了电子邮件和协作服务外，还能帮助你安全地管理/存储文件，你觉得怎么样？

---

via: <https://news.itsfoss.com/e-cloud/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


使用 Jekyll 构建你的网站

>
> Jekyll 是一个开源的静态网站生成器。你可以使用 Markdown 编写内容，使用 HTML/CSS 来构建和展示，Jekyll 会将其编译为静态的 HTML。
>
>
>

![](/data/attachment/album/202110/12/145349rblj459naj74j5nr.jpg "Person using a laptop")

近年来开始流行静态网站生成器和 JAMStack，而且理由很充分，它们不需要复杂的后端，只需要静态的 HTML、CSS 和 Javascript。没有后端意味着更好的安全性、更低的运营开销和更便宜的托管。双赢！

在本文中，我将讨论 Jekyll。在撰写本文时，[我的个人网站使用的是 Jekyll](https://gitlab.com/ayush-sharma/ayushsharma-in)。Jekyll 使用 Ruby 引擎将用 Markdown 编写的文章转换成 HTML。[Sass](https://sass-lang.com/) 可以将复杂的 CSS 规则应用到普通文本文件中。[Liquid](https://shopify.github.io/liquid/) 允许对静态内容进行编程控制。

### 安装 Jekyll

[Jekyll 网站](https://jekyllrb.com/docs/installation/) 提供了 Linux、MacOS 和 Windows 安装说明。安装完成之后，[快速引导](https://jekyllrb.com/docs/) 将会安装一个基础的 Hello-World 项目。

现在在你的浏览器访问 `http://localhost:4000`，你可以看到你的默认“真棒”博客。

![Default "awesome" blog](/data/attachment/album/202110/12/145400v2l2ezesct52f2e6.png "Default \"awesome\" blog")

### 目录结构

这个默认站点包含以下的文件和文件夹：

* `_posts`: 你的博客文章。
* `_site`: 最终编译成的静态网站文件。
* `about.markdown`: “关于页”的内容。
* `index.markdown`: “主页”的内容。
* `404.html`: “404 页”的内容。
* `_config.yml`: Jekyll 的全站配置文件。

### 创建新的博客帖子

创建帖子很简单。你需要做的就是在 `_post` 目录下使用正确的格式和扩展名创建一个新文件，这样就完成了。

有效的文件名像 `2021-08-29-welcome-to-jekyll.markdown` 这样。一个博客文件必须包含 Jekyll 所谓的 YAML <ruby> 卷首块 <rt>  Front Matter </rt></ruby>。它是文件开头的一个包含元数据的特殊部分。如果你查看默认的帖子，你可以看到以下内容：

```
---
layout: post
title: "Welcome to Jekyll!"
date:  2021-08-29 11:28:12 +0530
categories: jekyll update
---

```

Jekyll 会使用上面的元数据，你也可以自定义 `key: value` 键值对。如果你需要一些提示，[请查看我的网站的卷首](https://gitlab.com/ayush-sharma/ayushsharma-in/-/blob/2.0/_posts/2021-07-15-the-evolution-of-ayushsharma-in.md)。除了前面的问题，你还可以 [使用内置的 Jekyll 变量](https://jekyllrb.com/docs/variables/) 来自定义你的网站。

让我们创建一个新的帖子。在 `_posts` 文件夹下创建 `2021-08-29-ayushsharma.markdown`。内容如下：

```
---
layout: post
title:  "Check out ayushsharma.in!"
date:   2021-08-29 12:00:00 +0530
categories: mycategory
---
This is my first post.

# This is a heading.

## This is another heading.

This is a [link](<http://notes.ayushsharma.in>)

This is my category:

```

如果 `jekyll serve` 命令仍在运行，刷新页面，你将看到下面的新帖子。

![New blog entry](/data/attachment/album/202110/12/145401thuu8avakvu8hes5.png "New blog entry")

恭喜你创建了你的第一篇帖子！这个过程看起来很简单，但是你可以通过 Jekyll 做很多事情。使用简单的 Markdown，你可以归档博客、高亮显示代码片段以及分类管理帖子。

### 草稿

如果你还没准备好发布你的内容，你可以创建一个 `_drafts` 文件夹。此文件夹中的 Markdown 文件仅通过传递 `--drafts--` 参数来呈现。

### 布局和包含

请注意 `_post` 文件夹中两篇文章的卷首块，你将在其中看到 `layout: post`。`_layout` 文件夹中包含所有布局。你不会在源代码中找到它们，因为 Jekyll 默认加载它们。Jekyll 使用的默认源代码在 [这里](https://github.com/jekyll/minima/blob/master/_layouts/post.html)。如果你点击该链接，你可以看到 `post` 的布局使用了默认（`default`）布局。默认布局包含的代码 `{{ content }}` 是注入内容的地方。布局文件还将包含 `include` 指令。它们从 [`include` 文件夹](https://github.com/jekyll/minima/tree/master/_includes) 加载文件，并使用不同的组件组成页面。

总的来说，这就是布局的工作方式：你在卷首块定义它们并将你的内容注入其中。而包含则提供了页面的其它部分以组成整个页面。这是一种标准的网页设计技术：定义页眉、页脚、旁白和内容元素，然后在其中注入内容。这就是静态站点生成器的真正威力，完全以编程的方式控制，将你的网站组装起来并最终编译成静态的 HTML。

### 页面

你网站上的所有内容并不都是文章或博客。你需要“关于”页面、“联系”页面、“项目”页面或“作品”页面。这就是“页面”的用武之地。它们的工作方式与“帖子”完全一样，这意味着它们是带有卷首块的 Markdown 文件。但它们不会放到 `_posts` 目录。它们要么保留在你的项目根目录中，要么保留在它们自己的文件夹中。对于布局和包含，你可以使用与帖子相同的布局或创建新帖子。 Jekyll 非常灵活，你可以随心所欲地发挥你的创意！你的默认博客已经有 `index.markdown` 和 `about.markdown`。请随意自定义它们。

### 数据文件

数据文件位于 `_data` 目录中，可以是 `.yml`、`.json`、`.csv` 等格式的文件。例如，一个 `_data/members.yml` 文件可能包含：

```
- name: A
 github: a@a

- name: B
 github: b@b

- name: C
 github: c@c

```

Jekyll 在网站生成的时候读取这些内容。你可以通过 `site.data.members` 访问它们。

```
<ul>
{ % for member in site.data.members % }
 <li>
 <a href="https://github.com">
      { { member.name } }
 </a>
 </li>
{ % endfor %}
</ul>

```

### 永久链接

你的 `_config.yml` 文件定义了永久链接的格式。你可以使用各种默认变量来组合你自己的自定义永久链接。

### 构建你最终的网站

命令 `jekyll serve` 非常适合本地测试。但是一旦你完成了本地测试，你将需要构建要发布的最终工作。命令 `jekyll build --source source_dir --destination destination_dir` 将你的网站构建到 `_site` 文件夹中。请注意，此文件夹在每次构建之前都会被清理，所以不要将重要的东西放在那里。生成内容后，你可以将其托管在你的静态托管服务上。

你现在应该对 Jekyll 的功能以及主要部分的功能有一个全面的了解。如果你正在寻找灵感，官方 [JAMStack 网站上有一些很棒的例子](https://jamstack.org/examples/)。

![Example Jekyll sites from JAMStack](/data/attachment/album/202110/12/145402i2000sr0y2002gnt.png "Example Jekyll sites from JAMStack")

编码快乐。

本文首发于[作者个人博客](https://notes.ayushsharma.in/2021/08/introduction-to-jekyll)，经授权改编。

---

via: <https://opensource.com/article/21/9/build-website-jekyll>

作者：[Ayush Sharma](https://opensource.com/users/ayushsharma) 选题：[lujun9972](https://github.com/lujun9972) 译者：[perfiffer](https://github.com/perfiffer) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #422 微软演示在无 TPM、VBS 保护的计算机上如何黑进 Windows

Summary: 更多：• 苹果公司认为对 Epic 的胜利还不够 • 沃尔玛把内核功能也“摆上了货架”

建议加个rss

我们有啊，页面左上角

![](/data/attachment/album/202110/12/164504c5qgukgg8zagz299.jpg)

### 微软演示在无 TPM、VBS 保护的计算机上如何黑进 Windows

![](/data/attachment/album/202110/12/164515cd35qc30rio0832i.jpg)

微软在新的 Windows 11 中强制要求 TPM 2.0 和基于虚拟化的安全（VBS）等安全措施，引来了不少批评。为了捍卫自己的做法和观点，微软还展示了一个 [视频演示](https://www.youtube.com/watch?v=tg9QUrnVFho)，显示了潜在的黑客是如何轻松掌控这种没有这些功能的脆弱机器的。该视频的第一部分展示了成功利用一个脆弱的开放远程桌面协议（RDP）端口获得管理员权限，并在一台没有启用 TPM 2.0 和安全启动的 Windows 10 PC 上分发模拟的勒索软件。之后，还展示了在一台没有 VBS 的 PC 上绕过指纹认证过程对用户登录的本地利用。

>
> 老王点评：这种现身说法让用户有直观感受，从这一点上，我是支持微软加强安全要求的。
>
>
>

### 苹果公司认为对 Epic 的胜利还不够

![](/data/attachment/album/202110/12/164603m52ejp5jpjfp55b5.jpg)

之前在苹果公司和 Epic 诉讼案的裁决中，苹果公司赢得了实质上的大部分胜利：只是苹果公司必须允许应用程序将客户引向外部网站，这对苹果的影响甚微。当时苹果公司的法律部们得意洋洋地认为这是“响亮的胜利”，而 Epic 则表示要对败诉的九项判决提起上述。不过，上周五苹果公司 [要求法院暂停执行该裁决](https://www.cnbc.com/2021/10/11/why-apple-appealed-app-store-ruling-in-epic-games-legal-case.html)，准备发起上诉。这样一来，这场诉讼有可能扯上几年，而苹果也无需现在对其产品和服务做出改变。

>
> 老王点评：果然大公司都是法律达人啊。
>
>
>

### 沃尔玛把内核功能也“摆上了货架”

![](/data/attachment/album/202110/12/164642eoy4dgnbt5u8yg8z.jpg)

eBPF 是一种革命性的技术，允许我们在操作系统内核中运行沙盒程序。沃尔玛的 [L3AF](http://l3af.io/) 项目的愿景是“内核功能即服务”：L3AF 团队、开源社区和其他企业可以开发独立的 eBPF 程序，并在一个 eBPF 的“内核功能市场”中共享。用户可以下载签名的 eBPF 程序，并编排它们来解决独特的业务需求。沃尔玛开源了 L3AF，并将其 [托管到 Linux 基金会](https://www.linuxfoundation.org/press-release/walmart-moves-production-grade-networking-project-l3af-to-the-linux-foundation/) 之下。

>
> 老王点评：果然是超市大佬，连内核功能都“放上了货架” :D 。这是容器之后非常值得重视的内核技术。
>
>
>


[初级] 如何在 Ubuntu 中安装 Vivaldi 浏览器

![](/data/attachment/album/202110/13/142545reotvtqgqpfvmmvp.jpg)

>
> 你将在本篇新手教程中学习如何在 Ubuntu、Debian 及其他 Linux 发行版中安装 Vivaldi 网页浏览器，同时本教程也将介绍如何更新和卸载该软件。
>
>
>

[Vivaldi](https://vivaldi.com/) 是一款日益流行的网页浏览器。它基于 Chromium 内核，因此它拥有和 Chrome 类似的功能，但它也新增了一些其他特色功能，让这款浏览器与众不同、更为直观。

它内置了标签组、广告拦截、鼠标手势、笔记管理，甚至还有命令连锁。你甚至可以借助切分视图来一次性浏览多个页面。当然，相比于 Chrome，Vivaldi 更加尊重你的隐私。

![标签平铺，一次性分割浏览多个页面](/data/attachment/album/202110/13/142555g7n393ja9j2cj3dc.png)

[Manjaro Linux 近期使用 Vivaldi 取代 Firefox 作为其部分变体的默认浏览器](https://news.itsfoss.com/vivaldi-replaces-firefox-manjaro/)，你可以从这件事来了解 Vivaldi 浏览器的受欢迎程度。

如果你想尝试一下这款浏览器的话，接下来让我告诉你，如何在 Linux 上安装 Vivaldi。你将了解到：

* 安装 Vivaldi 的 GUI 和命令行方式
* 将 Vivaldi 更新到最新版本的技巧
* 在 Ubuntu 中卸载 Vivaldi 的方式

>
> **非自由软件警告！**
>
>
> Vivaldi 并非完全的开源软件。它的 UI 界面是闭源的。之所以在这里介绍这款浏览器，是因为 Vivaldi 团队正努力让该软件在 Linux 平台上可用。
>
>
>

### 方式 1：在 Ubuntu 中安装 Vivaldi [GUI 方式]

好消息是，Vivaldi 提供了预先构建好的安装包，包括 Ubuntu/Debian 的 DEB 文件，以及 Fedora、Red Hat、SUSE 的 RPM 文件。

它支持 32 位和 64 位平台，也支持 [像树莓派之类的 ARM 设备](https://itsfoss.com/raspberry-pi-alternatives/)。

![Vivaldi 为各类 Linux 发行版提供了安装包](/data/attachment/album/202110/13/142556sgdfig1ssh3ll9lh.jpg)

安装过程非常简单。你只需要前往 Vivaldi 的官网下载正确的安装包文件，双击打开，然后安装，大功告成。

我将详细介绍在 Ubuntu/Debian 下的安装过程。对于其他类型的发行版，你可以使用类似的步骤。

#### 第 1 步：下载 Vivaldi

前往 Vivaldi 的下载页面，下载支持 Ubuntu 的 DEB 格式安装包。

* [下载 Vivaldi](https://vivaldi.com/download/)

![下载支持 Ubuntu/Debian 的 DEB 安装包](/data/attachment/album/202110/13/142558dp3x04tzp012ky00.jpg)

#### 第 2 步：安装刚刚下载的 DEB 文件

前往你刚刚下载 DEB 文件的下载文件夹。[安装 DEB 文件](https://itsfoss.com/install-deb-files-ubuntu/) 非常简单，只需要双击打开，或者右键后使用软件中心打开即可。

![右键点击下载的 DEB 文件并用软件中心打开以安装](/data/attachment/album/202110/13/142600vgkwn8xgtyn3dczd.jpg)

这将打开软件中心，在这里可以看到安装 Vivaldi 的选项。点击安装按钮即可。

![点击安装按钮](/data/attachment/album/202110/13/142601kazvvd4s4spr6sad.png)

你将需要输入系统账户的密码，输入密码授权后，Vivaldi 很快就能完成安装，随后安装按钮也变成了移除按钮。这表明 Vivaldi 已经安装完成了。

#### 第 3 步：使用 Vivaldi

按下 `Super`（`Windows`）键打开系统菜单，搜索 Vivaldi，然后单击 Vivaldi 的图标。

![在系统菜单中搜索 Vivaldi](/data/attachment/album/202110/13/142602k5ah69tllr76taat.png)

首次启动时，你将看到如下界面。

![运行于 Ubuntu 的 Vivaldi](/data/attachment/album/202110/13/142604wpt5tzmd6zsgae55.jpg)

既然你已经知道了这个方法，那我接下来将展示在 Ubuntu/Debian 使用终端安装 Vivaldi 的方法。

### 方式 2：借助终端，在 Ubuntu/Debian 上安装 Vivaldi

打开终端，确认你已经安装了用于 [在命令行下下载文件](https://itsfoss.com/download-files-from-linux-terminal/) 的 `wget`。

```
sudo apt install wget

```

接下来，获取 Vivaldi 仓库的公钥并添加到系统，以让系统信任该来源的软件包。如果你感兴趣的话，你可以阅读 [关于在 Ubuntu 添加第三方软件仓库的文章](https://itsfoss.com/adding-external-repositories-ubuntu/)。

```
wget -qO- https://repo.vivaldi.com/archive/linux_signing_key.pub | sudo apt-key add -

```

添加完该密钥后，再添加 Vivaldi 的仓库：

```
sudo add-apt-repository 'deb https://repo.vivaldi.com/archive/deb/ stable main'

```

现在距离完成也只有一步之遥了。更新软件仓库缓存并安装 Vivaldi。

```
sudo apt update && sudo apt install vivaldi-stable

```

大功告成。现在，前往系统菜单搜索并启动 Vivaldi 吧。

### 在 Ubuntu 中更新 Vivaldi

GUI 和命令行这两种方式都会在系统里添加 Vivaldi 的仓库。这意味着，只要 Vivaldi 发布了新版本，你就可以在系统更新中一并获取 Vivaldi 的更新。

![已添加到系统中的 Vivaldi 仓库](/data/attachment/album/202110/13/142605xb8fbrl6xam5llv5.png)

一般情况下，你更新 Ubuntu 系统时，如果 Vivaldi 发布了新版本，那么 Vivaldi 也同时会被更新。

![Vivaldi 浏览器会跟随系统更新](/data/attachment/album/202110/13/142606zdd5z8a8g5rdsadf.png)

### 在 Ubuntu 中卸载 Vivaldi

如果你不喜欢 Vivaldi 或者不再使用，你可以直接卸载。现在，如果你想 [在 Ubuntu 中卸载软件](https://itsfoss.com/uninstall-programs-ubuntu/)，你可能会想到软件中心，但软件中心不会查找到外部和第三方的软件包。

目前你必须使用终端卸载 Vivaldi，即便你是使用 GUI 方式安装的。其实这也很简单，打开终端，输入以下命令：

```
sudo apt remove vivaldi-stable

```

`sudo` 会 [在 Ubuntu 中给予你 root 权限](https://itsfoss.com/root-user-ubuntu/)。你需要输入当前账户的密码。输入密码时，你可能不会在屏幕上看见输入密码的痕迹。这是正常现象，直接输入密码即可，随后 Vivaldi 将被卸载。

希望这篇关于如何在 Linux 安装 Vivaldi 的教程对你有用。

---

via: <https://itsfoss.com/install-vivaldi-ubuntu-linux/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[imgradeone](https://github.com/imgradeone) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


我如何使用 Ansible 和 anacron 实现自动化

>
> 有了 anacron，我可以把脚本和 Ansible 剧本放到合适的地方，以完成各种琐碎的任务。
>
>
>

![](/data/attachment/album/202110/13/155036tc0c7th906cc96mm.jpg "Woman programming")

自动化是伟大的 IT 和 DevOps 理想，但根据我的经验，可能根本不存在什么不方便的东西。有很多次，我为某些任务想出了一个很好的解决方案，我甚至会编写脚本，但我没有让它真正实现自动化，因为在我工作的机器上不存在易于自动化的基础设施。

我最喜欢的简易自动化工具曾经是 cron 系统，它古老、可靠、面向用户，而且简单（除了一个我永远无法记住的调度语法之外）。然而，cron 的问题是，它假定一台电脑每天 24 小时都在工作。在错过了太多预定的备份之后，我发现了 [anacron](https://opensource.com/article/21/2/linux-automation)，一个基于时间戳而非预定时间的 cron 系统。如果你的电脑在通常情况下运行时处于关闭状态，anacron 会确保它在电脑重新开启时运行。创建一个作业只需要简单地把一个 shell 脚本放到三个目录中：`cron.day`、`cron.weekly` 或者 `cron.monthly` （如果你想的话，你可以定义更多）。有了 anacron，我发现自己把脚本和 Ansible 剧本用在了各种琐碎的任务中，包括弹出到期和事件提醒。

这是一个现代问题的简单而明显的解决方案，但如果 anacron 没有安装在电脑上，那它对我就没有用。

### 用 Ansible 进行软件设置

任何时候我设置一台新的计算机，无论是笔记本电脑、工作站还是服务器，我都会安装 anacron。这很简单，但是 anacron 的安装只提供了 `anacron` 命令。它并没有设置 anacron 的用户环境。所以我创建了一个 Ansible 剧本来设置用户需要什么来使用 anacron 并安装 `anacron` 命令。

首先，标准的 Ansible 模板：

```
---
- hosts: localhost
  tasks:

```

### 用 Ansible 创建目录

接下来，我创建了用于 Anacron 的目录树。你可以把它看成是一种透明的 crontab。

```
    - name: create directory tree
      ansible.builtin.file:
        path: "{{ item }}"
        state: directory
      with_items:
        - '~/.local/etc/cron.daily'
        - '~/.local/etc/cron.weekly'
        - '~/.local/etc/cron.monthly'
        - '~/.var/spool/anacron'

```

这个语法可能看起来有点奇怪，但它实际上是一个循环。`with_items:` 指令定义了四个要创建的目录，Ansible 在 `ansible.buildin.file:` 指令中为每个目录迭代一次（目录名填充了 `{{ item }}` 变量）。与 Ansible 中的一切一样，如果目录已经存在，不会有错误或冲突。

### 用 Ansible 复制文件

`ansible.buildin.copy` 模块将文件从一个地方复制到另一个地方。为了让它工作，我需要创建一个叫做 `anacrontab` 的文件。它不是 Ansible 剧本，所以我把它放在我的 `~/Ansible/data` 目录下，那里是我的剧本的支持文件。

```
  - name: copy anacrontab into place
   ansible.builtin.copy:
    src: ~/Ansible/data/anacrontab
    dest: ~/.local/etc/anacrontab
    mode: '0755'

```

我的 `anacrontab` 文件很简单，模仿了一些发行版默认安装在 `/etc/anacron` 中的文件：

```
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
1  0  cron.day    run-parts $HOME/.local/etc/cron.daily/
7  0  cron.wek    run-parts $HOME/.local/etc/cron.weekly/
30 0  cron.mon    run-parts $HOME/.local/etc/cron.monthly/

```

### 登录时运行 anacron

大多数 Linux 发行版将 anacron 配置为从 `/etc/anacron` 读取作业。我主要是作为一个普通用户使用 anacron，所以我从我的登录账号 `~/.profile` 启动 anacron。我不想让自己记住这些配置，所以我让 Ansible 来做。我使用 `ansible.buildin.lineinfile` 模块，它会在 `~/.profile` 不存在时创建它，并插入 anacron 的启动行。

```
    - name: add local anacrontab to .profile
      ansible.builtin.lineinfile:
        path: ~/.profile
        regexp: '^/usr/sbin/anacron'
        line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab'
        create: true

```

### 用 Ansible 安装 anacron

对于我的大多数系统来说，`dnf` 模块可以用来安装软件包，但我的工作站运行的是 Slackware（使用 `slackpkg`），有时不同的 Linux 发行版也会进入我的收藏。`ansible.buildin.package` 模块提供了一个安装软件包的通用接口，所以我把它用在这个剧本上。幸运的是，我还没有遇到一个名为 `anacron` 的仓库不是 `anacron`，所以现在，我不必考虑软件包名称的潜在差异。

这实际上是一个单独的剧本，因为软件包的安装需要权限升级，它由 `becomes: true` 指令提供。

```
- hosts: localhost
  become: true
  tasks:
    - name: install anacron
      ansible.builtin.package:
        name: anacron
        state: present

```

### 使用 anacron 和 Ansible 实现轻松自动化

为了用 Ansible 安装 anacron，我运行该剧本：

```
$ ansible-playbook ~/Ansible/setup-anacron.yaml

```

从此，我就可以编写 shell 脚本来执行一些琐碎但重复的任务，然后把它复制到 `~/.local/etc/cron.daily`，让它每天自动运行一次（或者大约如此）。我还为诸如 [清理下载文件夹](https://opensource.com/article/21/9/keep-folders-tidy-ansible) 之类的任务编写了 Ansible 剧本。我把我的剧本放在 `~/Ansible` 里，这是我保存 Ansible 剧本的地方，然后在 `~/.local/etc/cron.daily` 里创建一个 shell 脚本来执行这个剧本。这很简单，不费吹灰之力，而且很快成为习惯。

---

via: <https://opensource.com/article/21/9/ansible-anacron-automation>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #423 Adobe 干掉了一个让特供版 Flash 无广告的开源项目

Summary: 更多：• 微软放弃的 Silverlight，OpenSilver 接手 • 研究发现谷歌几乎对所有安卓手机进行信息采集

重橙, your mather is died !

但凡它有妈也做不出这事！

这么做也是没谁了

为什么我用的debian一直显示win10呢，并未更改UA.

![](/data/attachment/album/202110/13/183443mlqlv3gsvhg9g8qg.jpg)

### Adobe 干掉了一个让特供版 Flash 无广告的开源项目

![](/data/attachment/album/202110/13/183452kae8ppareqzj88qj.jpg)

2021 年 1 月，Adobe 停止了 Flash 的开发和支持。但 Flash 并没有完全死亡，它在中国仍然可用。中国特供版的 Flash 可以免费下载，而且还会收到安全更新，但它预装了一个名为“Flash Helper”的广告软件。并据安全人士称，该软件 [表现出恶意行为](https://blog.minerva-labs.com/the-curious-case-of-flashhelperservice-0)。一位 GitHub 用户出于对童年的回忆，开发了一个 [Clean Flash Installer](https://github.com/CleanFlash/installer)，解决了这些问题，这个脚本可以安装这个特供版，并消除了其中的广告。Adobe 发现之后，向 GitHub 发出了 DMCA 通告，称“我们的 Adobe Flash Player 软件被侵权了”，封杀了该项目。[该项目作者说](https://torrentfreak.com/adobe-uses-dmca-to-nuke-project-that-keeps-flash-alive-secure-adware-free-211012/)它没有包含 Adobe 的代码，“所涉存储库只存放了安装程序代码，该代码是由我自己编写的，不包含任何侵权代码。”

>
> 老王点评：只能说某些人实在太恶心了。
>
>
>

### 微软放弃的 Silverlight，OpenSilver 接手

![](/data/attachment/album/202110/13/183518fwakgrkkpi2gvo28.jpg)

就如同 Adobe 放弃 Flash 一样，微软已经于 10 月 12 日停止了对 Silverlight 的支持。Silverlight 推出于 2007 年，在 2010 年曾经有过高达 53% 的浏览器支持它。但随着微软放弃了它，就连微软的新浏览器 Edge 都不支持它，而 Chrome 于 2015 年，Firefox 于 2017 年也纷纷停止了支持。它的最后的一次大更新也是三年前了。遗留的大量 Silverlight 应用沦落到无人看顾的境地。现在，Userware 等公司发起了开源的 [OpenSilver](https://www.opensilver.net/) 项目，作为一个替代方案来支持无数的 Silverlight 应用，因为要重写这些遗留应用需要花费更多精力和资金，甚至没有可能重写。它完全支持 Silverlight 引擎的核心功能，包括完整的语言支持（C#、XAML），也支持大部分的平台 API。

>
> 老王点评：目前看起来这个用来善后的开源解决方案是不错的，不知道会不会和楼上一样的结果。
>
>
>

### 研究发现谷歌几乎对所有安卓手机进行信息采集

![](/data/attachment/album/202110/13/183535e982f587v3859n91.jpg)

[一项新研究](https://www.scss.tcd.ie/Doug.Leith/Android_privacy_report.pdf) 揭示了使用安卓智能手机所产生的 [一系列隐私问题](https://www.bleepingcomputer.com/news/security/study-reveals-android-phones-constantly-snoop-on-their-users/)。研究人员重点关注了三星、小米、 Realme 和华为的安卓设备，他们发现，“即使在最小化配置和手机闲置的情况下，这些供应商定制的安卓变体也会向操作系统开发商以及预装系统应用的第三方传输大量的信息。”而更糟糕的是，谷歌几乎出现在这张表中所有收集到的数据的末端。这些数据的收集没有选择退出的选项，所以安卓用户对这种类型的遥测无能为力。这些智能手机供应商提供的第三方应用程序即使不被设备所有者使用，也在默默地收集数据，而且不能被卸载。谷歌对此回应称，“虽然我们赞赏研究人员的工作，但我们不同意这种行为是出乎意料的 —— 这就是现代智能手机的工作方式。”

![](/data/attachment/album/202110/13/183547zyivq5qqyv2s1myq.jpg)

>
> 老王点评：“这是你的益达，不，手机。”“不，是你的。”
>
>
>