用 Curtail GUI 应用轻松压缩 Linux 中的图像

Summary: 如果你想批量压缩照片怎么办？Curtail 是一个能帮助你的应用。

如果你想批量压缩照片怎么办？Curtail 是一个能帮助你的应用。

# 用 Curtail GUI 应用轻松压缩 Linux 中的图像

有一大堆文件尺寸巨大的图片占用了太多的磁盘空间？或者你必须将图片上传到有文件大小限制的门户网站？

你可能有很多原因想要压缩图片。有大量的工具可以帮助你，我在这里说的不是命令行的工具。

你可以使用一个成熟的图像编辑器，如 GIMP。你也可以使用像 [Squoosh](https://squoosh.app/) 这样的网络工具，这是谷歌的一个开源项目。它甚至可以让你比较每个压缩级别的文件。

然而，所有这些工具都是针对单个图像工作的。如果你想批量压缩照片怎么办？Curtail 是一个能帮助你的应用。

### Curtail: Linux 中用于图像压缩的灵巧工具

使用 Python 和 GTK3 构建的 Curtail 是一个简单的 GUI 应用，使用 OptiPNG、[jpegoptim](https://github.com/tjko/jpegoptim) 等开源库来提供图像压缩功能。

它有一个 [Flatpak 应用](https://itsfoss.com/what-is-flatpak/)。请确保你的系统已启用 [Flatpak 支持](https://itsfoss.com/flatpak-guide/)。

首先添加 Flathub 仓库：

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

```

然后使用下面的命令来安装 Curtail：

```
flatpak install flathub com.github.huluti.Curtail

```

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

界面朴素而简单。你可以选择你想要无损压缩还是有损压缩。

有损压缩会有质量差的图像，但尺寸较小。无损压缩会有更好的质量，但尺寸可能不会比原来的小很多。

你可以浏览图片，或者把它们拖到应用中。

是的，你可以用 Curtail 一键压缩多张图片。

事实上，你甚至不需要点击。只要你选择图片或拖放它们，它们就会被压缩，你会看到压缩过程的摘要。

正如你在上面的图片中看到的，我的一张图片的尺寸减少了 35%，另外两张图片的尺寸减少了 3% 和 8%。这是在无损压缩的情况下。

这些图片以 `-min` 为后缀（默认），保存在与原始图片相同的目录中。

虽然它看起来很简约，但有几个选项可以配置 Curtail。点击菜单，你会看到一些设置选项。

你可以选择是将压缩文件保存为新文件还是替换现有文件。如果你选择新文件（默认行为），你也可以为压缩后的图像提供一个不同的后缀。保留文件属性的选项也在这里。

在下一个选项卡中，你可以配置有损压缩的设置。默认情况下，压缩级别为 90%。

高级选项卡让你可以选择配置 PNG 和 WebP 文件的无损压缩级别。

### 总结

正如我前面所说，这不是一个突破性的工具。你可以用其他工具如 GIMP 做同样的事情。它只是使图像压缩的任务更简单，特别是对于批量图像压缩。

我很想看到在压缩时有[转换图像文件格式](https://itsfoss.com/converseen/)的选项，就像我们在 Converseen 等工具中所拥有的那样。

总的来说，对于图像压缩的具体目的来说，这是一个不错的小工具。

---

via: <https://itsfoss.com/curtail-image-compress/>

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

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


硬核观察 #676 外媒报道中国芯片行业高速发展

Summary: • 外媒报道中国芯片行业高速发展 • Rust 有可能在 Linux 5.20 中合并 • 内核开发者仍然在实验 -O3 级优化

哪来的光刻机？

# 硬核观察 #676 外媒报道中国芯片行业高速发展

### 外媒报道中国芯片行业高速发展

数据显示，过去四个季度全世界增长速度最快的 20 家芯片行业公司有 19 家在中国。据中国半导体行业协会的数据，2021 年中国芯片制造商和设计公司的总销售额增长 18%，达到创纪录的逾 1 万亿元人民币。中芯国际和华虹半导体是中国最大的合同芯片制造商，中芯国际最近报告其季度销售额增长 67%，超过 GlobalFoundries 和台积电。视频芯片设计公司上海富瀚微电子的收入平均增长 37%，它计划进入电动汽车和人工智能领域。集成电路软件工具开发商上海概伦电子过去四个季度平均销售额增长了一倍，它声称其软件可用于制造 3 纳米芯片。

>
> **[消息来源：彭博社](https://www.bloomberg.com/news/articles/2022-06-20/us-sanctions-helped-china-supercharge-its-chipmaking-industry)**
>
>
>

>
> 老王点评：美国的封锁一时打压了中国企业的增长，但也促进了中国芯片产业的发展。
>
>
>

### Rust 有可能在 Linux 5.20 中合并

在 Linux 基金会近日举行的开源峰会上，Linus Torvalds 谈到了 Rust 在 Linux 内核中的可能性，并表示它可能很快就会登陆，甚至可能是在下一个内核周期。目前还没有任何 Rust for Linux 的拉取请求被发送和合并，但很多初始的 Rust 启用代码已经就绪。上个月发布了最新的 Rust for Linux 内核补丁，使更多的功能得以形成，并完成了更多审查。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Rust-For-Linux-5.20-Possible)**
>
>
>

>
> 老王点评：说实话，Rust 支持是最值得期待的特性之一了，但是距离 Rust 在内核中普遍使用，可能还有很远。
>
>
>

### 内核开发者仍然在实验 -O3 级优化

Linux 内核的编译采用 `-O2` 级的优化，虽然采用更高级别 `-O3` 编译会得到更高性能的内核，但由于内核的复杂性和非常大的代码库，它很可能在低级别的内核代码中出现错误或不正确的行为。因此采用 `-O3` 编译的内核并没有得到广泛认可。甚至一些内核开发者不希望看到它成为 Kconfig 选项。但是有一些爱好者对 `-O3` 优化内核以获得更高的性能感兴趣，或者试图发现 Linux 内核代码和编译器本身的优化出错的错误。最近有开发者发出一组补丁，使之可以在所有架构上使用该优化级别。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=O3-Optimize-Kernel-2022-Patches)**
>
>
>

>
> 老王点评：一般来说，上游的 Linux 内核开发者对新的的编译器功能是相当保守的，只是为了提高性能，而这可能意味着微妙的错误/难以检测的问题。但是我觉得作为实验性的功能值得探索。
>
>
>


如何启动 Ubuntu 22.04 进入救援/紧急模式

# 如何启动 Ubuntu 22.04 进入救援/紧急模式

极客们好，将 Ubuntu 22.04（Jammy Jellyfish）启动到<ruby> 救援 <rt>  Rescue </rt></ruby>和<ruby> 紧急 <rt>  Emergency </rt></ruby>模式可以重置忘记的用户密码、修复文件系统错误，以及在启动过程中禁用或启用 systemd 服务。

在这篇文章中，我们将学习如何启动 Ubuntu 22.04 LTS 系统进入救援和应急模式。救援模式类似于单用户模式，所有的故障排除步骤都在这里进行。救援模式加载最小的环境并挂载根文件系统。

而在紧急模式下，我们得到的是单用户 Shell，而不启动任何系统服务。因此，当我们无法启动系统进入救援模式时，就需要紧急模式。

### 启动 Ubuntu 22.04 进入救援或单用户模式

前往你想启动到救援或单用户模式的目标系统。在启动时按下 `SHIFT + ESC` 键，进入 GRUB 引导加载器页面。

选择第一个选项 “Ubuntu”，并按 `e` 键进入编辑模式。

在以 `linux` 开头的一行末尾，删除字符串 `$vt_handoff` 并添加字符串 `systemd.unit=rescue.target`。

做完修改后，按 `Ctrl + X` 或 `F10` 在救援模式下启动。

进入救援模式后，运行所有的故障排除命令，并运行 `systemctl reboot` 命令来重启系统。

### 另一种启动系统进入救援模式的方法

重新启动系统并按下 `ESC + Shift` 键，进入 GRUB 启动界面。

选择第二个选项 “<ruby> Ubuntu 高级选项 <rt>  Advanced Options for Ubuntu </rt></ruby>”->选择“<ruby> 恢复模式 <rt>  recovery mode </rt></ruby>”选项并点击回车->选择 <ruby> root（进入 root shell 提示符） <rt>  root (Drop to root shell prompt) </rt></ruby>。

下面是一个例子：

当你有了 root Shell，运行命令来恢复和修复系统问题，最后使用 `systemctl reboot` 来重启系统。

### 引导 Ubuntu 22.04 进入紧急模式

要启动系统进入紧急模式，首先进入 GRUB 页面。

选择第一个选项 “Ubuntu” 并按 `e` 键进行编辑。寻找以 `linux` 开头的一行，移到该行的末尾，删除字符串 `$vt_handoff` 并添加字符串 `systemd.unit=emergency.target`。

按 `Ctrl + X` 或 `F10` 将系统启动到紧急模式。

同样，在紧急模式下，你可以在这个模式下执行所有的故障排除，完成后，就用 `systemctl reboot` 命令重启系统。

这篇文章的内容就这些。文章内容丰富，不要犹豫，请在你的技术朋友中分享它。请在下面的评论区发表你的疑问和反馈。

---

via: <https://www.linuxtechi.com/boot-ubuntu-22-04-rescue-emergency-mode/>

作者：[Pradeep Kumar](https://www.linuxtechi.com/author/pradeep/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


一起来学习 Lisp 编程语言吧！

不要学，都是过时的语言，语法晦涩难懂。尤其是clisp为了兼容和面向对象，就是个缝合怪，语法还缺乏一致性。那怕你去学习scheme和racket都比这好。

# 一起来学习 Lisp 编程语言吧！

>
> 许多大型代码库中都有 Lisp 代码的身影，因此，熟悉一下这门语言是一个明智之举。
>
>
>

<img src="content_image/album_202206_24_124147v0loy4e3y0hneih8.jpg" alt="" title="">

早在 1958 年，Lisp 就被发明出来了，它是世界上第二古老的计算机编程语言（LCTT 译注：最古老的编程语言是 Fortran，诞生于 1957 年）。它有许多现代的衍生品，包括 Common Lisp、Emacs Lisp（Elisp）、Clojure、Racket、Scheme、Fennel 和 GNU Guile 等。

那些喜欢思考编程语言的设计的人，往往都喜欢 Lisp，因为它的语法和数据有着相同的结构：Lisp 代码实际上是<ruby> 一个列表的列表 <rt>  a list of lists </rt></ruby>，它的名字其实是 “<ruby> 列表处理 <rt>  LISt Processing </rt></ruby>” 的简写。而那些喜欢思考编程语言的美学的人，往往都讨厌 Lisp，因为它经常使用括号来定义范围；事实上，编程界也有一个广为流传的笑话：Lisp 代表的其实是 <ruby> “大量烦人的多余括号” <rt>  Lots of Irritating Superfluous Parentheses </rt></ruby>。

不管你是喜欢还是讨厌 Lisp 的设计哲学，你都不得不承认，它都是一门有趣的语言，过去如此，现在亦然（这得归功于现代方言 Clojure 和 Guile）。你可能会惊讶于在任何特定行业的大代码库中潜伏着多少 Lisp 代码，因此，现在开始学习 Lisp，至少熟悉一下它，不失为一个好主意。

### 安装 Lisp

Lisp 有很多不同的实现。比较流行的开源版本有 [SBCL](http://sbcl.org)、[GNU Lisp](http://clisp.org) 和 [GNU Common Lisp](https://www.gnu.org/software/gcl/)（GCL）。你可以使用发行版的包管理器安装它们中的任意一个，在本文中，我是用的是 `clisp`（LCTT 译注：也就是 GNU Lisp，一种 ANSI Common Lisp 的实现）。

以下是在不同的 Linux 发行版中安装 `clisp` 的步骤。

在 Fedora Linux 上，使用 `dnf`：

```
$ sudo dnf install clisp

```

在 Debian 上，使用 `apt`：

```
$ sudo apt install clisp

```

在 macOS 上，使用 [MacPorts](https://opensource.com/article/20/11/macports) 或者 [Homebrew](https://opensource.com/article/20/6/homebrew-linux)：

```
# 使用 MacPorts
$ sudo port install clisp

# 使用 Homebrew
$ brew install clisp

```

在 Windows 上，你可以使用 [clisp on Cygwin](https://cygwin.fandom.com/wiki/Clisp) 或者从 [gnu.org/software/gcl](http://mirror.lagoon.nc/gnu/gcl/binaries/stable) 上下载 GCL 的二进制文件。

虽然我使用 `clisp` 命令来运行 Lisp 代码，但是本文中涉及到的大多数语法规则，对任何 Lisp 实现都是适用的。如果你选择使用一个不同的 Lisp 实现，除了用来运行 Lisp 代码的命令会和我不一样外（比如，你可能要用 `gcl` 或 `sbcl` 而不是 `clisp`），其它的所有东西都是相同的。

### 列表处理

Lisp 源代码的基本单元是 “<ruby> 表达式 <rt>  expression </rt></ruby>”，它在形式上是一个列表。举个例子，下面就是一个列表，它由一个操作符（`+`）和两个整数（`1` 和 `2`）组成：

```
(+ 1 2)

```

同时，它也是一个 Lisp 表达式，内容是一个符号（`+`，会被解析成一个加法函数）和它的两个参数（`1` 和 `2`）。你可以在 Common Lisp 的交互式环境（即 REPL）中运行该表达式和其它表达式。如果你熟悉 Python 的 IDLE，那么你应该会对 Lisp 的 REPL 感到亲切。（LCTT 译注：REPL 的全称是 “Read-Eval-Print Loop”，意思是 “‘读取-求值-输出’循环”，这个名字很好地描述了它的工作过程。）

要进入到 REPL 中，只需运行 Common Lisp 即可：

```
$ clisp
[1]>

```

在 REPL 提示符中，尝试输入一些表达式：

```
[1]> (+ 1 2)
3
[2]> (- 1 2)
-1
[3]> (- 2 1)
1
[4]> (+ 2 3 4)
9

```

### 函数

在了解了 Lisp 表达式的基本结构后，你可以使用函数来做更多有用的事。譬如，`print` 函数可以接受任意数量的参数，然后把它们都显示在你的终端上，`pprint` 函数还可以实现格式化打印。还有更多不同的打印函数，不过，`pprint` 在 REPL 中的效果就挺好的：

```
[1]> (pprint "hello world")

"hello world"

[2]>

```

你可以使用 `defun` 函数来创建一个自定义函数。`defun` 函数需要你提供自定义函数的名称，以及它接受的参数列表：

```
[1]> (defun myprinter (s) (pprint s))
MYPRINTER
[2]> (myprinter "hello world")

"hello world"

[3]>

```

### 变量

你可以使用 `setf` 函数来在 Lisp 中创建变量：

```
[1]> (setf foo "hello world")
"hello world"
[2]> (pprint foo)

"hello world"

[3]>

```

你可以在表达式里嵌套表达式（就像使用某种管道一样）。举个例子，你可以先使用 `string-upcase` 函数，把某个字符串的所有字符转换成大写，然后再使用 `pprint` 函数，将它的内容格式化打印到终端上：

```
[3]> (pprint (string-upcase foo))

"HELLO WORLD"

[4]>

```

Lisp 是动态类型语言，这意味着，你在给变量赋值时不需要声明它的类型。Lisp 默认会把整数当作整数来处理：

```
[1]> (setf foo 2)
[2]> (setf bar 3)
[3]> (+ foo bar)
5

```

如果你想让整数被当作字符串来处理，你可以给它加上引号：

```
[4]> (setf foo "2")
"2"
[5]> (setf bar "3")
"3"
[6]> (+ foo bar)

*** - +: "2" is not a number
The following restarts are available:
USE-VALUE      :R1      Input a value to be used instead.
ABORT          :R2      Abort main loop
Break 1 [7]>

```

在这个示例 REPL 会话中，变量 `foo` 和 `bar` 都被赋值为加了引号的数字，因此，Lisp 会把它们当作字符串来处理。数学运算符不能够用在字符串上，因此 REPL 进入了调试器模式。想要跳出这个调试器，你需要按下 `Ctrl+D` 才行（LCTT 译注：就 `clisp` 而言，使用 `quit` 关键字也可以退出）。

你可以使用 `typep` 函数对一些对象进行类型检查，它可以测试对象是否为某个特定数据类型。返回值 `T` 和 `NIL` 分别代表 `True` 和 `False`。

```
[4]> (typep foo 'string)
NIL
[5]> (typep foo 'integer)
T

```

`string` 和 `integer` 前面加上了一个单引号（`'`），这是为了防止 Lisp（错误地）把这两个单词当作是变量来求值：

```
[6]> (typep foo string)
*** - SYSTEM::READ-EVAL-PRINT: variable STRING has no value
[...]

```

这是一种保护某些术语（LCTT 译注：类似于字符串转义）的简便方法，正常情况下它是用 `quote` 函数来实现的：

```
[7]> (typep foo (quote string))
NIL
[5]> (typep foo (quote integer))
T

```

### 列表

不出人意料，你当然也可以在 Lisp 中创建列表：

```
[1]> (setf foo (list "hello" "world"))
("hello" "world")

```

你可以使用 `nth` 函数来索引列表：

```
[2]> (nth 0 foo)
"hello"
[3]> (pprint (string-capitalize (nth 1 foo)))

"World"

```

### 退出 REPL

要结束一个 REPL 会话，你需要按下键盘上的 `Ctrl+D`，或者是使用 Lisp 的 `quit` 关键字：

```
[99]> (quit)
$

```

### 编写脚本

Lisp 可以被编译，也可以作为解释型的脚本语言来使用。在你刚开始学习的时候，后者很可能是最容易的方式，特别是当你已经熟悉 Python 或 [Shell 脚本](https://opensource.com/article/20/4/bash-programming-guide) 时。

下面是一个用 Common Lisp 编写的简单的“掷骰子”脚本：

```
#!/usr/bin/clisp

(defun roller (num)
  (pprint (random (parse-integer (nth 0 num))))
)

(setf userput *args*)
(setf *random-state* (make-random-state t))
(roller userput)

```

脚本的第一行注释（LCTT 译注：称之为“<ruby> 释伴 <rt>  shebang </rt></ruby>”）告诉了你的 POSIX 终端，该使用什么可执行文件来运行这个脚本。

`roller` 函数使用 `defun` 函数创建，它在内部使用 `random` 函数来打印一个伪随机数，这个伪随机数严格小于 `num` 列表中下标为 0 的元素。在脚本中，这个 `num` 列表还没有被创建，不过没关系，因为只有当脚本被调用时，函数才会执行。

接下来的那一行，我们把运行脚本时提供的任意参数，都赋值给一个叫做 `userput` 的变量。这个 `userput` 变量是一个列表，当它被传递给 `roller` 函数后，它就会变成参数 `num`。

脚本的倒数第二行产生了一个“随机种子”。这为 Lisp 提供了足够的随机性来生成一个几乎随机的数字。

最后一行调用了自定义的 `roller` 函数，并将 `userput` 列表作为唯一的参数传递给它。

将这个文件保存为 `dice.lisp`，并赋予它可执行权限：

```
$ chmod +x dice.lisp

```

最后，运行它，并给它提供一个数字，以作为它选择随机数的最大值：

```
$ ./dice.lisp 21

13
$ ./dice.lisp 21

7
$ ./dice.lisp 21

20

```

看起来还不错！

你或许注意到，你的模拟骰子有可能会是 0，并且永远达不到你提供给它的最大值参数。换句话说，对于一个 20 面的骰子，这个脚本永远投不出 20（除非你把 0 当作 20）。有一个简单的解决办法，它只需要用到在本文中介绍的知识，你能够想到吗？

### 学习 Lisp

无论你是想将 Lisp 作为个人脚本的实用语言，还是为了助力你的职业生涯，抑或是仅仅作为一个有趣的实验，你都可以去看看一年一度（LCTT 译注：应该是两年一度）的 [Lisp <ruby> 游戏果酱 <rt>  Game Jam </rt></ruby>](https://itch.io/jam/spring-lisp-game-jam-2021)，从而收获一些特别有创意的用途（其中的大多数提交都是开源的，因此你可以查看代码以从中学习）。

Lisp 是一门有趣而独特的语言，它有着不断增长的开发者用户群、足够悠久的历史和新兴的方言，因此，它有能力让从事各个行业的程序员都满意。

---

via: <https://opensource.com/article/21/5/learn-lisp>

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

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


Summary: • WSL2 可以运行在 Windows Server 2022 上了 • 美参议员将加密货币监管法案草案发布到 GitHub 上 • 首个全链路国产操作系统 OpenCloudOS 发布

# 硬核观察 #677 WSL2 可以运行在 Windows Server 2022 上了

### WSL2 可以运行在 Windows Server 2022 上了

微软已经正式宣布，WSL 2 发行版现在支持 Windows Server 2022 了。这对有特殊用例的开发者来说确实是好事，因为他们需要在 Windows Server 2022 上启动 Linux 时，不再需要全功能的 Hyper-V 会话。WSL2 更加轻量级。之前微软的人曾说，虽然这项技术对桌面用户来说很方便，但把它放在服务器上可能意味着，它被用来做一些它不打算做的事情。另外，微软没有将 WSL2 移植回 Windows Server 2019 的计划。

>
> **[消息来源：The Register](https://www.theregister.com/2022/06/22/wsl2_windows_server/)**
>
>
>

>
> 老王点评：微软又张开了吞下 Linux 的大口，不但是“面向开发者”，这回是面向运维人员了吧。
>
>
>

### 美参议员将加密货币监管法案草案发布到 GitHub 上

本周三，美国参议员 Cynthia Lummis 对即将到来的加密货币监管法案采取了令人惊讶的新措施：将其托管在 GitHub 上，请大家对起草的法案框架贡献评论。GitHub 用户们已经对法案提出了几十个评论和拉取请求，其中一些提出了对法案有意义的补充。比如“通过对采矿征税来增加工作量证明加密货币的价值”。另一个评论提出了对稳定币算法支持的担忧。

>
> **[消息来源：GitHub](https://github.com/responsible-financial-innovation-act22/RFIA-bill)**
>
>
>

>
> 老王点评：这才像是征求意见，以“开源”的方式，透明的推动进步。
>
>
>

### 首个全链路国产操作系统 OpenCloudOS 发布

据其官方公众号消息，OpenCloudOS 正式发布了“首个源社区（L1）项目及首个全量软件包（L3）版本”，并披露了技术研发路线图。OpenCloudOS 是去年 12 月由腾讯牵头成立的开源操作系统社区，其成员包括北京红旗、飞腾、浪潮、龙芯中科、兆芯等几十家操作系统生态厂商及用户。OpenCloudOS 在宣传中说它是“我国首个具备全链路国产化能力的服务器操作系统”，并提出了 L1 源社区、L2 商业版、L3 社区稳定版和 L4 衍生发行版的层级划分。OpenCloudOS 称其“社区及衍生版已经装机逾千万”。

>
> **[消息来源：OpenCloudOS](https://mp.weixin.qq.com/s/YD-r1dT8JOshfsIJDvOBlQ)**
>
>
>

>
> 老王点评：一坛老酒，个个新瓶。趁着东风起，各家你方唱吧我登场，谁能笑到最后，还需要时间来证明。
>
>
>


从深度到统信，从桌面到根社区

广告。。。

策划/编辑工作不及格。。。

字太多，没实用信息，官话套话太多。。。

这里之前的文章浓浓的译制片味道，风格突变容易让人警觉。。。

这钱白扔了。。。

应该感谢这些软文，本站除了顶部焦点图可能会有广告（目前有一），剩下所有的唯一收入就是这些软文了。如果没有这些软文，本站离关闭不远了。

这么大方承认不怕他们克扣工钱吗（狗头

所谓的欧拉 不也是基于centos吗？ ?了

来自湖北武汉的 Chrome Mobile iOS 102.0|iOS 15.5 用户

很多人是这样认为的，但是欧拉表示不是这样的，可能历史早期是基于 CentOS 的，但是后期分叉离开得比较远了。采用 RPM 不代表就一定是 CentOS/RHEL 下游。

deepin还是认同的,但UOS还差点意思!openEuler是rpm系,但不是套壳centos,但openEuler的音视频源还少点,缺少第三方音视频源

还有 Linux 用户一般开了广告屏蔽

# 从深度到统信，从桌面到根社区

在中国，几乎每一个接触过 Linux 的人都听说过深度操作系统（即 Deepin OS），甚至不少人还使用过它，并一直在使用它。因此，当深度华丽转身为统信，并打出了一系列让人目不暇接的组合拳时：推出 UOS、加入了欧拉生态，同华为等欧拉伙伴们一同打造了欧拉根社区等等，让关注深度、关注国产操作系统和信创的人们开始探究这一切背后的动因，以及接下来的发展。

作为多年来一直关注开源技术发展的开源人，我约了统信的任紫东先生聊了聊，希望将从深度到统信，再到加入欧拉生态的背后的脉络展示给大家。

### 从桌面到服务器，从深度到统信

作为最著名的国产 Linux 操作系统之一，深度操作系统（Deepin OS）在国内外拥有一大批忠实的用户和支持者，其代表性桌面环境深度桌面（DDE）也被移植到多个 Linux 发行版之上。可能是由于深度操作系统太过成功，以至于在很多人印象中，深度只是一家桌面 Linux 操作系统供应商。

在 2019 年，统信成立并推出了 UOS，开始将目光转向了服务器、云计算等领域。无独有偶的是，同样的趋势我们也能在 Ubuntu 背后的发行商 Canonical 上、以及其它的 Linux 发行版厂商上发现。这让我们开始产生一个问题，**是桌面操作系统不再重要，已经不能代表现代企业计算的主要需求了吗？**

对于这个问题，任紫东的看法是，“**桌面和服务器端一样重要**”。一方面，虽然深度操作系统在国产 Linux 桌面操作系统中占据了较大份额，但整个 Linux 桌面只占有了近 5% 的国内桌面市场份额，可以说还有很大的发展空间。另外一方面，在 Linux 用户群体方面，往往其桌面环境和服务器环境都采用了 Linux，这种环境的协调一致，有利于他们的工作，比如开发、运维、测试等等。这也是为什么微软要在 Windows 中加入 WSL 来弥合开发人群的日用和目标操作系统的间隙的原因。所以，对于统信，乃至其它 Linux 发行版厂商来说，服务器和桌面市场同样重要。

从深度到统信，在我看来，这代表了**从桌面系统到服务器系统的延伸**。但是，客观的讲，从桌面操作系统到服务器系统，其开发、维护和支持，从技术栈、发展方向、团队构成等方面都存在较大的不同，因而，在这一过程中，统信也面临了一些挑战。

任紫东表示，虽然桌面操作系统的生态建设和突破更加复杂一些，包括桌面操作系统的生态发散，用户的个性化使用习惯等，建设一套能满足广泛人群需求的桌面操作系统所面临的挑战很大。而相比之下，服务器操作系统是面向企业需求的，更多关注的是可靠稳定、性能优越、长期支持等等。

当然，建设服务器操作系统及其生态也有难度。这二者的受众、用户的感知是不一样的。为此，在桌面操作系统产线之外，统信组建了数百人的独立服务器操作系统产线，分别在内核、系统、安全、云原生等方面投入了重兵，并在国内的三大研发中心中协同开发。

一般而言，作为面向企业、云计算行业的产品，要求提供更长的支持时间。往往我们能见到，很多企业用户还在使用一些老版本产品，只要稳定可靠，提供支持，就不会将升级作为急迫事件，长周期的商业支持就是刚需。据了解，统信对于服务器操作系统的支持，从原先提供的 5 + 3 + 2 的支持，即五年的基础支持、三年的延长支持、两年的特别支持承诺，已经改为提供 5 + 5 + 3 的支持，即总共 13 年的支持服务。**企业级的需求只有得到长期的服务，才能使产品信誉和产品能力得到用户的认可。**任紫东称，统信这两年在服务器领域的成长速度非常快，是国内在通用服务器市场增长最快的厂家之一。

### 从服务器系统社区共建到统信商业版

作为最早的欧拉社区成员之一，统信不但基于欧拉操作系统开发了商业版，也为欧拉生态带来了包括深度桌面（DDE）、迁移工具等产品。国内的很多企业级用户都是采用 CentOS/RHEL 系统作为其基础设施，因此在面临 CentOS 断服的时候，企业需要有一个安全可靠、便捷易用的工具来将其原有基础设施迁移至新的操作系统。统信贡献的迁移工具可以很好的完成此任务，它已经成为欧拉社区中的重要工具。

之前，国内很多面向服务器的商业操作系统公司，都是基于 CentOS 来衍生开发的，其特性、支持状况也延续了 CentOS 的方式。但由于这些下游发行版不能更早的参与进入上游生态的开发当中，因此在产品的迭代上存在较长的时间差。任紫东说，“统信一直在期待根社区的出现，而欧拉社区就是这样的一个机会。”加入欧拉社区的统信软件，与其它社区成员一同共建上游根社区，合力打造了各种组件，基于社区版本二次开发并发行商业版本，为更多的用户提供了长周期的支持和版本升级保障。

统信服务器商业版汲取了欧拉和其它社区的经验和精华而打造，并将重点关注到垂直行业应用，以企业用户为导向，结合社区版本来形成自己的商业版本。

对于这种基于上游发行版而产生了多个下游发行版的情况，开源社区中一些人认为，发行版太多了，大家各自为政，不能形成合力，因而很难打败其它操作系统。就此问题，我也和任紫东进行了讨论，是否欧拉生态也会出现碎片化呢，这是否会影响欧拉及其商业版的发展？他说，虽然欧拉有着诸多的商业发行版，但是由于欧拉是社区成员合力打造的根社区，其所基于的技术都是属于 Linux 和开源的领域，因此，各个商业版在各有侧重的同时，也具有相同的主干，这种**主干是大家基于生态需求共识的标准，从而有效的避免的生态碎片化的情况**。枝繁叶茂，在主干下的发展，不但不会破坏欧拉的生态，反而会给欧拉带来更多的活力、更多的可能性。

### 从社区到商业，从商业到社区

前面说过，统信商业版实际上是来自于深度社区的拓展，是立足于开源社区之上的。而在这个过程中，无论是统信还是深度，都向社区贡献了大量代码，包括最知名的深度桌面环境（DDE）及其底层开发框架、各种本地化应用等等。因此，在统信的开发中，社区是其必不可少的组成部分，这里面不仅仅有来自于欧拉社区的其它成员的贡献，也有来自国内外个人贡献者的积极支持。

最典型的例子就是欧拉社区中有大量的 SIG 存在。近些年来，在开源社区中，我们经常能听到各种 SIG 的消息。SIG 是“特别利益小组”或“特别兴趣小组”的缩写，这是一种灵活的蜂群式开源协作模式，专门针对各个相对独立的方向，而凝聚一群人来为之努力。在欧拉生态中有多达上百个 SIG，而统信领导了其中十个 SIG，参与了五十余个 SIG 的开发。

而另外一方面，统信投入大量人力为商业版所提供的各种产品、特性和改进，也都会回哺到社区，以在社区大生态中得到更好的发展。这些都是基于统信的商业需求和商业机会而产生的，所以统信也有足够的动力去参与和推动它的发展。同时，这些 SIG 所产生的成果最终会转化为欧拉这棵大树上的累累盛果，成为**整个根社区的共同收益**。

### 统信的未来，欧拉的未来

从上面的访谈可以看到，统信及更多欧拉生态伙伴在打造中国根社区方面踌躇满志，也**积极看好中国底层基础设施领域的发展**。在谈及统信将来的技术和商业发展方向，任紫东说，统信将更多地向垂直领域进行拓展。基于统信打造的平台性产品，随着项目的发展，逐步向电信、能源、金融、交通等各个领域不断拓展。在这个过程中，当然也存在一些挑战，需要不断学习行业知识，与上下游适配，并与不同的合作伙伴形成相互支撑、相互依赖和相互促进的关系。

而作为共同的根社区，欧拉社区现在的发展速度非常快，已经从操作系统迈向更广阔的物联网、云原生领域，而且也得到更多来自全球开源领域的合作和机会。

*（文中插图均来自深度操作系统壁纸）*


# Manjaro 21.3.0 Ruah 发布：增加了最新的 Calmares 3.2、GNOME 42 和更多升级

>
> Manjaro Linux 21.3.0 发行包包含一些最新和最强大的更新，包括改进的安装程序。
>
>
>

Manjaro Linux 是一个滚动发布的发行版。因此，从技术上讲，如果你定期更新系统的话，你一直都会使用最新版本。

升级到 Manjaro 21.3.0 应该没什么大不了的，考虑到我已经在正式发布前几天就已经在稳定运行它了，毫无问题。

**另外**，你可能想阅读一下我 [从 Ubuntu 切换到 Manjaro](https://news.itsfoss.com/manjaro-linux-experience/) 的初步体验（如果你对于升级仍然犹豫不决的话）。

那么，Manjaro 21.3.0 带来了什么更新呢？

### Manjaro 21.3.0 更新内容

桌面环境升级到了最新的稳定版本，而内核版本仍然是 [Linux 内核 5.15 LTS](https://news.itsfoss.com/linux-kernel-5-15-release/)。

此外，这个版本还包括最终的 Clamares v3.2 版本。让我们来看看它有哪些变化吧。

#### Calamares v3.2.59

Calamares v3.2.59 安装程序是 3.2 系列的最终版本，它有许多有意义的改进。这次，分区模块包含了对 LUKS 分区的支持和更多改进，以避免那些可能会弄乱 Manjaro 安装的设置。

Calamares 3.2 的所有未来版本都将仅是错误修复。

#### GNOME 42 + Libadwaita

最初的版本包含了 GNOME 42，而最新的版本包含了 GNOME 42.2（附带最新的更新）。

总体而言，你将获得 [GNOME 42](https://news.itsfoss.com/gnome-42-release/) 引入的所有优点，包括系统范围的深色模式、基于 GTK 4 的 GNOME 应用的现代用户界面、升级的应用程序以及其他一些重大变化。

#### KDE Plasma 5.24

不幸的是，考虑到它差不多是在同一周发布的，因此该版本无法包含 [KDE Plasma 5.25](https://news.itsfoss.com/kde-plasma-5-25-release/)。

[KDE Plasma 5.24](https://news.itsfoss.com/kde-plasma-5-24-lts-release/) 是一个不错的升级，具有更新的主题和概览效果。

#### XFCE 4.16

在 Xfce 4.16 中，窗口管理器得到了许多更新和改进，以支持小数倍数的缩放和更多功能。

### 下载 Manjaro 21.3.0

到目前为止，我在 Manjaro 21.3.0 GNOME 版本中没有遇到任何问题。一切看起来都不错，升级也很顺利。

但是，如果你不想重新安装或丢失重要文件，则应始终进行备份。

你可以从 [Manjaro 的下载页面](https://manjaro.org/download/) 下载最新版本。你也应该可以通过 pamac 包管理器获得更新。

无论哪种情况，你都可以在终端中输入以下命令进行升级：

```
sudo pacmane -Syu

```

---

via: <https://news.itsfoss.com/manjaro-21-3-0-release/>

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

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


微软将对应用商店中开源软件的收费进行限制

# 微软将对应用商店中开源软件的收费进行限制

<img src="content_image/album_202206_25_101648dlxnqxkaox00xc3l.jpg" alt="" title="">

2022 年 6 月 16 日，微软更新了其应用商店的策略。其中一项禁止了发布者对开源或免费的软件收取费用，另一项则针对的是商店使用的不合理高价。如果你在过去几年中访问过微软应用商店，你可能已经注意到，它正在成为越来越多的开源和免费产品的所在地。如果原始开发者将应用程序和游戏上传到商店，这将是有益的，但情况并非如此，因为它们是由第三方上传的。

更糟糕的是，其中许多程序仅作为付费应用提供，而不是免费下载。换句话说，微软的客户必须付费才能购买应用商店的版本，而它们在其他地方是免费的！在应用商店中，免费版和付费版有时并存。为免费应用付费已经够糟糕的了，但这并不是用户在购买时可能遇到的唯一问题。更新也可能是一个问题，因为山寨应用可能不会像源头应用程序那样频繁或快速地更新。

在更新的微软商店政策中，微软在 10.8.7 节下指出：

>
> 在您决定产品或应用内购买的定价时，您的数字产品或服务的所有定价（包括销售或折扣）必须：
>
>
> 遵守所有适用的法律、法规和监管要求，包括联邦贸易委员会的《反欺骗性定价指南》。您不得试图从开源软件或其他可免费获得的软件中获利，您的产品也不应提供一个（与它提供的特性和功能相比）过高的不合理定价。
>
>
>

这个新策略在更新部分中得到了确认。如果开源和免费产品普遍免费提供，则它们不得在微软应用商店上出售，发布者也不得对其产品收取不合理的高价。开源和免费应用的开发者可以在微软应用商店上为其产品收费。例如，[Paint.net](http://Paint.net) 的开发者就是这样做的。如果微软强制执行这些策略，许多应用将从应用商店中删除。以前，开发者可以向微软报告应用程序，但在新策略下，微软可以直接控制应用的列出和提交。

---

via: <https://www.opensourceforu.com/2022/06/microsoft-to-charge-for-available-open-source-software-in-microsoft-store/>

作者：[Laveesh Kocher](https://www.opensourceforu.com/author/laveesh-kocher/) 选题：[lkxed](https://github.com/lkxed) 译者：[lkxed](https://github.com/lkxed) 校对：[wxy](https://github.com/wxy)

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


在 Linux 上玩电子游戏的三种方式

# 在 Linux 上玩电子游戏的三种方式

>
> 如果你准备放下爆米花，想从各个角度体验游戏的话，那么就在 Linux 下打开游戏吧！
>
>
>

如今，人们有更多喜欢 Linux 的理由。在这个系列里，我将分享 21 个使用 Linux 的理由。今天，我将从游戏开始。

我过去认为“游戏玩家”是一种非常特殊的生物，要由科学家们在数年的研究和测试之后严谨地认定才行。我从来没有把自己归类为游戏玩家，因为我所玩过的游戏要么是桌面游戏（棋盘类游戏和纸笔角色扮演游戏），要么是 NetHack、俄罗斯方块。现在，在移动设备、游戏机、电脑和电视机上都有游戏，我觉得现在的承认有各种形式的游戏玩家们了。如果你想自称为游戏玩家，你就可以是，不需任何资格认定。你不用必须在心里熟记那些“上上下下左右左右BA”的科乐美秘籍（你甚至可以不知道这是什么）；你也不用必须买过和玩过 3A 级游戏。如果你时不时地玩游戏，你就完全可以自称为玩家。如果你想成为一名玩家，那么现在使用 Linux 正当其时。

### 欢迎来到游戏世界

剥除光鲜的广告，在其下面，你肯定会发现一个欣欣向荣的游戏世界。在人们相信不是电子表格也不是练习打字一类的软件能挣钱以前，新兴的游戏市场已经开始发展起来了。<ruby> 独立游戏 <rt>  indie game </rt></ruby>已经在流行文化上以各种方式打上了自己的烙印（或许你不相信，《我的世界》尽管不是开源的，但一开始就是一款独立游戏），这也证实了，在玩家眼里，可玩性高于产品价值。

独立开发者和开源开发者之间有很多交集。没有什么比带着你的 Linux 笔记本电脑，浏览 [itch.io](http://itch.io) 或你的发行版的软件库，寻找鲜为人知但珍贵的开源游戏宝藏更有意义了。

有各种各样的开源游戏，包括大量的第一视角射击游戏、Nodulus 之类的益智游戏、运输大亨之类的策略经营游戏、Jethook 之类的竞速游戏、Sauerbraten 之类的竞速逃生游戏，以及很多未提到的（多亏了像 Open Jam 这样伟大的活动，每年都有新增的游戏）。

总的来说，探索开源游戏的世界的体验，和购买大型游戏工作室的产品带来的即时满足感有很大的不同。大型游戏工作室生产的游戏提供大量的视听刺激、知名演员、和长达 60 小时以上的游戏时长。而独立和开源游戏不能与之相提并论。但是话又说回来，大型游戏工作室无法提供的是，当你发现一款别人未曾听说过的游戏时的产生的发现感和与个人相关的感受。当你意识到别人都非常想知道你刚玩过的哪个出色游戏时，大型工作室也并不能提供这种紧迫感。（LCTT 校注：此处大概的意思是指大型工作室的作品已被人熟知，没有什么挖掘的新鲜感）

花点时间找出你最喜欢的游戏，然后浏览下你的发行商的软件仓库、Flathub、开源的游戏仓库，看看你能发现什么，如果发现你很喜欢的游戏，就帮忙推广一下吧。

#### Proton 和 WINE

Linux 上的游戏并没有止步于开源，但是从开源开始的。数年前 Valve 软件公司通过发行 Linux 版的 Steam 客户端把 Linux 重新带入游戏市场时，人们希望这可以推动游戏工作室能编写原生的 Linux 游戏。一些工作室这样做了，但 Valve 公司并没有成功的把 Linux 推为主要的平台，即使是 Valve 品牌的游戏电脑。并且大多数游戏工作室又转回仅在 Windows 平台上开发游戏的旧方式。

有趣的是，最终的结果是产生了更多的开源代码。Valve 公司为 Linux 兼容创建了 Proton 工程，一个可以转换 Windows 游戏到 Linux 的兼容层。在 Proton 的内核层面，它使用了WINE（Wine Is Not an Emulator） —— 以开源的方式极好地重新实现了主要的 Windows 库。

游戏市场的成果，如今已经变成了开源世界的宝藏。今天，来自大型工作室的大多数游戏都可以在 Linux 上像原生游戏一样运行。

当然，如果你是必须要在发行日就玩上最新版游戏的这类玩家，你可能会遇到一些令人不愉快的“惊喜”。尽管那不是惊喜，很少有大型游戏在发行时毫无漏洞，一周后才补上补丁。这些游戏在 Proton 和 WINE 上运行时遇到这些错误可能更糟糕，因此 Linux 玩家通过避免尽早上车而避免这些问题。这种妥协可能是值得的。我玩过一些游戏，它们在 Proton 平台运行完美，后来从愤怒的论坛帖子中发现，它在最新版的 Windows 上运行显然充满了致命的错误。总之，似乎来自大型工作室的游戏并不完美，但你可能在 Linux 上遇到相似但不同的问题，正如你在 Windows 上遇到的。

#### Flatpak

Linux 近来历史上最令人激动的发展就是 Flatpak 了，它是本地容器和打包的结合，它和游戏无关（或者它和游戏息息相关），它使得 Linux 应用基本上能被分发到任意的 Linux 发行版上。这也适用于游戏，因为在游戏中使用了相当多的前沿技术，而对发行版维护者来说，要跟上任何特定游戏所需的所有最新版本可能是相当苛刻的。

Flapak 通过为应用程序库抽象出一种通用的 Flatpak 特定的层，而将其从发行版中抽象出来。Flatpak 软件包的发行者知道，如果一个库不在 Flatpak SDK 中，那么它必须要包含在 Flatpak 软件包中，简单而直接。

多亏了 Flatpak，Steam 客户端可以运行在像 Fedora 这样的常用发行版上，也可以运行在 RHEL、Slackware 等从传统角度看并不面向游戏市场的操作系统上。

#### Lutris

如果你并不急于在 Steam 上注册账号，那么可以用我比较偏爱的游戏客户端 Lutris 。表面上看，Lutris 是一个简单的游戏启动器，当你想玩游戏但还没决定玩什么的时候，你可以到这这里找找。有了 Lutris，你可以将系统上的所有游戏添加到你的游戏库，然后从 Lutris 界面启动并立即玩起来。更好的是，Lutris 贡献者（像我一样）会定期发布安装脚本，使你可以轻松安装自己的游戏。这并不是必须的，但它可以是一个很好的捷径，可以绕过一些繁琐的配置。

Lutris 也可以借助运行器或子系统，来运行那些不能从应用菜单直接启动的游戏。比如你想玩开源的《<ruby> 魔兽塔防 <rt>  Warcraft Tower Defense </rt></ruby>》这样的游戏机游戏，你必须运行模拟器。如果你已经安装过模拟器的话，Lutris 可以帮你处理这一切。除此以外，如果你有一个 [GOG.com](http://GOG.com) 游戏账号，Lutris 可以访问它，并可以把游戏导入你的游戏库中。

没有比这更容易的管理你的游戏的方式了。

### 去玩游戏吧

Linux 游戏是一种充实且给人力量的体验。我过去避免玩电脑游戏，因为我不觉得我有太多的选择。似乎昂贵的游戏总是在不断发布，并且不可避免的获得好或者不好的极端体验，然后很快又转向下一个。另一方面，开源游戏把我引入了游戏的圈子。我见到过其他玩家和开发者。我见到过艺术家和音乐家、粉丝以及推广者。我玩过各种各样的我从来不知道的游戏。其中一些甚至不够我玩一下午，而其他的却让我长久的着迷于游戏、修改、关卡设计和乐趣。

如果你准备好放下爆米花，从各个角度体验下游戏的话，那就在 Linux 上开始游戏吧。

---

via: <https://opensource.com/article/21/2/linux-gaming>

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

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


硬核观察 #678 火星快车号上 Windows 98 时期的软件得到了更新

Summary: • 火星快车号上 Windows 98 时期的软件得到了更新 • ARM 最初的操作系统 35 年后仍在更新 • “首个桌面操作系统根社区” openKylin 发布

受俄乌冲突期间ubutu停服事件及深深的执念(国内自己的系统)

下次自己造内核，那叫啥？

# 硬核观察 #678 火星快车号上 Windows 98 时期的软件得到了更新

### 火星快车号上 Windows 98 时期的软件得到了更新

欧洲航天局于 2003 年发射的火星快车号已经运行了近 20 年，火星快车号包括两个部份：火星快车号卫星与小猎犬 2 号登陆器，不过小猎犬 2 号后来失去联系。卫星上的火星地下和电离层探测高级雷达（MARSIS）是 2018 年在火星上发现巨大的地下液态水层的关键，该软件使用的是基于 Windows 98 的开发环境。欧洲航天局正在升级该软件，新的软件将使 MARSIS 开启的时间延长五倍，并在每次通过时探索更大的区域。这就像是“发射近 20 年后，火星快车号上有了一个全新的仪器一样。”

>
> **[消息来源：The Verge](https://www.theverge.com/2022/6/24/23181715/mars-express-marsis-windows-98-upgrade-esa)**
>
>
>

>
> 老王点评：看来 Windows 98 一直运行的也挺好。那么，微软为啥让大家一直升级呢？
>
>
>

### ARM 最初的操作系统 35 年后仍在更新

1987 年 6 月，Acron 推出了起价 800 英镑的 Archimedes A305 / A310 计算机。在那个年代，其产品性能设计相当先进，且提供了当时名为 Arthur 的新操作系统。两年后，它被更名为 RISC OS。如今，RISC OS 的一个分支，仍然支持 Acron 时代独特的 26 位模式，当然，目前只能运行在模拟器中。另一个分支是为 32 位的 ARM 芯片设计的，并于 2018 年开源。如今，它还在继续维护更新，近日发布了一个源自 OpenBSD 的新 TCP/IP 栈，带来了对 IPv6 的支持。但它目前还不支持 Wi-Fi，以及不支持多核处理器技术 SMP。

>
> **[消息来源：The Register](https://www.theregister.com/2022/06/21/risc_os_35/)**
>
>
>

>
> 老王点评：这么古老的操作系统，是操作系统发展历史上一块块纪念碑，更多只是回味。
>
>
>

### “首个桌面操作系统根社区” openKylin 发布

昨日，麒麟软件联合普华、中科方德、麒麟信安、中兴新支点、先进操作系统创新中心等发起了中国“首个桌面操作系统根社区” openKylin 社区。所谓根社区，是指基于 Linux 内核和其他开源组件而构建，不依赖上游发行版的社区。在视频发布会上，邀请了若干院士发表了致辞，并呼吁更多的行业伙伴加入，携手打造“产业主导、平台自主、技术先进、生态丰富”的桌面操作系统根社区。

>
> **[消息来源：openKylin](https://mp.weixin.qq.com/s/NneK8FSbOJSL_4Upn7G_ag)**
>
>
>

>
> 老王点评：看来国产根社区的春天到了，这又是一家。似乎“根社区”这个说法是从开放原子开源基金会开始出现的？
>
>
>


神秘的 GeckoLinux 创建者推出了一个新的 Debian 合成发行版

PVE什么时候能合并进入Debian Gnu/Linux滴发行全软件组件ISO里，是件大好事。哈哈

# 神秘的 GeckoLinux 创建者推出了一个新的 Debian 合成发行版

>
> GeckoLinux 创建者推出了一个基于 Debian 的新 Linux 发行版，专注于简单性和可用性。
>
>
>

GeckoLinux 改进了的 openSUSE 体验，它的创建者一直保持匿名。

我不会评论这是好事还是坏事，但现在，开发者又带着另一个基于 Debian 的类似项目回来了。

**SpiralLinux**，这是一个基于 Debian 的发行版，旨在使 Debian 适合最终用户使用。

### SpiralLinux：基于 Debian 构建的发行版

毫不奇怪，大多数用户友好的 Linux 发行版都将 Debian 作为其原始基础。Ubuntu 就是在此基础上进行了大量改进，从而提供了良好的桌面体验，即使对于没有 Linux 经验的用户也是如此。

那么，这个发行版有什么不同呢？

嗯，它的创建者说，这个项目旨在帮助你获得 Debian 的所有核心优势，而无需定制很多东西。

如果你想在桌面上使用 Debian，SpiralLinux 是一种接近原版的体验。你还可以根据需要升级到最新的稳定 Debian 版本（或不稳定/测试版），而不会丢失方便易用的自定义设置。

换句话说，SpiralLinux 使 Debian 适合桌面使用，而最终用户只需付出最小的努力。

为了实现这一点，SpiralLinux 使用了 Debian 官方软件包存储库，并提供了现场安装方式，让你能够定制自己的 Debian 系统。

此外，SpiralLinux 还具有以下功能：

* 开箱即用的 VirtualBox 支持
* 预装了专有的媒体编解码器和非自由软件包存储库
* 预装了专有固件
* 打印机支持
* 通过 GUI（软件中心）支持 Flatpak
* 默认启用 zRAM 交换
* 多种桌面环境（Cinnamon、XFCE、Gnome、Plasma、MATE、Budgie、LXQt）

Debian 始终坚持使用开源和自由软件包，最终用户必须自己搞定编解码器、驱动程序和其他软件包，才能使许多功能正常工作，获得令他们满意的桌面体验。

而 SpiralLinux 似乎可以作为 Debian 的一个有用的替代品，就像 GeckoLinux 之于 openSUSE 一样。

### 下载 SpiralLinux

如果你一直想尝试 Debian，但又不想在初始配置上费尽心思，你可以尝试 SpiralLinux。

你可以前往其托管在 GitHub 上的官网以了解更多信息，链接如下：

>
> **[SpiralLinux](https://spirallinux.github.io/)**
>
>
>

---

via: <https://news.itsfoss.com/debian-remix-spiral-linux/>

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

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


GitHub Copilot 现已可供所有人使用，但并非所有人都喜欢它

# GitHub Copilot 现已可供所有人使用，但并非所有人都喜欢它

>
> GitHub Copilot 来了，它能帮助程序员，为他们提供人工智能的编码建议，不过，它是否会让事情变得更糟呢？
>
>
>

在 2021 年，我曾花了好几个小时来翻阅 GitHub Copilot 文档，试图弄清楚如何能够加入它的技术预览计划。还好，这一切都得到了回报，我成功加入了预览计划。

而现在，它终于可供所有人使用啦！

如果你还不知道的话，[GitHub Copilot](https://copilot.github.com/) 是一个 AI 助手，可帮助你更快、更高效地编写代码。

我能想到的最类似的东西，就是你手机上的（输入法的）自动完成功能。不过，与自动完成功能不同，GitHub Copilot 编写代码，就相当于是在完成整段的句子。

### Copilot 现已可供大众使用

正如我在前面提到的，Copilot 已经处于技术预览阶段将近一年了。这意味着，GitHub 只允许非常有限数量的开发者免费使用它，以换取同意 GitHub 监控他们的使用情况，从而改进程序的最终版本。

看起来 GitHub 终于满意地向公众发布了它。现在，任何拥有 GitHub 帐户的人都应该能够使用它，尽管需要付出一定的代价（我很快就会在下面提到）。

[公告](https://github.blog/2022-06-21-github-copilot-is-generally-available-to-all-developers/) 中提到：

>
> 直到不久前，人工智能都没有能够帮助改进代码，开发软件的过程几乎完全是手动的。现在，这种情况正在改变。今天，我很高兴地宣布，我们正在向所有个人开发者提供 [GitHub Copilot](http://copilot.github.com)。你的 AI 配对程序员来啦。
>
>
> —— [Thomas Dohmke](https://github.blog/author/ashtom/)，GitHub CEO
>
>
>

Copilot 作为免费的编辑器扩展，已经帮助数百万开发者加快了他们的编程速度。然而，它确实是有代价的，无论是直接的还是间接的。

### GitHub Copilot 定价

与几乎所有令人兴奋的新技术一样，Copilot 对某些人来说可能过于昂贵。它将花费你 10 美元/月或 100 美元/年。

如果你是开源项目维护者或经过验证的学生，那么你可以免费使用它。

### GitHub Copilot 不道德吗？

围绕 GitHub Copilot 产品的争议巨大且令人担忧。从技术上讲，这个人工智能是使用大家托管在 GitHub 上的代码来进行训练的。

因此，基本上，GitHub 是通过使用你的代码来提供一个新产品（如果你愿意的话，还可以加点料）。而且，关于 Copilot，可别忘了，自由软件基金会（FSF）也 [建议](https://www.fsf.org/blogs/licensing/fsf-funded-call-for-white-papers-on-philosophical-and-legal-questions-around-copilot) 不要在 GitHub 上托管代码。

我们知道，企业总是喜欢利用事物，但有些人认为这应该不会直接损害托管在 GitHub 上的项目/代码。

**但是，是这样吗？**

简而言之，在 Copilot 发布后，许多开发者都分享说，他们发现 GitHub Copilot 生成了受版权保护的代码：

>
> 我试了下 GitHub Copilot，这是一项付费服务，来看看它是否会使用带有限制性许可证的存储库的代码。我检查了它，看看它是否有我在之前雇主那里编写的代码，该代码有一个许可证，只允许其用于免费游戏，并且需要附加许可证。是的，它确实有。
>
>
>

当然，如果我们查看 GitHub Copilot 的常见问题解答（FAQ），其中提到：

>
> GitHub 不拥有 GitHub Copilot 生成的建议。您在 GitHub Copilot 的帮助下编写的代码属于您自己，由您自己负责。
>
>
>

所以说，你为一项服务付了费，最终却为你的项目增加了不便和更多的工作？

在我看来，就简化开发者的任务而言，这听起来一点儿也不令人兴奋。

*你对此有什么想法？请在下面的评论区中分享一下吧！*

---

via: <https://news.itsfoss.com/github-copilot/>

作者：[Jacob Crume](https://news.itsfoss.com/author/jacob/) 选题：[lkxed](https://github.com/lkxed) 译者：[lkxed](https://github.com/lkxed) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

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


如何在 Ubuntu 中安装具体指定的软件包版本

# 如何在 Ubuntu 中安装具体指定的软件包版本

在 Ubuntu 中想安装一个软件包的一个特别指定的版本？你可以通过下面的方式来轻松地完成：

```
sudo apt install package_name=package_version

```

你如何知道某个软件包有哪些可用的版本？可以使用这个命令：

```
apt list --all-versions package_name

```

在下面的屏幕截屏中，你可以看到，我有两个可用的 VLC 版本，我使用命令来安装较旧的版本：

听起来像一个简单的任务，对吧？但是事情并非看起来那么简单。这里有一些不确定是否会出现，但是可能会涉及的东西。

这篇教程将涵盖使用 `apt` 或 `apt-get` 命令来安装一个具体指定的程序的版本的所有的重要的方面。

### 安装一个具体指定版本的程序需要知道的事

在基于 Ubuntu 和 Debian 发行版中，你需要知道一些关于 APT 和存储库是如何工作的知识。

#### 同一个软件包源没有较旧的版本

Ubuntu 在其存储库中不保留较旧版本的软件包。在特殊的情况下，你可以暂时性地看到多个版本。例如，你运行 APT 更新（但不升级）时，可能会有一个可用的新版本。在 APT 缓存中，你可以看到同一个软件包的两个版本。但是，一旦软件包被升级到了新的版本，较旧版本的软件包将从 **APT 缓存** 和存储库中移除。

#### 使用多个软件包源来使用不同的版本

为获取同一个的软件包的多个版本，你必须得添加多个软件包源。例如，VLC 是版本 3.x 系列。添加 [VLC 每日构建 PPA](https://launchpad.net/~videolan/+archive/ubuntu/master-daily) 将会提供（不稳定的）版本 4.x 系列。

同样，**你可以下载不同版本的 DEB 文件，并安装它**。

#### 较高版本编号的版本通常有优先权

如果你有来自多个软件包源的相同名称的软件，默认情况下，Ubuntu 将安装可用的最高版本编号的版本。

在前面的示例中，如果我安装 VLC ，那么它将会安装 4.x 系列的版本，而不是 3.x 系列的版本。

#### 较旧版本将升级到可用的较新版本

这是另外一个可能存在的问题。即使你安装较旧版本的软件包，它也会升级到较新的版本（如果存在可用的较新版本）。你必须 [保留该软件包来防止其升级](https://itsfoss.com/prevent-package-update-ubuntu/) 。

#### 依赖关系也需要安装

如果软件包有依赖关系，你也需要安装必要的依赖关系软件包。

现在，你已经知道一些可能存在的问题，让我们看看如何解决它们。

### 安装一个软件包的具体指定版本

在这篇教程中，我将以 VLC 为例。在 Ubuntu 的存储库中可获得 VLC 版本。我添加了每日构建 PPA ，它将向我提供 VLC 的 4.0 版本的候选版本。

如你所见，在现在的系统中，我有两个可用的 VLC 版本：

```
~$ apt list -a vlc
Listing... Done
vlc/jammy 4.0.0~rc1~~git20220516+r92284+296~ubuntu22.04.1 amd64
vlc/jammy 3.0.16-1build7 amd64
vlc/jammy 3.0.16-1build7 i386

```

因为较高版本编号版本有优先权，使用 `apt install vlc` 命令将会导致安装 VLC 的 4.0 版本。但是，因为这篇教程的缘由，我想安装较旧的版本 3.0.16 。

```
sudo apt install vlc=3.0.16-1build7

```

但是，这里会有这样的事。VLC 软件包有一些依赖关系，并且这些依赖关系也需要具体指定的版本。因此，在 Ubuntu 为其尝试安装最新的版本时，你将会遇到经典的 <ruby>   你已保留残缺软件包  <rt>  you have held broken packages </rt></ruby> 错误。

为修复这个错误，你需要为其提供它所投诉的所有依赖关系的软件包的具体指定版本。因此，该命令会变成这样：

```
sudo apt install vlc=3.0.16-1build7 \
		 vlc-bin=3.0.16-1build7 \
		 vlc-plugin-base=3.0.16-1build7 \
		 vlc-plugin-qt=3.0.16-1build7 \
		 vlc-plugin-video-output=3.0.16-1build7 \
		 vlc-l10n=3.0.16-1build7 \
		 vlc-plugin-access-extra=3.0.16-1build7 \
		 vlc-plugin-notify=3.0.16-1build7 \
		 vlc-plugin-samba=3.0.16-1build7 \
		 vlc-plugin-skins2=3.0.16-1build7 \
		 vlc-plugin-video-splitter=3.0.16-1build7 \
		 vlc-plugin-visualization=3.0.16-1build7

```

说明一下，每行结尾处的 `\` 只是用来将多行命令来写入同一个命令的一种方式。

**它有作用吗？在很多情况下，它是有作用的。** 但是，我选择了一个复杂的 VLC 示例，它有很多依赖关系。甚至这些所涉及的依赖关系也依赖于其它的软件包。所以，它就变得令人难以处理。

一种替代的方法是在安装时指定软件包源。

#### 替代方式，指定存储库

你已经添加多个软件包源，因此，你应该对这些软件包的来源有一些了解。

使用下面的命令来搜索存储库：

```
apt-cache policy | less

```

注意存储库名称后面的行：

```
500 http://security.ubuntu.com/ubuntu jammy-security/multiverse i386 Packages
     release v=22.04,o=Ubuntu,a=jammy-security,n=jammy,l=Ubuntu,c=multiverse,b=i386
     origin security.ubuntu.com

```

你可以具体指定 `o`、`l`、`a` 等参数。

在我原来的示例中，我想安装来自 Ubuntu 存储库的 VLC（获取版本 3.16），而不是安装来 PPA 的版本（它将向我提供版本 4）。

因此，下面的命令将安装 VLC 版本 3.16 及其所有的依赖关系：

```
sudo apt install -t "o=ubuntu" vlc

```

看起来令人满意？但是，当你必须更新系统时，问题就来了。它接下来会控诉找不到指定的软件包版本。

**还能做什么？**

为安装较旧的软件包版本，从你的系统中移除较新版本的软件包源（如果可能的话）。它将有助于逃脱这些依赖关系地狱。

如果不能这么做，检查你是否可以从其它一些软件包的打包格式来获取，像 Snap、Flatpak、AppImage 等等。事实上，Snap 和 Flatpak 也允许你从可用的版本中选择和安装。因为这些应用程序是沙盒模式的，所以它很容易管理不同版本的依赖关系。

#### 保留软件包，防止升级

如果你完成安装一个指定的程序版本，你可能想避免意外地升级到较新的版本。实现这一点并不太复杂。

```
sudo apt-mark hold package_name

```

你可以免除保留软件包，以便它能稍后升级：

```
sudo apt-mark unhold package_name

```

注意，软件包的依赖关系不会自动地保留。它们需要单独地指明。

### 结论

如你所见，安装选定软件包版本有一定之规。只有当软件包有依赖关系时，那么事情就会变得复杂，然后，你就会进入依赖关系地狱。

我希望你在这篇教程中学到一些新的东西。如果你有问题或建议来改善它，请在评论区告诉我。

---

via: <https://itsfoss.com/apt-install-specific-version-2/>

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

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


用这些开源工具在 Linux 上编辑 PDF 文件

# 用这些开源工具在 Linux 上编辑 PDF 文件

<img src="content_image/album_202206_26_152728d3kajokj34t3agwm.jpg" alt="" title="">

>
> Adobe Acrobat 的开源替代品具有创建、编辑和注释 PDF 的所有必要功能。
>
>
>

开源的 PDF 阅读和编辑工具通常比 “PDF 编辑器” 搜索结果第一页中的应用更安全和可靠。在那里，你很可能看到带有隐藏的限制和关税的专有应用，缺乏关于数据保护政策和托管的足够信息。你可以有更好的。

这里有五个应用，可以安装在你的 Linux 系统上（和其他系统）或托管在服务器上。每一个都是自由而开源的，具有创建、编辑和注释 PDF 文件的所有必要功能。

### LibreOffice

使用 [LibreOffice](https://opensource.com/article/21/9/libreoffice-tips) 套件，你对应用的选择取决于最初的任务。虽然文字处理器 LibreOffice Writer，可以让你创建 PDF 文件，并从 ODF 和其他文本格式导出，但 Draw 更适合于处理现有的 PDF 文件。

Draw 是用来创建和编辑图形文件的，如小册子、杂志和海报。因此，其工具集主要用于视觉对象和布局上。然而，对于 PDF 编辑，当文件具有可编辑属性时，LibreOffice Draw 提供了用于修改和添加 PDF 内容的工具。如果没有的话，你仍然可以在现有的内容层上添加新的文本字段，并对文件进行注释或完成。

Draw 和 Writer 都被捆绑在 LibreOffice 桌面套件中，可在 Linux 系统、macOS 和 Windows 上安装。

### ONLYOFFICE Docs

ONLYOFFICE 一直在改进 PDF 的处理，并在 [ONLYOFFICE Docs](https://opensource.com/article/20/12/onlyoffice-docs) 的 7.1 版本中引入了一个全新的 PDF 和电子书的阅读器。

该文档编辑器允许从头开始创建 PDF 文件，使用 DOCX 作为文件的基础，然后可以转换为 PDF 或 PDF/A。通过内置的表单创建功能，ONLYOFFICE Docs 还可以建立可填充的文档模板，并将其导出为可编辑的 PDF，并为不同类型的内容设置可填充的字段：文本、图像、日期等。

除了可以识别 PDF 内的文本进行复制和提取外，ONLYOFFICE Docs 还可以将 PDF 转换为 DOCX，这样你就可以继续使用完全可编辑的文本格式的文件。ONLYOFFICE 还可以让你用密码保护文件，添加水印，并使用桌面版中的数字签名。

ONLYOFFICE Docs 可以作为一个网络套件（内部或云端）集成到文档管理系统（DMS）或作为一个独立的桌面应用程序使用。你可以将后者作为 DEB 或 RPM 文件、AppImage、Flatpack 和其他几种格式在 Linux 中安装。

### PDF Arranger

[PDF Arranger](https://flathub.org/apps/details/com.github.jeromerobert.pdfarranger) 是 PikePDF 库的一个前端应用。它不像 LibreOffice 和 ONLYOFFICE 那样用于对 PDF 的内容进行编辑，但它对于重新排序页面、将 PDF 分割成更小的文件、将几个 PDF 合并成一个、旋转或裁剪页面等都很好。它的界面是直观的，易于使用。

PDF Arranger 可用于 Linux 和 Windows。

### Okular

[Okular](https://opensource.com/article/22/4/linux-kde-eco-certification-okular) 是一个由 KDE 社区开发的免费开源文档查看器。该应用的功能非常成熟，可以查看 PDF、电子书、图片和漫画。

Okular 完全或部分支持大多数流行的 PDF 功能和使用场景，如添加注释和内联笔记或插入文本框、形状和印章。你还可以为文档添加数字加密签名，这样你的读者就可以确定文档的来源。

除了在 PDF 中添加文本和图像外，还可以从文档中检索到它们，以复制和粘贴到其他地方。Okular 中的区域选择工具可以识别所选区域内的组件，所以你可以从 PDF 中独立提取它们。

你可以使用你的发行版包管理器或以 Flatpak 的形式安装 Okular。

### Xournal++

[Xournal++](http://xournal.sourceforge.net/) 是一款带有 PDF 文件注释工具的手写日记软件。

它是一款具有强化手写功能的记事软件，对于处理基于文本的内容和专业布局来说，它可能不是最佳选择。然而，它渲染图形的能力以及对书写和绘图的手写笔输入的支持使它作为一个小众生产力工具脱颖而出。

图层管理工具、可定制的笔尖设置以及对手写笔映射的支持，使 PDF 注释和草图绘制变得更加舒适。Xournal++ 还有一个文本工具，用于添加文本框，并能插入图像。

Xournal++ 可在 Linux 系统（Ubuntu、Debian、Arch、SUSE）、MacOS 和 Windows（10及以上）中安装。

### 总结

如果你正在寻找一个免费和安全的专有 PDF 浏览和编辑软件的替代品，不难找到一个开源的选择，无论是桌面还是在线使用。只要记住，目前可用的解决方案在不同的使用情况下有各自的优势，没有一个工具在所有可能的任务中都同样出色。

这五个方案因其功能或对小众 PDF 任务的有用性而脱颖而出。对于企业使用和协作，我建议使用 ONLYOFFICE 或 LibreOffice Draw。PDF Arranger 是一个简单的、轻量级的工具，当你不需要改变文本时，可以用它来处理页面。Okular 为多种文件类型提供了很好的查看功能，如果你想在 PDF 中画草图和做笔记，Xournal++ 是最佳选择。

---

via: <https://opensource.com/article/22/6/open-source-pdf-editors-linux>

作者：[Michael Korotaev](https://opensource.com/users/michaelk) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #679 NetHack 被列入现代艺术博物馆藏品

Summary: • NetHack 被列入现代艺术博物馆藏品 • Linus Torvalds 反对用 -O3 优化编译内核 • Fedora CoreOS 有望提升为官方版本

# 硬核观察 #679 NetHack 被列入现代艺术博物馆藏品

### NetHack 被列入现代艺术博物馆藏品

NetHack 被列入了纽约现代艺术博物馆收藏。它被建筑和设计馆选定为其小型电子游戏收藏品，并作为今年秋天的“永不孤独”展览的一部分展出。NetHack 最初是 1982 年的地下城探索游戏“Hack”（它基于 1980 年的游戏 Rogue）的一个复刻版本，它影响了日后的《暗黑破坏神》和《火炬之光》。它是仍在活动的最古老的开源项目之一，实际上比“开源”一词（当时叫“自由软件”），甚至 GPL 都早了几年。它也是最早的，甚至是第一个完全通过互联网，由分布在世界各地的团队开发的软件项目之一（“NetHack”中的“Net”因此而来）。

>
> **[消息来源：Linkedin](https://www.linkedin.com/pulse/gaming-night-museum-jean-christophe-collet/)**
>
>
>

>
> 老王点评：“上古时代”的网游，这是真正的老游戏和开源鼻祖。它也有很多衍生版本，大家感兴趣的可以看看。
>
>
>

### Linus Torvalds 反对用 -O3 优化编译内核

之前我们 [报道](/article-14749-1.html) 过，有开发者提出了补丁，可以在所有 CPU 架构上启用 -O3 的优化参数来编译内核，而之前该 Kconfig 参数只在 ARC 架构上可用。Linus Torvalds 对此的看法是，他实际上反对有这样一个 Kconfig 选项。他需要被一些真实的、现实世界的数据所说服，以显示其好处。当然，感兴趣的人即便没有这个 Kconfig 选项，也可以为编译器添加类似选项而做到 -O3 优化。但 Linus 也指出，“在生成糟糕的代码方面，-O3 有更多的黑历史。最好干脆移除这个选项。”

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Linus-Against-O3-Kernel)**
>
>
>

>
> 老王点评：过度优化显然是个错误，Linus 和内核社区还是一如既往的保守持重。不过我觉得，作为实验性的选项，完全可以更开放一些，或许真的能对内核和编译器优化有所改进。
>
>
>

### Fedora CoreOS 有望提升为官方版本

Fedora CoreOS 是一个自动更新、最小化的操作系统，用于容器工作负载，其目标是结合 CoreOS Container Linux 和 Fedora Atomic Host 的最佳特性。早在 Fedora 34 开发周期中，Fedora CoreOS 的开发者希望能够晋升为官方版本。现在反馈的问题已经得到解决，有望在 Fedora 37 中升级为和工作站、服务器和 IoT 构建并列的官方版本。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Fedora-CoreOS-Promotion-Hopes)**
>
>
>

>
> 老王点评：再加上这个容器版本，Fedora 的各个官方产品线就齐全了。
>
>
>


Linus Torvalds 暗示很快就可以在内核中看到对 Rust 的支持

别搞得过几年发现Rust不行了，又得从内核里删掉。

# Linus Torvalds 暗示很快就可以在内核中看到对 Rust 的支持

>
> 正如 Linus Torvalds 所暗示，Linux Kernel 5.20 发布时可能会提供对 Rust 的支持。你怎么看？
>
>
>

<img src="content_image/album_202206_27_102128x2aaam52cieijt7l.jpg" alt="Linus" title="Linus">

市面上已经有许多用 Rust 重写的开源项目。因此，如今 Rust 被认为是 Linux 内核的第二语言，也就不足为奇了。

几天前，在 [Linux 基金会开源峰会](https://events.linuxfoundation.org/open-source-summit-north-america/) 上，Linus Torvals 提到他们预计将在下一个内核版本（即 Linux 内核 5.20）中对 Rust 进行试验。

或许你不知道，正如 [Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Rust-Linux-v7-Plus-New-Uutils) 率先报道的那样，Linux 已经有了 Rust 内核补丁，包含了少量的示例驱动程序，以及基本的基础设施的启用代码。

因此，Linus Torvalds 对可能合并 Rust 支持的暗示，也不足为奇。但是，这无疑是令人兴奋的！

### 用于 Linux 内核的 Rust

这么做的最终目标是让 Linux 内核变得更好，但它现在仍然处于试运行阶段。

凭借其各种优势，Rust 正日益成为一种流行的编程语言。还记得吗，[System76 也在开发一个用 Rust 编写的新桌面环境](https://news.itsfoss.com/system76-rust-cosmic-desktop/)。

然而，并不是所有参与维护 Linux 内核的人都熟悉这种编程语言。

那么，这会是一个问题吗？

Linus Torvalds 并不认为这是一个大问题，因为内核中也有其他语言。他还提到希望看到 Rust 成为新的一份子。

[The Register](https://www.theregister.com/2022/06/23/linus_torvalds_rust_linux_kernel/) 报道称，Linus Torvalds 表示会信任维护者，除非他们犯了错误。

### Linux 5.20：何时发布？

Linux 内核 5.19 版本将于 7 月底左右发布。因此，5.20 版本的合并窗口应该会在其稳定版发布后开启（假设没有意外延迟的话）。

除了 Rust 以外，Linux 内核 5.20 应该也是对包括 RDNA3 在内的下一代硬件支持的重要更新，它同时提供了更多功能。

*你如何看待 Rust 将在不久的将来进入 Linux 呢？你感到兴奋吗？欢迎在下方评论区告诉我们～*

---

via: <https://news.itsfoss.com/linux-kernel-rust/>

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

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


7-Zip 22.00 最终版现已推出

# 7-Zip 22.00 最终版现已推出

<img src="content_image/album_202206_27_110310hwrmxuwyqlor1olp.jpg" alt="" title="">

7-Zip 是用于 Windows、Mac 和 Linux 的知名开源文件归档器。它的最新版本 22.00 现已推出。它是 2022 年的第一个稳定版本。上一个版本是 21.07，于 2021 年 12 月发布。7-Zip 的用户可以从官方网站获取该应用的最新版本，下载适用于 Windows 64 位、32 位和 ARM 版本。该应用仍然与过时的 Windows 版本兼容，例如 XP 和 Vista。它还支持所有官方支持的 Windows 版本，包括服务器版本。适用于 Linux 的 7-Zip 22.00 已经可以下载，但 Mac OS 版本还不可用。

7-Zip 22.00 包含一些增强了应用功能的新特性。这个归档器现在支持提取<ruby> 苹果文件系统 <rt>  Apple File System </rt></ruby>（APFS）镜像。几年前，苹果公司在 Mac OS 10.13 和 iOS 中引入了苹果文件系统。该文件系统在设计时就考虑到了闪存（Flash）和固态硬盘（SSD）存储。

7-Zip 22.00 包括了对其 TAR 存档支持的多项增强。使用选项 `-ttar -mm=pax` 或 `-ttar -mm=posix`，7-Zip 现在可以创建符合 POSIX 标准的 tar 格式的 TAR 档案。此外，使用选项 `ttar -mm=pax -mtp=3 -mtc -mta`，7-Zip 可以在 tar/pax 存档中存储高精度的文件时间戳。

最后，Linux 用户可以在 TAR 归档文件中使用以下两个新选项：

* `snoi`：将所有者/组 ID 保存在存档中，或将所有者/组 ID 从存档复制到提取的文件中。
* `snon`：在存档中保留所有者/组的名称。

适用于 Windows 的 7-Zip 22.00 添加了对 `-snz` 选项的支持，该选项用于传播区识别符（LCTT 译注：区标识符是微软在 2013 年为 IE 设计的安全功能，它会标记那些用户自网络上所下载的文件，并在用户准备打开时跳出警告）。

要提取文件，请使用标识符流。出于安全目的，Windows 使用了该流，它可用于确定文件是在本地创建的还是从互联网下载的。

在“<ruby> 添加到存档 <rt>  add to archive </rt></ruby>”配置对话框中，7-Zip 22.00 包含一个新的选项窗口。它包括用于更改时间戳精度、更改其他与时间相关的配置选项，以及防止更改源文件的最后访问时间等选项。

---

via: <https://www.opensourceforu.com/2022/06/the-final-version-of-7-zip-22-00-is-now-available/>

作者：[Laveesh Kocher](https://www.opensourceforu.com/author/laveesh-kocher/) 选题：[lkxed](https://github.com/lkxed) 译者：[lkxed](https://github.com/lkxed) 校对：[wxy](https://github.com/wxy)

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


使用 LibreOffice 键盘快捷键的小技巧

Summary: 键盘快捷键让我专注于我要传递的内容，而不是它的外观。

键盘快捷键让我专注于我要传递的内容，而不是它的外观。

# 使用 LibreOffice 键盘快捷键的小技巧

>
> 键盘快捷键让我专注于我要传递的内容，而不是它的外观。
>
>
>

从我记事起，我就一直在使用文字处理软件。当文字处理器从直接格式化转向利用样式来改变文本在页面上的显示方式时，这对我的写作有很大的推动作用。

LibreOffice 提供了多种样式，你可以使用它们来创建各种内容。 LibreOffice 将段落样式应用于文本块，例如正文、列表和代码示例。字符样式类似，只是这些样式适用于段落内的内联词或其他短文本。使用“<ruby> 视图 <rt>  View </rt></ruby> -> <ruby> 样式 <rt>  Styles </rt></ruby>”菜单，或使用 `F11` 键盘快捷键，调出样式选择器。

使用样式可以更轻松地编写更长的文档。看看这个例子：作为咨询实践的一部分，我写了很多工作簿和培训材料。一个工作簿可能有 40 或 60 页长，具体取决于主题，并且可以包含各种内容，例如正文、表格和列表。我的一些技术培训材料可能还包括源代码示例。

我有一个提供给客户的标准培训集，但我也做定制的培训计划。在处理自定义程序时，我可能会先从另一个工作簿导入文本，然后从那里开始工作。根据客户的不同，我可能还会调整字体和其他样式元素以匹配客户的样式偏好。对于其他材料，我可能需要添加源代码示例。

要使用直接格式输入示例源代码，我需要设置字体并调整工作簿中每个代码块的边距。如果我后来决定我的工作簿应该对正文文本或源代码示例使用不同的字体，我需要返回并更改所有内容。对于包含多个代码示例的工作簿，这可能需要几个小时来查找每个源代码示例并调整字体和边距以匹配新的首选格式。

但是，通过使用样式，我可以更新定义一次，为正文样式使用不同的字体，并且 LibreOffice Writer 会在所有使用正文样式的地方更新我的文档。同样，我可以调整预格式化文本样式的字体和边距，LibreOffice Writer 会将这种新样式应用到每个具有预格式化文本样式的源代码示例中。这对于其他文本块也是如此，包括标题、源代码、列表以及页眉和页脚。

我最近有了一个好主意，更新 LibreOffice 键盘快捷键以简化我的写作过程。我重新定义了 `Ctrl + B` 设置加粗强调字符样式，`Ctrl + I` 设置强调字符样式，`Ctrl + 空格` 设置取消字符样式。这使我的写作变得更加容易，因为我不必暂停写作，这样我就可以高亮显示一些文本并选择一种新的风格。相反，我可以使用新的 `Ctrl + I` 键盘快捷键来设置字符样式，它本质上是斜体文本。之后我输入的任何内容都使用强调样式，直到我按 `Ctrl + 空格` 将字符样式重置为默认的无字符样式。

如果你想自己设置的，请使用“<ruby> 工具 <rt>  Tools </rt></ruby> -> <ruby> 自定义 <rt>  Customize </rt></ruby>”， 然后单击“<ruby> 键盘 <rt>  Keyboard </rt></ruby>”选项卡以修改键盘快捷键。

LibreOffice 通过样式使技术写作变得更加容易。通过利用键盘快捷键，我简化了我的写作方式，让我专注于我要交付的内容，而不是它的外观。稍后我可能会更改格式，但样式保持不变。

*图片来源：（Jim Hall，CC BY-SA 40）*

---

via: <https://opensource.com/article/22/6/libreoffice-keyboard-shortcuts>

作者：[Jim Hall](https://opensource.com/users/jim-hall) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #680 互联网之父想要去中心化的互联网，但不要区块链

Summary: • 互联网之父想要去中心化的互联网，但不要区块链 • Rust 连续第七年成为开发者最喜欢的编程语言 • 一些互联网史前遗迹仍然活着

# 硬核观察 #680 互联网之父想要去中心化的互联网，但不要区块链

### 互联网之父想要去中心化的互联网，但不要区块链

被誉为互联网之父的蒂姆-伯纳斯-李，他赞同 Web3 所宣称的“将数据从大科技公司转移到用户手中”的使命，但他采取了不同的途径来实现这一目标。他的 Solid 是用标准的网络工具和开放规范建立的。私人信息存储在被称为“豆荚”的去中心化数据存储中，用户可以在任何地方托管，可以选择哪些应用程序可以访问他们的数据。但他不认同区块链，“当你试图在区块链上建立这些东西时，根本不行。”虽然，他通过将其开发的第一个互联网网站做成 NFT 赚了 540 万美元。

>
> **[消息来源：The Next Web](https://thenextweb.com/news/web-inventor-tim-berners-lee-screw-web3-my-decentralized-internet-doesnt-need-blockchain)**
>
>
>

>
> 老王点评：我认为理想化的想将数据从互联网商业巨头手中拿回来，那是不行的，即便技术上可行，经济上也不可行。我看好区块链的是地方是，它是一种新的经济分配模型，一种新的生产力关系。
>
>
>

### Rust 连续第七年成为开发者最喜欢的编程语言

Stack Overflow 发布了 2022 年的年度开发者调查报告，180 个国家的逾 7.3 万名开发者参与了调查。JavaScript 仍然是最常用的语言，其次是 HTML/CSS；Rust 连续第七年成为开发者最喜欢的编程语言；最喜欢的数据库是 PostgreSQL 和 Redis；开发者最常用的操作系统是 Windows，WSL 使用率从 2021 年的 3% 增加到了 14%；Neovim 和 VSCode 是最喜欢的 IDE；Git 是最常用的版本控制系统，占 93.87%；

>
> **[消息来源：Stack Overflow](https://survey.stackoverflow.co/2022/)**
>
>
>

>
> 老王点评：虽然年年都有很多机构在发布各种程序员调查，但是仔细看看这份调查结果，你就会发现世界上的程序员们正在学习和使用什么，这对于国内程序员们来说，应该是一个有效的指引。
>
>
>

### 一些互联网史前遗迹仍然活着

根据一份研究数据，超过 1700 万美国人经常使用 MapQuest，这是最早的数字地图网站之一，它早就被谷歌和苹果超越了。而 Ask Jeeves，一个在谷歌之前就开始运行的网络搜索引擎，仍然有粉丝和人们在谷歌搜索中输入 “Ask Jeeves a question”。以及 AOL，仍然是美国前 50 个最受欢迎的网站。

>
> **[消息来源：纽约时报](https://www.nytimes.com/2022/06/21/technology/mapquest-internet-zombies.html)**
>
>
>

>
> 老王点评：不过似乎中国的互联网遗迹们所剩不多了。有谁还记得四通利方、瀛海威？如今全不见踪影了。
>
>
>


我爱用 Qt Creator IDE 的九个原因

Summary: Qt Creator 就是丰富的 Qt 库和程序员之间的粘合剂。

比较鸡肋

Qt Creator 就是丰富的 Qt 库和程序员之间的粘合剂。

# 我爱用 Qt Creator IDE 的九个原因

>
> Qt Creator 就是丰富的 Qt 库和程序员之间的粘合剂。
>
>
>

Qt Creator 是 Qt 框架的默认集成开发环境（IDE），同时也是丰富的 Qt 库和用户之前的粘合剂。除了如智能代码补全、调试、项目管理等基础功能外，Qt Creator 还提供了很多让软件开发变得更简单的特性。

在这篇文章中，我会重点介绍一些我最喜欢的 [Qt Creator](https://www.qt.io/product/development-tools) 特性。

### 深色模式

当我使用一个新的应用时，我的第一个问题是：*它有深色模式吗？* Qt Creator 的回答是：*你更喜欢哪一种深色模式呢？*

你可以在“<ruby> 选项 <rt>  Options </rt></ruby>”菜单中激活深色模式。在顶部的菜单栏中，点击“<ruby> 工具 <rt>  Tools </rt></ruby>”，选择“<ruby> 选项 <rt>  Options </rt></ruby>”，然后转到“<ruby> 环境 <rt>  Environment </rt></ruby>”部分。下面是你能选择的常用外观：

### 定制外观

像每一个 Qt 应用一样，借助样式表，Qt Creator 的外观是高度可定制化的。下面，你可以按照我的做法给 Qt Creator一个想要的外观。

将下面这些内容写入 `mycustomstylesheet.css` 文件中：

```
QMenuBar { background-color: olive }
QMenuBar::item { background-color: olive }
QMenu { background-color : beige; color : black }
QLabel { color: green }

```

然后使用命令行开启 Qt Creator，将样式表作为参数传入：

```
qtcreator -stylesheet=mycustomstylesheet.css

```

IDE 现在看上去应该会变成这样：

在这份 [文档](https://doc.qt.io/qt-5/stylesheet-reference.html) 中可以查阅更多的样式表。

### 命令行参数

Qt Creator 可接受很多命令行选项。例如，如果想在启动时自动加载当前项目，那么你可以将它的路径传入：

```
qtcreator ~/MyProject/MyQtProject.pro

```

你甚至可以将默认应该打开的文件和行数作为参数传递。下面这个命令打开 `main.cpp` 20 行处：

```
qtcreator ~/MyProject/main.cpp:20

```

在这份 [文档](https://doc.qt.io/qtcreator/creator-cli.html) 中可以查阅更多 Qt 特有的命令行选项。

Qt Creator 和一般的 Qt 应用无二，所以，除了自己的命令行参数以外，它也接收 [QApplication](https://doc.qt.io/qt-5/qapplication.html#QApplication) 和 [QGuiApplication](https://doc.qt.io/qt-5/qguiapplication.html#supported-command-line-options) 的一般参数。

### 交叉编译

Qt Creator 允许你定义一些被称为“<ruby> 配套 <rt>  Kit </rt></ruby>”的工具链。 “配套” 定义了构建和运行应用所需要的二进制库和 SDK。

这使得你通过两次点击，就在完全不同的工具链之间切换。

在这份 [手册](https://doc.qt.io/qtcreator/creator-targets.html) 中可以查阅更多关于配套的内容。

### 分析工具

Qt Creator 集成了一些最流行的性能分析工具，例如：

* [Linux 性能分析器](https://doc.qt.io/qtcreator/creator-cpu-usage-analyzer.html)（需要特定的内核）
* [Valgrind](https://doc.qt.io/qtcreator/creator-valgrind-overview.html) 内存分析器
* [Clang-Tidy 和 Clazy](https://doc.qt.io/qtcreator/creator-clang-tools.html)，一种检查 C/C++ 的 <ruby> 静态分析器 <rt>  Linter </rt></ruby>

### 调试器

在调试方面，Qt Creator 为 GNU Debugger（GDB）配备了一个很好的界面。我喜欢它检查容器类型和创建条件断点的方式，很简单。

### FakeVim

如果你喜欢 Vim，你可以在设置中开启 FakeVim，来像 Vim 一样控制 Qt Creator。点击“<ruby> 工具 <rt>  Tools </rt></ruby>”，选择“<ruby> 选项 <rt>  Options </rt></ruby>”。在 “FakeVim” 选项中，你可以找到许多开关来定制 FakeVim。除了编辑器的功能外，你可以将自己设置的功能和命令关联起来，定制 Vim 命令。

举个例子，你可以将“<ruby> 构建项目 <rt>  Build Project </rt></ruby>”的功能和 `build` 命令关联到一起：

回到编辑器中，当你按下冒号（`:`）并输入 `build`，Qt Creator 利用配置的工具链，开始进行构建：

你可以在这份 [文档](https://doc.qt.io/qtcreator/creator-editor-fakevim.html) 中找到 FakeVim 的更多信息。

### 类检测器

当使用 C++ 开发时，点击 Qt Creator 右下角的按钮可打开右边的窗口。然后在窗口顶部拉下的菜单中选择“<ruby> 大纲 <rt>  Outline </rt></ruby>”。如果你在左侧窗体中有头文件打开，你可以很好地纵览定义的类和类型。如果你切换到源文件中（`*.cpp`），右侧窗体会列出所有定义的方法，双击其中一个，你可以跳转到这个方法：

### 项目配置

Qt Creator 的项目建立在项目目录里的 `*.pro-file` 之上。你可以为你的项目在 `*.pro-file` 中添加定制的配置。我向 `*.pro-file` 中添加了 `my_special_config`，它向编译器的定义添加 `MY_SPECIAL_CONFIG`。

```
QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

CONFIG += my_special_config

my_special_config {
DEFINES += MY_SPECIAL_CONFIG
}

```

Qt Creator 自动根据当前配置设置代码高亮：

`*.pro-file` 使用 [qmake 语言](https://doc.qt.io/qt-5/qmake-language.html) 进行编写。

### 总结

这些特性仅仅是 Qt Creators 所提供的特性的冰山一角。初学者们应该不会感到被其众多的功能所淹没，Qt Creator 是一款对初学者很友好的 IDE。它甚至可能是入门 C++ 开发最简单的方式。如果要获得 QT Creator 特性的全面概述，请参考它的 [官方文档](https://doc.qt.io/qtcreator/)。

*（插图来自 Stephan Avenwedde， [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

---

via: <https://opensource.com/article/21/6/qtcreator>

作者：[Stephan Avenwedde](https://opensource.com/users/hansic99) 选题：[lujun9972](https://github.com/lujun9972) 译者：[hadisi1993](https://github.com/hadisi1993) 校对：[wxy](https://github.com/wxy)

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


你安装的 Chrome 扩展的组合可以跟踪你

# 你安装的 Chrome 扩展的组合可以跟踪你

>
> 这会成为放弃基于 Chromium 的浏览器并开始使用 Firefox 的一个理由吗？也许吧，决定权在你。
>
>
>

即使你有了所有的隐私扩展和各种保护功能，别人仍然有方法可以识别你或跟踪你。

请注意，并非所有浏览器都是如此，本文中，我们主要关注基于 Chromium 的浏览器，并将谷歌 Chrome 作为“主要嫌疑人”。

以前，在 Chromium 浏览器上，尽管别人已经能够检测到你已安装的扩展程序，但许多扩展程序都实施了某些保护措施来防止这种检测。

然而，一位名为 “**z0ccc**” 的安全研究人员发现了一种检测已安装 Chrome 浏览器扩展程序的新方法，该方法可进一步用于**通过“浏览器指纹识别”来跟踪你**。

如果你还不知道的话：<ruby> 浏览器指纹识别 <rt>  Browser Fingerprinting </rt></ruby>是指收集有关你的设备/浏览器的各种信息，以创建唯一的指纹 ID（哈希），从而在互联网上识别你的一种跟踪方法。“各种信息”包括：浏览器名称、版本、操作系统、已安装的扩展程序、屏幕分辨率和类似的技术数据。

这听起来像是一种无害的数据收集技术，但可以使用这种跟踪方法在线跟踪你。

### 检测谷歌 Chrome 扩展

研究人员发布了一个开源项目 “**Extension Fingerprints**”，你可以使用它来测试你安装的 Chrome 扩展是否能被检测到。

新技术涉及一种“时间差”方法，该工具比较了扩展程序获取资源的时间。与浏览器上未安装的其他扩展相比，受保护的扩展需要更多时间来获取资源。因此，这有助于从 1000 多个扩展列表中识别出一些扩展。

关键是：即使有了各种新的进步和技术来防止跟踪，Chrome 网上应用店的扩展也可以被检测到。

并且，在检测到已安装的扩展程序后，别人可以就使用浏览器指纹识别，对你进行在线跟踪。

令人惊讶的是，即使你安装有 uBlocker、AdBlocker、或 Privacy Badger（一些流行的以隐私为重点的扩展程序）之类的扩展程序，使用了这种方法，它们也都可以被检测到。

你可以在它的 [GitHub 页面](https://github.com/z0ccc/extension-fingerprints) 上查看所有技术细节。如果你想自己测试它，请前往它的 [扩展指纹识别网站](https://z0ccc.github.io/extension-fingerprints/) 自行检查。

### 拯救 Firefox？

嗯，似乎是的，毕竟我出于各种原因，[不断回到 Firefox](https://news.itsfoss.com/why-mozilla-firefox/)。

这个新发现的（跟踪）方法应该适用于所有基于 Chromium 的浏览器。我在 Brave 和谷歌 Chrome 上都测试了这个方法。研究人员还提到，该工具不能在使用微软应用商店中的扩展的微软 Edge 上工作。但是，相同的跟踪方法仍然有效。

正如研究人员指出，Mozilla Firefox 可以避免这种情况，因为每个浏览器实例的扩展 ID 都是唯一的。

---

via: <https://news.itsfoss.com/chrome-extension-tracking/>

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

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


Summary: 学习这个 Python 教程，轻松提取网页的有关信息。

学习这个 Python 教程，轻松提取网页的有关信息。

# 使用 Python 的 requests 和 Beautiful Soup 来分析网页

<img src="content_image/album_202206_28_132859owwf9az49k2oje2o.jpg" alt="" title="">

>
> 学习这个 Python 教程，轻松提取网页的有关信息。
>
>
>

浏览网页可能占了你一天中的大部分时间。然而，你总是需要手动浏览，这很讨厌，不是吗？你必须打开浏览器，然后访问一个网站，单击按钮，移动鼠标……相当费时费力。如果能够通过代码与互联网交互，岂不是更好吗？

在 Python 的 `requests` 模块的帮助下，你可以使用 Python 从互联网中获取数据：

```
import requests

DATA = "https://opensource.com/article/22/5/document-source-code-doxygen-linux"
PAGE = requests.get(DATA)

print(PAGE.text)

```

在以上代码示例中，你首先导入了 `requests` 模块。接着，你创建了两个变量：其中一个叫做 `DATA`，它用来保存你要下载的 URL。在之后的代码中，你将能够在每次运行应用程序时提供不同的 URL。不过，就目前而言，最简单的方法是“硬编码”一个测试 URL，以达到演示目的。

另一个变量是 `PAGE`。代码读取了存储在 `DATA` 中的 URL，然后把它作为参数传入 `requests.get` 函数，最后用变量 `PAGE` 来接收函数的返回值。`requests` 模块及其 `.get` 函数的功能是：“读取”一个互联网地址（一个 URL）、访问互联网，并下载位于该地址的任何内容。

当然，其中涉及到很多步骤。幸运的是，你不必自己弄清楚，这也正是 Python 模块存在的原因。最后，你告诉 Python 打印 `requests.get` 存储在 `PAGE` 变量的 `.text` 字段中的所有内容。

### Beautiful Soup

如果你运行上面的示例代码，你会得到示例 URL 的所有内容，并且，它们会不加选择地输出到你的终端里。这是因为在代码中，你对 `requests` 收集到的数据所做的唯一事情，就是打印它。然而，解析文本才是更加有趣的。

Python 可以通过其最基本的功能来“读取”文本，但解析文本允许你搜索模式、特定单词、HTML 标签等。你可以自己解析 `requests` 返回的文本，不过，使用专门的模块会容易得多。针对 HTML 和 XML 文本，我们有 [Beautiful Soup](https://beautiful-soup-4.readthedocs.io/en/latest/) 库。

下面这段代码完成了同样的事情，只不过，它使用了 Beautiful Soup 来解析下载的文本。因为 Beautiful Soup 可以识别 HTML 元素，所以你可以使用它的一些内置功能，让输出对人眼更友好。

例如，在程序的末尾，你可以使用 Beautiful Soup 的 `.prettify` 函数来处理文本（使其更美观），而不是直接打印原始文本：

```
from bs4 import BeautifulSoup
import requests

PAGE = requests.get("https://opensource.com/article/22/5/document-source-code-doxygen-linux")
SOUP = BeautifulSoup(PAGE.text, 'html.parser')

# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    # do a thing here
    print(SOUP.prettify())

```

通过以上代码，我们确保了每个打开的 HTML 标签都输出在单独的一行，并带有适当的缩进，以帮助说明标签的继承关系。实际上，Beautiful Soup 能够通过更多方式来理解 HTML 标签，而不仅仅是将它打印出来。

你可以选择打印某个特定标签，而不是打印整个页面。例如，尝试将打印的选择器从 `print(SOUP.prettify())` 更改为：

```
print(SOUP.p)

```

这只会打印一个 `<p>` 标签。具体来说，它只打印遇到的第一个 `<p>` 标签。要打印所有的 `<p>` 标签，你需要使用一个循环。

### 循环

使用 Beautiful Soup 的 `find_all` 函数，你可以创建一个 `for` 循环，从而遍历 `SOUP` 变量中包含的整个网页。除了 `<p>` 标签之外，你可能也会对其他标签感兴趣，因此最好将其构建为自定义函数，由 Python 中的 `def` 关键字（意思是 <ruby> “定义” <rt>  define </rt></ruby>）指定。

```
def loopit():
    for TAG in SOUP.find_all('p'):
        print(TAG)

```

你可以随意更改临时变量 `TAG` 的名字，例如 `ITEM` 或 `i` 或任何你喜欢的。每次循环运行时，`TAG` 中都会包含 `find_all` 函数的搜索结果。在此代码中，它搜索的是 `<p>` 标签。

函数不会自动执行，除非你显式地调用它。你可以在代码的末尾调用这个函数：

```
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    # do a thing here
    loopit()

```

运行代码以查看所有的 `<p>` 标签和它们的内容。

### 只获取内容

你可以通过指定只需要 “<ruby> 字符串 <rt>  string </rt></ruby>”（它是 “<ruby> 单词 <rt>  words </rt></ruby>” 的编程术语）来排除打印标签。

```
def loopit():
    for TAG in SOUP.find_all('p'):
        print(TAG.string)

```

当然，一旦你有了网页的文本，你就可以用标准的 Python 字符串库进一步解析它。例如，你可以使用 `len` 和 `split` 函数获得单词个数：

```
def loopit():
    for TAG in SOUP.find_all('p'):
        if TAG.string is not None:
            print(len(TAG.string.split()))

```

这将打印每个段落元素中的字符串个数，省略那些没有任何字符串的段落。要获得字符串总数，你需要用到变量和一些基本数学知识：

```
def loopit():
    NUM = 0
    for TAG in SOUP.find_all('p'):
        if TAG.string is not None:
            NUM = NUM + len(TAG.string.split())
    print("Grand total is ", NUM)

```

### Python 作业

你可以使用 Beautiful Soup 和 Python 提取更多信息。以下是有关如何改进你的应用程序的一些想法：

* [接受输入](https://opensource.com/article/17/3/python-tricks-artists-interactivity-Python-scripts)，这样你就可以在启动应用程序时，指定要下载和分析的 URL。
* 统计页面上图片（`<img>` 标签）的数量。
* 统计另一个标签中的图片（`<img>` 标签）的数量（例如，仅出现在 `<main>` div 中的图片，或仅出现在 `</p>` 标签之后的图片）。

---

via: <https://opensource.com/article/22/6/analyze-web-pages-python-requests-beautiful-soup>

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

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


将 Zeek 与 ELK 栈集成

# 将 Zeek 与 ELK 栈集成

>
> Zeek 是一个开源的网络安全监控工具。本文讨论了如何将 Zeek 与 ELK 集成。
>
>
>

在本杂志 2022 年 3 月版发表的题为“用 Zeek 轻松实现网络安全监控”的文章中，我们研究了 Zeek 的功能，并学习了如何开始使用它。现在我们将把我们的学习经验再进一步，看看如何将其与 ELK（即 Elasticsearch、Kibana、Beats 和 Logstash）整合。

为此，我们将使用一个叫做 Filebeat 的工具，它可以监控、收集并转发日志到 Elasticsearch。我们将把 Filebeat 和 Zeek 配置在一起，这样后者收集的数据将被转发并集中到我们的 Kibana 仪表盘上。

### 安装 Filebeat

让我们首先将 Filebeat 与 Zeek 安装在一起。使用 `apt` 来安装 Filebeat，使用以下命令：

```
sudo apt install filebeat

```

接下来，我们需要配置 `.yml` 文件，它位于 `/etc/filebeat/` 文件夹中：

```
sudo nano /etc/filebeat/filebeat.yml

```

我们只需要在这里配置两件事。在 Filebeat 输入部分，将类型改为 `log`，并取消对 `enabled:false` 的注释，将其改为 `true`。我们还需要指定存储日志的路径，也就是说，我们需要指定 `/opt/zeek/logs/current/*.log`。

完成这些后，设置的第一部分应该类似于图 1 所示的内容。

第二件要修改的事情是在输出下的 Elasticsearch 输出部分，取消对 `output.elasticsearch` 和 `hosts` 的注释。确保主机的 URL 和端口号与你安装 ELK 时配置的相似。我们把它保持为 `localhost`，端口号为 `9200`。

在同一部分中，取消底部的用户名和密码的注释，输入安装后配置 ELK 时生成的 Elasticsearch 用户的用户名和密码。完成这些后，参考图 2，检查设置。

现在我们已经完成了安装和配置，我们需要配置 Zeek，使其以 JSON 格式存储日志。为此，确保你的 Zeek 实例已经停止。如果没有，执行下面的命令来停止它：

```
cd /opt/zeek/bin
./zeekctl stop

```

现在我们需要在 `local.zeek` 中添加一小行，它存在于 `opt/zeek/share/zeek/site/` 目录中。

以 root 身份打开该文件，添加以下行：

```
@load policy/tuning/json-logs.zeek

```

参考图 3，确保设置正确。

由于我们改变了 Zeek 的一些配置，我们需要重新部署它，这可以通过执行以下命令来完成：

```
cd /opt/zeek/bin
./zeekctl deploy

```

现在我们需要在 Filebeat 中启用 Zeek 模块，以便它转发 Zeek 的日志。执行下面的命令：

```
sudo filebeat modules enable zeek

```

我们几乎要好了。在最后一步，配置 `zeek.yml` 文件要记录什么类型的数据。这可以通过修改 `/etc/filebeat/modules.d/zeek.yml` 文件完成。

在这个 .yml 文件中，我们必须提到这些指定的日志存放在哪个目录下。我们知道，这些日志存储在当前文件夹中，其中有几个文件，如 `dns.log`、`conn.log`、`dhcp.log` 等等。我们需要在每个部分提到每个路径。如果而且只有在你不需要该文件/程序的日志时，你可以通过把启用值改为 `false` 来舍弃不需要的文件。

例如，对于 `dns`，确保启用值为 `true`，并且路径被配置：

```
var.paths: [ “/opt/zeek/logs/current/dns.log”, “/opt/zeek/logs/*.dns.json” ]

```

对其余的文件重复这样做。我们对一些我们需要的文件做了这个处理。我们添加了所有主要需要的文件。你也可以这样做。请参考图 4。

现在是启动 Filebeat 的时候了。执行以下命令：

```
sudo filebeat setup
sudo service filebeat start

```

现在一切都完成了，让我们移动到 Kibana 仪表板，检查我们是否通过 Filebeat 接收到来自 Zeek 的数据。

进入仪表板。你可以看到它所捕获的数据的清晰统计分析（图 5 和图 6）。

现在让我们进入发现选项卡，通过使用查询进行过滤来检查结果：

```
event.module: "zeek"

```

这个查询将过滤它在一定时间内收到的所有数据，只向我们显示名为 Zeek 的模块的数据（图 7）。

### 鸣谢

*作者感谢 VIT-AP 计算机科学与工程学院的 Sibi Chakkaravarthy Sethuraman、Sudhakar Ilango、Nandha Kumar R.和Anupama Namburu 的不断指导和支持。特别感谢人工智能和机器人技术卓越中心（AIR）。*

---

via: <https://www.opensourceforu.com/2022/06/integrating-zeek-with-elk-stack/>

作者：[Tridev Reddy](https://www.opensourceforu.com/author/tridev-reddy/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #681 首颗树莓派卫星完成了创纪录的飞行

Summary: • 首颗树莓派卫星完成了创纪录的飞行 • 微软的内部 Linux 发行版支持内核实时补丁 • 刚刚发布的 OpenSSL 3.0.4 可能存在一个比心脏流血更严重的漏洞

# 硬核观察 #681 首颗树莓派卫星完成了创纪录的飞行

### 首颗树莓派卫星完成了创纪录的飞行

第一颗使用树莓派 Zero W 作为飞行计算机的迷你卫星于 5 月重新进入地球大气层，在太空中完成了创纪录的 117 天。这颗卫星于 2022 年 1 月从国际空间站部署，是由美国犹他州立大学的大学生们开发的。它是一个立方体模块，尺寸只有 10 厘米见方，使用现成的组件建造。这颗卫星 80% 以上的软件是用 Python 编写的，并且有个装置检查其“心跳”，如果出现问题就重启解决，事实证明“重启试试”在太空同样有效。其主要目的是测试一个实验性的充气稳定系统，成功地证明了小型航天器可以在轨道上自我稳定。

>
> **[消息来源：ZDNet](https://www.zdnet.com/home-and-office/networking/the-company-thats-covering-for-at-ts-failures-verizons-and-t-mobiles-too/)**
>
>
>

>
> 老王点评：看来放个卫星也没什么难的，希望以后我们自己的空间站上也可以让同学们制造卫星放出去。
>
>
>

### 微软的内部 Linux 发行版支持内核实时补丁

上个月，微软发布了 CBL-Mariner 2.0 的第一个生产版本，这个微软内部的 Linux 发行版，用于支持从微软 Azure 到 WSL 用例等服务。CBL-Mariner 2.0 上周末进行了一次相当大的月度更新，增加了 Kpatch 以支持内核补丁，以及为内核启用实时补丁。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=CBL-Mariner-2.0-June-2022)**
>
>
>

>
> 老王点评：我感觉微软的这个内部发行版不声不响的也发展的挺快，真有一天抢了后 CentOS 市场，我觉得也不会太吃惊。
>
>
>

### 刚刚发布的 OpenSSL 3.0.4 可能存在一个比心脏流血更严重的漏洞

6 月 21 日发布的 OpenSSL 3.0.4 是为了解决一个命令注入漏洞，该漏洞在之前的补丁中没有完全解决。但这个版本本身需要进一步修复，安全研究人员称，它“容易受到远程内存损坏的影响，攻击者可以轻而易举地触发它”，可以被利用来在其中一台设备上运行任意的恶意代码。如果这个缺陷可以被远程利用（现在还不确定），它可能比心脏流血漏洞更严重。好消息是这个漏洞只影响英特尔 2016 年至 2022 年初发布的带有 AVX512 的某些 x64 芯片。

>
> **[消息来源：The Register](https://www.theregister.com/2022/06/27/openssl_304_memory_corruption_bug/)**
>
>
>

>
> 老王点评：虽然可能影响面有限，但是一旦发布新的版本就赶快升级吧。
>
>
>


Apache Kafka：为“无缝系统”提供异步消息支持

# Apache Kafka：为“无缝系统”提供异步消息支持

>
> Apache Kafka 是最流行的开源消息代理之一。它已经成为了大数据操作的重要组成部分，你能够在几乎所有的微服务环境中找到它。本文对 Apache Kafka 进行了简要介绍，并提供了一个案例来展示它的使用方式。
>
>
>

你有没有想过，电子商务平台是如何在处理巨大的流量时，做到不会卡顿的呢？有没有想过，OTT 平台是如何在同时向数百万用户交付内容时，做到平稳运行的呢？其实，关键就在于它们的分布式架构。

采用分布式架构设计的系统由多个功能组件组成。这些功能组件通常分布在多个机器上，它们通过网络，异步地交换消息，从而实现相互协作。正是由于异步消息的存在，组件之间才能实现可伸缩、无阻塞的通信，整个系统才能够平稳运行。

### 异步消息

异步消息的常见特性有：

* 消息的<ruby> 生产者 <rt>  producer </rt></ruby>和<ruby> 消费者 <rt>  consumer </rt></ruby>都不知道彼此的存在。它们在不知道对方的情况下，加入和离开系统。
* 消息<ruby> 代理 <rt>  broker </rt></ruby>充当了生产者和消费者之间的中介。
* 生产者把每条消息，都与一个“<ruby> 主题 <rt>  topic </rt></ruby>”相关联。主题是一个简单的字符串。
* 生产者可以在多个主题上发送消息，不同的生产者也可以在同一主题上发送消息。
* 消费者向代理订阅一个或多个主题的消息。
* 生产者只将消息发送给代理，而不发送给消费者。
* 代理会把消息发送给订阅该主题的所有消费者。
* 代理将消息传递给针对该主题注册的所有消费者。
* 生产者并不期望得到消费者的任何回应。换句话说，生产者和消费者不会相互阻塞。

市场上的消息代理有很多，而 Apache Kafka 是其中最受欢迎的之一。

### Apache Kafka

Apache Kafka 是一个支持流式处理的、开源的分布式消息系统，它由 Apache 软件基金会开发。在架构上，它是多个代理组成的集群，这些代理间通过 Apache ZooKeeper 服务来协调。在接收、持久化和发送消息时，这些代理分担集群上的负载。

#### 分区

Kafka 将消息写入称为“<ruby> 分区 <rt>  partition </rt></ruby>”的桶中。一个特定分区只保存一个主题上的消息。例如，Kafka 会把 `heartbeats` 主题上的消息写入名为 `heartbeats-0` 的分区（假设它是个单分区主题），这个过程和生产者无关。

不过，为了利用 Kafka 集群所提供的并行处理能力，管理员通常会为指定主题创建多个分区。举个例子，假设管理员为 `heartbeats` 主题创建了三个分区，Kafka 会将它们分别命名为 `heartbeats-0`、`heartbeats-1` 和 `heartbeats-2`。Kafka 会以某种方式，把消息分配到这三个分区中，并使它们均匀分布。

还有另一种可能的情况，生产者将每条消息与一个<ruby> 消息键 <rt>  key </rt></ruby>相关联。例如，同样都是在 `heartbeats` 主题上发送消息，有个组件使用 `C1` 作为消息键，另一个则使用 `C2`。在这种情况下，Kafka 会确保，在一个主题中，带有相同消息键的消息，总是会被写入到同一个分区。不过，在一个分区中，消息的消息键却不一定相同。下面的图 2 显示了消息在不同分区中的一种可能分布。

#### 领导者和同步副本

Kafka 在（由多个代理组成的）集群中维护了多个分区。其中，负责维护分区的那个代理被称为“<ruby> 领导者 <rt>  leader </rt></ruby>”。只有领导者能够在它的分区上接收和发送消息。

可是，万一分区的领导者发生故障了，又该怎么办呢？为了确保业务连续性，每个领导者（代理）都会把它的分区复制到其他代理上。此时，这些其他代理就称为该分区的<ruby> 同步副本 <rt>  in-sync-replicas </rt></ruby>（ISR）。一旦分区的领导者发生故障，ZooKeeper 就会发起一次选举，把选中的那个同步副本任命为新的领导者。此后，这个新的领导者将承担该分区的消息接受和发送任务。管理员可以指定分区需要维护的同步副本的大小。

#### 消息持久化

代理会将每个分区都映射到一个指定的磁盘文件，从而实现持久化。默认情况下，消息会在磁盘上保留一个星期。当消息写入分区后，它们的内容和顺序就不能更改了。管理员可以配置一些策略，如消息的保留时长、压缩算法等。

#### 消费消息

与大多数其他消息系统不同，Kafka 不会主动将消息发送给消费者。相反，消费者应该监听主题，并主动读取消息。一个消费者可以从某个主题的多个分区中读取消息。多个消费者也可以读取来自同一个分区的消息。Kafka 保证了同一条消息不会被同一个消费者重复读取。

Kafka 中的每个消费者都有一个组 ID。那些组 ID 相同的消费者们共同组成了一个消费者组。通常，为了从 N 个主题分区读取消息，管理员会创建一个包含 N 个消费者的消费者组。这样一来，组内的每个消费者都可以从它的指定分区中读取消息。如果组内的消费者比可用分区还要多，那么多出来的消费者就会处于闲置状态。

在任何情况下，Kafka 都保证：不管组内有多少个消费者，同一条消息只会被该消费者组读取一次。这个架构提供了一致性、高性能、高可扩展性、准实时交付和消息持久性，以及零消息丢失。

### 安装、运行 Kafka

尽管在理论上，Kafka 集群可以由任意数量的代理组成，但在生产环境中，大多数集群通常由三个或五个代理组成。

在这里，我们将搭建一个单代理集群，对于生产环境来说，它已经够用了。

在浏览器中访问 <https://kafka.apache.org/downloads>，下载 Kafka 的最新版本。在 Linux 终端中，我们也可以使用下面的命令来下载它：

```
wget https://www.apache.org/dyn/closer.cgi?path=/kafka/2.8.0/kafka_2.12-2.8.0.tgz

```

如果需要的话，我们也可以把下载来的档案文件 `kafka_2.12-2.8.0.tgz` 移动到另一个目录下。解压这个档案，你会得到一个名为 `kafka_2.12-2.8.0` 的目录，它就是之后我们要设置的 `KAFKA_HOME`。

打开 `KAFKA_HOME/config` 目录下的 `server.properties` 文件，取消注释下面这一行配置：

```
listeners=PLAINTEXT://:9092

```

这行配置的作用是让 Kafka 在本机的 `9092` 端口接收普通文本消息。我们也可以配置 Kafka 通过<ruby> 安全通道 <rt>  secure channel </rt></ruby>接收消息，在生产环境中，我们也推荐这么做。

无论集群中有多少个代理，Kafka 都需要 ZooKeeper 来管理和协调它们。即使是单代理集群，也是如此。Kafka 在安装时，会附带安装 ZooKeeper，因此，我们可以在 `KAFKA_HOME` 目录下，在命令行中使用下面的命令来启动它：

```
./bin/zookeeper-server-start.sh ./config/zookeeper.properties

```

当 ZooKeeper 运行起来后，我们就可以在另一个终端中启动 Kafka 了，命令如下：

```
./bin/kafka-server-start.sh ./config/server.properties

```

到这里，一个单代理的 Kafka 集群就运行起来了。

### 验证 Kafka

让我们在 `topic-1` 主题上尝试下发送和接收消息吧！我们可以使用下面的命令，在创建主题时为它指定分区的个数：

```
./bin/kafka-topics.sh --create --topic topic-1 --zookeeper localhost:2181 --partitions 3 --replication-factor 1

```

上述命令还同时指定了<ruby> 复制因子 <rt>  replication factor </rt></ruby>，它的值不能大于集群中代理的数量。我们使用的是单代理集群，因此，复制因子只能设置为 1。

当主题创建完成后，生产者和消费者就可以在上面交换消息了。Kafka 的发行版内附带了生产者和消费者的命令行工具，供测试时用。

打开第三个终端，运行下面的命令，启动生产者：

```
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-1

```

上述命令显示了一个提示符，我们可以在后面输入简单文本消息。由于我们指定的命令选项，生产者会把 `topic-1` 上的消息，发送到运行在本机的 9092 端口的 Kafka 中。

打开第四个终端，运行下面的命令，启动消费者：

```
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-1 –-from-beginning

```

上述命令启动了一个消费者，并指定它连接到本机 9092 端口的 Kafka。它订阅了 `topic-1` 主题，以读取其中的消息。由于命令行的最后一个选项，这个消费者会从最开头的位置，开始读取该主题的所有消息。

我们注意到，生产者和消费者连接的是同一个代理，访问的是同一个主题，因此，消费者在收到消息后会把消息打印到终端上。

下面，让我们在实际应用场景中，尝试使用 Kafka 吧！

### 案例

假设有一家叫做 ABC 的公共汽车运输公司，它拥有一支客运车队，往返于全国不同城市之间。由于 ABC 希望实时跟踪每辆客车，以提高其运营质量，因此，它提出了一个基于 Apache Kafka 的解决方案。

首先，ABC 公司为所有公交车都配备了位置追踪设备。然后，它使用 Kafka 建立了一个操作中心，以接收来自数百辆客车的位置更新。它还开发了一个<ruby> 仪表盘 <rt>  dashboard </rt></ruby>，以显示任一时间点所有客车的当前位置。图 5 展示了上述架构：

在这种架构下，客车上的设备扮演了消息生产者的角色。它们会周期性地把当前位置发送到 Kafka 的 `abc-bus-location` 主题上。ABC 公司选择以客车的<ruby> 行程编号 <rt>  trip code </rt></ruby>作为消息键，以处理来自不同客车的消息。例如，对于从 Bengaluru 到 Hubballi 的客车，它的行程编号就会是 `BLRHL003`，那么在这段旅程中，对于所有来自该客车的消息，它们的消息键都会是 `BLRHL003`。

仪表盘应用扮演了消息消费者的角色。它在代理上注册了同一个主题 `abc-bus-location`。如此，这个主题就成为了生产者（客车）和消费者（仪表盘）之间的虚拟通道。

客车上的设备不会期待得到来自仪表盘应用的任何回复。事实上，它们相互之间都不知道对方的存在。得益于这种架构，数百辆客车和操作中心之间实现了非阻塞通信。

#### 实现

假设 ABC 公司想要创建三个分区来维护位置更新。由于我们的开发环境只有一个代理，因此复制因子应设置为 1。

相应地，以下命令创建了符合需求的主题：

```
./bin/kafka-topics.sh --create --topic abc-bus-location --zookeeper localhost:2181 --partitions 3 --replication-factor 1

```

生产者和消费者应用可以用多种语言编写，如 Java、Scala、Python 和 JavaScript 等。下面几节中的代码展示了它们在 Java 中的编写方式，好让我们有一个初步了解。

##### Java 生产者

下面的 `Fleet` 类模拟了在 ABC 公司的 6 辆客车上运行的 Kafka 生产者应用。它会把位置更新发送到指定代理的 `abc-bus-location` 主题上。请注意，简单起见，主题名称、消息键、消息内容和代理地址等，都在代码里硬编码的。

```
public class Fleet {
    public static void main(String[] args) throws Exception {
        String broker = “localhost:9092”;
        Properties props = new Properties();
        props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, broker);
        props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
            StringSerializer.class.getName());
        props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
            StringSerializer.class.getName());

        Producer<String, String> producer = new KafkaProducer<String, String>(props);
        String topic = “abc-bus-location”;
        Map<String, String> locations = new HashMap<>();
        locations.put(“BLRHBL001”, “13.071362, 77.461906”);
        locations.put(“BLRHBL002”, “14.399654, 76.045834”);
        locations.put(“BLRHBL003”, “15.183959, 75.137622”);
        locations.put(“BLRHBL004”, “13.659576, 76.944675”);
        locations.put(“BLRHBL005”, “12.981337, 77.596181”);
        locations.put(“BLRHBL006”, “13.024843, 77.546983”);

        IntStream.range(0, 10).forEach(i -> {
            for (String trip : locations.keySet()) {
                ProducerRecord<String, String> record
                    = new ProducerRecord<String, String>(
                        topic, trip, locations.get(trip));
                producer.send(record);
            }
        });
        producer.flush();
        producer.close();
    }
}

```

##### Java 消费者

下面的 `Dashboard` 类实现了一个 Kafka 消费者应用，运行在 ABC 公司的操作中心。它会监听 `abc-bus-location` 主题，并且它的消费者组 ID 是 `abc-dashboard`。当收到消息后，它会立即显示来自客车的详细位置信息。我们本该配置这些详细位置信息，但简单起见，它们也是在代码里硬编码的：

```
public static void main(String[] args) {
    String broker = “127.0.0.1:9092”;
    String groupId = “abc-dashboard”;
    Properties props = new Properties();
    props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, broker);
    props.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
        StringDeserializer.class.getName());
    props.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
        StringDeserializer.class.getName());
    props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, groupId);

    @SuppressWarnings(“resource”)
    Consumer<String, String> consumer = new KafkaConsumer<String, String>(props);
    consumer.subscribe(Arrays.asList(“abc-bus-location”));
    while (true) {
        ConsumerRecords<String, String> records
            = consumer.poll(Duration.ofMillis(1000));

        for (ConsumerRecord<String, String> record : records) {
            String topic = record.topic();
            int partition = record.partition();
            String key = record.key();
            String value = record.value();
            System.out.println(String.format(
                “Topic=%s, Partition=%d, Key=%s, Value=%s”,
                topic, partition, key, value));
        }
    }
}

```

##### 依赖

为了编译和运行这些代码，我们需要 JDK 8 及以上版本。看到下面的 `pom.xml` 文件中的 Maven 依赖了吗？它们会把所需的 Kafka 客户端库下载并添加到类路径中：

```
<dependency>
  <groupId>org.apache.kafka</groupId>
  <artifactId>kafka-clients</artifactId>
  <version>2.8.0</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.7.25</version>
</dependency>

```

#### 部署

由于 `abc-bus-location` 主题在创建时指定了 3 个分区，我们自然就会想要运行 3 个消费者，来让读取位置更新的过程更快一些。为此，我们需要同时在 3 个不同的终端中运行仪表盘。因为所有这 3 个仪表盘都注册在同一个组 ID 下，它们自然就构成了一个消费者组。Kafka 会为每个仪表盘都分配一个特定的分区（来消费）。

当所有仪表盘实例都运行起来后，在另一个终端中启动 `Fleet` 类。图 6、7、8 展示了仪表盘终端中的控制台示例输出。

仔细看看控制台消息，我们会发现第一个、第二个和第三个终端中的消费者，正在分别从 `partition-2`、`partition-1` 和 `partition-0` 中读取消息。另外，我们还能发现，消息键为 `BLRHBL002`、`BLRHBL004` 和 `BLRHBL006` 的消息写入了 `partition-2`，消息键为 `BLRHBL005` 的消息写入了 `partition-1`，剩下的消息写入了 `partition-0`。

使用 Kafka 的好处在于，只要集群设计得当，它就可以水平扩展，从而支持大量客车和数百万条消息。

### 不止是消息

根据 Kafka 官网上的数据，在《财富》100 强企业中，超过 80% 都在使用 Kafka。它部署在许多垂直行业，如金融服务、娱乐等。虽然 Kafka 起初只是一种简单的消息服务，但它已凭借行业级的流处理能力，成为了大数据生态系统的一环。对于那些喜欢托管解决方案的企业，Confluent 提供了基于云的 Kafka 服务，只需支付订阅费即可。（LCTT 译注：Confluent 是一个基于 Kafka 的商业公司，它提供的 Confluent Kafka 在 Apache Kafka 的基础上，增加了许多企业级特性，被认为是“更完整的 Kafka”。）

---

via: <https://www.opensourceforu.com/2021/11/apache-kafka-asynchronous-messaging-for-seamless-systems/>

作者：[Krishna Mohan Koyya](https://www.opensourceforu.com/author/krishna-mohan-koyya/) 选题：[lkxed](https://github.com/lkxed) 译者：[lkxed](https://github.com/lkxed) 校对：[wxy](https://github.com/wxy)

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


轻松解决你的任务清单的三个步骤

Summary: 将你的大任务分为小步骤，避免自己不堪重负。

将你的大任务分为小步骤，避免自己不堪重负。

# 轻松解决你的任务清单的三个步骤

>
> 将你的大任务分为小步骤，避免自己不堪重负。
>
>
>

本周开始，我先回顾我的日程安排，看看我需要或想要完成的事情。通常，列表上有些较大的项目。无论来自工作上的问题，还是一系列关于生产力的文章，或者改进我家的鸡舍，当作为一项工作时，这个任务真的很艰巨。很有可能我无法坐下来，在一个时间段内，甚至在一天内完成类似（请注意，只是举例）21 篇文章之类的事情。

*21 天的生产力 (Kevin Sonney, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/))*

所以当我的清单上有这样的东西时，我做的第一件事就是把它分解成更小的部分。如著名的诺贝尔文学奖得主 [William Faulkner](https://en.wikipedia.org/wiki/William_Faulkner) 说的“移山的人，从小石头开始。”（LCTT 译注：感觉与“千里之行，始于足下”是一个意思） 我们要解决大任务（山）并且需要完成各个步骤（小石头）。

我使用下面的步骤将大任务分割为小步骤：

1. 我通常很清楚完成一项任务需要做什么。如果没有，我会做一些研究来弄清楚这一点。
2. 我会顺序的写下完成的步骤。
3. 最后，我坐下来拿着我的日历和清单，开始将任务分散到几天（或几周或几个月），以了解我何时可以完成它。

现在我不仅有计划，还知道多久能完成。逐步完成，我可以看到这项大任务不仅变得更小，而且更接近完成。

军队有句古话，“遇敌无计”。 几乎可以肯定的是，有一两点（或五点）我意识到像“截屏”这样简单的事情需要扩展到更复杂的事情。事实上，在 [Easy!Appointments](https://opensource.com/article/21/1/open-source-scheduler) 的截图中，竟然是：

1. 安装和配置 Easy!Appointments
2. 安装和配置 Easy!Appointments WordPress 插件
3. 生成 API 密钥来同步日历
4. 截屏

即便如此，我也不得不将这些任务分解成更小的部分——下载软件、配置 NGINX、验证安装……你明白了吧。没关系。一个计划或一组任务不是一成不变的，可以根据需要进行更改。

*今年的计划已经完成了 2/3 ! (Kevin Sonney, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/))*

这是一项后天习得的技能，最初几次需要一些努力。学习如何将大任务分解成更小的步骤可以让您跟踪实现目标或完成大任务的进度，而不会在过程中不知所措。

---

via: <https://opensource.com/article/21/1/break-down-tasks>

作者：[Kevin Sonney](https://opensource.com/users/ksonney) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Donkey](https://github.com/Donkey-Hao) 校对：[wxy](https://github.com/wxy)

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


Minetest：一个开源的 Minecraft 替代品

# Minetest：一个开源的 Minecraft 替代品

早在 2009 年，Minecraft 就来到了这个世界。从那时起，它已经成为一种文化现象。在这段时间里，一些开发者发布了具有类似想法和机制的开源游戏。今天，我们将看看其中最大的一个：Minetest。

### 什么是 Minetest？

[Minetest](https://www.minetest.net/)，简单地说，是一个基于<ruby> 体素 <rt>  voxel </rt></ruby>的沙盒游戏，与 Minecraft 非常相似。与 Minecraft 不同的是，Minetest 是用 C++ 编写的，并被设计成可以在大多数系统上原生运行。它也有一个非常大的地图区域。地图大小为 “62,000 × 62,000 × 62,000 块”，“你可以向下开采 31,000 块，或向上建造 31,000 块”。

有趣的是，Minetest 最初是以专有许可证发布的，但后来被重新授权为 GPL。此后，它又被重新授权为 LGPL。

Minetest 有几种模式。你可以建造并发挥创意，或者你可以尝试在各种元素中生存。你并不局限于这些模式。Minetest 有大量的 [额外内容](https://content.minetest.net/)，包括 <ruby> 模组 <rt>  mod </rt></ruby>、纹理包和在 Minetest 中建立的游戏。这主要是通过 Minetest 的 [模组 API](https://dev.minetest.net/Modding_Intro) 和 Lua 完成的。

对于那些玩过 Minecraft 的人来说，你会发现 Minetest 中的体验非常相似。你可以挖掘资源，建造结构，并结合材料来制作工具。我在 Minetest 中没有注意到的一件事是怪物。我认为 Minetest 中没有任何生物，但话说回来，我只在创意模式中玩过。我还没有玩过生存模式。

Minetest 也被用于 [教育](https://www.minetest.net/education/)。例如，瑞士 CERN 的人用 Minetest 创造了一个游戏，以 [展示互联网是如何工作的](https://forum.minetest.net/viewtopic.php?t=22871) 以及它是如何被创造出来的。Minetest 还被用于 [教授](https://en.wikipedia.org/wiki/Minetest#Usage_in_education) 编程、地球科学以及微积分和三角学。

### 如何安装 Minetest?

Minetest 几乎在每个系统上都可以使用。下面是一个命令列表，你可以用它来在一些最流行的 Linux 发行版中安装 Minetest。

#### Ubuntu 或者 Debian

如果你有一个基于 Ubuntu 或 Debian 的发行版，只要在终端输入这个命令：

```
sudo apt install mintest

```

#### Arch 或者 Manjaro

对于基于 Arch 的系统（如 Manjaro），使用：

```
sudo pacman -S minetest

```

#### Fedora

你可以从 Fedora 服务器中输入以下命令安装 Mintest：

```
sudo dnf install mintest

```

#### openSUSE

openSUSE 用户可以用这个命令安装 Minetest：

```
sudo zypper in mintest

```

#### FreeBSD

FreeBSD 用户很幸运。他们可以用这个命令安装 Mintest：

```
pkg install minetest minetest_game

```

#### Snap

要安装 Minetest 的 Snap 包，请在终端输入以下命令：

```
sudo snap install minetest

```

#### Flathub

要安装，请输入：

```
flatpak install flathub net.minetest.Minetest

```

你可以在 [这里](https://www.minetest.net/downloads/) 下载 Windows 的可移植执行文件。你也可以在 Android 上安装 Minetest，可以通过 [Google Play](https://play.google.com/store/apps/details?id=net.minetest.minetest&utm_source=website&pcampaignid=MKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1) 或 [下载 APK](https://github.com/minetest/minetest/releases/download/5.5.0/app-armeabi-v7a-release.apk)。

### 总结

我已经在 Minetest 中花了几个小时在我的本地系统上进行构建和探索。它非常有趣。我还没来得及尝试任何额外的内容，因为我对我玩过的相对较少的游戏部分非常满意。我遇到的唯一麻烦是，由于某种原因，它在 Fedora 上运行缓慢。我可能存在一些配置上的错误。

如果你曾经认为 Minecraft 看起来很有趣，但不想花钱，那就去看看 Minetest。你会很高兴你这么做。

如果你玩过 Minetest，在评论中告诉我们你的体验如何。

---

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

作者：[John Paul](https://itsfoss.com/author/john/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #682 Vim 9.0 发布，带来了百倍速度新脚本语言

Summary: • Vim 9.0 发布，带来了百倍速度新脚本语言 • 有人正在使用深度伪造来申请远程工作 • Asahi Linux 开始着手为 M2 带来 Linux 支持

# 硬核观察 #682 Vim 9.0 发布，带来了百倍速度新脚本语言

### Vim 9.0 发布，带来了百倍速度新脚本语言

Vim 迎来了两年来的首个重大更新，在这个版本中除了若干变化外，还带来了一个新的脚本语言 Vim9 脚本。Vim9 脚本的目标是极大地提升性能，可带来一到两个数量级（10~100 倍）的执行速度提升；其次是避免 Vim 特有的结构，使之更接近于常用的编程语言，如 JavaScript、TypeScript 和 Java 等。不过，虽然 Vim9 和 Vim 之前支持的脚本语言存在一些不兼容，但旧的脚本仍然可以继续工作，不会像 Python 2 那样。

>
> **[消息来源：Vim](https://www.vim.org/vim90.php)**
>
>
>

>
> 老王点评：虽然是非常古老甚至古怪的编辑器，但是可喜的是 Vim 依然与时俱进，甚至还可能发展出一门通用的脚本语言来！
>
>
>

### 有人正在使用深度伪造来申请远程工作

美国联邦调查局表示已收到多起投诉，称有人利用窃取的信息和深度伪造的视频和语音来申请远程技术工作。这些视频、图像或录音被篡改成看起来和听起来像别人的，这些伪造者还使用偷来的他人身份信息来申请 IT、编程、数据库和软件公司的工作。不过，一些比较业余的深度伪造技术没有能及时跟上伪造者的咳嗽和打喷嚏，因而出现了一些穿帮镜头。目前还不清楚在这些虚假的工作尝试中，有多少是成功的，有多少是被发现并被举报的。

>
> **[消息来源：gizmodo](https://gizmodo.com/deepfakes-remote-work-job-applications-fbi-1849118604)**
>
>
>

>
> 老王点评：这真是新技术的“新用途”，这些远程工作者盯上的不只是公司的薪水，可能还有公司的机密信息。
>
>
>

### Asahi Linux 开始着手为 M2 带来 Linux 支持

Asahi Linux 一直在努力将“苹果硅”芯片支持拉入 Linux 生态。最近他们收到了一台 13 英寸的 2022 款 MacBook Pro，开始着手为 M2 带来 Linux 支持。幸运的是，为 M1 编写的大部分 Linux 代码，都可在 M2 上无缝运行。当然，要让 M2 Mac 完美运行 Linux，还得再编写一些新的驱动程序。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Apple-M2-Linux-Starts)**
>
>
>

>
> 老王点评：光靠着开源社区反向工程做到这个程度已属难得，而这个过程中，苹果公司就静静的看着。
>
>
>


从命令行远程配置 Xfce4 工作区

# 从命令行远程配置 Xfce4 工作区

>
> 几乎所有的事情都可以从 Linux 命令行完成，包括对 Xfce4 进行远程配置。
>
>
>

<img src="content_image/album_202206_30_114747lfub5hh0b5nyquf3.jpg" alt="" title="Coding on a computer">

与专有操作系统相比，我很欣赏 Linux 的一个特点是，几乎所有的东西都可以从命令行中进行管理和配置。意味着几乎所有的事情都可以在本地或者通过 SSH 远程登录进行管理。虽然有时候需要花费一点时间在互联网上搜索，但是你能想到的任务，是有可能从命令行完成的。

### 问题

有时候需要使用命令行对桌面进行远程配置。在这种特殊情况下，我需要响应远程用户的请求将在 [Xfce](https://www.xfce.org/) 控制板上的工作区从四个减少到三个。这种配置只需要在互联网上搜索约 20 分钟就找到了。

xfwm4 的默认工作区数量和许多其他设置可以在 `/usr/share/xfwm4/defaults` 这个文件中找到和修改。因此将 `workspace_count=2` 设置为 `workspace_count=4` 就改变了主机上所有用户的默认值。同时，非 root 用户可以执行 `xfconf-query` 命令来查询和设置 xfwm4 窗口管理器的各种属性。它应该由需要改变设置的用户使用，而不是由 root 使用。

在下面的例子中，首先我验证了当前工作区数量为 `4` ，然后将数量改为 `2`，最后确认了新设置。

```
[user@test1 ~]# xfconf-query -c xfwm4 -p /general/workspace_count
4
[user@test1 ~]# xfconf-query -c xfwm4 -p /general/workspace_count -s 2
[user@test1 ~]# xfconf-query -c xfwm4 -p /general/workspace_count
2
[user@test1 ~]#

```

此更改会立即生效，用户可以马上看到，无需重新启动，甚至无需注销并重新登录。我曾在我的工作站上玩过这个游戏，当我输入设置不同数量的工作空间的命令时，可以观察到工作空间切换器的变化。我在哪儿都能找到乐子。;- )

### 更多探索

现在我解决了这个问题，我决深入了解一下 `xfconf-query` 命令。不幸的是，该工具没有手册或信息页，`/usr/share` 中也没有任何文档。退而求其次，使用 `-h` 选项获取一些帮助信息。

```
$ xfconf-query -h
 Usage:
   xfconf-query [OPTION…] - Xfconf commandline utility
 Help Options:
   -h, --help            显示帮助选项
 Application Options:
   -V, --version         版本信息
   -c, --channel         查询/修改通道
   -p, --property        查询/修改属性
   -s, --set             更新权限的值
   -l, --list            罗列属性（或者通道，如果没有用 -c 指定）
   -v, --verbose         详细输出
   -n, --create          当新属性不存在，则创建它
   -t, --type            指定属性值类型
   -r, --reset           重置属性
   -R, --recursive       递归（与 -r 一起使用）
   -a, --force-array     即使只有一个元素也强制采用数组
   -T, --toggle          反转现有的布尔属性
   -m, --monitor         监视属性更改的通道

```

这没有多大帮助，但我们还是可以从中找出一些有用的东西。首先，*通道* 是可以修的属性的分组。我对 `general` 通道下的 `workspace_count` 属性进行了更改。让我们看看完整的通道列表：

```
$ xfconf-query -l
Channels:
  xfwm4
  xfce4-keyboard-shortcuts
  xfce4-notifyd
  xsettings
  xfdashboard
  thunar
  parole
  xfce4-panel
  xfce4-appfinder
  xfce4-settings-editor
  xfce4-power-manager
  xfce4-session
  keyboards
  displays
  keyboard-layout
  ristretto
  xfcethemer
  xfce4-desktop
  pointers
  xfce4-settings-manager
  xfce4-mixer

```

给定通道的属性也可以用下列的命令来查看。我使用 `less` 分页器，因为结果是一长串数据。我对下面的列表进行了裁剪，但留下了足够多的条目，你可以看到这些条目的类型。

```
$ xfconf-query -c xfwm4 -l | less
/general/activate_action
/general/borderless_maximize
/general/box_move
/general/box_resize
/general/button_layout
/general/button_offset
<裁剪>
/general/workspace_count
/general/workspace_names
/general/wrap_cycle
/general/wrap_layout
/general/wrap_resistance
/general/wrap_windows
/general/wrap_workspaces
/general/zoom_desktop
(END)

```

你可以用这种方式探索所有的通道。我发现通道通常对应“设置管理器”中的各种设置。这些属性是你在这些对话框中设置的。请注意，并非你在“设置管理器”对话窗口中找到的所有设置都是 Xfce 桌面的一部分，因此它们没有对应的通道。屏幕保护程序就是一个例子，因为它是通用的 GNU 屏幕保护程序，并不是 Xfce 独有的。“设置管理器” 是 Xfce 定位这些配置工具的一个很好的中心位置。

### 文档

综上所述，`xconf-query` 命令似乎没有任何手册或信息页，并且我在网上发现了很多不正确的、记录不全的信息。我发现对 Xfce4 来说最好的文档是 [Xfce 网站](https://www.xfce.org/)，关于 `xconf-query` 的一些具体信息可以在这里找到。

---

via: <https://opensource.com/article/21/1/remote-configuration-xfce4>

作者：[David Both](https://opensource.com/users/dboth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Donkey-Hao](https://github.com/Donkey-Hao) 校对：[wxy](https://github.com/wxy)

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


如何在 elementary OS 中启用最小化、最大化窗口按钮

Summary: 这是如何在 elementary OS 中启用最小化、最大化窗口按钮的方法。

这是如何在 elementary OS 中启用最小化、最大化窗口按钮的方法。

# 如何在 elementary OS 中启用最小化、最大化窗口按钮

>
> 这是如何在 elementary OS 中启用最小化、最大化窗口按钮的方法。
>
>
>

许多人（大多数是 elementary OS 的新用户）在各种论坛上问这些问题：

1. 我怎样才能在 elementary OS 中启用最小化按钮？
2. 我如何启用还原、最小化、最大化？
3. 有可能恢复最小化和最大化按钮吗？

这些都是完全正常的问题，而且问问题也是可以的。对吧？这篇指南可以帮助他们在 elementary OS 中获得这些按钮。

Elementary OS 所使用的 Pantheon 桌面并没有默认的标准窗口按钮。其主要原因是通过 Dock 和应用菜单处理用户行为和活动的不同理念。可以说，这种设计或实现的行为模仿了macOS。

不过，许多用户更喜欢窗口按钮，因为这是一个所谓的“肌肉记忆”，而且有些人是从其他桌面环境（甚至是 Windows）迁移过来的。

尽管 Elementary 没有为你提供这个默认设置，你仍然可以启用它。下面是方法。

### 启用最小化最大化按钮 - elementary OS

打开终端，安装添加 PPA 所需的 `software-properties-common` 软件包。默认情况下，这个包在 elementary OS 中没有安装（不要问我为什么，真的）。

```
sudo apt install software-properties-common

```

#### elementary OS 6 Odin

elementary Tweak 工具被重新换了个名字，它现在被称为 [Pantheon Tweaks](https://github.com/pantheon-tweaks/pantheon-tweaks)，并正在单独开发中。使用以下命令，你可以安装它：

```
sudo add-apt-repository -y ppa:philip.scott/pantheon-tweaks
sudo apt install -y pantheon-tweaks

```

#### elementary OS 5 Juno 及更低版本

如果你使用的是 elementary OS 5 June 及更低版本，你可以使用相同的 PPA 安装早期的 [elementary-tweaks](https://github.com/elementary-tweaks/elementary-tweaks)。在终端按照以下命令进行操作：

```
sudo add-apt-repository -y ppa:philip.scott/elementary-tweaks
sudo apt install -y elementary-tweaks

```

#### 更改设置

* 安装后，点击顶部栏的“<ruby> 应用 <rt>  Application </rt></ruby>”，打开“<ruby> 系统设置 <rt>  System settings </rt></ruby>”。在系统设置窗口中，点击“<ruby> 个人 <rt>  Personal </rt></ruby>”下的 “Tweaks”。
* 在 Tweaks 窗口中，进入“<ruby> 外观 <rt>  Appearance </rt></ruby>”。
* 在窗口控制下，选择布局：“Windows”。

* 然后在顶部窗口栏的右侧应该有最小化、最大化和关闭按钮了。

也有其他组合形式，如 Ubuntu、macOS 等。你可以选择任何你觉得合适的：

这篇指南至此就结束了。系统设置中还有其他选项，你可以尝试使用，但窗口管理器 gala 最近删除了这些选项。因此，它们目前可能无法工作。

我希望这个指南能帮助你启用 elementary OS 的最小化最大化按钮。如果你需要任何帮助，请在下面的评论栏告诉我。

---

via: <https://www.debugpoint.com/2021/08/enable-minimize-maximize-elementary/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


使用 rustup 管理你的 Rust 工具链

# 使用 rustup 管理你的 Rust 工具链

<img src="content_image/album_202206_30_145426h9he5z111149ctcj.jpg" alt="" title="">

>
> rustup 可用于 Rust 安装与更新。它还能够在稳定版、测试版和每日更新版之间无缝切换 Rust 编译器及其工具。
>
>
>

[Rust 编程语言](https://www.rust-lang.org/) 如今变得越来越流行，受到爱好者和公司的一致好评。它受欢迎的原因之一是 Rust 提供的令人惊叹的工具，使其成为开发人员使用的乐趣。[rustup](https://github.com/rust-lang/rustup) 是管理 Rust 工具的官方工具。它不仅可以安装和更新 Rust ，它还能够在稳定版、测试版和每日更新版之间无缝切换 Rust 编译器及其工具。本文将向你介绍 `rustup` 及其一些常用命令。

### 默认 Rust 安装方式

如果你想在 Linux 上安装 Rust，你可以使用你的包管理器。在 Fedora 或 CentOS Stream 上，你可以这样：

```
$ sudo dnf install rust cargo

```

这提供了一个稳定版的 Rust 工具链，如果你是 Rust 的初学者，并想尝试编译和运行简单的程序，它会非常有用。但是，由于 Rust 是一种新的编程语言，它变化很快，并且经常添加许多新功能。这些功能是 Rust 工具链的每日更新版和之后测试版的一部分。要试用这些功能，你需要安装这些较新版本的工具链，而不会影响系统上的稳定版本。不幸的是，你的发行版的包管理器在这里无法做到。

### 使用 rustup 安装 Rust 工具链

要解决上述问题，你可以下载安装脚本：

```
$ curl --proto '=https' --tlsv1.2 \
    -sSf https://sh.rustup.rs > sh.rustup.rs

```

检查它，然后运行它。它不需要 root 权限，并根据你的本地用户权限安装 Rust：

```
$ file sh.rustup.rs
sh.rustup.rs: POSIX shell script, ASCII text executable
$ less sh.rustup.rs
$ bash sh.rustup.rs

```

出现提示时选择选项 `1`：

```
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
> 1

```

安装后，你必须获取环境变量以确保 `rustup` 命令立即可供你运行：

```
$ source $HOME/.cargo/env

```

验证是否安装了 Rust 编译器（`rustc`）和 Rust 包管理器（`cargo`）：

```
$ rustc --version
$ cargo --version

```

### 查看已安装和可用的工具链

你可以使用以下命令查看已安装的不同工具链以及哪个工具链是可用的：

```
$ rustup show

```

### 在工具链之间切换

你可以查看默认工具链并根据需要进行更改。如果你当前使用的是稳定版工具链，并希望尝试每日更新版中提供的新功能，你可以轻松切换到每日更新版工具链：

```
$ rustup default
$ rustup default nightly

```

要查看 Rust 的编译器和包管理器的完整路径：

```
$ rustup which rustc
$ rustup which cargo

```

### 检查和更新工具链

要检查是否有新的 Rust 工具链可用：

```
$ rustup check

```

假设一个新版本的 Rust 发布了，其中包含一些有趣的特性，并且你想要获取最新版本的 Rust。你可以使用 `update` 子命令来做到这一点：

```
$ rustup update

```

### 帮助和文档

以上命令对于日常使用来说绰绰有余。尽管如此，`rustup` 有多种命令，你可以参考帮助部分了解更多详细信息：

```
$ rustup --help

```

`rustup` 在 GitHub 上有完整的 [参考手册](https://rust-lang.github.io/rustup/)，你可以用作参考。所有 Rust 文档都安装在你的本地系统上，不需要你连接到互联网。你可以访问包括书籍、标准库等在内的本地文档：

```
$ rustup doc
$ rustup doc --book
$ rustup doc --std
$ rustup doc --cargo

```

Rust 是一种正在积极开发中的令人兴奋的语言。如果你对编程的发展方向感兴趣，请关注 Rust！

---

via: <https://opensource.com/article/22/6/rust-toolchain-rustup>

作者：[Gaurav Kamathe](https://opensource.com/users/gkamathe) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[turbokernel](https://github.com/turbokernel)

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


硬核观察 #683 不值得使用 -O3 来编译 Linux 内核

Summary: • 不值得使用 -O3 来编译 Linux 内核 • Firefox 102 现在可以自动删除 URL 中的跟踪器 • 欧美大范围的路由器受到了新的、异常复杂的恶意软件的攻击

# 硬核观察 #683 不值得使用 -O3 来编译 Linux 内核

### 不值得使用 -O3 来编译 Linux 内核

在内核社区有人 [建议](/article-14749-1.html) 在更多范围内使用`-O3` 编译优化参数后，Linus Torvalds 迅速 [驳斥](/article-14762-1.html) 了这一想法，因为在他看来，这带来的潜在问题更多。Phoronix 使用其著名的测试套件对 `-O3` 编译的内核性能进行了测试。结论是：在 230 项测试中，`-O3` 内核的性能只领先了 1.3%，仅在压力测试软件 Stress-NG 的上下文切换基准中有近三倍的提升，一些数据库场景有 10% 左右的提升，其它场景仅有 2% 左右的变化。总体来说，考虑到 `-O3` 带来的过度优化的潜在风险，使用这个优化参数没什么意义。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=article&item=linux-kernel-o3)**
>
>
>

>
> 老王点评：这下可以尘埃落定了。
>
>
>

### Firefox 102 现在可以自动删除 URL 中的跟踪器

这项名为“查询参数剥离”的新功能，可以在你点击一个链接时自动删除 URL 中的跟踪参数。很多网站会在 URL 中附加特定的查询字符串来跟踪链接访问，比如 Facebook 使用的是 `fbclid=` 。Mozilla 大约在一年前开始研究这一功能，现在它已经准备好供公众使用。这项新功能是严格跟踪保护规则的一部分，但默认情况下是禁用的，因为有可能会破坏正常浏览体验。

>
> **[消息来源：Engadget](https://www.engadget.com/firefox-can-now-automatically-remove-tracking-from-ur-ls-115228742.html)**
>
>
>

>
> 老王点评：看得出来，虽然 Firefox 有种种不尽如人意之处，但是对用户隐私的保护真是竭尽全力了。
>
>
>

### 欧美大范围的路由器受到了新的、异常复杂的恶意软件的攻击

安全研究人员报告说，一个异常先进的黑客组织花了近两年时间，用恶意软件感染了北美和欧洲的各种路由器，完全控制了与路由器连接的 Windows、macOS 和 Linux 设备。他们已经发现至少有 80 个目标被这种隐秘的恶意软件感染，感染的路由器包括思科、Netgear、华硕等制造的设备。它能够列举所有连接到受感染的路由器的设备，并收集它们发送和接收的 DNS 查询和网络流量，并保持不被发现。

>
> **[消息来源：ArsTechnica](https://arstechnica.com/information-technology/2022/06/a-wide-range-of-routers-are-under-attack-by-new-unusually-sophisticated-malware/)**
>
>
>

>
> 老王点评：这是专门针对小型办公室和家庭办公室路由器编译的定制恶意软件，背后所图甚大。
>
>
>


企业应该选择无服务器计算吗？

# 企业应该选择无服务器计算吗？

>
> 无服务器计算将服务器从规划中移除，使企业能够专注于应用功能。那么，企业是不是都应该选择无服务器计算呢？让我们来探究一下吧！
>
>
>

<img src="content_image/album_202207_01_113921u4sjl5cczwj3tjbu.jpg" alt="" title="">

直至不久之前，几乎每个产品经理都会将他/她的工程资源，分成两个独立的团队 —— 开发团队和运维团队。开发团队通常参与编码、测试和构建应用功能，而运维团队负责应用程序的交付、部署和运行维护。

当开发团队构建电商应用时，运维团队会搭建好服务器来托管该应用。搭建服务器涉及到许多方面，其中包括：

* 选择合适的硬件和操作系统
* 应用所需的补丁集
* 搭建所需服务器环境，如 JDK、Python、Tomcat、NodeJS 等
* 部署、配置和提供实际的应用
* 打开并固定合适的端口
* 搭建所需的数据库引擎

……这个名单还在继续。

除此之外，管理人员还对容量规划感到头疼。毕竟，任何重要应用都应始终保持 100% 可用、可靠且可扩展。这需要对硬件进行最佳投资。众所周知，在一些关键时期，硬件短缺会导致业务损失，而硬件冗余又会损害利润。因此，无论应用是针对本地数据中心，还是针对云基础架构，容量规划都是至关重要的。到目前为止，很明显，企业不仅在功能构建上投入了大量的精力，还在功能交付上也花费了大量的时间。

<ruby> 无服务器计算 <rt>  Serverless computing </rt></ruby>旨在提供一种无缝的方式来交付功能，而无需担心服务器的设置和维护。换句话说，无服务器计算平台提供了一个“<ruby> 即用型 <rt>  ready-to-use </rt></ruby>”环境，企业可以尽快将应用程序构建和部署为一些较小的功能。这就是为什么这种方法被称为“<ruby> 功能即服务 <rt>  Function as a Service </rt></ruby>”（FaaS）。

请记住，无服务器计算中仍然存在服务器，但它由 AWS、微软和谷歌等 FaaS 供应商负责。

例如，AWS 以 “Lambda 函数”的形式提供了一个无服务器计算环境。开发人员可以选择将应用程序构建为一组 Lambda 函数，这些函数可以用 NodeJS、Java、Python 和其他一些语言编写。AWS 提供了一个现成的环境来部署这些函数。它还提供了即用型数据库服务器、文件服务器、应用程序网关和身份验证服务器等。

同样，微软 Azure 也提供了一个环境，它可以用 C# 等语言构建和部署 Azure 函数。

### 为什么选择无服务器？

有两个主要因素推动了无服务器计算的普及。

#### 1、即用型环境

显然，这是无服务器计算的最大卖点。企业无需提前采购/预订硬件或实例，也无需操心许可证，以及设置和配置服务器。他们不需要为扩大和缩小规模而烦恼。所有这些都由 FaaS 供应商负责。

#### 2、最优成本

由于 FaaS 供应商总是根据环境的利用率向客户收费（按使用付费模式），因此企业无需担心前期成本和资源浪费。例如，AWS 根据 Lambda 函数接收的请求数量、在数据表上运行的查询数量等指标来向客户端收费。

### 无服务器计算的挑战

与任何其他方法一样，无服务器计算也不是每个人都可以盲目遵循的完美方法。它本身也有一系列限制。以下是其中的几个。

#### 1、供应商锁定

当使用无服务器计算时，第一个也是最重要的问题就是，Lambda 或 Azure 等函数将使用供应商提供的 API 来编写。例如，使用 AWS Lambda API 编写的函数无法部署到 Google Cloud 中，反之亦然。因此，无服务器计算迫使企业在许多年内，只能使用同一家供应商。并且，应用的成功或失败不仅取决于它的功能，还取决于供应商在性能等方面的能力。

#### 2、编程语言

没有哪家无服务器计算平台支持所有的编程语言。此外，对于它支持的编程语言，它也可能不支持其所有版本。这样一来，应用开发团队只能选择供应商提供的语言。就团队的能力而言，这可能是非常关键的。

#### 3、最优成本，真的吗？

其实也不一定，这一切都取决于资源的使用情况。如果你的应用正在承受巨大的负载，例如每秒数百万个请求，那么你所支付的费用可能会过高。在这样的规模下，在本地或云端拥有自己的服务器可能会更便宜。这并不意味着具有 Web 规模的应用不适合用无服务器计算。归根结底，它还是取决于你的平台的构建方式，以及你与供应商签署的协议。

#### 4、生态系统

没有哪个应用是为了一个孤立的环境而编写的。它总是需要其他组件，如数据存储、数据库、安全引擎、网关、消息服务器、队列、缓存等。每个平台都提供自己的一组此类工具。例如，AWS 提供了 Dynamo DB 作为其 NoSQL 解决方案之一。显然，其他供应商也提供了自己的 NoSQL 解决方案。因此，团队又会被迫地基于所选平台来构建应用程序。尽管大多数商业 FaaS 供应商都为特定需求提供了多个组件，但并非每个组件都可能是同类型中最佳的。

### 为什么不考虑容器呢？

在过去十年中，我们中的许多人都迁移到了容器化部署模型，因为它们为昂贵的物理机或虚拟机提供了一种轻量级的替代方案。有了 Kubernetes 等编排工具后，我们乐于部署容器化应用，同时也满足了 Web 规模的要求。容器提供了与底层环境一定程度的隔离，这使得部署相对容易。但是，我们仍然需要在硬件（本地或云）、许可证、网络、配置等方面进行投资，这需要具有前瞻性的规划、合适的技术能力和仔细的监控。无服务器计算，尽管它也有自己的优点和缺点，但它让我们把这些责任也摆脱了。

### 展望未来

我们正处于持续开发、持续集成和持续部署的时代。每个企业都面临着竞争。产品<ruby> 上市时间 <rt>  Time to market </rt></ruby>（TTM）在吸引客户、留住客户这两个方面，发挥着重要作用。在这种背景下，企业喜欢花更多时间来尽可能快地推出功能，而不是在部署和维护的细节上苦苦挣扎。无服务器计算有可能满足这些需求。大玩家们正在投入巨额资金，以使 FaaS 尽可能地无缝且经济。无服务器计算的未来看起来是一片光明。

---

via: <https://www.opensourceforu.com/2021/12/should-businesses-opt-for-serverless-computing/>

作者：[Krishna Mohan Koyya](https://www.opensourceforu.com/author/krishna-mohan-koyya/) 选题：[lkxed](https://github.com/lkxed) 译者：[lkxed](https://github.com/lkxed) 校对：[wxy](https://github.com/wxy)

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


什么是雾计算？

Summary: 了解由我们生活中的所有连接设备组成的网络。

IT届有概念炒作的传统，隔段时间蹦出个新词，把行业内外的很多人都唬得一愣一愣的，感觉自己又跟不上趟了。

了解由我们生活中的所有连接设备组成的网络。

# 什么是雾计算？

>
> 了解由我们生活中的所有连接设备组成的网络。
>
>
>

在早期，计算机既笨重又昂贵，计算机用户很少，他们必须在计算机上的预留时间内亲自来处理他们的<ruby> 打孔卡 <rt>  punchcard </rt></ruby>。被称为 <ruby>   大型机  <rt>  Mainframe </rt></ruby> 的系统进行了许多创新，并在<ruby> 终端机 <rt>  terminal </rt></ruby>（没有自己的 CPU 的桌面计算机）上实现了<ruby> 分时 <rt>  time-shared </rt></ruby>任务。

时至今日，强大的计算设备能做到 [价格低至 35 美元，且大小不超过一张信用卡](https://opensource.com/resources/raspberry-pi)。这甚至还没有涵盖现代生活中负责收集和处理数据的所有小设备。从高层次的角度来看这些计算机的集合，你可以想象得到，所有这些设备多得像云中的水滴一样。

碰巧“<ruby> 云计算 <rt>  cloud computing </rt></ruby>”一词已经被占用，因此需要为由物联网（IoT）和其他具有战略意义的服务器组成的网络提供一个独特的名称。此外，如果已经有一个代表数据中心节点的云，那么在云之外与我们交融的这些节点肯定有其独特之处。

### 欢迎来到雾计算

云通过互联网提供计算服务。构成云的数据中心很大，但与潜在客户的数量相比相对较少。这表明当数据在云及其众多用户之间来回传送时存在潜在的瓶颈。

相比之下，<ruby> 雾计算 <rt>  Fog Computing </rt></ruby>可以在数量上超过其潜在客户，而不会出现瓶颈，因为设备执行大部分数据的收集或计算。它是云的外部“边缘”，是云落地的部分。

### 雾和边缘计算

雾计算和 <ruby>   边缘计算  <rt>  edge computing </rt></ruby> 本质上是同义词。两者都与云和物联网密切相关，并做出相同的架构假设：

* 你离 CPU 越近，数据传输就越快。
* 像 [Linux](https://opensource.com/resources/linux) 一样，小型专用计算机，可以“做一件事并把它做好”，这是一个强大的优势（当然，我们的设备实际上不仅仅做一件事，但从高层次上看，你购买的用于监测健康的智能手表本质上是在做“一”件事）。
* 离线是不可避免的，但好的设备可以在此期间同样有效地运行，然后在重新连接时同步。
* 本地设备能比大型数据中心更简单、更便宜。

### 边缘网络

将雾计算视为与云完全分离的实体很诱人，但它们毕竟是组成一个整体的两个部分。云需要数字企业的基础设施，包括公共云提供商、电信公司，甚至是运行自己服务的专业公司。本地化服务也很重要，可以在云核心与其数以百万计的客户之间提供<ruby> 中转站 <rt>  waystations </rt></ruby>。

雾计算位于云的边缘，无论客户身在何处，都与他们紧密联系在一起。有时这是一个消费环境，例如你自己的家或汽车，而另一些时候这是一种商业利益，例如零售店中的价格监控设备或工厂车间的重要的安全传感器。

### 雾计算就在你身边

雾计算由我们生活中的所有连接设备组成：<ruby> 无人机 <rt>  drone </rt></ruby>、电话、手表、健身监视器、安全监视器、家庭自动化、便携式游戏设备、园艺自动化、天气传感器、空气质量监视器等等。理想情况下，它提供的数据有助于建立一个更好、更明智的未来。有许多伟大的开源项目正朝着改善健康的方向而努力 —— 甚至只是让生活变得更有趣一点儿 —— 这一切都得益于雾和云计算。无论如何，*我们的* 工作是确保它 [保持开放](https://opensource.com/article/20/10/keep-cloud-open)。

---

via: <https://opensource.com/article/21/5/fog-computing>

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

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


在 Linux 上使用 Bash 创建一个临时文件

Summary: 基于 Fedora 的系统上的 mktemp 命令和基于 Debian 的系统上的 tempfile 是专门为减轻这种负担而设计的，它使创建、使用和删除独特的文件变得容易。

# 在 Linux 上使用 Bash 创建一个临时文件

>
> 基于 Fedora 的系统上的 `mktemp` 命令和基于 Debian 的系统上的 `tempfile` 是专门为减轻这种负担而设计的，它使创建、使用和删除独特的文件变得容易。
>
>
>

<img src="content_image/album_202207_01_145110u1ninn1n3idspp71.jpg" alt="" title="">

使用 Bash 脚本语言进行编程时，有时需要创建一个临时文件。例如，你可能需要一个可以提交到磁盘的中间文件，以便你可以使用另一个命令对其进行处理。创建诸如 `temp` 之类的文件或任何以 `.tmp` 结尾的文件很容易。但是，这些名称很可能是由其他进程生成的，因此你可能会不小心覆盖现有的临时文件。除此之外，你不应该花费脑力想出看起来独特的名字。基于 Fedora 的系统上的 `mktemp` 命令和基于 Debian 的系统上的 `tempfile` 是专门为减轻这种负担而设计的，它使创建、使用和删除独特的文件变得容易。

### 创建一个临时文件

`mktemp` 和 `tempfile` 都创建一个临时文件作为它们的默认操作，并打印文件的名称和位置作为输出：

```
$ tempfile
/tmp/fileR5dt6r

$ mktemp
/tmp/tmp.ojEfvMaJEp

```

除非你指定不同的路径，否则系统会将临时文件放在 `/tmp` 目录中。

对于 `mktemp`，可以使用 `-p` 选项指定路径：

```
$ mktemp -p ~/Demo
/home/tux/Demo/tmp.i8NuhzbEJN

```

对于 `tempfile`，可以使用 `--directory` 或 `-d` 选项：

```
$ tempfile --directory ~/Demo/
/home/sek/Demo/fileIhg9aX

```

### 找到你的临时文件

使用自动生成的临时文件的问题是你无法知道它的名字是什么。这就是为什么两个命令都返回生成的文件名作为输出的原因。你可以使用 Konsole、GNOME 终端或 [rxvt](https://opensource.com/article/19/10/why-use-rxvt-terminal) 等交互式 shell 来使用终端上显示的文件名与文件进行交互。

但是，如果你正在编写脚本，则无法通过读取文件名并在以下命令中使用它来进行干预。

`mktemp` 和 `tempfile` 的作者想到了这个问题，并且有一个简单的解决方法。终端将输出发送到名为“标准输出”的流。你可以通过将变量设置为在子 shell 中启动的命令的结果来捕获标准输出：

```
$ TMPFILE=$(mktemp -p ~/Demo)

$ echo $TMPFILE
/home/tux/Demo/tmp.PjP3g6lCq1

```

引用文件时使用 `$TMPFILE`，它与直接与文件本身交互相同。

### 使用 mktemp 创建一个临时目录

你还可以使用 `mktemp` 命令创建目录而不是文件：

```
$ mktemp --directory -p ~/Demo/
/home/tux/Demo/tmp.68ukbuluqI

$ file /home/tux/Demo/tmp.68ukbuluqI
/home/tux/Demo/tmp.68ukbuluqI: directory

```

### 自定义临时名称

有时你甚至可能希望在伪随机生成的文件名中加入可预测性元素。你可以使用这两个命令自定义临时文件的名称。

使用 `mktemp`，你可以为文件名添加后缀：

```
$ mktemp -p ~/Demo/ --suffix .mine
/home/tux/Demo/tmp.dufLYfwJLO.mine

```

使用 `tempfile`，你可以设置前缀和后缀：

```
$ tempfile --directory ~/Demo/ --prefix tt_ --suffix .mine
/home/tux/Demo/tt_0dfu5q.mine

```

### 把 tempfile 作为 touch 使用

你还可以使用 `tempfile` 设置自定义名称：

```
$ tempfile --name not_random
not_random

```

当你使用 `--name` 选项时，它是绝对的，忽略所有其他形式的自定义。事实上，它甚至忽略了 `--directory` 选项：

```
$ tempfile --directory ~/Demo --prefix this_is_ --suffix .all --name not_random_at
not_random_at

```

在某种程度上，`tempfile` 可以替代 `touch` 和 `test`，因为它拒绝创建已经存在的文件：

```
$ tempfile --name example.txt
open: file exists

```

`tempfile` 命令并非默认安装在所有 Linux 发行版上，因此在将其用作脚本中的 `test` 的 hack 之前，你必须确保它存在。

### 安装 mktemp 和 tempfile

[GNU Core Utils](https://www.gnu.org/software/coreutils/) 包括 `mktemp` 命令。主要发行版默认包括 Core Utils（它是包含 `chmod`、`cut`、`du` 和其他基本命令的同一个软件包）。

Debian Utils 软件包包含 `tempfile` 命令，默认安装在大多数基于 Debian 的发行版和 Slackware Linux 上。

### 总结

临时文件很方便，因为不会混淆它们是否可以安全删除。它们是临时的，意在根据需要使用并毫不犹豫地丢弃。在需要时使用它们，并在完成后清除它们。

---

via: <https://opensource.com/article/22/6/make-temporary-file-bash>

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

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


硬核观察 #684 GPT-3 写一篇关于它自己的学术论文，已经提交评审

Summary: • GPT-3 写一篇关于它自己的学术论文，已经提交评审 • 算法可提前一周预测犯罪，准确率 90% • 俄罗斯人正在转向 Linux 和盗版

# 硬核观察 #684 GPT-3 写一篇关于它自己的学术论文，已经提交评审

### GPT-3 写一篇关于它自己的学术论文，已经提交评审

研究人员给人工智能算法 GPT-3 输入了一个简单的指令：用 500 字写一篇关于 GPT-3 的学术论文，并在文中加入参考文献和引文。他们给程序了一些提示，催促它创建导言、方法、结果和讨论等部分，就像写一篇科学论文那样，但尽可能少干预。结果，GPT-3 在短短两个小时内就产生了一篇论文。目前该论文已经提交给学术期刊审核，并发表在国际预印本服务器 HAL 上。有趣是的，在提交论文时，GPT-3 表示同意研究人员也作为共同一作出现。

>
> **[消息来源：《科学美国人》](https://www.scientificamerican.com/article/we-asked-gpt-3-to-write-an-academic-paper-about-itself-then-we-tried-to-get-it-published/)**
>
>
>

>
> 老王点评：一般论文都需要同行评审，AI 的论文谁来评审？
>
>
>

### 算法可提前一周预测犯罪，准确率 90%

芝加哥大学的科学家们开发了一种新的算法，可以提前一周预测未来的犯罪，准确率约为 90%，它将城市划分为大约 1000 英尺宽的“空间瓦片”，并预测这些区域内的犯罪。该工具使用芝加哥市围绕暴力犯罪和财产犯罪事件的历史数据进行了测试和验证。该模型在美国其他七个城市的数据中表现同样出色。

>
> **[消息来源：Psych News Daily](https://www.psychnewsdaily.com/algorithm-predicts-future-crime-in-advance/)**
>
>
>

>
> 老王点评：人类的行为在 AI 看起来都在可预测范围之内，所以，我们都是活在数据中的吗？
>
>
>

### 俄罗斯人正在转向 Linux 和盗版

据《莫斯科时报》上周五报道，在微软公司于 3 月 4 日暂停俄罗斯的销售后，俄罗斯政府机构正在从微软的 Windows 系统转向 Linux 操作系统。另据《生意人报》报道，俄罗斯基于 Linux 开源操作系统的开发商也看到了更多的需求。但并非所有部门都能轻易换掉他们的系统，俄罗斯的网络上搜索盗版软件的数量激增了 250%。6 月至今，Excel 下载的搜索量激增了 650%。

>
> **[消息来源：Yahoo](https://finance.yahoo.com/news/russians-searching-pirated-microsoft-products-040614477.html)**
>
>
>

>
> 老王点评：说到底，还是 Linux 桌面操作系统不够争气啊。
>
>
>


如何在 Linux 中使用 Pandoc 转换文件格式

Summary: 它被称为文档转换的“瑞士军刀” —— 这是有充分理由的。很少有它做不到的事情。

它被称为文档转换的“瑞士军刀” —— 这是有充分理由的。很少有它做不到的事情。

# 如何在 Linux 中使用 Pandoc 转换文件格式

在之前的一篇文章中，我介绍了使用 pandoc 将少量 Markdown 文件 [批量转换](https://itsfoss.com/convert-markdown-files/) 为 HTML 的过程。在那篇文章中，我创建了多个 HTML 文件，但 Pandoc 可以做的更多。它被称为文档转换的“瑞士军刀” —— 这是有充分理由的。很少有它做不到的事情。

[Pandoc](https://pandoc.org/) 可以将 .docx、.odt、.html、.epub、LaTeX、DocBook 等格式互相转换，或者转换为其他格式，例如 JATS、TEI Simple、AsciiDoc 等。

是的，这意味着 Pandoc 可以将 .docx 文件转换为 .pdf 和 .html 文件，但你可能会想：“Word 也可以将文件导出为 .pdf 和 .html。为什么我需要 Pandoc 呢？”

嗯，本来呢，你这个说法也没错，但考虑到 Pandoc 可以转换这么多格式，它很可能成为你所有转换任务的首选工具。例如，我们中的许多人都知道 [Markdown 编辑器](https://itsfoss.com/best-markdown-editors-linux/) 可以将其 Markdown 文件导出为 .html。而使用 Pandoc 文件也可以转换为许多其他格式。

我很少将 Markdown 导出为 HTML。我通常让 Pandoc 来做这件事。

### 使用 Pandoc 转换文件格式

本文中，我会将 Markdown 文件转换成几种不同的格式。我几乎所有的写作都使用 Markdown 语法，但我经常需要转换为另一种格式：学校作业通常需要的 .docx 格式；我创建的网页通常需要的 .html 格式；工作需要的 .epub 格式；传单和讲义需要的 .pdf 格式；甚至包括一个大学数字人文项目偶尔需要的 TEI Simple 格式。Pandoc 可以轻松处理所有这些格式，甚至更多。

首先，你需要 [安装 pandoc](https://pandoc.org/installing.html)。此外，要创建 .pdf 文件，还需要 LaTeX。我最喜欢的套件是 [TeX Live](https://www.tug.org/texlive/)。

**注意**：如果你想在安装前试用 pandoc，这里有一个在线试用页面：<http://pandoc.org/try/>。

#### 安装 pandoc 和 texlive

Ubuntu 和其他 Debian 发行版的用户可以在终端中输入以下命令：

```
sudo apt-get update
sudo apt-get install pandoc texlive

```

请注意第二行，你将一次性安装 `pandoc` 和 `texlive`。[apt-get 命令](https://itsfoss.com/apt-get-linux-guide/) 支持你这样做。不过，我建议你先去喝杯咖啡，因为这可能需要几分钟的时间。

#### 开始转换

安装完成 `pandoc` 和 `texlive` 后，你就可以尝试用它们来完成一些工作了！

该项目的示例文档将是一篇文章，该文章于 1894 年 12 月首次发表在《北美评论》上，标题为“如何击退火车劫匪”。我将使用的 Markdown 文件是前一段时间创建的，该文章的一个恢复项目的一部分（LCTT 译注：这是篇一百多年前发表的文章，这是一个数字化“恢复”项目）。

我把这篇文章保存为 `how_to_repel_train_robbers.md`，它位于我的 `Documents` 目录下，名为 `samples` 的子目录中。它在 Ghostwriter 中看起来是这样的：

我想创建此文件的 .docx、.pdf 和 .html 版本。

#### 第一次转换

首先，我将制作一个 .pdf 副本，因为我在安装 LaTeX 包时遇到了些麻烦。

在 `~/Documents/samples/` 目录中，我输入以下，以创建一个 .pdf 文件：

```
pandoc -o htrtr.pdf how_to_repel_train_robbers.md

```

上述命令将基于 `how_to_repel_train_robbers.md` 文件，创建一个名为 `htrtr.pdf` 的文件。我使用 `htrtr` 作为名称的原因是：嗯，它比 `how_to_repel_train_robbers` 短。`htrtr` 其实是长标题中的单词首字母排列。

这是 .pdf 文件制作完成后的一个截图：

#### 第二次转换

接下来，我想创建一个 .docx 文件。该命令与我用来创建 .pdf 的命令几乎相同，它是：

```
pandoc -o htrtr.docx how_to_repel_train_robbers.md

```

很快，一个 .docx 文件就创建好了。这是它在 Libre Writer 中的样子：

#### 第三次转换

我可能会想在网上发布这个，所以再多一个支持网页的格式也不错。我将使用以下命令创建一个 .html 文件：

```
pandoc -o htrtr.html how_to_repel_train_robbers.md

```

同样，创建它的命令与前两次转换非常相似。这是该 .html 文件在浏览器中的样子：

#### 注意到什么了吗？

让我们再看看之前的命令。它们是：

```
pandoc -o htrtr.pdf how_to_repel_train_robbers.md
pandoc -o htrtr.docx how_to_repel_train_robbers.md
pandoc -o htrtr.html how_to_repel_train_robbers.md

```

这三个命令唯一不同的是 `htrtr` 后的扩展名。这提示你 pandoc 会依赖于你提供的输出文件扩展名（来决定目标转换格式）。

### 总结

Pandoc 可以做的远不止这里完成的三个小转换。如果你选择使用一个首选格式编写文件，但时不时又需要将文件转换为另一种格式，pandoc 很大概率都能为你完成。

现在，既然你已经学会了，你会用它做什么呢？你会把它自动化吗？如果你有一个网站，想供读者下载文章怎么办？你可以修改这些小命令，把它们编写成一个脚本，你的读者可以决定他们想要哪种格式。你可以提供 .docx、.pdf、.odt、.epub 或更多格式。你的读者只需要选择一种格式，然后对应的转换脚本就会执行，最后，你的读者下载他们想要的文件。这是完全可以做到的。

---

via: <https://itsfoss.com/pandoc-convert-file/>

作者：[Bill Dyer](https://itsfoss.com/author/bill/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[lkxed](https://github.com/lkxed) 校对：[wxy](https://github.com/wxy)

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


OSI 模型是什么？

Summary: 通过阅读推特上的一些回复发现，似乎至少存在三种不同的思考方式

通过阅读推特上的一些回复发现，似乎至少存在三种不同的思考方式

# OSI 模型是什么？

（LCTT 校注：作者原文已经大篇幅进行了修订更新，本文据之前的版本翻译。）

今天我在推特上发布了一些关于 OSI 模型如何与 TCP/IP 工作原理的实际表现不相符的观点，这让我思考——OSI 模型到底是什么？通过阅读推特上的一些回复发现，似乎至少存在三种不同的思考方式：

1. TCP/IP 工作原理的字面描述
2. 一个可以用来描述和比较很多不同的网络协议的抽象模型
3. 对 1980 年代的一些计算机网络协议的字面描述，这些协议如今大多已不再使用

在这篇文章中，我不打算试图争辩以上哪一个才是“真正”的 OSI 模型——似乎不同的人以所有这些方式思考它。这不重要。

### OSI 模型有七层

在我们讨论 OSI 模型的含义之前，让我们大致地讨论一下它是什么。它是一个抽象模型，用于描述网络如何在七个编号的层上工作：

* 第一层：物理层
* 第二层：数据链路层
* 第三层：网络层
* 第四层：传输层
* 第五层：会话层
* 第六层：表示层
* 第七层：应用层

我不会再费时地去解释每一层的含义，网上有上千种解释可供查询。

### OSI 模型：TCP/IP 工作原理的字面描述

首先，我想谈谈人们在实践中使用 OSI 模型的一种常见方式：作为对 TCP/IP 工作原理的字面描述。OSI 模型的某些层非常容易映射到 TCP/IP：

* 第二层对应以太网
* 第三层对应 IP
* 第四层对应 TCP 或 UDP（或 ICMP 等）
* 第七层对应 TCP 或 UDP 包内的任何内容（例如 DNS 查询）

这种映射对第二、三、四层很有意义——TCP 数据包有三个<ruby> 标头 <rt>  header </rt></ruby>对应于这三个层（以太网标头、IP 标头和 TCP 标头）。

用数字来描述 TCP 数据包中的不同标头非常有用——如果你说“第二层”，很显然它位于第三层“下方”，因为二比三小。

“OSI 模型作为字面描述”的古怪之处在于，第五层和第六层并不真正对应于 TCP/IP 中的任何内容——我听说过很多关于第五层或第六层可能是什么的不同解释（你可以说第五层是 TLS 或其他东西！）但它们没有像第二、三、四层那样“每一层在 TCP 数据包中都有相应的标头”这样的明确对应关系。

此外，TCP/IP 的某些部分即使在第二层到第四层也不能很好地适应 OSI 模型——例如，哪一层是 ARP 数据包？ARP 数据包发送一些带有以太网标头的数据，这是否意味着它们是第三层？或是第二层？列出不同 OSI 层的维基百科文章将其归类为“第 2.5 层”，这并不令人满意。

因为 OSI 模型有时用于教授 TCP/IP，若搞不清楚它的哪些部分可以映射到 TCP/IP，而哪些部分不能，则会令人困惑。这才是真的问题。

### OSI 模型：用于比较网络协议的一个抽象

我听说过的另一种关于 OSI 的思考方式是，它是一种抽象，可以用来在许多不同的网络协议之间进行类比。例如，如果你想了解蓝牙协议的工作原理，也许你可以使用 OSI 模型来帮助你——这是我在 [这个网页](https://flylib.com/books/en/4.215.1.116/1/) 上找到的一张图表，显示了蓝牙协议如何适配 OSI 模型。

另一个例子是，[这篇维基百科文章](https://en.wikipedia.org/wiki/List_of_network_protocols_(OSI_model)) 有一个 OSI 层列表，详细划分了哪些特定的网络协议对应于这些 OSI 层。

### OSI 模型：一些过时协议的字面描述

维基百科上的一些非常简短的研究表明，除了对这七层的抽象描述之外，OSI 模型还包含了 [一组实现这些层的特定协议](https://en.wikipedia.org/wiki/OSI_protocols)。显然，这发生在 70 年代和 80 年代的 [协议战争](https://en.wikipedia.org/wiki/Protocol_Wars) 时期，OSI 模型失败了，TCP/IP 则取得了胜利。

这就解释了为什么 OSI 模型无法与 TCP/IP 很好地对应，因为如果当时“获胜”的是 OSI 协议，那么 OSI 模型 *将* 完全对应于互联网网络的实际工作方式。

### 结语

我写这篇文章的初衷是，当我最初学习 OSI 模型时，我发现它非常令人困惑（所有这些层是什么？它们是真实存在的吗？这是网络的实际工作原理吗？发生了什么？）我希望有人告诉我这个只使用 TCP/IP 网络协议的人，只需了解 OSI 模型第二、三、四和七层与 TCP/IP 的关系，然后忽略它的所有其他内容即可。所以我希望这篇文章对某些人能有所帮助！

---

via: <https://jvns.ca/blog/2021/05/11/what-s-the-osi-model-/>

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

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


硬核观察 #685 数年后 Ubuntu Unity 桌面起死回生

Summary: • 数年后 Ubuntu Unity 桌面起死回生 • 软件自由保护协会抨击 GitHub • 无视谷歌、Mozilla 反对，万维网联盟发布了 DID 规范

沉默的螺旋，并不是谁声音大就能代表多数人。

除了几年前 GNOME 经常内存泄漏对它有点阴影外，对各桌面不讨厌不喜欢，青菜萝卜，各有所爱。

现在 gnome 也还存在内存泄露问题，32G的机子刚开机 gnome-shell 占几百m，长时间运行时间可以接近2G

来自223.104.238.18的 Chrome Mobile 96.0|Android 12 用户

现在机子普遍 16G 内存了，长时间运行才 2G，还能接受。之前还是 4G 内存的时代，直接占满，那才叫一个难受。

# 硬核观察 #685 数年后 Ubuntu Unity 桌面起死回生

### 数年后 Ubuntu Unity 桌面起死回生

Ubuntu 的 Unity 桌面已经很久没有更新了，上一次它还是 Ubuntu 17.04 中出现的 Unity 7.5。Ubuntu 背后的 Canonical 公司随后放弃了对 Unity 的开发支持。但是一些喜欢它的开发者们建立了 UnityX 项目，从而今年我们见到了 Unity 7.6，它被搭载在非官方的 Ubuntu Unity 合成版中。当然，你也可以在普通的 Ubuntu 上安装它。这是另一个完全不像 Windows 的少数选项。

>
> **[消息来源：The Register](https://www.theregister.com/2022/07/01/ubuntu_unity_desktop_updated_after/)**
>
>
>

>
> 老王点评：Unity 本身好不好，是不是更流行并不重要，重要的是，开源世界是自由的，你有随时再造一个轮子的自由。这很重要。
>
>
>

### 软件自由保护协会抨击 GitHub

软件自由保护协会（SFC）专注于保护自由和开源软件，说它已经停止使用微软的 GitHub 进行项目托管，并敦促其他软件开发者也这样做。他们在其网站上增加了一个放弃 GitHub 的说明，并督促自由和开源软件开发者们自愿切换到不同的代码托管服务。SFC 与 GitHub 的决裂最终是由 GitHub Copilot 导致的。他们说，GitHub 决定发布一个源自 FOSS 代码的营利性产品，这“太让人难以忍受了”。Copilot 的训练数据来自 GitHub 上的公共存储库中的代码，但是并没有说明这些代码所附带的软件许可证和版权持有人是什么。

>
> **[消息来源：The Register](https://www.theregister.com/2022/06/30/software_freedom_conservancy_quits_github/)**
>
>
>

>
> 老王点评：确实，似乎 Copilot 有意无意的忽视了用来训练的代码的许可证问题，所以，你很可能在得到的建议中采用了各种许可证的代码，即便只是几行。这从跟本上打击了开源许可证的严肃性。
>
>
>

### 无视谷歌、Mozilla 反对，万维网联盟发布了 DID 规范

去中心化标识符（DID）规范描述了一种部署全球唯一标识符的方法，而无需一个中心化的机构作为验证实体。它们旨在使个人和组织能够使用他们信任的系统生成自己的标识符，这些新的标识符使实体能够通过使用数字签名等加密证明来证明对它们的控制。DID 的格式类似 `did:方法:特定标识`。但谷歌、Mozilla 提出了反对意见，DID 中的“方法”没有定义，所以没有办法评估 DID 将如何运作，也没有办法确定如何处理互操作。他们还担心依靠工作证明量的区块链来处理 DID 的道德问题。

>
> **[消息来源：The Register](https://www.theregister.com/2022/07/01/w3c_overrules_objections/)**
>
>
>

>
> 老王点评：虽然这很去中心化，但是我怀疑由中心化组织提出的去中心化规范，是否真的有用？
>
>
>