在 Linux 上使用 kill 和 killall 命令来管理进程

>
> 了解如何使用 ps、kill 和 killall 命令来终止进程并回收系统资源。
>
>
>

![](/data/attachment/album/202103/18/230625q6g65gz6ugdk8ygr.jpg "Penguin with green background")

在 Linux 中，每个程序和<ruby> 守护程序 <rt>  daemon </rt></ruby>都是一个“<ruby> 进程 <rt>  process </rt></ruby>”。 大多数进程代表一个正在运行的程序。而另外一些程序可以派生出其他进程，比如说它会侦听某些事件的发生，然后对其做出响应。并且每个进程都需要一定的内存和处理能力。你运行的进程越多，所需的内存和 CPU 使用周期就越多。在老式电脑（例如我使用了 7 年的笔记本电脑）或轻量级计算机（例如树莓派）上，如果你关注过后台运行的进程，就能充分利用你的系统。

你可以使用 `ps` 命令来查看正在运行的进程。你通常会使用 `ps` 命令的参数来显示出更多的输出信息。我喜欢使用 `-e` 参数来查看每个正在运行的进程，以及 `-f` 参数来获得每个进程的全部细节。以下是一些例子：

```
$ ps
    PID TTY          TIME CMD
  88000 pts/0    00:00:00 bash
  88052 pts/0    00:00:00 ps
  88053 pts/0    00:00:00 head

```

```
$ ps -e | head
    PID TTY          TIME CMD
      1 ?        00:00:50 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      6 ?        00:00:02 kworker/0:0H-events_highpri
      9 ?        00:00:00 mm_percpu_wq
     10 ?        00:00:01 ksoftirqd/0
     11 ?        00:00:12 rcu_sched
     12 ?        00:00:00 migration/0

```

```
$ ps -ef | head
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 13:51 ?        00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36
root           2       0  0 13:51 ?        00:00:00 [kthreadd]
root           3       2  0 13:51 ?        00:00:00 [rcu_gp]
root           4       2  0 13:51 ?        00:00:00 [rcu_par_gp]
root           6       2  0 13:51 ?        00:00:02 [kworker/0:0H-kblockd]
root           9       2  0 13:51 ?        00:00:00 [mm_percpu_wq]
root          10       2  0 13:51 ?        00:00:01 [ksoftirqd/0]
root          11       2  0 13:51 ?        00:00:12 [rcu_sched]
root          12       2  0 13:51 ?        00:00:00 [migration/0]

```

最后的例子显示最多的细节。在每一行，`UID`（用户 ID）显示了该进程的所有者。`PID`（进程 ID）代表每个进程的数字 ID，而 `PPID`（父进程 ID）表示其父进程的数字 ID。在任何 Unix 系统中，进程是从 1 开始编号，是内核启动后运行的第一个进程。在这里，`systemd` 是第一个进程，它催生了 `kthreadd`，而 `kthreadd` 还创建了其他进程，包括 `rcu_gp`、`rcu_par_gp` 等一系列进程。

### 使用 kill 命令来管理进程

系统会处理大多数后台进程，所以你不需要操心这些进程。你只需要关注那些你所运行的应用创建的进程。虽然许多应用一次只运行一个进程（如音乐播放器、终端模拟器或游戏等），但其他应用则可能创建后台进程。其中一些应用可能当你退出后还在后台运行，以便下次你使用的时候能快速启动。

当我运行 Chromium（作为谷歌 Chrome 浏览器所基于的开源项目）时，进程管理便成了问题。 Chromium 在我的笔记本电脑上运行非常吃力，并产生了许多额外的进程。现在我仅打开五个选项卡，就能看到这些 Chromium 进程：

```
$ ps -ef | fgrep chromium
jhall      66221   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      66230   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
[...]
jhall      66861   [...]  /usr/lib64/chromium-browser/chromium-browser [...]
jhall      67329   65132  0 15:45 pts/0    00:00:00 grep -F chromium

```

我已经省略一些行，其中有 20 个 Chromium 进程和一个正在搜索 “chromium" 字符的 `grep` 进程。

```
$ ps -ef | fgrep chromium | wc -l
21

```

但是在我退出 Chromium 之后，这些进程仍旧运行。如何关闭它们并回收这些进程占用的内存和 CPU 呢？

`kill` 命令能让你终止一个进程。在最简单的情况下，你告诉 `kill` 命令终止你想终止的进程的 PID。例如，要终止这些进程，我需要对 20 个 Chromium 进程 ID 都执行 `kill` 命令。一种方法是使用命令行获取 Chromium 的 PID，而另一种方法针对该列表运行 `kill`：

```
$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}'
66221
66230
66239
66257
66262
66283
66284
66285
66324
66337
66360
66370
66386
66402
66503
66539
66595
66734
66848
66861
69702

$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids
$ kill $(cat /tmp/pids)

```

最后两行是关键。第一个命令行为 Chromium 浏览器生成一个进程 ID 列表。第二个命令行针对该进程 ID 列表运行 `kill` 命令。

### 介绍 killall 命令

一次终止多个进程有个更简单方法，使用 `killall` 命令。你或许可以根据名称猜测出，`killall` 会终止所有与该名字匹配的进程。这意味着我们可以使用此命令来停止所有流氓 Chromium 进程。这很简单：

```
$ killall /usr/lib64/chromium-browser/chromium-browser

```

但是要小心使用 `killall`。该命令能够终止与你所给出名称相匹配的所有进程。这就是为什么我喜欢先使用 `ps -ef` 命令来检查我正在运行的进程，然后针对要停止的命令的准确路径运行 `killall`。

你也可以使用 `-i` 或 `--interactive` 参数，来让 `killkill` 在停止每个进程之前提示你。

`killall` 还支持使用 `-o` 或 `--older-than` 参数来查找比特定时间更早的进程。例如，如果你发现了一组已经运行了好几天的恶意进程，这将会很有帮助。又或是，你可以查找比特定时间更晚的进程，例如你最近启动的失控进程。使用 `-y` 或 `--young-than` 参数来查找这些进程。

### 其他管理进程的方式

进程管理是系统维护重要的一部分。在我作为 Unix 和 Linux 系统管理员的早期职业生涯中，杀死非法作业的能力是保持系统正常运行的关键。在如今，你可能不需要亲手在 Linux 上的终止流氓进程，但是知道 `kill` 和 `killall` 能够在最终出现问题时为你提供帮助。

你也能寻找其他方式来管理进程。在我这个案例中，我并不需要在我退出浏览器后，使用 `kill` 或 `killall` 来终止后台 Chromium 进程。在 Chromium 中有个简单设置就可以进行控制：

![Chromium background processes setting](/data/attachment/album/202103/18/230643oguq7o1l222l2h52.png "Chromium background processes setting")

不过，始终关注系统上正在运行哪些进程，并且在需要的时候进行干预是一个明智之举。

---

via: <https://opensource.com/article/20/1/linux-kill-killall>

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

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


在树莓派上设置家庭网络的家长控制

Summary: 用最少的时间和金钱投入，就能保证孩子上网安全。

用最少的时间和金钱投入，就能保证孩子上网安全。

>
> 用最少的时间和金钱投入，就能保证孩子上网安全。
>
>
>

![Family learning and reading together at night in a room](/data/attachment/album/202103/19/092425m353ll5i9zp32ibn.png "Family learning and reading together at night in a room")

家长们一直在寻找保护孩子们上网的方法，从防止恶意软件、横幅广告、弹出窗口、活动跟踪脚本和其他问题，到防止他们在应该做功课的时候玩游戏和看 YouTube。许多企业使用工具来规范员工的网络安全和活动，但问题是如何在家里实现这一点？

简短的答案是一台小巧、廉价的树莓派电脑，它可以让你为孩子和你在家的工作设置<ruby> 家长控制 <rt>  parental controls </rt></ruby>。本文将引导你了解使用树莓派构建自己的启用了家长控制功能的家庭网络有多么容易。

### 安装硬件和软件

对于这个项目，你需要一个树莓派和一个家庭网络路由器。如果你在线购物网站花上 5 分钟浏览，就可以发现很多选择。[树莓派 4](https://www.raspberrypi.org/products/) 和 [TP-Link 路由器](https://www.amazon.com/s?k=tp-link+router&crid=3QRLN3XRWHFTC&sprefix=TP-Link%2Caps%2C186&ref=nb_sb_ss_ts-doa-p_3_7) 是初学者的好选择。

有了网络设备和树莓派后，你需要在 Linux 容器或者受支持的操作系统中安装 [Pi-hole](https://pi-hole.net/)。有几种 [安装方法](https://github.com/pi-hole/pi-hole/#one-step-automated-install)，但一个简单的方法是在你的树莓派上执行以下命令：

```
curl -sSL https://install.pi-hole.net | bash

```

### 配置 Pi-hole 作为你的 DNS 服务器

接下来，你需要在路由器和 Pi-hole 中配置 DHCP 设置：

1. 禁用路由器中的 DHCP 服务器设置
2. 在 Pi-hole 中启用 DHCP 服务器

每台设备都不一样，所以我没有办法告诉你具体需要点击什么来调整设置。一般来说，你可以通过浏览器访问你家的路由器。你的路由器的地址有时会印在路由器的底部，它以 192.168 或 10 开头。

在浏览器中，打开你的路由器的地址，并用你的凭证登录。它通常是简单的 `admin` 和一个数字密码（有时这个密码也打印在路由器上）。如果你不知道登录名，请打电话给你的供应商并询问详情。

在图形界面中，寻找你的局域网内关于 DHCP 的部分，并停用 DHCP 服务器。 你的路由器界面几乎肯定会与我的不同，但这是一个我设置的例子。取消勾选 **DHCP 服务器**：

![Disable DHCP](/data/attachment/album/202103/19/092425x9kgjdg4blc5bcgs.jpg "Disable DHCP")

接下来，你必须在 Pi-hole 上激活 DHCP 服务器。如果你不这样做，除非你手动分配 IP 地址，否则你的设备将无法上网！

### 让你的网络适合家庭

设置完成了。现在，你的网络设备（如手机、平板电脑、笔记本电脑等）将自动找到树莓派上的 DHCP 服务器。然后，每个设备将被分配一个动态 IP 地址来访问互联网。

注意：如果你的路由器设备支持设置 DNS 服务器，你也可以在路由器中配置 DNS 客户端。客户端将把 Pi-hole 作为你的 DNS 服务器。

要设置你的孩子可以访问哪些网站和活动的规则，打开浏览器进入 Pi-hole 管理页面，`http://pi.hole/admin/`。在仪表板上，点击“Whitelist”来添加你的孩子可以访问的网页。你也可以将不允许孩子访问的网站（如游戏、成人、广告、购物等）添加到“Blocklist”。

![Pi-hole admin dashboard](/data/attachment/album/202103/19/092426p0q0z2f9fpf40f73.png "Pi-hole admin dashboard")

### 接下来是什么？

现在，你已经在树莓派上设置了家长控制，你可以让你的孩子更安全地上网，同时让他们访问经批准的娱乐选项。这也可以通过减少你的家庭串流来降低你的家庭网络使用量。更多高级使用方法，请访问 Pi-hole 的[文档](https://docs.pi-hole.net/)和[博客](https://pi-hole.net/blog/#page-content)。

---

via: <https://opensource.com/article/21/3/raspberry-pi-parental-control>

作者：[Daniel Oh](https://opensource.com/users/daniel-oh) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 | GitLab 成立中国合资公司“极狐”，将发布中国版 GitLab

Summary: 更多：• 苹果强推 APP 反追踪功能，国内开发商“创造性”地寻求绕过方案 • 英特尔发布一系列广告嘲笑苹果

GitHub 访问困难，不是最近开始的吧？我感觉，当年突然屏蔽，反对太强烈，所以后来就开始“温水煮青蛙”了。<br />
AMD, YES!

![](/data/attachment/album/202103/19/131959px7216j06s80wjg8.jpg)

### GitLab 成立中国合资公司“极狐”，将发布中国版 GitLab

![](/data/attachment/album/202103/19/132029rzcnb2rj2vkr2y3a.jpg)

这家注册于武汉的公司是 GitLab 公司与红杉宽带以及高成资本共同成立的中国合资公司，首轮获得数亿元人民币投资。GitLab 称，“我们一直期待以适应中国企业需求的本地化方式，扩大 GitLab 开源软件在中国的使用和访问量。”

据[报道](https://www.theregister.com/2021/03/18/gitlab_china_jihu/)，在代码方面，GitLab 将有三个发行版：全球可用且免费的开源软件社区版（CE）、除中国以外各地均可使用的企业版（EE）以及只在中国使用的极狐版（JE）。对 CE 和 EE 的修改会镜像到 JE 上，但对 JE 的修改不会被镜像回来。

对此，我就一点感受，最近 GitHub 在中国的访问极其困难。

### 苹果强推 APP 反追踪功能，国内开发商“创造性”地寻求绕过方案

![](/data/attachment/album/202103/19/132013sa5w02zbpjj7spsi.jpg)

苹果的 APP 反追踪（ATT）功能要求应用程序在追踪用户之前获得用户许可，苹果已经表示将在春季推出这项隐私功能改进。此举招致包括 Facebook、谷歌在内的大型广告公司强烈反对，因为几乎没有人会乐意这些 App 跟踪自己。

而据报道，已有中国的应用开发商在测试绕过 ATT 的变通方案，一些中国的科技巨头和广告协会正在测试一种名为 CAID 标识的新工具，以绕开苹果公司的新隐私规则，从而对 iPhone 用户的数据继续进行跟踪，并为他们提供针对性的移动广告。但中国广告协会表示，该解决方案将不会反对苹果的隐私政策，正在与苹果积极沟通。

其实追踪不追踪，对被迫看广告的用户并不是最大的问题，反正你总是要被看广告的不是？

### 英特尔发布一系列广告嘲笑苹果

![](/data/attachment/album/202103/19/132135t5pzp555kcbc1151.jpg)

曾经的合作伙伴如今“反目成仇”：这个芯片巨头发布了[一系列广告](https://www.youtube.com/channel/UCk7SjrXVXAj8m8BLgzh6dGA)嘲笑苹果的 M1 ARM 电脑。广告对比了使用英特尔 CPU 的 Windows PC 和使用 M1 的苹果电脑，鉴于英特尔 CPU 的性能弱于苹果的 M1 和 AMD Ryzen CPU，广告主要突出的是功能和用户体验而不是性能。

英特尔仍然在为苹果的部分型号 Mac 供应芯片，但未来绝大部分的 Mac 电脑都将会改用它自己设计的 ARM 芯片。

曾经的好伙伴，如今也要分道扬镳了。


在 FreeDOS 中设置你的路径

Summary: 学习 FreeDOS 路径的知识，如何设置它，并且如何使用它。

学习 FreeDOS 路径的知识，如何设置它，并且如何使用它。

>
> 学习 FreeDOS 路径的知识，如何设置它，并且如何使用它。
>
>
>

![查看职业生涯地图](/data/attachment/album/202103/20/103013mmfxs0t999xuxtwx.png "Looking at a map for career journey")

你在开源 [FreeDOS](https://www.freedos.org/) 操作系统中所做的一切工作都是通过命令行完成的。命令行以一个 *提示符* 开始，这是计算机说法的方式，“我准备好了。请给我一些事情来做。”你可以配置你的提示符的外观，但是默认情况下，它是：

```
C:\>

```

从命令行中，你可以做两件事：运行一个内部命令或运行一个程序。外部命令是在你的 `FDOS` 目录中可找到的以单独文件形式存在的程序，以便运行程序包括运行外部命令。它也意味着你可以使用你的计算机运行应用程序软件来做一些东西。你也可以运行一个批处理文件，但是在这种情况下，你所做的全部工作就变成了运行批处理文件中所列出的一系列命令或程序。

### 可执行应用程序文件

FreeDOS 可以运行三种类型的应用程序文件：

1. **COM** 是一个用机器语言写的，且小于 64 KB 的文件。
2. **EXE** 也是一个用机器语言写的文件，但是它可以大于 64 KB 。此外，在 EXE 文件的开头部分有信息，用于告诉 DOS 系统该文件是什么类型的以及如何加载和运行。
3. **BAT** 是一个使用文本编辑器以 ASCII 文本格式编写的 *批处理文件* ，其中包含以批处理模式执行的 FreeDOS 命令。这意味着每个命令都会按顺序执行到文件的结尾。

如果你所输入的一个文件名称不能被 FreeDOS 识别为一个内部命令或一个程序，你将收到一个错误消息 “Bad command or filename” 。如果你看到这个错误，它意味着会是下面三种情况中的其中一种：

1. 由于某些原因，你所给予的名称是错误的。你可能拼错了文件名称，或者你可能正在使用错误的命令名称。检查名称和拼写，并再次尝试。
2. 可能你正在尝试运行的程序并没有安装在计算机上。请确认它已经安装了。
3. 文件确实存在，但是 FreeDOS 不知道在哪里可以找到它。

在清单上的最后一项就是这篇文章的主题，它被称为路径。如果你已经习惯于使用 Linux 或 Unix ，你可能已经理解 [PATH 变量](https://opensource.com/article/17/6/set-path-linux) 的概念。如果你是命令行的新手，那么路径是一个非常重要的足以让你舒适的东西。

### 路径

当你输入一个可执行应用程序文件的名称时，FreeDOS 必须能找到它。FreeDOS 会在一个具体指定的位置层次结构中查找文件：

1. 首先，它查找当前驱动器的活动目录（称为 *工作目录*）。如果你正在目录 `C:\FDOS` 中，接着，你输入名称 `FOOBAR.EXE`，FreeDOS 将在 `C:\FDOS` 中查找带有这个名称的文件。你甚至不需要输入完整的名称。如果你输入 `FOOBAR` ，FreeDOS 将查找任何带有这个名称的可执行文件，不管它是 `FOOBAR.EXE`，`FOOBAR.COM`，或 `FOOBAR.BAT`。只要 FreeDOS 能找到一个匹配该名称的文件，它就会运行该可执行文件。
2. 如果 FreeDOS 不能找到你所输入名称的文件，它将查询被称为 `PATH` 的一些东西。每当 DOS 不能在当前活动命令中找到文件时，会指示 DOS 检查这个列表中目录。

你可以随时使用 `path` 命令来查看你的计算机的路径。只需要在 FreeDOS 提示符中输入 `path` ，FreeDOS 就会返回你的路径设置：

```
C:\>path
PATH=C:\FDOS\BIN

```

第一行是提示符和命令，第二行是计算机返回的东西。你可以看到 DOS 第一个查看的位置就是位于 `C` 驱动器上的 `FDOS\BIN`。如果你想更改你的路径，你可以输入一个 `path` 命令以及你想使用的新路径：

```
C:\>path=C:\HOME\BIN;C:\FDOS\BIN

```

在这个示例中，我设置我的路径到我个人的 `BIN` 文件夹，我把它放在一个叫 `HOME` 的自定义目录中，然后再设置为 `FDOS/BIN`。现在，当你检查你的路径时：

```
C:\>path
PATH=C:\HOME\BIN;C:\FDOS\BIN

```

路径设置是按所列目录的顺序处理的。

你可能会注意到有一些字符是小写的，有一些字符是大写的。你使用哪一种都真的不重要。FreeDOS 是不区分大小写的，并且把所有的东西都作为大写字母对待。在内部，FreeDOS 使用的全是大写字母，这就是为什么你看到来自你命令的输出都是大写字母的原因。如果你以小写字母的形式输入命令和文件名称，在一个转换器将自动转换它们为大写字母后，它们将被执行。

输入一个新的路径来替换先前设置的路径。

### autoexec.bat 文件

你可能遇到的下一个问题的是 FreeDOS 默认使用的第一个路径来自何处。这与其它一些重要的设置一起定义在你的 `C` 驱动器的根目录下的 `AUTOEXEC.BAT` 文件中。这是一个批处理文件，它在你启动 FreeDOS 时会自动执行（由此得名）。你可以使用 FreeDOS 程序 `EDIT` 来编辑这个文件。为查看或编辑这个文件的内容，输入下面的命令：

```
C:\>edit autoexec.bat

```

这一行出现在顶部附近：

```
SET PATH=%dosdir%\BIN

```

这一行定义默认路径的值。

在你查看 `AUTOEXEC.BAT` 后，你可以通过依次按下面的按键来退出 EDIT 应用程序：

1. `Alt`
2. `f`
3. `x`

你也可以使用键盘快捷键 `Alt+X`。

### 使用完整的路径

如果你在你的路径中忘记包含 `C:\FDOS\BIN` ，那么你将不能快速访问存储在这里的任何应用程序，因为 FreeDOS 不知道从哪里找到它们。例如，假设我设置我的路径到我个人应用程序集合：

```
C:\>path=C:\HOME\BIN

```

内置在命令行中应用程序仍然能正常工作：

```
C:\cd HOME
C:\HOME>dir
ARTICLES
BIN
CHEATSHEETS
GAMES
DND

```

不过，外部的命令将不能运行：

```
C:HOME\ARTICLES>BZIP2 -c example.txt
Bad command or filename - "BZIP2"

```

通过提供命令的一个 *完整路径* ，你可以总是执行一个在你的系统上且不在你的路径中的命令：

```
C:HOME\ARTICLES>C:\FDOS\BIN\BZIP2 -c example.txt
C:HOME\ARTICLES>DIR
example.txb

```

你可以使用同样的方法从外部介质或其它目录执行应用程序。

### FreeDOS 路径

通常情况下，你很可能希望在路径中保留 `C:\PDOS\BIN` ，因为它包含所有使用 FreeDOS 分发的默认应用程序。

除非你更改 `AUTOEXEC.BAT` 中的路径，否则将在重新启动后恢复默认路径。

现在，你知道如何在 FreeDOS 中管理你的路径，你能够以最适合你的方式了执行命令和维护你的工作环境。

*致谢 [DOS 课程 5: 路径](https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-5-the-path/) (在 CC BY-SA 4.0 协议下发布) 为本文提供的一些信息。*

---

via: <https://opensource.com/article/21/2/path-freedos>

作者：[Kevin O'Brien](https://opensource.com/users/ahuka) 选题：[lujun9972](https://github.com/lujun9972) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

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


5 个用命令行操作 LibreOffice 的技巧

Summary: 直接在命令行中对文件进行转换、打印、保护等操作。

图片爱了。

我是来看图片的

特意去原文网站看了，没找到图片。<br />
小编有心了

有没有批量替换功能

给你一个大大的赞

能不能命令行删除空白页？

直接在命令行中对文件进行转换、打印、保护等操作。

>
> 直接在命令行中对文件进行转换、打印、保护等操作。
>
>
>

![](/data/attachment/album/202103/20/110200xjkkijnjixbyi4ui.jpg "hot keys for shortcuts or features on computer keyboard")

LibreOffice 拥有所有你想要的办公软件套件的生产力功能，使其成为微软 Office 或谷歌套件的流行的开源替代品。LibreOffice 的能力之一是可以从命令行操作。例如，Seth Kenlon 最近解释了如何使用 LibreOffice 用全局 [命令行选项将多个文件](https://opensource.com/article/21/2/linux-workday) 从 DOCX 转换为 EPUB。他的文章启发我分享一些其他 LibreOffice 命令行技巧和窍门。

在查看 LibreOffice 命令的一些隐藏功能之前，你需要了解如何使用应用选项。并不是所有的应用都接受选项（除了像 `--help` 选项这样的基本选项，它在大多数 Linux 应用中都可以使用）。

```
$ libreoffice --help

```

这将返回 LibreOffice 接受的其他选项的描述。有些应用没有太多选项，但 LibreOffice 好几页有用的选项，所以有很多东西可以玩。

就是说，你可以在终端上使用 LibreOffice 进行以下五项有用的操作，来让使软件更加有用。

### 1、自定义你的启动选项

你可以修改你启动 LibreOffice 的方式。例如，如果你想只打开 LibreOffice 的文字处理器组件：

```
$ libreoffice --writer  # 启动文字处理器

```

你可以类似地打开它的其他组件：

```
$ libreoffice --calc  # 启动一个空的电子表格
$ libreoffice --draw  # 启动一个空的绘图文档
$ libreoffice --web   # 启动一个空的 HTML 文档

```

你也可以从命令行访问特定的帮助文件：

```
$ libreoffice --helpwriter

```

![LibreOffice Writer help](/data/attachment/album/202103/20/110214qxezvq6po9me16pb.png "LibreOffice Writer help")

或者如果你需要电子表格应用方面的帮助：

```
$ libreoffice --helpcalc

```

你可以在不显示启动屏幕的情况下启动 LibreOffice：

```
$ libreoffice --writer --nologo

```

你甚至可以在你完成当前窗口的工作时，让它在后台最小化启动：

```
$ libreoffice --writer --minimized

```

### 2、以只读模式打开一个文件

你可以使用 `--view` 以只读模式打开文件，以防止意外地对重要文件进行修改和保存：

```
$ libreoffice --view example.odt

```

### 3、打开一个模板文档

你是否曾经创建过用作信头或发票表格的文档？LibreOffice 具有丰富的内置模板系统，但是你可以使用 `-n` 选项将任何文档作为模板：

```
$ libreoffice --writer -n example.odt

```

你的文档将在 LibreOffice 中打开，你可以对其进行修改，但保存时不会覆盖原始文件。

### 4、转换文档

当你需要做一个小任务，比如将一个文件转换为新的格式时，应用启动的时间可能与完成任务的时间一样长。解决办法是 `--headless` 选项，它可以在不启动图形用户界面的情况下执行 LibreOffice 进程。

例如，在 LibreOffic 中，将一个文档转换为 EPUB 是一个非常简单的任务，但使用 `libreoffice` 命令就更容易：

```
$ libreoffice --headless --convert-to epub example.odt

```

使用通配符意味着你可以一次转换几十个文档：

```
$ libreoffice --headless --convert-to epub *.odt

```

你可以将文件转换为多种格式，包括 PDF、HTML、DOC、DOCX、EPUB、纯文本等。

### 5、从终端打印

你可以从命令行打印 LibreOffice 文档，而无需打开应用：

```
$ libreoffice --headless -p example.odt

```

这个选项不需要打开 LibreOffice 就可以使用默认打印机打印，它只是将文档发送到你的打印机。

要打印一个目录中的所有文件：

```
$ libreoffice -p *.odt

```

（我不止一次执行了这个命令，然后用完了纸，所以在你开始之前，确保你的打印机里有足够的纸张。）

你也可以把文件输出成 PDF。通常这和使用 `--convert-to-pdf` 选项没有什么区别，但是很容易记住：

```
$ libreoffice --print-to-file example.odt --headless

```

### 额外技巧：Flatpak 和命令选项

如果你是使用 [Flatpak](https://www.libreoffice.org/download/flatpak/) 安装的 LibreOffice，所有这些命令选项都可以使用，但你必须通过 Flatpak 传递。下面是一个例子：

```
$ flatpak run org.libreoffice.LibreOffice --writer

```

它比本地安装要麻烦得多，所以你可能会受到启发 [写一个 Bash 别名](https://opensource.com/article/19/7/bash-aliases) 来使它更容易直接与 LibreOffice 交互。

### 令人惊讶的终端选项

通过查阅手册页面，了解如何从命令行扩展 LibreOffice 的功能：

```
$ man libreoffice

```

你是否知道 LibreOffice 具有如此丰富的命令行选项？ 你是否发现了其他人似乎都不了解的其他选项？ 请在评论中分享它们！

---

via: <https://opensource.com/article/21/3/libreoffice-command-line>

作者：[Don Watkins](https://opensource.com/users/don-watkins) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 | 美国银行表示没有理由支持比特币

Summary: 更多：• 英国警方警告学生不要使用 Sci-Hub 网站 • 安全研究人员在 Twitter 上的 PNG 文件内隐藏了 ZIP、MP3 文件

![](/data/attachment/album/202103/20/114941xowbhjjz0jj9w9jf.jpg)

### 美国银行表示没有理由支持比特币

![](/data/attachment/album/202103/20/114951u500zqyyfq56l9kh.jpg)

美国银行表示：“持有比特币的唯一原因是价格的上涨……非常不稳定，这使得它不适合作为财富储存或支付机制”。美国银行的分析师认为，约 9300 万美元的净流入足以推动比特币价格上涨 1%。相比之下，需要 18.6 亿美元才能带动黄金价格。比特币是一种高度集中的资产，目前 95% 的比特币仅由2.4% 的比特币地址持有。美国银行认为，这使得这种工具不适合作为支付机制，甚至不适合作为投资工具。

比特币确实风险很大，只有你了解其中的风险才应该去涉足它。

### 英国警方警告学生不要使用 Sci-Hub 网站

![](/data/attachment/album/202103/20/115003nz71i4iogww0gp3z.jpg)

Sci-Hub 网站称，它“消除了所有科学障碍”。它提供超过 8500 万篇科学论文的开放访问权限，并声称应该废除版权法，这些材料应该成为“所有人的知识”。它称自己是“世界上第一个为大众提供数千万篇研究论文的盗版网站”。

但伦敦市警方的网络保护官员[敦促各大学在其网络上屏蔽该网站](https://www.bbc.com/news/education-56462390 "https://www.bbc.com/news/education-56462390")，因为“Sci-Hub 对大学及其学生都构成了威胁”。

不知道你怎么看，这些论文应该盗版访问吗？

### 安全研究人员在 Twitter 上的 PNG 文件内隐藏了 ZIP、MP3 文件

![](/data/attachment/album/202103/20/115014q1k33ecllaczh0i1.png)

一名安全研究人员发现了一种新型的[隐身技术](https://threatpost.com/researcher-hides-files-in-png-twitter/164881/ "https://threatpost.com/researcher-hides-files-in-png-twitter/164881/")，可以将数据隐藏在 Twitter 上发布的 .PNG 图像文件内，这种策略可能被威胁行为者利用来隐藏恶意活动。他将他的方法的源码以 ZIP/PNG 文件的形式附在 Twitter 的一张图片上。他解释说，虽然 Twitter 会从上传的 PNG 中剥离不必要的数据，但如果整体图像文件符合要求，他们不会从删除尾部数据，以避免被重新编码。虽然存在一定限制，但是这为传播恶意文件打开的一个新的途径。

所以，不要觉得公开下载的图片，看起来也正常的图片，就不会存在恶意数据。


10 个常见的 Linux 终端仿真器

Summary: 默认情况下，所有的 Linux 发行版都已经预装了“终端”应用程序或“终端仿真器”（这才是正确的技术术语）。

对我来说这种内容才是比较有用的，多谢分享，加油！

![](/data/attachment/album/202103/21/073043q4j4o6hr33b595j4.jpg)

默认情况下，所有的 Linux 发行版都已经预装了“<ruby> 终端 <rt>  terminal </rt></ruby>”应用程序或“<ruby> 终端仿真器 <rt>  terminal emulator </rt></ruby>”（这才是正确的技术术语）。当然，根据桌面环境的不同，它的外观和感觉会有所不同。

Linux 的特点是，你可以不用局限于你的发行版所提供的东西，你可以用你所选择的替代应用程序。终端也不例外。有几个提供了独特功能的终端仿真器令人印象深刻，可以获得更好的用户体验或更好的外观。

在这里，我将整理一个有趣的终端应用程序的列表，你可以在你的 Linux 发行版上尝试它们。

### 值得赞叹的 Linux 终端仿真器

此列表没有特别的排名顺序，我会先列出一些有趣的，然后是一些最流行的终端仿真器。此外，我还强调了每个提到的终端仿真器的主要功能，你可以选择你喜欢的终端仿真器。

#### 1、Terminator

![](/data/attachment/album/202103/21/073154taxq4dnpvp0ddev4.jpg)

主要亮点：

* 可以在一个窗口中使用多个 GNOME 终端

[Terminator](https://gnome-terminator.org) 是一款非常流行的终端仿真器，目前仍在维护中（从 Launchpad 移到了 GitHub）。

它基本上是在一个窗口中为你提供了多个 GNOME 终端。在它的帮助下，你可以轻松地对终端窗口进行分组和重组。你可能会觉得这像是在使用平铺窗口管理器，不过有一些限制。

##### 如何安装 Terminator？

对于基于 Ubuntu 的发行版，你只需在终端输入以下命令:

```
sudo apt install terminator

```

你应该可以在大多数 Linux 发行版的默认仓库中找到它。但是，如果你需要安装帮助，请访问它的 [GitHub 页面](https://github.com/gnome-terminator/terminator)。

#### 2、Guake 终端

![](/data/attachment/album/202103/21/073154qf2pf6ggu27htfgp.png)

主要亮点：

* 专为在 GNOME 上快速访问终端而设计
* 工作速度快，不需要大量的系统资源
* 访问的快捷键

[Guake](https://github.com/Guake/guake) 终端最初的灵感来自于一款 FPS 游戏 Quake。与其他一些终端仿真器不同的是，它的工作方式是覆盖在其他的活动窗口上。

你所要做的就是使用快捷键（`F12`）召唤该仿真器，它就会从顶部出现。你可以自定义该仿真器的宽度或位置，但大多数用户使用默认设置就可以了。

它不仅仅是一个方便的终端仿真器，还提供了大量的功能，比如能够恢复标签、拥有多个标签、对每个标签进行颜色编码等等。你可以查看我关于 [Guake 的单独文章](https://itsfoss.com/guake-terminal/) 来了解更多。

##### 如何安装 Guake 终端？

Guake 在大多数 Linux 发行版的默认仓库中都可以找到，你可以参考它的 [官方安装说明](https://guake.readthedocs.io/en/latest/user/installing.html#system-wide-installation)。

如果你使用的是基于 Debian 的发行版，只需输入以下命令：

```
sudo apt install guake

```

#### 3、Tilix 终端

![](/data/attachment/album/202103/21/073155dppanr4nkxs60x68.png)

主要亮点：

* 平铺功能
* 支持拖放
* 下拉式 Quake 模式

[Tilix](https://gnunn1.github.io/tilix-web/) 终端提供了与 Guake 类似的下拉式体验 —— 但它允许你在平铺模式下拥有多个终端窗口。

如果你的 Linux 发行版中默认没有平铺窗口，而且你有一个大屏幕，那么这个功能就特别有用，你可以在多个终端窗口上工作，而不需要在不同的工作空间之间切换。

如果你想了解更多关于它的信息，我们之前已经 [单独介绍](https://itsfoss.com/tilix-terminal-emulator/) 过了。

##### 如何安装 Tilix？

Tilix 在大多数发行版的默认仓库中都有。如果你使用的是基于 Ubuntu 的发行版，只需输入：

```
sudo apt install tilix

```

#### 4、Hyper

![](/data/attachment/album/202103/21/073155b7x9ijnun4paa34j.png)

主要亮点：

* 基于 HTML/CSS/JS 的终端
* 基于 Electron
* 跨平台
* 丰富的配置选项

[Hyper](https://hyper.is/) 是另一个有趣的终端仿真器，它建立在 Web 技术之上。它并没有提供独特的用户体验，但看起来很不一样，并提供了大量的自定义选项。

它还支持安装主题和插件来轻松定制终端的外观。你可以在他们的 [GitHub 页面](https://github.com/vercel/hyper) 中探索更多关于它的内容。

##### 如何安装 Hyper？

Hyper 在默认的资源库中是不可用的。然而，你可以通过他们的 [官方网站](https://hyper.is/#installation) 找到 .deb 和 .rpm 包来安装。

如果你是新手，请阅读文章以获得 [使用 deb 文件](https://itsfoss.com/install-deb-files-ubuntu/) 和 [使用 rpm 文件](https://itsfoss.com/install-rpm-files-fedora/) 的帮助。

#### 5、Tilda

![](/data/attachment/album/202103/21/073156bcnchqgnb6gnlkiv.jpg)

主要亮点：

* 下拉式终端
* 搜索栏整合

[Tilda](https://github.com/lanoxx/tilda) 是另一款基于 GTK 的下拉式终端仿真器。与其他一些不同的是，它提供了一个你可以切换的集成搜索栏，还可以让你自定义很多东西。

你还可以设置热键来快速访问或执行某个动作。从功能上来说，它是相当令人印象深刻的。然而，在视觉上，我不喜欢覆盖的行为，而且它也不支持拖放。不过你可以试一试。

##### 如何安装 Tilda？

对于基于 Ubuntu 的发行版，你可以简单地键入：

```
sudo apt install tilda

```

你可以参考它的 [GitHub 页面](https://github.com/lanoxx/tilda)，以了解其他发行版的安装说明。

#### 6、eDEX-UI

![](/data/attachment/album/202103/21/073156pmbhka1118jknqz8.png)

主要亮点：

* 科幻感的外观
* 跨平台
* 自定义主题选项
* 支持多个终端标签

如果你不是特别想找一款可以帮助你更快的完成工作的终端仿真器，那么 [eDEX-UI](https://github.com/GitSquared/edex-ui) 绝对是你应该尝试的。

对于科幻迷和只想让自己的终端看起来独特的用户来说，这绝对是一款漂亮的终端仿真器。如果你不知道，它的灵感很大程度上来自于电影《创：战纪》。

不仅仅是设计或界面，总的来说，它为你提供了独特的用户体验，你会喜欢的。它还可以让你 [自定义终端](https://itsfoss.com/customize-linux-terminal/)。如果你打算尝试的话，它确实需要大量的系统资源。

你不妨看看我们 [专门介绍 eDEX-UI](https://itsfoss.com/edex-ui-sci-fi-terminal/) 的文章，了解更多关于它的信息和安装步骤。

##### 如何安装 eDEX-UI？

你可以在一些包含 [AUR](https://itsfoss.com/aur-arch-linux/) 的仓库中找到它。无论是哪种情况，你都可以从它的 [GitHub 发布部分](https://github.com/GitSquared/edex-ui/releases) 中抓取一个适用于你的 Linux 发行版的软件包（或 AppImage 文件）。

#### 7、Cool Retro Terminal

![](/data/attachment/album/202103/21/073157wu9b3oluml09zljd.jpg)

主要亮点：

* 复古主题
* 动画/效果调整

[Cool Retro Terminal](https://github.com/Swordfish90/cool-retro-term) 是一款独特的终端仿真器，它为你提供了一个复古的阴极射线管显示器的外观。

如果你正在寻找一些额外功能的终端仿真器，这可能会让你失望。然而，令人印象深刻的是，它在资源上相当轻盈，并允许你自定义颜色、效果和字体。

##### 如何安装 Cool Retro Terminal？

你可以在其 [GitHub 页面](https://github.com/Swordfish90/cool-retro-term) 中找到所有主流 Linux 发行版的安装说明。对于基于 Ubuntu 的发行版，你可以在终端中输入以下内容：

```
sudo apt install cool-retro-term

```

#### 8、Alacritty

![](/data/attachment/album/202103/21/073158kydzbb1oczy1bpu4.png)

主要亮点：

* 跨平台
* 选项丰富，重点是整合。

[Alacritty](https://github.com/alacritty/alacritty) 是一款有趣的开源跨平台终端仿真器。尽管它被认为是处于“测试”阶段的东西，但它仍然可以工作。

它的目标是为你提供广泛的配置选项，同时考虑到性能。例如，使用键盘点击 URL、将文本复制到剪贴板、使用 “Vi” 模式进行搜索等功能可能会吸引你去尝试。

你可以探索它的 [GitHub 页面](https://github.com/alacritty/alacritty) 了解更多信息。

##### 如何安装 Alacritty？

官方 GitHub 页面上说可以使用包管理器安装 Alacritty，但我在 Linux Mint 20.1 的默认仓库或 [synaptic 包管理器](https://itsfoss.com/synaptic-package-manager/) 中找不到它。

如果你想尝试的话，可以按照 [安装说明](https://github.com/alacritty/alacritty/blob/master/INSTALL.md#debianubuntu) 来手动设置。

#### 9、Konsole

![](/data/attachment/album/202103/21/073158g1osmgo3i4hcmfmz.png)

主要亮点：

* KDE 的终端
* 轻巧且可定制

如果你不是新手，这个可能不用介绍了。[Konsole](https://konsole.kde.org/) 是 KDE 桌面环境的默认终端仿真器。

不仅如此，它还集成了很多 KDE 应用。即使你使用的是其他的桌面环境，你也可以试试 Konsole。它是一个轻量级的终端仿真器，拥有众多的功能。

你可以拥有多个标签和多个分组窗口。以及改变终端仿真器的外观和感觉的大量的自定义选项。

##### 如何安装 Konsole？

对于基于 Ubuntu 的发行版和大多数其他发行版，你可以使用默认的版本库来安装它。对于基于 Debian 的发行版，你只需要在终端中输入以下内容：

```
sudo apt install konsole

```

#### 10、GNOME 终端

![](/data/attachment/album/202103/21/073159lbutvg5b5pzban1t.jpg)

主要亮点：

* GNOME 的终端
* 简单但可定制

如果你使用的是任何基于 Ubuntu 的 GNOME 发行版，它已经是天生的了，它可能不像 Konsole 那样可以自定义，但它可以让你轻松地配置终端的大部分重要方面。它可能不像 Konsole 那样可以自定义（取决于你在做什么），但它可以让你轻松配置终端的大部分重要方面。

总的来说，它提供了良好的用户体验和易于使用的界面，并提供了必要的功能。

如果你好奇的话，我还有一篇 [自定义你的 GNOME 终端](https://itsfoss.com/customize-linux-terminal/) 的教程。

##### 如何安装 GNOME 终端？

如果你没有使用 GNOME 桌面，但又想尝试一下，你可以通过默认的软件仓库轻松安装它。

对于基于 Debian 的发行版，以下是你需要在终端中输入的内容：

```
sudo apt install gnome-terminal

```

### 总结

有好几个终端仿真器。如果你正在寻找不同的用户体验，你可以尝试任何你喜欢的东西。然而，如果你的目标是一个稳定的和富有成效的体验，你需要测试一下，然后才能依靠它们。

对于大多数用户来说，默认的终端仿真器应该足够好用了。但是，如果你正在寻找快速访问（Quake 模式）、平铺功能或在一个终端中的多个窗口，请试试上述选择。

你最喜欢的 Linux 终端仿真器是什么？我有没有错过列出你最喜欢的？欢迎在下面的评论中告诉我你的想法。

---

via: <https://itsfoss.com/linux-terminal-emulators/>

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

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


利用树莓派和低功耗显示器来跟踪你的家庭日程表

Summary: 通过利用开源工具和电子墨水屏，让每个人都清楚家庭的日程安排。

通过利用开源工具和电子墨水屏，让每个人都清楚家庭的日程安排。

>
> 通过利用开源工具和电子墨水屏，让每个人都清楚家庭的日程安排。
>
>
>

![](/data/attachment/album/202103/21/091512dkbgb3vzgjrz2935.jpg "Calendar with coffee and breakfast")

有些家庭的日程安排很复杂：孩子们有上学活动和放学后的活动，你想要记住的重要事情，每个人都有多个约会等等。虽然你可以使用手机和应用程序来关注所有事情，但在家中放置一个大型低功耗显示器以显示家人的日程不是更好吗？电子墨水日程表刚好满足！

![E Ink calendar](/data/attachment/album/202103/21/091525ksnt71mvc585fu5k.jpg "E Ink calendar")

### 硬件

这个项目是作为假日项目开始，因此我试着尽可能多的旧物利用。其中包括一台已经闲置了太长时间树莓派 2。由于我没有电子墨水屏，因此我需要购买一个。幸运的是，我找到了一家供应商，该供应商为支持树莓派的屏幕提供了 [开源驱动程序和示例](https://github.com/waveshare/e-Paper)，该屏幕使用 [GPIO](https://opensource.com/article/19/3/gpio-pins-raspberry-pi) 端口连接。

我的家人还想在不同的日程表之间切换，因此需要某种形式的输入。我没有添加 USB 键盘，而是选择了一种更简单的解决方案，并购买了一个类似于在 [这篇文章](https://www.instructables.com/1x4-Membrane-Keypad-w-Arduino/) 中所描述 1x4 大小的键盘。这使我可以将键盘连接到树莓派中的某些 GPIO 端口。

最后，我需要一个相框来容纳整个设置。虽然背面看起来有些凌乱，但它能完成工作。

![Calendar internals](/data/attachment/album/202103/21/091526rojamnnbfa52ce8f.jpg "Calendar internals")

### 软件

我从 [一个类似的项目](https://github.com/zli117/EInk-Calendar) 中获得了灵感，并开始为我的项目编写 Python 代码。我需要从两个地方获取数据：

* 天气信息：从 [OpenWeather API](https://openweathermap.org) 获取
* 时间信息：我打算使用 [CalDav 标准](https://en.wikipedia.org/wiki/CalDAV) 连接到一个在我家服务器上运行的日程表

由于必须等待一些零件的送达，因此我使用了模块化的方法来进行输入和显示，这样我可以在没有硬件的情况下调试大多数代码。日程表应用程序需要驱动程序，于是我编写了一个 [Pygame](https://github.com/pygame/pygame) 驱动程序以便能在台式机上运行它。

编写代码最好的部分是能够重用现有的开源项目，所以访问不同的 API 很容易。我可以专注于设计用户界面，其中包括每个人的周历和每个人的日历，以及允许使用小键盘来选择日程。并且我花时间又添加了一些额外的功能，例如特殊日子的自定义屏幕保护程序。

![E Ink calendar screensaver](/data/attachment/album/202103/21/091527ajgp7xgx7s1quhx8.jpg "E Ink calendar screensaver")

最后的集成步骤将确保我的日程表应用程序将在启动时运行，并且能够容错。我使用了一个基本的 [树莓派系统](https://www.raspberrypi.org/software/) 镜像，并将该应用程序配置到 systemd 服务，以便它可以在出现故障和系统重新启动依旧运行。

做完所有工作，我把代码上传到了 [GitHub](https://github.com/javierpena/eink-calendar)。因此，如果你要创建类似的日历，可以随时查看并重构它！

### 结论

日程表已成为我们厨房中的日常工具。它可以帮助我们记住我们的日常活动，甚至我们的孩子在上学前，都可以使用它来查看日程的安排。

对我而言，这个项目让我感受到开源的力量。如果没有开源的驱动程序、库以及开放 API，我们依旧还在用纸和笔来安排日程。很疯狂，不是吗？

需要确保你的日程不冲突吗？学习如何使用这些免费的开源项目来做到这点。

---

via: <https://opensource.com/article/21/3/family-calendar-raspberry-pi>

作者：[Javier Pena](https://opensource.com/users/jpena) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wyxplus](https://github.com/wyxplus) 校对：[wxy](https://github.com/wxy)

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


硬核观察 | Linux 基金会发起庆祝 Linux 三十岁生日的活动

Summary: 更多：• Rust 支持进入 Linux-Next 分支 • 传统 IDE 驱动将被从 Linux 内中删除

![](/data/attachment/album/202103/21/103651b1r4oz541v7l0ww4.jpg)

### Linux 基金会发起庆祝 Linux 三十岁生日的活动

![](/data/attachment/album/202103/21/103710zz7911621t71z96a.jpg)

虽然距离 Linux 的生日（1991/9/17）还有不少时间，但是今年 Linux 基金会已经开始提前半年[庆祝 Linux 三十岁生日](https://linuxfoundation.org/linux30th/ "https://linuxfoundation.org/linux30th/")了。Linux 基金会已经为此制作了多张宣传海报，还准备在今年 4 月在其线上商店推出 30 周年纪念周边。

作为 Linux 的吉祥物，那只名为“Tux” 的小企鹅，居然都已经三十岁了。

### Rust 支持进入 Linux-Next 分支

![](/data/attachment/album/202103/21/103729mwhlh3pyuymp3sij.jpg)

Linux-Next 主要用于存放一些将在下一周期合并进内核主支的代码。它最近加入[对 Rust 的初步支持](https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/rust "https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tree/rust")，如果未来对 Rust 的支持合并到 Linux 主支，这将是用 Rust 编写设备驱动迈出的重要一步。

Linux 对 Rust 寄望很高，但是毕竟 Rust 还很新，所以对于将 Rust 作为内核支持的驱动语言，还是非常审慎的。

### 传统 IDE 驱动将被从 Linux 内中删除

![](/data/attachment/album/202103/21/103744scsas343k3k444xu.jpg)

两年前，传统的 IDE 驱动代码就已经实质上在 Linux 中废弃，开发者正在准备[在今年移除它](https://www.phoronix.com/scan.php?page=news_item&px=Linux-Drop-Legacy-IDE-2021 "https://www.phoronix.com/scan.php?page=news_item&px=Linux-Drop-Legacy-IDE-2021")，大约可以减少 41000 多行内核代码。不过这不代表 IDE 设备就不能使用了，这只是移除传统的 IDE 驱动程序，IDE 本身仍将通过 libata 层在 Linux 内核上得到支持。

有谁还在使用 IDE 设备？虽然 Linux 内核内的各种驱动都是模块化的，但是我觉得现在硬件发展这么快，应该加大老旧硬件的支持淘汰力度了，不应该将宝贵的人力放在这上面。


四个新式开源许可证

Summary: 让我们来看看 OSI 最新批准的加密自治许可证和 CERN 开源硬件许可协议。

让我们来看看 OSI 最新批准的加密自治许可证和 CERN 开源硬件许可协议。

>
> 让我们来看看 OSI 最新批准的加密自治许可证和 CERN 开源硬件许可协议。
>
>
>

![](/data/attachment/album/202103/21/221014mw8lhxox0kkjk04z.jpg "Law books in a library")

作为 <ruby>   开源定义  <rt>  Open Source Defintion </rt></ruby>（OSD）的管理者，<ruby>   开源促进会  <rt>  Open Source Initiative </rt></ruby>（OSI）20 年来一直在批准“开源”许可证。这些许可证是开源软件生态系统的基础，可确保每个人都可以使用、改进和共享软件。当一个许可证获批为“开源”时，是因为 OSI 认为该许可证可以促进相互的协作和共享，从而使得每个参与开源生态的人获益。

在过去的 20 年里，世界发生了翻天覆地的变化。现如今，软件以新的甚至是无法想象的方式在被使用。OSI 已经预料到，曾经被人们所熟知的开源许可证现已无法满足如今的要求。因此，许可证管理者已经加强了工作，为更广泛的用途提交了几个新的许可证。OSI 所面临的挑战是在评估这些新的许可证概念是否会继续推动共享和合作，是否被值得称为“开源”许可证，最终 OSI 批准了一些用于特殊领域的新式许可证。

### 四个新式许可证

第一个是 <ruby>   加密自治许可证  <rt>  Cryptographic Autonomy License </rt></ruby>（CAL）。该许可证是为分布式密码应用程序而设计的。此许可证所解决的问题是，现有的开源许可证无法保证开放性，因为如果没有义务也与其他对等体共享数据，那么一个对等体就有可能损害网络的运行。因此，除了是一个强有力的版权保护许可外，CAL 还包括向第三方提供独立使用和修改软件所需的权限和资料的义务，而不会让第三方有数据或功能的损失。

随着越来越多的人使用加密结构进行点对点共享，那么更多的开发人员发现自己需要诸如 CAL 之类的法律工具也就不足为奇了。 OSI 的两个邮件列表 License-Discuss 和 License-Review 上的社区，讨论了拟议的新开源许可证，并询问了有关此许可证的诸多问题。我们希望由此产生的许可证清晰易懂，并希望对其他开源从业者有所裨益。

接下来是，欧洲核研究组织（CERN）提交的 CERN <ruby> 开放硬件许可证 <rt>  Open Hardware Licence </rt></ruby>（OHL）系列许可证以供审议。它包括三个许可证，其主要用于开放硬件，这是一个与开源软件相似的开源访问领域，但有其自身的挑战和细微差别。硬件和软件之间的界线现已变得相当模糊，因此应用单独的硬件和软件许可证变得越来越困难。欧洲核子研究组织（CERN）制定了一个可以确保硬件和软件自由的许可证。

OSI 可能在开始时就没考虑将开源硬件许可证添加到其开源许可证列表中，但是世界早已发生变革。因此，尽管 CERN 许可证中的措词涵盖了硬件术语，但它也符合 OSI 认可的所有开源软件许可证的条件。

CERN 开源硬件许可证包括一个 [宽松许可证](https://opensource.org/CERN-OHL-P)、一个 [弱互惠许可证](https://opensource.org/CERN-OHL-W) 和一个 [强互惠许可证](https://opensource.org/CERN-OHL-S)。最近，该许可证已被一个国际研究项目采用，该项目正在制造可用于 COVID-19 患者的简单、易于生产的呼吸机。

### 了解更多

CAL 和 CERN OHL 许可证是针对特殊用途的，并且 OSI 不建议把它们用于其它领域。但是 OSI 想知道这些许可证是否会按预期发展，从而有助于在较新的计算机领域中培育出健壮的开源生态。

可以从 OSI 获得关于 [许可证批准过程](https://opensource.org/approval) 的更多信息。

---

via: <https://opensource.com/article/21/2/osi-licenses-cal-cern-ohl>

作者：[Pam Chestek](https://opensource.com/users/pchestek) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wyxplus](https://github.com/wyxplus) 校对：[wxy](https://github.com/wxy)

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


硬核观察 | 有人在比特币骗局中损失了 10 个比特币

Summary: 更多：• Linus 对 AMD 和英特尔的新 CPU 修改方向表示支持 • 谷歌云额外奖励了六位最佳的安全研究人员 31 万美元

![](/data/attachment/album/202103/22/100436xcwkk99kflw958ak.jpg)

### 有人在比特币骗局中损失了 10 个比特币

![](/data/attachment/album/202103/22/100446tplhcajybbhas3jq.jpg)

一位 42 岁德国男子看到了一条神秘的推特，他认为这是埃隆•马斯克的推特，在其中他看到了一个赠送比特币的链接！然后经过他的判断，认为是“可信”的，从而发送了自己的 10 个比特币给该地址。这是有记录以来单笔此类骗局中损失的最大金额（当时约合 56 万美金）。

根据分析师的 [统计](https://www.entrepreneur.com/article/367448)，在 2021 年第一季度，诈骗团伙通过这种方式赚取了超过 1800 万美元。这一金额超过了他们在 2020 年全年获得的 1600 万美元。关于受害者的数量，在 2020 年，大约有 10500 人落入这种诈骗方式。然而，到目前为止，在 2021 年，已经有 5600 名受害者。

出于贪欲，再简单的骗局也能网住一群鱼。

### Linus 对 AMD 和英特尔的新 CPU 修改方向表示支持

![](/data/attachment/album/202103/22/100502jtk6kqii3vf022if.jpg)

AMD 和英特尔决定清理一些古老的 CPU 设计，改变 x86 芯片架构处理异常的方式，这些设计可以一直追溯到上世纪 80 年代初的 80286 架构。AMD 在 2 月份提出了 “AMD 监管入口扩展”，随后，英特尔提出了 FRED 设计。虽然 AMD 和英特尔采用了不同的修改方向，但是 Linux 创始人 Linus 对这两家的不同做法都表示了[支持](https://www.zdnet.com/article/linus-torvalds-on-how-amd-and-intel-are-changing-how-processor-interrupts-are-handled/)。当然，我们要看到这些改变还需要几年时间。

难得看到 Linus 没有吐槽硬件厂商，其实 Linus 还是很讲理的。

### 谷歌云额外奖励了六位最佳的安全研究人员 31 万美元

![](/data/attachment/album/202103/22/100526ljcjp1a11c9cn4a7.jpg)

这是谷歌第二年开展 GCP 漏洞悬赏计划，并为 [六名研究人员](https://www.zdnet.com/article/google-cloud-here-are-the-six-best-vulnerabilities-security-researchers-found-last-year/) 提供了 313337 美元的奖金，是其 2019 年计划设立时的 10 万美元奖池的三倍。奖金被发给了那些提交了 GCP 特殊安全漏洞报告的研究人员。因此，这并不是漏洞赏金奖励，而是对提交谷歌漏洞奖励计划的额外奖励和认可。

在 2020 年 GCP 漏洞悬赏计划中，令人印象深刻的 133,337 美元的一等奖由一名乌拉圭大学生和安全爱好者获得，他发现了谷歌云部署管理器中的远程代码执行（RCE）缺陷。谷歌在去年为他提交的原始报告奖励 31,337 美元的基础上，又向他支付了 133,337 美元的奖金，这意味着他这一次的报告已经落地了 164,674 美元。

我想说的是，安全研究人员真是来钱啊，而在二十年前，可没有这样的环境。


《代码英雄》第四季（1）：小型机 —— 旧机器的灵魂

Summary: 它们不适合放在你的口袋里。但在当时，小型机比之前的房间大小的大型机的尺寸小了一个数量级。它们为可以装进包里的个人电脑（PC），以及最终你口袋里的手机铺平了道路。

>
> 代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。
>
>
>

>
> **什么是《代码英雄》**
>
>
> <ruby> 代码英雄 <rt>  Command Line Heroes </rt></ruby>是世界领先的企业开源软件解决方案供应商红帽（Red Hat）精心制作的原创音频播客，讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。
>
>
>

![](/data/attachment/album/202103/22/142703crlb5bggk8cjrz58.jpg)

本文是《[代码英雄](https://www.redhat.com/en/command-line-heroes)》系列播客[《代码英雄》第四季（1）：小型机 —— 旧机器的灵魂](https://www.redhat.com/en/command-line-heroes/season-4/minicomputers)的[音频](https://cdn.simplecast.com/audio/a88fbe/a88fbe81-5614-4834-8a78-24c287debbe6/2b74a070-f1ae-411f-80e0-7ad69cb04220/clh-s4-ep1-minicomputer-the-soul-of-an-old-machine_tc.mp3)脚本。

>
> 导语：它们不适合放在你的口袋里。但在当时，<ruby> 小型机 <rt>  minicomputer </rt></ruby>比之前的房间大小的<ruby> 大型机 <rp>  （ </rp> <rt>  mainframe </rt> <rp>  ） </rp></ruby>的尺寸小了一个数量级。它们为可以装进包里的<ruby> 个人电脑 <rt>  Personal Computer </rt></ruby>（PC），以及最终你口袋里的手机铺平了道路。
>
>
> 16 位小型机改变了 20 世纪 70 年代的 IT 世界。他们让公司的每个工程师都有机会拥有自己的计算机。但这还不够，直到 32 位版本的到来。
>
>
> Carl Alsing 和 Jim Guyer 讲述了他们在<ruby> 数据通用 <rt>  Data General </rt></ruby>公司创造革命性的新 32 位计算机的工作。但他们如今被视作传奇的工作是在秘密中完成的。他们的机器代号为 “Eagle”，其设计目的是为了与自己公司的另一个团队正在制造的机器竞争。这些工程师们回忆了为使项目继续进行而做的公司政治和阴谋，以及他们如何将限制转化为优势。Neal Firth 则讨论了如何在一个令人兴奋但要求很高的项目中的生活。在这个项目中，代码英雄们一起工作，只是因为他们想这样做，而不是期望获奖或成名。这三个人都讨论了这个故事如何在 Tracy Kidder 的非虚构工程经典《<ruby> 新机器的灵魂 <rt>  The Soul of a New Machine </rt></ruby>》中所成就的不朽。
>
>
>

**00:00:03 - Saron Yitbarek**：

那是 1978 年，小型机业界激战正酣。就在一年前，<ruby> 数字设备公司 <rt>  Digital Equipment Corporation </rt></ruby>（DEC）发布了其 32 位的 VAX 11 780 计算机。它比市面上的 16 位机器要强大得多。 VAX 的销售迅速地超越了那些步履缓慢的竞争对手。其主要竞争对手<ruby> 数据通用 <rt>  Data General </rt></ruby>公司迫切需要一台新机器来和 VAX 竞争。他们需要一台属于自己的 32 位计算机，而且要够快才行，但数据通用公司和 DEC 之间的竞争并不是唯一的战斗。数据通用公司内部还正酝酿一场地盘争夺战，而这两场战斗的战利品都是在令人难以置信的环境下创造令人难以置信的机器。一台 13 英寸的笔记本电脑大概有 3 磅重。如今，我们认为计算机的便携性及方便的尺寸是理所应当的，但是在 20 世纪 70 年代，大多数计算机仍然有着整个机房大小的大型机、重达数吨，而且价值数百万美金。而当硬件成本急剧下降后，开发更小、更快、更便宜的机器的竞争就开始了。小型机为工程师和科学家打开了拥有自己的终端机的大门。正是小型机引领我们到了今天的样子。

**00:01:37**：

在上一季的《代码英雄》中，我们深入探究了对软件开发至关重要的领域 —— 编程语言的世界。诸如 JavaScript、Python 和 C、Perl、COBOL 以及 Go 之类的语言，我们审视了它们的历史、它们所解决的问题，以及它们是怎样随着时间推移而演变的。在这一季中，也就是第四季，我们将再一次深入探索，这一次是我们软件运行于其上的硬件。我们将为大家讲述七个特别的故事，讲述那些敢于改变硬件规则的人和团队。你桌上的笔记本电脑、口袋里的手机，如今你所拥有的每一件硬件设备，以及它们的前代产品，都是代码英雄们全身心投入的结果。他们的激情打造、他们的大胆举动，让我们的硬件成为现实，彻底改变了我们现如今的编程方式。

**00:02:36**：

我是 Saron Yitbarek。这里是代码英雄，一档来自<ruby> 红帽 <rt>  Red Hat </rt></ruby>的原创播客节目。

**00:02:45**：

在我们本季的首播中，将讲述一个工程团队竞相设计、调试和交付下一代计算机的故事。他们工作的故事变成了 1981 年 Tracy Kidder 获得了普利策奖的畅销书《<ruby> 新机器的灵魂 <rt>  The Soul of a New Machine </rt></ruby>》的主题。在这本书中讲述了这一集中你将听到的众多嘉宾的故事。

**00:03:07**：

让我们说回到数据通用公司。该公司主席 Ed de Castro 制定了与 DEC 竞争的计划。他拆分了工程部门，将一支团队从其位于<ruby> 马萨诸塞州 <rt>  Massachusetts </rt></ruby><ruby> 韦斯特伯勒 <rt>  Westborough </rt></ruby>的总部迁移到了<ruby> 北卡罗来那州 <rt>  North Carolina </rt></ruby>的新办公室。他们的任务是开发一款领先的 32 位的机器设计，以粉碎 VAX。他们将项目命名为 “Fountainhead”。Ed de Castro 为这支团队提供了几乎无限的支持和资源，他将 Fountainhead 视为他公司的救星。而剩下的几名工程师被留在了马萨诸塞州，他们觉得自己被严重轻视了。他们认为自己能够开发一个干掉 VAX 的杀手，可能会比 Fountainhead 项目所能开发的更好，但是 Ed de Castro 不会给他们机会。因此，这个小组的负责人 Tom West 决定自己动手。Tom West 是一名自学成才的计算机工程师，他负责数据通用公司的 Eclipse 部门。 Eclipse 是数据通用公司最成功的 16 位小型机产品线。Tom 能造机器，也能卖货，而且他知道市场需求是什么。Fountainhead 项目成立以后，Ed de Castro 让剩下的工程师们继续致力于优化去年的产品线。 而 Tom 和其他人都对此不以为然。

**00:04:31 - Carl Alsing**：

我们对此一点都不满意。我们中有些人离开去做其他工作，而另一些人则感到十分沮丧，担心自己的事业，而且感觉没意思。而且我们觉得另一组人肯定会失败。

**00:04:46 - Saron Yitbarek**：

Carl Alsing 是数据通用公司微编程小组的经理。他是 Tom 的副手。他们决定提出自己的项目计划。

**00:04:56 - Carl Alsing**：

这将是使用最新技术进行的全新设计，构建一个能够击败 DEC 的 VAX 的 32 位计算机。所以我们为此提出了一项建议，并去找了主席 Ed de Castro，他说：“不，没门儿。北卡罗来那州的小组在负责这项工作。你们不必操心。”因此，我们感到十分灰心，回去提出了另一个名为 Victor 的计划。我们研究了如何使去年的老产品更好的方法。我们在里面设置了一个小开关，即系统里的一个模式位，当你打开它时，它将使得计算机能够像现代 32 位小型机一样运行，尽管比较慢。然后我们向 Ed de Castro 提出了这个功能。最后他说：“你们在这里有个模式位。我不想再看到其他任何带有模式位的设计。北卡罗来那州那边正在负责新设计。”于是乎又一次，我们深感沮丧，我想就是在那会儿 Tom West 决定要做一些秘密的事情。

**00:06:06 - Saron Yitbarek**：

Tom 想出了两个故事。一个是讲给 Ed de Castro 的：他们将会对旧的 Eclipse 产品线进行加强，使它运行得更快一点，增加几个新按钮，并且换个新颜色。Tom 把它说成保险措施，以防万一北卡罗来那州那边出了什么问题。Ed de Castro 同意了。然后 Tom 给他的团队讲了另一个更棒的故事。

**00:06:32 - Carl Alsing**：

Tom West 向我们团队中的一些人提议，我们要开发一款真正优秀的现代机器，它对以前的机器完全兼容，并且采用我们所需的所有最新高科技的东西，有虚拟内存、32 位和纠错代码，以及所有这类东西：多任务、多处理、大量内存。“伙计们，我们将打造出最新的、能在市场上大杀四方的新机器。”

**00:07:04 - Saron Yitbarek**：

这款极具市场杀伤力的新机器的代号是 “Eagle”。现如今，人们觉得我们的电脑中的内存是没有任何限制的，但是在那时候，当从 16 位转换到 32 位时，发生了重大的突破。突然之间，你的地址空间就从能够存储 65000 字节的信息变成了 40 多亿字节。随着这一增长，软件也可以处理更加大量的数据。这给计算机公司带来了两个基本的挑战：从 16 位过渡到 32 位，这是肯定的，但是他们还得让使用旧软件的老客户感到满意。因此，他们必须得开发一款能够让旧软件继续运行的机器，即一款向后兼容的 32 位计算机。VAX 尽其所能也没有找到第二个问题的完美解决方案，但是 Tom 坚信他的 Eagle 可以做到。

**00:08:14**：

Eagle 的总部位于韦斯特伯勒 14 号楼 AB 的地下室。Tom 指派 Carl 负责<ruby> 微码 <rt>  micro coding </rt></ruby>。Carl 指派 Chuck Holland 来管理<ruby> 编码员 <rt>  coder </rt></ruby>，他们被称为<ruby> 微码小子 <rt>  Micro Kids </rt></ruby>。同时，Ed Rasala 将负责硬件。他委派了 Ken Holberger 负责管理团队，这个团队被恰当地称为<ruby> 哈迪男孩 <rt>  Hardy Boys </rt></ruby>。（LCTT 译注：《哈迪男孩》是一部 1977 年的美国电视剧。） Tom 有一个盟友，就是工程副总裁 Carl Carman。 Carman 也对 Ed de Castro 有意见，因为 Ed de Castro 拒绝让他来负责北卡罗来那州的小组。

**00:08:51 - Carl Alsing**：

Carl Carman 知道我们在干什么，却什么都没有对他的老板说。所以他给我们提供了资金，但我们需要保持较低的薪水，并且需要一些非常聪明的工程师。因此，我们决定去招收大学毕业生。这样做的好处之一是他们不知道什么是你做不到的。他们以为你无所不能。

**00:09:15 - Saron Yitbarek**：

那时 Jim Guyer 刚从大学毕业两年，在数据通用公司工作时被分派到了哈迪男孩。

**00:09:21 - Jim Guyer**：

北卡罗来那州那边正在开发的机器更多是高端计算，本质上几乎是大型机。而且，嗯，我的意思是，这在当时确实是投入到与 IBM 以及其他大型机公司的竞争中去的相当重要的一步。我们认为我们有优势，因为我们想做的事情并不那么雄心勃勃，而且我们真的、真的专注于一种简洁、干净、简单的实现方案，用最低的成本、最少的组件等等。

**00:09:51 - Saron Yitbarek**：

成本低廉，设计简单。他们意识到他们需要使用<ruby> 固件 <rt>  firmware </rt></ruby>来控制一切。与硬件相比，把越多的功能置于固件控制之下，所开发的机器就越便宜、越灵活。

**00:10:03**：

而且它们能够根据需求进行修改。当然，现代计算机都是以这种方式构建而成的，但在 1978 年，这种方法是全新的。

**00:10:15 - Carl Alsing**：

我们所做的设计非常简约。我们正在研究能够使事情简单明了的方法。因为我们知道，它不可能变成一个庞大而又昂贵的机器。它必须只是几块板子、几个电路，这是让使它快速发展的一个优势。设计一款安全的、无风险的产品，和设计一款用于制胜的产品是有区别的。而我们并不担心风险，我们在意的是取胜。我们希望它既快速又便宜，我们希望快速地开发它。因此，我们只用了三、四块板子，这是最低限度的硬件，我们通过固件来弥补这些。

**00:11:06 - Saron Yitbarek**：

Eagle 团队面临着很多严苛的限制。 VAX 是这个星球上（当时）性能最高的 32 位计算机。 Eagle 必须与之匹敌。但最重要的是，它还必须兼容他们的 16 位架构。要用比其他团队更少的金钱和时间来做到所有这一切，这使得 Eagle 感觉像是在赌博。但 Tom West 的团队全力以赴投身于其中。

**00:11:32 - Jim Guyer**：

有两套无时无刻都在运行着的系统，我们有两班工程师为之工作。我们所有人都必须全盘掌握。因此，我们不得不学会其他每一个人的岗位所要做的工作。这对我而言既具有挑战性又极其富有教育意义。但是我们大家都参与其中努力着，“要解决这个问题下一步该做什么？我们需要着眼于何处？”每个人都仔细钻研原理图和其他文档，试图找出办法，“看看这个信号，看看那台计算机的状态，看看微码正在执行的步骤顺序。它在正常运转吗？哦等等，它出错了。呃，为什么它会这样运行呢？”

**00:12:13 - Carl Alsing**：

这是件严肃的事情，这就是工作态度。小组里的工作很紧张。有时候人们会对于采用何种方式去做某件事情而发生争论。可能有一种方法会花费稍微多一点的钱，而另一种方法则更便宜，但是可能速度稍慢或效率稍低。为了达成共识，可能会开展激烈的讨论或会议。但我们还是做出了这些选择，然后我们协作努力。

**00:12:44**：

我们没日没夜地工作，在<ruby> 原型 <rt>  prototype </rt></ruby>上付出了很多时间。我们只有两个原型，两个团队都能在这两个原型上工作着实很重要。因此，晚班和白班都有人在工作，人们都很疲惫，但这让人感到非常兴奋 —— 这是值得的。所以没有人过多地抱怨工作条件。

**00:13:11 - Saron Yitbarek**：

工作条件 —— 据传当时 Tom West 为了让团队完成他所期望的东西，实行了一种被称为“<ruby> 蘑菇管理 <rt>  mushroom management </rt></ruby>”的方法。喂养它们然后看着它们成长。在狭窄而炎热的工作空间里，时间很漫长，日程安排也不切实际。Tom 本人被形容为神秘、冷酷、无情的人。有位工程师甚至称他为“<ruby> 黑暗王子 <rt>  the Prince of Darkness </rt></ruby>”。 Tom West 是否如此渴望取胜以至于剥削了他的团队吗？他是否为了得到完美的机器而牺牲了微码小子们和哈迪男孩们的福祉？

**00:13:56 - Jim Guyer**：

Tom 是个有趣的家伙。他对你期望很高，但不会给你很多指导。他希望你可以自己弄清楚需要做什么，而如果你不能做到的话，你就会被踢出团队。

**00:14:10 - Saron Yitbarek**：

指导来自于 Carl 或是 Ed， 他们是 Jim 和团队其他成员每天都与之工作的部门经理。但这些年轻的工程师也为了取胜而参与其中，他们喜欢自己所获得的机会，愿意自己去搞清楚。

**00:14:26 - Jim Guyer**：

我个人获得了第一届微码小子通宵荣誉奖。我不知道是什么理由，也许我们都是能力超群、豪气冲天、无知无畏的年轻后浪。我们很自信，我们觉得自己相当聪明，可以解决问题，我们相互依靠，也许这就是自负。我乐在其中。我认为我们大部分人都乐在其中。

**00:14:56 - Saron Yitbarek**：

Carl 不同意“蘑菇管理”这一说法。他说情况恰恰相反。他们都确切地知道正在发生什么，以及预期是什么。反而是高层管理人员不知道。同时，Tom West 正在承受着来自多条战线的巨大压力，而这种压力也传递给了他的团队。

**00:15:18 - Carl Alsing**：

Tom 对这个项目的真实性质保持着低调。因此，他并没有对工程师们说很多，他保持着超然的态度，当然他也告诉他们，他们不能在团队之外或是家中讨论该项目。甚至不能使用 “Eagle” 一词。因此，我们还传达了这个项目非常紧急，我们必须在一年之内完成，竞争已在市场中展开，如果我们要通过这个东西来占据市场之巅，我们必须现在就把它完成。因此他们承受着很大的压力，并且团队期望他们在夜晚和周末也参加工作，没有时间留给他们去和家人野餐或是做其他任何与工作不相关的事情。

**00:16:06 - Saron Yitbarek**：

我想知道在 14 号楼 AB 的战壕里奋战是怎样的感受。所以我邀请 Neal Firth 来到身边。他是微码小子中的一员，刚毕业就加入了团队。

**00:16:20**：

和 Tom West 共事的感觉如何？你和他有过很多互动吗？

**00:16:24 - Neal Firth**：

不一定。他是那种幽灵般的人物。我们能看到他在身边。他一般也不会不干预，以便我们能够领导自己、实现目标。我们正在做的事情是全新的，他不想把上一代处理器要做的工作强加给我们。

**00:16:49 - Saron Yitbarek**：

这听起来像是一个工作十分紧张的地方，在这里你真切地想不断前进并完成工作。你是怎样应对没有太多时间这一事实的？

**00:16:57 - Neal Firth**：

老实说，这并不是问题。想要时间充裕实际上并没有什么问题。我们可能会花费一些时间来实现结果。这需要家里人非常支持与理解，因为她们并不一定会立马同意。你可以将其等同于当时的一些硅谷人，或是像<ruby> 乔布斯 <rt>  Jobs </rt></ruby>、<ruby> 沃兹尼亚克 <rt>  Wozniak </rt></ruby>之类的人，我们投身其中并搞定它。我们确实不全是“<ruby> 住在同一间公寓 <rt>  live-in-the-same-apartment </rt></ruby>”或“<ruby> 在地板上写代码 <rt>  code-on-the-floor </rt></ruby>”那样的人，但具有其中的一些特征。

**00:17:35 - Saron Yitbarek**：

在那段时间里，是什么让你坚持了下来？为什么你这么有动力？

**00:17:39 - Neal Firth**：

坦率地说，就是在解决问题。我一直是一个喜欢思考并善于解决问题的人。事实上，团队里的大部分人都是这样的。我们所有人都有着类似的背景，并且我们都很享受解决问题这件事。就是，解决那些难题，找到一种前所未有的方式去做事。

**00:18:01 - Saron Yitbarek**：

那么在这个项目中，你最难忘的时刻是什么？

**00:18:05 - Neal Firth**：

当时，项目已经进行了相当长的时间，我们正在运行微码模拟器，它实际上是被提议当作生产模拟器来运行的，已经运行了 10 到 12 个小时了。突然，字母 E 出现在了控制台上，然后我们等了一会儿，又是一个字母，接着又是一个字母，然后我们突然意识到我们运行的是测试代码，是正在设计运行的诊断程序。因此，微码模拟器正在模拟运行这份微码的硬件，并且它开始打印字母，就好像它真的在运行一样。所以当它真正问世并运行时，可能比实际上要慢了十万倍，但这仍是我最难忘的时刻之一。

**00:19:02 - Saron Yitbarek**：

现在回过头想想，你觉得自己当时有被剥削吗？

**00:19:07 - Neal Firth**：

没有。我可以意识到正在发生着什么。我知道正在发生什么。所以，没有，我没觉得被剥削。实际上，这是我大学毕业时候的期望，否则我永远都不可能参与这么重大的项目，或是有机会在这样的一个项目中扮演那么重要的角色。

**00:19:31 - Saron Yitbarek**：

我想知道你如何看待发明的牺牲，因为如果你要考虑所有我们所创造的伟大事物，通常来说我们不得不放弃一些东西，是这样吗？必须舍弃一些东西来做出真正惊人的东西。这样的情况你遇到过吗？如果有的话，你不得不放弃的东西是什么呢？

**00:19:48 - Neal Firth**：

我不会说我放弃某些东西是有一个思想驱动的过程，我认为更重要的是，我更能适应自己正在做的事情以及所做的事对周围人的影响。

**00:20:03**：

但我从来没把它看作是一种牺牲，而与我亲近的人们，他们生活在就是这样的一个世界里。我听说过一些可怕的故事，如果你愿意的话，在今天，在这里都是，你醒来，插上你的咖啡机，拿一些披萨或点心，然后你开始写代码，最后你在你的键盘上睡着。然后你在下一个早晨醒来，重复这个过程。

**00:20:35**：

我们当然远没有达到那种牺牲的程度，我仍然有妻子，我仍然有朋友，我们仍然在一起。这当然不是份<ruby> 朝九晚五 <rt>  nine-to-five </rt></ruby>的工作，但是它给我带来了许多个人层面与技术层面的成就，我能把这些和我的妻子、姐妹、父亲、母亲以及岳父分享，这些人可以欣赏这些。

**00:20:59 - Saron Yitbarek**：

是啊。那么，你认为使某件事情变得真正伟大的关键是什么呢？

**00:21:06 - Neal Firth**：

使某件事情变得真正伟大的关键 —— 有趣的问题 —— 我认为这取决于参与其中的人员，因为他们想要这样做，而不是因为他们对成就、财富或是名望的渴望。因为那些东西都转瞬即逝，而且永远无法使人满足。但是如果你要努力地去实现一个目标，而且你和一群人共同努力并去实现它，那么当你最终实现目标的时候，这确确实实是能令人心满意足的。

**00:21:42 - Saron Yitbarek**：

Neal Firth 是 Eagle 项目中微码小子中的一员。他目前是一家名为 VIZIM Worldwide 的软件公司的总裁。

**00:21:57**：

正如 Tracy Kidder 书中所记载的那样， Tom West 的超然和距离感是刻意为之的。这是他试图在日常交谈中保持头脑清醒，从而能使 Eagle 的目标保持原样。不过更重要的是，他想保护团队，将他们与周遭发生的政治与企业边缘化相隔绝。他也保护了微码小子们和哈迪男孩们不受先入为主的观念影响。

**00:22:28**：

1980 年， Eagle 完成了。比 Tom 所承诺的要晚了一年，但至少还是完成了，不像 Fountainhead。就像资深团队所预料的那样， Fountainhead 团队失败了，他们的项目遭到了搁置。这位是 Bill Foster，当时的软件开发总监，他谈到了 Fountainhead 的挣扎。

**00:22:50 - Bill Foster**：

我认为所犯下的最大错误在于没有对其设置任何限制。或多或少地，就是让我们去开发世界上最好的计算机。嗯，它应该在什么时候被完成？哦，我们对此确实没有个明确的期限。它应该花费多少成本？好吧，我们也不确定。我不得不让 Ed 失望了。他没有在程序员和工程师之间设置足够的界限。

**00:23:15**：

而且如果你让一群程序员和工程师放任自流，猜猜怎么着，他们将使事情变得复杂，设计出过分庞大的东西，以至于永远不能完成。

**00:23:26 - Saron Yitbarek**：

让我们回忆一下。从 Tom 和他的团队决定秘密开发 Eagle 开始，这已经进行了两年了。整个过程中，公司总裁并不知道正在发生了什么。当现在已经正式命名为 Eclipse MV/8000 的这款机器准备交付时，市场营销负责人去找了 Ed de Castro，为营销活动放行。 Carl Alsing 将对此作出解释。

**00:23:53 - Carl Alsing**：

市场营销负责人说道：“好吧，我们已经准备好为 Eagle 进行推广了，我们需要数千美元。我们将在全球六个不同的城市举行新闻发布会。我们将进行一个巡演，去到很多城市，我们将拍摄一部影片来展示它，这将轰动一时。”

**00:24:14 - Carl Alsing**：

然后 Ed de Castro 说：“我不明白。你们为什么要那样做？”这只不过是在 Eclipse 那边的另一个包而已，表面工夫的工作而已。市场经理说：“不，这是一款全新的机器。这是一款 32 位的机器，有虚拟内存，具备兼容性。它将击败 VAX。所有你要的东西都在这里了。”

**00:24:37 - Carl Alsing**：

Ed de Castro 着实有点儿困惑。他以为我们在北卡罗来那州遭遇了失败，将成为事情的终结，但我们拯救了他。因此，是的，他邀请了我们所有人，我们举行了一次小型的午餐会。午餐会上有三明治和苏打水，他说：“嗯，你们做得很好，我很吃惊。我此前并没有意识到你们在做这个，但是我们会推广它，我知道将会安排一部影片、一些巡游，而且你们将成为这其中的一部分，所以，感谢你们，请吃你们的三明治吧。”

**00:25:19 - Saron Yitbarek**：

现如今被命名为 MV/8000 的 Eagle 出现在了《<ruby> 计算机世界 <rt>  Computer World </rt></ruby>》杂志的封面上。推出期间，媒体的炒作使得这支原本秘密的、深居地下室的团队成员们变成了小名人。毕竟，他们拯救了数据通用公司。

**00:25:38**：

但好景不长。 Tom West 再也无法让团队免受公司内部政治的影响。团队面对敌意毫无准备。公司里的其他人都嫉妒他们的成就，并对他们能在秘密项目中逃离如此之久感到震惊。

**00:25:57**：

不久后，一个新的工程副总裁取代了他们的盟友 Carl Carman。这个新来的人在第一台 MV/8000 被售出之前就拆分了 Eagle 小组，并把 Tom 发配到了数据通用公司的日本办事处。

**00:26:13 - Jim Guyer**：

我认为我们开发出了花钱所能够买到的最好的 32 位超级小型机，我认为这对数据通用公司来说是一件很棒的事情，我认为它将能把 DEC 稍微踢开一点，而不是我们把世界从他们身边夺走。那时候的竞争太艰难了，在高科技领域很难成为赢家，但我认为我们已经做了一些有价值的事情。

**00:26:42 - Saron Yitbarek**：

当 Eagle 发行时，它确实拯救了数据通用公司，但在市场份额被 DEC 夺走三年后，该公司从未真正恢复过来，而行业却发展了。小型机不再是大势所趋。<ruby> 微型计算机 <rt>  microcomputer </rt></ruby>的竞争已经开始了，这为<ruby> 个人计算机 <rt>  personal computer </rt></ruby>革命铺平了道路。

**00:27:04 - Carl Alsing**：

数据通用公司继续开发了其他的版本，并在其他的型号上进行了改进，这样进行了一段时间，取得了一些成功。但是世事无常。市场发生了变化，他们自己转型成了一家软件公司，然后最终被其他人收购了。如今，我认为他们在马萨诸塞州<ruby> 霍普金顿 <rt>  Hopkinton </rt></ruby>某家公司的文件抽屉里。

**00:27:36 - Saron Yitbarek**：

一年后， Eagle 团队中的许多人离开了数据通用公司。有人感到精疲力竭。有些人准备好要去开发一些不一样的东西。一些人前往西部的硅谷，热衷于寻找下一个创意火花。无论如何，在一个不承认他们为拯救公司所做的一切的公司里，继续待下去似乎没有什么意义。1981 那一年 Tracy Kidder 的《<ruby> 新机器的灵魂 <rt>  The Soul of a New Machine </rt></ruby>》出版了。现如今，全世界都知道 Eagle 是如何构建起来了。

**00:28:14 - Carl Alsing**：

如果你问我新机器的灵魂是什么，我想我会说是他们所经历的人和事，他们所做出的牺牲，他们所做出的努力，他们对此所感到的兴奋，以及他们所希望得到的满足感。也许得到了，也许没有，但他们为之而努力。

**00:28:35 - Jim Guyer**：

从某种意义上说，这款机器是有点儿个性。但真正有个性的是这些有勇气的人。

**00:28:47 - Saron Yitbarek**：

在我们有关硬件的全新一季的下一集里，我们会将时光倒回大型机世界，讲述另一群叛逆员工的故事。他们制造的计算机催生了一门改变世界的编程语言。

**00:29:04 - Saron Yitbarek**：

《<ruby> 代码英雄 <rt>  Command Line Heroes </rt></ruby>》是<ruby> 红帽 <rt>  Red Hat </rt></ruby>的一档原创播客节目。这一季，我们正在为你整理一些出色的研究，以便你可以更多地了解到我们正在谈论的硬件的历史。请前往 [redhat.com/commandlineheroes](file:///Users/xingyuwang/develop/LCRH-wxy/translated/www.redhat.com/commandlineheroes) 深入了解 Eagle 及其背后的团队。我是 Saron Yitbarek。下集之前，编码不止。

>
> **什么是 LCTT SIG 和 LCTT LCRH SIG**
>
>
> LCTT SIG 是 LCTT <ruby> 特别兴趣小组 <rt>  Special Interest Group </rt></ruby>，LCTT SIG 是针对特定领域、特定内容的翻译小组，翻译组成员将遵循 LCTT 流程和规范，参与翻译，并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽（Red Hat）发起的 SIG，当前专注任务是《代码英雄》系列播客的脚本汉化，已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。
>
>
> 欢迎[加入 LCRH SIG](/article-12436-1.html) 一同参与贡献，并领取红帽（Red Hat）和我们联合颁发的专属贡献者证书。
>
>
>

---

via: <https://www.redhat.com/en/command-line-heroes/season-4/minicomputers>

作者：[Red Hat](https://www.redhat.com/en/command-line-heroes) 选题：[bestony](https://github.com/bestony) 译者：[JonnieWayy](https://github.com/JonnieWayy) 校对：[windgeek](https://github.com/windgeek), [wxy](https://github.com/wxy)

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


Kooha：一款支持 Wayland 的新生 GNOME 屏幕录像机

Summary: Linux 中没有一个 像样的支持 Wayland 显示服务器的屏幕录制软件。

Linux 中没有一个 像样的支持 Wayland 显示服务器的屏幕录制软件。

Linux 中没有一个 [像样的支持 Wayland 显示服务器的屏幕录制软件](https://itsfoss.com/gnome-screen-recorder/)。

如果你使用 Wayland 的话，[GNOME 内置的屏幕录像机](https://itsfoss.com/gnome-screen-recorder/) 可能是少有的（也是唯一的）支持的软件。但是那个屏幕录像机没有可视界面和你所期望的标准屏幕录像软件的功能。

值得庆幸的是，有一个新的应用正在开发中，它提供了比 GNOME 屏幕录像机更多一点的功能，并且在 Wayland 上也能正常工作。

### 遇见 Kooha：一个新的 GNOME 桌面屏幕录像机

![](/data/attachment/album/202103/22/212336qxd077rj55i8ippj.png)

[Kooha](https://github.com/SeaDve/Kooha) 是一个处于开发初期阶段的应用，它可以在 GNOME 中使用，是用 GTK 和 PyGObject 构建的。事实上，它利用了与 GNOME 内置屏幕录像机相同的后端。

以下是 Kooha 的功能：

* 录制整个屏幕或选定区域
* 在 Wayland 和 Xorg 显示服务器上均可使用
* 在视频里用麦克风记录音频
* 包含或忽略鼠标指针的选项
* 可以在开始录制前增加 5 秒或 10 秒的延迟
* 支持 WebM 和 MKV 格式的录制
* 允许更改默认保存位置
* 支持一些键盘快捷键

### 我的 Kooha 体验

![](/data/attachment/album/202103/22/212337e540k4bc504kf39k.png)

它的开发者 Dave Patrick 联系了我，由于我急需一款好用的屏幕录像机，所以我马上就去试用了。

目前，[Kooha 只能通过 Flatpak 安装](https://flathub.org/apps/details/io.github.seadve.Kooha)。我安装了 Flatpak，当我试着使用时，它什么都没有记录。我和 Dave 进行了快速的邮件讨论，他告诉我这是由于 [Ubuntu 20.10 中 GNOME 屏幕录像机的 bug](https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1901391)。

你可以想象我对支持 Wayland 的屏幕录像机的绝望，我 [将我的 Ubuntu 升级到 21.04 测试版](https://itsfoss.com/upgrade-ubuntu-beta/)。

在 21.04 中，可以屏幕录像，但仍然无法录制麦克风的音频。

我注意到了另外几件无法按照我的喜好顺利进行的事情。

例如，在录制时，计时器在屏幕上仍然可见，并且包含在录像中。我不会希望在视频教程中出现这种情况。我想你也不会喜欢看到这些吧。

![](/data/attachment/album/202103/22/212338lyajdvirc3q12qs0.jpg)

另外就是关于多显示器的支持。没有专门选择某一个屏幕的选项。我连接了两个外部显示器，默认情况下，它录制所有三个显示器。可以使用设置捕捉区域，但精确拖动屏幕区域是一项耗时的任务。

它也没有 [Kazam](https://itsfoss.com/kazam-screen-recorder/) 或其他传统屏幕录像机中有的设置帧率或者编码的选项。

### 在 Linux 上安装 Kooha（如果你使用 GNOME）

请确保在你的 Linux 发行版上启用 Flatpak 支持。目前它只适用于 GNOME，所以请检查你使用的桌面环境。

使用此命令将 Flathub 添加到你的 Flatpak 仓库列表中：

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

```

然后用这个命令来安装：

```
flatpak install flathub io.github.seadve.Kooha

```

你可以通过菜单或使用这个命令来运行它：

```
flatpak run io.github.seadve.Kooha

```

### 总结

Kooha 并不完美，但考虑到 Wayland 领域的巨大空白，我希望开发者努力修复这些问题并增加更多的功能。考虑到 [Ubuntu 21.04 将默认切换到 Wayland](https://news.itsfoss.com/ubuntu-21-04-wayland/)，以及其他一些流行的发行版如 Fedora 和 openSUSE 已经默认使用 Wayland，这一点很重要。

---

via: <https://itsfoss.com/kooha-screen-recorder/>

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

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


使用 Grafana Tempo 进行分布式跟踪

Summary: Grafana Tempo 是一个新的开源、大容量分布式跟踪后端。

能对接其他数据源吗

Grafana Tempo 是一个新的开源、大容量分布式跟踪后端。

>
> Grafana Tempo 是一个新的开源、大容量分布式跟踪后端。
>
>
>

![](/data/attachment/album/202103/23/221354lc1eiill7lln4lli.jpg "Computer laptop in space")

Grafana 的 [Tempo](https://grafana.com/oss/tempo/) 是出自 Grafana 实验室的一个简单易用、大规模的、分布式的跟踪后端。Tempo 集成了 [Grafana](http://grafana.com/oss/grafana)、[Prometheus](https://prometheus.io/) 以及 [Loki](https://grafana.com/oss/loki/)，并且它只需要对象存储进行操作，因此成本低廉，操作简单。

我从一开始就参与了这个开源项目，所以我将介绍一些关于 Tempo 的基础知识，并说明为什么云原生社区会注意到它。

### 分布式跟踪

想要收集对应用程序请求的遥测数据是很常见的。但是在现在的服务器中，单个应用通常被分割为多个微服务，可能运行在几个不同的节点上。

分布式跟踪是一种获得关于应用的性能细粒度信息的方式，该应用程序可能由离散的服务组成。当请求到达一个应用时，它提供了该请求的生命周期的统一视图。Tempo 的分布式跟踪可以用于单体应用或微服务应用，它提供 [请求范围的信息](https://peter.bourgon.org/blog/2017/02/21/metrics-tracing-and-logging.html)，使其成为可观察性的第三个支柱（另外两个是度量和日志）。

接下来是一个分布式跟踪系统生成应用程序甘特图的示例。它使用 Jaeger [HotROD](https://github.com/jaegertracing/jaeger/tree/master/examples/hotrod) 的演示应用生成跟踪，并把它们存到 Grafana 云托管的 Tempo 上。这个图展示了按照服务和功能划分的请求处理时间。

![Gantt chart from Grafana Tempo](/data/attachment/album/202103/23/221405whe0hxj2ojjh4eeh.png "Gantt chart from Grafana Tempo")

### 减少索引的大小

在丰富且定义良好的数据模型中，跟踪包含大量信息。通常，跟踪后端有两种交互：使用元数据选择器（如服务名或者持续时间）筛选跟踪，以及筛选后的可视化跟踪。

为了加强搜索，大多数的开源分布式跟踪框架会对跟踪中的许多字段进行索引，包括服务名称、操作名称、标记和持续时间。这会导致索引很大，并迫使你使用 Elasticsearch 或者 [Cassandra](https://opensource.com/article/19/8/how-set-apache-cassandra-cluster) 这样的数据库。但是，这些很难管理，而且大规模运营成本很高，所以我在 Grafana 实验室的团队开始提出一个更好的解决方案。

在 Grafana 中，我们的待命调试工作流从使用指标报表开始（我们使用 [Cortex](https://cortexmetrics.io/) 来存储我们应用中的指标，它是一个云原生基金会孵化的项目，用于扩展 Prometheus），深入研究这个问题，筛选有问题服务的日志（我们将日志存储在 Loki 中，它就像 Prometheus 一样，只不过 Loki 是存日志的），然后查看跟踪给定的请求。我们意识到，我们过滤时所需的所有索引信息都可以在 Cortex 和 Loki 中找到。但是，我们需要一个强大的集成，以通过这些工具实现跟踪的可发现性，并需要一个很赞的存储，以根据跟踪 ID 进行键值查找。

这就是 [Grafana Tempo](http://github.com/grafana/tempo) 项目的开始。通过专注于给定检索跟踪 ID 的跟踪，我们将 Tempo 设计为最小依赖性、大容量、低成本的分布式跟踪后端。

### 操作简单，性价比高

Tempo 使用对象存储后端，这是它唯一的依赖。它既可以被用于单一的二进制下，也可以用于微服务模式（请参考仓库中的 [例子](https://grafana.com/docs/tempo/latest/getting-started/example-demo-app/)，了解如何轻松上手）。使用对象存储还意味着你可以存储大量的应用程序的痕迹，而无需任何采样。这可以确保你永远不会丢弃那百万分之一的出错或具有较高延迟的请求的跟踪。

### 与开源工具的强大集成

[Grafana 7.3 包括了 Tempo 数据源](https://grafana.com/blog/2020/10/29/grafana-7.3-released-support-for-the-grafana-tempo-tracing-system-new-color-palettes-live-updates-for-dashboard-viewers-and-more/)，这意味着你可以在 Grafana UI 中可视化来自Tempo 的跟踪。而且，[Loki 2.0 的新查询特性](https://grafana.com/blog/2020/11/09/trace-discovery-in-grafana-tempo-using-prometheus-exemplars-loki-2.0-queries-and-more/) 使得 Tempo 中的跟踪更简单。为了与 Prometheus 集成，该团队正在添加对<ruby> 范例 <rt>  exemplar </rt></ruby>的支持，范例是可以添加到时间序列数据中的高基数元数据信息。度量存储后端不会对它们建立索引，但是你可以在 Grafana UI 中检索和显示度量值。尽管范例可以存储各种元数据，但是在这个用例中，存储跟踪 ID 是为了与 Tempo 紧密集成。

这个例子展示了使用带有请求延迟直方图的范例，其中每个范例数据点都链接到 Tempo 中的一个跟踪。

![Using exemplars in Tempo](/data/attachment/album/202103/23/221405umi3ziab6yzp226m.png "Using exemplars in Tempo")

### 元数据一致性

作为容器化应用程序运行的应用发出的遥测数据通常具有一些相关的元数据。这可以包括集群 ID、命名空间、吊舱 IP 等。这对于提供基于需求的信息是好的，但如果你能将元数据中包含的信息用于生产性的东西，那就更好了。 例如，你可以使用 [Grafana 云代理将跟踪信息导入 Tempo 中](https://grafana.com/blog/2020/11/17/tracing-with-the-grafana-cloud-agent-and-grafana-tempo/)，代理利用 Prometheus 服务发现机制轮询 Kubernetes API 以获取元数据信息，并且将这些标记添加到应用程序发出的跨域数据中。由于这些元数据也在 Loki 中也建立了索引，所以通过元数据转换为 Loki 标签选择器，可以很容易地从跟踪跳转到查看给定服务的日志。

下面是一个一致元数据的示例，它可用于Tempo跟踪中查看给定范围的日志。

![](/data/attachment/album/202103/23/221406ht5s6etve6335vzk.png)

### 云原生

Grafana Tempo 可以作为容器化应用，你可以在如 Kubernetes、Mesos 等编排引擎上运行它。根据获取/查询路径上的工作负载，各种服务可以水平伸缩。你还可以使用云原生的对象存储，如谷歌云存储、Amazon S3 或者 Tempo Azure 博客存储。更多的信息，请阅读 Tempo 文档中的 [架构部分](https://grafana.com/docs/tempo/latest/architecture/architecture/)。

### 试一试 Tempo

如果这对你和我们一样有用，可以 [克隆 Tempo 仓库](https://github.com/grafana/tempo)试一试。

---

via: <https://opensource.com/article/21/2/tempo-distributed-tracing>

作者：[Annanay Agarwal](https://opensource.com/users/annanayagarwal) 选题：[lujun9972](https://github.com/lujun9972) 译者：[RiaXu](https://github.com/ShuyRoy) 校对：[wxy](https://github.com/wxy)

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


在 Firefox 上使用 WebAssembly 要了解的 6 件事

Summary: 了解在 Firefox 上运行 WebAssembly 的机会和局限性。

>
> 了解在 Firefox 上运行 WebAssembly 的机会和局限性。
>
>
>

![](/data/attachment/album/202103/23/223901pi6tcg7ybsyxos7x.jpg "Woman using laptop concentrating")

WebAssembly 是一种可移植的执行格式，由于它能够以近乎原生的速度在浏览器中执行应用而引起了人们的极大兴趣。WebAssembly 本质上有一些特殊的属性和局限性。但是，通过将其与其他技术结合，将出现全新的可能性，尤其是与浏览器中的游戏有关的可能性。

本文介绍了在 Firefox 上运行 WebAssembly 的概念、可能性和局限性。

### 沙盒

WebAssembly 有 [严格的安全策略](https://webassembly.org/docs/security/)。 WebAssembly 中的程序或功能单元称为*模块*。每个模块实例都运行在自己的隔离内存空间中。因此，即使同一个网页加载了多个模块，它们也无法访问另一个模块的虚拟地址空间。设计上，WebAssembly 还考虑了内存安全性和控制流完整性，这使得（几乎）确定性的执行成为可能。

### Web API

通过 JavaScript [Web API](https://developer.mozilla.org/en-US/docs/Web/API) 可以访问多种输入和输出设备。根据这个 [提案](https://github.com/WebAssembly/gc/blob/master/README.md)，将来可以不用绕道到 JavaScript 来访问 Web API。C++ 程序员可以在 [Emscripten.org](https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html) 上找到有关访问 Web API 的信息。Rust 程序员可以使用 [rustwasm.github.io](https://rustwasm.github.io/wasm-bindgen/) 中写的 [wasm-bindgen](https://github.com/rustwasm/wasm-bindgen) 库。

### 文件输入/输出

因为 WebAssembly 是在沙盒环境中执行的，所以当它在浏览器中执行时，它无法访问主机的文件系统。但是，Emscripten 提供了虚拟文件系统形式的解决方案。

Emscripten 使在编译时将文件预加载到内存文件系统成为可能。然后可以像在普通文件系统上一样从 WebAssembly 应用中读取这些文件。这个 [教程](https://emscripten.org/docs/api_reference/Filesystem-API.html) 提供了更多信息。

### 持久化数据

如果你需要在客户端存储持久化数据，那么必须通过 JavaScript Web API 来完成。请参考 Mozilla 开发者网络（MDN）关于 [浏览器存储限制和过期标准](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria) 的文档，了解不同方法的详细信息。

### 内存管理

WebAssembly 模块作为 [堆栈机](https://en.wikipedia.org/wiki/Stack_machine) 在线性内存上运行。这意味着堆内存分配等概念是没有的。然而，如果你在 C++ 中使用 `new` 或者在 Rust 中使用 `Box::new`，你会期望它会进行堆内存分配。将堆内存分配请求转换成 WebAssembly 的方式在很大程度上依赖于工具链。你可以在 Frank Rehberger 关于 [WebAssembly 和动态内存](https://frehberg.wordpress.com/webassembly-and-dynamic-memory/) 的文章中找到关于不同工具链如何处理堆内存分配的详细分析。

### 游戏！

与 [WebGL](https://en.wikipedia.org/wiki/WebGL) 结合使用时，WebAssembly 的执行速度很高，因此可以在浏览器中运行原生游戏。大型专有游戏引擎 [Unity](https://beta.unity3d.com/jonas/AngryBots/) 和[虚幻 4](https://www.youtube.com/watch?v=TwuIRcpeUWE) 展示了 WebGL 可以实现的功能。也有使用 WebAssembly 和 WebGL 接口的开源游戏引擎。这里有些例子：

* 自 2011 年 11 月起，[id Tech 4](https://en.wikipedia.org/wiki/Id_Tech_4) 引擎（更常称之为 Doom 3 引擎）可在 [GitHub](https://github.com/id-Software/DOOM-3) 上以 GPL 许可的形式获得。此外，还有一个 [Doom 3 的 WebAssembly 移植版](https://wasm.continuation-labs.com/d3demo/)。
* Urho3D 引擎提供了一些 [令人印象深刻的例子](https://urho3d.github.io/samples/)，它们可以在浏览器中运行。
* 如果你喜欢复古游戏，可以试试这个 [Game Boy 模拟器](https://vaporboy.net/)。
* [Godot 引擎也能生成 WebAssembly](https://docs.godotengine.org/en/stable/development/compiling/compiling_for_web.html)。我找不到演示，但 [Godot 编辑器](https://godotengine.org/editor/latest/godot.tools.html) 已经被移植到 WebAssembly 上。

### 有关 WebAssembly 的更多信息

WebAssembly 是一项很有前途的技术，我相信我们将来会越来越多地看到它。除了在浏览器中执行之外，WebAssembly 还可以用作可移植的执行格式。[Wasmer](https://github.com/wasmerio/wasmer) 容器主机使你可以在各种平台上执行 WebAssembly 代码。

如果你需要更多的演示、示例和教程，请看一下这个 [WebAssembly 主题集合](https://github.com/mbasso/awesome-wasm)。Mozilla 的 [游戏和示例合集](https://developer.mozilla.org/en-US/docs/Games/Examples) 并非全是 WebAssembly，但仍然值得一看。

---

via: <https://opensource.com/article/21/3/webassembly-firefox>

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

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


硬核观察 | Equinix 推出“时间即服务”

Summary: 更多：• 2020 年三分之二的 Google 搜索没有带来进一步点击 • Canonical 将谷歌的 Flutter 视为未来桌面和移动应用的默认选择

![](/data/attachment/album/202103/24/091358m3w7vmwhzvj3hwtw.jpg)

### Equinix 推出“时间即服务”

![](/data/attachment/album/202103/24/091410dof08n6ioqftry8m.jpg)

许多行业和云服务都依赖于精确、可靠和安全的时间同步。传统的、基于天线的 GPS 授时基础设施解决方案可能难以安装，并会带来安全漏洞。同时，从互联网上利用公开 NTP 服务器授时也有网络安全风险。

数字基础设施公司 Equinix 正在推出的 [Precision Time 服务](https://www.equinix.com/services/edge-services/equinix-precision-time/)旨在解决这个挑战。Equinix 管理和维护一个由 GPS 天线、带有原子钟保持器的时间服务器及主时钟组成的冗余堆栈。新服务支持 NTP 和 PTP 等网络授时协议。该服务提供 50 微秒的 SLA，要比大多数时间同步精度要求高得多。

连时间都能成为服务，听起来有趣，但是其实有一定的必要性。

### 2020 年三分之二的 Google 搜索没有带来进一步点击

![](/data/attachment/album/202103/24/091421ebs3ca8y4yimygih.jpg)

2019 年的一项研究发现，50.33% 的 Google 搜索没有导致外链点击。2020 年这一比例进一步提高到[三分之二左右](https://sparktoro.com/blog/in-2020-two-thirds-of-google-searches-ended-without-a-click/)。这一数据来自 SimilarWeb 对 2020 年 51 万亿次 Google 搜索的分析。在这些搜索中，33.59% 点击了搜索结果，1.59% 点击了付费搜索结果，其余 64.82% 则是零点击。

看来通用搜索引擎的有效性越来越差了，难怪现在有很多垂直搜索引擎出现。

### Canonical 将谷歌的 Flutter 视为未来桌面和移动应用的默认选择

![](/data/attachment/album/202103/24/091432c84cozc04rzh0c8b.jpg)

Flutter 是一个使用 Dart 语言的框架，可以开发跨 Android、iOS、Windows、Linux、macOS 和 Web 的应用，不过 macOS 和 Linux 版本尚处于测试阶段。尽管如此，为了扩大 Linux 应用生态系统，Ubuntu 的开发商 Canonical 上个月还是宣布将用 Flutter 构建[新的桌面安装程序](https://www.theregister.com/2021/02/03/canonical_turns_to_google_flutter/)，并向开发者[表示](https://www.youtube.com/watch?v=IdrCyS7EF8M&t=205s)“Flutter 是 Canonical 未来创建的桌面和移动应用的默认选择”。

Flutter 的性能比 Electron 等替代品更好，虽然它的性能不如原生开发平台，但它跨操作系统开发的能力超过了这种差异。跨平台开发不仅仅意味着 Linux 开发者可以为其他平台编写应用，还意味着任何其他平台的 Flutter 开发者都可以将他们的应用贡献给 Linux，从而扩大 Linux 应用生态系统。

这是一个看起来不错的选择，但是 Flutter 并不是第一个以跨平台为主要卖点的框架，而之前的类似框架并未真正给 Linux 带来多少重要应用，所以将来的发展需要拭目以待。


利用 Python 探究 Google 的自然语言 API

>
> Google API 可以凸显出有关 Google 如何对网站进行分类的线索，以及如何调整内容以改进搜索结果的方法。
>
>
>

![](/data/attachment/album/202103/24/232018q66pz2uc5uuq1p03.jpg "magnifying glass on computer screen")

作为一名技术性的搜索引擎优化人员，我一直在寻找以新颖的方式使用数据的方法，以更好地了解 Google 如何对网站进行排名。我最近研究了 Google 的 [自然语言 API](https://cloud.google.com/natural-language/#natural-language-api-demo) 能否更好地揭示 Google 是如何分类网站内容的。

尽管有 [开源 NLP 工具](https://opensource.com/article/19/3/natural-language-processing-tools)，但我想探索谷歌的工具，前提是它可能在其他产品中使用同样的技术，比如搜索。本文介绍了 Google 的自然语言 API，并探究了常见的自然语言处理（NLP）任务，以及如何使用它们来为网站内容创建提供信息。

### 了解数据类型

首先，了解 Google 自然语言 API 返回的数据类型非常重要。

#### 实体

<ruby> 实体 <rt>  Entities </rt></ruby>是可以与物理世界中的某些事物联系在一起的文本短语。<ruby> 命名实体识别 <rt>  Named Entity Recognition </rt></ruby>（NER）是 NLP 的难点，因为工具通常需要查看关键字的完整上下文才能理解其用法。例如，<ruby> 同形异义字 <rt>  homographs </rt></ruby>拼写相同，但是具有多种含义。句子中的 “lead” 是指一种金属：“铅”（名词），使某人移动：“牵领”（动词），还可能是剧本中的主要角色（也是名词）？Google 有 12 种不同类型的实体，还有第 13 个名为 “UNKNOWN”（未知）的统称类别。一些实体与维基百科的文章相关，这表明 [知识图谱](https://en.wikipedia.org/wiki/Knowledge_Graph) 对数据的影响。每个实体都会返回一个显著性分数，即其与所提供文本的整体相关性。

![实体](/data/attachment/album/202103/24/232133yn9fxn48z9nq9wd4.png "Entities")

#### 情感

<ruby> 情感 <rt>  Sentiment </rt></ruby>，即对某事的看法或态度，是在文件和句子层面以及文件中发现的单个实体上进行衡量。情感的<ruby> 得分 <rt>  score </rt></ruby>范围从 -1.0（消极）到 1.0（积极）。<ruby> 幅度 <rt>  magnitude </rt></ruby>代表情感的<ruby> 非归一化 <rt>  non-normalized </rt></ruby>强度；它的范围是 0.0 到无穷大。

![情感](/data/attachment/album/202103/24/232134u49cg3zk9yp2q023.png "Sentiment")

#### 语法

<ruby> 语法 <rt>  Syntax </rt></ruby>解析包含了大多数在较好的库中常见的 NLP 活动，例如 <ruby>   词形演变  <rt>  lemmatization </rt></ruby>、<ruby>   词性标记  <rt>  part-of-speech tagging </rt></ruby> 和 <ruby>   依赖树解析  <rt>  dependency-tree parsing </rt></ruby>。NLP 主要处理帮助机器理解文本和关键字之间的关系。语法解析是大多数语言处理或理解任务的基础部分。

![语法](/data/attachment/album/202103/24/232134l5q5rjdwdszzdszj.png "Syntax")

#### 分类

<ruby> 分类 <rt>  Categories </rt></ruby>是将整个给定内容分配给特定行业或主题类别，其<ruby> 置信度 <rt>  confidence </rt></ruby>得分从 0.0 到 1.0。这些分类似乎与其他 Google 工具使用的受众群体和网站类别相同，如 AdWords。

![分类](/data/attachment/album/202103/24/232134loa7cb69a8bnbapl.png "Categories")

### 提取数据

现在，我将提取一些示例数据进行处理。我使用 Google 的 [搜索控制台 API](https://developers.google.com/webmaster-tools/) 收集了一些搜索查询及其相应的网址。Google 搜索控制台是一个报告人们使用 Google Search 查找网站页面的术语的工具。这个 [开源的 Jupyter 笔记本](https://github.com/MLTSEO/MLTS/blob/master/Demos.ipynb) 可以让你提取有关网站的类似数据。在此示例中，我在 2019 年 1 月 1 日至 6 月 1 日期间生成的一个网站（我没有提及名字）上提取了 Google 搜索控制台数据，并将其限制为至少获得一次点击（而不只是<ruby> 曝光 <rt>  impressions </rt></ruby>）的查询。

该数据集包含 2969 个页面和在 Google Search 的结果中显示了该网站网页的 7144 条查询的信息。下表显示，绝大多数页面获得的点击很少，因为该网站侧重于所谓的长尾（越特殊通常就更长尾）而不是短尾（非常笼统，搜索量更大）搜索查询。

![所有页面的点击次数柱状图](/data/attachment/album/202103/24/232134obtqt33t7qwbqd7d.png "Histogram of clicks for all pages")

为了减少数据集的大小并仅获得效果最好的页面，我将数据集限制为在此期间至少获得 20 次曝光的页面。这是精炼数据集的按页点击的柱状图，其中包括 723 个页面：

![部分网页的点击次数柱状图](/data/attachment/album/202103/24/232135xtqtlen7s7ydstoo.png "Histogram of clicks for subset of pages")

### 在 Python 中使用 Google 自然语言 API 库

要测试 API，在 Python 中创建一个利用 [google-cloud-language](https://pypi.org/project/google-cloud-language/) 库的小脚本。以下代码基于 Python 3.5+。

首先，激活一个新的虚拟环境并安装库。用环境的唯一名称替换 `<your-env>` 。

```
virtualenv <your-env>
source <your-env>/bin/activate
pip install --upgrade google-cloud-language
pip install --upgrade requests

```

该脚本从 URL 提取 HTML，并将 HTML 提供给自然语言 API。返回一个包含 `sentiment`、 `entities` 和 `categories` 的字典，其中这些键的值都是列表。我使用 Jupyter 笔记本运行此代码，因为使用同一内核注释和重试代码更加容易。

```
# Import needed libraries
import requests
import json

from google.cloud import language
from google.oauth2 import service_account
from google.cloud.language import enums
from google.cloud.language import types

# Build language API client (requires service account key)
client = language.LanguageServiceClient.from_service_account_json('services.json')

# Define functions
def pull_googlenlp(client, url, invalid_types = ['OTHER'], **data):

        html = load_text_from_url(url, **data)

        if not html:
        return None

        document = types.Document(
        content=html,
        type=language.enums.Document.Type.HTML )

        features = {'extract_syntax': True,
                'extract_entities': True,
                'extract_document_sentiment': True,
                'extract_entity_sentiment': True,
                'classify_text': False
                }

        response = client.annotate_text(document=document, features=features)
        sentiment = response.document_sentiment
        entities = response.entities

        response = client.classify_text(document)
        categories = response.categories

        def get_type(type):
        return client.enums.Entity.Type(entity.type).name

        result = {}

        result['sentiment'] = []
        result['entities'] = []
        result['categories'] = []

        if sentiment:
        result['sentiment'] = [{ 'magnitude': sentiment.magnitude, 'score':sentiment.score }]

        for entity in entities:
        if get_type(entity.type) not in invalid_types:
                result['entities'].append({'name': entity.name, 'type': get_type(entity.type), 'salience': entity.salience, 'wikipedia_url': entity.metadata.get('wikipedia_url', '-')  })

        for category in categories:
        result['categories'].append({'name':category.name, 'confidence': category.confidence})

        return result

def load_text_from_url(url, **data):

        timeout = data.get('timeout', 20)

        results = []

        try:

        print("Extracting text from: {}".format(url))
        response = requests.get(url, timeout=timeout)

        text = response.text
        status = response.status_code

        if status == 200 and len(text) > 0:
                return text

        return None

        except Exception as e:
        print('Problem with url: {0}.'.format(url))
        return None

```

要访问该 API，请按照 Google 的 [快速入门说明](https://cloud.google.com/natural-language/docs/quickstart) 在 Google 云主控台中创建一个项目，启用该 API 并下载服务帐户密钥。之后，你应该拥有一个类似于以下内容的 JSON 文件：

![services.json 文件](/data/attachment/album/202103/24/232135eszdngayasad36cs.png "services.json file")

命名为 `services.json`，并上传到项目文件夹。

然后，你可以通过运行以下程序来提取任何 URL（例如 [Opensource.com](http://Opensource.com)）的 API 数据：

```
url = "https://opensource.com/article/19/6/how-ssh-running-container"
pull_googlenlp(client,url)

```

如果设置正确，你将看到以下输出：

![拉取 API 数据的输出](/data/attachment/album/202103/24/232135i2ne05ob5fe5feje.png "Output from pulling API data")

为了使入门更加容易，我创建了一个 [Jupyter 笔记本](https://github.com/MLTSEO/MLTS/blob/master/Tutorials/Google_Language_API_Intro.ipynb)，你可以下载并使用它来测试提取网页的实体、类别和情感。我更喜欢使用 [JupyterLab](https://github.com/jupyterlab/jupyterlab)，它是 Jupyter 笔记本的扩展，其中包括文件查看器和其他增强的用户体验功能。如果你不熟悉这些工具，我认为利用 [Anaconda](https://www.anaconda.com/distribution/) 是开始使用 Python 和 Jupyter 的最简单途径。它使安装和设置 Python 以及常用库变得非常容易，尤其是在 Windows 上。

### 处理数据

使用这些函数，可抓取给定页面的 HTML 并将其传递给自然语言 API，我可以对 723 个 URL 进行一些分析。首先，我将通过查看所有页面中返回的顶级分类的数量来查看与网站相关的分类。

#### 分类

![来自示例站点的分类数据](/data/attachment/album/202103/24/232136g27pgut772zk27z9.png "Categories data from example site")

这似乎是该特定站点的关键主题的相当准确的代表。通过查看一个效果最好的页面进行排名的单个查询，我可以比较同一查询在 Google 搜索结果中的其他排名页面。

* URL 1 |顶级类别：/法律和政府/与法律相关的（0.5099999904632568）共 1 个类别。
* 未返回任何类别。
* URL 3 |顶级类别：/互联网与电信/移动与无线（0.6100000143051147）共 1 个类别。
* URL 4 |顶级类别：/计算机与电子产品/软件（0.5799999833106995）共有 2 个类别。
* URL 5 |顶级类别：/互联网与电信/移动与无线/移动应用程序和附件（0.75）共有 1 个类别。
* 未返回任何类别。
* URL 7 |顶级类别：/计算机与电子/软件/商业与生产力软件（0.7099999785423279）共 2 个类别。
* URL 8 |顶级类别：/法律和政府/与法律相关的（0.8999999761581421）共 3 个类别。
* URL 9 |顶级类别：/参考/一般参考/类型指南和模板（0.6399999856948853）共有 1 个类别。
* 未返回任何类别。

上方括号中的数字表示 Google 对页面内容与该分类相关的置信度。对于相同分类，第八个结果比第一个结果具有更高的置信度，因此，这似乎不是定义排名相关性的灵丹妙药。此外，分类太宽泛导致无法满足特定搜索主题的需要。

通过排名查看平均置信度，这两个指标之间似乎没有相关性，至少对于此数据集而言如此：

![平均置信度排名分布图](/data/attachment/album/202103/24/232136ic4s5ou4cgsycisu.png "Plot of average confidence by ranking position ")

这两种方法对网站进行规模审查是有意义的，以确保内容类别易于理解，并且样板或销售内容不会使你的页面与你的主要专业知识领域无关。想一想，如果你出售工业用品，但是你的页面返回 “Marketing（销售）” 作为主要分类。似乎没有一个强烈的迹象表明，分类相关性与你的排名有什么关系，至少在页面级别如此。

#### 情感

我不会在情感上花很多时间。在所有从 API 返回情感的页面中，它们分为两个区间：0.1 和 0.2，这几乎是中立的情感。根据直方图，很容易看出情感没有太大价值。对于新闻或舆论网站而言，测量特定页面的情感到中位数排名之间的相关性将是一个更加有趣的指标。

![独特页面的情感柱状图](/data/attachment/album/202103/24/232136wzorqo9d9ooypmo3.png "Histogram of sentiment for unique pages")

#### 实体

在我看来，实体是 API 中最有趣的部分。这是在所有页面中按<ruby> 显著性 <rt>  salience </rt></ruby>（或与页面的相关性）选择的顶级实体。请注意，对于相同的术语（销售清单），Google 会推断出不同的类型，可能是错误的。这是由于这些术语出现在内容中的不同上下文中引起的。

![示例网站的顶级实体](/data/attachment/album/202103/24/232136d1ppkvn8vfkpdqqa.png "Top entities for example site")

然后，我分别查看了每个实体类型，并一起查看了该实体的显著性与页面的最佳排名位置之间是否存在任何关联。对于每种类型，我匹配了与该类型匹配的顶级实体的显著性（与页面的整体相关性），按显著性排序（降序）。

有些实体类型在所有示例中返回的显著性为零，因此我从下面的图表中省略了这些结果。

![显著性与最佳排名位置的相关性](/data/attachment/album/202103/24/232137bz34u2478b6b7ctz.png "Correlation between salience and best ranking position")

“Consumer Good（消费性商品）” 实体类型具有最高的正相关性，<ruby> 皮尔森相关度 <rt>  Pearson correlation </rt></ruby>为 0.15854，尽管由于较低编号的排名更好，所以 “Person” 实体的结果最好，相关度为 -0.15483。这是一个非常小的样本集，尤其是对于单个实体类型，我不能对数据做太多的判断。我没有发现任何具有强相关性的值，但是 “Person” 实体最有意义。网站通常都有关于其首席执行官和其他主要雇员的页面，这些页面很可能在这些查询的搜索结果方面做得好。

继续，当从整体上看站点，根据实体名称和实体类型，出现了以下主题。

![基于实体名称和实体类型的主题](/data/attachment/album/202103/24/232137fpa2olp874ohavha.png "Themes based on entity name and entity type")

我模糊了几个看起来过于具体的结果，以掩盖网站的身份。从主题上讲，名称信息是在你（或竞争对手）的网站上局部查看其核心主题的一种好方法。这样做仅基于示例网站的排名网址，而不是基于所有网站的可能网址（因为 Search Console 数据仅记录 Google 中展示的页面），但是结果会很有趣，尤其是当你使用像 [Ahrefs](https://ahrefs.com/) 之类的工具提取一个网站的主要排名 URL，该工具会跟踪许多查询以及这些查询的 Google 搜索结果。

实体数据中另一个有趣的部分是标记为 “CONSUMER\_GOOD” 的实体倾向于 “看起来” 像我在看到 “<ruby> 知识结果 <rt>  Knowledge Results </rt></ruby>”的结果，即页面右侧的 Google 搜索结果。

![Google 搜索结果](/data/attachment/album/202103/24/232137zhh0mh1d3y11dh5l.png "Google search results")

在我们的数据集中具有三个或三个以上关键字的 “Consumer Good（消费性商品）” 实体名称中，有 5.8％ 的知识结果与 Google 对该实体命名的结果相同。这意味着，如果你在 Google 中搜索术语或短语，则右侧的框（例如，上面显示 Linux 的知识结果）将显示在搜索结果页面中。由于 Google 会 “挑选” 代表实体的示例网页，因此这是一个很好的机会，可以在搜索结果中识别出具有唯一特征的机会。同样有趣的是，5.8％ 的在 Google 中显示这些知识结果名称中，没有一个实体的维基百科 URL 从自然语言 API 中返回。这很有趣，值得进行额外的分析。这将是非常有用的，特别是对于传统的全球排名跟踪工具（如 Ahrefs）数据库中没有的更深奥的主题。

如前所述，知识结果对于那些希望自己的内容在 Google 中被收录的网站所有者来说是非常重要的，因为它们在桌面搜索中加强高亮显示。假设，它们也很可能与 Google [Discover](https://www.blog.google/products/search/introducing-google-discover/) 的知识库主题保持一致，这是一款适用于 Android 和 iOS 的产品，它试图根据用户感兴趣但没有明确搜索的主题为用户浮现内容。

### 总结

本文介绍了 Google 的自然语言 API，分享了一些代码，并研究了此 API 对网站所有者可能有用的方式。关键要点是：

* 学习使用 Python 和 Jupyter 笔记本可以为你的数据收集任务打开到一个由令人难以置信的聪明和有才华的人建立的不可思议的 API 和开源项目（如 Pandas 和 NumPy）的世界。
* Python 允许我为了一个特定目的快速提取和测试有关 API 值的假设。
* 通过 Google 的分类 API 传递网站页面可能是一项很好的检查，以确保其内容分解成正确的主题分类。对于竞争对手的网站执行此操作还可以提供有关在何处进行调整或创建内容的指导。
* 对于示例网站，Google 的情感评分似乎并不是一个有趣的指标，但是对于新闻或基于意见的网站，它可能是一个有趣的指标。
* Google 发现的实体从整体上提供了更细化的网站的主题级别视图，并且像分类一样，在竞争性内容分析中使用将非常有趣。
* 实体可以帮助定义机会，使你的内容可以与搜索结果或 Google Discover 结果中的 Google 知识块保持一致。我们将 5.8％ 的结果设置为更长的（字计数）“Consumer Goods（消费商品）” 实体，显示这些结果，对于某些网站来说，可能有机会更好地优化这些实体的页面显著性分数，从而有更好的机会在 Google 搜索结果或 Google Discovers 建议中抓住这个重要作用的位置。

---

via: <https://opensource.com/article/19/7/python-google-natural-language-api>

作者：[JR Oakes](https://opensource.com/users/jroakes) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

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


使用 gdu 进行更快的磁盘使用情况检查

Summary: 在 Linux 终端中有两种常用的检查磁盘使用情况的方法

在 Linux 终端中有两种常用的检查磁盘使用情况的方法

![](/data/attachment/album/202103/24/233818dkfvi4fviiysn8o9.jpg)

在 Linux 终端中有两种常用的 [检查磁盘使用情况的方法](https://linuxhandbook.com/df-command/)：`du` 命令和 `df` 命令。[du 命令更多的是用来检查目录的使用空间](https://linuxhandbook.com/find-directory-size-du-command/)，`df` 命令则是提供文件系统级别的磁盘使用情况。

还有更友好的 [用 GNOME “磁盘” 等图形工具在 Linux 中查看磁盘使用情况的方法](https://itsfoss.com/check-free-disk-space-linux/)。如果局限于终端，你可以使用像 [ncdu](https://dev.yorhel.nl/ncdu) 这样的 [TUI](https://itsfoss.com/gui-cli-tui/) 工具，以一种图形化的方式获取磁盘使用信息。

### gdu: 在 Linux 终端中检查磁盘使用情况

[gdu](https://github.com/dundee/gdu) 就是这样一个用 Go 编写的工具（因此是 gdu 中的 “g”）。gdu 开发者的 [基准测试](https://github.com/dundee/gdu#benchmarks) 表明，它的磁盘使用情况检查速度相当快，特别是在 SSD 上。事实上，gdu 主要是针对 SSD 的，尽管它也可以在 HDD 上工作。

如果你在使用 `gdu` 命令时没有使用任何选项，它就会显示你当前所在目录的磁盘使用情况。

![](/data/attachment/album/202103/24/233827bsoqzsu7onk8jb3b.png)

由于它具有文本用户界面（TUI），你可以使用箭头浏览目录和磁盘。你也可以按文件名或大小对结果进行排序。

你可以用它做到：

* 向上箭头或 `k` 键将光标向上移动
* 向下箭头或 `j` 键将光标向下移动
* 回车选择目录/设备
* 左箭头或 `h` 键转到上级目录
* 使用 `d` 键删除所选文件或目录
* 使用 `n` 键按名称排序
* 使用 `s` 键按大小排序
* 使用 `c` 键按项目排序

你会注意到一些条目前的一些符号。这些符号有特定的意义。

![](/data/attachment/album/202103/24/233829jd2z8826u9e9ad4i.png)

* `!` 表示读取目录时发生错误。
* `.` 表示在读取子目录时发生错误，大小可能不正确。
* `@` 表示文件是一个符号链接或套接字。
* `H` 表示文件已经被计数（硬链接）。
* `e` 表示目录为空。

要查看所有挂载磁盘的磁盘利用率和可用空间，使用选项 `d`：

```
gdu -d

```

它在一屏中显示所有的细节：

![](/data/attachment/album/202103/24/233830f9mkzjz6ymm9bfj9.png)

看起来是个方便的工具，对吧？让我们看看如何在你的 Linux 系统上安装它。

### 在 Linux 上安装 gdu

gdu 是通过 [AUR](https://itsfoss.com/aur-arch-linux/) 提供给 Arch 和 Manjaro 用户的。我想，作为一个 Arch 用户，你应该知道如何使用 AUR。

它包含在即将到来的 Ubuntu 21.04 的 universe 仓库中，但有可能你现在还没有使用它。这种情况下，你可以使用 Snap 安装它，这可能看起来有很多条 `snap` 命令：

```
snap install gdu-disk-usage-analyzer
snap connect gdu-disk-usage-analyzer:mount-observe :mount-observe
snap connect gdu-disk-usage-analyzer:system-backup :system-backup
snap alias gdu-disk-usage-analyzer.gdu gdu

```

你也可以在其发布页面找到源代码：

* [下载 gdu 的源代码](https://github.com/dundee/gdu/releases)

我更习惯于使用 `du` 和 `df` 命令，但我觉得一些 Linux 用户可能会喜欢 gdu。你是其中之一吗？

---

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

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

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


硬核观察 | 数据显示 QQ 用户数一年间减少 5000 多万

Summary: 更多：• 特斯拉美国官网支持使用比特币进行支付 • GNOME 40 发布

垃圾腾讯

我前段时间看到报道，说现在的年轻人更喜欢用QQ。而我个人觉得微信真的是垃圾，不得不用的感觉太难受了。但QQ也确实好久没用了，只是因为工作的原因，偶尔用用TIM。

更多：• 特斯拉美国官网支持使用比特币进行支付 • GNOME 40 发布

![](/data/attachment/album/202103/25/082923jbpbt8pdp1d8bpdt.jpg)

### 数据显示 QQ 用户数一年间减少 5000 多万

![](/data/attachment/album/202103/25/082935aal5ahxppz0x09qs.jpg)

腾讯发布 2020 年四季度和全年财报，截止至去年年底，在微信用户数达到了 12.25 亿，增加 6100 万的同时，QQ 用户数降至 5.94 亿，同比减少了 8.1%，大约减少了 5200 万。

曾经的中国社交 IM 王者，如今却一步步走下坡路，你有多少时间没有打开 QQ 聊天了？

### 特斯拉美国官网支持使用比特币进行支付

![](/data/attachment/album/202103/25/082949shc4ljjzfzj1jehw.jpg)

特斯拉 CEO 埃隆·马斯克通过推文宣布，他们已经完成了允许消费者用比特币购买一辆汽车的功能。此消息一出，比特币随之短线上扬 1000 美元。马斯克表示，特斯拉不会将比特币兑换成美元。目前只支持美国本土的客户使用比特币付款。据法律专家表示，这在中国可能行不通。

那么多少个比特币可以买一辆特斯拉呢？

![](/data/attachment/album/202103/25/083008i8agegiduzhjhg5j.png)

一方面特斯拉在降价，另外一方面比特币在涨价，马一龙真是一个造势的好手啊。

### GNOME 40 发布

![](/data/attachment/album/202103/25/083022ojhou7nnxxh1o4h7.jpg)

[GNOME 40](https://www.gnome.org/) 及 GTK4 工具包[正式发布](https://help.gnome.org/misc/release-notes/40.0/)了。在此版本中，对 GNOME Shell 进行了许多改进和改动，包括对仪表盘和工作空间的重大改动，Mutter 继续完善了对 Wayland 的支持，Mutter 还增加了一个用于测试的原生的无显示后端，现在支持原子模式设置，还有其他各种各样的改进。

除了对版本号的吐槽之外，GNOME 40 还是一个非常值得期待的版本！


用 Jupyter 学习 Python 字典

Summary: 字典数据结构可以帮助你快速访问信息。

字典数据结构可以帮助你快速访问信息。

>
> 字典数据结构可以帮助你快速访问信息。
>
>
>

![](/data/attachment/album/202103/26/094720i58u5qxx3l4qsssx.jpg "Hands on a keyboard with a Python book ")

字典是 Python 编程语言使用的数据结构。一个 Python 字典由多个键值对组成；每个键值对将键映射到其关联的值上。

例如你是一名老师，想把学生姓名与成绩对应起来。你可以使用 Python 字典，将学生姓名映射到他们关联的成绩上。此时，键值对中键是姓名，值是对应的成绩。

如果你想知道某个学生的考试成绩，你可以从字典中访问。这种快捷查询方式可以为你节省解析整个列表找到学生成绩的时间。

本文介绍了如何通过键访问对应的字典值。学习前，请确保你已经安装了 [Anaconda 包管理器](https://docs.anaconda.com/anaconda/)和 [Jupyter 笔记本](https://opensource.com/article/18/3/getting-started-jupyter-notebooks)。

### 1、在 Jupyter 中打开一个新的笔记本

首先在 Web 浏览器中打开并运行 Jupyter。然后，

1. 转到左上角的 “File”。
2. 选择 “New Notebook”，点击 “Python 3”。

![新建 Jupyter 笔记本](/data/attachment/album/202103/26/094801rl4pik51nd34qz5l.png "Create Jupyter notebook")

开始时，新建的笔记本是无标题的，你可以将其重命名为任何名称。我为我的笔记本取名为 “[OpenSource.com](http://OpenSource.com) Data Dictionary Tutorial”。

笔记本中标有行号的位置就是你写代码的区域，也是你输入的位置。

在 macOS 上，可以同时按 `Shift + Return` 键得到输出。在创建新的代码区域前，请确保完成上述动作；否则，你写的任何附加代码可能无法运行。

### 2、新建一个键值对

在字典中输入你希望访问的键与值。输入前，你需要在字典上下文中定义它们的含义：

```
empty_dictionary = {}
grades = {
    "Kelsey": 87,
    "Finley": 92
}

one_line = {a: 1, b: 2}

```

![定义字典键值对的代码](/data/attachment/album/202103/26/094801k6jqezjqaozqwwzs.png "Code for defining key-value pairs in the dictionary")

这段代码让字典将特定键与其各自的值关联起来。字典按名称存储数据，从而可以更快地查询。

### 3、通过键访问字典值

现在你想查询指定的字典值；在上述例子中，字典值指特定学生的成绩。首先，点击 “Insert” 后选择 “Insert Cell Below”。

![在 Jupyter 插入新建单元格](/data/attachment/album/202103/26/094801xdfp9f4wee4uf4de.png "Inserting a new cell in Jupyter")

在新单元格中，定义字典中的键与值。

然后，告诉字典打印该值的键，找到需要的值。例如，查询名为 Kelsey 的学生的成绩：

```
# 访问字典中的数据
grades = {
    "Kelsey": 87,
    "Finley": 92
}

print(grades["Kelsey"])
87

```

![查询特定值的代码](/data/attachment/album/202103/26/094802my6m8070sky861lx.png "Code to look for a specific value")

当你查询 Kelsey 的成绩（也就是你想要查询的值）时，如果你用的是 macOS，只需要同时按 `Shift+Return` 键。

你会在单元格下方看到 Kelsey 的成绩。

### 4、更新已有的键

当把一位学生的错误成绩添加到字典时，你会怎么办？可以通过更新字典、存储新值来修正这类错误。

首先，选择你想更新的那个键。在上述例子中，假设你错误地输入了 Finley 的成绩，那么 Finley 就是你需要更新的键。

为了更新 Finley 的成绩，你需要在下方插入新的单元格，然后创建一个新的键值对。同时按 `Shift+Return` 键打印字典全部信息：

```
grades["Finley"] = 90
print(grades)

{'Kelsey': 87; "Finley": 90}

```

![更新键的代码](/data/attachment/album/202103/26/094802rg6ci3culko3ligg.png "Code for updating a key")

单元格下方输出带有 Finley 更新成绩的字典。

### 5、添加新键

假设你得到一位新学生的考试成绩。你可以用新键值对将那名学生的姓名与成绩补充到字典中。

插入新的单元格，以键值对形式添加新学生的姓名与成绩。当你完成这些后，同时按 `Shift+Return` 键打印字典全部信息：

```
grades["Alex"] = 88
print(grades)

{'Kelsey': 87, 'Finley': 90, 'Alex': 88}

```

![添加新键](/data/attachment/album/202103/26/094802q4fk427lbekv4ukx.png "Add a new key")

所有的键值对输出在单元格下方。

### 使用字典

请记住，键与值可以是任意数据类型，但它们很少是<ruby> <a href="https://www.datacamp.com/community/tutorials/data-structures-python">  扩展数据类型 </a> <rt>  non-primitive types </rt></ruby>。此外，字典不能以指定的顺序存储、组织里面的数据。如果你想要数据有序，最好使用 Python 列表，而非字典。

如果你考虑使用字典，首先要确认你的数据结构是否是合适的，例如像电话簿的结构。如果不是，列表、元组、树或者其他数据结构可能是更好的选择。

---

via: <https://opensource.com/article/21/3/dictionary-values-python>

作者：[Lauren Maffeo](https://opensource.com/users/lmaffeo) 选题：[lujun9972](https://github.com/lujun9972) 译者：[DCOLIVERSUN](https://github.com/DCOLIVERSUN) 校对：[wxy](https://github.com/wxy)

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


为什么我在 Linux 上使用 exa 而不是 ls？

Summary: exa 是一个 Linux ls 命令的现代替代品。

我用 lsd  github:Peltoche/lsd

tree 不香吗

tree 不香吗

exa 是一个 Linux ls 命令的现代替代品。

>
> exa 是一个 Linux ls 命令的现代替代品。
>
>
>

![](/data/attachment/album/202103/26/101726h008fn6tttn4g6gt.jpg "bash logo on green background")

我们生活在一个繁忙的世界里，当我们需要查找文件和数据时，使用 `ls` 命令可以节省时间和精力。但如果不经过大量调整，默认的 `ls` 输出并不十分舒心。当有一个 exa 替代方案时，为什么要花时间眯着眼睛看黑白文字呢？

[exa](https://the.exa.website/docs) 是一个常规 `ls` 命令的现代替代品，它让生活变得更轻松。这个工具是用 [Rust](https://opensource.com/tags/rust) 编写的，该语言以并行性和安全性而闻名。

### 安装 exa

要安装 `exa`，请运行：

```
$ dnf install exa

```

### 探索 exa 的功能

`exa` 改进了 `ls` 文件列表，它提供了更多的功能和更好的默认值。它使用颜色来区分文件类型和元数据。它能识别符号链接、扩展属性和 Git。而且它体积小、速度快，只有一个二进制文件。

#### 跟踪文件

你可以使用 `exa` 来跟踪某个 Git 仓库中新增的文件。

![Tracking Git files with exa](/data/attachment/album/202103/26/101751cqw4iv3zt4qwww74.png "Tracking Git files with exa")

#### 树形结构

这是 `exa` 的基本树形结构。`--level` 的值决定了列表的深度，这里设置为 2。如果你想列出更多的子目录和文件，请增加 `--level` 的值。

![exa's default tree structure](/data/attachment/album/202103/26/101751smisaiiu73wqjwiw.png "exa's default tree structure")

这个树包含了每个文件的很多元数据。

![Metadata in exa's tree structure](/data/attachment/album/202103/26/101752lr2zqepcqp022lkk.png "Metadata in exa's tree structure")

#### 配色方案

默认情况下，`exa` 根据 [内置的配色方案](https://the.exa.website/features/colours) 来标识不同的文件类型。它不仅对文件和目录进行颜色编码，还对 `Cargo.toml`、`CMakeLists.txt`、`Gruntfile.coffee`、`Gruntfile.js`、`Makefile` 等多种文件类型进行颜色编码。

#### 扩展文件属性

当你使用 `exa` 探索 xattrs（扩展的文件属性）时，`--extended` 会显示所有的 xattrs。

![xattrs in exa](/data/attachment/album/202103/26/101752tjp2m14e42g7vjdm.png "xattrs in exa")

#### 符号链接

`exa` 能识别符号链接，也能指出实际的文件。

![symlinks in exa](/data/attachment/album/202103/26/101753q2zzx6xh03vqvt32.png "symlinks in exa")

#### 递归

当你想递归当前目录下所有目录的列表时，`exa` 能进行递归。

![recurse in exa](/data/attachment/album/202103/26/101753ltaahate7vh8tthw.png "recurse in exa")

### 总结

我相信 `exa 是最简单、最容易适应的工具之一。它帮助我跟踪了很多 Git 和 Maven 文件。它的颜色编码让我更容易在多个子目录中进行搜索，它还能帮助我了解当前的 xattrs。

你是否已经用 `exa` 替换了 `ls`？请在评论中分享你的反馈。

---

via: <https://opensource.com/article/21/3/replace-ls-exa>

作者：[Sudeshna Sur](https://opensource.com/users/sudeshna-sur) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


多云融合和安全集成推动 SD-WAN 的大规模应用

>
> 2022 年 SD-WAN 市场 40% 的同比增长主要来自于包括 Cisco、VMWare、Juniper 和 Arista 在内的网络供应商和包括 AWS、Microsoft Azure，Google Anthos 和 IBM RedHat 在内的服务提供商之间的紧密联系。
>
>
>

![](/data/attachment/album/202103/27/095154f0625f3k8455800x.jpg)

越来越多的云应用，以及越来越完善的网络安全性、可视化特性和可管理性，正以惊人的速度推动企业<ruby> 软件定义广域网 <rt>  software-defined WAN </rt></ruby>（[SD-WAN](https://www.networkworld.com/article/3031279/sd-wan-what-it-is-and-why-you-ll-use-it-one-day.html)）的部署。

IDC（LCTT 译注：International Data Corporation）公司的网络基础架构副总裁 Rohit Mehra 表示，根据 IDC 的研究，过去一年中，特别是软件和基础设施即服务（SaaS 和 IaaS）产品推动了 SD-WAN 的实施。

例如，IDC 表示，根据其最近的客户调查结果，有 95％ 的客户将在两年内使用 [SD-WAN](https://www.networkworld.com/article/3489938/what-s-hot-at-the-edge-for-2020-everything.html) 技术，而 42％ 的客户已经部署了它。IDC 还表示，到 2022 年，SD-WAN 基础设施市场将达到 45 亿美元，此后每年将以每年 40％ 的速度增长。

“SD-WAN 的增长是一个广泛的趋势，很大程度上是由企业希望优化远程站点的云连接性的需求推动的。” Mehra 说。

思科最近撰文称，多云网络的发展正在促使许多企业改组其网络，以更好地使用 SD-WAN 技术。SD-WAN 对于采用云服务的企业至关重要，它是园区网、分支机构、[物联网](https://www.networkworld.com/article/3207535/what-is-iot-the-internet-of-things-explained.html)、[数据中心](https://www.networkworld.com/article/3223692/what-is-a-data-centerhow-its-changed-and-what-you-need-to-know.html) 和云之间的连接中间件。思科公司表示，根据调查，平均每个思科的企业客户有 30 个付费的 SaaS 应用程序，而他们实际使用的 SaaS 应用会更多——在某些情况下甚至超过 100 种。

这种趋势的部分原因是由网络供应商（例如 Cisco、VMware、Juniper、Arista 等）（LCTT 译注：这里的网络供应商指的是提供硬件或软件并可按需组网的厂商）与服务提供商（例如 Amazon AWS、Microsoft Azure、Google Anthos 和 IBM RedHat 等）建立的关系推动的。

去年 12 月，AWS 为其云产品发布了关键服务，其中包括诸如 [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/) 等新集成技术的关键服务，这标志着 SD-WAN 与多云场景关系的日益重要。使用 AWS Transit Gateway 技术，客户可以将 AWS 中的 VPC（<ruby> 虚拟私有云 <rt>  Virtual Private Cloud </rt></ruby>）和其自有网络均连接到相同的网关。Aruba、Aviatrix Cisco、Citrix Systems、Silver Peak 和 Versa 已经宣布支持该技术，这将简化和增强这些公司的 SD-WAN 产品与 AWS 云服务的集成服务的性能和表现。

Mehra 说，展望未来，对云应用的友好兼容和完善的性能监控等增值功能将是 SD-WAN 部署的关键部分。

随着 SD-WAN 与云的关系不断发展，SD-WAN 对集成安全功能的需求也在不断增长。

Mehra 说，SD-WAN 产品集成安全性的方式比以往单独打包的广域网安全软件或服务要好得多。SD-WAN 是一个更加敏捷的安全环境。SD-WAN 公认的主要组成部分包括安全功能，数据分析功能和广域网优化功能等，其中安全功能则是下一代 SD-WAN 解决方案的首要需求。

Mehra 说，企业将越来越少地关注仅解决某个具体问题的 SD-WAN 解决方案，而将青睐于能够解决更广泛的网络管理和安全需求的 SD-WAN 平台。他们将寻找可以与他们的 IT 基础设施（包括企业数据中心网络、企业园区局域网、[公有云](https://www.networkworld.com/article/2159885/cloud-computing-gartner-5-things-a-private-cloud-is-not.html) 资源等）集成更紧密的 SD-WAN 平台。他说，企业将寻求无缝融合的安全服务，并希望有其他各种功能的支持，例如可视化、数据分析和统一通信功能。

“随着客户不断将其基础设施与软件集成在一起，他们可以做更多的事情，例如根据其局域网和广域网上的用户、设备或应用程序的需求，实现一致的管理和安全策略，并最终获得更好的整体使用体验。” Mehra 说。

一个新兴趋势是 SD-WAN 产品包需要支持 [SD-branch](https://www.networkworld.com/article/3250664/sd-branch-what-it-is-and-why-youll-need-it.html) 技术。 Mehra 说，超过 70％ 的 IDC 受调查客户希望在明年使用 SD-Branch。在最近几周，[Juniper](https://www.networkworld.com/article/3487801/juniper-broadens-sd-branch-management-switch-options.html) 和 [Aruba](https://www.networkworld.com/article/3513357/aruba-reinforces-sd-branch-with-security-management-upgrades.html) 公司已经优化了 SD-branch 产品，这一趋势预计将在今年持续下去。

SD-Branch 技术建立在 SD-WAN 的概念和支持的基础上，但更专注于满足分支机构中局域网的组网和管理需求。展望未来，SD-Branch 如何与其他技术集成，例如数据分析、音视频、统一通信等，将成为该技术的主要驱动力。

---

via: <https://www.networkworld.com/article/3527194/multicloud-security-integration-drive-massive-sd-wan-adoption.html>

作者：[Michael Cooney](https://www.networkworld.com/author/Michael-Cooney/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[cooljelly](https://github.com/cooljelly) 校对：[wxy](https://github.com/wxy)

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


在 Linux 上将你的 Windows 系统转换为虚拟机

还是蛮菜的。<br />
带点技术的故事会。

这是关于一个原本想省200$,事实上只省了80$的故事

>
> 下面是我如何配置 VirtualBox 虚拟机以在我的 Linux 工作站上使用物理的 Windows 操作系统。
>
>
>

![](/data/attachment/album/202103/27/105053kyd66r1cpr1s2vz2.jpg "Puzzle pieces coming together to form a computer screen")

我经常使用 VirtualBox 来创建虚拟机来测试新版本的 Fedora、新的应用程序和很多管理工具，比如 Ansible。我甚至使用 VirtualBox 来测试创建一个 Windows 访客主机。

我从来没有在我的任何一台个人电脑上使用 Windows 作为我的主要操作系统，甚至也没在虚拟机中执行过一些用 Linux 无法完成的冷门任务。不过，我确实为一个需要使用 Windows 下的财务程序的组织做志愿者。这个程序运行在办公室经理的电脑上，使用的是预装的 Windows 10 Pro。

这个财务应用程序并不特别，[一个更好的 Linux 程序](https://opensource.com/article/20/7/godbledger) 可以很容易地取代它，但我发现许多会计和财务主管极不愿意做出改变，所以我还没能说服我们组织中的人迁移。

这一系列的情况，加上最近的安全恐慌，使得我非常希望将运行 Windows 的主机转换为 Fedora，并在该主机上的虚拟机中运行 Windows 和会计程序。

重要的是要明白，我出于多种原因极度不喜欢 Windows。主要原因是，我不愿意为了在新的虚拟机上安装它而再花钱购买一个 Windows 许可证（Windows 10 Pro 大约需要 200 美元）。此外，Windows 10 在新系统上设置时或安装后需要足够的信息，如果微软的数据库被攻破，破解者就可以窃取一个人的身份。任何人都不应该为了注册软件而需要提供自己的姓名、电话号码和出生日期。

### 开始

这台实体电脑已经在主板上唯一可用的 m.2 插槽中安装了一个 240GB 的 NVMe m.2 的 SSD 存储设备。我决定在主机上安装一个新的 SATA SSD，并将现有的带有 Windows 的 SSD 作为 Windows 虚拟机的存储设备。金士顿在其网站上对各种 SSD 设备、外形尺寸和接口做了很好的概述。

这种方法意味着我不需要重新安装 Windows 或任何现有的应用软件。这也意味着，在这台电脑上工作的办公室经理将使用 Linux 进行所有正常的活动，如电子邮件、访问 Web、使用 LibreOffice 创建文档和电子表格。这种方法增加了主机的安全性。唯一会使用 Windows 虚拟机的时间是运行会计程序。

### 先备份

在做其他事情之前，我创建了整个 NVMe 存储设备的备份 ISO 镜像。我在 500GB 外置 USB 存储盘上创建了一个分区，在其上创建了一个 ext4 文件系统，然后将该分区挂载到 `/mnt`。我使用 `dd` 命令来创建镜像。

我在主机中安装了新的 500GB SATA SSD，并从<ruby> 临场 <rt>  live </rt></ruby> USB 上安装了 Fedora 32 Xfce <ruby> 偏好版 <rt>  spin </rt></ruby>。在安装后的初次重启时，在 GRUB2 引导菜单上，Linux 和 Windows 操作系统都是可用的。此时，主机可以在 Linux 和 Windows 之间进行双启动。

### 在网上寻找帮助

现在我需要一些关于创建一个使用物理硬盘或 SSD 作为其存储设备的虚拟机的信息。我很快就在 VirtualBox 文档和互联网上发现了很多关于如何做到这一点的信息。虽然 VirtualBox 文档初步帮助了我，但它并不完整，遗漏了一些关键信息。我在互联网上找到的大多数其他信息也很不完整。

在我们的记者 Joshua Holm 的帮助下，我得以突破这些残缺的信息，并以一个可重复的流程来完成这项工作。

### 让它发挥作用

这个过程其实相当简单，虽然需要一个玄妙的技巧才能实现。当我准备好这一步的时候，Windows 和 Linux 操作系统已经到位了。

首先，我在 Linux 主机上安装了最新版本的 VirtualBox。VirtualBox 可以从许多发行版的软件仓库中安装，也可以直接从 Oracle VirtualBox 仓库中安装，或者从 VirtualBox 网站上下载所需的包文件并在本地安装。我选择下载 AMD64 版本，它实际上是一个安装程序而不是一个软件包。我使用这个版本来规避一个与这个特定项目无关的问题。

安装过程总是在 `/etc/group` 中创建一个 `vboxusers` 组。我把打算运行这个虚拟机的用户添加到 `/etc/group` 中的 `vboxusers` 和 `disk` 组。将相同的用户添加到 `disk` 组是很重要的，因为 VirtualBox 是以启动它的用户身份运行的，而且还需要直接访问 `/dev/sdx` 特殊设备文件才能在这种情况下工作。将用户添加到 `disk` 组可以提供这种级别的访问权限，否则他们就不会有这种权限。

然后，我创建了一个目录来存储虚拟机，并赋予它 `root.vboxusers` 的所有权和 `775` 的权限。我使用 `/vms` 用作该目录，但可以是任何你想要的目录。默认情况下，VirtualBox 会在创建虚拟机的用户的子目录中创建新的虚拟机。这将使多个用户之间无法共享对虚拟机的访问，从而不会产生巨大的安全漏洞。将虚拟机目录放置在一个可访问的位置，可以共享虚拟机。

我以非 root 用户的身份启动 VirtualBox 管理器。然后，我使用 VirtualBox 的“<ruby> 偏好 <rt>  Preferences </rt></ruby> => <ruby> 一般 <rt>  General </rt></ruby>”菜单将“<ruby> 默认机器文件夹 <rt>  Default Machine Folder </rt></ruby>”设置为 `/vms` 目录。

我创建的虚拟机没有虚拟磁盘。“<ruby> 类型 <rt>  Type </rt> <rt> </rt></ruby>” 应该是 `Windows`，“<ruby> 版本 <rt>  Version </rt></ruby>”应该设置为 `Windows 10 64-bit`。为虚拟机设置一个合理的内存量，但只要虚拟机处于关闭状态，以后可以更改。在安装的“<ruby> 硬盘 <rt>  Hard disk </rt></ruby>”页面，我选择了 “<ruby> 不要添加虚拟硬盘 <rt>  Do not add a virtual hard disk </rt></ruby>”，点击“<ruby> 创建 <rt>  Create </rt></ruby>”。新的虚拟机出现在VirtualBox 管理器窗口中。这个过程也创建了 `/vms/Test1` 目录。

我使用“<ruby> 高级 <rt>  Advanced </rt></ruby>”菜单在一个页面上设置了所有的配置，如图 1 所示。“<ruby> 向导模式 <rt>  Guided Mode </rt></ruby>”可以获得相同的信息，但需要更多的点击，以通过一个窗口来进行每个配置项目。它确实提供了更多的帮助内容，但我并不需要。

![VirtualBox 对话框：创建新的虚拟机，但不添加硬盘](/data/attachment/album/202103/27/105103fkzwry7vulkwf1fu.png)

*图 1：创建一个新的虚拟机，但不要添加硬盘。*

然后，我需要知道 Linux 给原始 Windows 硬盘分配了哪个设备。在终端会话中以 root 身份使用 `lshw` 命令来发现 Windows 磁盘的设备分配情况。在本例中，代表整个存储设备的设备是 `/dev/sdb`。

```
# lshw -short -class disk,volume
H/W path           Device      Class          Description
=========================================================
/0/100/17/0        /dev/sda    disk           500GB CT500MX500SSD1
/0/100/17/0/1                  volume         2047MiB Windows FAT volume
/0/100/17/0/2      /dev/sda2   volume         4GiB EXT4 volume
/0/100/17/0/3      /dev/sda3   volume         459GiB LVM Physical Volume
/0/100/17/1        /dev/cdrom  disk           DVD+-RW DU-8A5LH
/0/100/17/0.0.0    /dev/sdb    disk           256GB TOSHIBA KSG60ZMV
/0/100/17/0.0.0/1  /dev/sdb1   volume         649MiB Windows FAT volume
/0/100/17/0.0.0/2  /dev/sdb2   volume         127MiB reserved partition
/0/100/17/0.0.0/3  /dev/sdb3   volume         236GiB Windows NTFS volume
/0/100/17/0.0.0/4  /dev/sdb4   volume         989MiB Windows NTFS volume
[root@office1 etc]#

```

VirtualBox 不需要把虚拟存储设备放在 `/vms/Test1` 目录中，而是需要有一种方法来识别要从其启动的物理硬盘。这种识别是通过创建一个 `*.vmdk` 文件来实现的，该文件指向将作为虚拟机存储设备的原始物理磁盘。作为非 root 用户，我创建了一个 vmdk 文件，指向整个 Windows 设备 `/dev/sdb`。

```
$ VBoxManage internalcommands createrawvmdk -filename /vms/Test1/Test1.vmdk -rawdisk /dev/sdb
RAW host disk access VMDK file /vms/Test1/Test1.vmdk created successfully.

```

然后，我使用 VirtualBox 管理器 “<ruby> 文件 <rt>  File </rt></ruby> => <ruby> 虚拟介质管理器 <rt>  Virtual Media Manager </rt></ruby>” 对话框将 vmdk 磁盘添加到可用硬盘中。我点击了“<ruby> 添加 <rt>  Add </rt></ruby>”，文件管理对话框中显示了默认的 `/vms` 位置。我选择了 `Test1` 目录，然后选择了 `Test1.vmdk` 文件。然后我点击“<ruby> 打开 <rt>  Open </rt></ruby>”，`Test1.vmdk` 文件就显示在可用硬盘列表中。我选择了它，然后点击“<ruby> 关闭 <rt>  Close </rt></ruby>”。

下一步就是将这个 vmdk 磁盘添加到我们的虚拟机的存储设备中。在 “Test1 VM” 的设置菜单中，我选择了 “<ruby> 存储 <rt>  Storage </rt></ruby>”，并点击了添加硬盘的图标。这时打开了一个对话框，在一个名为“<ruby> 未连接 <rt>  Not attached </rt></ruby>”的列表中显示了 `Test1vmdk` 虚拟磁盘文件。我选择了这个文件，并点击了“<ruby> 选择 <rt>  Choose </rt></ruby>”按钮。这个设备现在显示在连接到 “Test1 VM” 的存储设备列表中。这个虚拟机上唯一的其他存储设备是一个空的 CD/DVD-ROM 驱动器。

我点击了“<ruby> 确定 <rt>  OK </rt></ruby>”，完成了将此设备添加到虚拟机中。

在新的虚拟机工作之前，还有一个项目需要配置。使用 VirtualBox 管理器设置对话框中的 “Test1 VM”，我导航到 “<ruby> 系统 <rt>  System </rt></ruby> => <ruby> 主板 <rt>  Motherboard </rt></ruby>”页面，并在 “<ruby> 启用 EFI <rt>  Enable EFI </rt></ruby>”的方框中打上勾。如果你不这样做，当你试图启动这个虚拟机时，VirtualBox 会产生一个错误，说明它无法找到一个可启动的介质。

现在，虚拟机从原始的 Windows 10 硬盘驱动器启动。然而，我无法登录，因为我在这个系统上没有一个常规账户，而且我也无法获得 Windows 管理员账户的密码。

### 解锁驱动器

不，本节并不是要破解硬盘的加密，而是要绕过众多 Windows 管理员账户之一的密码，而这些账户是不属于组织中某个人的。

尽管我可以启动 Windows 虚拟机，但我无法登录，因为我在该主机上没有账户，而向人们索要密码是一种可怕的安全漏洞。尽管如此，我还是需要登录这个虚拟机来安装 “VirtualBox Guest Additions”，它可以提供鼠标指针的无缝捕捉和释放，允许我将虚拟机调整到大于 1024x768 的大小，并在未来进行正常的维护。

这是一个完美的用例，Linux 的功能就是更改用户密码。尽管我是访问之前的管理员的账户来启动，但在这种情况下，他不再支持这个系统，我也无法辨别他的密码或他用来生成密码的模式。我就直接清除了上一个系统管理员的密码。

有一个非常不错的开源软件工具，专门用于这个任务。在 Linux 主机上，我安装了 `chntpw`，它的意思大概是：“更改 NT 的密码”。

```
# dnf -y install chntpw

```

我关闭了虚拟机的电源，然后将 `/dev/sdb3` 分区挂载到 `/mnt` 上。我确定 `/dev/sdb3` 是正确的分区，因为它是我在之前执行 `lshw` 命令的输出中看到的第一个大的 NTFS 分区。一定不要在虚拟机运行时挂载该分区，那样会导致虚拟机存储设备上的数据严重损坏。请注意，在其他主机上分区可能有所不同。

导航到 `/mnt/Windows/System32/config` 目录。如果当前工作目录（PWD）不在这里，`chntpw` 实用程序就无法工作。请启动该程序。

```
# chntpw -i SAM
chntpw version 1.00 140201, (c) Petter N Hagen
Hive <SAM> name (from header): <\SystemRoot\System32\Config\SAM>
ROOT KEY at offset: 0x001020 * Subkey indexing type is: 686c <lh>
File size 131072 [20000] bytes, containing 11 pages (+ 1 headerpage)
Used for data: 367/44720 blocks/bytes, unused: 14/24560 blocks/bytes.

<>========<> chntpw Main Interactive Menu <>========<>

Loaded hives: <SAM>

  1 - Edit user data and passwords
  2 - List groups
      - - -
  9 - Registry editor, now with full write support!
  q - Quit (you will be asked if there is something to save)

What to do? [1] ->

```

`chntpw` 命令使用 TUI（文本用户界面），它提供了一套菜单选项。当选择其中一个主要菜单项时，通常会显示一个次要菜单。按照明确的菜单名称，我首先选择了菜单项 `1`。

```
What to do? [1] -> 1

===== chntpw Edit User Info & Passwords ====

| RID -|---------- Username ------------| Admin? |- Lock? --|
| 01f4 | Administrator                  | ADMIN  | dis/lock |
| 03eb | john                           | ADMIN  | dis/lock |
| 01f7 | DefaultAccount                 |        | dis/lock |
| 01f5 | Guest                          |        | dis/lock |
| 01f8 | WDAGUtilityAccount             |        | dis/lock |

Please enter user number (RID) or 0 to exit: [3e9]

```

接下来，我选择了我们的管理账户 `john`，在提示下输入 RID。这将显示用户的信息，并提供额外的菜单项来管理账户。

```
Please enter user number (RID) or 0 to exit: [3e9] 03eb
================= USER EDIT ====================

RID     : 1003 [03eb]
Username: john
fullname:
comment :
homedir :

00000221 = Users (which has 4 members)
00000220 = Administrators (which has 5 members)

Account bits: 0x0214 =
[ ] Disabled        | [ ] Homedir req.    | [ ] Passwd not req. |
[ ] Temp. duplicate | [X] Normal account  | [ ] NMS account     |
[ ] Domain trust ac | [ ] Wks trust act.  | [ ] Srv trust act   |
[X] Pwd don't expir | [ ] Auto lockout    | [ ] (unknown 0x08)  |
[ ] (unknown 0x10)  | [ ] (unknown 0x20)  | [ ] (unknown 0x40)  |

Failed login count: 0, while max tries is: 0
Total  login count: 47

- - - - User Edit Menu:
 1 - Clear (blank) user password
 2 - Unlock and enable user account [probably locked now]
 3 - Promote user (make user an administrator)
 4 - Add user to a group
 5 - Remove user from a group
 q - Quit editing user, back to user select
Select: [q] > 2

```

这时，我选择了菜单项 `2`，“<ruby> 解锁并启用用户账户 <rt>  Unlock and enable user account </rt></ruby>”，这样就可以删除密码，使我可以不用密码登录。顺便说一下 —— 这就是自动登录。然后我退出了该程序。在继续之前，一定要先卸载 `/mnt`。

我知道，我知道，但为什么不呢! 我已经绕过了这个硬盘和主机的安全问题，所以一点也不重要。这时，我确实登录了旧的管理账户，并为自己创建了一个新的账户，并设置了安全密码。然后，我以自己的身份登录，并删除了旧的管理账户，这样别人就无法使用了。

网上也有 Windows Administrator 账号的使用说明（上面列表中的 `01f4`）。如果它不是作为组织管理账户，我可以删除或更改该账户的密码。还要注意的是，这个过程也可以从目标主机上运行临场 USB 来执行。

### 重新激活 Windows

因此，我现在让 Windows SSD 作为虚拟机在我的 Fedora 主机上运行了。然而，令人沮丧的是，在运行了几个小时后，Windows 显示了一条警告信息，表明我需要“激活 Windows”。

在看了许许多多的死胡同网页之后，我终于放弃了使用现有激活码重新激活的尝试，因为它似乎已经以某种方式被破坏了。最后，当我试图进入其中一个在线虚拟支持聊天会话时，虚拟的“获取帮助”应用程序显示我的 Windows 10 Pro 实例已经被激活。这怎么可能呢？它一直希望我激活它，然而当我尝试时，它说它已经被激活了。

### 或者不

当我在三天内花了好几个小时做研究和实验时，我决定回到原来的 SSD 启动到 Windows 中，以后再来处理这个问题。但后来 Windows —— 即使从原存储设备启动，也要求重新激活。

在微软支持网站上搜索也无济于事。在不得不与之前一样的自动支持大费周章之后，我拨打了提供的电话号码，却被自动响应系统告知，所有对 Windows 10 Pro 的支持都只能通过互联网提供。到现在，我已经晚了将近一天才让电脑运行起来并安装回办公室。

### 回到未来

我终于吸了一口气，购买了一份 Windows 10 Home，大约 120 美元，并创建了一个带有虚拟存储设备的虚拟机，将其安装在上面。

我将大量的文档和电子表格文件复制到办公室经理的主目录中。我重新安装了一个我们需要的 Windows 程序，并与办公室经理验证了它可以工作，数据都在那里。

### 总结

因此，我的目标达到了，实际上晚了一天，花了 120 美元，但使用了一种更标准的方法。我仍在对权限进行一些调整，并恢复 Thunderbird 通讯录；我有一些 CSV 备份，但 `*.mab` 文件在 Windows 驱动器上包含的信息很少。我甚至用 Linux 的 `find` 命令来定位原始存储设备上的所有。

我走了很多弯路，每次都要自己重新开始。我遇到了一些与这个项目没有直接关系的问题，但却影响了我的工作。这些问题包括一些有趣的事情，比如把 Windows 分区挂载到我的 Linux 机器的 `/mnt` 上，得到的信息是该分区已经被 Windows 不正确地关闭（是的，在我的 Linux 主机上），并且它已经修复了不一致的地方。即使是 Windows 通过其所谓的“恢复”模式多次重启后也做不到这一点。

也许你从 `chntpw` 工具的输出数据中发现了一些线索。出于安全考虑，我删掉了主机上显示的其他一些用户账号，但我从这些信息中看到，所有的用户都是管理员。不用说，我也改了。我仍然对我遇到的糟糕的管理方式感到惊讶，但我想我不应该这样。

最后，我被迫购买了一个许可证，但这个许可证至少比原来的要便宜一些。我知道的一点是，一旦我找到了所有必要的信息，Linux 这一块就能完美地工作。问题是处理 Windows 激活的问题。你们中的一些人可能已经成功地让 Windows 重新激活了。如果是这样，我还是想知道你们是怎么做到的，所以请把你们的经验添加到评论中。

这是我不喜欢 Windows，只在自己的系统上使用 Linux 的又一个原因。这也是我将组织中所有的计算机都转换为 Linux 的原因之一。只是需要时间和说服力。我们只剩下这一个会计程序了，我需要和财务主管一起找到一个适合她的程序。我明白这一点 —— 我喜欢自己的工具，我需要它们以一种最适合我的方式工作。

---

via: <https://opensource.com/article/21/1/virtualbox-windows-linux>

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

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