升级 Ubuntu Linux 内核的几种不同方法

# 升级 Ubuntu Linux 内核的几种不同方法

这个指南里介绍了 7 种为 Ubuntu 升级 Linux 内核的不同方法。这 7 种方法里，有 5 种需要重启系统来使新内核生效，其他两种则不用。升级之前，**强烈建议你将重要数据进行备份!** 这里提到的所有方法只在 Ubuntu 中测试过。我们并不确定这些方法是不是也能适用于其他 Ubuntu 的特色发行版（如： Xubuntu）和衍生发行版（如：Linux Mint）。

### 第一部分：需要重启的内核升级

以下方法需要你重启系统以便新的内核生效。以下所有方法都建议在个人系统或测试系统中进行。重要的事儿再说一遍，请备份好你 Ubuntu 中的重要数据、配置文件和其他重要的东西。

#### 方法 １ － 使用 dpkg 升级 Linux 内核（手动方式）

这个方法可以帮助你从 [kernel.ubuntu.com](http://kernel.ubuntu.com/%7Ekernel-ppa/mainline/) 网站手动下载可用的最新 Linux 内核。如果你打算安装最新版（而不是稳定版或者正式发布版），那这种方法对你会很有用。从以上链接下载 Linux 内核版本。编写这个指南的时候，最新的可用版本是 **5.0-rc1**，最新的稳定版是 **v4.20**。

点击你所选择的 Linux 内核版本链接，找到你对应的架构（“Build for XXX”）的那部分。然后下载符合以下格式的两个文件（其中 X.Y.Z 是最高版本号）：

1. linux-image-*X.Y.Z*-generic-\*.deb
2. linux-modules-X.Y.Z*-generic-*.deb

在终端中改变到文件所在的目录，然后执行此命令手动安装内核：

```
$ sudo dpkg --install *.deb
```

重启系统，使用新内核：

```
$ sudo reboot
```

检查是否如你所愿：

```
$ uname -r
```

对于分步的说明，请查看下列链接中对应的部分。

* [在基于 RPM 和 DEB 的系统中安装 Linux 内核 4.15](https://www.ostechnix.com/install-linux-kernel-4-15-rpm-deb-based-systems/)

以上的指南是针对的是 4.15 版本，不过安装最新版本的所有的步骤都是一样的。

**优势：** 不必联网（你可以从任何系统中下载 Linux 内核来使用）

**缺点：** 手动更新，需要重启系统。

#### 方法 2 - 用 apt-get 来升级 Linux 内核（推荐方法）

这是在类 Ubuntu 系统中升级 Linux 内核的推荐方法。不同于上一个方法，这种方法会从 Ubuntu 官方仓库下载、安装内核版本，而不是从 **kernel.ubuntu.com**网站。

要升级包括内核的整个系统，只需要执行：

```
$ sudo apt-get update
$ sudo apt-get upgrade
```

如果只希望升级内核，运行：

```
$ sudo apt-get upgrade linux-image-generic
```

**优势：** 简单。推荐方法。

**缺点：** 需要联网，需要重启。

从官方库中升级内核是最接近开箱即用的方法，并且不会出什么问题。如果是生产环境的系统，这是最为推荐的升级 Linux 内核的方法。

方法 1 和方法 2 都需要用户去介入到升级 Linux 内核的过程中。而下边的方法（3、 4、 5）则几乎是全自动的。

#### 方法 3 - 使用 Ukuu 升级 Linux 内核

**Ukuu**是一个 Gtk GUI 和命令行工具，它可以从 kernel.ubuntu.com 下载最新的 Linux 主线内核，并自动安装到你的 Ubuntu 桌面版和服务器版中。Ukku 不仅简化了手动下载和安装新内核的过程，同时也会帮助你安全地移除旧的和不再需要的内核。更多细节可以参照以下指南。

* [Ukuu：在 Ubuntu 系统中安装和升级 Linux 内核的简单方法](https://www.ostechnix.com/ukuu-an-easy-way-to-install-and-upgrade-linux-kernel-in-ubuntu-based-systems/)

**优势：** 易于安装使用。自动安装主线内核。

**缺点：** 需要联网，需要重启。

#### 方法 4 - 使用 UKTools 升级 Linux 内核

跟 Ukuu 差不多，**UKTools** 也会从 kernel.ubuntu.com 网站获取最新的稳定内核并且自动安装到 Ubuntu 以及类似于 Linux Mint 的延伸发行版中。关于UKTools的更多详情，请参见下面的链接。

* [UKTools：升级Ubuntu及其衍生产品中的最新Linux内核](https://www.ostechnix.com/uktools-upgrade-latest-linux-kernel-in-ubuntu-and-derivatives/)

**优势：** 简单，自动。

**缺点：** 需要联网，需要重启。

#### 方法 5 - 使用 Linux 内核实用程序更新 Linux 内核

**Linux 内核实用程序**是目前另一个用于升级类 Ubuntu 系统 Linux 内核的程序。实质上，它是一个由一系列 Bash 脚本构成的合集，用于编译并且可以选择性地为 Debian（LCTT 译注：Ubuntu 的上游发行版）及其衍生发行版升级内核。它包含三个实用程序，一个用于手动编译、安装来自于 <http://www.kernel.org> 网站的源码内核，另一个用于安装来自 <https://kernel.ubuntu.com> 网站的预编译的内核，第三个脚本用于移除旧内核。更多细节请浏览以下链接。

* [Linux 内核实用程序：编译和更新最新的 Linux 内核的脚本，适用于 Debian 及其衍生产品](https://www.ostechnix.com/linux-kernel-utilities-scripts-compile-update-latest-linux-kernel-debian-derivatives/)

**优势：** 简单，自动。

**缺点：** 需要联网，需要重启。

### 第二部分：无需重启的内核升级

我之前说过，上边所有的方法都需要你重启服务器（LCTT 译注：也可以是桌面版）来启用新内核。如果是个人系统或者测试系统，可以这么办。但对于无法停机的生产环境系统该怎么办呢？一点问题没有，这时候<ruby> 实时补丁 <rt>  livepatching </rt></ruby>就派上用场了。

**实时补丁**（或者叫热补丁）允许你在不重启的情况下安装 Linux 更新或补丁，使你的服务器处于最新的安全级别。这对 web 主机、游戏服务器这类需要不间断在线的服务器来说是很有价值的。事实上，任何情况下，服务器都应该保持在不间断运行的状态下。由于 Linux 供应商只会在出于修复安全漏洞的目的下维护补丁，所以如果安全性是你最关注的问题时，这种方式再适合不过了。

以下两种方法不需要重启，对于生产环境和执行关键任务的 Ubuntu 服务器的 Linux 内核更新非常有用。

#### 方法 6 – 使用 Canonical 实时补丁服务来更新 Linux 内核

[Canonical 实时补丁服务](https://www.ubuntu.com/livepatch)可以在不需要重启 Ubuntu 系统的情况下自动应用内核更新、补丁和安全补丁。它可以减少Ubuntu系统的停机时间，并保证系统的安全。Canonical 实时补丁服务可以在安装过程当中或安装之后进行设置。如果你使用的是 Ubuntu 桌面版，软件更新器会自动检查内核补丁的更新，并通知你。在基于控制台的系统中，则需要你定期运行 `apt-get update` 命令来进行升级。由于需要你手动运行 `apt-get upgrade` 命令它才会安装内核的安全补丁，所以算是半自动的。

实时补丁对三个及以下系统免费，如果多于三个，你需要升级成名为 **Ubuntu Advantage** 的企业支持方案套件。这个套件包括 **Kernel 实时补丁**及以下服务：

* 扩展安全维护 – Ubuntu 生命周期后的重要安全更新
* Landscape – 针对大规模使用 Ubuntu 的系统管理工具
* 知识库 – 由 Ubuntu 专家撰写的私人文章和教程
* 电话和网站支持

**价格**

Ubuntu Advantage 包含三种付费计划，即基本计划、标准计划和高级计划。最基础的计划（基本计划）从 **单物理节点 225 美元/年**和**单VPS 75美元/年**开始计价。对于 Ubuntu 服务器版和桌面版看上去没有按月订阅。你可以在[此处](https://www.ubuntu.com/support/plans-and-pricing)浏览所有计划的细节信息。

**优势：** 简单。半自动化。无需重启。支持三个免费系统。

**缺点：** ４ 个以上主机的话非常昂贵。没有补丁回滚。

##### 开启 Canonical 实时补丁

如果你想在安装后设置实时补丁服务，依照以下方法逐步执行：

从 <https://auth.livepatch.canonical.com/>　获取一个密钥。

```
$ sudo snap install canonical-livepatch
$ sudo canonical-livepatch enable your-key
```

#### 方法 ７ －　使用 KernelCare 升级 Linux 内核

[KernelCare](https://www.kernelcare.com/) 是最新的实时补丁方案。它是 [CloudLinux](https://www.cloudlinux.com/) 推出的产品。KernelCare 可以运行在 Ubuntu 和其他的 Linux 发行版中。它每四个小时检查一遍补丁的发布，并在无需确认的情况下安装它们。如果更新后存在问题，可以将补丁进行回滚。

**价格**

费用，每台服务器：**4 美元/月**，**45 美元/年**。

跟 Ubuntu 实时补丁相比，KernelCare 看起来非常便宜、实惠。好的方面在于**也可以按月订阅**。另一个前者不具备的功能是支持其他 Linux 发行版，如 Red Hat、CentOS、Debian、Oracle Linux、Amazon Linux 以及 OpenVZ、Proxmox 等虚拟化平台。

你可以在[此处](https://www.kernelcare.com/update-kernel-linux/)了解 KernelCare 的所有特性和简介，以及所有的付费计划的细节。

**优势：** 简单。全自动化。覆盖范围更广的操作系统。补丁回滚。无需重启。对非营利组织提供免费许可。价格低廉。

**缺点：** 不是免费的（除了30天的试用期）。

##### 开启 KernelCare 服务

在 <https://cloudlinux.com/kernelcare-free-trial5>　获取一个 30 天免费试用密钥。

执行以下命令开启 KernelCare 并注册秘钥。

```
$ sudo wget -qq -O - https://repo.cloudlinux.com/kernelcare/kernelcare_install.sh | bash
$ sudo /usr/bin/kcarectl --register KEY
```

如果你正在寻找一种经济实惠且可靠的商业服务来保持 Linux 服务器上的 Linux 内核更新，那么 KernelCare 是个不错的选择。

*由来自 Cloud Linux 的技术撰稿人和内容作者 Paul A. Jacobs 提供。*

到此，希望这边文章能对你有所帮助。如果你觉得还有其他的工具和方法需要列在这里，可以在留言区给我们留言。我会根据反馈检查和更新这篇指南的。

接下来会有更多好东西给大家呈现，敬请期待。

Cheers!

---

via: <https://www.ostechnix.com/different-ways-to-update-linux-kernel-for-ubuntu/>

作者：[SK](https://www.ostechnix.com/author/sk/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[mr-ping](https://github.com/mr-ping) 校对：[wxy](https://github.com/wxy)

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


在 Linux 中遨游手册页的海洋

# 在 Linux 中遨游手册页的海洋

>
> Linux 系统上的手册页可以做的不仅仅是提供特定命令的信息。它们可以帮助你发现你没有意识到的命令。
>
>
>

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

手册页提供了关于 Linux 命令的基本信息，很多用户经常参考它，但手册页的内容比我们很多人意识到的要多得多。

你总是可以输入一个像 `man who` 这样的命令，然后得到 `who` 命令的工作原理的漂亮描述，但是探索你可能不知道的命令可能会更有启发。例如，你可以使用 `man` 命令来帮助找到一些处理非常具有挑战性的任务的命令，或者显示一些选项，这些选项可以帮助你以新的更好的方式使用你已经知道的命令。

让我们来浏览一些选项，看看最终的结果是什么。

### 用 man 去识别命令

`man` 命令可以帮助你按主题查找命令。例如，如果你要找一个计算文件中的行数的命令，你可以提供一个关键字。在下面的例子中，我们把关键字 “count” 放在了引号中，并添加了空格，这样我们就不会得到与 “accounts” 或 “accounting” 相关的命令，而是得到那些可以为我们做一些计算的命令。

```
$ man -k ' count '
anvil (8postfix)     - Postfix session count and request rate control
cksum (1)            - checksum and count the bytes in a file
sum (1)              - checksum and count the blocks in a file
timer_getoverrun (2) - get overrun count for a POSIX per-process timer
```

为了显示与新用户账户相关的命令，我们可以尝试使用这样的命令。

```
$ man -k "new user"
newusers (8)         - update and create new users in batch
useradd (8)          - create a new user or update default new user information
zshroadmap (1)       - informal introduction to the zsh manual The Zsh Manual, …
```

需要说明的是，上面的第三项只是提到 “new users” 类似的内容，并不是设置、删除或配置用户账号的命令。`man` 命令只是在命令描述中匹配了一些词，作用很像 `apropos` 命令。注意上面列出的每个命令后面的括号中的数字。这些数字与包含这些命令的手册页的分区有关。

### 确定手册页的分区

`man` 命令的分区将其内容划分为不同的类别。要列出这些类别，请键入 `man man`，并查看类似下面的描述。你的系统中很可能没有第 9 分区的命令。

* `1`：可执行程序或 shell 命令
* `2`：系统调用（内核提供的函数）
* `3`：库调用（程序库内的函数）
* `4`：特殊文件（通常在可以 `/dev` 中找到）
* `5`：文件格式和惯例，例如 `/etc/passwd`
* `6`：游戏
* `7`：杂项（包括宏包和约定），例如 `man`(7)、`groff`(7)
* `8`：系统管理命令（通常只由 root 用户使用）
* `9`：内核例程（非标准）

手册页涵盖了比我们通常认为的“命令”更多的内容。从上面的描述中可以看到，它们涵盖了系统调用、库调用、特殊文件等等。

下面的列表显示了 Linux 系统中的手册页的实际存储位置。这些目录上的日期会有所不同，因为随着更新，其中一些分区会有新的内容，而另一些则不会。

```
$ ls -ld /usr/share/man/man?
drwxr-xr-x 2 root root  98304 Feb  5 16:27 /usr/share/man/man1
drwxr-xr-x 2 root root  65536 Oct 23 17:39 /usr/share/man/man2
drwxr-xr-x 2 root root 270336 Nov 15 06:28 /usr/share/man/man3
drwxr-xr-x 2 root root   4096 Feb  4 10:16 /usr/share/man/man4
drwxr-xr-x 2 root root  28672 Feb  5 16:25 /usr/share/man/man5
drwxr-xr-x 2 root root   4096 Oct 23 17:40 /usr/share/man/man6
drwxr-xr-x 2 root root  20480 Feb  5 16:25 /usr/share/man/man7
drwxr-xr-x 2 root root  57344 Feb  5 16:25 /usr/share/man/man8
```

注意，为了节省空间，手册页文件一般都是 gzip 压缩的。每当你使用 `man` 命令时，`man` 命令会根据需要解压。

```
$ ls -l /usr/share/man/man1 | head -10
total 12632
lrwxrwxrwx 1 root root      9 Sep  5 06:38 [.1.gz -> test.1.gz
-rw-r--r-- 1 root root    563 Nov  7 05:07 2to3-2.7.1.gz
-rw-r--r-- 1 root root    592 Apr 23  2016 411toppm.1.gz
-rw-r--r-- 1 root root   2866 Aug 14 10:36 a2query.1.gz
-rw-r--r-- 1 root root   2361 Sep  9 15:13 aa-enabled.1.gz
-rw-r--r-- 1 root root   2675 Sep  9 15:13 aa-exec.1.gz
-rw-r--r-- 1 root root   1142 Apr  3  2018 aaflip.1.gz
-rw-r--r-- 1 root root   3847 Aug 14 10:36 ab.1.gz
-rw-r--r-- 1 root root   2378 Aug 23  2018 ac.1.gz
```

### 按分区列出的手册页

即使只看第 1 分区的前 10 个手册页（如上所示），你也可能会看到一些新的命令 —— 也许是 `a2query` 或 `aaflip`（如上所示）。

探索命令的更好策略是按分区列出命令，不查看文件本身，而是使用 `man` 命令向你显示命令并提供每个命令的简要说明。

在下面的命令中，`-s 1` 指示 `man` 显示第 1 分区中的命令信息。`-k .` 使该命令对所有命令都有效，而不是指定一个特定的关键字；如果没有这个，`man` 命令就会回过头来问：“你想要什么手册页？”所以，使用关键字来选择一组相关的命令，或者使用点来显示一个分区中的所有命令。

```
$ man -s 1 -k .
2to3-2.7 (1)         - Python2 to Python3 converter
411toppm (1)         - convert Sony Mavica .411 image to ppm
as (1)               - the portable GNU assembler.
baobab (1)           - A graphical tool to analyze disk usage
busybox (1)          - The Swiss Army Knife of Embedded Linux
cmatrix (1)          - simulates the display from "The Matrix"
expect_dislocate (1) - disconnect and reconnect processes
red (1)              - line-oriented text editor
enchant (1)          - a spellchecker
…
```

### 有多少手册页？

如果你对每个分区中有多少手册页感到好奇，可以使用以下命令按分区对它们进行计数：

```
$ for num in {1..8}
> do
>   man -s $num -k . | wc -l
> done
2382
493
2935
53
441
11
245
919
```

确切的数量可能有所不同，但是大多数 Linux 系统的命令数量差不多。如果我们使用命令将这些数字加在一起，我们可以看到运行该命令的系统上有将近 7500 个手册页。有很多命令，系统调用等。

```
$ for num in {1..8}
> do
>     num=`man -s $num -k . | wc -l`
>     tot=`expr $num + $tot`
>     echo $tot
> done
2382
2875
5810
5863
6304
6315
6560
7479            <=== total
```

阅读手册页可以学到很多东西，但是以其他方式浏览手册页可以帮助你了解系统上可能不知道的命令。

---

via: <https://www.networkworld.com/article/3519853/navigating-man-pages-in-linux.html>

作者：[Sandra Henry-Stocker](https://www.networkworld.com/author/Sandra-Henry_Stocker/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


# 如何在 Linux 的 Nautilus 文件管理器中以管理员身份打开文件和文件夹

>
> 了解如何在 Ubuntu 和其他 Linux 发行版的 Nautilus 文件管理器的右键菜单中添加“以管理员身份打开”选项。
>
>
>

如果要以根用户身份打开或编辑文件，你总是可以在终端中执行此操作。但我知道有些人对命令行不适应。

桌面 Linux 通常为那些害怕终端的人提供方法避免命令行。

如果你必须以 root 用户身份访问文件夹或以 root 用户权限编辑文件，那你可以在 [Nautilus 文件管理器](https://wiki.gnome.org/Apps/Files)中以图形方式进行操作。

一个小巧优雅的 Nautilus 技巧能让你以管理员（也就是 root）打开文件和文件夹。让我向你展示如何做。

### 在 Nautilus 文件管理器的右键菜单中添加“以管理员身份打开”选项

>
> 警告！请不要以 root 用户身份打开和编辑随机文件，因为这样可能会弄乱文件并导致系统损坏。仅在需要时使用它。
>
>
>

我展示的是 Ubuntu 的步骤。你可以根据你的发行版的软件包管理器进行更改。

你必须使用终端（即使你不喜欢它）来安装 Nautilus 插件。请[确保已启用 Universe 仓库](https://itsfoss.com/ubuntu-repositories/)：

```
sudo apt install nautilus-admin
```

关闭并再次打开 Nautilus 文件管理器以查看更改生效。

你也可以用 root 用户身份编辑文件。只需选择文件，右键单击它，然后选择“以管理员身份编辑”选项。

这两种情况下，系统都会提示你输入帐户密码：

差不多了。你可以享受 GUI 的舒适了。

如果你不想再以 root 用户身份运行 Nautilus，那么可以删除此插件。删除已安装但不再使用的其他东西总是没错的。

在终端中（没错，再一次在终端），使用以下命令删除 Nautilus 插件。

```
sudo apt remove nautilus-admin
```

顺便说一句，如果你在使用 [Ubuntu MATE](https://ubuntu-mate.org/)，你可以使用 caja-admin 代替 nautilus-admin。其他文件管理器可能会或可能不会提供此类功能。

我希望这个快速技巧对你有所帮助。随时欢迎提出问题和建议。

---

via: <https://itsfoss.com/open-nautilus-as-administrator/>

作者：[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/) 荣誉推出


Linux 防火墙入门教程

Summary: 防火墙是你的计算机防止网络入侵的第一道屏障。

防火墙是你的计算机防止网络入侵的第一道屏障。

# Linux 防火墙入门教程

>
> 防火墙是你的计算机防止网络入侵的第一道屏障。为确保你的安全，请下载我们的备忘单。
>
>
>

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

合理的防火墙是你的计算机防止网络入侵的第一道屏障。你在家里上网，通常互联网服务提供会在路由中搭建一层防火墙。当你离开家时，那么你计算机上的那层防火墙就是仅有的一层，所以配置和控制好你 Linux 电脑上的防火墙很重要。如果你维护一台 Linux 服务器，那么知道怎么去管理你的防火墙同样重要，只要掌握了这些知识你才能保护你的服务器免于本地或远程非法流量的入侵。

### 安装防火墙

很多 Linux 发行版本已经自带了防火墙，通常是 `iptables`。它很强大并可以自定义，但配置起来有点复杂。幸运的是，有开发者写出了一些前端程序来帮助用户控制防火墙，而不需要写冗长的 iptables 规则。

在 Fedora、CentOS、Red Hat 和一些类似的发行版本上，默认安装的防火墙软件是 `firewalld`，通过 `firewall-cmd` 命令来配置和控制。在 Debian 和大部分其他发行版上，可以从你的软件仓库安装 firewalld。Ubuntu 自带的是<ruby> 简单防火墙 <rt>  Uncomplicated Firewall </rt></ruby>（ufw），所以要使用 firewalld，你必须启用 `universe` 软件仓库：

```
$ sudo add-apt-repository universe
$ sudo apt install firewalld
```

你还需要停用 ufw：

```
$ sudo systemctl disable ufw
```

没有理由*不用* ufw。它是一个强大的防火墙前端。然而，本文重点讲 firewalld，因为大部分发行版都支持它而且它集成到了 systemd，systemd 是几乎所有发行版都自带的。

不管你的发行版是哪个，都要先激活防火墙才能让它生效，而且需要在启动时加载：

```
$ sudo systemctl enable --now firewalld
```

### 理解防火墙的域

Firewalld 旨在让防火墙的配置工作尽可能简单。它通过建立<ruby> 域 <rt>  zone </rt></ruby>来实现这个目标。一个域是一组的合理、通用的规则，这些规则适配大部分用户的日常需求。默认情况下有九个域。

* `trusted`：接受所有的连接。这是最不偏执的防火墙设置，只能用在一个完全信任的环境中，如测试实验室或网络中相互都认识的家庭网络中。
* `home`、`work`、`internal`：在这三个域中，接受大部分进来的连接。它们各自排除了预期不活跃的端口进来的流量。这三个都适合用于家庭环境中，因为在家庭环境中不会出现端口不确定的网络流量，在家庭网络中你一般可以信任其他的用户。
* `public`：用于公共区域内。这是个偏执的设置，当你不信任网络中的其他计算机时使用。只能接收选定的常见和最安全的进入连接。
* `dmz`：DMZ 表示隔离区。这个域多用于可公开访问的、位于机构的外部网络、对内网访问受限的计算机。对于个人计算机，它没什么用，但是对某类服务器来说它是个很重要的选项。
* `external`：用于外部网络，会开启伪装（你的私有网络的地址被映射到一个外网 IP 地址，并隐藏起来）。跟 DMZ 类似，仅接受经过选择的传入连接，包括 SSH。
* `block`：仅接收在本系统中初始化的网络连接。接收到的任何网络连接都会被 `icmp-host-prohibited` 信息拒绝。这个一个极度偏执的设置，对于某类服务器或处于不信任或不安全的环境中的个人计算机来说很重要。
* `drop`：接收的所有网络包都被丢弃，没有任何回复。仅能有发送出去的网络连接。比这个设置更极端的办法，唯有关闭 WiFi 和拔掉网线。

你可以查看你发行版本的所有域，或通过配置文件 `/usr/lib/firewalld/zones` 来查看管理员设置。举个例子：下面是 Fefora 31 自带的 `FedoraWorkstation` 域：

```
$ cat /usr/lib/firewalld/zones/FedoraWorkstation.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Fedora Workstation</short>
  <description>Unsolicited incoming network packets are rejected from port 1 to 1024, except for select network services. Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <service name="samba-client"/>
  <port protocol="udp" port="1025-65535"/>
  <port protocol="tcp" port="1025-65535"/>
</zone>
```

### 获取当前的域

任何时候你都可以通过 `--get-active-zones` 选项来查看你处于哪个域：

```
$ sudo firewall-cmd --get-active-zones
```

输出结果中，会有当前活跃的域的名字和分配给它的网络接口。笔记本电脑上，在默认域中通常意味着你有个 WiFi 卡：

```
FedoraWorkstation
  interfaces: wlp61s0
```

### 修改你当前的域

要更改你的域，请将网络接口重新分配到不同的域。例如，把例子中的 `wlp61s0` 卡修改为 public 域：

```
$ sudo firewall-cmd --change-interface=wlp61s0 --zone=public
```

你可以在任何时候、任何理由改变一个接口的活动域 —— 无论你是要去咖啡馆，觉得需要增加笔记本的安全策略，还是要去上班，需要打开一些端口进入内网，或者其他原因。在你凭记忆学会 `firewall-cmd` 命令之前，你只要记住了关键词 `change` 和 `zone`，就可以慢慢掌握，因为按下 `Tab` 时，它的选项会自动补全。

### 更多信息

你可以用你的防火墙干更多的事，比如自定义已存在的域，设置默认域，等等。你对防火墙越了解，你在网上的活动就越安全，所以我们创建了一个[备忘单](https://opensource.com/downloads/firewall-cmd-cheat-sheet)便于速查和参考。

* 下载你的 [防火墙备忘单](https://opensource.com/downloads/firewall-cmd-cheat-sheet)。（需注册）

---

via: <https://opensource.com/article/20/2/firewall-cheat-sheet>

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

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


我是如何用 AI 把“请洗手”翻译成 500 种语言的？

Summary: 通过使用人类和机器生成的翻译，可以将关键的健康短语翻译成世界各地的当地语言。

好牛啊

好牛啊

通过使用人类和机器生成的翻译，可以将关键的健康短语翻译成世界各地的当地语言。

# 我是如何用 AI 把“请洗手”翻译成 500 种语言的？

>
> 通过使用人类和机器生成的翻译，可以将关键的健康短语翻译成世界各地的当地语言。
>
>
>

你可能不知道，目前世界上有 [7117 种语言](https://www.ethnologue.com/guides/how-many-languages)在使用，不是方言，而是在用的语言! 然而，世界上许多数字媒体只能使用几十种语言，而像谷歌翻译这样的翻译平台只支持 100 种左右的语言。这样的现实意味着，由于缺乏及时获取信息的机会，全世界有数十亿人被边缘化。当前的冠状病毒（COVID-19）大流行已经让人痛苦地意识到了这一点，凸显了将健康相关的短语（如“<ruby> 请洗手 <rt>  wash your hands </rt></ruby>”或“保持距离”等）即时、快速翻译成小众语言的必要性。

为此，我应用了最先进的 AI 技术，用 544 种语言构建出了与“请洗手”相近的短语并进行了统计（我的 GPU 还在运行）。<ruby> 多语言无监督和受监督嵌入 <rt>  Multilingual Unsupervised and Supervised Embeddings </rt></ruby>（MUSE）方法被用来训练这 544 种语言和英语之间的跨语言单词嵌入。然后，这些嵌入方法可以从现有文档中提取出与目标短语相似的短语。

我与 SIL 国际公司的同事们合作完成了这项工作，他们收集了该短语的更多的人工翻译结果。这些人工翻译结果和我的一些机器翻译结果的组合可以在[这个民族语指南页面](https://www.ethnologue.com/guides/health)上搜索到（机器生成的短语用一个小的机器人图标表示），更多的翻译将在生成/收集到的时候加入。

### 利用现有的语料库

SIL 国际公司已经完成了 2000 多种语言的语言工作，目前管理着 1600 多个语言项目。因此，当我解决这个特殊的问题时，我知道我们很可能已经多次将“请洗手”和/或类似的短语翻译成了数百种语言，而这一猜测得到了回报。我很快就从我们的档案库中收集到了超过 900 种语言的文档（主要是完成的贝壳书模板、教材和圣经）。这些文档中的每一份都有一个英文的对应版本，其中必然包括“请洗手”和/或类似“请洗脸”这样的短语。此外，这些文档的质量都很高，并与当地语言社区合作进行了翻译和检查。

这是相当多语言的数据集。然而，有两个问题需要克服。首先，这个数据包含了大多数语言的数千种样本，这与训练机器翻译模型所使用的数百万个样本形成了鲜明对比。其次，即使文档中包含目标语言中的“请洗手”这个短语，我们也不知道这个短语在周围文本中的确切位置。

我们当然可以利用[低资源语言的机器翻译](https://datadan.io/blog/resources-for-low-resource-machine-translation)中的一些最新技巧，但是需要花费一些时间来调整自动化方法，以快速适应每种语言对中的翻译模型。此外，我们所针对的许多语言都没有现成的的基线，可以用来比较评估指标（例如 [BLEU 评分](https://en.wikipedia.org/wiki/BLEU)）。考虑到对冠状病毒大流行的迫切担忧，我们希望比这更快一点（尽管我们计划在将来再来解决这个问题）。

我选择通过在现有的文档中寻找短语本身或短语的组件（如“请洗”或“你的手”）来尝试构建“请洗手”这个短语。为了找到这些成分，我使用 Facebook Research 的[多语言无监督和受监督嵌入（MUSE）](https://github.com/facebookresearch/MUSE)对每个 {英语、目标语言} 对进行了<ruby> 跨语言 <rt>  cross-lingual </rt></ruby>嵌入训练。MUSE 以<ruby> 单语言 <rt>  monolingual </rt></ruby>的单词嵌入作为输入（我使用 [fasttext](https://fasttext.cc/) 来生成这些词），并使用对抗性方法学习了从英语到目标嵌入空间的映射。这个过程的输出是<ruby> 跨语言 <rt>  cross-lingual </rt></ruby>的单词嵌入。

一旦产生了跨语言嵌入，我们就可以开始在目标语言文档中寻找短语组件。结果发现，整个文档中清楚地使用了“请洗脸”这个短语以及单独的“手”、“请洗”等词。对于每一种语言，我都通过 n-gram 搜索我预期该短语会出现的地方（根据其在英语的对应版本中的用法）。使用跨语言嵌入法对 n-gram 进行了矢量化处理，并使用各种距离指标与英语短语的矢量化版本进行了比较。在嵌入空间中，与英文短语“最接近”的 n-gram 被确定为与目标语言匹配。

最后，将与英语对应的成分短语进行组合，生成目标语言中的“请洗手”短语。这种组合方式再次利用了跨语言嵌入，以确保以合适方式组合组件。例如，如果我们在目标语言中匹配“请洗脚”这个短语，就必须将“脚”对应的 n-gram 替换成“手”对应的 n-gram。下面是<ruby> 伯利兹·克里奥尔 <rt>  Belize Kriol </rt></ruby>英语的一个例子：

当然，在这个匹配过程中，会做一些假设，这个过程完全有可能不能产生语法上正确的预测。例如，我假设在大多数语言中，“手”的单词和“脚”的单词都是一个<ruby> 字元 <rt>  token </rt></ruby>长的（字元由空格和标点符号隔开）。当然并非总是如此。这可能会造成类似于“和洗和手你”或类似的瑕疵词条。希望我们可以克服其中的一些局限性，并在未来扩展这个系统，但是，现在，我们选择用图形来强化这个想法。

我们将世界卫生组织的洗手说明改编成了一个 PNG 图片模板。然后，我们把我们翻译和生成的短语，用 Bash 和 Go 脚本的组合将其渲染到洗手图像中。这样，在文字和图像中都强调了正确洗手的理念（以防万一我们生成的翻译很尴尬）。

### 结果

到目前为止，我已经能够训练出 544 种语言的跨语言嵌入。我使用上述讨论过的方法尝试为所有这些语言构建“请洗手”这个短语。因为我没有许多语言对的对齐数据，所以我使用了同样包含“请洗手”成分的单独的保留文档来帮助验证构造短语中的字元。这让我们对公开发布的翻译版本有了一些信心（至少它们包含了表示“洗”和/或“手”的信息）。此外，我还将该方法与谷歌翻译支持的和/或有可用的人工翻译的语言对进行了比较。以下是来自 [Ethnologue](https://www.ethnologue.com/) 带有语言统计的翻译样本。

**语言：意大利语 [Ita]**

* 地点：意大利
* 人口： 68,000,000
* 我们的系统： làvati la mani
* 谷歌翻译： Lavati le mani

**语言：保加利亚语 [bul]**

* 地点：保加利亚
* 人口：8,000,000
* 我们的系统：умий ръцете
* 谷歌翻译：Измий си ръцете

**语言： 荷兰语 [nld]**

* 地点：荷兰
* 人口：24,000,000,000
* 我们的系统：wast uw handen
* 谷歌翻译：Was je handen

**语言： Pijin [pis]**

* 地点：所罗门群岛
* 人口： 550,000
* 我们的系统：wasim han
* 谷歌翻译：不支持

**语言：Tikar [tik]**

* 地点：喀麦隆
* 人口：110,000
* 我们的系统：ɓɔsi fyàʼ
* 谷歌翻译：不支持

**语言：Waffa [waj]**

* 地点：巴布亚新几内亚
* 人口：1,300
* 我们的系统：yaakuuvaitana nnikiiyauvaa fini
* 谷歌翻译：不支持

构造的短语类似于参考翻译，或者似乎是“请洗手”的另一种说法。例如，在保加利亚语中，我预测为“умий ръцете”，而谷歌翻译预测为“Измий си ръцете”。 然而，如果我用谷歌翻译回译我的预测，我还是会得到“请洗手”。有一些不确定的地方，我无法与参考译文（例如，所罗门群岛的 Pijin [pis]）或人类注释的跨度进行比较，但我仍然可以验证“洗”（wasim）和“手”（han）分别用在其他必定是谈论洗或手的参考文件中。 大约有 15% 的译文可以用这个方法验证，我希望在收集参考文献字典的过程中能进行更多的验证。

请注意，我最多使用了每种语言中大约 7000 个句子来得到上述译文，即使是意大利语这样的高资源语言也是如此。我也不依赖语言对之间的对齐句子。尽管存在这种数据非常稀缺、无监督的情况，但对于两个系统都支持的语言，我仍然能够获得类似于谷歌翻译的短语。这证明了这种“混合”方法（无监督的单词嵌入+基于规则的匹配）在将短语翻译成数据非常少的语言中的潜在用途。

注意：我绝对不是说这是解决冠状病毒和其他健康相关的信息传播问题的解决方案。这里仍有很多东西需要探索和正式评估，我们正在为此努力。在很多情况下，这种方法无法帮助构建数百种语言的重要信息资料。但是，我认为，我们所有人都应该尝试着为当前危机的相关问题制定创造性的解决方案。也许这只是一个非常大的拼图中的一块。

你可以在[这个民族语言指南](https://www.ethnologue.com/guides/health)上查看经过验证的译文加上人工翻译的完整列表。此外，我们即将以论文的形式对这一系统进行更深入的描述和分析。我们欢迎公众对翻译进行反馈，以帮助系统进行微调，最重要的是，确保将健康信息传递给世界各地的边缘化语言社区。

### 制作自己的洗手海报

我们已经开源了[用于渲染复合的脚本和生成洗手海报的代码](https://github.com/sil-ai/wash-your-hands)。这种方法应该能够处理几乎所有的语言和脚本。你可以在海报中添加你自己的“请洗手”的翻译，以帮助传播，或者根据自己的本地语境进行翻译。请务必在社交媒体上以 #WashYourHands 为标签分享你生成的海报。

### 培养你的 AI 技能

有很多令人兴奋的 AI 问题，可以给世界带来巨大的影响。如果你想用人工智能解决像上面提到的问题，或者你认为你的企业可能需要开始利用人工智能来做其他事情（供应链优化、推荐、客户服务自动化等），那么不要错过今年 5 月的[AI 课堂培训活动](https://datadan.io/)。*AI 课堂*是一个沉浸式的、为期三天的虚拟培训活动，适合至少有一定编程经验和数学基础知识的人参加。该培训提供了使用 Python 和开源框架（如 TensorFlow 和 PyTorch）进行现实的 AI 开发的实用基础知识。完成课程后，学员将有信心开始开发和部署自己的 AI 解决方案。

本文经许可转载自 <https://datadan.io/blog/wash-your-hands>

---

via: <https://opensource.com/article/20/4/ai-translation>

作者：[Daniel Whitenack](https://opensource.com/users/datadan) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


如何在 Linux 上安装 Python

Summary: 在 Linux 上安装最新 Python，替代或与老版本并存的分步说明。

在 Linux 上安装最新 Python，替代或与老版本并存的分步说明。

# 如何在 Linux 上安装 Python

>
> 在 Linux 上安装最新 Python，替代或与老版本并存的分步说明。
>
>
>

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

[Python](https://www.python.org/) 现在是[最流行](http://pypl.github.io/PYPL.html)、最常用的编程语言。Python 的简单语法和较低的学习曲线使其成为初学者和专业开发人员的终极选择。Python 还是一种非常通用的编程语言。从 Web 开发到人工智能，它几乎在除了移动开发的所有地方都有使用。

如果你使用的是 Python，那么你很有可能是一名开发人员（或想成为一名开发人员），而 Linux 是创建软件的绝佳平台。但是，当你每天使用 Python 时，有时你希望使用最新版本。你可能不想仅仅为了测试最新版本的系统而替换了默认的 Python 安装，因此本文说明了如何在 Linux 上安装最新版本的 Python 3，而不替换发行版提供的版本。

使用 `python --version` 终端命令检查是否已安装 Python，如果已安装，那么检查是哪个版本。如果你的 Linux 系统上未安装 Python，或者你想安装更新的版本，请按照以下步骤操作。

### 分步安装说明

#### 步骤 1：首先，安装构建 Python 所需的开发包

在 Debian 上

```
$ sudo apt update
$ sudo apt install build-essential zlib1g-dev \
libncurses5-dev libgdbm-dev libnss3-dev \
libssl-dev libreadline-dev libffi-dev curl
```

在 Fedora 上：

```
$ sudo dnf groupinstall development
```

#### 步骤 2：下载最新的稳定版本的 Python 3

访问[官方 Python 网站](http://python.org)并下载最新版本的 Python 3。下载完成后，你会有一个 `.tar.xz` 归档文件（“tarball”），其中包含 Python 的源代码。

#### 步骤 3：解压 tarball

下载完成后，使用解压程序或 [Linux 的 tar 命令](https://opensource.com/article/17/7/how-unzip-targz-file)解压压缩包，例如：

```
$ tar -xf Python-3.?.?.tar.xz
```

#### 步骤 4：配置脚本

解压 Python 压缩包后，进入 `configure` 脚本所在目录并在 Linux 终端中使用以下命令执行该脚本：

```
$ cd Python-3.*
./configure
```

配置可能需要一些时间。等待直到成功完成，然后再继续。

#### 步骤 5：开始构建过程

如果你的系统上已经安装了某个版本的 Python，并且希望同时安装新版本的 Python，请使用以下命令：

```
$ sudo make altinstall
```

构建过程可能需要一些时间。

如果要使用此版本替换当前版本的 Python，那么应使用包管理器（例如 `apt` 或 `dnf`）卸载当前的 Python 包，然后安装：

```
$ sudo make install
```

但是，通常最好以软件包的形式（例如 `.deb` 或 `.rpm` 文件）来安装软件，以便系统可以为你跟踪和更新它。因为本文假设尚未打包最新的 Python，所以你可能没有这个选择。在这种情况下，你可以按照建议使用 `altinstall` 来安装 Python，或者使用最新的源代码重构现有的 Python 包。这是一个高级主题，并且特定于你的发行版，因此不在本文讨论范围之内。

#### 步骤 6：验证安装

如果你没有遇到任何错误，那么现在你的 Linux 系统上已安装了最新的 Python。要进行验证，请在终端中输入以下命令之一：

```
python3 --version
```

或者

```
python --version
```

如果输出显示 `Python 3.x`，那么说明 Python 3 已成功安装。

### 创建虚拟环境（可选）

Python 提供了名为 `venv`（虚拟环境）的软件包，可帮助你将程序目录或软件包与其他目录或软件包隔离。

要创建虚拟环境，请在 Python 终端中输入以下内容（在此示例中，假定你安装的 Python 版本为 `3.8` 系列）：

```
python3.8 -m venv example
```

该命令创建一个带有一些子目录的新目录（我将其命名为 `example`）。

要激活虚拟环境，请输入：

```
$ source example/bin/activate
(example) $
```

请注意，你的终端提示符（`$`）现在以环境名称开头。

要停用虚拟环境，请使用 `deactivate` 命令：

```
(example) $ deactivate
```

### 总结

Python 是一种有趣的语言，它的开发和改进非常频繁。一旦了解了如何安装最新版本而又不干扰发行版提供的稳定版本，熟悉新功能将很容易。

如果你有任何反馈或问题，请在评论中提出。

---

via: <https://opensource.com/article/20/4/install-python-linux>

作者：[Vijay Singh Khatri](https://opensource.com/users/vijaytechnicalauthor) 选题：[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/) 荣誉推出


值得关注的 9 个开源云原生项目

Summary: 工作中用了容器？熟悉这些出自云原生计算基金会的项目吗？

工作中用了容器？熟悉这些出自云原生计算基金会的项目吗？

# 值得关注的 9 个开源云原生项目

>
> 工作中用了容器？熟悉这些出自云原生计算基金会的项目吗？
>
>
>

随着用容器来开发应用的实践变得流行，[云原生应用](https://opensource.com/article/18/7/what-are-cloud-native-apps)也在增长。云原生应用的定义为：

>
> “云原生技术用于开发使用打包在容器中的服务所构建的应用程序，以微服务的形式部署，并通过敏捷的 DevOps 流程和持续交付工作流在弹性基础设施上进行管理。”
>
>
>

这个定义提到了构成云原生应用的不可或缺的四个元素：

1. 容器
2. 微服务
3. DevOps
4. 持续集成和持续交付 (CI/CD)

尽管这些技术各有各自独特的历史，但它们之间却相辅相成，在短时间内实现了云原生应用和工具的惊人的指数级增长。这个[云原生计算基金会（CNCF）](https://www.cncf.io)信息图呈现了当今云原生应用生态的规模和广度。

*云原生计算基金会项目*

我想说，瞧着吧！这仅仅是一个开始。正如 NodeJS 的出现引发了无数的 JavaScript 工具的爆炸式增长一样，容器技术的普及也推动了云原生应用的指数增长。

好消息是，有几个组织负责监管并将这些技术连接在一起。 其中之一是 <ruby>   开放容器倡议  <rt>  Open Containers Initiative </rt></ruby>（OCI），它是一个轻量级的、开放的治理机构（或项目），“它是在 Linux 基金会的支持下形成的，其明确目的是创建开放的行业标准的容器格式和运行时。” 另一个是 CNCF，它是“一个致力于使云原生计算普及和可持续发展的开源软件基金会”。

通常除了围绕云原生应用建立社区之外，CNCF 还帮助项目围绕其云原生应用建立结构化管理。CNCF 创建了成熟等级的概念（沙箱级、孵化级或毕业级），分别与下图中的“创新者”、“早期采用者”和“早期大量应用”相对应。

*CNCF 项目成熟等级*

CNCF 为每个成熟等级制定了详细的[标准](https://github.com/cncf/toc/blob/master/process/graduation_criteria.adoc)（为方便读者而列在下面）。获得技术监督委员会（TOC）三分之二的同意才能转为孵化或毕业级。

**沙箱级**

>
> 要想成为沙箱级，一个项目必须至少有两个 TOC 赞助商。 有关详细过程，请参见《CNCF 沙箱指南 v1.0》。
>
>
>

**孵化级**

>
> 注：孵化级是我们期望对项目进行全面的尽职调查的起点。
>
>
> 要进入孵化级，项目除了满足沙箱级的要求之外还要满足：
>
>
> * 证明至少有三个独立的最终用户已成功将其用于生产，且 TOC 判断这些最终用户具有足够的质量和范围。
> * 提交者的数量要合理。提交者定义为具有提交权的人，即可以接受部分或全部项目贡献的人。
> * 显示出有大量持续提交和合并贡献。
> * 由于这些指标可能会根据项目的类型、范围和大小而有很大差异，所以 TOC 有权决定是否满足这些标准的活动水平。
>
>
>

**毕业级**

>
> 要从沙箱或孵化级毕业，或者要使一个新项目作为已毕业项目加入，项目除了必须满足孵化级的标准外还要满足：
>
>
> * 至少有两个来自组织的提交者。
> * 已获得并保持了“核心基础设施计划最佳实践徽章”。
> * 已完成独立的第三方安全审核，并发布了具有与以下示例类似的范围和质量的结果（包括已解决的关键漏洞）：<https://github.com/envoyproxy/envoy#security-audit>，并在毕业之前需要解决所有关键的漏洞。
> * 采用《CNCF 行为准则》。
> * 明确规定项目治理和提交流程。最好将其列在 `GOVERNANCE.md` 文件中，并引用显示当前提交者和荣誉提交者的 `OWNERS.md` 文件。
> * 至少有一个主仓的项目采用者的公开列表（例如，`ADOPTERS.md` 或项目网站上的徽标）。
> * 获得 TOC 的绝大多数票，进入毕业阶段。如果项目能够表现出足够的成熟度，则可以尝试直接从沙箱级过渡到毕业级。项目可以无限期保持孵化状态，但是通常预计它们会在两年内毕业。
>
>
>

### 值得关注的 9 个项目

本文不可能涵盖所有的 CNCF 项目，我将介绍最有趣的 9 个毕业和孵化的开源项目。

| 名称 | 授权类型 | 简要描述 |
| --- | --- | --- |
| [Kubernetes](https://github.com/kubernetes/kubernetes) | Apache 2.0 | 容器编排平台 |
| [Prometheus](https://github.com/prometheus/prometheus) | Apache 2.0 | 系统和服务监控工具 |
| [Envoy](https://github.com/envoyproxy/envoy) | Apache 2.0 | 边缘和服务代理 |
| [rkt](https://github.com/rkt/rkt) | Apache 2.0 | Pod 原生的容器引擎 |
| [Jaeger](https://github.com/jaegertracing/jaeger) | Apache 2.0 | 分布式跟踪系统 |
| [Linkerd](https://github.com/linkerd/linkerd) | Apache 2.0 | 透明服务网格 |
| [Helm](https://github.com/helm/helm) | Apache 2.0 | Kubernetes 包管理器 |
| [Etcd](https://github.com/etcd-io/etcd) | Apache 2.0 | 分布式键值存储 |
| [CRI-O](https://github.com/cri-o/cri-o) | Apache 2.0 | 专门用于 Kubernetes 的轻量级运行时环境 |

我也创建了视频材料来介绍这些项目。

### 毕业项目

毕业的项目被认为是成熟的，已被许多组织采用的，并且严格遵守了 CNCF 的准则。以下是三个最受欢迎的开源 CNCF 毕业项目。（请注意，其中一些描述来源于项目的网站并被做了改编。）

#### Kubernetes（希腊语“舵手”）

Kubernetes! 说起云原生应用，怎么能不提 Kubernetes 呢？ Google 发明的 Kubernetes 无疑是最著名的基于容器的应用程序的容器编排平台，而且它还是一个开源工具。

什么是容器编排平台？通常，一个容器引擎本身可以管理几个容器。但是，当你谈论数千个容器和数百个服务时，管理这些容器变得非常复杂。这就是容器编排引擎的用武之地。容器编排引擎通过自动化容器的部署、管理、网络和可用性来帮助管理大量的容器。

Docker Swarm 和 Mesosphere Marathon 也是容器编排引擎，但是可以肯定地说，Kubernetes 已经赢得了这场比赛（至少现在是这样）。Kubernetes 还催生了像 [OKD](https://www.okd.io/) 这样的容器即服务（CaaS）平台，它是 Kubernetes 的 Origin 社区发行版，并成了 [Red Hat OpenShift](https://www.openshift.com) 的一部分。

想开始学习，请访问 [Kubernetes GitHub 仓库](https://github.com/kubernetes/kubernetes)，并从 [Kubernetes 文档](https://kubernetes.io/docs/home)页面访问其文档和学习资源。

#### Prometheus（普罗米修斯）

Prometheus 是 2012 年在 SoundCloud 上构建的一个开源的系统监控和告警工具。之后，许多公司和组织都采用了 Prometheus，并且该项目拥有非常活跃的开发者和用户群体。现在，它已经成为一个独立的开源项目，独立于公司之外进行维护。

*Prometheus 的架构*

理解 Prometheus 的最简单方法是可视化一个生产系统，该系统需要 24（小时）x 365（天）都可以正常运行。没有哪个系统是完美的，也有减少故障的技术（称为容错系统），但是，如果出现问题，最重要的是尽快发现问题。这就是像 Prometheus 这样的监控工具的用武之地。Prometheus 不仅仅是一个容器监控工具，但它在云原生应用公司中最受欢迎。此外，其他开源监视工具，包括 [Grafana](https://grafana.com)，都借助了 Prometheus。

开始使用 Prometheus 的最佳方法是下载其 [GitHub 仓库](https://github.com/prometheus/prometheus)。在本地运行 Prometheus 很容易，但是你需要安装一个容器引擎。你可以在 [Prometheus 网站](https://prometheus.io/docs/introduction/overview)上查看详细的文档。

#### Envoy（使者）

Envoy（或 Envoy 代理）是专为云原生应用设计的开源的边缘代理和服务代理。由 Lyft 创建的 Envoy 是为单一服务和应用而设计的高性能的 C++ 开发的分布式代理，同时也是为由大量微服务组成的服务网格架构而设计的通信总线和通用数据平面。Envoy 建立在 Nginx、HAProxy、硬件负载均衡器和云负载均衡器等解决方案的基础上，Envoy 与每个应用相伴（并行）运行，并通过提供平台无关的方式提供通用特性来抽象网络。

当基础设施中的所有服务流量都经过 Envoy 网格时，很容易就可以通过一致的可观测性来可视化问题域，调整整体性能，并在单个位置添加基础功能。基本上，Envoy 代理是一个可帮助组织为生产环境构建容错系统的服务网格工具。

服务网格应用有很多替代方案，例如 Uber 的 [Linkerd](https://linkerd.io/)（下面会讨论）和 [Istio](https://istio.io/)。Istio 通过将其部署为 [Sidecar](https://istio.io/docs/reference/config/networking/v1alpha3/sidecar) 并利用了 [Mixer](https://istio.io/docs/reference/config/policy-and-telemetry) 的配置模型，实现了对 Envoy 的扩展。Envoy 的显著特性有：

* 包括所有的“<ruby> 入场筹码 <rt>  table stakes </rt></ruby>（LCTT 译注：引申为基础必备特性）”特性（与 Istio 这样的控制平面组合时）
* 带载运行时 99% 数据可达到低延时
* 可以作为核心的 L3/L4 过滤器，提供了开箱即用的 L7 过滤器
* 支持 gRPC 和 HTTP/2（上行/下行）
* 由 API 驱动，并支持动态配置和热重载
* 重点关注指标收集、跟踪和整体可监测性

要想了解 Envoy，证实其能力并实现其全部优势，需要丰富的生产级环境运行的经验。你可以在其[详细文档](https://www.envoyproxy.io/docs/envoy/latest)或访问其 [GitHub](https://github.com/envoyproxy/envoy) 仓库了解更多信息。

### 孵化项目

下面是六个最流行的开源的 CNCF 孵化项目。

#### rkt（火箭）

rkt, 读作“rocket”，是一个 Pod 原生的容器引擎。它有一个命令行接口用来在 Linux 上运行容器。从某种意义上讲，它和其他容器如 [Podman](https://podman.io)、Docker 和 CRI-O 相似。

rkt 最初是由 CoreOS （后来被 Red Hat 收购）开发的，你可以在其网站上找到详细的[文档](https://coreos.com/rkt/docs/latest)，以及在 [GitHub](https://github.com/rkt/rkt) 上访问其源代码。

#### Jaeger（贼鸥）

Jaeger 是一个开源的端到端的分布式追踪系统，适用于云端应用。在某种程度上，它是像 Prometheus 这样的监控解决方案。但它有所不同，因为其使用场景有所扩展：

* 分布式事务监控
* 性能和延时优化
* 根因分析
* 服务依赖性分析
* 分布式上下文传播

Jaeger 是一项 Uber 打造的开源技术。你可以在其网站上找到[详细文档](https://www.jaegertracing.io/docs/1.13)，以及在 [GitHub](https://github.com/jaegertracing/jaeger) 上找到其源码。

#### Linkerd

像创建 Envoy 代理的 Lyft 一样，Uber 开发了 Linkerd 开源解决方案用于生产级的服务维护。在某些方面，Linkerd 就像 Envoy 一样，因为两者都是服务网格工具，旨在提供平台级的可观测性、可靠性和安全性，而无需进行配置或代码更改。

但是，两者之间存在一些细微的差异。 尽管 Envoy 和 Linkerd 充当代理并可以通过所连接的服务进行上报，但是 Envoy 并不像 Linkerd 那样被设计为 Kubernetes Ingress 控制器。Linkerd 的显著特点包括：

* 支持多种平台（Docker、Kubernetes、DC/OS、Amazon ECS 或任何独立的机器）
* 内置服务发现抽象，可以将多个系统联合在一起
* 支持 gRPC、HTTP/2 和 HTTP/1.x请 求和所有的 TCP 流量

你可以在 [Linkerd 网站](https://linkerd.io/2/overview)上阅读有关它的更多信息，并在 [GitHub](https://github.com/linkerd/linkerd) 上访问其源码。

#### Helm（舵轮）

Helm 基本上就是 Kubernetes 的包管理器。如果你使用过 Apache Maven、Maven Nexus 或类似的服务，你就会理解 Helm 的作用。Helm 可帮助你管理 Kubernetes 应用程序。它使用“Helm Chart”来定义、安装和升级最复杂的 Kubernetes 应用程序。Helm 并不是实现此功能的唯一方法；另一个流行的概念是 [Kubernetes Operators](https://coreos.com/operators)，它被 Red Hat OpenShift 4 所使用。

你可以按照其文档中的[快速开始指南](https://helm.sh/docs)或 [GitHub 指南](https://github.com/helm/helm)来试用 Helm。

#### Etcd

Etcd 是一个分布式的、可靠的键值存储，用于存储分布式系统中最关键的数据。其主要特性有：

* 定义明确的、面向用户的 API（gRPC）
* 自动 TLS，可选的客户端证书验证
* 速度（可达每秒 10,000 次写入）
* 可靠性（使用 Raft 实现分布式）

Etcd 是 Kubernetes 和许多其他技术的默认的内置数据存储方案。也就是说，它很少独立运行或作为单独的服务运行；相反，它以集成到 Kubernetes、OKD/OpenShift 或其他服务中的形式来运作。还有一个 [etcd Operator](https://github.com/coreos/etcd-operator) 可以用来管理其生命周期并解锁其 API 管理功能：

你可以在 [etcd 文档](https://etcd.io/docs/v3.3.12)中了解更多信息，并在 [GitHub](https://github.com/etcd-io/etcd)上访问其源码。

#### CRI-O

CRI-O 是 Kubernetes 运行时接口的 OCI 兼容实现。CRI-O 用于各种功能，包括：

* 使用 runc（或遵从 OCI 运行时规范的任何实现）和 OCI 运行时工具运行
* 使用容器/镜像进行镜像管理
* 使用容器/存储来存储和管理镜像层
* 通过容器网络接口（CNI）来提供网络支持

CRI-O 提供了大量的[文档](https://github.com/cri-o/cri-o/blob/master/awesome.md)，包括指南、教程、文章，甚至播客，你还可以访问其 [GitHub 页面](https://github.com/cri-o/cri-o)。

我错过了其他有趣且开源的云原生项目吗？请在评论中提醒我。

---

via: <https://opensource.com/article/19/8/cloud-native-projects>

作者：[Bryant Son](https://opensource.com/users/brsonhttps://opensource.com/users/marcobravo) 选题：[lujun9972](https://github.com/lujun9972) 译者：[messon007](https://github.com/messon007) 校对：[wxy](https://github.com/wxy)

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


一个方便的用于创建树莓派 SD 卡镜像的程序

Summary: 开始在 Mac 上使用 Raspberry Pi Imager。

# 一个方便的用于创建树莓派 SD 卡镜像的程序

>
> 开始在 Mac 上使用 Raspberry Pi Imager。
>
>
>

有多种购买树莓派的方法，根据你的购买渠道的不同，可能附带或不附带操作系统。要在树莓派上安装操作系统，只需将操作系统镜像 “闪存” 到 SD 卡即可。为了使之尽可能简单，[树莓派基金会](https://www.raspberrypi.org/)推出一个 Raspberry Pi Imager 实用程序，你可以在所有主流平台上下载它。下面就来简单介绍一下这个有用的新工具。

### 安装 Imager

你通常可以在[树莓派下载](https://www.raspberrypi.org/downloads/)页面上找到 Raspberry Pi Imager。它有 Mac、Ubuntu 和 Windows 版本。我将下载并演示 Mac 版本。

Mac 的安装包是常规的 DMG 镜像，它会挂载到你的桌面，然后经典的安装界面就会出现：

只需将可爱的树莓图标拖到“应用”文件夹，就可以完成。从启动台中调用它，你会看到一系列简单的按钮和菜单供你选择。真的不能比这更简单了：

### 可用的镜像和选项

默认选项包含各种树莓派型号的镜像。Raspbian 是首选，它有两个可用的选项，较小的 “Lite” 版本和较大的 “Full” 版本。LibreELEC Kodi 娱乐系统有各种特定于型号的版本。Ubuntu 18 和 19 有适用于不同树莓派型号的 32 位和 64 位版本。有一个 RPi 4 EEPROM 恢复程序，以及使用 FAT32 格式化卡的功能。最后，有一个通用的镜像安装程序选项，稍后我将进行尝试。这个简单而紧凑的程序非常方便。

### 安装一些镜像

我决定使用 16g 的 micro SD 卡。我选择了默认的 Raspbian 镜像，选择已连接的 USB/SD 设备，然后按下 “WRITE” 按钮。这是一个简短的演示：

我没有在此处发布整个操作过程。我认为它是在写入的时候下载了镜像，对于我的无线连接这花费了几分钟。该过程在完成之前要先经过写入，然后经过验证环节。完成后，我弹出设备，并将卡插入到我的树莓派 3 中，然后按照通常的图形 Raspbian 安装向导和桌面环境进行设置。

这对我来说还不够。我每天都会下载许多 Linux，今天我还在寻找更多。我回到了[树莓派下载](https://www.raspberrypi.org/downloads/)页面，并下载了 RISC OS 镜像。这个过程几乎一样容易。下载 RISCOSPi.5.24.zip 文件，将其解压缩，然后找到 ro524-1875M.img 文件。在 “Operating System” 按钮中，我选择了 “Use Custom” 并选择了所需的镜像文件。这个过程几乎是相同的。唯一真正的不同是我必须在下载目录中搜寻并选择一个镜像。文件写完后，回到树莓派 3，RISC OS 可以使用了。

### 对 USB C 的抱怨

顺便说一句，如今有多少人对 USB C 带来的不便感到沮丧？我使用的是只有 USB C 口的 MacBook Pro，我需要不断更换适配器才能完成工作。看看这个：

是的，那是一个 USB C 到 USB A 适配器，然后是一个 USB 到 SD 卡读卡器，以及一个 SD 到 micro SD 适配器。我可能可以在网上找到一些东西来简化此过程，但这些都是我手头有的部件，以支持我家五花八门的 Mac、Windows 和 Linux 主机。说到这里就不多说了，但我希望你能从这些疯狂的东西中得到一个笑点。

### 总结

新的 Raspberry Pi Imager 是一种简单有效的工具，可以快速烧录树莓派镜像。[BalenaEtcher](https://www.balena.io/etcher/) 是用于对可移动设备进行烧录的类似工具，但是新的 Raspberry Pi Imager 通过省去了获取那些常见镜像的步骤，使普通树莓派系统安装（如 Raspbian）更加容易。

---

via: <https://opensource.com/article/20/4/raspberry-pi-imager-mac>

作者：[James Farrell](https://opensource.com/users/jamesf) 选题：[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/) 荣誉推出


以太网技术联盟宣布完成 800Gb 以太网规范

# 以太网技术联盟宣布完成 800Gb 以太网规范

>
> 800Gb 以太网规范使当前以太网标准的最高速度提高了一倍，但同时也对包括延迟在内的其他方面进行了调整。
>
>
>

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

由业界支持的<ruby> 以太网技术联盟 <rt>  Ethernet Technology Consortium </rt></ruby>（ETC）已宣布完成 800Gb 以太网技术规范。

新规范基于当前高端 400Gb 以太网协议中使用的许多技术，新规范正式称为 800GBASE-R。设计它的联盟（当时称为 25Gb 以太网联盟）在开发 25、50 和 100Gb 以太网协议方面也发挥了重要作用，其成员包括 博通、思科、谷歌和微软。

800Gb 以太网规范增加了新的<ruby> 介质访问控制 <rt>  media access control </rt></ruby>（MAC）和<ruby> 物理编码子层 <rt>  physical coding sublayer </rt></ruby>（PCS）方法，新规范对这些功能进行了调整，来使用 8 条 106.25Gbps 的物理通道分发数据。（通道可以是铜双绞线，也可以是光缆，一束光纤或光波。）800GBASE-R 规范建立在两个 400 GbE 2xClause PCS 之上，以创建一个以 800Gbps 的总速率运行的单个 MAC。

尽管主要是使用八条 106.25Gb 通道，但这并不是固定的。它可以以一半的速度 （53.125Gbps） 使用 16 条通道。

新标准提供了 400G 以太网规范的一半延迟，但是新规范也将运行在 50 Gbps、100 Gbps 和 200 Gbps 的网络上的<ruby> 前向纠错 <rt>  forward error correction </rt></ruby>（FEC）开销减少了一半，从而减少了网卡上的数据包处理负担。

通过降低延迟，这将满足对延迟敏感的应用（例如[高性能计算](https://www.networkworld.com/article/3444399/high-performance-computing-do-you-need-it.html)和人工智能）中对速度的需求，在这些应用中，需要尽可能快地移动大量数据。

从 400G 增加到 800G 并不是太大的技术飞跃。它意味着在相同的传输速率下增加更多的通道，再做一些调整。但是，要想突破 Tb 级，Cisco 和其他网络公司已经讨论了十年了，这将需要对技术进行重大修改，而且并非易事。

新技术可能也不便宜。800G 可与现有硬件一起使用，而 400Gb 以太网交换机价格不菲，高达六位数。对技术进行重大修改，越过 Tb 障碍，可能会变得更加昂贵。但是对于大客户和高性能计算客户而言，这也是情理之中的事。

ETC 并未透露何时会支持 800G 的新硬件，但考虑到它对现有规格的变化不大，它可能会在今年出现，前提是疫情引起的停滞不会影响它。

---

via: <https://www.networkworld.com/article/3538529/ethernet-consortium-announces-completion-of-800gbe-spec.html>

作者：[Andy Patrizio](https://www.networkworld.com/author/Andy-Patrizio/) 选题：[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/) 荣誉推出


使用 Reveal.js 和 Git 创建网页教程

# 使用 Reveal.js 和 Git 创建网页教程

>
> 通过这个简单的工作流程创建的研讨会幻灯片，可以在任何浏览器、设备和平台上获得一致的查看效果。
>
>
>

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

无论你是学习者还是教师，你可能都会认识到采用幻灯片放映来传播知识的在线<ruby> 研讨会 <rt>  workshop </rt></ruby>的价值。如果你曾经偶然看到过这样一个逐页、逐章设置的井井有条的教程，你可能会想知道创建这样的一个网站有多难。

好吧，让我在这里向你展示，使用全自动化的流程来生成这样的教程是多么容易。

### 介绍

当我开始将学习内容放到网上置时，体验并不是很好。我想要的是一种可重复的、一致的、易于维护的东西，因为我的内容会随着我教学的技术发展而变化。

我尝试了许多交付模型，从 [Asciidoctor](https://asciidoctor.org/) 这样的低级代码生成器到在单个 PDF 文件中放置教程。全都不能让我满意。当我举办现场的在座研讨会时，我喜欢使用幻灯片放映，因此我想知道我是否可以为我自己的在线的，自定进度的研讨会体验做同样的事情。

经过一番挖掘，我为创建无痛的研讨会网站打下了基础。当时我已经在使用一个演示文稿生成框架，这对我来说是很有帮助的，因为这个框架可以产生对网站友好的格式（HTML）。

### 设置

这里是这个项目所需要的基本组件。

* 研讨会的想法（这是你的问题，我帮不了你）
* 用于研讨会幻灯片的 Reveal.js
* GitLab 项目仓库
* 你常用的 HTML 代码编辑器
* Web 浏览器
* 在你的机器上安装好 Git

如果这个列表看起来令人望而生畏，那么有一个快速入门的方法，不需要把所有的东西一个个都拉到一起。你可以用我的模板项目来给你提供幻灯片和项目设置的入门教程。

本文假设你熟悉 Git 和在 Git 平台（如 GitLab）上托管项目。如果你需要指导或教程，请查看我们的[Git 入门系列](https://opensource.com/resources/what-is-git)。

首先，将模板项目克隆到本地机器上。

```
$ git clone https://gitlab.com/eschabell/beginners-guide-automated-workshops.git
```

为此设置一个新的 GitLab 项目，导入模板项目作为初始导入。

研讨会网站有一些重要的文件。在**根目录**下，你会发现一个名为 `.gitlab-ci.yml` 的文件，当你向主分支提交修改时（即将拉取请求合并到 `master` 分支），这个文件会作为触发器。它可以触发将 `slides` 目录的全部内容复制到 GitLab 项目的 `website` 文件夹中。

我把它托管在我的 GitLab 账户中，名为 `beginners-guide-automated-workshops`。当它部署完毕后，你可以在浏览器中通过导航到下列地址查看 `slides` 目录的内容:

```
https://eschabell.gitlab.io/beginners-guide-automated-workshops
```

对于你的用户帐户和项目，URL 如下所示：

```
https://[YOUR_USERNAME].gitlab.io/[YOUR_PROJECT_NAME]
```

这些是你开始创建网站内容所需要的基本素材。当你推送修改后，它们会自动生成更新过的研讨会网站。请注意，默认模板包含了几个示例幻灯片，这将是你完成对存储库的完整签入后的第一个研讨会网站。

研讨会模板生成的结果是一个 [receive.js](https://revealjs.com/#/) 幻灯片，可以在任何浏览器中运行，并可以自动调整大小，几乎可以让任何人在任何地方、任何设备上观看。

这样创建一个方便、易访问的研讨会怎么样？

### 它是如何工作的

有了这些背景信息，你就可以开始探索研讨会的这些素材，并开始把你的内容放在一起了。你需要的一切都可以在项目的 `slides` 目录中找到；这里是使用 reveal.js 在浏览器中创建研讨会幻灯片的地方。

你将用来制作研讨会的文件和目录是：

* `default.css`文件
* `images` 目录
* `index.html`文件

在你常用的 HTML/CSS 编辑器中打开每一个文件，然后进行下面描述的修改。你用哪个编辑器并不重要，我更喜欢 [RubyMine IDE](https://www.jetbrains.com/ruby/)，因为它能在本地浏览器中提供页面预览。这对我在将内容推送到研讨会网站之前测试内容时很有帮助。

#### default.css 文件

文件 `css/theme/default.css` 是一个基础文件，你将在这里为你的研讨会幻灯片设置重要的全局设置。其中值得注意的两个主要的项目是所有幻灯片的默认字体和背景图片。

在 `default.css` 中，看一下标有 `GLOBAL STYLES` 的部分。当前的默认字体在这一行中列出了。

```
font-family: "Red Hat Display", "Overpass", san-serif;
```

如果你使用的是非标准字体类型，则必须在以下行中将其导入（Overpass 字体类型就是这样做的）：

```
@import url('SOME_URL');
```

`background` 是你创建的每张幻灯片的默认图像。它存储在 `images` 目录下（见下面），并在下面这一行中设置（重点是图像路径）。

```
background: url("…/…/images/backgrounds/basic.png")
```

要设置一个默认背景，只需将这一行指向你要使用的图片。

#### images 目录

顾名思义，`images` 目录是用来存储你想在研讨会幻灯片上使用的图片。例如，我通常会把展示研讨会主题进展的截图放在我的个人幻灯片上。

现在，你只需要知道你需要将背景图片存储在一个子目录（`backgrounds`）中，并将你计划在幻灯片中使用的图片存储在 `images` 目录中。

#### index.html 文件

现在你已经把这两个文件整理好了，剩下的时间你就可以在 HTML 文件中创建幻灯片了，从 `index.html` 开始。为了让你的研讨会网站开始成形，请注意这个文件中的以下三个部分。

* `head`部分，在这里你可以设置标题、作者和描述。
* `body` 部分，你可以在这里找到要设计的单个幻灯片。
* 你可以在每个 `section` 中定义各个幻灯片的内容。

从 `head` 部分开始，因为它在顶部。模板项目有三个占位符行供你更新。

```
<title>INSERT-YOUR-TITLE-HERE</title>
<meta name="description" content="YOUR DESCIPTION HERE.">
<meta name="author" content="YOUR NAME">
```

`title` 标签包含文件打开时显示在浏览器选项卡中的文字。请将其改为与你的研讨会的标题相关的内容（或研讨会的某个部分），但记得要简短，因为标签页的标题空间有限。`description` 元标签包含了对你的工作坊的简短描述，而 `author` 元标签是你应该把你的名字（如果你是为别人写的，则是工作坊创建者的名字）。

现在继续到 `body` 部分。你会注意到它被分成了许多 `section` 标签。`body` 的开头包含了一个注释，说明你正在为每个标有 `section` 的打开和关闭的标签创建幻灯片。

```
<body>
        <div class="reveal">

        <!-- Any section element inside of this container is displayed as a slide -->
        <div class="slides">
```

接下来，创建你的各个幻灯片，每张幻灯片都用 `section` 标签封装起来。这个模板包括了一些幻灯片来帮助你开始制作。例如，这里是第一张幻灯片。

```
<section>
      <div style="width: 1056px; height: 300px">
            <h1>Beginners guide</h1>
            <h2>to automated workshops</h2>
      </div>
      <div style="width: 1056px; height: 200px; text-align: left">
            Brought to you by,<br/>
            YOUR-NAME<br/>
      </div>
      <aside class="notes">Here are notes: Welcome to the workshop!</aside>
</section>
```

这张幻灯片有两个区域，用 `div` 标签分隔。用空格隔开了标题和作者。

如果你有一定的 HTML 使用知识，可以尝试各种东西来开发你的研讨会。使用浏览器预览结果的时候真的很方便。有些 IDE 提供了本地查看修改，但你也可以打开 `index.html` 文件查看你的修改，然后再推送到资源库中。

一旦你对你的研讨会感到满意，推送你的修改，然后等待它们通过持续集成管道。它们将像模板项目一样被托管在 <https://eschabell.gitlab.io/beginners-guide-automated-workshops>。

### 了解更多

要了解更多关于这个工作流程可以做什么，请查看下面的示例研讨会和托管了研讨会集合的网站。所有这些都是基于本文中描述的工作流程。

研讨会例子：

* [Red Hat Process Automation Manage workshop](https://gitlab.com/bpmworkshop/rhpam-devops-workshop)
* [JBoss Travel Agency BPM Suite online workshop](https://gitlab.com/bpmworkshop/presentation-bpmworkshop-travel-agency)

研讨会集合：

* [Rule the world: Practical decisions & process automation development workshops](https://bpmworkshop.gitlab.io/)
* [Application development in the cloud workshop](https://appdevcloudworkshop.gitlab.io/)
* [Portfolio architecture: Workshops for creating impactful architectural diagrams](https://redhatdemocentral.gitlab.io/portfolio-architecture-workshops)

我希望这本新手指南和模板研讨会项目能让你看到，在开发和维护研讨会网站的过程中，可以轻松、无痛地完成。我也希望这个工作流程能让你的研讨会受众几乎在任何设备上都能完全访问你的内容，这样他们就能从你分享的知识中学习到你的知识。

---

via: <https://opensource.com/article/20/4/create-web-tutorial-git>

作者：[Eric D. Schabell](https://opensource.com/users/eschabell) 选题：[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/) 荣誉推出


什么是互联网骨干网，它是怎样工作的

# 什么是互联网骨干网，它是怎样工作的

>
> 一级互联网服务提供商（ISP）将其高速光纤网络连接在一起，形成互联网的骨干网，实现在不同地理区域之间高效地传输流量。
>
>
>

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

互联网会产生大量的计算机到计算机的流量，要确保所有流量都可以在世界上任何地方之间传输，就需要大量汇聚的高速网络，这些网络统称为互联网骨干网，但是它是如何工作的呢？

### 互联网的骨干网是什么?

像任何其他网络一样，互联网由接入链路组成，这些接入链路将流量传输到高带宽路由器，路由器又将流量从源地址通过最佳可用路径传输到目的地址。其核心是由相互连接的、彼此对等的各个高速光纤网络而构成的互联网骨干网。

单个独立的核心网络由一级互联网服务提供商（ISP）所拥有。他们的网络连接在一起。这些提供商包括 AT&T、CenturyLink、Cogent Communications,、Deutsche Telekom、Global Telecom and Technology (GTT)、NTT Communications、Sprint、Tata Communications,、Telecom Italia Sparkle、Telia Carrier和 Verizon。

通过将这些长途网连接在一起，一级 ISP 们创建了一个他们可以访问整个路由表的单一的全球性网络，因此他们可以通过逐步层次化地增加本地 ISP 网络来有效地将流量传输到其目的地。

除了物理连接之外，这些骨干网提供商还通过一致的网络协议 TCP/IP 融合在一起，这实际上是两个协议，<ruby> 传输控制协议 <rt>  transport control protocol </rt></ruby>和<ruby> 互联网协议 <rt>  internet protocol </rt></ruby>，它们在计算机之间建立连接，以确保连接可靠，并将消息格式化为数据包。

### 互联网交接点（IXP）将骨干网连接在一起

骨干网 ISP 在中立位置的对等点通过高速交换机和路由器连接其网络。这些通常由第三方（有时是非营利组织）提供，以促进骨干网的统一。

参与的一级 ISP 会帮助资助 IXP，但不向其他一级 ISP 收取流量传输费用，这种关系称为无结算对等。这种协议消除了可能导致互联网性能下降的潜在财务纠纷。

### 骨干网有多快?

互联网骨干网由最快的路由器组成，可以提供 100Gbps 的线路速度。这些路由器由包括 Cisco、Extreme、华为、Juniper 和 Nokia 在内的供应商制造，使用边界网关协议（BGP）在彼此之间路由流量。

### 流量是如何进入骨干网的

在 1 级 ISP 之下是规模较小的 2 级和 3 级 ISP。

3 级 ISP 为企业和消费者提供了互联网接入服务。这些提供商自己没有接入互联网骨干网，因此，他们自己无法将其客户连接到数十亿台互联网上的计算机。

购买一级 ISP 提供商的接入非常昂贵。通常 3 级 ISP 与拥有自己网络的 2 级（区域）ISP 签订合同，利用 2 级 ISP 的网络将流量传输到有限的地理区域，但不能传输到所有互联网上的设备。

为此，2 级 ISP 与 1 级 ISP 签约以访问全球骨干网，并以这种方式使客户可以访问整个互联网。

这种方式使得来自世界一侧的计算机的流量能够连接到另一侧的计算机。流量从源计算机流向 3 级 ISP，再路由到 2 级 ISP，再路由到 1 级骨干网提供商，再路由到正确的 2 级 ISP，最后路由到提供该数据的 3 级接入提供商连接的目标计算机。

---

via: <https://www.networkworld.com/article/3532318/what-is-the-internet-backbone-and-how-it-works.html>

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

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


如何为 Linux 打包 Python 应用

Summary: 了解如何使用 dh_virtualenv 来让你的 Python 应用可作为 .deb 包安装。

# 如何为 Linux 打包 Python 应用

>
> 了解如何使用 dh\_virtualenv 来让你的 Python 应用可作为 .deb 包安装。
>
>
>

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

在基于 Debian 的操作系统（例如 Debian 或 [Elementary OS](https://opensource.com/article/19/12/pantheon-linux-desktop)）上安装 Python 应用的一种方法是使用 [dh\_virtualenv](https://dh-virtualenv.readthedocs.io/en/latest/) 工具。它可以构建一个 `.deb` 包，在应用之外封装了一个 Python 虚拟环境，并在安装时进行部署。

在本文中，我将以构建一个包含 [HTTPie](https://opensource.com/article/19/8/getting-started-httpie) 工具的包为例来解释如何使用它，以便在无需激活虚拟环境的情况下从命令行测试 HTTP API。

### 使用 dh\_virtualenv 打包

首先，你需要安装 `dh_virtualenv` 所需的工具。`dh_virtualenv` 的[文档](https://dh-virtualenv.readthedocs.io/en/1.1/tutorial.html)提供了所有安装选项。在基于 Debian 的系统上，我输入：

```
apt-get install dh-virtualenv devscripts
```

尽管不需要 [devscripts](http://man.he.net/man1/devscripts) 包，但它可以简化后续操作。

现在，创建一个目录来保存源码。由于这是一个本地的、非官方的 HTTPie 打包，因此我将其称为 `myhttp`。接下来，让我们在 `myhttp` 内创建一些文件，向 Debian 构建系统提供元数据。

首先，创建 `debian/control` 文件：

```
Source: myhttp
Section: python
Priority: extra
Maintainer: Jan Doe <jandoe@example.org>
Build-Depends: debhelper (>= 9), python3.7, dh-virtualenv (>= 0.8)
Standards-Version: 3.9.5

Package: myhttp
Architecture: any
Pre-Depends: dpkg (>= 1.16.1), python3.7, ${misc:Pre-Depends}
Depends: ${misc:Depends}
Description: http client
 Useful for doing stuff
```

那么这些是什么信息呢？正如 [Debian 文档](https://www.debian.org/doc/manuals/maint-guide/dreq.en.html#control)指出的：

>
> “第 1–7 行是源码包的控制信息。第 9–13 行是二进制包的控制信息。”
>
>
>

以下是我使用的：

* `Section` 的值对于我们来说大多没有意义，但需要存在。它对给引导式 UI 安装程序提供信息是有意义的，但对于这个包来说，没有意义。
* `Priority` 对像这样的第三方包的正确值是 `extra`。
* 强烈建议在 `Maintainer` 字段中填写正确的联系人信息。但不一定非得是你的个人电子邮件，如果包由团队维护，并且你希望将问题发送到团队的邮件别名，例如 `Infrastructure Team <infra-team-list@company.example.com>`。
* `Build-Depends` 字段标识你需要 `debhelper`、`python` 和 `dh-virtualenv` 来构建包：包构建过程中将确保这些依赖项在包构建时已安装。
* `Standards-Version` 字段主要给人看。它表明你遵循的指南。本指南基于 `dh-virtualenv` 的官方文档，它是基于 Debian 的 3.9.5 指南。最好一直将源码包和二进制包命名相同。
* `Architecture` 字段应为 `Any`，因为除非虚拟环境可能包含一些特定于体系结构的文件。否则，最好选择该字段为 `any`。
* 保持 `Pre-Depends` 列表不变：它是一种非常严格的依赖关系形式，你很少会需要比这里建议的最小依赖更多的依赖项。依赖项通常由构建系统准确计算，因此没有理由手动指定它们。
* 如果你的包主要用于内部，那么 `Description` 字段可能只需要最少的信息或者指向公司 wiki 的链接，不然更多的信息会更有用。

然后创建 `debian/compat` 文件，它[主要出于历史目的而存在](https://www.debian.org/doc/manuals/maint-guide/dother.en.html#compat)：

```
$ echo "9" > debian/compat
```

接下来，创建更新日志以告知包用户自上次发布以来发生了什么变化。最简单的方法是使用 `dch --create` 创建模板，然后填写值。

填写后，它看起来像：

```
myhttp (2.0.0-1) stable; urgency=medium

  * Initial release.

 -- Jan Doe <jandoe@example.org>  Fri, 27 Mar 2020 01:09:22 +0000
```

现在你需要告诉工具安装 HTTPie，但是哪个版本？

创建一个宽松版本的 `requirements.in` 文件：

```
httpie
```

通常，宽松的需求文件将仅包含项目的直接依赖项，并在需要时指定最低版本。不一定总是需要指定最低版本：这些工具通常偏向于将依赖关系转化为“可能的最新版本”。如果你的 Debian 包与一个内部 Python 包相对应，这是内部应用中的一种常见情况，那么宽松的需求文件看起来将很相似：仅包含包名的一行。

然后使用 `pip-compile`（可通过安装 PyPI 包 `pip-tools` 获得）：

```
$ pip-compile requirements.in > requirements.txt
```

这会生成一个严格的依赖文件，名为 `requirements.txt`：

```
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile requirements.in
#
certifi==2019.11.28       # via requests
chardet==3.0.4            # via requests
httpie==2.0.0             # via -r requirements.in
idna==2.9                 # via requests
pygments==2.6.1           # via httpie
requests==2.23.0          # via httpie
urllib3==1.25.8           # via requests
```

最后，写一个 `debian/rules` 文件来创建包。因为 `dh_virtualenv` 会处理所有困难的事，因此规则文件很简单：

```
#!/usr/bin/make -f

%:
        dh $@ --with python-virtualenv --python /usr/bin/python3.7
```

确保指定 Python 解释器。默认它会使用 `/usr/bin/python`，这是 Python2，但是你应该使用一个[受支持的 Python 版本](https://opensource.com/article/19/11/end-of-life-python-2)。

完成了，接下来就是构建包：

```
$ debuild -b -us -uc
```

这会在父目录生成一个类似 `myhttp_2.0.0-1_amd64.deb` 的文件。该文件可在任何兼容的系统上安装。

通常，最好在同一平台上构建用于特定平台（例如 Debian 10.0）的 Debian 包。

你可以将此 Debian 包保存在软件仓库中，并使用例如 [Ansible](https://opensource.com/resources/what-ansible) 的工具将其安装在所有相关系统上。

### 总结

给基于 Debian 的系统的打包应用是一个有着多个步骤的过程。使用 `dh_virtualenv` 将使过程变得简单明了。

---

via: <https://opensource.com/article/20/4/package-python-applications-linux>

作者：[Moshe Zadka](https://opensource.com/users/moshez) 选题：[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/) 荣誉推出


Ubuntu 20.04 LTS 下载及新特性

# Ubuntu 20.04 LTS 下载及新特性

>
> Ubuntu 20.04 LTS Focal Fossa 终于发布了。以下是 Ubuntu 20.04 的新功能和下载链接，以及Ubuntu 20.04的官方风味版。
>
>
>

等待终于结束了。Ubuntu 20.04 LTS 终于来了，可以下载了！

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

如果你已经在使用 Ubuntu 19.10，你可能发现没有太多明显的差异 —— 但我所看到的改进清单确实令人印象深刻。

如果你想知道有什么新的东西，我将会提到这个版本的几个主要亮点。

### Ubuntu 20.04 有什么新特性？

与之前的 18.04 LTS 版本相比，Ubuntu 20.04 LTS 有很多视觉上的改变，同时也包括了一些底层的改进。

当然，随着 [GNOME 3.36](https://itsfoss.com/gnome-3-36-release/) 的加入，视觉上的重大升级和性能上的提升是相当明显的。以下是一段视频，重点介绍了 Ubuntu 20.04 中的新功能。

如果你有兴趣的话，你也可以深入到我们的文章中去看看，重点介绍 [Ubuntu 20.04 的新功能](https://itsfoss.com/ubuntu-20-04-release-features/)。

不管是哪种情况，让我来给你介绍一些亮点。

* GNOME 3.36 是默认的桌面系统
* 性能提高了很多
* 新的 Yaru 主题很华丽，也有黑暗模式。
* 你不会再看到亚马逊应用程序，它已经永远消失了!
* 改进的 [ZFS](https://itsfoss.com/what-is-zfs/) 支持
* 你可以获得最新的 [Linux 内核 5.4](https://itsfoss.com/linux-kernel-5-4/)（LTS）
* 增加了对 exFAT 的支持
* 改进硬件和图形支持
* 更新软件 Python 3.8.2
* Wireguard 已被移植到 Linux 内核5.4，可以在 Ubuntu 20.04 上使用。

如果你想看详细的功能介绍，请观看这段视频，重点介绍 20.04 LTS 的最佳功能。

如果你是 Ubuntu 的新手，对 Ubuntu 20.04 有疑问，我们也为你提供了一篇快速的 [Ubuntu 20.04 FAQ](https://itsfoss.com/ubuntu-20-04-faq/) 文章。

### 从 18.04 和 19.10 升级到 Ubuntu 20.04

如果你已经在使用 Ubuntu 18.04 或 19.10，你可以从系统中轻松升级到 Ubuntu 20.04。

这样一来，当你开始使用新版本的时候，你的文件和大部分的应用程序设置都会保持原样，而无需从 ISO 中重新安装。

你可以阅读此详细教程来学习[如何将 Ubuntu 升级到新版本](https://itsfoss.com/upgrade-ubuntu-version/)。

请注意，如果你使用的是 Lubuntu 18.04，请不要升级到 Lubuntu 20.04。Lubuntu 18.04 使用的是 Lxde 桌面，而后面的版本使用的是 LXQt 桌面。这样升级可能会导致冲突和系统崩溃。

### 下载 Ubuntu 20.04 LTS

你可以抓取 ISO 或 torrent 文件，这取决于你喜欢什么。

* [Ubuntu 20.04 LTS (ISO)](http://releases.ubuntu.com/focal/ubuntu-20.04-desktop-amd64.iso)
* [Ubuntu 20.04 LTS (Torrent)](http://releases.ubuntu.com/focal/ubuntu-20.04-desktop-amd64.iso.torrent)

请按照本教程学习[如何安装 Ubuntu](https://itsfoss.com/install-ubuntu/)。

### 下载Ubuntu 20.04 LTS官方版下载

如果你想在不同的桌面环境下得到 Ubuntu 的官方版本，请按照下面的链接进行操作。

* [Ubuntu MATE 20.04 LTS](https://ubuntu-mate.org/download/amd64/focal/)
* [Kubuntu 20.04 LTS](https://kubuntu.org/getkubuntu/)
* [Xubuntu 20.04 LTS](https://xubuntu.org/download/)
* [Ubuntu Budgie 20.04 LTS](https://ubuntubudgie.org/downloads/)
* [Ubuntu Studio 20.04 LTS](https://ubuntustudio.org/)
* [Lubuntu 20.04 LTS](https://lubuntu.me/downloads/)

如果你没有在各自的官方网站上找到最新的 ISO/torrent 文件，只需前往 [cdimages.ubuntu.com](http://cdimages.ubuntu.com/) 找到所有的版本。

接下来，导航到“发行版名称” -> “releases” -> “20.04” -> “release”，然后你应该可以找到列出的 ISO 和 torrent 文件的链接。

如果你有问题，请参考这篇文章，它回答了[关于 Ubuntu 20.04 的常见问题](https://itsfoss.com/ubuntu-20-04-faq/)。如果你要安装，请查看我们推荐的[安装 Ubuntu 20.04 之后要做的事情](https://itsfoss.com/things-to-do-after-installing-ubuntu-20-04/)。

享受 Ubuntu 20.04 LTS Focal Fossa！

---

via: <https://itsfoss.com/download-ubuntu-20-04/>

作者：[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/) 荣誉推出


12 个有趣的 Linux 终端命令

部分命令centos没有 可惜了

# 12 个有趣的 Linux 终端命令

>
> 你觉得 Linux 终端里只有无趣的工作吗？那你一定不知道下面这些有趣的 Linux 命令吧。
>
>
>

Linux 终端是用来完成复杂的工作的，我们有很多有用的 [linux 命令奇技淫巧](https://itsfoss.com/linux-command-tricks/)来帮助你。

但是，你知道你还可以用终端来做很多有趣的事吗？如果你不知道，没关系，大多数 Linux 用户也都只把终端视为一个用来管理系统和开发工作的交互界面。

然而，如果你知道这里有些你可以在终端玩的[基于终端的游戏](https://itsfoss.com/best-command-line-games-linux/)和 [ASCII 码游戏](https://itsfoss.com/best-ascii-games/)，你一定会大吃一惊。

在这篇文章中，我将会探索一些有趣的、可笑的、荒谬的命令来让你可以在终端中找点乐子！

### 用这些命令在 Linux 终端中找点乐子

你可能会觉得这些命令荒谬或没用，但是有一些还是可以被好好利用的。

我已经放上了 Ubuntu/Debian 的安装指令，如果你使用基于 Ubuntu 的发行版，请确保[启用 universe 仓库](https://itsfoss.com/ubuntu-repositories/)，因为大多数命令不在主仓库中。

如果你使用 Arch、Fedora、SUSE、Solus 或者其他非 Ubuntu 的发行版，请使用你的发行版包管理工具去安装这些有趣的 Linux 命令。

#### 1、在终端开一辆火车

让我们坐上火车，来一场说走就走的旅行的，没错，就是字面意思！

`sl` 命令可以让你在终端运行一辆火车。

安装方法：

```
sudo apt install sl
```

完成后，你只要在终端输入下面的命令就可以开始：

```
sl
```

很精彩，对吧？但等等，我们还没结束！你还可以让你的火车飞起来，只要加上参数 `-F`，波特先生，请飞吧：

```
sl -F
```

这样会让火车长出翅膀飞出终端窗口！

#### 2、给你的 Linux 终端加上黑客帝国效果

还记得科幻电影[黑客帝国](https://en.wikipedia.org/wiki/The_Matrix)吗？终端里掉落的绿色字符成为了黑客帝国的标志形象。

你也可以在你的 Linux 电脑里有这样的黑客帝国数字雨！你只需要安装 `cmatric` 然后在终端输入它就行。

在 Debian/Ubuntu Linux 上安装 cmatrix:

```
sudo apt install cmatrix
```

现在，你要做的就是输入下面的命令，在终端就会有黑客帝国屏幕了：

```
cmatrix
```

按下 `Ctrl+C` 来停止它，黑客先生。

#### 3、燃起来

拿好灭火器，因为接下来你要在你的终端里点火了！

想安装它，你要输入：

```
sudo apt install libaa-bin
```

完成后，你输入下面的命令，你的终端就会燃起一团火焰：

```
aafire
```

按下 `Ctrl+C` 来停止它。

#### 4、幸运饼干命令

想知道你的运气怎样但身边没有幸运饼干？

别担心，你只需在终端打出 `fortune` 然后按下回车。终端将会随机显示出一个幸运语，就像你从幸运饼干里得到的一样。

安装它：

```
sudo apt install fortune
```

完成后，只要在命令行打出下面的内容，你就会知道你的运气怎样：

```
fortune
```

这是一个你可以实际使用的命令。你可以用它作为每日消息，这样在多用户环境下，每个用户登录后都会得到一个“幸运饼干”。

你也可以把它添加到 `bashrc` 文件，这样当你登进终端你就会看到了。

#### 5、宠物爱好者？这是给你准备的

`oneko` 是一个有趣的命令，可以把你的光标变成一只老鼠，然后创造一只好奇的猫，一旦你移动光标，就会来追你。这不仅局限于终端。当猫追逐光标时，你可以继续工作。

如果你家里有孩子这一定很有趣。

用下面的命令安装 `oneko`：

```
sudo apt install oneko
```

用下面的命令运行它：

```
oneko
```

如果你不喜欢猫，喜欢狗，输入：

```
oneko -dog
```

它有很多种小宠物，你可以用 `oneko -help` 获取信息。按下 `Ctrl+C` 终止它。

#### 6、有个小兄弟在看着你

`xeyes` 是一个很小的 GUI 程序，它可以绘制出一双眼睛一直盯着你！它会不断跟随你的鼠标光标，运行命令自己看看！

你可以用下面命令安装：

```
sudo apt install xeyes
```

然后这样用它：

```
xeyes
```

按下 `Ctrl+C` 终止它。

#### 7、让终端帮你讲话

打开你的扬声器，你来试试这个命令，[eSpeak](https://itsfoss.com/espeak-text-speech-linux/) 是一个有趣的命令，它可以让你的终端说话。是的，你没听错。

先安装这个包：

```
sudo apt install espeak
```

接下来，你只需要输入在命令行中输入你想听到的话：

```
espeak "Type what your computer says"
```

无论你在双引号里面填什么，你的电脑都会复述出来！它就像[在 Linux 中的 echo 命令](https://linuxhandbook.com/echo-command/)，但不是打印出来，而是说出来。

#### 8、Toilet（但与洗手间无关）

这听起来有点奇怪，是的。但是，这只是一个命令，用来将文本转换成大的 ASCII 字符。

用这个命令安装 `toilet`：

```
sudo apt install toilet
```

完成后，你只需输入：

```
toilet sample text you want
```

我也不知道为啥这个小程序叫 Toilet。

#### 9、那个牛说什么？

`cowsay` 是一个在终端中用 ASCII 字符展示出一头牛的命令。通过这个命令，你可以控制牛说出你想说的话。

别纠结声音，它只展示文本（就是你看漫画书一样）。

安装 `cowsay`：

```
sudo apt install cowsay
```

安装完成后，你只要输入：

```
cowsay "your text"
```

无论你在双引号里填什么，你的牛都会说！我看到一些系统管理员用它来展示每天的消息。你也可以这样，你甚至可以把它和 `fortune` 命令结合。

#### 10、旗帜

`banner` 命令与 `toilet` 命令相似，但它限制最多只能打印 10 个字符。

你可以这样安装 `banner` 命令：

```
sudo apt install sysvbanner
```

然后这样运行：

```
banner "Welcome"
```

替换双引号里的内容，你将会得到你想要的展示内容。

#### 11、Yes

`yes` 命令帮助你在循环中自动响应直到终止命令。这个命令将会一直打印相同的内容。如果你想快速生成大量垃圾文本，那么此命令将像超级按钮一样工作。

你也可以使用它为命令提供 `yes` 应答（如果提示应答时）。例如，`apt upgrade` 命令会要求你确认，你可以像这样使用它：

```
yes | sudo apt upgrade
```

你不需要安装任何包，`yes` 命令已经存在了。

想要终止 `yes` 命令循环，只需按下 `CTRL+C`。

#### 12、得到一个新的身份

要生成一个随机的假身份吗？我推荐你用 `rig` 命令。你在终端运行它，就会生成一个假的身份。

用这个命令安装 `rig`：

```
sudo apt install rig
```

只需像这样输入：

```
rig
```

它可能被用在脚本或者 web 应用中展示随机信息，但我自己还没做过什么。

### 结尾

我希望你会喜欢这个有趣的 Linux 命令列表。你最喜欢哪个命令呢？你还知道其他有趣的命令吗？请在评论部分与我们分享。

---

via: <https://itsfoss.com/funny-linux-commands/>

作者：[Srimanta Koley](https://itsfoss.com/author/itsfoss/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Zioyi](https://github.com/Zioyi) 校对：[wxy](https://github.com/wxy)

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


关于 Emacs 中的变量你需要知道的事情

Summary: 学习 Elisp 是如何处理变量的，以及如何在你的脚本与配置中使用它们。

学习 Elisp 是如何处理变量的，以及如何在你的脚本与配置中使用它们。

# 关于 Emacs 中的变量你需要知道的事情

>
> 学习 Elisp 是如何处理变量的，以及如何在你的脚本与配置中使用它们。
>
>
>

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

GNU Emacs 是由 C 和 Emacs Lisp（Elisp，Lisp 编程语言的一种方言）写成，它是一个编辑器的同时，又碰巧是 Elisp 的沙盒。因此，理解 Elisp 中的一些基本编程概念会对你有一些帮助。

如果你是 [Emacs](https://www.gnu.org/software/emacs/) 新手，请先阅读 Sacha Chua 的《[给 Emacs 新手的资源](http://sachachua.com/blog/p/27144)》精品帖。本篇文章假定你熟悉常见的 Emacs 术语，并且能够阅读并求值 Elisp 代码的简单片段。最好你也听说过变量作用域的概念，知道它在其它编程语言中的作用。本篇文章中的示例假定你使用的是相对较新的 Emacs 版本（[v.25 之后的版本](https://www.gnu.org/software/emacs/download.html)）。

[Elisp 手册](https://www.gnu.org/software/emacs/manual/html_node/elisp/) 包含了 Elisp 的方方面面，但它是写给那些有明确查找目标的人们的（它在这方面也做得相当棒）。但是很多人想要能够在更高的层次上解释 Elisp 概念的材料，同时将信息压缩成最精华的部分。本篇文章也正是我回应这种呼声的一次尝试，为读者描绘基础的大体轮廓。使他们能在配置中用上这些技巧，也让他们在手册中查询细节变得更容易。

### 全局变量

用 `defcustom` 定义的用户设置和用 `defvar` 或 `defconst` 定义的变量是全局的。使用 `defcustom` 或 `defvar` 声明变量的一个非常重要的原因是，当一个变量已经被<ruby> 绑定 <rt>  bind </rt></ruby>，对它们进行重新求值不会覆盖掉已有的值。举个栗子，如果你在初始化文件中对 `my-var` 进行如下绑定：

```
(setq my-var nil)
```

对如下表达式求值不会将变量覆盖为 `t`：

```
(defvar my-var t)
```

注意此处有*一个例外*：如果你用 `C-M-x` 快捷键对上述声明求值，它将调用 `eval-defun` 函数，并将变量覆盖为 `t`。通过此方式，你可以按需将变量强制覆盖。这种行为是刻意而为之的：你可能知道，Emacs 中的许多特性是按需加载的，也可以称为自动加载。如果那些文件中的声明将变量覆盖为它们的默认值，那它也就覆盖了你初始化文件中的设置。

### 用户选项

用户选项就是使用 `defcustom` 声明的全局变量。与使用 `defvar` 声明的变量不同，这些变量可以用 `M-x customize` 界面来配置。据我所知，大部分人因为觉得它开销较大而不经常使用。一旦你知道如何在你的初始化文件中设置变量，也就没有理由一定要去使用它了。许多用户没有意识到的一个细节是，通过 `customize` 的方式设置用户选项能够执行代码，有的时间可用来运行一些附加的配置说明：

```
(defcustom my-option t
  "My user option."
  :set (lambda (sym val)
         (set-default sym val)
         (message "Set %s to %s" sym val)))
```

若你对这段代码求值，并键入 `M-x customize-option RET my-option RET` 运行 `customize` 界面，lambda 匿名函数就会被调用，回显区域就会显示出该选项的符号名与值。

如果你在初始化文件中使用 `setq` 改变该选项的值，那么匿名函数不会运行。要想在 Elisp 中正确设置一个选项，你需要使用函数 `customize-set-variable`。或者，人们在他们的配置文件中使用了各种版本的 `csetq` 宏来自动处理（如你所愿，你可以通过 GitHub 的代码搜索发现更复杂的变体）。

```
(defmacro csetq (sym val)
  `(funcall (or (get ',sym 'custom-set) 'set-default) ',sym ,val))
```

若你正在使用 [use-package](https://github.com/jwiegley/use-package#customizing-variables) 宏，`:custom` 关键字会替你处理好以上这些。

在你将以上代码放入到你的初始化文件中之后，你便可以使用 `csetq` 宏在设置变量的同时运行任何现存的 `setter` 函数。要证明这点，你可以使用此宏来改变上面定义的选项，并观察回显区域的消息输出。

```
(csetq my-option nil)
```

### 动态绑定与词法绑定

当你在使用其它编程语言时，你可能不会意识到动态绑定与词法绑定的区别。当今的大部分编程语言使用词法绑定，并且在学习变量作用域与变量查找时也没有必要去了解它们之间的区别。

如此看来，Emacs Lisp 比较特殊因为动态绑定是默认选项，词法绑定需要显式启用。这里有一些历史遗留原因，但在实际使用中，你应该*时刻*启用词法绑定，因为它更快并且不容易出错。要启用词法绑定，只需将如下的注释行作为你的 Emacs Lisp 文件的第一行：

```
;;; -*- lexical-binding: t; -*-
```

另一种方式，你可以调用 `add-file-local-variable-prop-line`，在你选择将变量 `lexical-binding` 置为 `t` 后，会自动插入如上的注释行。

在加载包含如上特殊格式行的文件时，Emacs 会相应地设置变量，这意味着该缓冲区中的代码加载时启用了词法绑定。若要采用交互式的方式，你可以调用 `M-x eval-buffer` 命令，它会将词法绑定考虑在内。

既然你已经知道了如何启用词法绑定，那么了解这些术语的含义就很明智了。对于动态绑定，在程序执行期间建立的最后一个绑定将用于变量查找。你可以通过将以下代码放入空缓冲区并执行 `M-x eval buffer`，以对此进行测试：

```
(defun a-exists-only-in-my-body (a)
  (other-function))

(defun other-function ()
  (message "I see `a', its value is %s" a))

(a-exists-only-in-my-body t)
```

你可能会很惊讶地发现，在 `other-function` 中查找变量 `a` 竟然成功了。

若你在顶部添加了特殊的词法绑定注释后，重新运行前面的示例，这段代码将抛出 `variable is void` 错误，因为 `other-functioin` 无法识别变量 `a`。如果你使用的是其它编程语言，这才是你所期望的行为。

启用词法绑定后，作用域会由周围的代码所定义。这并不单单是性能原因，时间也已经表明了词法绑定才是更受喜爱的。

### 特殊变量与动态绑定

如你所知，`let` 用于临时建立局部绑定：

```
(let ((a "I'm a")
      (b "I'm b"))
  (message "Hello, %s. Hello %s" a b))
```

接下来有趣的是——使用 `defcustom`、`defvar` 以及 `defconst` 定义的变量被称为*特殊变量*，不论词法绑定是否启用，它们都将使用动态绑定：

```
;;; -*- lexical-binding: t; -*-

(defun some-other-function ()
  (message "I see `c', its value is: %s" c))

(defvar c t)

(let ((a "I'm lexically bound")
      (c "I'm special and therefore dynamically bound"))
  (some-other-function)
  (message "I see `a', its values is: %s" a))
```

通过 `C-h e` 切换至 `Messages` 缓冲区，查看上述示例输出的消息。

使用 `let` 或者函数参数绑定的局部变量会遵循由 `lexical-binding` 变量定义的查找规则，但使用 `defvar`、`defconst` 或 `defcustom` 定义的全局变量，能够沿着调用栈在 `let` 表达式中被修改。

这种技巧允许方便地进行特殊定制，并且经常在 Emacs 中被使用。这并不奇怪，毕竟 Emacs Lisp 最开始只提供动态绑定作为唯一选择。下面是一个常见的示例，说明如何向只读缓冲区临时写入数据：

```
(let ((inhibit-read-only t))
  (insert ...))
```

这是另一个常见的示例，如何进行大小写敏感的搜索：

```
(let ((case-fold-search nil))
  (some-function-which-uses-search ...))
```

动态绑定允许你采用作者未曾预料的方式对函数进行修改。对于像 Emacs 这样设计使用的程序来说，这是个强大的工具与特性。

有一点需要注意：你可能会意外地使用局部变量名，该变量在其他地方被声明为特殊变量。防止这种冲突的一个技巧是避免在局部变量名中使用下划线。在我当前的 Emacs 会话中，以下代码只留下少数潜在冲突的候选：

```
(let ((vars ()))
  (mapatoms
   (lambda (cand)
     (when (and (boundp cand)
                (not (keywordp cand))
                (special-variable-p cand)
                (not (string-match "-"
                                   (symbol-name cand))))
       (push cand vars))))
  vars) ;; => (t obarray noninteractive debugger nil)
```

### 缓冲区局部变量

每个缓冲区都能够拥有变量的一个局部绑定。这就意味着对于任何变量，都会首先在当前缓冲区中查找缓冲区局部变量取代默认值。局部变量是 Emacs 中一个非常重要的特性，比如它们被主模式用来建立缓冲区范围内的行为与设置。

事实上你已经在本文中见过*缓冲区局部变量*——也就是将 `lexical-binding` 在缓冲区范围内设置为 `t` 的特殊注释行。在 Emacs 中，在特殊注释行中定义的缓冲区局部变量也被称为*文件局部变量*。

任何的全局变量都可以用缓冲区局部变量来遮掩，比如上面定义的变量 `my-var`，你可用如下方式设置局部变量：

```
(setq-local my-var t)
;; or (set (make-local-variable 'my-var) t)
```

此时 `my-var` 对于你在对上述代码进行求值时对应的缓冲区来说就是局部变量。若你对它调用 `describe-variable`，文档会同时告诉你局部与全局的值。从编程的角度来讲，你可以分别用 `buffer-local-value` 获取局部值，用 `default-value` 获取全局值。若要移除局部值，你可以调用 `kill-local-variable`。

另一个需要注意的重要性质就是，一旦一个变量成为缓冲区局部变量，后续在该缓冲区中使用的 `setq` 都将只能设置局部的值。要想设置默认值，你需要使用 `setq-default`。

因为局部变量意味着对缓冲区的定制，它们也就经常被用于模式钩子中。一个典型的例子如下所示：

```
(add-hook 'go-mode-hook
          (defun go-setup+ ()
            (setq-local compile-command
              (if (string-suffix-p "_test.go" buffer-file-name)
                  "go test -v"
                (format "go run %s"
                        (shell-quote-argument
                         (file-name-nondirectory buffer-file-name)))))))
```

这将设置 `go-mode` 缓冲区中 `M-x compile` 使用的编译命令。

另一个重要的方面就是一些变量会*自动*成为缓冲区局部变量。这也就意味着当你使用 `setq` 设置这样一个变量时，它会针对当前缓冲区设置局部绑定。这个特性不应该被经常使用，因为这种隐式的行为并不好。不过如果你想的话，你可以使用如下方法创建自动局部变量：

```
(defvar-local my-automatical-local-var t)
;; or (make-variable-buffer-local 'my-automatical-local-var)
```

变量 `indent-tabs-mode` 就是 Emacs 内建的一个例子。如果你在初始化文件中使用 `setq` 改变变量的值，根本不会影响默认值。只有在你加载初始化文件时正处在当前的缓冲区的局部值会被改变。因此，你需要使用 `setq-default` 来改变 `indent-tabs-mode` 的默认值。

### 结语

Emacs 是一个强大的编辑器，并且随着你的定制它将变得更加强大。现在，你知道了 Elisp 是如何处理变量的，以及你应如何在你自己的脚本与配置中使用它们。

*本篇文章此前采用 CC BY-NC-SA 4.0 许可证发布在 [With-Emacs](https://with-emacs.com/posts/tutorials/almost-all-you-need-to-know-about-variables/) 上，经过修改（带有合并请求）并在作者允许的情况下重新发布。*

---

via: <https://opensource.com/article/20/3/variables-emacs>

作者：[Clemens Radermacher](https://opensource.com/users/clemera) 选题：[lujun9972](https://github.com/lujun9972) 译者：[cycoe](https://github.com/cycoe) 校对：[wxy](https://github.com/wxy)

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


如何使用 Inkscape 制作万圣节灯笼

Summary: 使用开源软件为你最喜欢的万圣节鬼屋制作一个有趣和怪异的装饰品。

使用开源软件为你最喜欢的万圣节鬼屋制作一个有趣和怪异的装饰品。

# 如何使用 Inkscape 制作万圣节灯笼

>
> 使用开源软件为你最喜欢的万圣节鬼屋制作一个有趣和怪异的装饰品。
>
>
>

使用开源软件装饰一个独一无二的万圣节灯笼！

通常，灯笼的一部分结构体是不透明的，以阻挡内部的光线。灯笼之所以成为灯笼，是因为其去掉了一些东西 ：从结构体上切开的窗口，这样光线就可以射出。虽然对于照明来说不实用，但是一个有着怪异形状窗口和隐藏暗色轮廓的灯笼却可以令人兴奋，并创造出很多乐趣。

这篇演示如何使用 [Inkscape](https://opensource.com/article/18/1/inkscape-absolute-beginners) 创建你自己的灯笼。如果还没有 Inkscape ，在 Linux 上，你可以从软件库中安装它，在 MacOS 和 Windows 上，你可以从[Inkscape 网站](http://inkscape.org) 上下载它.

### 使用材料

* 模板（[A4](https://www.dropbox.com/s/75qzjilg5ak2oj1/papercraft_lantern_A4_template.svg?dl=0) 或[信纸](https://www.dropbox.com/s/8fswdge49jwx91n/papercraft_lantern_letter_template%20.svg?dl=0)大小）
* 卡片纸（黑色是传统色）
* 描图纸（可选）
* 裁纸刀、尺子、切割垫板（可使用工艺切割机/激光切割机代替）
* 工艺胶
* LED 茶灯蜡烛

安全注意事项：这个项目只使用电池操作的蜡烛。

### 理解模板

首先，从上面的链接下载你所在区域（A4 或信纸）的合适的模板，然后在 Inkscape 中打开它。

灰白色的棋盘格背景是透明的（从技术角度来说，它是 alpha 通道。）

黑色基板构成了灯笼。现在，没有窗口可以让光线穿过；灯笼有一个非镂空的黑色基板。你将在 Inkscape 中使用**并集**和**差集**选项来数字化的设计窗口。

蓝色虚线表示折线。橙色实线表示参考线。采光窗口不应该放在橙色盒子的外面。

模板的左侧是你可以在你设计中使用的一些预先制作好的对象。

### 创建一个窗口或形状

1. 创建一个看起来像你想要的窗口样式的对象。可以使用 Inkscape 左侧工具栏中的一些形状工具来创建对象。此外，你可以下载共创或公共领域的剪贴画，并导入 PNG 文件到你的项目中。
2. 当你对对象的形状满意时，在顶部菜单中选择“路径” -> “对象转化成路径” 将其转换为一个路径（而不是一个形状，Inkscape 视其为两种不同的对象）。

3. 在基板形状的上面放置对象。
4. 选择对象和黑色基板。通过先单击一个，并按住 `Shift` 按键，再选择另一个来完成。
5. 从顶部菜单选择“路径” -> “差集” 来从基板的对象中移除形状。这将创建灯笼中的一个窗口。

 差集 菜单" title="Object > Difference menu">

### 添加对象到窗口中

在制作了一个窗口后，你可以添加对象到其中来创建一个场景。

提示：

* 所有的对象，包括文本，必须连接到灯笼的基板，否则，在切割后会掉落下来，并留下一片空白。
* 避免小而复杂的细微之处。即使使用激光切割机或工艺切割机等机器，也很难切割这些细微之处。

1. 创建或导入一个对象。
2. 放置对象到窗口内，以便它至少接触基板的两侧。
3. 选择对象后，从顶部菜单选择“连接” -> “对象转化成路径”。

4. 选择对象和黑色基板，通过在按住 `Shift` 按键的同时单击每一个来完成。
5. 选择“路径” -> “并集”来使对象和基板合二为一。

### 添加文本

文本既可以从基板剪出文字来创建一个窗口（就像我对星星所做的那样），或者也可以添加到一个窗口上（它可以阻挡来自灯笼内部的光线）。如果你要创建一个窗口，只需要执行下面的步骤 1 和步骤 2，然后使用“差集”来从基板移除文本。

1. 从左侧边栏中选择文本工具来创建文本。粗体字体效果最好。

2. 选择你的文本，然后从顶部菜单选择“路径” -> “对象转化成路径”。这将转换文本对象为一个路径。注意，这个步骤意味着你将不能再编辑该文本，所以，*只有当*你确定你拥有想要的单词后，执行这个步骤。
3. 在你转换文本后，你可以按键盘上的 `F2` 来激活节点编辑器工具，当选择使用这个工具时，可以清楚地显示文本的节点。

4. 取消文本分组。
5. 调整每个字母，以便使其与相邻字母或基板稍微重叠。

6. 为将所有的字母彼此连接，并连接到基板，重新选择所有文本和基板，然后选择“路径” -> “并集”。

 并集 连接字母和基板" title="Connecting letters and base with Path > Union">

### 准备打印

下面是手工切割灯笼的说明。如果使用激光切割机或工艺切割机，遵循硬件所需要的技巧来准备好你的文件。

1. 在“图层”面板中，单击“安全”图层旁边的“眼睛”图标来隐藏安全线。如果你看不到图层面板，通过顶部菜单选择“图层” -> “图层”来显示它。
2. 选择黑色基板。在“填充和笔划”面板中，设置填充为“X”（意味着*不填充*），设置“笔划”为纯黑色（对于喜欢十六进制的粉丝来说是 `#000000ff` ）。

3. 使用“文件” -> “打印”来打印你的图案。
4. 使用一把工艺刀和直尺，小心地绕着每一条黑线切割。在蓝色虚线上轻划，然后折叠。

5. 要完成窗口的制作，剪切描图纸为每个窗口的大小，然后粘贴它到灯笼的内侧。

6. 在折条处把灯笼的边粘在一起。
7. 接通电池供电的 LED 蜡烛，并放置它到你灯笼中。

现在你的灯笼已经完成了，准备好点亮你的鬼屋了。

---

via: <https://opensource.com/article/19/10/how-make-halloween-lantern-inkscape>

作者：[Jess Weichler](https://opensource.com/users/cyanide-cupcake) 选题：[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/) 荣誉推出


Silverblue 是什么？

Summary: Fedora Silverblue 在 Fedora 世界内外越来越受欢迎。

# Silverblue 是什么？

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

Fedora Silverblue 在 Fedora 世界内外越来越受欢迎。因此，根据社区的反馈，以下是关于这个项目的一些有趣问题的答案。如果你有任何其他与 Silverblue 相关的问题，请在评论区留言，我们会在未来的文章中回答。

### Silverblue 是什么？

Silverblue 是新一代桌面操作系统的代号，之前被称为 Atomic Workstation。该操作系统是通过利用 [rpm-ostree 项目](https://rpm-ostree.readthedocs.io/en/latest/)创建的映像来交付的。这种系统的主要优点是速度、安全性、原子更新和不变性。

### “Silverblue” 到底是什么意思？

“Team Silverblue” 或简称 “Silverblue”，没有任何隐藏的含义。该项目以前被称为 Atomic Workstation，大约两个月后更名时选中了这个名字。在这个过程中，审查过 150 多个单词或单词组合。最终选择了 “Silverblue”，因为它有一个可用的域名以及社交网络账号。人们可以把它看成是 Fedora 的蓝色品牌的一个新的品牌形象，可以用在诸如“加油，Silverblue 团队！”或“想加入该团队，改进 Silverblue 吗？”这样的短语中。

### 何谓 ostree？

[OSTree（或 libostree）是一个项目](https://ostree.readthedocs.io/en/latest/)，它结合了一个类似 Git 的提交和下载可引导文件系统树的模型，以及用于部署它们和管理引导加载程序配置的层。OSTree 由 rpm-ostree 使用，这是 Silverblue 使用的一个基于包/镜像的混合系统。它原子化地复制了一个基础操作系统，并允许用户在需要时在基础操作系统之上“层叠”传统的 RPM。

### 为何使用 Silverblue？

因为它可以让你专注于你的工作，而不是你正在运行的操作系统。因为系统的更新是原子式的，所以它更稳健。你唯一需要做的事情就是重新启动到新的镜像中。此外，如果当前启动的镜像有什么问题，你可以很容易地重启/回滚到之前可以工作的镜像，如果有的话。如果没有，你可以使用 `ostree` 命令下载并启动过去生成的任何其他镜像。

另一个好处是可以在不同的分支（或者用旧的语境说就是不同的 Fedora 风味版本）之间轻松切换。你可以轻松地尝试 [Rawhide](https://fedoraproject.org/wiki/Releases/Rawhide) 或 [updates-testing](https://fedoraproject.org/wiki/QA:Updates_Testing) 分支，然后返回到包含当前稳定版本的分支。另外，如果你想尝试一些新奇的东西，也可以考虑试试 Silverblue。

### 不可变的操作系统有什么好处？

其中一个主要的好处是安全。基础操作系统是以只读的形式挂载的，因此不能被恶意软件修改。唯一可以改变系统的方法是通过 `rpm-ostree` 实用程序。

另一个好处是健壮性。普通用户几乎不可能在不小心或无意中删除了一些系统库后，导致操作系统回到不启动或无法正常工作的状态。试着想想你过去的这些经历，就可以明白 Silverblue 可以如何帮助你。

### 如何在 Silverblue 中管理应用程序和包？

对于图形化用户界面的应用程序，建议使用 [Flatpak](https://flatpak.org/) —— 如果应用程序是以 Flatpak 的形式提供的话。用户可以选择来自 Fedora 的 Flatpak，和从 Fedora 包及 Fedora 自己的基础架构中构建的 Flatpak，或者是目前有更广泛的交付品的 Flathub。用户可以通过已经支持 Fedora Silverblue 的 GNOME “软件”轻松安装它们。

用户首先发现的一件事就是操作系统中没有预装 `dnf`。主要原因是它不能在 Silverblue 上工作 —— 它的部分功能被 `rpm-ostree` 命令所取代。用户可以通过使用 `rpm-ostree install PACKAGE` 来层叠传统的软件包。但只有在没有其他方法的情况下，才应该使用这种方式。这是因为从存储库中提取新的系统镜像时，每次更改系统镜像时都必须重新构建系统镜像，以容纳层叠的包或从基础操作系统中删除及替换为其他版本的包。

Fedora Silverblue 自带的默认 GUI 应用程序集是基础操作系统的一部分。团队正在努力将它们移植到 Flatpak 上，这样它们就可以通过这种方式分发。其中一个好处是，基础操作系统将变得更小，更容易维护和测试，用户可以更容易修改他们的默认安装环境。如果你想看一下它是怎么做的，或者有什么帮助，可以看看官方的[文档](https://docs.fedoraproject.org/en-US/flatpak/tutorial/)。

### 什么是 Toolbox？

[Toolbox](https://github.com/debarshiray/toolbox) 是一个让普通用户可以轻松使用容器的项目。它通过使用 podman 的无 root 容器环境来实现。Toolbox 可以让你在常规的 Fedora 环境中轻松、快速地创建一个容器，你可以在这个容器上折腾或开发，而与你的操作系统分离。

### Silverblue 有路线图吗？

形式上没有，因为我们正在关注在测试过程中发现的问题和社区的反馈。我们目前正在使用 Fedora 的 [Taiga](https://teams.fedoraproject.org/project/silverblue/) 来进行规划。

### Silverblue 的发布周期是多少？

它和普通的 Fedora Workstation 是一样的。每 6 个月发布一次新版本，支持期为 13 个月。团队计划每两周（或更长时间）发布一次更新，而不是像现在这样每天发布一次。这样一来，更新可以在发送给其他用户之前，由 QA 和社区志愿者进行更彻底的测试。

### 不可变操作系统的未来前景如何？

从我们的角度来看，桌面的未来会走向到不可变的操作系统。这对用户来说是最安全的，Android、ChromeOS、ChromeOS、最近的 macOS Catalina 全都在底层采用了这种方式。而对于 Linux 桌面来说，一些第三方软件期望写到操作系统的问题还是存在的。HP 打印机驱动程序就是一个很好的例子。

另一个问题是系统中的部分软件如何分发和安装。字体就是一个很好的例子。目前在 Fedora 中，它们是以 RPM 包的形式分发的。如果你想使用它们，你必须层叠它们，然后重新启动到新创建的包含它们的镜像中。

### 标准版 Workstation 的前景如何？

Silverblue 有可能会取代普通的 Workstation 版本。但 Silverblue 要提供与 Workstation 版本相同的功能和用户体验还有很长的路要走。在此期间，这两款桌面产品将同时推出。

### Atomic Workstation 或 Fedora CoreOS 与这些有什么关系？

Atomic Workstation 是在更名为 Fedora Silverblue 之前的项目名称。

Fedora CoreOS 是一个不同但相似的项目。它与 Silverblue 共享一些基本技术，如 `rpm-ostree`、`toolbox` 等。尽管如此，CoreOS 是一个更简约、专注于容器、自动更新的操作系统。

---

via: <https://fedoramagazine.org/what-is-silverblue/>

作者：[Tomáš Popela](https://fedoramagazine.org/author/tpopela/) 选题：[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/) 荣誉推出


Bodhi Linux 5.1 一览: 略有不同的轻量化 Linux

Summary: Bodhi Linux 是一个基于 Ubuntu 的轻量级 Linux 发行版。与其他大多数发行版不同，Bodhi 使用自己的 Moksha 桌面，并专注于为你提供一个可以在旧计算机上运行的最简设置。

# Bodhi Linux 5.1 一览: 略有不同的轻量化 Linux

Bodhi Linux 是一个基于 Ubuntu 的[轻量级 Linux 发行版](https://itsfoss.com/lightweight-linux-beginners/)。与其他大多数发行版不同，Bodhi 使用自己的 Moksha 桌面，并专注于为你提供一个可以在旧计算机上运行的最简设置。

### 什么是 Bodhi Linux?

[Bodhi Linux](https://www.bodhilinux.com/) 最早于 2011 年推出。它以“[简约、高效和用户自定义](https://www.bodhilinux.com/w/wiki/)”为设计理念。开发人员旨在提供一个“[实用但不臃肿的系统](https://www.bodhilinux.com/w/what-is-bodhi-linux/)”。因此，它使用轻量级的 Moksha 桌面，只预装了基本的应用程序。这一做法是为了给用户一个稳定的平台来构建他们想要的系统。它基于最新版的 Ubuntu 长期支持版本。

### Moksha 桌面

起初 Bodhi 是装载着 [Enlightenment 桌面环境](https://www.enlightenment.org/start)的。Bodhi Linux 一直被认为是“Enlightenment 系的” Linux 发行版。事实上，“Bodhi”（菩提）这个词是基于梵文的“<ruby> 开悟 <rt>  enlightenment </rt></ruby>”。

然而，当 Enlightenment 18 版本发布以后，这一切都改变了。该版本是如此的糟糕，以至于它并没有集成到 Bodhi 中。Enlightenment 19 发布后修复了一些问题，但仍然存在一些不足。

在尝试与 Enlightenment 开发团队合作却毫无进展之后，Bodhi 开发者在 2015 年[复刻](https://www.bodhilinux.com/2015/04/28/introducing-the-moksha-desktop/)了 Enlightenment 17。新的桌面环境被命名为 [Moksha](https://www.bodhilinux.com/moksha-desktop/)，它是基于梵文单词“解脱、解放或释放”。你可以在 [GitHub](https://github.com/JeffHoogland/moksha) 上找到它的代码。

### 5.1.0 有什么新特性？

[Bodhi 5.1.0](https://www.bodhilinux.com/2020/03/25/bodhi-linux-5-1-0-released/) 是这两年内发布的第一个版本，也是基于 Ubuntu 18.04 的第二个版本。除了更新包，它还有新的默认图标和主题。该版本对默认应用程序做了几处更改。预装版 Leafpad 取代了 epad 并且 [GNOME Web](https://wiki.gnome.org/Apps/Web/)（也被称为 Epiphany）代替了 [Midori](https://en.wikipedia.org/wiki/Midori_(web_browser)。删除了 eepDater 系统更新器。

目前有[四个不同的版本](https://www.bodhilinux.com/w/selecting-the-correct-iso-image/)的 Bodhi5.1.0 可以[下载](https://www.bodhilinux.com/download/): <ruby> 标准版 <rt>  Standard </rt></ruby>、<ruby> 硬件支持版 <rt>  Hwe </rt></ruby>、<ruby> 兼容版 <rt>  Legacy </rt></ruby> 和<ruby> 软件包版 <rt>  AppPack </rt></ruby>。

* 标准适用于过去十年内电脑配置。它不推送内核更新。
* 硬件支持版是 Bodhi 家族的新成员，其设计用来包括对更新的硬件的支持，并会接收到内核更新。5.1 版本的使用的是 5.3.0-42 内核。
* 兼容版是仅有的 32 位版本。它使用“较旧的 4.9.0-6-686 Linux 内核，该内核针对旧的（15 年以上）硬件进行了优化。这个内核也不包括许多老系统不支持的 PAE 扩展。”
* 软件包版是为那些想要一个开箱即用的全载系统的人准备的，并预装了许多应用程序。

### Bodhi Linux 的系统要求

最低系统要求：

* 500 MHz 处理器
* 256 MB 内存
* 5 GB 的硬盘存储空间

推荐系统要求：

* 1.0 GHz 处理器
* 512 MB 内存
* 10 GB 的硬盘存储空间

### 体验 Bodhi Linux

由于它是基于 Ubuntu 的，所以安装 Bodhi 非常简单。当我登录到 Bodhi 后，新的主题和图标集让我大吃一惊。上次我安装 Bodhi（包括几个月前的 5.0）时，我认为它需要换一个新的外观。之前的主题并没有什么问题，但看起来像是二十一世纪初的东西。新的主题使它看起来更具现代感。

我也很高兴看到 Midori 浏览器被 GNOME Web 所取代。我不是 [Midori 浏览器](https://itsfoss.com/midori-browser/)的粉丝。对我来说，它总是显得功能太少了。（不过，随着 [Midori Next](https://www.midori-browser.org/2020/01/15/midori-next-come-on-yarovi-we-can/) 的推出，这种情况可能会改变。）GNOME Web 更像是我需要的网页浏览器。最重要的是它带有 Firefox Sync，这样我就可以同步我所有的书签和密码了。

与许多 Linux 发行版不同，Bodhi 并没有一个独立的软件中心。相反，如果你点击 AppCenter 图标，它会打开浏览器，并导航到 Bodhi 网站的软件中心页面 [AppCenter 页面](https://www.bodhilinux.com/a/)。这里的应用程序是按类别排序的，它们中的大多数是[轻量级应用程序](https://itsfoss.com/lightweight-alternative-applications-ubuntu/)。

如果你点击其中一个页面并点击“安装”，（在你输入密码之后）Bodhi 就会安装它。这是通过一个名为 [apturl](https://wiki.ubuntu.com/AptUrl) 的小程序实现的，它是“是一个非常简单的从网页浏览器安装软件包的方法”。它非常灵巧，我希望更多基于 Ubuntu 的发行版使用它。

总的来说，我喜欢 Moksha 桌面。它坚持我们几十年来看到的桌面风格（这是我最喜欢的）。它不会影响你，却很容易改变和定制。我唯一怀念的是，当我按下超级键时，应用程序菜单不打开。但我猜你不可能拥有生活中的一切。

### 结语

我对最近发布的 Bodhi Linux 感到十分惊喜。过去，我经常折腾它。并且我一直很喜欢它，但最近的这个版本是迄今为止最好的。在某种程度上，他们打破了 Bodhi 只适合老系统的想法，加入了对较新内核的支持。

如果你想换换个环境，同时又想在 Ubuntu 的世界里寻找新的风景，那就试试[Bodhi Linux](https://www.bodhilinux.com/)吧。

你用过 Bodhi Linux 吗？你最喜欢的基于 Ubuntu 的发行版是什么？请在下面的评论中告诉我们。

---

via: <https://itsfoss.com/bodhi-linux-review/>

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

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


使用 GTWS 管理复杂的 Git 工作空间

# 使用 GTWS 管理复杂的 Git 工作空间

>
> GTWS 是一系列脚本，它使我们在开发环境中管理不同的项目和项目的各个版本变得很容易。
>
>
>

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

[Great Teeming Workspaces](https://github.com/dang/gtws)（GTWS）是一个 Git 的复杂工作空间管理工具包，它使我们在开发环境中管理不同的项目和项目的各个版本变得很容易。

有点像 Python 的 [venv](https://docs.python.org/3/library/venv.html)，但不是为 Python 语言准备的。GTWS 用来管理多个项目的多个版本的工作空间。你可以很容易地创建、更新、进入和离开工作空间，每个项目或版本的组合（最多）有一个本地的 origin，用来与 upstream 同步 — 其余的所有工作空间都从本地的 origin 更新。

### 部署

```
${GTWS_ORIGIN}/<project>/<repo>[/<version>]
${GTWS_BASE_SRCDIR}/<project>/<version>/<workspacename>/{<repo>[,<repo>...]}
```

源代码目录的每一级（包括全局的家目录）可以包含一个 `.gtwsrc` 文件，这个文件中维护与当前级相关的设置和 bash 代码。每一级的配置会覆盖上一级。

### 安装

用下面的命令检出 GTWS：

```
git clone https://github.com/dang/gtws.git
```

配置你的 `${HOME}/.gtwsrc`。它应该包含 `GTWS_ORIGIN`，也可以再包含 `GTWS_SETPROMPT`。

把仓库目录加到环境变量中：

```
export PATH="${PATH}:/path/to/gtws
```

### 配置

通过级联 `.gtwsrc` 文件来进行配置。它从根目录向下遍历，会执行在每级目录中找到的 `.gtwsrc` 文件。下级目录的文件会覆盖上一级。

在你最上层的文件 `~/.gtws/.gtwsrc` 中进行如下设置：

* `GTWS_BASE_SRCDIR`：所有项目源文件目录树的基目录。默认为 `$HOME/src`。
* `GTWS_ORIGIN`： 指定 origin git 目录树的路径。默认为 `$HOME/origin`。
* `GTWS_SETPROMPT`： 可选配置。如果配置了这个参数，shell 提示符会有工作空间的名字。
* `GTWS_DEFAULT_PROJECT`： 不指定项目或项目未知时默认的项目名。如果不指定，使用命令行时必须指明项目。
* `GTWS_DEFAULT_PROJECT_VERSION`： 检出的默认版本。默认为 `master`。

在每个项目的根目录进行以下设置：

* `GTWS_PROJECT`： 项目的名字（和基目录）。
* `gtws_project_clone`： 这个函数用于克隆一个项目的指定版本。如果未定义，它会假定项目的 origin 对每一个版本都有一个单独的目录，这样会导致克隆一堆 Git 仓库。
* `gtws_project_setup`： 在克隆完所有的仓库后，可以选择是否调用这个函数，调用后可以对项目进行必要的配置，如在 IDE 中配置工作空间。

在项目版本级进行以下设置：

* `GTWS_PROJECT_VERSION：` 项目的版本。用于正确地从 origin 拉取代码。类似 Git 中的分支名字。

下面这些参数可以在目录树的任意地方进行配置，如果能生效，它们可以被重写多次：

* `GTWS_PATH_EXTRA`： 这些是工作空间中加到路径后的额外的路径元素。
* `GTWS_FILES_EXTRA`： 这些是不在版本控制内，但应该在工作空间中被检出的额外的文件。这些文件包括 `.git/info/exclude`，每个文件都与仓库的基目录相关联。

### origin 目录

`GTWS_ORIGIN` （大部分脚本中）指向拉取和推送的原始 Git 检出目录。

`${GTWS_ORIGIN}` 部署：

* `/<project>`
	+ 这是一个项目的仓库的基目录。
	+ 如果指定了 `gtws_project_clone`，你可以配置任意的部署路径。
	+ 如果没有指定 `gtws_project_clone`，这个路径下必须有个名为 `git` 的子目录，且 `git` 目录下有一系列用来克隆的裸 Git 仓库。

### 工作流示例

假设你有一个项目名为 `Foo`，它的 upstream 为 `github.com/foo/foo.git`。这个仓库有个名为 `bar` 的子模块，它的 upstream 是 `github.com/bar/bar.git`。Foo 项目在 master 分支开发，使用稳定版本的分支。

为了能在 Foo 中使用 GTWS，你首先要配置目录结构。本例中假设你使用默认的目录结构。

* 配置你最上层的 `.gtwsrc`：
	+ `cp ${GTWS_LOC}/examples/gtwsrc.top ~/.gtwsrc`
	+ 根据需要修改 `~/.gtwsrc`。
* 创建顶级目录：
	+ `mkdir -p ~/origin ~/src`
* 创建并配置项目目录：

	+ `mkdir -p ~/src/foo`

	`cp ${GTWS_LOC}/examples/gtwsrc.project ~/src/foo/.gtwsrc`
	+ 根据需要修改 `~/src/foo/.gtwsrc`。
* 创建并配置 master 版本目录：

	+ `mkdir -p ~/src/foo/master`

	`cp ${GTWS_LOC}/examples/gtwsrc.version ~/src/foo/master/.gtwsrc`
	+ 根据需要修改 `~/src/foo/master/.gtwsrc`。
* 进入版本目录并创建一个临时工作空间来配置镜像：

	+ `mkdir -p ~/src/foo/master/tmp`

	`cd ~/src/foo/master/tmp`

	`git clone --recurse-submodules git://github.com/foo/foo.git`

	`cd foo`

	`gtws-mirror -o ~/origin -p foo`（译注：这个地方原文有误，不加 `-s` 参数会报错）
	+ 上面命令会创建 `~/origin/foo/git/foo.git` 和 `~/origin/foo/submodule/bar.git`。
	+ 以后的克隆操作会从这些 origin 而不是 upstream 克隆。
	+ 现在可以删除工作空间了。

到现在为止，Foo 的 master 分支的工作可以结束了。假设你现在想修复一个 bug，名为 `bug1234`。你可以脱离你当前的工作空间为修复这个 bug 单独创建一个工作空间，之后在新创建的工作空间中开发。

* 进入版本目录，创建一个新的工作空间：

	+ `cd ~/src/foo/master`

	`mkws bug1234`
	+ 上面的命令创建了 `bug1234/`，在这个目录下检出了 Foo（和它的子模块 `bar`），并创建了 `build/foo` 来构建它。
* 有两种方式进入工作空间：

	+ `cd ~/src/foo/master/bug1234`

	`startws`

	或者

	`cd ~/src/foo/master/`

	`startws bug1234`
	+ 上面的命令在 `bug1234` 工作空间中开启了一个子 shell。这个 shell 有 GTWS 的环境和你在各级 `.gtwsrc` 文件中设置的环境。它也把你工作空间的基目录加入到了 CD，因此你可以从 base 路径 `cd` 到相关的目录中。
	+ 现在你可以修复 `bug1234` 了，构建、测试、提交你的修改。当你可以把代码推送到 upstream 时，执行下面的命令：

	`cd foo`

	`wspush`
	+ `wspush` 会把代码推送到与你工作空间相关的分支 — 先推送到本地的 origin，再推送到 upstream。
	+ 当 upstream 有修改时，你可以用下面的命令同步到本地：

	`git sync`
	+ 上面的命令调用了 GTWS 的 `git-sync` 脚本，会从本地 origin 更新代码。使用下面的命令来更新本地的 origin：

	`git sync -o`
	+ 上面的命令会更新你本地的 origin 和子模块的镜像，然后用那些命令来更新你的检出仓库的代码。`git-sync` 也有一些其他的很好的工鞥。
	+ 当要结束工作空间中的工作时，直接退出 shell：

	`exit`
	+ 你可以在任何时间重复进入工作空间，也可以在同一时间在相同的工作空间中开多个 shell。
* 当你不需要某个工作空间时，你可以使用 `rmws` 来删除它，或者直接删除它的目录树。
* 还有一个脚本 `tmws` 使用 tmux 进入工作空间，能创建一系列的窗口/窗格，这完美契合我的工作流。你可以根据你自己的需求来修改它。

---

via: <https://opensource.com/article/20/2/git-great-teeming-workspaces>

作者：[Daniel Gryniewicz](https://opensource.com/users/dang) 选题：[lujun9972](https://github.com/lujun9972) 译者：[lxbwolf](https://github.com/lxbwolf) 校对：[wxy](https://github.com/wxy)

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


开源的广告拦截器不但节能，而且能拯救生命！

Summary: 三个开源广告拦截器与“无广告拦截器”对照组进行了测试。

那打广告的人失去了收入，又会造成多少损失呢？

三个开源广告拦截器与“无广告拦截器”对照组进行了测试。

# 开源的广告拦截器不但节能，而且能拯救生命！

>
> 三个开源广告拦截器与“无广告拦截器”对照组进行了测试。
>
>
>

一项旨在调查自由开源的广告拦截器节能的情况的[研究](https://www.mdpi.com/2227-7080/8/2/18)，意外地发现了互联网广告正在浪费你大量的时间。

更重要的是，研究结果表明了你可以挽救回这些失去的时间。这项研究评估发现，使用 [uBlock Origin](https://github.com/gorhill/uBlock)（一个开源免费的广告拦截器）的情况下平均每个网民一年可以节约超过 100 个小时的时间。uBlock Origin 是测试中最有效的广告拦截器，不过其他的广告拦截器也为网民节省了时间、能源以及金钱。

在研究结果中，[AdBlock+](https://adblockplus.org/) 减少了 11% 的页面加载时间，[Privacy Badger](https://privacybadger.org/) 减少了 22%，[uBlock Origin](https://github.com/gorhill/uBlock) 减少了 28%。对于单独一个页面来说这个时间並不算多，但是网民们一半以上的浏览时间都是在网站间快速跳转，通常在一个页面停留少于 15 秒。鉴于这种情况，加载广告的额外时间加起来就很多了。

发布于 Technologies 杂志上的《[用开源的广告拦截器节能](https://www.academia.edu/42434401/Energy_Conservation_with_Open_Source_Ad_Blockers)》一文最初旨在解决日益增长的能源消耗问题。随着全球网民每日上网时间超过 6.5 小时，与互联网相关的用电量正在快速地增加。以美国人为例，自 2000 年他们的上网时间已经增加了一倍，几乎达到每周 24 小时。开源广告拦截器通过消灭上网和观看视频时产生的广告，潜在地减少了时间，从而减少用电。

在研究过程中，对三个开源广告拦截器与“无广告拦截器”对照组进行了测试。研究人员记录了浏览全球访问量最大的网站的页面加载时间，其中包括网络搜索（谷歌、雅虎、必应）、信息（Weather.com、维基百科）和新闻网站（CNN、福克斯、纽约时报）。除此之外，研究还分析了观看流行与非流行视频内容时广告所花费的时间。这部分研究由于缺乏 Youtube 上流行和非流行内容观看比例的数据而非常具有挑战性。每个视频浪费在广告观看上的时间可以从 0.06% 到惊人的 21% 不等。而且，这还只是浏览器上记录的加载广告而失去的时间。

总的来说，研究结果表明加载广告所浪费的能源并不是是小事。由于运行电脑所使用的大量电力仍然来自于煤炭，而煤炭会造成空气污染和过早死亡，因此该研究分析了广告拦截器拯救美国人生命的潜力。（LCTT 译注：由于这项研究是美国人完成的，所以这里仅提及了美国人，但是同理可推至全球。）结果是令人震惊的：如果美国人都使用开源广告拦截器，每年节约的能源将会拯救超过 36 个美国人的生命。

电能即金钱，所以削减广告也可以为消费者节约钱财。在美国，如果所有的网民都在他们的电脑上开启 [Privacy Badger](https://privacybadger.org/)，美国人每年可以节约超过 9100 万美元。在全球范围内，调查研究的结果则更令人吃惊。uBlock Origin 每年可以为全球消费者节约 18 亿美元。

这项研究始于人们因为新冠肺炎大流行而被迫居家之前，因此所有的数据都可以被认为是保守的估算。整体来说，研究发现了开源广告拦截器是一项潜在的节能技术。

虽然自由开源的广告拦截器可以节约能源，对自然环境也有好处，但你可能主要是为了拦截恼人的广告和节省自己的时间而使用它们。

---

via: <https://opensource.com/article/20/4/ad-blockers>

作者：[Joshua Pearce](https://opensource.com/users/jmpearce) 选题：[lujun9972](https://github.com/lujun9972) 译者：[CrazyShipOne](https://github.com/CrazyShipOne) 校对：[wxy](https://github.com/wxy)

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


关于 Ubuntu 20.04 你应该了解的事情

Summary: Ubuntu 20.04 已经发布，你可能对升级、安装等有一些问题和疑问。

三天前就试用了20.04的server版，说实话，没有感受到有很大差异

都用服务器版本了，能有好大变化啊<br />
最多加几个高亮

Ubuntu 20.04 已经发布，你可能对升级、安装等有一些问题和疑问。

# 关于 Ubuntu 20.04 你应该了解的事情

[Ubuntu 20.04](/article-12142-1.html) 已经发布，你可能对升级、安装等有一些问题和疑问。

我在各种社交媒体渠道上主持了一些问答环节，回答像你这样的读者的疑虑。我将列出这些关于 Ubuntu 20.04 的常见问题，并给出答案。我希望它能帮助你消除你的疑虑。如果你仍有问题，请随时在下面的评论栏提问。

### Ubuntu 20.04：已回复的问题

为了澄清一下，这里的一些答案也许受我个人意见的影响。如果你是一个有经验的 Ubuntu 用户，有些问题听起来可能有点愚蠢，但它对 Ubuntu 新用户不是这样。

#### Ubuntu 20.04 何时发布？

Ubuntu 20.04 LTS 于 2020 年 4 月 23 日发布。所有变种，如 Kubuntu、Lubuntu,、Xubuntu、Budgie、MATE 都将和 20.04 同一天发布。

#### Ubuntu 20.04 的系统要求是什么？

对于默认的 GNOME 版本，应至少具有 4GB 的内存、2GHz 双核处理器和至少 25GB 的磁盘空间。

其他 [Ubuntu 变种](https://itsfoss.com/which-ubuntu-install/)可能有不同的系统要求。

#### 我可以在 32 位系统上使用 Ubuntu 20.04 吗？

完全不行。你不能在 32 位系统上使用 Ubuntu 20.04。即使你使用的是 32 位 Ubuntu 18.04，也不能升级到 Ubuntu 20.04。32 位的系统 ISO 是以前用的。

#### 我可以在 Ubuntu 20.04 上使用 Wine 吗？

是的，你仍然可以在 Ubuntu 20.04 上使用 Wine，因为仍然用于 Wine 和 [Steam Play](https://itsfoss.com/steam-play/) 软件包所需的 32 位库。

#### 我需要购买 Ubuntu 20.04 或许可证？

不，Ubuntu 完全可以免费使用。你不必像在 Windows 中那样购买许可证密钥或激活 Ubuntu。

Ubuntu 的下载页会请求你捐赠一些资金，如果你想为开发这个强大的操作系统捐钱，由你自己决定。

#### GNOME 版本是什么？

Ubuntu 20.04 有 GNOME 3.36。

#### Ubuntu 20.04 的性能是否优于 Ubuntu 18.04？

是的，在几个方面。Ubuntu 20.04 系统速度更快，甚至超快。我在下面这个视频的 4:40 处展示了性能对比。

在 GNOME 3.36 中，滚动、窗口动画和其他 UI 元素更加流畅，提供了更流畅的体验。

#### Ubuntu 20.04 将支持多长时间？

它是一个长期支持（LTS）版本，与任何 LTS 版本一样，它将在五年内得到支持。这意味着 Ubuntu 20.04 将在 2025 年 4 月之前获得安全和维护更新。

#### 升级到 Ubuntu 20.04 时，是否会丢失数据？

你可以从 Ubuntu 19.10 或 Ubuntu 18.04 升级到 Ubuntu 20.04。你无需创建 live USB 并从中安装。你所需要的是一个良好的互联网连接，来下载约 1.5GB 的数据。

从现有系统升级不会破坏你的文件。你应该会留有所有文件，并且大多数现有软件应具有相同的版本或升级后的版本。

如果你使用了某些第三方工具或[其他 PPA](https://itsfoss.com/ppa-guide/)，升级过程将禁用它们。如果 Ubuntu 20.04 可以使用这些其他存储库，那么可以再次启用它们。

升级大约需要一个小时，重启后，你将登录到新版本。

虽然你的数据不会被触碰，并且不会丢失系统文件和配置，但最好在外部设备备份重要数据。

#### 何时可以升级到 Ubuntu 20.04？

如果你正在使用 Ubuntu 19.10 并有正确的更新设置（如前面部分所述），那么应在发布后的几天内通知你升级到 Ubuntu 20.04。

对于 Ubuntu 18.04 用户，可能需要几周时间才能正式通知他们 Ubuntu 20.04 可用。可能，你可能会在第一个点版本 Ubuntu 20.04.1 后获得提示。

#### 如果我升级到 Ubuntu 20.04，我可以降级到 19.10 或 18.04 吗？

不行。虽然升级到新版本很容易，但无法选择降级。如果你想回到 Ubuntu 18.04，你需要重新[安装 Ubuntu 18.04](https://itsfoss.com/install-ubuntu/)。

#### 我使用的是 Ubuntu 18.04 LTS。我应该升级到 Ubuntu 20.04 LTS 吗？

这取决于你。如果你对 Ubuntu 20.04 中的新功能印象深刻，并希望上手尝试，那么你应该升级。

如果你想要一个更稳定的系统，我建议等待第一个点版本 Ubuntu 20.04.1，新版本会有 bug 修复。20.04.1 通常在 Ubuntu 20.04 发布后大约两个月到来。

无论是那种情况，我都建议你或早或晚升级到 Ubuntu 20.04。Ubuntu 20.04 具有更新的内核、性能改进，尤其是仓库中有更新版本的软件。

在外部磁盘上进行备份，并且有良好的互联网连接，升级不应成为问题。

#### 我应该重新安装 Ubuntu 20.04 还是从 18.04/19.10 升级到 Ubuntu？

如果你可以选择，请备份数据，并重新安装 Ubuntu 20.04。

从现有版本升级到 20.04 是一个方便的选择。然而，在我看来，它仍然保留有一些旧版本的痕迹/包。全新安装更加干净。

#### 关于 Ubuntu 20.04 的任何其他问题？

如果你对 Ubuntu 20.04 有任何疑问，请随时在下面发表评论。如果你认为应该将其他信息添加到列表中，请让我知道。

---

via: <https://itsfoss.com/ubuntu-20-04-faq/>

作者：[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/) 荣誉推出


MystiQ：一个自由开源的音视频转换器

# MystiQ：一个自由开源的音视频转换器

>
> MystiQ 是一款全新的开源视频转换工具，适用于 Linux 和 Windows。它的底层使用 FFMPEG，并为你提供了一个基于 Qt 的整洁干净的图形界面。
>
>
>

### MystiQ，一个基于 QT 的 FFmpeg GUI 前端

音频/视频转换工具可为每位跨多个平台的计算机用户提供方便。

出于同样的原因，我想着重介绍 [MystiQ](https://mystiqapp.com/) 是个好主意，这是一个相对较新的视频/音频转换器工具，适用于 Linux 和 Windows。截至目前，它还不支持 macOS，但可能会在不久的将来支持。

MystiQ 是基于 [Qt 5 界面](https://www.qt.io/)的 [FFmpeg](https://www.ffmpeg.org/) 图形前端。现在，你可以随时[在 Linux 命令行中安装并使用 ffmpeg](https://itsfoss.com/ffmpeg/)，但这不是很舒服，是吗？这就是为什么 [Handbrake](https://itsfoss.com/handbrake/) 和 MystiQ 之类的工具可以使我们的生活更方便的原因。

由于 MystiQ 基于 FFmpeg，因此你可以将其用于一些基本的视频编辑，例如修剪、旋转等。

让我们来看看它的功能。

### MystiQ 视频转换器的功能

即使 MystiQ 目前还算是一个新事物，但它也包含了一组很好的基本功能。以下它提供的：

* 视频转换
* 音频转换（也可从视频中提取音频）
* 支持的格式：MP4、WEBM、MKV、MP3、MOV、OGG、WAV、ASF、FLV、3GP、M4A 等。
* 跨平台（Windows 和 Linux）
* 适用于 32 位和 64 位系统的安装包
* 能够调整音频质量（采样率、比特率等）进行转换
* 基本的视频编辑功能（剪辑视频、插入字幕、旋转视频、缩放视频等）
* 将彩色视频转换为黑白
* 有几个预设方案，可轻松转换视频以获得最佳质量或获得最佳压缩效果。

### 安装 MystiQ

你可能没有在软件中心中找到它，但将它安装在 Linux 发行版上非常容易。

它提供了 .AppImage 文件和 .deb / .rpm 文件（32 位和 64 位软件包）。如果你不清楚如何使用的话，可以阅读[如何使用 AppImage 文件](https://itsfoss.com/use-appimage-linux/)。

如果你想帮助他们测试软件进行改进，你还可以找到他们的 [GitHub 页面](https://github.com/swl-x/MystiQ/)，并查看源码或任何近期的预发布软件包。

你可以在其官方网站下载适用于 Linux 和 Windows 的安装程序文件。

* [下载 MystiQ](https://mystiqapp.com/)

### 总结

在本文中，我使用 [Pop!\_OS](https://system76.com/pop) 20.04 测试了 MytiQ 转换器，并且在转换视频和音频时没遇到任何问题。而且，对于像我这样的普通用户来说，它的转换速度足够快。

欢迎尝试一下，让我知道你对它的想法！另外，如果你在 Linux 上一直使用其他工具转换视频和音频，那它是什么？

---

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

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

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


DNF 和 Yum 的区别，为什么 Yum 会被 DNF 取代？

Summary: 由于 Yum 中许多长期存在的问题仍未得到解决，因此 Yum 包管理器已被 DNF 包管理器取代。

哦

匿名回复么

上面那个大图片不觉得碍事吗

知道了

可能人家觉得好看吧

但是，我 yum install DNF 从来就没有成功过

apt install dnf 试试

pacman大法好. doge.

来自111.60.22.178的 Firefox 91.0|GNU/Linux 用户

yum 已经变成 dnf 的别名了.<br />
使用 ls -l $(which yum) 命令可以看到 yum 是是个指向 dnf-3 的链接.

# DNF 和 Yum 的区别，为什么 Yum 会被 DNF 取代？

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

由于 Yum 中许多长期存在的问题仍未得到解决，因此 [Yum 包管理器](https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/)已被 [DNF 包管理器](https://www.2daygeek.com/linux-dnf-command-examples-manage-packages-fedora-centos-rhel-systems/)取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。

DNF 使用 `libsolv` 进行依赖解析，由 SUSE 开发和维护，旨在提高性能。

Yum 主要是用 Python 编写的，它有自己的应对依赖解析的方法。它的 API 没有完整的文档，它的扩展系统只允许 Python 插件。

Yum 是 RPM 的前端工具，它管理依赖关系和资源库，然后使用 RPM 来安装、下载和删除包。

为什么他们要建立一个新的工具，而不是修复现有的问题呢？

Ales Kozamblak 解释说，这个修复在技术上是不可行的，而且 Yum 团队还没有准备好立即接受修改。

另外，最大的挑战是，Yum 有 56000 行代码，但 DNF 只有 29000 行代码。

所以除了分叉，没有办法解决。

不过 Yum 的运行情况还算可以。

| 编号 | DNF（Dandified YUM） | YUM（Yellowdog Updater, Modified） |
| --- | --- | --- |
| 1 | DNF 使用 libsolv 来解析依赖关系，由 SUSE 开发和维护 | YUM 使用公开的 API 来解析依赖关系 |
| 2 | API 有完整的文档 | API 没有完整的文档 |
| 3 | 由 C、C++、Python 编写的 | 只用 Python 编写 |
| 4 | DNF 目前在 Fedora、RHEL 8、CentOS 8、OEL 8 和 Mageia 6/7 中使用 | YUM 目前在 RHEL 6/7、CentOS 6/7、OEL 6/7 中使用 |
| 5 | DNF 支持各种扩展 | Yum 只支持基于 Python 的扩展 |
| 6 | API 有良好的文档，因此很容易创建新的功能 | 因为 API 没有正确的文档化，所以创建新功能非常困难 |
| 7 | DNF 在同步存储库的元数据时，使用的内存较少 | 在同步存储库的元数据时，YUM 使用了过多的内存 |
| 8 | DNF 使用满足性算法来解决依赖关系解析（它是用字典的方法来存储和检索包和依赖信息） | 由于使用公开 API 的原因，Yum 依赖性解析变得迟钝 |
| 9 | 从内存使用量和版本库元数据的依赖性解析来看，性能都不错 | 总的来说，在很多因素的影响下，表现不佳 |
| 10 | DNF 更新：在 DNF 更新过程中，如果包中包含不相关的依赖，则不会更新 | YUM 将在没有验证的情况下更新软件包 |
| 11 | 如果启用的存储库没有响应，DNF 将跳过它，并继续使用可用的存储库处理事务 | 如果有存储库不可用，YUM 会立即停止 |
| 12 | `dnf update` 和 `dnf upgrade` 是等价的 | 在 Yum 中则不同 |
| 13 | 安装包的依赖关系不更新 | Yum 为这种行为提供了一个选项 |
| 14 | 清理删除的包：当删除一个包时，DNF 会自动删除任何没有被用户明确安装的依赖包 | Yum 不会这样做 |
| 15 | 存储库缓存更新计划：默认情况下，系统启动后 10 分钟后，DNF 每小时会对配置的存储库检查一次更新。这个动作由系统定时器单元 `dnf-makecache.timer` 控制 | Yum 也会这样做 |
| 16 | 内核包不受 DNF 保护。不像 Yum，你可以删除所有的内核包，包括运行中的内核包 | Yum 不允许你删除运行中的内核 |
| 17 | libsolv：用于解包和读取资源库。hawkey: 为 libsolv 提供简化的 C 和 Python API 库。librepo: 提供 C 和 Python（类似 libcURL）API 的库，用于下载 Linux 存储库元数据和软件包。libcomps: 是 yum.comps 库的替代品。它是用纯 C 语言编写的库，有 Python 2 和 Python 3 的绑定。 | Yum 不使用单独的库来执行这些功能 |
| 18 | DNF 包含 29000 行代码 | Yum 包含 56000 行代码 |
| 19 | DNF 由 Ales Kozumplik 开发 | YUM 由 Zdenek Pavlas、Jan Silhan 和团队成员开发 |

---

via: <https://www.2daygeek.com/comparison-difference-between-dnf-vs-yum/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[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/) 荣誉推出


Fedora 32 正式发布！

# Fedora 32 正式发布！

<img src="content_image/album_202004_29_115643ltjbzvnfyw5be5ee.png" alt="" title="">

它来了! 我们很荣幸地宣布 Fedora 32 的发布。感谢成千上万的 Fedora 社区成员和贡献者的辛勤工作，我们又一次准时发布了。

如果你只想马上就能拿到它，请马上访问 <https://getfedora.org/>。更多详情，请继续阅读本文。

### Fedora 的全部变种

Fedora Editions 是针对特定的“展示”用途输出的。

Fedora Workstation 专注于桌面系统。特别是，它面向的是那些希望获得“可以工作的” Linux 操作系统体验的软件开发者。这个版本采用了 [GNOME 3.36](https://www.gnome.org/news/2020/03/gnome-3-36-released/)，一如既往地有很多很棒的改进。我最喜欢的是新的锁屏！

Fedora Server 以一种易于部署的方式为系统管理员带来了新锐的开源服务器软件。对于边缘计算用例，[Fedora IoT](https://iot.fedoraproject.org/) 为 IoT 生态系统提供了坚实的基础。

Fedora CoreOS 是一个新兴的 Fedora Edition。它是一个自动更新的、最小化的操作系统，用于安全地大规模运行容器化工作负载。它提供了几个[更新流](https://docs.fedoraproject.org/en-US/fedora-coreos/update-streams/)，遵循大约每两周一次的自动更新。目前，next 流是基于 Fedora 32，后续还有 testing 流和 stable 流。你可以从[下载页面](https://getfedora.org/en/coreos/download?stream=next)中找到关于按 next 流发布的工件的信息，并在 [Fedora CoreOS 文档](https://docs.fedoraproject.org/en-US/fedora-coreos/getting-started/)中找到关于如何使用这些工件的信息。

当然，我们制作的不仅仅是 Editions。[Fedora Spins](https://spins.fedoraproject.org/) 和[实验室](https://labs.fedoraproject.org/)针对的是不同的受众和用例，包括[Fedora 天文学实验室](https://labs.fedoraproject.org/en/astronomy/)，它为业余和专业的天文学家带来了完整的开源工具链，还有像 [KDE Plasma](https://spins.fedoraproject.org/en/kde/) 和 [Xfce](https://spins.fedoraproject.org/en/xfce/) 这样的桌面环境。Fedora 32 中新增的 [计算神经科学实验室](https://labs.fedoraproject.org/en/comp-neuro) 是由我们的神经科学特别兴趣小组开发的，它可以实现计算神经科学。

还有，别忘了我们的备用架构，[ARM AArch64、Power 和 S390x](https://alt.fedoraproject.org/alt/)。特别值得一提的是，我们改进了对 Rockchip 系统级芯片的支持，包括 Rock960、RockPro64 和 Rock64。

### 一般性的改进

无论你使用 Fedora 的哪个变体，你都能获得最新的开源世界。遵循我们的“[First](https://docs.fedoraproject.org/en-US/project/#_first)”理念，我们更新了关键的编程语言和系统库包，包括 GCC 10、Ruby 2.7 和 Python 3.8。当然，随着 Python 2 已经过了报废期，我们已经从 Fedora 中删除了大部分 Python 2 包，但我们为仍然需要它的开发者和用户提供了一个遗留的 python27 包。在 Fedora Workstation 中，我们默认启用了 EarlyOOM 服务，以改善低内存情况下的用户体验。

我们非常期待你能尝试一下新版本的使用体验! 现在就去 <https://getfedora.org/> 下载它。或者如果你已经在运行 Fedora 操作系统，请按照简单的[升级说明](https://docs.fedoraproject.org/en-US/quick-docs/upgrading/)进行升级。

### 万一出现问题……

如果你遇到问题，请查看[Fedora 32 常见错误](https://fedoraproject.org/wiki/Common_F32_bugs)页面，如果有问题，请访问我们的 [Askedora](http://ask.fedoraproject.org) 用户支持平台。

### 谢谢大家

感谢在这个发布周期中为 Fedora 项目做出贡献的成千上万的人，特别是感谢那些在大流行期间为又一次准时发布而付出额外努力的人。Fedora 是一个社区，很高兴看到我们彼此之间的支持。我邀请大家参加 4 月28-29 日的[红帽峰会虚拟体验](https://www.redhat.com/en/summit)，了解更多关于 Fedora 和其他社区的信息。

---

via: <https://fedoramagazine.org/announcing-fedora-32/>

作者：[Matthew Miller](https://fedoramagazine.org/author/mattdm/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


如何在 Linux 上检查网卡信息

Summary: 有时出于各种原因，你可能需要配置额外的网络接口。

有时出于各种原因，你可能需要配置额外的网络接口。

# 如何在 Linux 上检查网卡信息

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

默认情况下，在设置服务器时你会配置主网络接口。这是每个人所做的构建工作的一部分。有时出于各种原因，你可能需要配置额外的网络接口。

这可以是通过网络<ruby> 绑定 <rt>  bonding </rt> <ruby>  /  <ruby>   协作   <rt>    teaming   </rt>  </ruby>  来提供高可用性，也可以是用于应用需求或备份的单独接口。 </ruby></ruby>

为此，你需要知道计算机有多少接口以及它们的速度来配置它们。

有许多命令可检查可用的网络接口，但是我们仅使用 `ip` 命令。以后，我们会另外写一篇文章来全部介绍这些工具。

在本教程中，我们将向你显示可用网络网卡（NIC）信息，例如接口名称、关联的 IP 地址、MAC 地址和接口速度。

### 什么是 ip 命令

[ip 命令](https://www.2daygeek.com/ip-command-configure-network-interface-usage-linux/) 类似于 `ifconfig`, 用于分配静态 IP 地址、路由和默认网关等。

```
# ip a

1: lo: mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fa:16:3e:a0:7d:5a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.101/24 brd 192.168.1.101 scope global eth0
    inet6 fe80::f816:3eff:fea0:7d5a/64 scope link
       valid_lft forever preferred_lft forever
```

### 什么是 ethtool 命令

`ethtool` 用于查询或控制网络驱动或硬件设置。

```
# ethtool eth0
```

### 1）如何在 Linux 上使用 ip 命令检查可用的网络接口

在不带任何参数的情况下运行 `ip` 命令时，它会提供大量信息，但是，如果仅需要可用的网络接口，请使用以下定制的 `ip` 命令。

```
# ip a |awk '/state UP/{print $2}'

eth0:
eth1:
```

### 2）如何在 Linux 上使用 ip 命令检查网络接口的 IP 地址

如果只想查看 IP 地址分配给了哪个接口，请使用以下定制的 `ip` 命令。

```
# ip -o a show | cut -d ' ' -f 2,7
或
ip a |grep -i inet | awk '{print $7, $2}'

lo 127.0.0.1/8
192.168.1.101/24
192.168.1.102/24
```

### 3）如何在 Linux 上使用 ip 命令检查网卡的 MAC 地址

如果只想查看网络接口名称和相应的 MAC 地址，请使用以下格式。

检查特定的网络接口的 MAC 地址：

```
# ip link show dev eth0 |awk '/link/{print $2}'
00:00:00:55:43:5c
```

检查所有网络接口的 MAC 地址，创建该脚本：

```
# vi /opt/scripts/mac-addresses.sh

#!/bin/sh
ip a |awk '/state UP/{print $2}' | sed 's/://' | while read output;
do
  echo $output:
  ethtool -P $output
done
```

运行该脚本获取多个网络接口的 MAC 地址：

```
# sh /opt/scripts/mac-addresses.sh

eth0:
Permanent address: 00:00:00:55:43:5c
eth1:
Permanent address: 00:00:00:55:43:5d
```

### 4）如何在 Linux 上使用 ethtool 命令检查网络接口速度

如果要在 Linux 上检查网络接口速度，请使用 `ethtool` 命令。

检查特定网络接口的速度：

```
# ethtool eth0 |grep "Speed:"

Speed: 10000Mb/s
```

检查所有网络接口速度，创建该脚本：

```
# vi /opt/scripts/port-speed.sh

#!/bin/sh
ip a |awk '/state UP/{print $2}' | sed 's/://' | while read output;
do
  echo $output:
  ethtool $output |grep "Speed:"
done
```

运行该脚本获取多个网络接口速度：

```
# sh /opt/scripts/port-speed.sh

eth0:
Speed: 10000Mb/s
eth1:
Speed: 10000Mb/s
```

### 5）验证网卡信息的 Shell 脚本

通过此 shell 脚本你可以收集上述所有信息，例如网络接口名称、网络接口的 IP 地址，网络接口的 MAC 地址以及网络接口的速度。创建该脚本：

```
# vi /opt/scripts/nic-info.sh

#!/bin/sh
hostname
echo "-------------"
for iname in $(ip a |awk '/state UP/{print $2}')
do
  echo "$iname"
  ip a | grep -A2 $iname | awk '/inet/{print $2}'
  ip a | grep -A2 $iname | awk '/link/{print $2}'
  ethtool $iname |grep "Speed:"
done
```

运行该脚本检查网卡信息：

```
# sh /opt/scripts/nic-info.sh

vps.2daygeek.com
----------------
eth0:
192.168.1.101/24
00:00:00:55:43:5c
Speed: 10000Mb/s
eth1:
192.168.1.102/24
00:00:00:55:43:5d
Speed: 10000Mb/s
```

---

via: <https://www.2daygeek.com/linux-unix-check-network-interfaces-names-nic-speed-ip-mac-address/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[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/) 荣誉推出


Manjaro 20 Lysia 到来，支持 ZFS 和 Snap

# Manjaro 20 Lysia 到来，支持 ZFS 和 Snap

>
> Manjaro Linux 刷新了其 Manjaro 20 “Lysia” 的 ISO。现在在 Pamac 中支持了 Snap 和 Flatpak 软件包。在 Manjaro Architect 安装程序中增加了 ZFS 选项，并使用最新的内核 5.6 作为基础。
>
>
>

最近新的发行版的发布像下雨一样。在上周发布了 [Ubuntu 20.04 LTS](/article-12142-1.html) ，紧接着 [Fedora 32](/article-12164-1.html) 也刚刚发布，而现在 [Manjaro 发布了版本 20](https://forum.manjaro.org/t/manjaro-20-0-lysia-released/138633)，代号为 Lysia。

### Manjaro 20 Lysia 有什么新东西？

其实有很多。让我给大家介绍一下 Manjaro 20 中的一些主要新功能。

#### 新的抹茶主题

Manjaro 20 有一个新的默认主题，名为 Matcha（抹茶）。它让桌面看起来更有质感。

#### 对 Snap 和 Flatpak 的支持

Snap 和 Flatpak 软件包的支持得到了改进。如果你愿意，你可以在命令行中使用它们。

你还可以在 Pamac 图形界面包管理器中启用 Snap 和 Flatpak 支持。

启用后，你可以在 Pamac 软件管理器中找到并安装 Snap/Flatpak 应用程序。

#### Pamac 提供了基于搜索安装新软件的方式（在 GNOME 中）

在 GNOME 变种中，如果你搜索某个东西，Pamac 软件管理器会提供安装符合查询的软件。在其他使用 GNOME 桌面的发行版中，GNOME 软件中心也会这样做。

#### ZFS 支持登陆了 Manjaro Architect

现在，你可以在 Manjaro Linux 中轻松地使用 ZFS 作为根文件系统。在 [Manjaro Architect](https://itsfoss.com/manjaro-architect-review/) 中提供了对 [ZFS 文件系统](https://itsfoss.com/what-is-zfs/)的支持。

请注意，我说的是 Manjaro Architect，即基于终端的安装程序。它和普通的图形化的 [Calamares 安装程序](https://calamares.io/)不一样。

#### Linux kernel 5.6

最新的稳定版 [Linux 内核 5.6](https://itsfoss.com/linux-kernel-5-6/) 带来了更多的硬件支持，如 thunderbolt、Nvidia 和 USB4。你也可以使用 [WireGuard VPN](https://itsfoss.com/wireguard/)。

#### 其他杂项变化

* 新的桌面环境版本：Xfce 4.14、GNOME 3.36 和 KDE Plasma 5.18。
* 新的默认 shell 是 zsh。
* Display-Profiles 允许你存储一个或多个配置文件，用于你的首选显示配置。
* 改进后的 Gnome-Layout-Switcher。
* 最新的驱动程序。
* 改进和完善了 Manjaro 工具。

### 如何取得 Manjaro 20 Lysia？

如果你已经在使用 Manjaro，只需更新你的 Manjaro Linux 系统，你就应该已经在使用 Lysia 了。

Manjaro 采用了滚动发布模式，这意味着你不必手动从一个版本升级到另一个版本。只要有新的版本发布，不需要重新安装就可以使用了。

既然 Manjaro 是滚动发布的，为什么每隔一段时间就会发布一个新版本呢？这是因为他们要刷新 ISO，这样下载 Manjaro 的新用户就不用再安装过去几年的更新了。这就是为什么 Arch Linux 也会每个月刷新一次 ISO 的原因。

Manjaro 的“ISO 刷新”是有代号和版本的，因为它可以帮助开发者清楚地标明每个开发阶段的发展方向。

所以，如果你已经在使用它，只需使用 Pamac 或命令行[更新你的 Manjaro Linux 系统](https://itsfoss.com/update-arch-linux/)即可。

如果你想尝试 Manjaro 或者想使用 ZFS，那么你可以通过从它的网站上[下载 ISO](https://manjaro.org/download/) 来[安装 Manjaro](https://itsfoss.com/install-manjaro-linux/)。

愿你喜欢新的 Manjaro Linux 发布。

---

via: <https://itsfoss.com/manjaro-20-release/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[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/) 荣誉推出


IPv5 发生了什么？为什么有 IPv4、IPv6 但没有 IPv5？

Summary: 答案是肯定的，曾经有一个 IPv5。让我解释一下这里发生的事。

答案是肯定的，曾经有一个 IPv5。让我解释一下这里发生的事。

# IPv5 发生了什么？为什么有 IPv4、IPv6 但没有 IPv5？

如果你花过很多时间在互联网上，那么你应该已经听说过计算机每天使用的 IPv4 和 IPv6 协议。

你可能会问的一个问题是：为什么没有 IPv5？为什么 IPv6 在 IPv4 之后而不是 IPv5 之后出现？是否有 IPv5，如果是，那么 IPv5 发生了什么？

答案是肯定的，曾经有一个 IPv5。让我解释一下这里发生的事。

### 互联网的早期历史

在 1960 年代后期，美国国防部的[高级研究计划局](https://en.wikipedia.org/wiki/DARPA)（DARPA）发起了一个[项目](https://en.wikipedia.org/wiki/ARPANET)来连接全国的计算机。最初的目标是创建一个由全国 ARPA 资助的所有计算机组成的网络系统。

由于这是第一次将如此规模的网络整合在一起，因此他们也在不断发展自己的技术和硬件。他们首先做的工作之一就是开发名为<ruby>   传输控制协议  <rt>  Transmission Control Protocol </rt></ruby>（TCP）的<ruby> 互联网协议 <rt>  Internet Protocol </rt></ruby>（IP）。该协议“可靠、有序，并会对运行于通过 IP 网络传输的主机上的应用的八进制（字节）流通讯进行错误检测”。简单来说，它可以确保数据安全到达。

最初，TCP 被设计为[“主机级别的端到端协议以及封装和路由协议”](https://fcw.com/articles/2006/07/31/what-ever-happened-to-ipv5.aspx)。但是，他们意识到他们需要拆分协议以使其更易于管理。于是决定由 IP 协议处理封装和路由。

那时，TCP 已经经历了三个版本，因此新协议被称为 IPv4。

### IPv5 的诞生

IPv5 开始时有个不同的名字：<ruby> 互联网流协议 <rt>  Internet Stream Protocol </rt></ruby>（ST）。它是[由 Apple、NeXT 和 Sun Microsystems](https://www.lifewire.com/what-happened-to-ipv5-3971327) 为试验流式语音和视频而创建的。

该新协议能够“在保持通信的同时，以特定频率传输数据包”。

### 那么 IPv5 发生了什么？

IPv5 从未被接受为正式的互联网协议。这主要是由于 32 位限制。

IPV5 使用与 IPv4 相同的寻址系统。每个地址由 0 到 255 之间的四组数字组成。这将可能的地址数量限制为 [43 亿](https://www.lifewire.com/what-happened-to-ipv5-3971327)个。

在 1970 年代初，这似乎比全世界所需要的还要多。但是，互联网的爆炸性增长证明了这一想法是错误的。2011 年，世界上的IPv4地址正式用完了。

在 1990 年代，一个新项目开始致力于研究下一代互联网协议（IPng）。这形成了 128 位的 IPv6。IPv6 地址包含 [“8 组 4 字符的十六进制数字”](https://www.lifewire.com/what-happened-to-ipv5-3971327)，它可以包含从 0 到 9 的数字和从 A 到 F 的字母。与 IPv4 不同，IPv6 拥有数万亿个可能的地址，因此我们应该能安全一阵子。

同时，IPv5 奠定了 VoIP 的基础，而该技术已被我们用于当今世界范围内的通信。**因此，我想在某种程度上，你可以说 IPv5 仍然可以保留到了今天**。

希望你喜欢有关互联网历史的轶事。你可以阅读其他[关于 Linux 和技术的琐事文章](https://itsfoss.com/category/story/)。

如果你觉得这篇文章有趣，请花一点时间在社交媒体、Hacker News 或 [Reddit](https://reddit.com/r/linuxusersgroup) 上分享它。

---

via: <https://itsfoss.com/what-happened-to-ipv5/>

作者：[John Paul](https://itsfoss.com/author/john/) 选题：[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/) 荣誉推出


YUM 和 RPM 包管理器的不同之处

# YUM 和 RPM 包管理器的不同之处

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

软件包管理器在 Linux 系统中扮演着重要的角色。它允许你安装、更新、查看、搜索和删除软件包，以满足你的需求。

每个发行版都有自己的一套包管理器，依据你的 Linux 发行版来分别使用它们。

RPM 是最古老的传统软件包管理器之一，它是为基于 Red Hat 的系统设计的，如 Red Hat Enterprise Linux（RHEL）、CentOS、Fedora 和 openSUSE（它基于 suse Enterprise Linux）等系统。但在依赖解析和包更新（全系统更新/升级）方面，RPM 包管理器有一个突出的限制。

>
> 如果你想知道 [YUM 和 DNF 包管理器的区别](/article-12161-1.html)请参考该文章。
>
>
>

这意味着 `yum` 可以自动下载并安装所有需要的依赖项，但 `rpm` 会告诉你安装一个依赖项列表，然后你必须手动安装。

当你想用 [rpm 命令](https://www.2daygeek.com/linux-rpm-command-examples-manage-packages-fedora-centos-rhel-systems/) 安装一组包时，这实际上是不可能的，而且很费时间。

这时，[YUM 包管理器](https://www.2daygeek.com/linux-yum-command-examples-manage-packages-rhel-centos-systems/) 就派上了用场，解决了这两个问题。

### 什么是 RPM？

RPM 指的是 RPM Package Manager（原名 Red Hat Package Manager），是一个功能强大的命令行包管理工具，是为 Red Hat 操作系统开发的。

它现在被用作许多 Linux 发行版的核心组件，如 Centos、Fedora、Oracle Linux、openSUSE 和 Mageia 等。

RPM 软件包管理器允许你在基于 RPM 的 Linux 系统上安装、升级、删除、查询和验证软件包。

RPM 文件的扩展名为 `.rpm`。RPM 包由一个存档文件组成，其中包含了一个特定包的库和依赖关系，这些库和依赖关系与系统上安装的其他包不冲突。

在 Linux 上有很多前端工具可以用来安装 RPM 包，与 RPM 工具相比，这些工具可以使安装过程更加高效，尤其是在处理依赖关系方面。

如果你想了解更多关于 Linux 发行版的前端包管理器的信息，请到下面的链接。

* [Linux 命令行包管理器列表](https://www.2daygeek.com/list-of-command-line-package-manager-for-linux/)

如果你想了解 Linux 的 GUI 包管理器，请到下面的链接。

* [Linux GUI 包管理器列表](https://www.2daygeek.com/list-of-graphical-frontend-tool-for-linux-package-manager/)

### 什么是 YUM？

Yum 是一个 Linux 操作系统上的自由开源的命令行包管理程序，它使用 RPM 包管理器。Yum 是一个 RPM 的前端工具，可以自动解决软件包的依赖关系。它可以从发行版官方仓库和其他第三方仓库中安装 RPM 软件包。

Yum 允许你在系统中安装、更新、搜索和删除软件包。如果你想让你的系统保持更新，你可以通过 yum-cron 启用自动更新。

此外，如果你需要的话，它还允许你在 `yum update` 中排除一个或多个软件包。

Yum 是默认安装的，你不需要安装它。

| 编号 | RPM | YUM |
| --- | --- | --- |
| 1 | 红帽在 1997 年引入了 RPM | Yellowdog UPdater（YUP）开发于 1999-2001 年，YUM 于 2003 年取代了原来的 YUP 工具 |
| 2 | RPM 代表 RPM Package manager（原名 Red Hat package manager） | YUM 代表 Yellowdog Updater Modified |
| 3 | RPM 文件的命名规则如下，`httpd-2.4.6-92.el7.x86_64.rpm`：`httpd` - 实际的包名；`2.4.6` - 包发布版本号；`92` - 包发布子版本号；`el7` - Red Hat 版本；`x86_64` - 硬件架构；`rpm` - 文件扩展名 | 后台使用 rpm 数据库 |
| 4 | 不解析依赖关系，你必须手动安装依赖 | 可以自动解析依赖关系并同时安装它们（任何包都会和它的依赖关系一起安装） |
| 5 | 允许你同时安装多个版本的软件包 | 不允许，并显示该软件包已经安装 |
| 6 | 当使用 RPM 命令安装一个软件包时，你必须提供 `.rpm` 软件包的确切位置 | 你可以安装仓库中的任何软件包，而你只需要知道软件包的名称就可以了 |
| 7 | RPM 不依赖于 YUM | 它是一个前端工具，在后台使用 RPM 包管理器来管理包 |
| 8 | RPM 在安装包的管理方面比较难 | YUM 是最简单的管理 RPM 包的方法 |
| 9 | RPM 不能让你将整个系统升级到最新的版本 | YUM 可以让你将系统升级到最新的版本（例如 7.0 到 7.x 的小版本升级） |
| 10 | RPM 不能让你自动更新/升级安装在系统上的软件包 | YUM 可以让你自动更新/升级系统上的更新 |
| 11 | 不使用在线仓库来执行任何操作 | 完全依赖在线仓库来完成所有的工作 |
| 12 | RPM 是一种包格式，它也是一个底层的包管理器，只做基本的事情 | 这是一个上层的包管理器前端，它可以完成你所需要的一切工作 |

---

via: <https://www.2daygeek.com/comparison-difference-between-yum-vs-rpm/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[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/) 荣誉推出