在 Linux 中加速工作的键盘快捷键

Summary: 学习键盘快捷键将使生产率提高 3.3％

这计算略简单了，省下来的时间全去折腾显卡了

学习键盘快捷键将使生产率提高 3.3％

![Google Keyboard](/data/attachment/album/201911/08/075723x7pf4kuu5x7cxbbb.jpg)

>
> 操作鼠标、键盘和菜单会占用我们很多时间，这些可以使用键盘快捷键来节省时间。这不仅节省时间，还可以使用户更高效。
>
>
>

你是否意识到每次在打字时从键盘切换到鼠标需要多达两秒钟？如果一个人每天工作八小时，每分钟从键盘切换到鼠标一次，并且一年中大约有 240 个工作日，那么所浪费的时间（根据 Brainscape 的计算）为： [每分钟浪费 2 秒] x [每天 480 分钟] x 每年 240 个工作日 = 每年浪费 64 小时 这相当于损失了八个工作日，因此学习键盘快捷键将使生产率提高 3.3％（<https://www.brainscape.com/blog/2011/08/keyboard-shortcuts-economy/>）。

键盘快捷键提供了一种更快的方式来执行任务，不然就需要使用鼠标和/或菜单分多个步骤来完成。图 1 列出了 Ubuntu 18.04 Linux 和 Web 浏览器中一些最常用的快捷方式。我省略了非常有名的快捷方式，例如复制、粘贴等，以及不经常使用的快捷方式。读者可以参考在线资源以获得完整的快捷方式列表。请注意，Windows 键在 Linux 中被重命名为 Super 键。

### 常规快捷方式

下面列出了常规快捷方式。

![](/data/attachment/album/201911/08/075725qjf59uwkw0tk54ky.png)

### 打印屏幕和屏幕录像

以下快捷方式可用于打印屏幕或录制屏幕视频。

![](/data/attachment/album/201911/08/075726yz55j2csyflyte9s.png)

### 在应用之间切换

此处列出的快捷键可用于在应用之间切换。

![](/data/attachment/album/201911/08/075727spssf1ymcmlvgpyc.png)

### 平铺窗口

可以使用下面提供的快捷方式以不同方式将窗口平铺。

![](/data/attachment/album/201911/08/075727uzk12pd7wz1e3pk2.png)

### 浏览器快捷方式

此处列出了浏览器最常用的快捷方式。大多数快捷键对于 Chrome/Firefox 浏览器是通用的。

| **组合键** | **行为** |
| --- | --- |
| `Ctrl + T` | 打开一个新标签。 |
| `Ctrl + Shift + T` | 打开最近关闭的标签。 |
| `Ctrl + D` | 添加一个新书签。 |
| `Ctrl + W` | 关闭浏览器标签。 |
| `Alt + D` | 将光标置于浏览器的地址栏中。 |
| `F5 或 Ctrl-R` | 刷新页面。 |
| `Ctrl + Shift + Del` | 清除私人数据和历史记录。 |
| `Ctrl + N` | 打开一个新窗口。 |
| `Home` | 滚动到页面顶部。 |
| `End` | 滚动到页面底部。 |
| `Ctrl + J` | 打开下载文件夹（在 Chrome 中） |
| `F11` | 全屏视图（切换效果） |

### 终端快捷方式

这是终端快捷方式的列表。

![](/data/attachment/album/201911/08/075729mmqz7qt2t0kqo24t.png)

你还可以在 Ubuntu 中配置自己的自定义快捷方式，如下所示：

* 在 Ubuntu Dash 中单击设置。
* 在“设置”窗口的左侧菜单中选择“设备”选项卡。
* 在设备菜单中选择键盘标签。
* 右面板的底部有个 “+” 按钮。点击 “+” 号打开自定义快捷方式对话框并配置新的快捷方式。

学习本文提到的三个快捷方式可以节省大量时间，并使你的工作效率更高。

### 引用

[Cohen, Andrew. How keyboard shortcuts could revive America’s economy; www.brainscape.com. [Online] Brainscape, 26 May 2017;](https://www.brainscape.com/blog/2011/08/keyboard-shortcuts-economy/)

---

via: <https://opensourceforu.com/2019/11/keyboard-shortcuts-to-speed-up-your-work-in-linux/>

作者：[S Sathyanarayanan](https://opensourceforu.com/author/s-sathyanarayanan/) 选题：[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/) 荣誉推出


初级：如何更新 Fedora Linux 系统

Summary: 本快速教程介绍了更新 Fedora Linux 安装的多种方法。

文章的营养有点……<br />
还是谢谢编辑

本快速教程介绍了更新 Fedora Linux 安装的多种方法。

>
> 本快速教程介绍了更新 Fedora Linux 安装的多种方法。
>
>
>

![](/data/attachment/album/201911/08/082740ffftm1j09teedxjl.jpg)

前几天，我安装了[新发布的 Fedora 31](https://itsfoss.com/fedora-31-release/)。老实说，这是我第一次使用[非 Ubuntu 发行版](https://itsfoss.com/non-ubuntu-beginner-linux/)。

安装 Fedora 之后，我做的第一件事就是尝试安装一些软件。我打开软件中心，发现该软件中心已“损坏”。 我无法从中安装任何应用程序。

我不确定我的系统出了什么问题。在团队内部讨论时，Abhishek 建议我先更新系统。我更新了，更新后一切恢复正常。更新 [Fedora](https://getfedora.org/) 系统后，软件中心也能正常工作了。

有时我们一直尝试解决我们所面临的问题，而忽略了对系统的更新。不管问题有多大或多小，为了避免它们，你都应该保持系统更新。

在本文中，我将向你展示更新 Fedora Linux 系统的多种方法。

* 使用软件中心更新 Fedora
* 使用命令行更新 Fedora
* 从系统设置更新 Fedora

请记住，更新 Fedora 意味着安装安全补丁、更新内核和软件。如果要从 Fedora 的一个版本更新到另一个版本，这称为版本升级，你可以[在此处阅读有关 Fedora 版本升级过程的信息](https://itsfoss.com/upgrade-fedora-version/)。

### 从软件中心更新 Fedora

![软件中心](/data/attachment/album/201911/08/082752khmdhfi8wh8djl8w.png)

你很可能会收到通知，通知你有一些系统更新需要查看，你应该在单击该通知时启动软件中心。

你所要做的就是 —— 点击“更新”，并验证 root 密码开始更新。

如果你没有收到更新的通知，则只需启动软件中心并转到“更新”选项卡即可。现在，你只需要继续更新。

### 使用终端更新 Fedora

如果由于某种原因无法加载软件中心，则可以使用 `dnf` 软件包管理命令轻松地更新系统。

只需启动终端并输入以下命令即可开始更新（系统将提示你确认 root 密码）：

```
sudo dnf upgrade
```

>
> \*\*dnf 更新 vs dnf 升级 \*\*
>
>
> 你会发现有两个可用的 dnf 命令：`dnf update` 和 `dnf upgrade`。这两个命令执行相同的工作，即安装 Fedora 提供的所有更新。那么，为什么要会有这两个呢，你应该使用哪一个？`dnf update` 基本上是 `dnf upgrade` 的别名。尽管 `dnf update` 可能仍然有效，但最好使用 `dnf upgrade`，因为这是真正的命令。
>
>
>

### 从系统设置中更新 Fedora

![](/data/attachment/album/201911/08/082755fwhu20x6vpkkkmp6.png)

如果其它方法都不行（或者由于某种原因已经进入“系统设置”），请导航至“设置”底部的“详细信息”选项。

如上图所示，该选项中显示操作系统和硬件的详细信息以及一个“检查更新”按钮。你只需要单击它并提供 root 密码即可继续安装可用的更新。

### 总结

如上所述，更新 Fedora 系统非常容易。有三种方法供你选择，因此无需担心。

如果你按上述说明操作时发现任何问题，请随时在下面的评论部分告诉我。

---

via: <https://itsfoss.com/update-fedora/>

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

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


怎样用 Bash 编程：语法和工具

>
> 让我们通过本系列文章来学习基本的 Bash 编程语法和工具，以及如何使用变量和控制运算符，这是三篇中的第一篇。
>
>
>

![](/data/attachment/album/201911/08/092559r5wdg0w97dtf350j.jpg)

Shell 是操作系统的命令解释器，其中 Bash 是我最喜欢的。每当用户或者系统管理员将命令输入系统的时候，Linux 的 shell 解释器就会把这些命令转换成操作系统可以理解的形式。而执行结果返回 shell 程序后，它会将结果输出到 STDOUT（标准输出），默认情况下，这些结果会[显示在你的终端](https://opensource.com/article/18/10/linux-data-streams)。所有我熟悉的 shell 同时也是一门编程语言。

Bash 是个功能强大的 shell，包含众多便捷特性，比如：tab 补全、命令回溯和再编辑、别名等。它的命令行默认编辑模式是 Emacs，但是我最喜欢的 Bash 特性之一是我可以将其更改为 Vi 模式，以使用那些储存在我肌肉记忆中的的编辑命令。

然而，如果你把 Bash 当作单纯的 shell 来用，则无法体验它的真实能力。我在设计一套包含三卷的 [Linux 自学课程](http://www.both.org/?page_id=1183)时（这个系列的文章正是基于此课程），了解到许多 Bash 的知识，这些是我在过去 20 年的 Linux 工作经验中所没有掌握的，其中的一些知识就是关于 Bash 的编程用法。不得不说，Bash 是一门强大的编程语言，是一个能够同时用于命令行和 shell 脚本的完美设计。

本系列文章将要探讨如何使用 Bash 作为命令行界面（CLI）编程语言。第一篇文章简单介绍 Bash 命令行编程、变量以及控制运算符。其他文章会讨论诸如：Bash 文件的类型；字符串、数字和一些逻辑运算符，它们能够提供代码执行流程中的逻辑控制；不同类型的 shell 扩展；通过 `for`、`while` 和 `until` 来控制循环操作。

### Shell

Bash 是 Bourne Again Shell 的缩写，因为 Bash shell 是 [基于](https://opensource.com/19/9/command-line-heroes-bash) 更早的 Bourne shell，后者是 Steven Bourne 在 1977 年开发的。另外还有很多[其他的 shell](https://en.wikipedia.org/wiki/Comparison_of_command_shells) 可以使用，但下面四个是我经常见到的：

* `csh`：C shell 适合那些习惯了 C 语言语法的开发者。
* `ksh`：Korn shell，由 David Korn 开发，在 Unix 用户中更流行。
* `tcsh`：一个 csh 的变种，增加了一些易用性。
* `zsh`：Z shell，集成了许多其他流行 shell 的特性。

所有 shell 都有内置命令，用以补充或替代核心工具集。打开 shell 的 man 说明页，找到“BUILT-INS”那一段，可以查看都有哪些内置命令。

每种 shell 都有它自己的特性和语法风格。我用过 csh、ksh 和 zsh，但我还是更喜欢 Bash。你可以多试几个，寻找更适合你的 shell，尽管这可能需要花些功夫。但幸运的是，切换不同 shell 很简单。

所有这些 shell 既是编程语言又是命令解释器。下面我们来快速浏览一下 Bash 中集成的编程结构和工具。

### 作为编程语言的 Bash

大多数场景下，系统管理员都会使用 Bash 来发送简单明了的命令。但 Bash 不仅可以输入单条命令，很多系统管理员可以编写简单的命令行程序来执行一系列任务，这些程序可以作为通用工具，能节省时间和精力。

编写 CLI 程序的目的是要提高效率（做一个“懒惰的”系统管理员）。在 CLI 程序中，你可以用特定顺序列出若干命令，逐条执行。这样你就不用盯着显示屏，等待一条命令执行完，再输入另一条，省下来的时间就可以去做其他事情了。

### 什么是“程序”？

自由在线计算机词典（[FOLDOC](http://foldoc.org/program)）对于程序的定义是：“由计算机执行的指令，而不是运行它们的物理硬件。”普林斯顿大学的 [WordNet](https://wordnet.princeton.edu/) 将程序定义为：“……计算机可以理解并执行的一系列指令……”[维基百科](https://en.wikipedia.org/wiki/Computer_program)上也有一条不错的关于计算机程序的条目。

总结下，程序由一条或多条指令组成，目的是完成一个具体的相关任务。对于系统管理员而言，一段程序通常由一系列的 shell 命令构成。Linux 下所有的 shell （至少我所熟知的）都有基本的编程功能，Bash 作为大多数 linux 发行版的默认 shell，也不例外。

本系列用 Bash 举例（因为它无处不在），假如你使用一个不同的 shell 也没关系，尽管结构和语法有所不同，但编程思想是相通的。有些 shell 支持某种特性而其他 shell 则不支持，但它们都提供编程功能。Shell 程序可以被存在一个文件中被反复使用，或者在需要的时候才创建它们。

### 简单 CLI 程序

最简单的命令行程序只有一或两条语句，它们可能相关，也可能无关，在按回车键之前被输入到命令行。程序中的第二条语句（如果有的话）可能取决于第一条语句的操作，但也不是必须的。

这里需要特别讲解一个标点符号。当你在命令行输入一条命令，按下回车键的时候，其实在命令的末尾有一个隐含的分号（`;`）。当一段 CLI shell 程序在命令行中被串起来作为单行指令使用时，必须使用分号来终结每个语句并将其与下一条语句分开。但 CLI shell 程序中的最后一条语句可以使用显式或隐式的分号。

### 一些基本语法

下面的例子会阐明这一语法规则。这段程序由单条命令组成，还有一个显式的终止符：

```
[student@studentvm1 ~]$ echo "Hello world." ;
Hello world.
```

看起来不像一个程序，但它确是我学习每个新编程语言时写下的第一个程序。不同语言可能语法不同，但输出结果是一样的。

让我们扩展一下这段微不足道却又无所不在的代码。你的结果可能与我的有所不同，因为我的家目录有点乱，而你可能是在 GUI 桌面中第一次登录账号。

```
[student@studentvm1 ~]$ echo "My home directory." ; ls ;
My home directory.
chapter25   TestFile1.Linux  dmesg2.txt  Downloads  newfile.txt  softlink1  testdir6
chapter26   TestFile1.mac    dmesg3.txt  file005    Pictures     Templates  testdir
TestFile1      Desktop       dmesg.txt   link3      Public       testdir    Videos
TestFile1.dos  dmesg1.txt    Documents   Music      random.txt   testdir1
```

现在是不是更明显了。结果是相关的，但是两条语句彼此独立。你可能注意到我喜欢在分号前后多输入一个空格，这样会让代码的可读性更好。让我们再运行一遍这段程序，这次不要带结尾的分号：

```
[student@studentvm1 ~]$ echo "My home directory." ; ls
```

输出结果没有区别。

### 关于变量

像所有其他编程语言一样，Bash 支持变量。变量是个象征性的名字，它指向内存中的某个位置，那里存着对应的值。变量的值是可以改变的，所以它叫“变~量”。

Bash 不像 C 之类的语言，需要强制指定变量类型，比如：整型、浮点型或字符型。在 Bash 中，所有变量都是字符串。整数型的变量可以被用于整数运算，这是 Bash 唯一能够处理的数学类型。更复杂的运算则需要借助 [bc](https://www.gnu.org/software/bc/manual/html_mono/bc.html) 这样的命令，可以被用在命令行编程或者脚本中。

变量的值是被预先分配好的，这些值可以用在命令行编程或者脚本中。可以通过变量名字给其赋值，但是不能使用 `$` 符开头。比如，`VAR=10` 这样会把 `VAR` 的值设为 `10`。要打印变量的值，你可以使用语句 `echo $VAR`。变量名必须以文本（即非数字）开始。

Bash 会保存已经定义好的变量，直到它们被取消掉。

下面这个例子，在变量被赋值前，它的值是空（`null`）。然后给它赋值并打印出来，检验一下。你可以在同一行 CLI 程序里完成它：

```
[student@studentvm1 ~]$ echo $MyVar ; MyVar="Hello World" ; echo $MyVar ;

Hello World
[student@studentvm1 ~]$
```

*注意：变量赋值的语法非常严格，等号（`=`）两边不能有空格。*

那个空行表明了 `MyVar` 的初始值为空。变量的赋值和改值方法都一样，这个例子展示了原始值和新的值。

正如之前说的，Bash 支持整数运算，当你想计算一个数组中的某个元素的位置，或者做些简单的算术运算，这还是挺有帮助的。然而，这种方法并不适合科学计算，或是某些需要小数运算的场景，比如财务统计。这些场景有其它更好的工具可以应对。

下面是个简单的算术题：

```
[student@studentvm1 ~]$ Var1="7" ; Var2="9" ; echo "Result = $((Var1*Var2))"
Result = 63
```

好像没啥问题，但如果运算结果是浮点数会发生什么呢？

```
[student@studentvm1 ~]$ Var1="7" ; Var2="9" ; echo "Result = $((Var1/Var2))"
Result = 0
[student@studentvm1 ~]$ Var1="7" ; Var2="9" ; echo "Result = $((Var2/Var1))"
Result = 1
[student@studentvm1 ~]$
```

结果会被取整。请注意运算被包含在 `echo` 语句之中，其实计算在 echo 命令结束前就已经完成了，原因是 Bash 的内部优先级。想要了解详情的话，可以在 Bash 的 man 页面中搜索 “precedence”。

### 控制运算符

Shell 的控制运算符是一种语法运算符，可以轻松地创建一些有趣的命令行程序。在命令行上按顺序将几个命令串在一起，就变成了最简单的 CLI 程序：

```
command1 ; command2 ; command3 ; command4 ; . . . ; etc. ;
```

只要不出错，这些命令都能顺利执行。但假如出错了怎么办？你可以预设好应对出错的办法，这就要用到 Bash 内置的控制运算符， `&&` 和 `||`。这两种运算符提供了流程控制功能，使你能改变代码执行的顺序。分号也可以被看做是一种 Bash 运算符，预示着新一行的开始。

`&&` 运算符提供了如下简单逻辑，“如果 command1 执行成功，那么接着执行 command2。如果 command1 失败，就跳过 command2。”语法如下：

```
command1 && command2
```

现在，让我们用命令来创建一个新的目录，如果成功的话，就把它切换为当前目录。确保你的家目录（`~`）是当前目录，先尝试在 `/root` 目录下创建，你应该没有权限：

```
[student@studentvm1 ~]$ Dir=/root/testdir ; mkdir $Dir/ && cd $Dir
mkdir: cannot create directory '/root/testdir/': Permission denied
[student@studentvm1 ~]$
```

上面的报错信息是由 `mkdir` 命令抛出的，因为创建目录失败了。`&&` 运算符收到了非零的返回码，所以 `cd` 命令就被跳过，前者阻止后者继续运行，因为创建目录失败了。这种控制流程可以阻止后面的错误累积，避免引发更严重的问题。是时候讲点更复杂的逻辑了。

当一段程序的返回码大于零时，使用 `||` 运算符可以让你在后面接着执行另一段程序。简单语法如下：

```
command1 || command2
```

解读一下，“假如 command1 失败，执行 command2”。隐藏的逻辑是，如果 command1 成功，跳过 command2。下面实践一下，仍然是创建新目录：

```
[student@studentvm1 ~]$ Dir=/root/testdir ; mkdir $Dir || echo "$Dir was not created."
mkdir: cannot create directory '/root/testdir': Permission denied
/root/testdir was not created.
[student@studentvm1 ~]$
```

正如预期，因为目录无法创建，第一条命令失败了，于是第二条命令被执行。

把 `&&` 和 `||` 两种运算符结合起来才能发挥它们的最大功效。请看下面例子中的流程控制方法：

```
前置 commands ; command1 && command2 || command3 ; 跟随 commands
```

语法解释：“假如 command1 退出时返回码为零，就执行 command2，否则执行 command3。”用具体代码试试：

```
[student@studentvm1 ~]$ Dir=/root/testdir ; mkdir $Dir && cd $Dir || echo "$Dir was not created."
mkdir: cannot create directory '/root/testdir': Permission denied
/root/testdir was not created.
[student@studentvm1 ~]$
```

现在我们再试一次，用你的家目录替换 `/root` 目录，你将会有权限创建这个目录了：

```
[student@studentvm1 ~]$ Dir=~/testdir ; mkdir $Dir && cd $Dir || echo "$Dir was not created."
[student@studentvm1 testdir]$
```

像 `command1 && command2` 这样的控制语句能够运行的原因是，每条命令执行完毕时都会给 shell 发送一个返回码，用来表示它执行成功与否。默认情况下，返回码为 `0` 表示成功，其他任何正值表示失败。一些系统管理员使用的工具用值为 `1` 的返回码来表示失败，但其他很多程序使用别的数字来表示失败。

Bash 的内置变量 `$?` 可以显示上一条命令的返回码，可以在脚本或者命令行中非常方便地检查它。要查看返回码，让我们从运行一条简单的命令开始，返回码的结果总是上一条命令给出的。

```
[student@studentvm1 testdir]$ ll ; echo "RC = $?"
total 1264
drwxrwxr-x  2 student student   4096 Mar  2 08:21 chapter25
drwxrwxr-x  2 student student   4096 Mar 21 15:27 chapter26
-rwxr-xr-x  1 student student     92 Mar 20 15:53 TestFile1
drwxrwxr-x. 2 student student 663552 Feb 21 14:12 testdir
drwxr-xr-x. 2 student student   4096 Dec 22 13:15 Videos
RC = 0
[student@studentvm1 testdir]$
```

在这个例子中，返回码为零，意味着命令执行成功了。现在对 root 的家目录测试一下，你应该没有权限：

```
[student@studentvm1 testdir]$ ll /root ; echo "RC = $?"
ls: cannot open directory '/root': Permission denied
RC = 2
[student@studentvm1 testdir]$
```

本例中返回码是 `2`，表明非 root 用户没有权限进入这个目录。你可以利用这些返回码，用控制运算符来改变程序执行的顺序。

### 总结

本文将 Bash 看作一门编程语言，并从这个视角介绍了它的简单语法和基础工具。我们学习了如何将数据输出到 STDOUT，怎样使用变量和控制运算符。在本系列的下一篇文章中，将会重点介绍能够控制指令执行流程的逻辑运算符。

---

via: <https://opensource.com/article/19/10/programming-bash-part-1>

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

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


全面介绍 Linux 权限

Summary: 知道如何控制用户对文件的访问是一项基本的系统管理技能。

知道如何控制用户对文件的访问是一项基本的系统管理技能。

>
> 知道如何控制用户对文件的访问是一项基本的系统管理技能。
>
>
>

![](/data/attachment/album/201911/08/233101y043rn4ua00r3lqn.jpg)

了解 Linux 权限以及如何控制哪些用户可以访问文件是系统管理的一项基本技能。

本文将介绍标准 Linux 文件系统权限，并进一步研究特殊权限，以及使用 `umask` 来解释默认权限作为文章的结束。

### 理解 ls 命令的输出

在讨论如何修改权限之前，我们需要知道如何查看权限。通过 `ls` 命令的长列表参数（`-l`）为我们提供了有关文件的许多信息。

```
$ ls -lAh
total 20K
-rwxr-xr--+ 1 root root    0 Mar  4 19:39 file1
-rw-rw-rw-. 1 root root    0 Mar  4 19:39 file10
-rwxrwxr--+ 1 root root    0 Mar  4 19:39 file2
-rw-rw-rw-. 1 root root    0 Mar  4 19:39 file8
-rw-rw-rw-. 1 root root    0 Mar  4 19:39 file9
drwxrwxrwx. 2 root root 4.0K Mar  4 20:04 testdir
```

为了理解这些是什么意思，让我们将关于权限的输出分解为各个部分。单独理解每个部分会更容易。

让我们看看在上面的输出中的最后一行的每个组件：

```
drwxrwxrwx. 2 root root 4.0K Mar  4 20:04 testdir
```

| 第 1 节 | 第 2 节 | 第 3 节 | 第 4 节 | 第 5 节 | 第 6 节 | 第 7 节 |
| --- | --- | --- | --- | --- | --- | --- |
| `d` | `rwx` | `rwx` | `rwx` | `.` | `root` | `root` |

第 1 节（左侧）显示文件的类型。

| 符号 | 类型 |
| --- | --- |
| `d` | 目录 |
| `-` | 常规文件 |
| `l` | 软链接 |

`ls` 的 [info 页面](https://www.gnu.org/software/texinfo/manual/info-stnd/info-stnd.html)完整列出了不同的文件类型。

每个文件都有三种访问方式：

* 属主
* 组
* 所有其他人 第 2、3 和 4 节涉及用户（属主）、组和“其他用户”权限。每个部分都可以包含 `r`（读取）、`w`（写入）和 `x`（执行）权限的组合。

每个权限还分配了一个数值，这在以八进制表示形式讨论权限时很重要。

| 权限 | 八进制值 |
| --- | --- |
| `r` | 4 |
| `w` | 2 |
| `x` | 1 |

第 5 节描述了其他替代访问方法，例如 SELinux 或文件访问控制列表（FACL）。

| 访问方法 | 字符 |
| --- | --- |
| 没有其它访问方法 | `-` |
| SELinux | `.` |
| FACL | `+` |
| 各种方法的组合 | `+` |

第 6 节和第 7 节分别是属主和组的名称。

### 使用 chown 和 chmod

#### chown 命令

`chown`（更改所有权）命令用于更改文件的用户和组的所有权。

要将文件 `foo` 的用户和组的所有权更改为 `root`，我们可以使用以下命令：

```
$ chown root:root foo
$ chown root: foo
```

在用户名后跟冒号（`:`）运行该命令将同时设置用户和组所有权。

要仅将文件 `foo` 的用户所有权设置为 `root` 用户，请输入：

```
$ chown root foo
```

要仅更改文件 `foo` 的组所有权，请在组之前加冒号：

```
$ chown :root foo
```

#### chmod 命令

`chmod`（更改模式）命令控制属主、组以及既不是属主也不属于与文件关联的组的所有其他用户的文件许可权。

`chmod` 命令可以以八进制（例如 `755`、`644` 等）和符号（例如 `u+rwx`、`g-rwx`、`o=rw`）格式设置权限。

八进制表示法将 4 个“点”分配给“读取”，将 2 个“点”分配给“写入”，将 1 个点分配给“执行”。如果要给用户（属主）分配“读取”权限，则将 4 分配给第一个插槽，但是如果要添加“写入”权限，则必须添加 2。如果要添加“执行”，则要添加 1。我们对每种权限类型执行此操作：属主、组和其他。

例如，如果我们想将“读取”、“写入”和“执行”分配给文件的属主，但仅将“读取”和“执行”分配给组成员和所有其他用户，则我们应使用 `755`（八进制格式）。这是属主的所有权限位（`4+2+1`），但组和其他权限的所有权限位只有 `4` 和 `1`（`4+1`）。

>
> 细分为：4+2+1=7，4+1=5 和 4+1=5。
>
>
>

如果我们想将“读取”和“写入”分配给文件的属主，而只将“读取”分配给组的成员和所有其他用户，则可以如下使用 `chmod`：

```
$ chmod 644 foo_file
```

在下面的示例中，我们在不同的分组中使用符号表示法。注意字母 `u`、`g` 和 `o` 分别代表“用户”（属主）、“组”和“其他”。我们将 `u`、`g` 和 `o` 与 `+`、`-` 或 `=` 结合使用来添加、删除或设置权限位。

要将“执行”位添加到所有权权限集中：

```
$ chmod u+x foo_file
```

要从组成员中删除“读取”、“写入”和“执行”：

```
$ chmod g-rwx foo_file
```

要将所有其他用户的所有权设置为“读取”和“写入”：

```
$ chmod o=rw
```

### 特殊位：设置 UID、设置 GID 和粘滞位

除了标准权限外，还有一些特殊的权限位，它们具有一些别的用处。

#### 设置用户 ID（suid）

当在文件上设置 `suid` 时，将以文件的属主的身份而不是运行该文件的用户身份执行操作。一个[好的例子](https://www.theurbanpenguin.com/using-a-simple-c-program-to-explain-the-suid-permission/)是 `passwd` 命令。它需要设置 `suid` 位，以便更改密码的操作具有 root 权限。

```
$ ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /bin/passwd
```

设置 `suid` 位的示例：

```
$ chmod u+s /bin/foo_file_name
```

#### 设置组 ID（sgid）

`sgid` 位与 `suid` 位类似，操作是在目录的组所有权下完成的，而不是以运行命令的用户身份。

一个使用 `sgid` 的例子是，如果多个用户正在同一个目录中工作，并且目录中创建的每个文件都需要具有相同的组权限。下面的示例创建一个名为 `collab_dir` 的目录，设置 `sgid` 位，并将组所有权更改为 `webdev`。

```
$ mkdir collab_dir
$ chmod g+s collab_dir
$ chown :webdev collab_dir
```

现在，在该目录中创建的任何文件都将具有 `webdev` 的组所有权，而不是创建该文件的用户的组。

```
$ cd collab_dir
$ touch file-sgid
$ ls -lah file-sgid
-rw-r--r--. 1 root webdev 0 Jun 12 06:04 file-sgid
```

#### “粘滞”位

粘滞位表示，只有文件所有者才能删除该文件，即使组权限允许该文件可以删除。通常，在 `/tmp` 这样的通用或协作目录上，此设置最有意义。在下面的示例中，“所有其他人”权限集的“执行”列中的 `t` 表示已应用粘滞位。

```
$ ls -ld /tmp
drwxrwxrwt. 8 root root 4096 Jun 12 06:07 /tmp/
```

请记住，这不会阻止某个人编辑该文件，它只是阻止他们删除该目录的内容（LCTT 译注：即删除目录下文件）。

我们将粘滞位设置为：

```
$ chmod o+t foo_dir
```

你可以自己尝试在目录上设置粘滞位并赋予其完整的组权限，以便多个属于同一组的用户可以在目录上进行读取、写入和执行。

接着，以每个用户的身份创建文件，然后尝试以另一个用户的身份删除它们。

如果一切配置正确，则一个用户应该不能从另一用户那里删除文件。

请注意，这些位中的每个位也可以用八进制格式设置：SUID = 4、SGID = 2 和 粘滞位 = 1。（LCTT 译注：这里是四位八进制数字）

```
$ chmod 4744
$ chmod 2644
$ chmod 1755
```

#### 大写还是小写？

如果要设置特殊位时看到大写的 `S` 或 `T` 而不是小写的字符（如我们之前所见），那是因为不存在（对应的）底层的执行位。为了说明这一点，下面的示例创建一个设置了粘滞位的文件。然后，我们可以添加和删除执行位以演示大小写更改。

```
$ touch file cap-ST-demo
$ chmod 1755 cap-ST-demo
$ ls -l cap-ST-demo
-rwxr-xr-t. 1 root root 0 Jun 12 06:16 cap-ST-demo

$ chmod o-x cap-X-demo
$ ls -l cap-X-demo
-rwxr-xr-T. 1 root root 0 Jun 12 06:16 cap-ST-demo
```

#### 有条件地设置执行位

至此，我们使用小写的 `x` 设置了执行位，而无需询问任何问题即可对其进行设置。我们还有另一种选择：使用大写的 `X` 而不是小写的，它将仅在权限组中某个位置已经有执行位时才设置执行位。这可能是一个很难解释的概念，但是下面的演示将帮助说明它。请注意，在尝试将执行位添加到组特权之后，该位没有被设置上。

```
$ touch cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root 0 Jun 12 06:31 cap-X-file
$ chmod g+X cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root 0 Jun 12 06:31 cap-X-file
```

在这个类似的例子中，我们首先使用小写的 `x` 将执行位添加到组权限，然后使用大写的 `X` 为所有其他用户添加权限。这次，大写的 `X`设置了该权限。

```
$ touch cap-X-file
$ ls -l cap-X-file
-rw-r--r--. 1 root root 0 Jun 12 06:31 cap-X-file
$ chmod g+x cap-X-file
$ ls -l cap-X-file
-rw-r-xr--. 1 root root 0 Jun 12 06:31 cap-X-file
$ chmod o+X cap-X-file
ls -l cap-X-file
-rw-r-xr-x. 1 root root 0 Jun 12 06:31 cap-X-file
```

### 理解 umask

`umask` 会屏蔽（或“阻止”）默认权限集中的位，以定义文件或目录的权限。例如，`umask`输出中的 `2` 表示它至少在默认情况下阻止了文件的“写入”位。

使用不带任何参数的 `umask` 命令可以使我们看到当前的 `umask` 设置。共有四列：第一列为特殊的`suid`、`sgid` 或粘滞位而保留，其余三列代表属主、组和其他人的权限。

```
$ umask
0022
```

为了理解这意味着什么，我们可以用 `-S` 标志来执行 `umask`（如下所示）以解释屏蔽位的结果。例如，由于第三列中的值为 `2`，因此将“写入”位从组和其他部分中屏蔽掉了；只能为它们分配“读取”和“执行”。

```
$ umask -S
u=rwx,g=rx,o=rx
```

要查看文件和目录的默认权限集是什么，让我们将 `umask` 设置为全零。这意味着我们在创建文件时不会掩盖任何位。

```
$ umask 000
$ umask -S
u=rwx,g=rwx,o=rwx

$ touch file-umask-000
$ ls -l file-umask-000
-rw-rw-rw-. 1 root root 0 Jul 17 22:03 file-umask-000
```

现在，当我们创建文件时，我们看到所有部分的默认权限分别为“读取”（`4`）和“写入”（`2`），相当于八进制表示 `666`。

我们可以对目录执行相同的操作，并看到其默认权限为 `777`。我们需要在目录上使用“执行”位，以便可以遍历它们。

```
$ mkdir dir-umask-000
$ ls -ld dir-umask-000
drwxrwxrwx. 2 root root 4096 Jul 17 22:03 dir-umask-000/
```

### 总结

管理员还有许多其他方法可以控制对系统文件的访问。这些权限是 Linux 的基本权限，我们可以在这些基础上进行构建。如果你的工作为你引入了 FACL 或 SELinux，你会发现它们也建立在这些文件访问的首要规则之上。

---

via: <https://opensource.com/article/19/8/linux-permissions-101>

作者：[Alex Juarez](https://opensource.com/users/mralexjuarezhttps://opensource.com/users/marcobravohttps://opensource.com/users/greg-p) 选题：[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/) 荣誉推出


6 款面向 Linux 用户的开源绘图应用程序

Summary: 既然你是一名 Linux 用户，为什么不关注一下开源绘图应用程序呢？

既然你是一名 Linux 用户，为什么不关注一下开源绘图应用程序呢？

小时候，当我开始使用计算机（在 Windows XP 中）时，我最喜欢的应用程序是微软的“画图”。我能在它上面涂鸦数个小时。出乎意料，孩子们仍然喜欢这个“画图”应用程序。不仅仅是孩子们，这个简单的“画图”应用程序，在很多情况下都能派上用场。

你可以找到一堆可以让你绘制/绘图或操作图片的应用程序。然而，其中一些是专有软件。既然你是一名 Linux 用户，为什么不关注一下开源绘图应用程序呢？

在这篇文章中，我们将列出一些最好的开源绘图应用程序，它们可以替代可用于 Linux 的专有绘画软件。

### 开源绘图 & 绘制应用程序

![](/data/attachment/album/201911/09/081317j5msq7a33s4w4xx4.png)

**注意:** 该列表没有特别的排名顺序。

#### 1、Pinta

![](/data/attachment/album/201911/09/081320yy2z5h2wruy83rzu.png)

主要亮点：

* Paint.NET / 微软“画图”的极好替代品
* 支持附加组件（有对 WebP 图像的支持）
* 支持图层

[Pinta](https://pinta-project.com/pintaproject/pinta/) 是一款令人赞叹的开源绘图应用程序，非常适合绘图和简单的图片编辑。换句话说，它是一款具有精美功能的简单绘图应用程序。

你可以将 [Pinta](https://itsfoss.com/pinta-1-6-ubuntu-linux-mint/) 视为 Linux 上的“画图”的一个替代品，但是带有图层支持等等。不仅仅是“画图”，它也可以替代 Windows 上的 Paint.NET。尽管 Paint.NET 更好一些，但 Pinta 似乎是个不错的选择。

几个附加组件可以用于增强功能，例如[在 Linux 上支持 WebP 图像](https://itsfoss.com/webp-ubuntu-linux/)。除了图层支持之外，你还可以轻松地调整图片大小、添加特效、进行调整（亮度、对比度等等），以及在导出图片时调整其质量。

##### 如何安装 Pinta ？

你应该能够在软件中心/应用程序中心/软件包管理器中简单地找到它。只需要输入 “Pinta”，并开始安装它。要么也可以尝试 [Flatpak](https://www.flathub.org/apps/details/com.github.PintaProject.Pinta) 软件包。

或者，你可以在终端中输入下面的命令（Ubuntu/Debian）：

```
sudo apt install pinta
```

下载软件包和安装指南的更多信息，参考[官方下载页面](https://pinta-project.com/pintaproject/pinta/releases)。

#### 2、Krita

![](/data/attachment/album/201911/09/081321y10w1vai1bybvcam.png)

主要亮点：

* HDR 绘图
* 支持 PSD
* 支持图层
* 笔刷稳定器
* 二维动画

Krita 是 Linux 上最高级的开源绘图应用程序之一。当然，对于本文而言，它可以帮助你绘制草图和在画布上胡写乱画。除此之外，它还提供很多功能。

例如，如果你的手有点颤抖，它可以帮助你稳定笔刷的笔划。你可以使用内置的矢量工具来创建漫画画板和其它有趣的东西。如果你正在寻找具有全面的颜色管理支持、绘图助理和图层管理的软件，Krita 应该是你最好的选择。

##### 如何安装 Krita ？

类似于 pinta，你可以在软件中心/应用程序中心或软件包管理器的列表中找到它。它也可以 [Flatpak 存储库](https://www.flathub.org/apps/details/org.kde.krita)中找到。

考虑通过终端安装它？输入下面的命令：

```
sudo apt install krita
```

要么你也可以前往它们的[官方下载页面](https://krita.org/en/download/krita-desktop/)来获取 AppImage 文件并运行它。

如果你对 AppImage 文件一无所知，查看我们的指南 —— [如何使用 AppImage](https://itsfoss.com/use-appimage-linux/)。

#### 3、Tux Paint

![](/data/attachment/album/201911/09/081324tggornocegm7hey5.jpg)

主要亮点：

* 给儿童用的一个简单直接的绘图应用程序

我不是开玩笑，对于 3-12 岁儿童来说，Tux Paint 是最好的开源绘图应用程序之一。当然，当你只想乱画时，那无需选择，所以，在这种情况下，Tux Paint 似乎是最好的选择（即使是成年人！）。

##### 如何安装 Tuxpaint ？

Tuxpaint 可以从软件中心或软件包管理器下载。无论哪种情况，在 Ubuntu/Debian 上安装它，在终端中输入下面的命令：

```
sudo apt install tuxpaint
```

关于它的更多信息，前往[官方站点](http://www.tuxpaint.org/)。

#### 4、Drawpile

![](/data/attachment/album/201911/09/081326wkshly2zczccmkey.png)

主要亮点：

* 协同绘制
* 内置聊天功能，可与其他用户互动
* 图层支持
* 记录绘制会话

Drawpile 是一个有趣的开源绘图应用程序，在该程序中，你可以与其他用户实时协作。确切地说，你们可以单个画布中同时绘制。除了这个独特的功能，它还有图层支持、记录绘制会话的能力，甚至还有与协作用户进行交互的聊天功能。

你可以主持或加入一个公共会话，或通过一个密码与你的朋友建立私有会话。默认情况下，服务器将是你的计算机，但是如果你需要远程服务器那也可以。

注意，你将需要[注册一个 Drawpile 账户](https://drawpile.net/accounts/signup/) 才能进行协作。

##### 如何安装 Drawpile ？

据我所知，你只能在 [Flatpak 存储库](https://flathub.org/apps/details/net.drawpile.drawpile)的列表中找到它。

#### 5、MyPaint

![](/data/attachment/album/201911/09/081329ey8tj5b5bym85m8m.png)

主要亮点：

* 易用的数码画家工具
* 支持图层管理
* 很多微调你的画笔和绘制的选项

对于数码画家来说，[MyPaint](https://mypaint.org/) 是一个简单而强大的工具。它具有许多选项，可以调整以制作出完美的数字画笔笔触。我不是一个数字艺术家（但我是一个涂鸦者），但是我注意到有很多调整笔刷、颜色的选项，和一个添加中间结果暂存器面板的选项。

它也支持图层管理，也许你需要它。最新的稳定版本已经有几年没有更新了，但是当前的 alpha 构建版本（我测试过）运行良好。如果你正在 Linux 上寻找一个开源绘图应用程序 —— 试试这个。

##### 如何安装 MyPaint ？

MyPaint 可在官方存储库中获得。然而，这是老旧的版本。如果你仍然想继续，你可以在软件中心搜索它，或在终端中输入下面的命令：

```
sudo apt install mypaint
```

你可以前往它的官方 [GitHub 发布页面](https://github.com/mypaint/mypaint/releases)获取最新的 alpha 构建版本，获取 [AppImage 文件](https://itsfoss.com/use-appimage-linux/)（任意版本）并使它可执行并启动应用程序。

#### 6、KolourPaint

![](/data/attachment/album/201911/09/081330j02ml0mu20tlt00f.png)

主要亮点：

* 一个 Linux 上的“画图”的简单替代品
* 不支持图层管理

如果你不需要任何图层管理的支持，而只是想要一个开源绘图应用程序来绘制东西 —— 那就是它了。

[KolourPaint](http://kolourpaint.org/) 最初是为 KDE 桌面环境定制的，但是它在其它的桌面环境中也能完美地工作。

##### 如何安装 KolourPaint ？

你可以从软件中心安装 KolourPaint，或通过终端使用下面的命令：

```
sudo apt install kolourpaint4
```

你总可以试试 [Flathub](https://flathub.org/apps/details/org.kde.kolourpaint)。

### 总结

如果你在考虑如 GIMP/Inkscape 这样的应用程序，我们在另一篇关于[给数码艺术家的最好 Linux 工具](https://itsfoss.com/best-linux-graphic-design-software/)的文章中列出。如果你对更多的选择好奇，我建议你去查看它。

在这里，我们尝试编写一份 Linux 可用的最佳开源绘图应用程序列表。如果你认为我们错过一些东西，请在下面的评论区告诉我们！

---

via: <https://itsfoss.com/open-source-paint-apps/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[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/) 荣誉推出


Chrome/Chromium 用户必知必会的 11 个基本快捷键

>
> 掌握这些 Google Chrome 键盘快捷键，以获得更好、更流畅、更高效的 Web 浏览体验。还包括可下载的备忘单。
>
>
>

![](/data/attachment/album/201911/09/214207wh96q76ejacnn5as.png)

无可否认，Google Chrome 是[最受欢迎的网络浏览器](https://en.wikipedia.org/wiki/Usage_share_of_web_browsers)。它的开源版本 [Chromium](https://www.chromium.org/Home) 也越来越受欢迎，现在一些 Linux 发行版将其作为默认的网络浏览器。

如果你经常在台式机上使用它，则可以使用 Google Chrome 键盘快捷键来改善浏览体验。没有必要用你的鼠标移来移去、点来点去。只要掌握这些快捷方式，你可以节省一些时间并提高工作效率。

我这里使用的名称是 Google Chrome，但是这些快捷方式同样适用于 Chromium 浏览器。

### 你应该使用的 11 个酷炫的 Chrome 键盘快捷键

如果你是专业人士，可能已经知道其中一些 Chrome 快捷方式，但是有可能你仍然可以在这里找到一些隐藏的宝石。让我们来看看。

| **键盘快捷键** | **动作** |
| --- | --- |
| `Ctrl+T` | 打开一个新标签页 |
| `Ctrl+N` | 打开一个新窗口 |
| `Ctrl+Shift+N` | 打开一个新无痕式窗口 |
| `Ctrl+W` | 关闭当前标签页 |
| `Ctrl+Shift+T` | 重新打开上一个关闭的标签页 |
| `Ctrl+Shift+W` | 关闭窗口 |
| `Ctrl+Tab` 和 `Ctrl+Shift+Tab` | 切换到右侧或左侧的标签页 |
| `Ctrl+L` | 访问搜索/地址栏 |
| `Ctrl+D` | 将网址放入书签 |
| `Ctrl+H` | 访问浏览历史 |
| `Ctrl+J` | 访问下载历史 |
| `Shift+Esc` | 打开 Chrome 任务管理器 |

你可以[下载这份有用的 Chrome 键盘快捷键列表来作为快速参考](tmp.3qZNXSy2FC#download-cheatsheet)。

#### 1、用 `Ctrl+T` 打开一个新标签页

需要打开一个新标签页吗？只需同时按 `Ctrl` 和 `T` 键，你就会打开一个新标签。

#### 2、使用 `Ctrl+N` 打开一个新窗口

已经打开太多标签页？是时候打开一个新的窗口。使用 `Ctrl` 和 `N` 键打开一个新的浏览器窗口。

#### 3、使用 `Ctrl+Shift+N` 隐身

在线查询航班或酒店价格？隐身可能会有所帮助。使用 `Ctrl+Shift+N` 在 Chrome 中打开一个隐身窗口。

#### 4、使用 `Ctrl+W` 关闭标签页

使用 `Ctrl` 和 `W` 键关闭当前标签页。无需将鼠标移到顶部并寻找 `x` 按钮。

#### 5、不小心关闭了标签页？用 `Ctrl+Shift+T` 重新打开

这是我最喜欢的 Google Chrome 浏览器快捷方式。当你关闭了原本不想关的标签页时，就不用再懊悔了。使用 `Ctrl+Shift+T`，它将打开最后一个关闭的选项卡。继续按此组合键，它把关闭的选项卡再次打开。

#### 6、使用 `Ctrl+Shift+W` 关闭整个浏览器窗口

完成工作了吗？是时候关闭带有所有标签页的整个浏览器窗口了。使用 `Ctrl+Shift+W` 键，浏览器窗口将消失，就像以前不存在一样。

#### 7、使用 `Ctrl+Tab` 在标签之间切换

打开的标签页太多了吗？你可以使用 `Ctrl+Tab` 移至右侧标签页。想左移吗？使用 `Ctrl+Shift+Tab`。重复按这些键，你可以在当前浏览器窗口的所有打开的标签页之间移动。

你也可以使用 `Ctrl+0` 直到 `Ctrl+9` 转到前 10 个标签页之一。但是此 Chrome 键盘快捷键不适用于第 11 个及更多标签页。

#### 8、使用 `Ctrl+L` 转到搜索/地址栏

想要输入新的 URL 或快速搜索一些内容。你可以使用 `Ctrl+L`，它将在顶部突出显示地址栏。

#### 9、用 `Ctrl+D` 收藏当前网站

找到了有趣的东西？使用 `Ctrl+D` 组合键将其保存在书签中。

#### 10、使用 `Ctrl+H` 返回历史记录

你可以使用 `Ctrl+H` 键打开浏览器历史记录。如果你正在寻找前一段时间访问过的页面，或者删除你不想再看到的页面，可以搜索历史记录。

#### 11、使用 `Ctrl+J` 查看下载

在 Chrome 中按 `Ctrl+J` 键将带你进入下载页面。此页面将显示你执行的所有下载操作。

#### 意外惊喜：使用 `Shift+Esc` 打开 Chrome 任务管理器

很多人甚至都不知道 Chrome 浏览器中有一个任务管理器。Chrome 以消耗系统内存而臭名昭著。而且，当你打开大量标签时，找到罪魁祸首并不容易。

使用 Chrome 任务管理器，你可以查看所有打开的标签页及其系统利用率统计信息。你还可以看到各种隐藏的进程，例如 Chrome 扩展程序和其他服务。

![Google Chrome 任务管理器](/data/attachment/album/201911/09/214220eihkx470ilyb57cz.png)

### 下载 Chrome 快捷键备忘单

我知道掌握键盘快捷键取决于习惯，你可以通过反复使用使其习惯。为了帮助你完成此任务，我创建了此 Google Chrome 键盘快捷键备忘单。

![Google Chrome 键盘快捷键备忘单](/data/attachment/album/201911/09/214225w4t9zhu933n4hnon.png)

你可以[下载以下 PDF 格式的图像](https://drive.google.com/open?id=1lZ4JgRuFbXrnEXoDQqOt7PQH6femIe3t)，进行打印并将其放在办公桌上。这样，你可以一直练习快捷方式。

如果你对掌握快捷方式感兴趣，还可以查看 [Ubuntu 键盘快捷键](https://itsfoss.com/ubuntu-shortcuts/)。

顺便问一下，你最喜欢的 Chrome 快捷方式是什么？

---

via: <https://itsfoss.com/google-chrome-shortcuts/>

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


如何拥有一个 Windows 10 和 Debian 10 的双系统

Summary: 在无数次劝说自己后，你终于做出了一个大胆的决定，试试 Linux。

是否要将 grub 的引导装载程序安装到主引导记录表（MBR）上？<br />
win10都是用UEFI的，还来MBR这套？

win10 的ubuntu子系统就挺好

win10 的ubuntu子系统就挺好

在无数次劝说自己后，你终于做出了一个大胆的决定，试试 Linux。

在无数次劝说自己后，你终于做出了一个大胆的决定，试试 Linux。不过，在完全熟悉 Linux 之前，你依旧需要使用 Windows 10 系统。幸运的是，通过一个双系统引导设置，能让你在启动时，选择自己想要进入的系统。在这个指南中，你会看到如何 如何双重引导 Windows 10 和 Debian 10。

![如何拥有一个 Windows 10 和 Debian 10 的双系统](/data/attachment/album/201911/09/233210opqiyx6wabpmg3mo.jpg)

### 前提条件

在开始之前，确保你满足下列条件:

* 一个 Debian 10 的可引导 USB 或 DVD
* 一个快速且稳定的网络（为了安装更新以及第三方软件）

另外，记得注意你系统的引导策略（UEFI 或 Legacy），需要确保两个系统使用同一种引导模式。

### 第一步：在硬盘上创建一个空余分区

第一步，你需要在你的硬盘上创建一个空余分区。之后，这将是我们安装 Debian 系统的地方。为了实现这一目的，需要使用下图所示的磁盘管理器：

同时按下 `Windows + R` 键，启动“运行程序”。接下来，输入 `diskmgmt.msc`，按回车键。

![启动“运行程序”](/data/attachment/album/201911/09/233211ozdhwo5whprgfuhf.jpg)

这会启动“磁盘管理”窗口，它会显示你 Windows 上所有已有磁盘。

![磁盘管理](/data/attachment/album/201911/09/233213vg9wktcwq8x9bdjk.jpg)

接下来，你需要为安装的 Debian 系统创建空余空间。为此，你需要缩小其中一个磁盘（卷）上的分区，从而创建一个未分配的新分区。在这个例子里，我会从 D 盘中创建一个 30 GB 的新分区。

为了缩小一个卷，右键点击它，然后选中选项 “<ruby> 缩小 <rt>  Shrink volume… </rt></ruby>”。

![缩小卷](/data/attachment/album/201911/09/233216ifgpprpmrem6r763.jpg)

在弹出窗口中，定义你想缩小的空间大小。记住，这是将来要安装 Debian 10 的磁盘空间。我选择了 30000MB（大约 30 GB）。压缩完成后，点击“<ruby> 缩小 <rt>  Shrink </rt></ruby>”。

![缩小空间](/data/attachment/album/201911/09/233217h98agckbz8g8azbv.jpg)

在缩小操作结束后，你会看到一个如下图所示的未分配分区：

![未分配分区](/data/attachment/album/201911/09/233219cmmi5qiy7xbtb900.jpg)

完美！现在可以准备开始安装了。

### 第二步：开始安装 Debian 10

空余分区已经创建好了，将你的可引导 USB 或安装 DVD 插入电脑，重新启动系统。记得更改 BIOS 中的引导顺序，需要在启动时按住功能键（通常，根据品牌不同，是 `F9`、`F10` 或 `F12` 中的某一个）。 这一步骤，对系统是否能进入安装媒体来说，至关重要。保存 BIOS 设置，并重启电脑。

如下图所示，界面会显示一个新的引导菜单：点击 “Graphical install”。

![图形化界面安装](/data/attachment/album/201911/09/233219pl11ykpa303yk116.jpg)

下一步，选择你的偏好语言，然后点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![设置语言-Debian10](/data/attachment/album/201911/09/233221jfl6mhh33j6urs6l.jpg)

接着，选择你的地区，点击“<ruby> 继续 <rt>  Continue </rt></ruby>”。 根据地区，系统会自动选择当地对应的时区。如果你无法找到你所对应的地区，将界面往下拉， 点击“<ruby> 其他 <rt>  Other </rt></ruby>”后，选择相对应位置。

![选择地区-Debain10](/data/attachment/album/201911/09/233223hhdax2xlottj69jh.jpg)

而后，选择你的键盘布局。

![设置键盘-Debain10](/data/attachment/album/201911/09/233224fh799y4x45d7wov5.jpg)

接下来，设置系统的主机名，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![设置主机名-Debian10](/data/attachment/album/201911/09/233226g6mzdm489qx6165m.jpg)

下一步，确定域名。如果你的电脑不在域中，直接点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”按钮。

![设置域名-Debian10](/data/attachment/album/201911/09/233228zihd2h4gcnzin0ca.jpg)

然后，如图所示，设置 root 密码，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![设置 root 密码-Debian10](/data/attachment/album/201911/09/233230u76rxjz406rxhc0h.jpg)

下一步骤，设置账户的用户全名，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![设置用户全名-debain10](/data/attachment/album/201911/09/233231e6fyso706e1ac1e5.jpg)

接着，设置与此账户相关联的用户名。

![指定用户名-Debian10](/data/attachment/album/201911/09/233232yp9dpprp77f09wmr.jpg)

下一步，设置用户密码，点击“<ruby> 继续 <rt>  Continue </rt></ruby>”。

![设置用户密码-Debian10](/data/attachment/album/201911/09/233233nk0ezjtk0452sp2u.jpg)

然后，设置时区。

![设置时区-Debian10](/data/attachment/album/201911/09/233234ftx2pzi2222ypxv1.jpg)

这时，你要为 Debian10 安装创建分区。如果你是新手用户，点击菜单中的第一个选项，“<ruby> 使用最大的连续空余空间 <rt>  Use the largest continuous free space </rt></ruby>”，点击“<ruby> 继续 <rt>  Continue </rt></ruby>”。

![使用最大的连续空余空间-debian10](/data/attachment/album/201911/09/233236a7annxppnsnx7r8r.jpg)

不过，如果你对创建分区有所了解的话，选择“<ruby> 手动 <rt>  Manual </rt></ruby>” 选项，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![选择手动-Debain10](/data/attachment/album/201911/09/233237jniibn6fg2sicmpz.jpg)

接着，选择被标记为 “<ruby> 空余空间 <rt>  FREE SPACE </rt></ruby>” 的磁盘，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>” 。接下来，点击“<ruby> 创建新分区 <rt>  Create a new partition </rt></ruby>”。

![创建新分区-Debain10](/data/attachment/album/201911/09/233238dz0bd4e0vb4oy48y.jpg)

下一界面，首先确定交换空间大小。我的交换空间大小为 2GB，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![确定交换空间大小-debian10](/data/attachment/album/201911/09/233239jbs31s3aym7sz1sf.jpg)

点击下一界面的 “<ruby> 主分区 <rt>  Primary </rt></ruby>”，点击“<ruby> 继续 <rt>  Continue </rt></ruby>”。

![磁盘主分区-Debian10](/data/attachment/album/201911/09/233242tbztabtzegbuxglf.jpg)

选择在磁盘 “<ruby> 初始位置 <rt>  beginning </rt></ruby>” 创建新分区后，点击继续。

![在初始位置创建-Debain10](/data/attachment/album/201911/09/233243hy2yrygyg3p1gyiy.jpg)

选择 “<ruby> Ext 4 日志文件系统 <rt>  Ext 4 journaling file system </rt></ruby>”，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![选择 Ext4 日志文件系统-debain10](/data/attachment/album/201911/09/233244wxkjkbxtaxkzxx24.jpg)

下个界面选择“<ruby> 交换空间 <rt>  swap space </rt></ruby>” ，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![选择交换空间-debian10](/data/attachment/album/201911/09/233245kkvu8f36463u4z6x.jpg)

选中 “<ruby> 完成此分区设置 <rt>  done setting the partition </rt></ruby>”，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![完成此分区设置-debian10](/data/attachment/album/201911/09/233246f19dao3dkpbee8ji.jpg)

返回磁盘分区界面，点击 “<ruby> 空余空间 <rt>  FREE SPACE </rt></ruby>”，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![点击空余空间-Debain10](/data/attachment/album/201911/09/233248v7tmef7g7gxtx8br.jpg)

为了让自己能轻松一点，选中 “<ruby> 自动为空余空间分区 <rt>  Automatically partition the free space </rt></ruby>”后，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![自动为空余空间分区-Debain10](/data/attachment/album/201911/09/233249sckt6vtds6okstkj.jpg)

接着点击 “<ruby> 将所有文件存储在同一分区（新手用户推荐） <rt>  All files in one partition (recommended for new users) </rt></ruby>”。

![将所有文件存储在同一分区-debian10](/data/attachment/album/201911/09/233250r5i73btugnv0igeu.jpg)

最后， 点击 “<ruby> 完成分区设置，并将改动写入磁盘 <rt>  Finish partitioning and write changes to disk </rt></ruby>” ，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![完成分区设置，并将改动写入磁盘](/data/attachment/album/201911/09/233251wlklxh4ux9h5llwf.jpg)

确定你要将改动写入磁盘，点击 “<ruby> 是 <rt>  Yes </rt></ruby>”。

![将改动写入磁盘-Debian10](/data/attachment/album/201911/09/233253oape1ulwo7siua1o.jpg)

而后，安装程序会开始安装所有必要的软件包。

当系统询问是否要扫描其他 CD 时，选择 “<ruby> 否 <rt>  No </rt></ruby>” ，并点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![扫描其他CD-No-Debain10](/data/attachment/album/201911/09/233255dztzz94crzcttgbr.jpg)

接着，选择离你最近的镜像站点地区，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![Debian-镜像站点-国家](/data/attachment/album/201911/09/233258lulqrkkcq7b8lkhk.jpg)

然后，选择最适合你的镜像站点，点击“<ruby> 继续 <rt>  Continue </rt></ruby>”。

![选择镜像站点](/data/attachment/album/201911/09/233259ufootizhututb33t.jpg)

如果你打算使用代理服务器，在下面输入具体信息，没有的话就留空，点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![输入代理信息-debian10](/data/attachment/album/201911/09/233300mq4qtuq4u0gtt4vt.jpg)

随着安装进程的继续， 你会被问到，是否想参加一个软件包用途调查。你可以选择任意一个选项，之后点击“<ruby> 继续 <rt>  Continue </rt></ruby>”，我选择了“<ruby> 否 <rt>  No </rt></ruby>”。

![参与调查-debain10](/data/attachment/album/201911/09/233302m6o4wttpwpb4rywb.jpg)

在软件选择窗口选中你想安装的软件包，点击“<ruby> 继续 <rt>  Continue </rt></ruby>”。

![软件选择-debian10](/data/attachment/album/201911/09/233304dtk4ggz4gzxvneg9.jpg)

安装程序会将选中的软件一一安装，在这期间，你可以去喝杯咖啡休息一下。

系统将会询问你，是否要将 grub 的引导装载程序安装到主引导记录表（MBR）上。点击 “<ruby> 是 <rt>  Yes </rt></ruby>”，而后点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![安装-grub-bootloader-debian10](/data/attachment/album/201911/09/233305w88wzuu4wd0s085d.jpg)

接着，选中你想安装 grub 的硬盘，点击“<ruby> 继续 <rt>  Continue </rt></ruby>”。

![选择硬盘-安装 grub-Debian10](/data/attachment/album/201911/09/233308icgauggj72gagco9.jpg)

最后，安装完成，直接点击 “<ruby> 继续 <rt>  Continue </rt></ruby>”。

![安装完成-重新启动-debian10](/data/attachment/album/201911/09/233309yd1ev110n82uul12.jpg)

你现在应该会有一个列出 Windows 和 Debian 的 grub 菜单。为了引导 Debian 系统，往下选择 Debian。之后，你就能看见登录界面。输入密码之后，按回车键。

![Debian10-登录](/data/attachment/album/201911/09/233312tdbcshd6dbzqs66e.jpg)

这就完成了！这样，你就拥有了一个全新的 Debian 10 和 Windows 10 双系统。

![Debian10-Buster-Details](/data/attachment/album/201911/09/233313ji99iqjgmfzjnnuw.jpg)

---

via: <https://www.linuxtechi.com/dual-boot-windows-10-debian-10/>

作者：[James Kiarie](https://www.linuxtechi.com/author/james/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wenwensnow](https://github.com/wenwensnow) 校对：[wxy](https://github.com/wxy)

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


低价 Linux 智能手机 PinePhone 即将接受预订

Summary: 好消息是 PinePhone 将从 11 月 15 日开始接受预订。

昨天晚上在Ubuntu touch 那看了下，新支持的手机型号，linux.cn就碰到这篇文章，鼓励我换个gnu/linux的手机吗！~?  haha:):)

用安卓就是 支持 linux 手机了，是不是  gnu 应该是RMS该关心的事

来自湖北武汉的 Chrome Mobile 62.0|Android 7.1 用户

好消息是 PinePhone 将从 11 月 15 日开始接受预订。

![PinePhone Prototype | Image by Martjin Braam](/data/attachment/album/201911/10/220647vi11iianvw5wxebh.jpg)

你还记得[在 2017 年首次披露](https://itsfoss.com/pinebook-kde-smartphone/)的 Pine64 正在开发一个基于 Linux（可以运行 KDE Plasma 及其他发行版）的智能手机的事情吗？从那以后已经有一段时间了，但是好消息是 PinePhone 将从 11 月 15 日开始接受预订。

让我来为你提供有关 PinePhone 的更多详细信息，例如其规格、价格和发布日期。

### PinePhone：基于 Linux 的廉价智能手机

PinePhone 开发者套件已经经过了一些开发人员的测试，更多此类套件将于 11 月 15 日发货。你可以查看下面的照片：

![](/data/attachment/album/201911/10/220650l3lp6b02foynlzmy.jpg)

![](/data/attachment/album/201911/10/220651mu44wuozumi7lko4.jpg)

![](/data/attachment/album/201911/10/220651e5lp62cy2y5s17z5.jpg)

开发者套件是由 PINE A64 基板 + SOPine 模块 + 7 英寸触摸屏显示器 + 摄像头 + Wifi / BT + 外壳 + 锂离子电池盒 + LTE cat 4 USB 软件狗组成的组合套件。

这些组合套件可以使开发人员快速开始 PinePhone 开发。由于 PINE64 社区和 [KDE neon](https://neon.kde.org/) 的支持，主线 Linux 操作系统已经可以在 PINE A64 平台上构建。

#### PinePhone 规格

* Allwinner A64 四核 SoC，带有 Mali 400 MP2 GPU
* 2GB 的 LPDDR3 RAM
* 5.95 英寸 LCD 1440×720，长宽比 18：9（钢化玻璃）
* 可启动的 Micro SD
* 16GB eMMC
* 高清数字视频输出
* USB Type-C（电源、数据和视频输出）
* Quectel EG-25G 全球波段
* WiFi：802.11 b/g/n，单频，支持热点
* 蓝牙：4.0，A2DP
* GNSS：GPS，GPS-A，GLONASS
* 振动器
* RGB 状态 LED
* 自拍和主摄像头（分别为 2/5 Mpx）
* 主摄像头：单颗 OV6540、5MP，1/4 英寸，LED 闪光灯
* 自拍相机：单 GC2035、2MP，f/2.8、1/5 英寸
* 传感器：加速器、陀螺仪、距离感应器、罗盘、气压计、环境光感
* 3 个外部开关：上、下和电源
* 硬件开关：LTE/GNSS、WiFi、麦克风、扬声器、USB
* 三星 J7 外形尺寸 3000mAh 电池
* 外壳是磨砂黑色成品塑料
* 耳机插孔

#### 产品、价格和交付时间

PinePhone 的价格约为 150 美元。尝鲜版命名为“勇敢的心”，将于 2019 年 11 月 15 日开始销售。如上图所示，[Pine64 的主页](https://www.pine64.org/)包含了用于首次预订 PinePhone 的计时器。

预期“勇敢的心”尝鲜版在 2019 年 12 月或 2020 年 1 月之前发货。

大规模生产将在中国的农历新年后开始，也就是说在 2020 年第二季度早期或最早 2020 年 3 月开始。

该电话尚未在 Pine Store 中列出，因此，如果你想成为尝鲜者之一，请务必查看 [Pine64 在线商店](https://store.pine64.org/)以预订“勇敢的心”版本。

#### 你对 PinePhone 如何看？

Pine64 已经开发了一款名为 [Pinebook](https://itsfoss.com/pinebook-linux-notebook/) 的廉价笔记本电脑和一款功能相对强大的 [Pinebook Pro](https://itsfoss.com/pinebook-pro/) 笔记本电脑。因此，PinePhone 至少在 DIY 爱好者和 Linux 忠实拥护者的狭窄市场中绝对有希望获得成功。与其他价格超过 600 美元的 [Linux 智能手机 Librem5](https://itsfoss.com/librem-linux-phone/) 相比，低廉的价格绝对是一个巨大的优势。

PinePhone 的另一个优点是，你可以通过安装 Ubuntu Touch、Plasma Mobile 或 Aurora OS/Sailfish OS 来试验操作系统。

这些基于 Linux 的智能手机尚不具备取代 Android 或 iOS 的功能。如果你正在寻找功能全面的智能手机来替代你的 Android 智能手机，那么 PinePhone 当然不适合你。但对于喜欢尝试并且不害怕排除故障的人来说，它的优势更大。

如果你想购买 PinePhone，请记住这个日期并设置提醒。供应应该是限量的，到目前为止，我所了解的，Pine 设备很快就会脱销。

你要预订 PinePhone 吗？在评论部分将你的意见告知我们。

---

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

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


在 Fedora 上优化 bash 或 zsh

![](/data/attachment/album/201911/10/233630ibjmiz5lz6egtizr.jpg)

本文将向你展示如何在 Fedora 的命令行解释器（CLI）Shell 中设置一些强大的工具。如果使用bash（默认）或zsh，Fedora 可让你轻松设置这些工具。

### 前置需求

这需要一些已安装的软件包。在 Fedora 工作站上，运行以下命令：

```
sudo dnf install git wget curl ruby ruby-devel zsh util-linux-user redhat-rpm-config gcc gcc-c++ make
```

在 Silverblue 上运行：

```
sudo rpm-ostree install git wget curl ruby ruby-devel zsh util-linux-user redhat-rpm-config gcc gcc-c++ make
```

注意：在 Silverblue 上，你需要重新启动才能继续。

### 字体

你可以通过安装新字体使终端焕然一新。为什么不使用可以同时显示字符和图标的字体呢？

#### Nerd-Fonts

打开一个新终端，然后键入以下命令：

```
git clone https://github.com/ryanoasis/nerd-fonts ~/.nerd-fonts
cd .nerd-fonts
sudo ./install.sh
```

#### Awesome-Fonts

在工作站上，使用以下命令进行安装：

```
sudo dnf fontawesome-fonts
```

在 Silverblue 上键入：

```
sudo rpm-ostree install fontawesome-fonts
```

### Powerline

Powerline 是 vim 的状态行插件，并为其他几个应用程序也提供了状态行和提示符，包括 bash、zsh、tmus、i3、Awesome、IPython 和 Qtile。你也可以在官方[文档站点](https://powerline.readthedocs.io/en/latest/)上找到更多信息。

#### 安装

要在 Fedora 工作站上安装 Powerline 实用程序，请打开一个新终端并运行：

```
sudo dnf install powerline vim-powerline tmux-powerline powerline-fonts
```

在 Silverblue 上，命令更改为：

```
sudo rpm-ostree install powerline vim-powerline tmux-powerline powerline-fonts
```

注意：在 Silverblue 上，你需要重新启动才能继续。

#### 激活 Powerline

要使 Powerline 默认处于活动状态，请将下面的代码放在 `~/.bashrc` 文件的末尾：

```
if [ -f `which powerline-daemon` ]; then
  powerline-daemon -q
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  . /usr/share/powerline/bash/powerline.sh
fi
```

最后，关闭终端并打开一个新终端。它看起来像这样：

![](/data/attachment/album/201911/10/233630se888x8gnmlve7x1.png)

### Oh-My-Zsh

[Oh-My-Zsh](https://ohmyz.sh) 是用于管理 Zsh 配置的框架。它捆绑了有用的功能、插件和主题。要了解如何将 Zsh 设置为默认外壳程序，请参见[这篇文章](https://fedoramagazine.org/set-zsh-fedora-system/)。

#### 安装

在终端中输入：

```
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
```

或者，你也可以输入以下内容：

```
sh -c "$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"
```

最后，你将看到如下所示的终端：

![](/data/attachment/album/201911/10/233631fedw90m9l0lsn6je.png)

恭喜，Oh-my-zsh 已安装成功。

#### 主题

安装后，你可以选择主题。我喜欢使用 powerlevel10k。优点之一是它比 powerlevel9k 主题快 100 倍。要安装它，请运行以下命令行：

```
git clone https://github.com/romkatv/powerlevel10k.git ~/.oh-my-zsh/themes/powerlevel10k
```

并在你的 `~/.zshrc` 文件设置 `ZSH_THEME`：

```
ZSH_THEME=powerlevel10k/powerlevel10k
```

关闭终端。再次打开终端时，powerlevel10k 配置向导将询问你几个问题以正确配置提示符。

![](/data/attachment/album/201911/10/233631roa3cb7i4a9cg9m4.png)

完成 powerline10k 配置向导后，你的提示符将如下所示：

![](/data/attachment/album/201911/10/233632tonks69eaplpandj.png)

如果你不喜欢它。你可以随时使用 `p10k configure` 命令来运行 powerline10k 向导。

#### 启用插件

插件存储在 `.oh-my-zsh/plugins` 文件夹中。要激活插件，你需要编辑 `~/.zshrc` 文件。安装插件意味着你创建了一系列执行特定功能的别名或快捷方式。

例如，要启用 firewalld 和 git 插件，请首先编辑 `~/.zshrc`：

```
plugins=(firewalld git)
```

注意：使用空格分隔插件名称列表。

然后重新加载配置：

```
source ~/.zshrc
```

要查看创建的别名，请使用以下命令：

```
alias | grep firewall
```

![](/data/attachment/album/201911/10/233632eg0gjo0xvv2r23st.png)

#### 更多配置

我建议安装语法高亮和语法自动建议插件。

```
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
```

将它们添加到文件 `~/.zshrc` 的插件列表中。

```
plugins=( [plugins...] zsh-syntax-highlighting zsh-autosuggestions)
```

重新加载配置。

```
source ~/.zshrc
```

查看结果：

![](/data/attachment/album/201911/10/233633oud6d2dd36dmi556.png)

### 彩色的文件夹和图标

`colorls` 是一个 ruby gem，可使用颜色和超棒的字体图标美化终端的 `ls` 命令。你可以访问官方[网站](https://github.com/athityakumar/colorls)以获取更多信息。

因为它是个 ruby gem，所以请按照以下简单步骤操作：

```
sudo gem install colorls
```

要保持最新状态，只需执行以下操作：

```
sudo gem update colorls
```

为防止每次输入 `colorls`，你可以在 `~/.bashrc` 或 `~/.zshrc` 中创建别名。

```
alias ll='colorls -lA --sd --gs --group-directories-first'
alias ls='colorls --group-directories-first'
```

另外，你可以为 `colorls` 的选项启用制表符补完功能，只需在 shell 配置末尾输入以下行：

```
source $(dirname ($gem which colorls))/tab_complete.sh
```

重新加载并查看会发生什么：

![](/data/attachment/album/201911/10/233633tkdkwiir16kvdu44.png)

![](/data/attachment/album/201911/10/233634e5qnyr3rsab5zx5r.png)

---

via: <https://fedoramagazine.org/tuning-your-bash-or-zsh-shell-in-workstation-and-silverblue/>

作者：[George Luiz Maluf](https://fedoramagazine.org/author/georgelmaluf/) 选题：[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/) 荣誉推出


确认了！微软 Edge 浏览器将发布 Linux 版

Summary: 微软正在全面重制其 Edge Web 浏览器，它将基于开源 Chromium 浏览器。微软还要将新的 Edge 浏览器带到 Linux 桌面上，但是 Linux 版本可能会有所延迟。

![](/data/attachment/album/201911/11/164600uv7yrbe7gtkxi4xg.jpg)

>
> 微软正在全面重制其 Edge Web 浏览器，它将基于开源 [Chromium](https://itsfoss.com/install-chromium-ubuntu/) 浏览器。微软还要将新的 Edge 浏览器带到 Linux 桌面上，但是 Linux 版本可能会有所延迟。
>
>
>

微软的 Internet Explorer 曾经一度统治了浏览器市场，但在过去的十年中，它将统治地位丢给了谷歌的 Chrome。

微软试图通过创造 Edge 浏览器来找回失去的位置，Edge 是一种使用 EdgeHTML 和 [Chakra 引擎](https://itsfoss.com/microsoft-chakra-core/)构建的全新 Web 浏览器。它与 Microsoft 的数字助手 [Cortana](https://www.microsoft.com/en-in/windows/cortana) 和 Windows 10 紧密集成。

但是，它仍然无法夺回冠军位置，截至目前，它处于[桌面浏览器使用份额的第四位](https://en.wikipedia.org/wiki/Usage_share_of_web_browsers)。

最近，微软决定通过基于[开源 Chromium 项目](https://www.chromium.org/Home)重新对 Edge 进行大修。谷歌的 Chrome 浏览器也是基于 Chromium 的。[Chromium 还可以作为独立的 Web 浏览器使用](https://itsfoss.com/install-chromium-ubuntu/)，某些 Linux 发行版将其用作默认的 Web 浏览器。

### Linux 上新的微软 Edge Web 浏览器

经过最初的犹豫和不确定性之后，微软似乎最终决定把新的 Edge 浏览器引入到 Linux。

在其年度开发商大会 [Microsoft Ignite](https://www.microsoft.com/en-us/ignite) 中，[关于 Edge 浏览器的演讲](https://myignite.techcommunity.microsoft.com/sessions/79341?source=sessions)中提到了它未来将进入 Linux 中。

![微软确认 Edge 未来将进入 Linux 中](/data/attachment/album/201911/11/164757wk894wznusaog4dk.jpg)

新的 Edge 浏览器将于 2020 年 1 月 15 日发布，但我认为 Linux 版本会推迟。

### 微软 Edge 进入 Linux 真的重要吗？

微软 Edge 进入 Linux 有什么大不了的吗？我们又不是没有很多[可用于 Linux 的 Web 浏览器](https://itsfoss.com/open-source-browsers-linux/)？

我认为这与 “微软 Linux 竞争”（如果有这样的事情）有关。微软为 Linux（特别是 Linux 桌面）做的任何事情，都会成为新闻。

我还认为 Linux 上的 Edge 对于微软和 Linux 用户都有好处。这就是为什么。

#### 对于微软有什么用？

当谷歌在 2008 年推出其 Chrome 浏览器时，没有人想到它会在短短几年内占领市场。但是，为什么作为一个搜索引擎会在一个“免费的 Web 浏览器”后面投入如此多的精力呢？

答案是谷歌是一家搜索引擎，它希望有更多的人使用其搜索引擎和其他服务，以便它可以从广告服务中获得收入。使用 Chrome，Google 是默认的搜索引擎。在 Firefox 和 Safari 等其他浏览器上，谷歌支付了数亿美元作为默认 Web 浏览器的费用。如果没有 Chrome，则谷歌必须完全依赖其他浏览器。

微软也有一个名为 Bing 的搜索引擎。Internet Explorer 和 Edge 使用 Bing 作为默认搜索引擎。如果更多用户使用 Edge，它可以增加将更多用户带到 Bing 的机会。而微软显然希望拥有更多的 Bing 用户。

#### 对 Linux 用户有什么用？

对于 Linux 桌面用户，我看到有两个好处。借助 Edge，你可以在 Linux 上使用某些微软特定的产品。 例如，微软的流式游戏服务 [xCloud](https://www.pocket-lint.com/games/news/147429-what-is-xbox-project-xcloud-cloud-gaming-service-price-release-date-devices) 可能仅能在 Edge 浏览器上使用。另一个好处是提升了 [Linux 上的 Netflix 体验](https://itsfoss.com/watch-netflix-in-ubuntu-linux/)。当然，你可以在 Linux 上使用 Chrome 或 [Firefox 观看 Netflix](https://itsfoss.com/netflix-firefox-linux/)，但可能无法获得全高清或超高清流。

据我所知，[全高清和超高清 Netflix 流仅在微软 Edge 上可用](https://help.netflix.com/en/node/23742)。这意味着你可以使用 Linux 上的 Edge 以高清格式享受 Netflix。

### 你怎么看？

你对微软 Edge 进入 Linux 有什么感觉？当 Linux 版本可用时，你会使用吗？请在下面的评论部分中分享你的观点。

---

via: <https://itsfoss.com/microsoft-edge-linux/>

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


酌一杯云之酒，以开源佐之 ——专访灵雀云陈恺

>
> 在云原生技术实践峰会召开前夕，匆匆奔赴北京的我，见到了刚刚从美国飞回来，却毫无时差之扰的陈恺——灵雀云的 CTO。
>
>
>

![](/data/attachment/album/201911/11/212652is95t99bz659m9l5.jpeg)

虽然我早就和灵雀云有了联系，也有好几位朋友在灵雀云任职，不过作为国内新锐云原生厂商灵雀云的创始人之一的陈恺，我之前并没有直接接触过。虽然我们是初次相识，但是在聊到了开源，聊到云技术，我们以云做老酒，以开源为佐酒菜，很快就俨然如同老友般进入了旁若无人的状态——旁边的朋友被我们暂时性忽视了，虽然这张合影就是她帮我们照的。 :D

滥觞始于云计算。

### 缘起

陈恺和左玥等人在创立灵雀云之前，他们都曾在微软 Azure 从事云计算领域的专业研究。回忆起那时候，陈恺说，那时他们也在想象云里面的应用应该长什么样子，设计最早版本的“云服务模型”、“云服务运行时”，而现在回过头看，其实云计算的发展已经千差万别。

2013 年 Docker 出现以后，左玥和陈恺他们第一时间就意识到容器技术会很有影响力，它重新了定义云技术之后发展的路径，这恍然在他们面前掀开了一个新的时代，于是灵雀云诞生了。

云技术领域发展演变的非常快，事实上，在云计算早期并不能预见到如今的云计算格局。“早期我们尝试过很多东西，总的想法是觉得容器就像是一种轻量级虚拟机，一种新的虚拟化技术。就像虚拟机需要虚拟机平台去作为它的管理平台一样，容器也需要一个容器云平台，所以我们早期想做的就是容器云平台，这一点一直没变，现在也是在做企业级的容器平台。”陈恺说，“我们最早的技术选型是 Mesos 技术栈，经历了几次大的改变，包括从 Mesos 转到支持当时的三种主流的调度系统，然后开始倾向于Kubernetes，到最后全面转向 Kubernetes，以及最近在架构上和 Kubernetes全面对齐，把我们的平台做成一个 Kubernetes 原生的平台，技术上一直在做升级。”

### 云原生吞噬一切，Kubernetes 编排一切

![云原生正在吞噬世界](/data/attachment/album/201911/11/212853gy1qfcrmjtccj12m.jpeg)

不知不觉之间，云原生已经吞噬了整个世界，如今，云原生已经是技术界最时髦的词汇之一。而应运而生并推动了这一切发生的云原生计算基金会（CNCF）也在不同的时期、不同的场所，对云原生做了不同角度的解读。那么作为一家很早就涉入云计算领域的新锐力量，陈恺对云原生的理解是什么呢？

陈恺说，“CNCF 旗下涵盖这么多云计算的技术、产品和服务，所以它对‘云原生’的定义必然会比较宽泛，但的确，‘云原生’不是一个特定的技术或者一种方法，很难把它精确的定义，也不应该把它和具体的技术对等，比如说把它直接跟 Kubernetes 挂钩，跟 Kubernetes 没关系就不是云原生？跟 Kubernetes 有关系就叫云原生？这两者都是不对的。”

他接着补充说，“我对云原生定义的观点也是比较宽泛的，（云原生）就是**让应用能够最大化的释放云计算生产力的一系列的思维方式、最佳实践和技术体系**，这里的关键词是**让应用去释放云计算最大的生产力**。这是关键。所有的云原生我觉得都是首先应该围绕应用的。什么叫‘云原生’？主要是以应用为中心的。‘原生’这个名字看起来起的不是很好，听上去似乎是只有在云上生出来的才叫‘云原生’，或者只有在公有云上才叫‘云原生’，并不是。关键不是说你在哪里跑你的应用，而是你是不是能够释放云的生产力——广义的云的生产力。”

在容器编排市场尚三分天下的时候，很多容器服务商都同时支持三种主流的编排系统，当时有一些观点认为这种三分格局会持续比较久，然而 Kubernetes 迅速崛起，很快就一家独大地统治了容器编排市场。

陈恺说，“我觉得当时 Kubernetes 可以很快的从编排之争当中胜出，并没有那么让人吃惊。为什么我们比较早的时候就开始往 Kubernetes 发力？其实第一个触发的点比较偶然。那时经常会有人问起三种容器编排系统各自的优势是什么？我们做了一些研究，业界有一些对比，当时我印象比较深的是一个细节，我觉得这才是关键——有一项对比的是基于这三种技术有哪些商业版？基于 Docker Swarm 的有一个商业版 Docker EE；Mesos 有一个商业版 MesosPhere；基于 Kubernetes 有**好多**商业版——这是本质的区别。这一点对它们的社区的发展速度和后续影响很广，因为它是开放式的治理。Kubernetes 虽然是谷歌发明的，但是它是开放式治理，背后有很多商业版。如果从开源软件本身社区发展角度看，很关键一点是上面有多少商业版，商业版越多说明从开源软件里面可以获利的公司越多，这样就有了正向的良性循环，会有更多资源投进来，社区里面参与的人就会更多，最后的发展会更好，生态会很繁荣。当时从这一点我们就觉得这个生态肯定会赢。”

Kubernetes 一统容器编排市场的今天，业界一些专家对此有所忧虑，担心这种垄断会形成市场压制。从长期来看，如果 Kubernetes 的发展会形成类似 Android 一样的巨头化，那么作为下游厂商，灵雀云是如何看待和应对这种发展变化的呢？

陈恺说，“回到垄断这个问题，如果是商业软件的话会有垄断这个问题，如果是开源软件的话，它的治理模式有可能是封闭式的，也有可能是开放式的，而 Kubernetes 是一个开放式的治理模式，会有一些厂商有更大的影响力，但不是被一家完全控制，所以我觉得从这个角度来说，谈不上垄断，更多的是一个标准。它可能更多像 Linux 而不像是 Android。从标准的角度来说，肯定是利大于弊，而且是远大于弊。因为有了标准，大家都围绕着标准做投入，风险就大大降低，可以放心去投入，也就会有越来越多的技术厂商会向它靠拢。”

### 灵雀云的 Kubernetes 生态

灵雀云在围绕 Kubernetes 生态方面也做了自己的发行版，他们是如何在符合 Kubernetes 标准的基础上形成差异化的服务和产品的呢？

“Kubernetes 发行版首先必须是跟 Kubernetes 兼容的。在 Kubernetes 上可以增加各种各样的能力，但它本身的第一属性一定是一个真正的 Kubernetes。如果为了做差异性，把它做得不像 Kubernetes，不兼容会是个很大的问题。”陈恺说，“我们走的比这个更深一步，我们的 ACP 2.0 是把整个平台都做成 Kubernetes 原生的，因为 Kubernetes 本质上是声明式 API 加上基于控制器模型的架构设计范式，容器编排相当于它的一个副产品，是它基于这个架构的一种应用，当然也可以把这种架构应用到对任意资源的编排。前一段时间有一篇很多人转发的《[Kubernetes 编排一切](/article-11565-1.html)》的文章，讲的就是这个事情，它不光可以用来编排容器，可以做各种各样的事情。我很赞同这个观点。”

![陈恺在云原生技术实践峰会 2019 上演讲](/data/attachment/album/201911/11/221412ebjs7da2noszozq2.jpeg)

灵雀云是从 2017 年底的时候决定这样做的，当时的做法是一些新的产品开始在新的架构上做一些实践，比如 DevOps 平台、基于 Istio 的 Service Mesh 等产品，完全基于新的架构来做。今年年初，灵雀云认为所有方面都成熟了：第一，方向肯定没问题，Kubernetes 编排一切；第二，对如何基于 Kubernetes 的架构构建上层产品有了更多的经验和体会。灵雀云于是把以前产品上的所有功能都逐渐迁移到 Kubernetes 原生架构上，重新融合到统一的架构里面，这就是 ACP 2.0。在此之上灵雀云还做了一些差异化。

灵雀云在这里的技术栈分为三层：

最底层的产品是一个 Kubernetes 发行版，Kubernetes 是一个开源的技术，并不是一个平台，大多数企业做不到直接把它当一个平台用。灵雀云的做法是将 Kubernetes 技术变成一个企业就绪的 Kubernetes 发行版。

再往上是 ACP 层，定位是云原生应用赋能平台。包含有三个子产品：容器平台、DevOps 平台和基于 Istio 的 Service Mesh 产品。容器平台和发行版最接近，但对发行版进行了大量扩展，比如在发行版之上增加了多集群管理和企业级多租户。ACP 把单一的 Kubernetes 集群变成企业平台级的产品，经过了三年多 100+ 企业客户生产环境的考验，而且考虑到更多开发者的场景。DevOps 也基于 Kubernetes 原生，用 Kubernetes 去编排所有的工具，定位是一个开放式 DevOps 工具链集成和编排的平台。

在此之上还有一层是灵雀云新的 ACE 3.0，它的定位是一个企业级的 PaaS 平台，或者用现在更时髦的说法，可以称之为企业技术中台，集成了更多企业需要的其他服务，比如第三方的中间件、开发框架等。它是个完整的技术中台，以容器平台为底座，以云原生黄金三角为核心，其他服务在上面做成一个个插件。这部分主要是和生态合作伙伴合作，国内外的一些最优秀的 PaaS 类服务都可以放在里面，为企业提供完整的解决方案。

### 云原生之于微服务和 DevOps

我们知道微服务、DevOps 等模式在云原生概念发展起来之前就已经存在，但是随着云原生的发展，似乎给它们注入了更多的活力。

陈恺认为云原生显著地推动了 DevOps、微服务的发展，对于这一现象他还专门用了一个词汇来形容：**后 Kubernetes**。这是在容器和 Kubernetes 出现之后开始对 DevOps 侧的微服务反过来的助推。

他认为，微服务架构的本质是用运维复杂度为代价去换取敏捷性。企业至少要考虑两件事：第一是否真的有这么高的敏捷性需求，值得用那么大的运维代价去替换，第二，假设你有着敏捷性需求，那么多出来的复杂度怎么办？早期微服务落地会很痛苦，因为大家没有准备好怎么去应付这个复杂度，而且会低估它。这复杂度是未知的，用未知的复杂度去替代已知的复杂度，这通常都是不好的，所以才会有各种各样的治理框架出来。其实它需要底下有一个好的基础设施来支撑它。

容器和微服务天生一对，容器 Kubernetes 的出现，对微服务有非常明显地推动。Kubernetes 作为底层的应用管理平台非常合适，而且很多微服务里面要考虑的与业务无关的能力也可以慢慢推到 Kubernetes 里面去。而进一步，Service Mesh 等其上的技术栈就重新定义了微服务技术栈，微服务治理方式发生了变化，反过来作用到微服务上，形成了新的最佳实践。

因此，要做微服务应该先容器化，才能解决运维复杂度的问题，容器化的服务应该跑在 Kubernetes 之上；如果进一步做服务治理，应该往 Service Mesh 方向走，Service Mesh 是基于 Kubernetes 平台的微服务治理的最佳实践。

云原生之于 DevOps 也是如此。早期大家很多的精力在持续集成上面，比如 Jenkins 最初是作为 CI 工具出现的，而有了容器和 Kubernetes 之后，持续集成变得简化了，最终生成 Docker 镜像就好。重心开始转到部署，转到 CD 上。而且，现在的 DevOps 实践或 CI/CD 通常会把 Kubernetes 作为最重要的部署目标。也就是说CI会围绕容器镜像，CD 会围绕 Kubernetes。这是容器和 Kubernetes 带给 DevOps 的影响，基础设施越强大，对 DevOps、微服务就越有帮助。以 Kubernetes 为核心的基础设施变成新的标准，DevOps 和微服务的一些最佳实践都会围绕它去改变。

### 源于开源，茁壮于开源

云计算构筑在开源之上，灵雀云的基础设施和服务也构建在开源之上，那么灵雀云是如何拥抱开源和贡献开源的？

陈恺说，“有几个开源社区跟我们是非常相关的，最早的时候是 Docker 社区，现在 Kubernetes 则是跟我们关系最大的开源社区。我们核心的产品是容器、DevOps 和微服务三部分。Jenkins、Istio 等相关开源项目是我们的重点，我们非常重视在开源社区的投入。我们的许多工程师会参与其中，对社区进行贡献，也会开源一些项目，我们在一步一步持续地做这件事情。我们首先会选择一些偏底层的技术或者机制，选择那些有足够亮点，真的被需要的项目和技术开源出来。”

目前灵雀云已经开源了的项目，包括基于 OVN 的网络插件 Kube-OVN，它是把 OVN 的网络和 Kubernetes 所集成的网络插件。现在该项目在国内外都受到关注，也有来自外部贡献者参与。另外一个开源的项目叫 Captain，是一个基于 Helm v3 标准的 Kubernetes 控制器，对 Helm 应用分发进行改进。

![](/data/attachment/album/201911/11/220957x0ymkzhmu2ssywks.png)

后续灵雀云还计划将更完整的东西放出来，比如灵雀云的 Kubernetes 发行版，供社区用户用来管理自己的 Kubernetes 平台，可以达到和使用灵雀云产品接近的体验。另外灵雀云也计划将其 ACP 释放社区版或者开源版本出来。陈恺说，“我们很乐意把它开源出来，因为这是一个标准的产品，我们让它较早期的接触更多用户，也能得到更多反馈，甚至吸收一些外部的贡献者参与进来。”

### 尾声

我采访过很多技术领袖和技术专家，不过陈恺的这场采访让我有一点不同的感受。一场对话下来，陈恺给我的感觉如同多年的老友一样言无不尽，而他对于我提到的每个话题，都非常认真、仔细的做了阐述，让人感到浓浓的专业技术风格。我想，这就是陈恺的技术初心，也是灵雀云一直以来的风格吧。

---

>
> ![](/data/attachment/album/201911/11/221151hpr5ycqy555crjqr.png)
>
>
> “穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访，将为大家介绍中国开源领域中一些积极推动开源，谙熟开源思想的技术人，并辨析其思考、挖掘其动因，揭示其背后所发生的事情，为关注开源、有志于开源的企业和技术人标出一条路径。
>
>
> 取名为“穿山甲”寓意有二：取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用；穿山甲是珍稀保护动物，宣传公益。
>
>
>


克隆 MAC 地址来绕过强制门户

![](/data/attachment/album/201911/11/234459tiio6ix8sx6pu0o8.jpg)

如果你曾经在家和办公室之外连接到 WiFi，那么通常会看到一个门户页面。它可能会要求你接受服务条款或其他协议才能访问。但是，当你无法通过这类门户进行连接时会发生什么？本文向你展示了如何在 Fedora 上使用 NetworkManager 在某些故障情况下让你仍然可以访问互联网。

### 强制门户如何工作

强制门户是新设备连接到网络时显示的网页。当用户首次访问互联网时，门户网站会捕获所有网页请求并将其重定向到单个门户页面。

然后，页面要求用户采取一些措施，通常是同意使用政策。用户同意后，他们可以向 RADIUS 或其他类型的身份验证系统进行身份验证。简而言之，强制门户根据设备的 MAC 地址和终端用户接受条款来注册和授权设备。（MAC 地址是附加到任何网络接口的[基于硬件的值](https://en.wikipedia.org/wiki/MAC_address)，例如 WiFi 芯片或卡。）

有时设备无法加载强制门户来进行身份验证和授权以使用 WiFI 接入。这种情况的例子包括移动设备和游戏机（Switch、Playstation 等）。当连接到互联网时，它们通常不会打开强制门户页面。连接到酒店或公共 WiFi 接入点时，你可能会看到这种情况。

不过，你可以在 Fedora 上使用 NetworkManager 来解决这些问题。Fedora 可以使你临时克隆要连接的设备的 MAC 地址，并代表该设备通过强制门户进行身份验证。你需要得到连接设备的 MAC 地址。通常，它被打印在设备上的某个地方并贴上标签。它是一个六字节的十六进制值，因此看起来类似 `4A:1A:4C:B0:38:1F`。通常，你也可以通过设备的内置菜单找到它。

### 使用 NetworkManager 克隆

首先，打开 `nm-connection-editor`，或通过“设置”打开 WiFi 设置。然后，你可以使用 NetworkManager 进行克隆：

* 对于以太网：选择已连接的以太网连接。然后选择 “Ethernet” 选项卡。记录或复制当前的 MAC 地址。在 “<ruby> 克隆 MAC 地址 <rt>  Cloned MAC address </rt></ruby>” 字段中输入游戏机或其他设备的 MAC 地址。
* 对于 WiFi：选择 WiFi 配置名。然后选择 “WiFi” 选项卡。记录或复制当前的 MAC 地址。在 “<ruby> 克隆 MAC 地址 <rt>  Cloned MAC address </rt></ruby>” 字段中输入游戏机或其他设备的 MAC 地址。

### 启动所需的设备

当 Fedora 系统与以太网或 WiFi 配置连接，克隆的 MAC 地址将用于请求 IP 地址，并加载强制门户。输入所需的凭据和/或选择用户协议。该 MAC 地址将获得授权。

现在，断开 WiF i或以太网配置连接，然后将 Fedora 系统的 MAC 地址更改回其原始值。然后启动游戏机或其他设备。该设备现在应该可以访问互联网了，因为它的网络接口已通过你的 Fedora 系统进行了授权。

不过，这不是 NetworkManager 全部能做的。例如，请参阅[随机化系统硬件地址](/article-10028-1.html)，来获得更好的隐私保护。

---

via: <https://fedoramagazine.org/cloning-a-mac-address-to-bypass-a-captive-portal/>

作者：[Esteban Wilson](https://fedoramagazine.org/author/swilson/) 选题：[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/) 荣誉推出


为什么容器和 Kubernetes 有潜力运行一切

>
> 不仅可以部署简单的应用程序，还可以用 Kubernetes 运维器应对第 2 天运营。
>
>
>

![](/data/attachment/album/201911/12/011140mp75sd0ynppd77da.jpg)

在我的第一篇文章 [为什么说 Kubernetes 是一辆翻斗车](https://opensource.com/article/19/6/kubernetes-dump-truck) 中，我谈到了 Kubernetes 如何在定义、分享和运行应用程序方面很出色，类似于翻斗车在移动垃圾方面很出色。在第二篇中，[如何跨越 Kubernetes 学习曲线](https://opensource.com/article/19/6/kubernetes-learning-curve)，我解释了 Kubernetes 的学习曲线实际上与运行任何生产环境中的应用程序的学习曲线相同，这确实比学习所有传统组件要容易（如负载均衡器、路由器、防火墙、交换机、集群软件、集群文件系统等）。这是 DevOps，是开发人员和运维人员之间的合作，用于指定事物在生产环境中的运行方式，这意味着双方都需要学习。在第三篇 [Kubernetes 基础：首先学习如何使用](https://opensource.com/article/19/6/kubernetes-basics) 中，我重新设计了 Kubernetes 的学习框架，重点是驾驶翻斗车而不是制造或装备翻斗车。在第四篇文章 [帮助你驾驭 Kubernetes 的 4 个工具](https://opensource.com/article/19/6/tools-drive-kubernetes) 中，我分享了我喜爱的工具，这些工具可帮助你在 Kubernetes 中构建应用程序（驾驶翻斗车）。

在这最后一篇文章中，我会分享我为什么对在 Kubernetes 上运行应用程序的未来如此兴奋的原因。

从一开始，Kubernetes 就能够很好地运行基于 Web 的工作负载（容器化的）。Web 服务器、Java 和相关的应用程序服务器（PHP、Python等）之类的工作负载都可以正常工作。该平台处理诸如 DNS、负载平衡和 SSH（由 `kubectl exec` 取代）之类的支持服务。在我的职业生涯的大部分时间里，这些都是我在生产环境中运行的工作负载，因此，我立即意识到，除了 DevOps 之外，除了敏捷之外，使用 Kubernetes 运行生产环境工作负载的强大功能。即使是我们几乎不改变我们的文化习惯，也可以提高效率。调试和退役变得非常容易，而这对于传统 IT 来说是极为困难的。因此，从早期开始，Kubernetes 就用一种单一的配置语言（Kube YAML/Json）为我提供了对生产环境工作负载进行建模所需的所有基本原语。

但是，如果你需要运行具有复制功能的多主 MySQL，会发生什么情况？使用 Galera 的冗余数据呢？你如何进行快照和备份？那么像 SAP 这样复杂的工作呢？使用 Kubernetes，简单的应用程序（Web 服务器等）的第 0 天（部署）相当简单，但是没有解决第 2 天的运营和工作负载。这并不是说，具有复杂工作负载的第 2 天运营要比传统 IT 难解决，而是使用 Kubernetes 并没有使它们变得更容易。每个用户都要设计自己的天才想法来解决这些问题，这基本上是当今的现状。在过去的五年中，我遇到的第一类问题是复杂工作负载的第 2 天操作。（LCTT 译注：在软件生命周期中，第 0 天是指软件的设计阶段；第 1 天是指软件的开发和部署阶段；第 2 天是指生产环境中的软件运维阶段。）

值得庆幸的是，随着 Kubernetes <ruby> 运维器 <rt>  Operator </rt></ruby>的出现，这种情况正在改变。随着运维器的出现，我们现在有了一个框架，可以将第 2 天的运维知识汇总到平台中。现在，我们可以应用我在 [Kubernetes 基础：首先学习如何使用](https://opensource.com/article/19/6/kubernetes-basics) 中描述的相同的定义状态、实际状态的方法，现在我们可以定义、自动化和维护各种各样的系统管理任务。

（LCTT 译注： Operator 是 Kubernetes 中的一种可以完成运维工程师的特定工作的组件，业界大多没有翻译这个名词，此处仿运维工程师例首倡翻译为“运维器”。）

我经常将运维器称为“系统管理机器人”，因为它们实质上是在第 2 天的工作中整理出一堆运维知识，该知识涉及<ruby> 主题专家 <rt>  Subject Matter Expert </rt></ruby>（SME、例如数据库管理员或系统管理员）针对的工作负载类型（数据库、Web 服务器等），通常会记录在 Wiki 中的某个地方。这些知识放在 Wiki 中的问题是，为了将该知识应用于解决问题，我们需要：

1. 生成事件，通常监控系统会发现故障，然后我们创建故障单
2. SME 人员必须对此问题进行调查，即使这是我们之前见过几百万次的问题
3. SME 人员必须执行该知识（执行备份/还原、配置 Galera 或事务复制等）

通过运维器，所有这些 SME 知识都可以嵌入到单独的容器镜像中，该镜像在有实际工作负荷之前就已部署。 我们部署运维器容器，然后运维器部署和管理一个或多个工作负载实例。然后，我们使用“运维器生命周期管理器”（Katacoda 教程）之类的方法来管理运维器。

因此，随着我们进一步使用 Kubernetes，我们不仅简化了应用程序的部署，而且简化了整个生命周期的管理。运维器还为我们提供了工具，可以管理具有深层配置要求（群集、复制、修复、备份/还原）的非常复杂的有状态应用程序。而且，最好的地方是，构建容器的人员可能是做第 2 天运维的主题专家，因此现在他们可以将这些知识嵌入到操作环境中。

### 本系列的总结

Kubernetes 的未来是光明的，就像之前的虚拟化一样，工作负载的扩展是不可避免的。学习如何驾驭 Kubernetes 可能是开发人员或系统管理员可以对自己的职业发展做出的最大投资。随着工作负载的增多，职业机会也将增加。因此，这是驾驶一辆令人惊叹的 [在移动垃圾时非常优雅的翻斗车](https://opensource.com/article/19/6/kubernetes-dump-truck)……

你可能想在 Twitter 上关注我，我在 [@fatherlinux](https://twitter.com/fatherlinux) 上分享有关此主题的很多内容。

---

via: <https://opensource.com/article/19/6/kubernetes-potential-run-anything>

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


第 0 天/第 1 天/第 2 天：云时代的软件生命周期

![](/data/attachment/album/201911/12/112035eg1zrhg1abv040aq.jpg)

在当今的专业 IT 媒体中有一个非常突出的话题，那就是在软件生命周期中的“第 0 天/第 1 天/第 2 天”。在演讲和会议讲话当中，通常着重于使软件开发过程有效且易于管理，为此，有必要明确定义所使用的概念。通常，如果直观地理解基本术语“<ruby> 第 0 天 <rp>  （ </rp> <rt>  Day 0 </rt> <rp>  ） </rp></ruby>/<ruby> 第 1 天 <rp>  （ </rp> <rt>  Day 1 </rt> <rp>  ） </rp></ruby>/<ruby> 第 2 天 <rp>  （ </rp> <rt>  Day 2 </rt> <rp>  ） </rp></ruby>”，这在谈论软件生命周期时可能会引起一些歧义。因此，我决定更准确地定义它们，以展示软件开发的整个过程以及它们在实际项目中的使用方式。这篇简短的博客文章提供了“天”的定义，这些“天”被理解为软件生命周期的各个阶段。它还描述了云如何改变了有关软件开发和维护过程的传统思维方式。毕竟，正如《[RightScale 2019 云状态报告](https://www.flexera.com/about-us/press-center/rightscale-2019-state-of-the-cloud-report-from-flexera-identifies-cloud-adoption-trends.html)》所确认的那样，我们正处于“云时代”。该报告解释说，有 94％ 的调查受访者正在使用云（私有云或公有云）。因此，闲话少说，让我们探讨一下“天”和云如何结合在一起。

### “天”究竟是什么？

在 IT 中，术语“第 0 天/第 1 天/第 2 天”指的是软件生命周期的不同阶段。用军事术语来说，“第 0 天”是训练的第一天，新兵进入训练阶段。在软件开发中，它代表设计阶段，在此阶段中指定项目需求并确定解决方案的体系结构。

“第 1 天”涉及开发和部署在“第 0 天”阶段设计的软件。在此阶段，我们不仅创建应用程序本身，还创建应用程序的基础设施、网络、外部服务，并实现所有部分的初始配置。

“第 2 天”是产品出厂或交付给客户的时间。在这里，大部分工作都集中在维护、监控和优化系统上。分析系统的行为并做出正确的反应至关重要，因为所产生的反馈循环将一直持续到应用程序生命周期结束为止。

在云时代之前的日子里，这些阶段是分别处理的，彼此之间没有重叠。今天，情况已不再如此。让我们看一下所有这些如何应用于现代应用程序的生命周期。

#### 第 0 天：无聊但必不可少

第 0 天经常被忽略，因为它可能很无聊，但这并不会降低其重要性。成功的软件产品是经过全面规划和设计过程的结果。必须仔细计划系统或应用程序的体系结构以及启动和运行所需的资源（CPU、存储空间、RAM）。其次，你应该定义可衡量的里程碑，以实现项目目标。每个里程碑应有一个准确的日期。这有助于衡量项目的进度，并确定你是否延迟了计划运行。所有项目时间估算都应基于概率，而不仅仅是按最佳情况预估。进行计划时，最好添加缓冲余量，因为意外事件甚至可能使精心策划的计划陷入困境。测试阶段也起着重要的作用，也应该包括在初始项目计划中。这些是基本要求，它们在“云时代”中同以往一样重要。

尽管如此，在计算资源的第 0 天计划中，云还是改变了两件事。由于云可以在项目的任何地方获得不同的资源或新资源（CPU、存储空间、RAM），因此比本地基础设施要容易得多。因此，可以避免在计划阶段犯下的一些错误。另一方面，在计划阶段对特定云供应商的承诺可能会在以后导致供应商锁定。这可能会花费你的金钱，并且需要时间来进行更改，因此选择云供应商时要明智一些。

其次，正如我们当前在向云的迁移中观察到的那样，与运维相关的工作依旧保持不变，但不再专注于基础设施。现在，正是软件在推动着自动化和价值。

#### 第 1 天：实现创意的阶段

对于开发人员和项目负责人而言，第 1 天绝对是最有趣的阶段。最初的设计得以实现，并根据项目的规范创建了基础设施。为了成为真正的云原生，必须遵守最佳实践。可以遵循诸如<ruby> <a href="https://en.wikipedia.org/wiki/Twelve-Factor_App_methodology">  十二要素应用程序方法 </a> <rp>  （ </rp> <rt>  Twelve-Factor Apps methodology </rt> <rp>  ） </rp></ruby>之类的准则。此外，使用云端意味着你应该遵循重要的 DevOps 惯例：持续集成/持续交付（如果你想了解有关 CI/CD 的更多信息，请参阅我们的[博客文章](https://codilime.com/what-is-ci-cd-all-you-need-to-know/)）。

云为我们带来了从传统方法到软件开发的重要变化：将第一行代码拼凑在一起以进行概念验证后，应用程序即开始运行。你可以从持续集成实践开始，以测试你的应用程序的健全性，但是你很快会让企业迈入到持续交付。在开发应用程序时，我们开始引入一些运维元素，尤其是在使用多个环境的情况下。注意这些运维要素将使维护团队在维护阶段（第 2 天）的工作更加轻松。

在第 1 天期间可以使用几种工具。可以将它们按解决的问题分组。这个列表的顶部应提及“<ruby> 基础设施即代码 <rp>  （ </rp> <rt>  Infrastructure-as-a-code </rt> <rp>  ） </rp></ruby>”（IaaC）。 IaaC 就像应用程序或代码一样管理运维环境。这种方法允许将 DevOps 最佳实践（包括版本控制、虚拟化测试和持续监视）应用于驱动基础设施的代码。这里有很多工具可供我们使用，例如 Terraform、Ansible 或 Puppet 等。第二类工具与容器的自动化部署和管理的容器编排系统有关。Kubernetes 及其实现（例如 Google Kubernetes Engine 和亚马逊的 Elastic Kubernetes Service）至关重要。最后，还有诸如 Jenkins、Zuul 和 CircleCI 之类的 CI/CD 系统，可帮助工程师自动化软件的构建、测试以及交付或部署。

### 第 2 天：日常运维环节

一旦软件准备就绪，它就会上线，客户开始使用它。第 2 天始于此，并引入了包括软件维护和客户支持在内的各个元素。该软件本身将不断发展，以适应不断变化的需求和客户需求。在第 2 天期间，主要重点是建立反馈循环。我们监控该应用程序的工作方式，收集用户反馈并将其发送给开发团队，该团队将在产品中实施该应用程序并发布新版本。军事术语“<ruby> 观察-导向-决定-行动 <rp>  （ </rp> <rt>  Observe-Orient-Decide-Act </rt> <rp>  ） </rp></ruby>”（OODA）恰当地抓住了这一阶段发生的事情。

* 观察：从监视系统获取信息（资源使用情况和指标，应用程序性能监控）。
* 导向：执行问题的根本原因分析。
* 决定：找到解决问题的方法。
* 行动：实施解决方案。

与战斗中一样，该循环不断重复。

监控程序基于<ruby> 服务水平协议 <rp>  （ </rp> <rt>  Service Level Agreement </rt> <rp>  ） </rp></ruby>（SLA）中定义的要求。 SLA 基于<ruby> 服务水平目标 <rp>  （ </rp> <rt>  Service Level Objectives </rt> <rp>  ） </rp></ruby>（SLO），代表我们的<ruby> 服务水平指标 <rp>  （ </rp> <rt>  Service Level Indicators </rt> <rp>  ） </rp></ruby>（SLI）的状态。自动化和监控是解决第 2 天职责的关键。

有几种工具可帮助完成第 2 天的工作。 <ruby> 应用程序性能监控 <rp>  （ </rp> <rt>  Application Performance Monitoring </rt> <rp>  ） </rp></ruby>（APM）类软件可以帮助 IT 管理员监控应用程序性能，从而提供高质量的用户体验。在这里，我们可以点名 Datadog、Dynatrace、SignalFX 或 Nutanix Xi Epoch。 还有一些自动化和编排工具，例如 Ansible 或 Kubernetes，可帮助管理应用程序环境。你可能已经注意到，这些工具的应用与第 1 天的工作重叠。最后，工单系统（例如 Servicedesk 或 Zendesk）可以处理客户服务，使用户可以报告故障以及与他们正在运行的应用程序有关的问题。

![Day 0/Day 1/Day 2 – stages of software lifecycle](/data/attachment/album/201911/12/113158jnakrheqk99ih6a6.png)

### 云将改变游戏规则

在前云时代，这些阶段之间的分隔清晰可见，但是今天，随着云的日常运行，事物在不断变化。使用云和现代软件开发实践，可以更轻松地处理软件生命周期中不断变化的要求。持续集成/持续开发方法使我们能够动态响应客户反馈并实时改进应用程序，而无需等待主要版本进行改进。

基于云和原生云的软件中的 DevOps 实践有助于实现<ruby> 向左移动 <rp>  （ </rp> <rt>  shift left </rt> <rp>  ） </rp></ruby>（LCTT 译注：环节前置的意思），这意味着传统上一直保留到最后的步骤现在可以更快地执行。除此以外，这导致第 1 天和第 2 天现在相互重叠。此外，传统软件开发的最大痛点在于从第 1 天到第 2 天的过渡：从开发人员到运维人员的过渡。现在，DevOps 展示了如何解决此问题：及早启动流程，并使流程一直运行到应用程序生命周期结束。最后但同样重要的是，工具链正在完善，这使得执行第 1 天的任务和适应第 2 天的更改成为可能。 可以根据我们的需求对所使用的工具进行建模，并且过程中涉及的每个人都可以使用同一套工具。


如何使用 cron 任务在 Linux 中计划和自动化任务

有时，你可能需要定期或以预定的时间间隔执行任务。这些任务包括备份数据库、更新系统、执行定期重新引导等。这些任务称为 “cron 任务”。cron 任务用于“自动执行的任务”，它有助于简化重复的、有时是乏味的任务的执行。cron 是一个守护进程，可让你安排这些任务，然后按指定的时间间隔执行这些任务。在本教程中，你将学习如何使用 cron 来安排任务。

![](/data/attachment/album/201911/13/221859va2t4gg0amlgza00.jpg)

### crontab 文件

crontab 即 “cron table”，是一个简单的文本文件，其中包含指定任务执行时间间隔的规则和命令。 crontab 文件分为两类：

1）系统范围的 crontab 文件

这些通常由需要 root 特权的 Linux 服务及关键应用程序使用。系统 crontab 文件位于 `/etc/crontab` 中，并且只能由 root 用户访问和编辑。通常用于配置系统范围的守护进程。`crontab` 文件的看起来类似如下所示：

![etc-crontab-linux](/data/attachment/album/201911/13/221926siiz8jl9hzj1n001.png)

2）用户创建的 crontab 文件

Linux 用户还可以在 `crontab` 命令的帮助下创建自己的 cron 任务。创建的 cron 任务将以创建它们的用户身份运行。

所有 cron 任务都存储在 `/var/spool/cron`（对于 RHEL 和 CentOS 发行版）和 `/var/spool/cron/crontabs`（对于 Debian 和 Ubuntu 发行版）中，cron 任务使用创建该文件的用户的用户名列出。

cron 守护进程在后台静默地检查 `/etc/crontab` 文件和 `/var/spool/cron` 及 `/etc/cron.d*/` 目录。

`crontab` 命令用于编辑 cron 文件。让我们看一下 crontab 文件的结构。

### crontab 文件剖析

在继续之前，我们要首先探索 crontab 文件的格式。crontab 文件的基本语法包括 5 列，由星号表示，后跟要执行的命令。

```
*    *    *    *    *    command
```

此格式也可以表示如下：

```
m h d moy dow command
```

或

```
m h d moy dow /path/to/script
```

让我们来解释一下每个条目

* `m`：代表分钟。范围是 0 到 59
* `h`：表示小时，范围是 0 到 23
* `d`：代表一个月中的某天，范围是 1 到 31
* `moy`：这是一年中的月份。范围是 1 到 12
* `dow`：这是星期几。范围是 0 到 6，其中 0 代表星期日
* `command`：这是要执行的命令，例如备份命令、重新启动和复制命令等

### 管理 cron 任务

看完 crontab 文件的结构之后，让我们看看如何创建、编辑和删除 cron 任务。

#### 创建 cron 任务

要以 root 用户身份创建或编辑 cron 任务，请运行以下命令：

```
# crontab -e
```

要为另一个用户创建或安排 cron 任务，请使用以下语法：

```
# crontab -u username -e
```

例如，要以 Pradeep 用户身份运行 cron 任务，请发出以下命令：

```
# crontab -u Pradeep -e
```

如果该 crontab 文件尚不存在，那么你将打开一个空白文本文件。如果该 crontab 文件已经存在，则 `-e` 选项会让你编辑该文件，

#### 列出 crontab 文件

要查看已创建的 cron 任务，只需传递 `-l` 选项：

```
# crontab -l
```

#### 删除 crontab 文件

要删除 cron 任务，只需运行 `crontab -e` 并删除所需的 cron 任务行，然后保存该文件。

要删除所有的 cron 任务，请运行以下命令：

```
# crontab -r
```

然后，让我们看一下安排任务的不同方式。

### 使用 crontab 安排任务示例

如图所示，所有 cron 任务文件都带有<ruby> 释伴 <rt>  shebang </rt></ruby>标头。

```
#!/bin/bash
```

这表示你正在使用的 shell，在这种情况下，即 bash shell。

接下来，使用我们之前指定的 cron 任务条目指定要安排任务的时间间隔。

要每天下午 12:30 重启系统，请使用以下语法：

```
30  12 *  *  * /sbin/reboot
```

要安排在凌晨 4:00 重启，请使用以下语法：

```
0  4  *  *  *  /sbin/reboot
```

注：星号 `*` 用于匹配所有记录。

要每天两次运行脚本（例如，凌晨 4:00 和下午 4:00），请使用以下语法：

```
0  4,16  *  *  *  /path/to/script
```

要安排 cron 任务在每个星期五下午 5:00 运行，请使用以下语法：

```
0  17  *  *  Fri  /path/to/script
```

或

```
0 17  *  *  *  5  /path/to/script
```

如果你希望每 30 分钟运行一次 cron 任务，请使用：

```
*/30  *  *  *  * /path/to/script
```

要安排 cron 任务每 5 小时运行一次，请运行：

```
*  */5  *  *  *  /path/to/script
```

要在选定的日期（例如，星期三和星期五的下午 6:00）运行脚本，请执行以下操作：

```
0  18  *  *  wed,fri  /path/to/script
```

要使用单个 cron 任务运行多个命令，请使用分号分隔任务，例如：

```
*  *  *  *  *  /path/to/script1 ; /path/to/script2
```

### 使用特殊字符串节省编写 cron 任务的时间

某些 cron 任务可以使用对应于特定时间间隔的特殊字符串轻松配置。例如，

1）`@hourly` 时间戳等效于 `0 * * * *`

它将在每小时的第一分钟执行一次任务。

```
@hourly /path/to/script
```

2）`@daily` 时间戳等效于 `0 0 * * *`

它在每天的第一分钟（午夜）执行任务。它可以在执行日常工作时派上用场。

```
@daily /path/to/script
```

3）`@weekly` 时间戳等效于 `0 0 * * 0`

它在每周的第一分钟执行 cron 任务，一周第一天是从星期日开始的。

```
@weekly /path/to/script
```

3）`@monthly` 时间戳等效于 `0 0 1 * *`

它在每月第一天的第一分钟执行任务。

```
@monthly /path/to/script
```

4）`@yearly` 时间戳等效于 `0 0 1 1 *`

它在每年的第一分钟执行任务，可以用于发送新年问候。

```
@yearly /path/to/script
```

### 限制 crontab

作为 Linux 用户，你可以控制谁有权使用 `crontab` 命令。可以使用 `/etc/cron.deny` 和 `/etc/cron.allow` 文件来控制。默认情况下，只有一个 `/etc/cron.deny` 文件，并且不包含任何条目。要限制用户使用 `crontab` 实用程序，只需将用户的用户名添加到该文件中即可。当用户添加到该文件中，并且该用户尝试运行 `crontab` 命令时，他/她将遇到以下错误。

![restricted-cron-user](/data/attachment/album/201911/13/221926c78xq9bfub5nqbf5.png)

要允许用户继续使用 `crontab` 实用程序，只需从 `/etc/cron.deny` 文件中删除用户名即可。

如果存在 `/etc/cron.allow` 文件，则仅文件中列出的用户可以访问和使用 `crontab` 实用程序。

如果两个文件都不存在，则只有 root 用户具有使用 `crontab` 命令的特权。

### 备份 crontab 条目

始终建议你备份 crontab 条目。为此，请使用语法：

```
# crontab -l > /path/to/file.txt
```

例如：

```
# crontab -l > /home/james/backup.txt
```

### 检查 cron 日志

cron 日志存储在 `/var/log/cron` 文件中。要查看 cron 日志，请运行以下命令：

```
# cat /var/log/cron
```

![view-cron-log-files-linux](/data/attachment/album/201911/13/221927eqm44hmcoht41zcq.png)

要实时查看日志，请使用 `tail` 命令，如下所示：

```
# tail -f /var/log/cron
```

![view-live-cron-logs](/data/attachment/album/201911/13/221927bxvexvjeewkp8lzv.png)

### 总结

在本指南中，你学习了如何创建 cron 任务以自动执行重复性任务，如何备份和查看 cron 日志。我们希望本文提供有关 cron 作业的有用见解。请随时分享你的反馈和意见。

---

via: <https://www.linuxtechi.com/schedule-automate-tasks-linux-cron-jobs/>

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


如何在 CentOS 8/RHEL 8 上安装和配置 Nagios Core

Nagios 是一个自由开源的网络和警报引擎，它用于监控各种设备，例如网络设备和网络中的服务器。它支持 Linux 和 Windows，并提供了直观的 Web 界面，可让你轻松监控网络资源。经过专业配置后，它可以在服务器或网络设备下线或者故障时向你发出邮件警报。在本文中，我们说明了如何在 RHEL 8/CentOS 8 上安装和配置 Nagios Core。

![Install-Nagios-Core-RHEL8-CentOS8](/data/attachment/album/201911/13/230150f6q98q96b6ppflqm.jpg)

### Nagios Core 的先决条件

在开始之前，请先检查并确保有以下各项：

* RHEL 8/CentOS 8 环境
* 能通过 SSH 访问该环境
* 快速稳定的互联网连接

满足上述要求后，我们开始吧！

### 步骤 1：安装 LAMP

为了使 Nagios 能够按预期工作，你需要安装 LAMP 或其他 Web 软件，因为它们将在浏览器上运行。为此，请执行以下命令：

```
# dnf install httpd mariadb-server php-mysqlnd php-fpm
```

![Install-LAMP-stack-CentOS8](/data/attachment/album/201911/13/230153m2b7ejzvf7ii7hki.jpg)

你需要确保 Apache Web 服务器已启动并正在运行。为此，请使用以下命令启用并启动 Apache 服务器：

```
# systemctl start httpd
# systemctl enable httpd
```

![Start-enable-httpd-centos8](/data/attachment/album/201911/13/230154iudeuvekvvjeckmu.jpg)

检查 Apache 服务器运行状态：

```
# systemctl status httpd
```

![Check-status-httpd-centos8](/data/attachment/album/201911/13/230157jpcejdlbgjs8ebee.jpg)

接下来，我们需要启用并启动 MariaDB 服务器，运行以下命令：

```
# systemctl start mariadb
# systemctl enable mariadb
```

![Start-enable-MariaDB-CentOS8](/data/attachment/album/201911/13/230200wmkkhrgggr5m3bmr.jpg)

要检查 MariaDB 状态，请运行：

```
# systemctl status mariadb
```

![Check-MariaDB-status-CentOS8](/data/attachment/album/201911/13/230201b5tpood5yjz4upp4.jpg)

另外，你可能会考虑加强或保护服务器，使其不容易受到未经授权的访问。要保护服务器，请运行以下命令：

```
# mysql_secure_installation
```

确保为你的 MySQL 实例设置一个强密码。对于后续提示，请输入 “Y” 并按回车。

![Secure-MySQL-server-CentOS8](/data/attachment/album/201911/13/230204gdgw5gwk54k3wkgd.jpg)

### 步骤 2：安装必需的软件包

除了安装 LAMP 外，还需要一些其他软件包来安装和正确配置 Nagios。因此，如下所示安装软件包：

```
# dnf install gcc glibc glibc-common wget gd gd-devel perl postfix
```

![Install-requisite-packages-CentOS8](/data/attachment/album/201911/13/230207z126a3ow1aiowzh6.jpg)

### 步骤 3：创建 Nagios 用户帐户

接下来，我们需要为 Nagios 用户创建一个用户帐户。为此，请运行以下命令：

```
# adduser nagios
# passwd nagios
```

![Create-new-user-for-Nagios](/data/attachment/album/201911/13/230208engfz01gsgnsg32y.jpg)

现在，我们需要为 Nagios 创建一个组，并将 Nagios 用户添加到该组中。

```
# groupadd nagiosxi
```

现在添加 Nagios 用户到组中：

```
# usermod -aG nagiosxi nagios
```

另外，将 Apache 用户添加到 Nagios 组：

```
# usermod -aG nagiosxi apache
```

![Add-Nagios-group-user](/data/attachment/album/201911/13/230209w3lu0ex64p1945vl.jpg)

### 步骤 4：下载并安装 Nagios Core

现在，我们可以继续安装 Nagios Core。Nagios 4.4.5 的最新稳定版本于 2019 年 8 月 19 日发布。但首先，请从它的官方网站下载 Nagios tarball 文件。

要下载 Nagios Core，请首进入 `/tmp` 目录：

```
# cd /tmp
```

接下来下载 tarball 文件：

```
# wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.5.tar.gz
```

![Download-Nagios-CentOS8](/data/attachment/album/201911/13/230211uqt0r2i8geizuti2.jpg)

下载完 tarball 文件后，使用以下命令将其解压缩：

```
# tar -xvf nagios-4.4.5.tar.gz
```

接下来，进入未压缩的文件夹：

```
# cd nagios-4.4.5
```

按此顺序运行以下命令：

```
# ./configure --with-command-group=nagcmd
# make all
# make install
# make install-init
# make install-daemoninit
# make install-config
# make install-commandmode
# make install-exfoliation
```

要配置 Apache，请运行以下命令：

```
# make install-webconf
```

### 步骤 5：配置 Apache Web 服务器身份验证

接下来，我们将为用户 `nagiosadmin` 设置身份验证。请注意不要更改该用户名，否则，可能会要求你进一步的配置，这可能很繁琐。

要设置身份验证，请运行以下命令：

```
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
```

![Configure-Apache-webserver-authentication-CentOS8](/data/attachment/album/201911/13/230213n2uszxt99623tclu.jpg)

系统将提示你输入 `nagiosadmin` 用户的密码。输入并按要求确认密码。在本教程结束时，你将使用该用户登录 Nagios。

为使更改生效，请重新启动 Web 服务器：

```
# systemctl restart httpd
```

### 步骤 6：下载并安装 Nagios 插件

插件可以扩展 Nagios 服务器的功能。它们将帮助你监控各种服务、网络设备和应用。要下载插件的 tarball 文件，请运行以下命令：

```
# wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
```

接下来，解压 tarball 文件并进入到未压缩的插件文件夹：

```
# tar -xvf nagios-plugins-2.2.1.tar.gz
# cd nagios-plugins-2.2.1
```

要安装插件，请编译源代码，如下所示：

```
# ./configure --with-nagios-user=nagios --with-nagios-group=nagiosxi
# make
# make install
```

### 步骤 7：验证和启动 Nagios

成功安装 Nagios 插件后，验证 Nagios 配置以确保一切良好，并且配置中没有错误：

```
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
```

![Verify-Nagios-settings-CentOS8](/data/attachment/album/201911/13/230216t0hvokvmtv5ctcn7.jpg)

接下来，启动 Nagios 并验证其状态：

```
# systemctl start nagios
# systemctl status nagios
```

![Start-check-status-Nagios-CentOS8](/data/attachment/album/201911/13/230218ry6ty5dytkkdytw3.jpg)

如果系统中有防火墙，那么使用以下命令允许 ”80“ 端口：

```
# firewall-cmd --permanent --add-port=80/tcp# firewall-cmd --reload
```

### 步骤 8：通过 Web 浏览器访问 Nagios 面板

要访问 Nagios，请打开服务器的 IP 地址，如下所示：<http://server-ip/nagios> 。

这将出现一个弹出窗口，提示输入我们在步骤 5 创建的用户名和密码。输入凭据并点击“Sign In”。

![Access-Nagios-via-web-browser-CentOS8](/data/attachment/album/201911/13/230220oq9jz74qic6uzruw.jpg)

这将引导你到 Nagios 面板，如下所示：

![Nagios-dashboard-CentOS8](/data/attachment/album/201911/13/230225finsj8ggtygj0ji6.jpg)

我们终于成功地在 CentOS 8 / RHEL 8 上安装和配置了 Nagios Core。欢迎你的反馈。

---

via: <https://www.linuxtechi.com/install-nagios-core-rhel-8-centos-8/>

作者：[James Kiarie](https://www.linuxtechi.com/author/james/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


开源与标准：为什么对待专利如此不同？

Summary: 两者之间的差异对我们如何构建软件开发过程产生了影响。

两者之间的差异对我们如何构建软件开发过程产生了影响。

>
> 两者之间的差异对我们如何构建软件开发过程产生了影响。
>
>
>

![](/data/attachment/album/201911/14/134133sotop83i9i08fdhf.jpg)

制定标准规范和开源软件的开发有许多共同之处：两者都是竞争者可以合作的机制；两者都可以促进互操作性；两者都可用于促进新技术的采用；两者都可用于聚合或协调成熟技术。

一项技术可以同时使用标准和开源：有时一个先于另一个；在其他情况下，它们可以并行进行。它们越来越多地使用类似的工具和流程实践（例如，细粒度版本控制；利用问题跟踪器一起推动某些开发讨论）。

相似程度可能导致过度概括，错误地暗示一切都是可互换的（混合与搭配），在这儿选择一种做法；在那儿将它与一个过程相结合。实际上，获取在一个领域中获得的经验并查看它提供的好处是否可以在其他环境中获得，可能是有价值的。但是，对于某些实践而言，背景更为重要。

虽然有相似之处，但也存在显著差异。在前面的文章《[没有规则的治理：复刻潜力如何帮助项目](https://opensource.com/article/19/1/forking-good)》中，我讨论了在利用<ruby> 复刻 <rp>  （ </rp> <rt>  forking </rt> <rp>  ） </rp></ruby>潜力作为一种可以促进轻量级治理的力量方面，开源软件开发和标准开发治理能力的不同。另一个不同之处在于专利规则的选择。

### 如何对待专利

参与者专利权的处理通常在开源软件开发和标准开发中以不同方式排列。这种差异有一个理由。而且，这种差异会对构建开发过程产生影响。

* 开源：在为开源项目做出贡献时授予的专利许可通常由每个贡献者的贡献确定。
* 标准：参与者在标准制定方面做出的专利承诺通常由整个最终规范确定。

### 开源项目：基于贡献的专利规则

基于贡献的专利规则是什么意思？如果专利所有者提供软件，由于软件添加到项目中，项目软件侵犯了该贡献者拥有的专利，那么贡献者不应该返回来期望获得使用它所贡献的软件的专利许可费。当然，有许多不同的许可文本可以让我们忙于分析每个许可的解释，并讨论情况中的不确定性和细微差别。在另一篇文章中，我在 MIT 许可协议的背景下谈到了这个问题（《[为什么 MIT 的专利许可不讨人喜欢？](/article-9605-1.html)》）。我认为，基本上来说，开源开发中的共同期望就像我上面所描述的那样：当你为开源做出贡献时，你将为你提供的软件提供所有必需的权限，之后你将无法返回来再要求获得使用你所贡献软件的许可费。

### 标准制定：基于标准规范的专利规则

相比之下，在制定标准时，通常会有更高的期望：参与者应对专利做出承诺，这些专利对整个最终规范至关重要，而不仅仅是对其贡献。这些专利承诺并不取决于确定谁对规范提出了什么想法；对于那些参与开发规范的人来说，他们的承诺是整个标准规范。

### 包括在其中的专利

确定相关专利的分析在软件和规范之间也有所不同。软件通常包括与相应的标准规范相比不需要的实现细节；在提供软件时，将包括对这些细节使用任何专利的许可。相反，规范开发的专利承诺仅限于对规范“必要”或“必需”的专利。当然，这取决于规范的内容。对于互操作性标准，规范应仅包括实现互操作性所需的详细级别，从而允许实现细节在标准的竞争性实现之间有所不同。对必要专利的承诺不包括实施细节方面的专利，这些专利可用作竞争优势。

### 专利规则差异的基础

为什么在专利处理方面存在这种差异？鉴于标准和开源软件的开发方式存在差异，这种不同的处理方式很有意义。

更有限的与贡献范围相关的专利符合大多数协作软件开发的渐进式、开放式特性。开源项目经常持续发展，其方向可能会随着时间的推移而演化。虽然可以设置路线图和里程碑并发布快照版本，但这些不太常见，并且比标准项目中常见的范围限制和版本目标具有更少的限制性影响。

可以看出，考虑到标准规范开发结构的差异，标准开发的更高期望值（整个最终规范，不仅仅是贡献）是有意义的。标准规范通常采用具有明确范围的强版本导向演进。规范开发通常适用于特定的快照版本。标准开发活动通常具有一组目标功能（通常在诸如章程之类的文档中表示）。与许多软件开发活动的情况相比，这为可能应用到标准开发活动的技术范围提供了更清晰的公共的进展预期。这种范围的明确性有助于潜在参与者在开始参与时评估参与标准制定项目的专利影响。相比之下，开源软件开发项目更为开放，通常不会排除采用任何特定技术的可能性。

### 对开源项目和标准管理的影响

这些对待专利的不同措施需要不同的项目管理方法。

开源项目通常准备接受来自新贡献者的补丁。贡献者可能会随着时间的推移而来去。一些贡献者留下来。其他人可能会为该项目来解决一个有限的问题。通过软件贡献，可以更容易地了解谁贡献了什么软件，而不是准确理解谁以一种更抽象的方式“参与”。

另一方面，参与标准制定活动通常具有大量的正式手续。而且，在涉及专利承诺时，这种参与的正式性非常重要。当一个人参与该规范的大部分开发时，对最终规范的专利承诺是有意义的。标准制定过程是否可以从提供单一、有限贡献的人那里获得完整的最终规范承诺？重要的是要有一个过程，以便清楚地了解谁参与谁，谁不参与。需要明确参与者以支持来自实际专利所有者的专利承诺，实际专利所有者通常是由坐在桌旁（比喻，尽管这可能涉及实际的谈判桌）的个人所代表的公司。

如何获得基于规范的承诺？软件标准中典型的免许可费专利承诺最常被作为获得标准组织成员资格或负责规范开发的特定委员会成员资格的条件。为了使这一机制发挥作用，成员资格必须是一个定义明确的概念，以便有一个明确的成员资格决策点（即，用于触发专利承诺的明确行动）和承诺的受益人可以依赖的明确的记录文件。除了参与清晰度之外，为了促进持怀疑态度的专利参与者的参与，项目需要具有明确的范围和明确的开始和结束（明确指出专利承诺将适用的“最终规范”）。这种参与模式与典型的开源项目有很大不同，典型的开源项目可能有一个连续的参与，其范围包括维护几个主要的驱动程序到只提交一个补丁。

### 专利政策

虽然我所描述的差异通常是这种情况，但某些特定活动遵循不同模式可能有一些原因。例如，考虑作为标准开发活动附带的参考实现的软件。可能有一个强有力的理由期望参与者对完整的最终参考实施提供承诺，而不仅仅是限定于他们对它的贡献。当然，可能存在其他边缘情况；可能存在严格安排的开源开发；可能会有连续的、随心所欲的规范开发。

标准制定的专利政策可分为合理和非歧视（RAND）或免许可费（RF）：基本上来说，实施标准的专利许可费包括需要交（RAND）或不需要交（RF）。制定与软件相关的标准（本文的重点）更多地使用免许可费政策。关于专利许可费预期问题是许可或承诺范围政策之外的另一个维度。

### 结论

标准的制定和开源软件的开发通常具有不同的参与者专利期望范围（仅限于贡献或整个最终可交付成果）。这些不同的选择基于通常如何进行开发的显著差异，而不是任意差异。

---

作者简介：Scott Peterson 是红帽公司法律团队成员。很久以前，一位工程师就一个叫做 GPL 的奇怪文件向 Scott 征询法律建议，这个致命的问题让 Scott 走上了探索包括技术标准和开源软件在内的协同开发法律问题的纠结之路。

译者简介：薛亮，集慧智佳知识产权咨询公司总监，擅长专利检索、专利分析、竞争对手跟踪、FTO 分析、开源软件知识产权风险分析，致力于为互联网企业、高科技公司提供知识产权咨询服务。

![](/data/attachment/album/201911/14/133613zdtu0znd0no8ht93.jpg)


为什么区块链（可能会）来到你身边的物联网

Summary: 在物联网应用中实施区块链可能具有挑战性，并且需要对技术有深入的了解。

在物联网应用中实施区块链可能具有挑战性，并且需要对技术有深入的了解。

![MF3D / Getty Images](/data/attachment/album/201911/14/161529d3lqtttqvbe2993k.jpg)

各个公司发现，物联网与最近其他许多流行的企业级计算技术有着良好的合作关系，以支持加密货币而闻名的创新的分布式信任系统的区块链也不例外。然而，在物联网应用中实施区块链可能具有挑战性，并且需要对技术有深入的了解。

区块链是一个跟踪各种交易的分布式账本。链上的每个“块”都包含要防止篡改的交易记录或其他数据，并通过加密散列链接到前一个，这意味着对块的任何篡改都将使该链接无效。节点（几乎可以是其中装有 CPU 的任何节点）通过分布式的对等网络进行通信，以共享数据并确保链中数据的有效性。

北卡罗来纳大学格林波若分校的管理学教授 Nir Kshetri 表示，区块链系统之所以有效，是因为所有的块都必须就它们所保护的数据的细节达成一致。如果有人尝试更改给定节点上先前的事务，则存储在网络上的其余数据会回推回来。“数据的旧记录仍然存在，” Kshetri 说。

这是一项强大的安全技术 —— 如果没有坏人成功控制给定区块链上的所有（LCTT 译注：应为“大部分”）节点（[著名的“51％ 攻击”](https://bitcoinist.com/51-percent-attack-hackers-steals-18-million-bitcoin-gold-btg-tokens/)），那么该区块链保护的数据就不会被伪造或以其他方式弄乱。因此，对于在物联网世界某些角落的公司来说，使用区块链是一种有吸引力的选择也就不足为奇了。

物联网安全初创企业 NXMLabs 的首席技术官兼联合创始人 Jay Fallah 认为，除了区块链能够在网络上安全地分发可信信息的能力这一事实之外，部分原因还在于区块链在技术堆栈中的地位。

“区块链站在一个非常有趣的交叉点。在过去的 15 年中，在存储、CPU 等方面，计算技术一直在加速发展，但是直到最近，网络技术并没有发生太大变化。”他说，“ 区块链不是网络技术、不是数据技术，而是二者兼具。”

### 区块链和物联网

区块链作为物联网世界的部分意义取决于你在和谁交谈以及他们在出售什么，但是最接近的概括可能来自企业区块链供应商 Filament 的首席执行官 Allison Clift-Jenning。

她说：“在任何地方，人们都想互相信任，并且用的是非常古老的方式，这通常是进入场景的好地方。”

直接从 Filament 自己的客户群中挑选出来的一个例子是二手车销售。Filament 与“一家主要的底特律汽车制造商”合作，创建了一个受信任的车辆历史平台，该平台基于一种设备，该设备可插入二手车的诊断端口，从那里获取信息，并将该数据写入区块链。像这样，二手车的历史记录就是不可变的，包括它的安全气囊是否曾经打开过，是否被水淹过等等。任何不道德的二手车或不诚实的前车主都无法更改数据，甚至拔掉设备也将意味着记录中存在可疑的空白期。

SAP 物联网高级副总裁兼全球负责人 Elvira Wallis 表示，当今大多数区块链物联网方案都与信任和数据验证有关。

她说：“我们遇到的大多数用例都在项目的跟踪和溯源领域，”她举例说明了高端食品的农场到餐桌跟踪系统，该系统使用安装在板条箱和卡车上的区块链节点，这样就可以为物品在运输基础设施中创建无懈可击的记录。（例如，该牛排在这样的温度下冷藏了多长时间，今天运输了多长时间，等等。）

### 将区块链与物联网一起使用是个好主意吗？

不同的供应商针对不同的用例出售不同的基于区块链的产品，这些产品使用不同的区块链技术实现，其中一些与加密货币中所使用的经典的、线性的、挖矿式交易区块链不太一样。

这意味着你目前需要从供应商那里购买特定功能。451 Research 高级分析师 Csilla Zsigri 表示，很少有客户组织拥有可以实施区块链安全系统的内部专家。

她说，区块链技术的任何智能应用的想法都是发挥其优势，为关键信息创建可信赖的平台。

Zsigri 说：“这就是我真正看到增值的地方，只是增加了一层信任和验证。”

专家们一致认为，尽管相当了解基于区块链的物联网应用程序的基本概念，但它并不适用于每个物联网用例。 将区块链应用于非交易系统（尽管有例外，包括 NXM Labs 的用于物联网设备的基于区块链配置的产品）通常不是正确的举动。

如果不需要在两个不同的参与方之间共享数据，而是简单地将数据从传感器移到后端，那么区块链通常就没有意义，因为它实际上并没有为当前大多数物联网实现中的数据分析增加任何关键的增值。

“今天，我们仍处于区块链的早期拨号时代。”Clift-Jennings 说，“它比典型的数据库要慢，它甚至无法读取，也常常没有查询引擎。从本质上讲，你并没有真正获得隐私。”

---

via: <https://www.networkworld.com/article/3386881/why-blockchain-might-be-coming-to-an-iot-implementation-near-you.html>

作者：[Jon Gold](https://www.networkworld.com/author/Jon-Gold/) 选题：[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：安全杀毒软件 Defender ATP 要出 Linux 版了！

Linux需要杀毒软件？

丰富生态，还是有益的。

>
> 微软宣布将于 2020 年将其企业安全产品 Defender 高级威胁防护（ATP）引入 Linux。
>
>
>

![](/data/attachment/album/201911/14/183733rllau7hvkgzkuwgg.jpg)

微软的年度开发者大会 Microsoft Ignite 刚刚结束，会上发布了一些与 Linux 有关的重要公告。你可能已经知道[微软将 Edge Web 浏览器引入 Linux](/article-11562-1.html)，而下一个大新闻是微软将 Defender ATP 引入 Linux！

让我们详细介绍一下它是什么，以及微软为何不厌其烦为 Linux 开发某些东西。

### 微软 Defender ATP 是什么？

如果你过去几年使用过 Windows，那么你一定遇到过 Windows Defender。它基本上可以说是微软的防病毒产品，通过检测病毒和恶意软件来提供一定程度的安全性。

微软通过引入 Windows Defender ATP（高级威胁防护）来为其企业用户改进了此功能。Defender ATP 致力于行为分析。它收集使用使用数据并将其存储在同一系统上。但是，当发现行为不一致时，它将数据发送到 Azure 服务（微软的云服务）。在这里，它将收集行为数据和异常信息。

例如，如果你收到一封包含 PDF 附件的电子邮件，你将其打开并打开了命令提示符，Defender ATP 就会注意到此异常行为。我建议[阅读本文以了解有关 Defender 和 Defender ATP 之间的区别的更多信息](https://www.concurrency.com/blog/november-2017/windows-defender-vs-windows-defender-atp)。

现在，这完全是一种企业级产品。在具有成百上千个端点（计算机）的大型企业中，Defender ATP 提供了很好的保护层。IT 管理员可以在其 Azure 实例上集中查看端点的视图，可以分析威胁并采取相应措施。

### 适用于 Linux（和 Mac）的微软 Defender ATP

通常，企业的计算机上装有 Windows，但 Mac 和 Linux 在开发人员中也特别受欢迎。在混合了 Mac 和 Linux 的 Windows 机器环境中，Defender ATP 必须将其服务扩展到这些操作系统，以便它可以为网络上的所有设备提供整体防御。

请注意，微软先是[在 2019 年 3 月将 Windows Defender ATP 更改为微软 Defender ATP](https://www.theregister.co.uk/2019/03/21/microsoft_defender_atp/)，这表明该产品不仅限于 Windows 操作系统。

此后不久微软[宣布推出 Mac 版 Defender ATP](https://techcommunity.microsoft.com/t5/Microsoft-Defender-ATP/Announcing-Microsoft-Defender-ATP-for-Mac/ba-p/378010)。

现在，为了涵盖企业环境中的所有主要操作系统，[微软将于 2020 年将 Defender ATP 引入到 Linux](https://www.zdnet.com/article/microsoft-defender-atp-is-coming-to-linux-in-2020/)。

### Linux 上的微软 Defender ATP 对 Linux 用户有何影响？

由于 Defender ATP 是企业产品，因此我认为你无需为此而烦恼。组织需要保护其端点免受威胁，因此，微软也在改进其产品以使其涵盖 Linux。

对于像你我这样的普通 Linux 用户，这没有任何区别。我不会用它“保护”我的三个 Linux 系统，并为此而向微软付费。

请随时在评论部分中分享你对微软将 Defender ATP 引入 Linux 的看法。

---

via: <https://itsfoss.com/microsoft-defender-atp-linux/>

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


如何使用 metaflac 管理音乐标签

Summary: 使用这个强大的开源工具可以在命令行中纠正音乐标签错误。

使用这个强大的开源工具可以在命令行中纠正音乐标签错误。

>
> 使用这个强大的开源工具可以在命令行中纠正音乐标签错误。
>
>
>

![](/data/attachment/album/201911/16/093629njth88bej8ttekh2.jpg)

很久以来我就将 CD 翻录到电脑。在此期间，我用过几种不同的翻录工具，观察到每种工具在标记上似乎有不同的做法，特别是在保存哪些音乐元数据上。所谓“观察”，我是指音乐播放器似乎按照有趣的顺序对专辑进行排序，它们将一个目录中的曲目分为两张专辑，或者产生了其他令人沮丧的烦恼。

我还看到有些标签非常不明确，许多音乐播放器和标签编辑器没有显示它们。即使这样，在某些极端情况下，它们仍可以使用这些标签来分类或显示音乐，例如播放器将所有包含 XYZ 标签的音乐文件与不包含该标签的所有文件分离到不同的专辑中。

那么，如果标记应用和音乐播放器没有显示“奇怪”的标记，但是它们受到了某种影响，你该怎么办？

### Metaflac 来拯救！

我一直想要熟悉 [metaflac](https://xiph.org/flac/documentation_tools_metaflac.html)，它是一款开源命令行 [FLAC 文件](https://xiph.org/flac/index.html)元数据编辑器，这是我选择的开源音乐文件格式。并不是说 [EasyTAG](https://wiki.gnome.org/Apps/EasyTAG) 这样出色的标签编辑软件有什么问题，但我想起“如果你手上有个锤子……”这句老话（LCTT 译注：指如果你手上有个锤子，那么所有的东西看起来都像钉子。意指人们惯于用熟悉的方式解决问题，而不管合不合适）。另外，从实际的角度来看，带有 [Armbian](https://www.armbian.com/) 和 [MPD](https://www.musicpd.org/) 的小型专用服务器，音乐存储在本地、运行精简的仅限音乐的无头环境就可以满足我的家庭和办公室的立体音乐的需求，因此命令行元数据管理工具将非常有用。

下面的截图显示了我的长期翻录过程中产生的典型问题：Putumayo 的哥伦比亚音乐汇编显示为两张单独的专辑，一张包含单首曲目，另一张包含其余 11 首：

![Album with incorrect tags](/data/attachment/album/201911/16/093653dz77fmufn82k373k.png "Album with incorrect tags")

我使用 `metaflac` 为目录中包含这些曲目的所有 FLAC 文件生成了所有标签的列表：

```
rm -f tags.txt
for f in *.flac; do
        echo $f >> tags.txt
        metaflac --export-tags-to=tags.tmp "$f"
        cat tags.tmp >> tags.txt
        rm tags.tmp
done
```

我将其保存为可执行的 shell 脚本（请参阅我的同事 [David Both](https://opensource.com/users/dboth) 关于 Bash shell 脚本的精彩系列专栏文章，[特别是关于循环这章](https://opensource.com/article/19/10/programming-bash-loops)）。基本上，我在这做的是创建一个文件 `tags.txt`，包含文件名（`echo` 命令），后面是它的所有标签，然后是下一个文件名，依此类推。这是结果的前几行：

```
A Guapi.flac
TITLE=A Guapi
ARTIST=Grupo Bahia
ALBUMARTIST=Various Artists
ALBUM=Putumayo Presents: Colombia
DATE=2001
TRACKTOTAL=12
GENRE=Latin Salsa
MUSICBRAINZ_ALBUMARTISTID=89ad4ac3-39f7-470e-963a-56509c546377
MUSICBRAINZ_ALBUMID=6e096386-1655-4781-967d-f4e32defb0a3
MUSICBRAINZ_ARTISTID=2993268d-feb6-4759-b497-a3ef76936671
DISCID=900a920c
ARTISTSORT=Grupo Bahia
MUSICBRAINZ_DISCID=RwEPU0UpVVR9iMP_nJexZjc_JCc-
COMPILATION=1
MUSICBRAINZ_TRACKID=8a067685-8707-48ff-9040-6a4df4d5b0ff
ALBUMARTISTSORT=50 de Joselito, Los
Cumbia Del Caribe.flac
```

经过一番调查，结果发现我同时翻录了很多 Putumayo CD，并且当时我所使用的所有软件似乎给除了一个之外的所有文件加上了 `MUSICBRAINZ_*` 标签。（是 bug 么？大概吧。我在六张专辑中都看到了。）此外，关于有时不寻常的排序，我注意到，`ALBUMARTISTSORT` 标签将西班牙语标题 “Los” 移到了标题的最后面（逗号之后）。

我使用了一个简单的 `awk` 脚本来列出 `tags.txt` 中报告的所有标签：

```
awk -F= 'index($0,"=") > 0 {print $1}' tags.txt | sort -u
```

这会使用 `=` 作为字段分隔符将所有行拆分为字段，并打印包含等号的行的第一个字段。结果通过使用 `sort` 及其 `-u` 标志来传递，从而消除了输出中的所有重复项（请参阅我的同事 Seth Kenlon 的[关于 `sort` 程序的文章](https://opensource.com/article/19/10/get-sorted-sort)）。对于这个 `tags.txt` 文件，输出为：

```
ALBUM
ALBUMARTIST
ALBUMARTISTSORT
ARTIST
ARTISTSORT
COMPILATION
DATE
DISCID
GENRE
MUSICBRAINZ_ALBUMARTISTID
MUSICBRAINZ_ALBUMID
MUSICBRAINZ_ARTISTID
MUSICBRAINZ_DISCID
MUSICBRAINZ_TRACKID
TITLE
TRACKTOTAL
```

研究一会后，我发现 `MUSICBRAINZ_*` 标签出现在除了一个 FLAC 文件之外的所有文件上，因此我使用 `metaflac` 命令删除了这些标签：

```
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ALBUMARTISTID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ALBUMID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_ARTISTID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_DISCID "$f"; done
for f in *.flac; do metaflac --remove-tag MUSICBRAINZ_TRACKID "$f"; done
```

完成后，我可以使用音乐播放器重建 MPD 数据库。结果如下：

![Album with correct tags](/data/attachment/album/201911/16/093702uly0snz1jkezuvqs.png "Album with correct tags")

完成了，12 首曲目出现在了一张专辑中。

太好了，我很喜欢 `metaflac`。我希望我会更频繁地使用它，因为我会试图去纠正最后一些我弄乱的音乐收藏标签。强烈推荐！

### 关于音乐

我花了几个晚上在 CBC 音乐（CBC 是加拿大的公共广播公司）上收听 Odario Williams 的节目 After Dark。感谢 Odario，我听到了让我非常享受的 [Kevin Fox 的 Songs for Cello and Voice](https://burlingtonpac.ca/events/kevin-fox/)。在这里，他演唱了 Eurythmics 的歌曲 “[Sweet Dreams（Are Made of This）](https://www.youtube.com/watch?v=uyN66XI1zp4)”。

我购买了这张 CD，现在它在我的音乐服务器上，还有组织正确的标签！

---

via: <https://opensource.com/article/19/11/metaflac-fix-music-tags>

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

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


在 CentOS/RHEL 系统上生成补丁合规报告的 Bash 脚本

![](/data/attachment/album/201911/16/101428n1nsj74wifp4k1dz.jpg)

如果你运行的是大型 Linux 环境，那么你可能已经将 Red Hat 与 Satellite 集成了。如果是的话，你不必担心补丁合规性报告，因为有一种方法可以从 Satellite 服务器导出它。

但是，如果你运行的是没有 Satellite 集成的小型 Red Hat 环境，或者它是 CentOS 系统，那么此脚本将帮助你创建该报告。

补丁合规性报告通常每月创建一次或三个月一次，具体取决于公司的需求。根据你的需要添加 cronjob 来自动执行此功能。

此 [bash 脚本](https://www.2daygeek.com/category/bash-script/) 通常适合于少于 50 个系统运行，但没有限制。

保持系统最新是 Linux 管理员的一项重要任务，它使你的计算机非常稳定和安全。

以下文章可以帮助你了解有关在红帽 （RHEL） 和 CentOS 系统上安装安全修补程序的更多详细信息。

* [如何在 CentOS 或 RHEL 系统上检查可用的安全更新？](/article-10938-1.html)
* [在 RHEL 和 CentOS 系统上安装安全更新的四种方法](https://www.2daygeek.com/install-security-updates-on-redhat-rhel-centos-system/)
* [在 RHEL 和 CentOS 上检查或列出已安装的安全更新的两种方法](/article-10960-1.html)

此教程中包含四个 [shell 脚本](https://www.2daygeek.com/category/shell-script/)，请选择适合你的脚本。

### 方法 1：为 CentOS / RHEL 系统上的安全修补生成补丁合规性报告的 Bash 脚本

此脚本只会生成安全修补合规性报告。它会通过纯文本发送邮件。

```
# vi /opt/scripts/small-scripts/sec-errata.sh

#!/bin/sh
/tmp/sec-up.txt
SUBJECT="Patching Reports on "date""
MESSAGE="/tmp/sec-up.txt"
TO="[email protected]"
echo "+---------------+-----------------------------+" >> $MESSAGE
echo "| Server_Name   |  Security Errata            |" >> $MESSAGE
echo "+---------------+-----------------------------+" >> $MESSAGE
for server in `more /opt/scripts/server.txt`
do
sec=`ssh $server yum updateinfo summary | grep 'Security' | grep -v 'Important|Moderate' | tail -1 | awk '{print $1}'`
echo "$server                $sec" >> $MESSAGE
done
echo "+---------------------------------------------+" >> $MESSAGE
mail -s "$SUBJECT" "$TO" < $MESSAGE
```

添加完上面的脚本后运行它。

```
# sh /opt/scripts/small-scripts/sec-errata.sh
```

你会看到下面的输出。

```
# cat /tmp/sec-up.txt

+---------------+-------------------+
| Server_Name   |  Security Errata  |
+---------------+-------------------+
server1
server2
server3                21
server4
+-----------------------------------+
```

添加下面的 cronjob 来每个月得到一份补丁合规性报告。

```
# crontab -e

@monthly /bin/bash /opt/scripts/system-uptime-script-1.sh
```

### 方法 1a：为 CentOS / RHEL 系统上的安全修补生成补丁合规性报告的 Bash 脚本

脚本会为你生成安全修补合规性报告。它会通过 CSV 文件发送邮件。

```
# vi /opt/scripts/small-scripts/sec-errata-1.sh

#!/bin/sh
echo "Server Name, Security Errata" > /tmp/sec-up.csv
for server in `more /opt/scripts/server.txt`
do
sec=`ssh $server yum updateinfo summary | grep 'Security' | grep -v 'Important|Moderate' | tail -1 | awk '{print $1}'`
echo "$server,  $sec" >> /tmp/sec-up.csv
done
echo "Patching Report for `date +"%B %Y"`" | mailx -s "Patching Report on `date`" -a /tmp/sec-up.csv [email protected]
rm /tmp/sec-up.csv
```

添加完上面的脚本后运行它。

```
# sh /opt/scripts/small-scripts/sec-errata-1.sh
```

你会看到下面的输出。

![](/data/attachment/album/201911/16/101510n8n42txqneg8niju.png)

### 方法 2：为 CentOS / RHEL 系统上的安全修补、bugfix、增强生成补丁合规性报告的 Bash 脚本

脚本会为你生成安全修补、bugfix、增强的补丁合规性报告。它会通过纯文本发送邮件。

```
# vi /opt/scripts/small-scripts/sec-errata-bugfix-enhancement.sh

#!/bin/sh
/tmp/sec-up.txt
SUBJECT="Patching Reports on "`date`""
MESSAGE="/tmp/sec-up.txt"
TO="[email protected]"
echo "+---------------+-------------------+--------+---------------------+" >> $MESSAGE
echo "| Server_Name   |  Security Errata  | Bugfix |  Enhancement        |" >> $MESSAGE
echo "+---------------+-------------------+--------+---------------------+" >> $MESSAGE
for server in `more /opt/scripts/server.txt`
do
sec=`ssh $server yum updateinfo summary | grep 'Security' | grep -v 'Important|Moderate' | tail -1 | awk '{print $1}'`
bug=`ssh $server yum updateinfo summary | grep 'Bugfix' | tail -1 | awk '{print $1}'`
enhance=`ssh $server yum updateinfo summary | grep 'Enhancement' | tail -1 | awk '{print $1}'`
echo "$server                $sec               $bug             $enhance" >> $MESSAGE
done
echo "+------------------------------------------------------------------+" >> $MESSAGE
mail -s "$SUBJECT" "$TO" < $MESSAGE
```

添加完上面的脚本后运行它。

```
# sh /opt/scripts/small-scripts/sec-errata-bugfix-enhancement.sh
```

你会看到下面的输出。

```
# cat /tmp/sec-up.txt

+---------------+-------------------+--------+---------------------+
| Server_Name   |  Security Errata  | Bugfix |  Enhancement        |
+---------------+-------------------+--------+---------------------+
server01                                16
server02                  5             16
server03                  21           266             20
server04                                16
+------------------------------------------------------------------+
```

添加下面的 cronjob 来每三个月得到补丁合规性报告。该脚本计划在一月、四月、七月、十月的 1 号运行。

```
# crontab -e

0 0 01 */3 * /bin/bash /opt/scripts/system-uptime-script-1.sh
```

### 方法 2a：为 CentOS / RHEL 系统上的安全修补、bugfix、增强生成补丁合规性报告的 Bash 脚本

脚本会为你生成安全修补、bugfix、增强的补丁合规性报告。它会通过 CSV 文件发送邮件。

```
# vi /opt/scripts/small-scripts/sec-errata-bugfix-enhancement-1.sh

#!/bin/sh
echo "Server Name, Security Errata,Bugfix,Enhancement" > /tmp/sec-up.csv
for server in `more /opt/scripts/server.txt`
do
sec=`ssh $server yum updateinfo summary | grep 'Security' | grep -v 'Important|Moderate' | tail -1 | awk '{print $1}'`
bug=`ssh $server yum updateinfo summary | grep 'Bugfix' | tail -1 | awk '{print $1}'`
enhance=`ssh $server yum updateinfo summary | grep 'Enhancement' | tail -1 | awk '{print $1}'`
echo "$server,$sec,$bug,$enhance" >> /tmp/sec-up.csv
done
echo "Patching Report for `date +"%B %Y"`" | mailx -s "Patching Report on `date`" -a /tmp/sec-up.csv [email protected]
rm /tmp/sec-up.csv
```

添加完上面的脚本后运行它。

```
# sh /opt/scripts/small-scripts/sec-errata-bugfix-enhancement-1.sh
```

你会看到下面的输出。

![](/data/attachment/album/201911/16/101511ftqoqetdqnomvciz.png)

---

via: <https://www.2daygeek.com/bash-script-to-generate-patching-compliance-report-on-centos-rhel-systems/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

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


用 autoplank 在多个显示器上使用 Plank 扩展坞

Summary: autoplank 是用 Go 语言编写的小型工具，它为 Plank 扩展坞增加了多显示器支持，而无需创建多个扩展坞。

![](/data/attachment/album/201911/16/161121nbbncrlxa5s5a5r5.png)

[autoplank](https://github.com/abiosoft/autoplank) 是用 Go 语言编写的小型工具，它为 Plank 扩展坞增加了多显示器支持，而无需创建[多个](https://answers.launchpad.net/plank/+question/204593)扩展坞。

当你将鼠标光标移动到显示器的底部时，`autoplank` 会使用 `xdotool` 检测到你的鼠标移动，并且自动将 Plank 扩展坞移动到该显示器。该工具仅在将 Plank 设置为在屏幕底部的情况下工作（至少目前如此）。

在 Plank 实际出现在鼠标所在的显示器上前会稍有延迟。开发人员说这是有意设计的，以确保你确实要在该显示器上访问 Plank。显示 Plank 之前的时间延迟目前尚不可配置，但将来可能会改变。

`autoplank` 可以在 elementary OS 以及其它的桌面环境或发行版上使用。

Plank 是一个简单的扩展坞，它显示了正在运行的应用程序/窗口的图标。它允许将应用程序固定到扩展坞，并带有一些内置的简单“扩展组件”：剪贴板管理器、时钟、CPU 监视器、显示桌面和垃圾桶。要访问其设置，请按住 `Ctrl` 键，同时右键单击 Plank 扩展坞上的任意位置，然后单击 “Preferences”。

Plank 默认用在 elementary OS 中，但也可以在任何桌面环境或 Linux 发行版中使用。

### 安装 autoplank

在其 GitHub 页面上，提到你需要 Go 1.8 或更高版本才能构建 `autoplank`，但我能够在 Ubuntu 16.04（elementary OS 0.4 Loki）中使用 Go 1.6 成功构建它。

开发者说：

1、安装所需的依赖项。

要构建 `autoplank`，你需要 Go（在 Debian、Ubuntu、elementary OS 等中使用 golang-go）。要获取最新的 Git 代码，你还需要 `git`，要在显示器上检测你的鼠标移动，还需要安装 `xdotool`。

使用以下命令将它们安装在 Ubuntu、Debian、elementary OS 等中：

```
sudo apt install git golang-go xdotool
```

2、从 [Git](https://github.com/abiosoft/autoplank) 获取最新的 `autoplank`，构建并将其安装在 `/usr/local/bin` 中：

```
git clone https://github.com/abiosoft/autoplank
cd autoplank
go build -o autoplank
sudo mv autoplank /usr/local/bin/
```

你现在可以从主目录中删除 `autoplank` 文件夹。

当你想卸载 `autoplank` 时，只需删除 `/usr/local/bin/autoplank` 二进制文件（`sudo rm /usr/local/bin/autoplank`）。

3、将 `autoplank` 添加到启动中。

如果你想在将 `autoplank` 添加到启动项或为其创建 systemd 服务之前尝试使用 `autoplank`，则只需在终端中键入 `/usr/local/bin/autoplank` 即可启动它。

要使 `autoplank` 在重新启动后起作用，你需要将其添加到启动项中。确切的操作步骤取决于你的桌面环境，因此我不会确切告诉你如何在每个桌面环境中执行此操作，但是请记住在启动项中将 `/usr/local/bin/autoplank` 设置为可执行文件。

在 elementary OS 中，你可以打开“系统设置”，然后在“应用程序”的“启动”选项卡上，单击窗口左下角的“+”按钮，然后在“键入自定义命令”字段中添加 “/usr/local/bin/autoplank”：

![](/data/attachment/album/201911/16/161130sxf5wox5fwcmdnlx.png)

如[此处](https://github.com/abiosoft/autoplank#optional-create-a-service)的解释，使用 `autoplank` 的另一种方法是通过为其创建 systemd 服务。将 systemd 服务用于 autoplank 的优点是，无论它出于何种原因而崩溃，都可以重新启动 `autoplank`。可以使用 systemd 服务或将 `autoplank` 添加到启动应用程序中（但不要同时使用两者）。

4、完成此操作后，注销、登录，`autoplank` 应该已在运行，因此你可以将鼠标移至显示器底部以将 Plank 停靠此处。

---

via: <https://www.linuxuprising.com/2018/08/use-plank-on-multiple-monitors-without.html>

作者：[Logix](https://plus.google.com/118280394805678839070) 选题：[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/) 荣誉推出


红帽对 Zombieload v2 缺陷的应对

Summary: 红帽呼吁更新 Linux 软件，以解决可能导致数据盗用的英特尔处理器缺陷。

红帽呼吁更新 Linux 软件，以解决可能导致数据盗用的英特尔处理器缺陷。

![](/data/attachment/album/201911/16/223222agxrd54xgvaexbrp.jpg)

>
> 红帽呼吁更新 Linux 软件，以解决可能导致数据盗用的英特尔处理器缺陷。
>
>
>

前两天公开的三个“常见漏洞和披露”（CVE）跟踪的是某些英特尔处理器中的三个漏洞，如果利用这些漏洞，可能会使敏感数据面临风险。

在报告的缺陷中，新发现的英特尔处理器缺陷是今年早些时候发现的 Zombieload 攻击的变种，并且仅会影响英特尔的 Cascade Lake 芯片。

红帽强烈建议，所有的红帽系统即使不认为其配置构成直接威胁，也要对其进行更新，并且红帽正在向其客户和企业 IT 社区提供资源。

这三个 CVE 是：

* CVE-2018-12207：页面大小更改时的机器检查错误
* CVE-2019-11135：TSX异步中止
* CVE-2019-0155 和 CVE-2019-0154：i915 图形驱动程序

### CVE-2018-12207

红帽将该漏洞评为重要。此漏洞可能使本地和非特权的攻击者绕过安全控制并导致系统范围的拒绝服务。

硬件缺陷是在英特尔微处理器中发现的，并且与指令翻译后备缓冲区（ITLB）有关。它缓存从虚拟地址到物理地址的转换，旨在提高性能。但是，在缓存页面更改后，使缓存的条目无效的延迟可能导致处理器使用无效的地址转换，从而导致机器检查错误异常并使系统进入挂起状态。

攻击者可以制作这种情况来关闭系统。

### CVE-2019-11135

红帽将此漏洞评为中级。这个事务同步扩展（TSX）异步中止是一个微体系结构数据采样（MDS）缺陷。使用定制代码的本地攻击者可以利用此漏洞从处理器以及支持同时多线程（SMT）和 TSX 的处理器上的缓存内容中收集信息。

### CVE-2019-0155，CVE-2019-0154

红帽将 CVE-2019-0155 漏洞评为重要，将 CVE-2019-0154 漏洞评为中级。这两个缺陷都与 i915 图形驱动程序有关。

CVE-2019-0155 允许攻击者绕过常规的内存安全限制，从而允许对应该受到限制的特权内存进行写访问。

当图形处理单元（GPU）处于低功耗模式时，CVE-2019-0154 可能允许本地攻击者创建无效的系统状态，从而导致系统无法访问。

唯一受 CVE-2019-0154 影响的的显卡在 i915 内核模块上受到影响。`lsmod` 命令可用于指示该漏洞。 如下所示的任何输出（即以 i915 开头）都表明该系统易受攻击：

```
$ lsmod | grep ^i915
i915          2248704 10
```

### 更多资源

红帽在以下链接中向其客户和其他人提供了详细信息和进一步的说明：

* <https://access.redhat.com/security/vulnerabilities/ifu-page-mce>
* <https://access.redhat.com/solutions/tsx-asynchronousabort>
* <https://access.redhat.com/solutions/i915-graphics>

---

via: <https://www.networkworld.com/article/3453596/red-hat-responds-to-zombieload-v2.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 桌面添加用户

Summary: 无论是在安装过程中还是在桌面中，通过图形界面管理用户都非常容易。

无论是在安装过程中还是在桌面中，通过图形界面管理用户都非常容易。

>
> 无论是在安装过程中还是在桌面中，通过图形界面管理用户都非常容易。
>
>
>

![](/data/attachment/album/201911/16/232237po6ntnrnj40jjtk4.jpg)

添加用户是你在一个新系统上要做的第一件事。而且，你通常需要在计算机的整个生命周期中管理用户。

我的关于 [useradd 命令](https://opensource.com/article/19/10/linux-useradd-command)文章提供了更深入的对 Linux 的用户管理的了解。`useradd` 是一个命令行工具，但是你也可以在 Linux 上以图形方式管理用户。这就是本文的主题。

### 在 Linux 安装过程中添加用户

大多数 Linux 发行版都提供了在安装过程中创建用户的步骤。例如，Fedora 30 安装程序 Anaconda 创建标准的 `root` 用户和另一个本地用户帐户。在安装过程中进入“配置”页面时，单击“用户设置”下的“用户创建”。

![Fedora Anaconda Installer - Add a user](/data/attachment/album/201911/16/232336uau0bmaggjngbmne.png "Fedora Anaconda Installer - Add a user")

在用户创建页面上，输入用户的详细信息：全名、用户名和密码。你还可以选择是否使用户成为管理员。

![Create a user during installation](/data/attachment/album/201911/16/232349lry0z80y1y4zqna1.png "Create a user during installation")

点击“高级”按钮打开“高级用户配置”页面。如果需要除默认设置以外的其他设置，那么可以在此处指定主目录的路径以及用户和组 ID。你也可以输入用户所属的其他组。

![Advanced user configuration](/data/attachment/album/201911/16/232412kq2ypbygqzytsstq.png "Advanced user configuration")

### 在 Linux 桌面上添加用户

#### GNOME

许多 Linux 发行版都使用 GNOME 桌面。以下截图来自 Red Hat Enterprise Linux 8.0，但是在其他发行版（如 Fedora、Ubuntu 或 Debian）中，该过程相似。

首先打开“设置”。然后打开“详细”，选择“用户”，单击“解锁”，然后输入密码（除非你已经以 root 用户登录）。这样将用“添加用户”按钮代替“解锁”按钮。

![GNOME user settings](/data/attachment/album/201911/16/232418ygjm2x1hxh3h318h.png "GNOME user settings")

现在，你可以通过单击“添加用户”，然后选择“帐户类型”然后输入“用户名”和“密码”来添加用户。

在下面的截图中，已经输入了用户名，设置保留为默认设置。我不必输入“用户名”，因为它是在我在“全名”字段中输入时自动创建的。如果你不喜欢自动补全，你仍然可以对其进行修改。

![GNOME settings - add user](/data/attachment/album/201911/16/232429v23c019992vvn0nz.png "GNOME settings - add user")

这将为名为 Sonny 的用户创建一个标准帐户。Sonny 首次登录时需要提供密码。

接下来，将显示用户。在此页面可以选择每个用户进行自定义或者删除。例如，你可能想选择一个头像或设置默认语言。

![GNOME new user](/data/attachment/album/201911/16/232445b49wfffvooffdo79.png "GNOME new user")

#### KDE

KDE 是另一个流行的 Linux 桌面环境。下面是 Fedora 30 上 KDE Plasma 的截图。你可以看到，在 KDE 中添加用户与在 GNOME 中添加用户非常相似。

![KDE settings - add user](/data/attachment/album/201911/16/232521vg5vv551nqvqcg5c.png "KDE settings - add user")

### 总结

除 GNOME 和 KDE 外，其他桌面环境和窗口管理器也有图形用户管理工具。无论是在安装时还是安装后，在 Linux 中以图形方式添加用户都是快速简便的。

---

via: <https://opensource.com/article/19/11/add-user-gui-linux>

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


为什么我从 Mac 换到了 Linux

Summary: 感谢这么多的开源开发人员，日常使用 Linux 比以往任何时候都容易得多。

linux可以用了——是这个意思吧？

好，现在请译者wxy谈谈日常使用Mac而不是Linux的体验：

讲真的，说了跟没说一样

戛然而止，极具文学价值

感谢这么多的开源开发人员，日常使用 Linux 比以往任何时候都容易得多。

>
> 感谢这么多的开源开发人员，日常使用 Linux 比以往任何时候都容易得多。
>
>
>

![](/data/attachment/album/201911/17/203212qes7o7zpeefbpffe.jpg)

自 2004 年开始从事 IT 工作以来，我一直是 Mac 的忠实粉丝。但是几个月前，由于种种原因，我决定将 Linux 用作日常使用的系统。这不是我第一次尝试完全采用 Linux，但是我发现它比以往更加容易。下面是促使我转换的原因。

### 我在个人电脑上的首次 Linux 体验

我记得，我抬头看着投影机，而它和我面面相觑。我们俩都不明白为什么它不显示。VGA 线完全接好了，针脚也没有弯折。我按了我所有想到的可能的按键组合，以向我的笔记本电脑发出信号，想让它克服“舞台恐惧症”。

我在大学里运行 Linux 只是作为实验。而我在 IT 部门的经理是多种口味的倡导者，随着我对桌面支持和编写脚本的信心增强，我想了解更多 Linux 的信息。对我来说，IT 比我的计算机科学学位课程有趣得多，课程的感觉是如此抽象和理论化：“二叉树有啥用？”，我如是想 —— 而我们的系统管理员团队的工作却是如此的真真切切。

这个故事的结尾是，我登录到 Windows 工作站完成了我的课堂演讲，这标志着我将 Linux 作为我的日常操作系统的第一次尝试的终结。我很欣赏 Linux 的灵活性，但是它缺乏兼容性。我偶尔会写个脚本，脚本通过 SSH 连接到一个机器中以运行另一个脚本，但是我对 Linux 的日常使用仅止于此。

### 对 Linux 兼容性的全新印象

几个月前，当我决定再试一次 Linux 时，我曾觉得我遇到更多的兼容性噩梦，但我错了。

安装过程完成后，我立即插入了 USB-C 集线器以了解兼容性到底如何。一切立即工作。连接 HDMI 的超宽显示器作为镜像显示器弹出到我的笔记本电脑屏幕上，我轻松地将其调整为第二台显示器。USB 连接的网络摄像头对我的[在家工作方式](https://opensource.com/article/19/8/rules-remote-work-sanity)至关重要，它可以毫无问题地显示视频。甚至自从我使用 Mac 以来就一直插在集线器的 Mac 充电器可以为我的非常不 Mac 的硬件充电。

我的正面体验可能与 USB-C 的一些更新有关，它在 2018 年得到一些所需的关注，因此才能与其他操作系统的体验相媲美。正如 [Phoronix 解释的那样](https://www.phoronix.com/scan.php?page=news_item&px=Linux-USB-Type-C-Port-DP-Driver)：

>
> “USB Type-C 接口为非 USB 信号提供了‘替代模式’扩展，在规范中该替代模式的最大使用场景是支持 DisplayPort。除此之外，另一个替代模式是支持 Thunderbolt 3。DisplayPort 替代模式支持 4K 甚至 8Kx4K 的视频输出，包括多声道音频。
>
>
> “虽然 USB-C 替代模式和 DisplayPort 已经存在了一段时间，并且在 Windows 上很常见，但是主线 Linux 内核不支持此功能。所幸的是，多亏英特尔，这种情况正在改变。”
>
>
>

而在端口之外，快速浏览一下 [笔记本电脑 Linux](https://www.linux-laptop.net/) 的硬件选择，列出了比我 2000 年代初期所经历的更加完整的选择集。

与我第一次尝试采用 Linux 相比，这已经天差地别，这是我张开双臂欢迎的。

### 突破 Apple 的樊篱

使用 Linux 给我的日常工作流程增加了一些新的麻烦，而我喜欢这种麻烦。

我的 Mac 工作流程是无缝的：早上打开 iPad，写下关于我今天想要做什么的想法，然后开始在 Safari 中阅读一些文章；移到我的 iPhone 上可以继续阅读；然后登录我的 MacBook，这些地方我进行了多年的微调，已经弄清楚了所有这些部分之间的连接方式。键盘快捷键已内置在我的大脑中；用户体验一如既往。简直不要太舒服了。

这种舒适需要付出代价。我基本上忘记了我的环境如何运作的，也无法解答我想解答的问题。我是否自定义了一些 [PLIST 文件](https://fileinfo.com/extension/plist)以获得快捷方式，是不是记得将其签入[我的 dotfiles](https://opensource.com/article/19/3/move-your-dotfiles-version-control) 当中？当 Firefox 的功能更好时，我为何还如此依赖 Safari 和 Chrome？为什么我不使用基于 Android 的手机代替我的 i-系列产品呢？

关于这一点，我经常考虑改用基于 Android 的手机，但是我会失去在所有这些设备之间的连接性以及为这种生态系统设计的一些便利。例如，我将无法在 iPhone 上为 Apple TV 输入搜索内容，也无法与其他用 Apple 的朋友用 AirDrop 共享密码。这些功能是同类设备环境的巨大好处，并且是一项了不起的工程。也就是说，这些便利是被生态系统所困的代价。

我喜欢了解设备的工作方式。我希望能够解释使我的系统变得有趣或容易使用的环境配置，但我也想看看增加一些麻烦对我的观点有什么影响。用 [Marcel Proust](https://www.age-of-the-sage.org/quotations/proust_having_seeing_with_new_eyes.html) 的话来说，“真正的发现之旅不在于寻找新的土地，而在于用新的眼光来看待。”技术的使用是如此的方便，以至于我不再对它的工作原理感到好奇，而 Linux 使我有机会再次有了新的眼光。

### 受你的启发

以上所有内容足以成为探索 Linux 的理由，但我也受到了你的启发。尽管所有操作系统都受到开源社区的欢迎，但 Opensource.com 的作者和读者对 Linux 的喜悦是充满感染力的。它激发了我重新潜入的乐趣，我享受这段旅途的乐趣。

---

via: <https://opensource.com/article/19/10/why-switch-mac-linux>

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