如何在 Linux 上创建和使用交换文件

# 如何在 Linux 上创建和使用交换文件

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

本教程讨论了 Linux 中交换文件的概念，为什么使用它以及它相对于传统交换分区的优势。你将学习如何创建交换文件和调整其大小。

### 什么是 Linux 的交换文件？

交换文件允许 Linux 将磁盘空间模拟为内存。当你的系统开始耗尽内存时，它会使用交换空间将内存的一些内容交换到磁盘空间上。这样释放了内存，为更重要的进程服务。当内存再次空闲时，它会从磁盘交换回数据。我建议[阅读这篇文章，了解 Linux 上的交换空间的更多内容](https://itsfoss.com/swap-size/)。

传统上，交换空间是磁盘上的一个独立分区。安装 Linux 时，只需创建一个单独的分区进行交换。但是这种趋势在最近几年发生了变化。

使用交换文件，你不再需要单独的分区。你会根目录下创建一个文件，并告诉你的系统将其用作交换空间就行了。

使用专用的交换分区，在许多情况下，调整交换空间的大小是一个可怕而不可能的任务。但是有了交换文件，你可以随意调整它们的大小。

最新版本的 Ubuntu 和其他一些 Linux 发行版已经开始 [默认使用交换文件](https://help.ubuntu.com/community/SwapFaq)。甚至如果你没有创建交换分区，Ubuntu 也会自己创建一个 1GB 左右的交换文件。

让我们看看交换文件的更多信息。

### 检查 Linux 的交换空间

在你开始添加交换空间之前，最好检查一下你的系统中是否已经有了交换空间。

你可以用[Linux 上的 free 命令](https://linuxhandbook.com/free-command/)检查它。就我而言，我的[戴尔 XPS](https://itsfoss.com/dell-xps-13-ubuntu-review/)有 14GB 的交换容量。

```
free -h
              total        used        free      shared  buff/cache   available
Mem:           7.5G        4.1G        267M        971M        3.1G        2.2G
Swap:           14G          0B         14G
```

`free` 命令给出了交换空间的大小，但它并没有告诉你它是真实的交换分区还是交换文件。`swapon` 命令在这方面会更好。

```
swapon --show
NAME           TYPE       SIZE USED PRIO
/dev/nvme0n1p4 partition 14.9G   0B   -2
```

如你所见，我有 14.9GB 的交换空间，它在一个单独的分区上。如果是交换文件，类型应该是 `file` 而不是 `partition`。

```
swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2
```

如果你的系统上没有交换空间，它应该显示如下内容：

```
free -h
              total        used        free      shared  buff/cache   available
Mem:           7.5G        4.1G        267M        971M        3.1G        2.2G
Swap:           0B          0B         0B
```

而 `swapon` 命令不会显示任何输出。

### 在 Linux 上创建交换文件

如果你的系统没有交换空间，或者你认为交换空间不足，你可以在 Linux 上创建交换文件。你也可以创建多个交换文件。

让我们看看如何在 Linux 上创建交换文件。我在本教程中使用 Ubuntu 18.04，但它也应该适用于其他 Linux 发行版本。

#### 步骤 1：创建一个新的交换文件

首先，创建一个具有所需交换空间大小的文件。假设我想给我的系统增加 1GB 的交换空间。使用`fallocate` 命令创建大小为 1GB 的文件。

```
sudo fallocate -l 1G /swapfile
```

建议只允许 `root` 用户读写该交换文件。当你尝试将此文件用于交换区域时，你甚至会看到类似“不安全权限 0644，建议 0600”的警告。

```
sudo chmod 600 /swapfile
```

请注意，交换文件的名称可以是任意的。如果你需要多个交换空间，你可以给它任何合适的名称，如 `swap_file_1`、`swap_file_2` 等。它们只是一个预定义大小的文件。

#### 步骤 2：将新文件标记为交换空间

你需要告诉 Linux 系统该文件将被用作交换空间。你可以用 [mkswap](http://man7.org/linux/man-pages/man8/mkswap.8.html) 工具做到这一点。

```
sudo mkswap /swapfile
```

你应该会看到这样的输出：

```
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=7e1faacb-ea93-4c49-a53d-fb40f3ce016a
```

#### 步骤 3：启用交换文件

现在，你的系统知道文件 `swapfile` 可以用作交换空间。但是还没有完成。你需要启用该交换文件，以便系统可以开始使用该文件作为交换。

```
sudo swapon /swapfile
```

现在，如果你检查交换空间，你应该会看到你的 Linux 系统会识别并使用它作为交换空间：

```
swapon --show
NAME       TYPE   SIZE USED PRIO
/swapfile  file 1024M   0B   -2
```

#### 步骤 4：让改变持久化

迄今为止你所做的一切都是暂时的。重新启动系统，所有更改都将消失。

你可以通过将新创建的交换文件添加到 `/etc/fstab` 文件来使更改持久化。

对 `/etc/fstab` 文件进行任何更改之前，最好先进行备份。

```
sudo cp /etc/fstab /etc/fstab.back
```

现在将以下行添加到 `/etc/fstab` 文件的末尾：

```
/swapfile none swap sw 0 0
```

你可以使用[命令行文本编辑器](https://itsfoss.com/command-line-text-editors-linux/)手动操作，或者使用以下命令：

```
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
```

现在一切都准备好了。即使在重新启动你的 Linux 系统后，你的交换文件也会被使用。

### 调整 swappiness 参数

`swappiness` 参数决定了交换空间的使用频率。`swappiness` 值的范围从 0 到 100。较高的值意味着交换空间将被更频繁地使用。

Ubuntu 桌面的默认的 `swappiness` 是 60，而服务器的默认 `swappiness` 是 1。你可以使用以下命令检查 `swappiness`：

```
cat /proc/sys/vm/swappiness
```

为什么服务器应该使用低的 `swappiness` 值？因为交换空间比内存慢，为了获得更好的性能，应该尽可能多地使用内存。在服务器上，性能因素至关重要，因此 `swappiness` 应该尽可能低。

你可以使用以下系统命令动态更改 `swappiness`：

```
sudo sysctl vm.swappiness=25
```

这种改变只是暂时的。如果要使其永久化，可以编辑 `/etc/sysctl.conf` 文件，并在文件末尾添加`swappiness` 值:

```
vm.swappiness=25
```

### 在 Linux 上调整交换空间的大小

在 Linux 上有几种方法可以调整交换空间的大小。但是在你看到这一点之前，你应该了解一些关于它的事情。

当你要求系统停止将交换文件用于交换空间时，它会将所有数据（确切地说是内存页）传输回内存。所以你应该有足够的空闲内存，然后再停止交换。

这就是为什么创建和启用另一个临时交换文件是一个好的做法的原因。这样，当你关闭原来的交换空间时，你的系统将使用临时交换文件。现在你可以调整原来的交换空间的大小。你可以手动删除临时交换文件或留在那里，下次启动时会自动删除（LCTT 译注：存疑？）。

如果你有足够的可用内存或者创建了临时交换空间，那就关闭你原来的交换文件。

```
sudo swapoff /swapfile
```

现在你可以使用 `fallocate` 命令来更改文件的大小。比方说，你将其大小更改为 2GB:

```
sudo fallocate -l 2G /swapfile
```

现在再次将文件标记为交换空间：

```
sudo mkswap /swapfile
```

并再次启用交换文件：

```
sudo swapon /swapfile
```

你也可以选择同时拥有多个交换文件。

### 删除 Linux 中的交换文件

你可能有不在 Linux 上使用交换文件的原因。如果你想删除它，该过程类似于你刚才看到的调整交换大小的过程。

首先，确保你有足够的空闲内存。现在关闭交换文件：

```
sudo swapoff /swapfile
```

下一步是从 `/etc/fstab` 文件中删除相应的条目。

最后，你可以删除该文件来释放空间：

```
sudo rm /swapfile
```

### 你用了交换空间了吗？

我想你现在已经很好地理解了 Linux 中的交换文件概念。现在，你可以根据需要轻松创建交换文件或调整它们的大小。

如果你对这个话题有什么要补充的或者有任何疑问，请在下面留下评论。

---

via: <https://itsfoss.com/create-swap-file-linux/>

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

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


用 Git 作为聊天应用的后端

Summary: GIC 是一个聊天应用程序的原型，展示了一种使用 Git 的新方法。

GIC 是一个聊天应用程序的原型，展示了一种使用 Git 的新方法。

# 用 Git 作为聊天应用的后端

>
> GIC 是一个聊天应用程序的原型，展示了一种使用 Git 的新方法。
>
>
>

[Git](https://git-scm.com/) 是一个少有的能将如此多的现代计算封装到一个程序之中的应用程序，它可以用作许多其他应用程序的计算引擎。虽然它以跟踪软件开发中的源代码更改而闻名，但它还有许多其他用途，可以让你的生活更轻松、更有条理。在这个 Git 系列中，我们将分享七种鲜为人知的使用 Git 的方法。

今天我们来看看 GIC，它是一个基于 Git 的聊天应用。

### 初识 GIC

虽然 Git 的作者们可能期望会为 Git 创建前端，但毫无疑问他们从未预料到 Git 会成为某种后端，如聊天客户端的后端。然而，这正是开发人员 Ephi Gabay 用他的实验性的概念验证应用 [GIC](https://github.com/ephigabay/GIC) 所做的事情：用 [Node.js](https://nodejs.org/en/) 编写的聊天客户端，使用 Git 作为其后端数据库。

GIC 并没有打算用于生产用途。这纯粹是一种编程练习，但它证明了开源技术的灵活性。令人惊讶的是，除了 Node 库和 Git 本身，该客户端只包含 300 行代码。这是这个聊天客户端和开源所反映出来的最好的地方之一：建立在现有工作基础上的能力。眼见为实，你应该自己亲自来了解一下 GIC。

### 架设起来

GIC 使用 Git 作为引擎，因此你需要一个空的 Git 存储库为聊天室和记录器提供服务。存储库可以托管在任何地方，只要你和需要访问聊天服务的人可以访问该存储库就行。例如，你可以在 GitLab 等免费 Git 托管服务上设置 Git 存储库，并授予聊天用户对该 Git 存储库的贡献者访问权限。（他们必须能够提交到存储库，因为每个聊天消息都是一个文本的提交。）

如果你自己托管，请创建一个中心化的裸存储库。聊天中的每个用户必须在裸存储库所在的服务器上拥有一个帐户。你可以使用如 [Gitolite](http://gitolite.com) 或 [Gitea](http://gitea.io) 这样的 Git 托管软件创建特定于 Git 的帐户，或者你可以在服务器上为他们提供个人用户帐户，可以使用 `git-shell` 来限制他们只能访问 Git。

自托管实例的性能最好。无论你是自己托管还是使用托管服务，你创建的 Git 存储库都必须具有一个活跃分支，否则 GIC 将无法在用户聊天时进行提交，因为没有 Git HEAD。确保分支初始化和活跃的最简单方法是在创建存储库时提交 `README` 或许可证文件。如果你没有这样做，你可以在事后创建并提交一个：

```
$ echo "chat logs" > README
$ git add README
$ git commit -m 'just creating a HEAD ref'
$ git push -u origin HEAD
```

### 安装 GIC

由于 GIC 基于 Git 并使用 Node.js 编写，因此必须首先安装 Git、Node.js 和 Node 包管理器npm（它应该与 Node 捆绑在一起）。安装它们的命令因 Linux 或 BSD 发行版而异，这是 Fedora 上的一个示例命令：

```
$ sudo dnf install git nodejs
```

如果你没有运行 Linux 或 BSD，请按照 [git-scm.com](http://git-scm.com) 和 [nodejs.org](http://nodejs.org) 上的安装说明进行操作。

因此，GIC 没有安装过程。每个用户（在此示例中为 Alice 和 Bob）必须将存储库克隆到其硬盘驱动器：

```
$ git clone https://github.com/ephigabay/GIC GIC
```

将目录更改为 GIC 目录并使用 `npm` 安装 Node.js 依赖项：

```
$ cd GIC
$ npm install
```

等待 Node 模块下载并安装。

### 配置 GIC

GIC 唯一需要的配置是 Git 聊天存储库的位置。编辑 `config.js` 文件：

```
module.exports = {
  gitRepo: 'seth@example.com:/home/gitchat/chatdemo.git',
  messageCheckInterval: 500,
  branchesCheckInterval: 5000
};
```

在尝试 GIC 之前测试你与 Git 存储库的连接，以确保你的配置是正确的：

```
$ git clone --quiet seth@example.com:/home/gitchat/chatdemo.git > /dev/null
```

假设你没有收到任何错误，就可以开始聊天了。

### 用 Git 聊天

在 GIC 目录中启动聊天客户端：

```
$ npm start
```

客户端首次启动时，必须克隆聊天存储库。由于它几乎是一个空的存储库，因此不会花费很长时间。输入你的消息，然后按回车键发送消息。

*基于 Git 的聊天客户端。 他们接下来会怎么想？*

正如问候消息所说，Git 中的分支在 GIC 中就是聊天室或频道。无法在 GIC 的 UI 中创建新分支，但如果你在另一个终端会话或 Web UI 中创建一个分支，它将立即显示在 GIC 中。将一些 IRC 式的命令加到 GIC 中并不需要太多工作。

聊了一会儿之后，可以看看你的 Git 存储库。由于聊天发生在 Git 中，因此存储库本身也是聊天日志：

```
$ git log --pretty=format:"%p %cn %s"
4387984 Seth Kenlon Hey Chani, did you submit a talk for All Things Open this year?
36369bb Chani No I didn't get a chance. Did you?
[...]
```

### 退出 GIC

Vim 以来，还没有一个应用程序像 GIC 那么难以退出。你看，没有办法停止 GIC。它会一直运行，直到它被杀死。当你准备停止 GIC 时，打开另一个终端选项卡或窗口并发出以下命令：

```
$ kill `pgrep npm`
```

GIC 是一个新奇的事物。这是一个很好的例子，说明开源生态系统如何鼓励和促进创造力和探索，并挑战我们从不同角度审视应用程序。尝试下 GIC，也许它会给你一些思路。至少，它可以让你与 Git 度过一个下午。

---

via: <https://opensource.com/article/19/4/git-based-chat>

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

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


在 Linux 中使用变量

Summary: 让我们来看看所有这些 $ 值可以告诉你什么。

让我们来看看所有这些 $ 值可以告诉你什么。

# 在 Linux 中使用变量

>
> 变量通常看起来像 $var 这样，但它们也有 $1、$\*、$? 和 $$ 这种形式。让我们来看看所有这些 $ 值可以告诉你什么。
>
>
>

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

有许多重要的值都存储在 Linux 系统中，我们称为“变量”，但实际上变量有几种类型，并且一些有趣的命令可以帮助你使用它们。在上一篇文章中，我们研究了[环境变量](/article-10916-1.html)以及它们定义在何处。在本文中，我们来看一看在命令行和脚本中使用的变量。

### 用户变量

虽然在命令行中设置变量非常容易，但是有一些有趣的技巧。要设置变量，你只需这样做：

```
$ myvar=11
$ myvar2="eleven"
```

要显示这些值，只需这样做：

```
$ echo $myvar
11
$ echo $myvar2
eleven
```

你也可以使用这些变量。例如，要递增一个数字变量，使用以下任意一个命令：

```
$ myvar=$((myvar+1))
$ echo $myvar
12
$ ((myvar=myvar+1))
$ echo $myvar
13
$ ((myvar+=1))
$ echo $myvar
14
$ ((myvar++))
$ echo $myvar
15
$ let "myvar=myvar+1"
$ echo $myvar
16
$ let "myvar+=1"
$ echo $myvar
17
$ let "myvar++"
$ echo $myvar
18
```

使用其中的一些，你可以增加一个变量的值。例如：

```
$ myvar0=0
$ ((myvar0++))
$ echo $myvar0
1
$ ((myvar0+=10))
$ echo $myvar0
11
```

通过这些选项，你可能会发现它们是容易记忆、使用方便的。

你也可以*删除*一个变量 – 这意味着没有定义它。

```
$ unset myvar
$ echo $myvar
```

另一个有趣的选项是，你可以设置一个变量并将其设为**只读**。换句话说，变量一旦设置为只读，它的值就不能改变（除非一些非常复杂的命令行魔法才可以）。这意味着你也不能删除它。

```
$ readonly myvar3=1
$ echo $myvar3
1
$ ((myvar3++))
-bash: myvar3: readonly variable
$ unset myvar3
-bash: unset: myvar3: cannot unset: readonly variable
```

你可以使用这些设置和递增选项中来赋值和操作脚本中的变量，但也有一些非常有用的*内部变量*可以用于在脚本中。注意，你无法重新赋值或增加它们的值。

### 内部变量

在脚本中可以使用很多变量来计算参数并显示有关脚本本身的信息。

* `$1`、`$2`、`$3` 等表示脚本的第一个、第二个、第三个等参数。
* `$#` 表示参数的数量。
* `$*` 表示所有参数。
* `$0` 表示脚本的名称。
* `$?` 表示先前运行的命令的返回码（0 代表成功）。
* `$$` 显示脚本的进程 ID。
* `$PPID` 显示 shell 的进程 ID（脚本的父进程）。

其中一些变量也适用于命令行，但显示相关信息：

* `$0` 显示你正在使用的 shell 的名称（例如，-bash）。
* `$$` 显示 shell 的进程 ID。
* `$PPID` 显示 shell 的父进程的进程 ID（对我来说，是 sshd）。

为了查看它们的结果，如果我们将所有这些变量都放入一个脚本中，比如：

```
#!/bin/bash

echo $0
echo $1
echo $2
echo $#
echo $*
echo $?
echo $$
echo $PPID
```

当我们调用这个脚本时，我们会看到如下内容：

```
$ tryme one two three
/home/shs/bin/tryme     <== 脚本名称
one                     <== 第一个参数
two                     <== 第二个参数
3                       <== 参数的个数
one two three           <== 所有的参数
0                       <== 上一条 echo 命令的返回码
10410                   <== 脚本的进程 ID
10109                   <== 父进程 ID
```

如果我们在脚本运行完毕后检查 shell 的进程 ID，我们可以看到它与脚本中显示的 PPID 相匹配：

```
$ echo $$
10109                   <== shell 的进程 ID
```

当然，比起简单地显示它们的值，更有用的方式是使用它们。我们来看一看它们可能的用处。

检查是否已提供参数：

```
if [ $# == 0 ]; then
    echo "$0 filename"
    exit 1
fi
```

检查特定进程是否正在运行：

```
ps -ef | grep apache2 > /dev/null
if [ $? != 0 ]; then
    echo Apache is not running
    exit
fi
```

在尝试访问文件之前验证文件是否存在：

```
if [ $# -lt 2 ]; then
    echo "Usage: $0 lines filename"
    exit 1
fi

if [ ! -f $2 ]; then
    echo "Error: File $2 not found"
    exit 2
else
    head -$1 $2
fi
```

在下面的小脚本中，我们检查是否提供了正确数量的参数、第一个参数是否为数字，以及第二个参数代表的文件是否存在。

```
#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 lines filename"
    exit 1
fi

if [[ $1 != [0-9]* ]]; then
    echo "Error: $1 is not numeric"
    exit 2
fi

if [ ! -f $2 ]; then
    echo "Error: File $2 not found"
    exit 3
else
    echo top of file
    head -$1 $2
fi
```

### 重命名变量

在编写复杂的脚本时，为脚本的参数指定名称通常很有用，而不是继续将它们称为 `$1`、`$2` 等。等到第 35 行，阅读你脚本的人可能已经忘了 `$2` 表示什么。如果你将一个重要参数的值赋给 `$filename` 或 `$numlines`，那么他就不容易忘记。

```
#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 lines filename"
    exit 1
else
    numlines=$1
    filename=$2
fi

if [[ $numlines != [0-9]* ]]; then
    echo "Error: $numlines is not numeric"
    exit 2
fi

if [ ! -f $ filename]; then
    echo "Error: File $filename not found"
    exit 3
else
    echo top of file
    head -$numlines $filename
fi
```

当然，这个示例脚本只是运行 `head` 命令来显示文件中的前 x 行，但它的目的是显示如何在脚本中使用内部参数来帮助确保脚本运行良好，或在失败时清晰地知道失败原因。

---

via: <https://www.networkworld.com/article/3387154/working-with-variables-on-linux.html#tk.rss_all>

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

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


GNOME 3.34 发布

Summary: 最新版本的 GNOME 代号为“塞萨洛尼基”。考虑到这个版本经过了 6 个月的开发，这应该是对 GNOME 3.32 的一次令人印象深刻的升级。

# GNOME 3.34 发布

最新版本的 GNOME 代号为“<ruby> 塞萨洛尼基 <rt>  Thessaloniki </rt></ruby>”。考虑到这个版本经过了 6 个月的开发，这应该是对 [GNOME 3.32](https://www.gnome.org/news/2019/03/gnome-3-32-released/) 的一次令人印象深刻的升级。

在此版本中，有许多新功能和显著的性能改进。除了新功能外，可定制的程度也得到了提升。

以下是新的变化：

### GNOME 3.34 的关键改进

你可以观看此视频，了解 GNOME 3.34 中的新功能：

#### 拖放图标到文件夹

新的 shell 主题允许你拖放应用程序抽屉中的图标以重新排列它们，或将它们组合到一个文件夹中。你可能已经在 Android 或 iOS 智能手机中使用过此类功能。

#### 改进的日历管理器

改进的日历管理器可以轻松地与第三方服务集成，使你能够直接从 Linux 系统管理日程安排，而无需单独使用其他应用程序。

#### 背景选择的设置

现在，更容易为主屏幕和锁定屏幕选择自定义背景，因为它在同一屏幕中显示所有可用背景。为你节省至少一次鼠标点击。

#### 重新排列搜索选项

搜索选项和结果可以手动重新排列。因此，当你要搜索某些内容时，可以决定哪些内容先出现。

#### 响应式设计的“设置”应用

设置菜单 UI 现在具有响应性，因此无论你使用何种类型（或尺寸）的设备，都可以轻松访问所有选项。这肯定对 [Linux 智能手机（如 Librem 5）](https://itsfoss.com/librem-linux-phone/) 上的 GNOME 有所帮助。

除了所有这些之外，[官方公告](https://www.gnome.org/press/2019/09/gnome-3-34-released/)还提到到开发人员的有用补充（增加了系统分析器和虚拟化改进）：

>
> 对于开发人员，GNOME 3.34 在 Sysprof 中包含更多数据源，使应用程序的性能分析更加容易。对 Builder 的多项改进中包括集成的 D-Bus 检查器。
>
>
>

### 如何获得GNOME 3.34？

虽然新版本已经发布，但它还没有进入 Linux 发行版的官方存储库。所以，我们建议等待它，并在它作为更新包提供时进行升级。不管怎么说，如果你想构建它，你都可以在这里找到[源代码](https://download.gnome.org/)。

嗯，就是这样。如果你感兴趣，可以查看[完整版本说明](https://help.gnome.org/misc/release-notes/3.34/)以了解技术细节。

你如何看待新的 GNOME 3.34？

---

via: <https://itsfoss.com/gnome-3-34-release/>

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


Firefox 69 默认阻拦第三方 Cookie、自动播放的视频和加密矿工

Summary: 如果你使用的是 Mozilla Firefox 并且尚未更新到最新版本，那么你将错过许多新的重要功能。

# Firefox 69 默认阻拦第三方 Cookie、自动播放的视频和加密矿工

如果你使用的是 [Mozilla Firefox](https://itsfoss.com/why-firefox/) 并且尚未更新到最新版本，那么你将错过许多新的重要功能。

### Firefox 69 版本中的一些新功能

首先，Mozilla Firefox 69 会默认强制执行更强大的安全和隐私选项。以下是新版本的一些主要亮点。

#### Firefox 69 阻拦视频自动播放

现在很多网站都提供了自动播放视频。无论是弹出视频还是嵌入在文章中设置为自动播放的视频，默认情况下，Firefox 69 都会阻止它（或者可能会提示你）。

这个[阻拦自动播放](https://support.mozilla.org/en-US/kb/block-autoplay)功能可让用户自动阻止任何视频播放。

#### 禁止第三方跟踪 cookie

默认情况下，作为<ruby> 增强型跟踪保护 <rt>  Enhanced Tracking Protection </rt></ruby>功能的一部分，它现在将阻止第三方跟踪 Cookie 和加密矿工。这是 Mozilla Firefox 的增强隐私保护功能的非常有用的改变。

Cookie 有两种：第一方的和第三方的。第一方 cookie 由网站本身拥有。这些是“好的 cookie”，可以让你保持登录、记住你的密码或输入字段等来改善浏览体验。第三方 cookie 由你访问的网站以外的域所有。广告服务器使用这些 Cookie 来跟踪你，并在你访问的所有网站上跟踪广告。Firefox 69 旨在阻止这些。

当它发挥作用时，你将在地址栏中看到盾牌图标。你可以选择为特定网站禁用它。

#### 禁止加密矿工消耗你的 CPU

对加密货币的欲望一直困扰着这个世界。GPU 的价格已经高企，因为专业的加密矿工们使用它们来挖掘加密货币。

人们使用工作场所的计算机秘密挖掘加密货币。当我说工作场所时，我不一定是指 IT 公司。就在今年，[人们在乌克兰的一家核电站抓住了偷挖加密货币的活动](https://thenextweb.com/hardfork/2019/08/22/ukrainian-nuclear-powerplant-mine-cryptocurrency-state-secrets/)。

不仅如此。如果你访问某些网站，他们会运行脚本并使用你的计算机的 CPU 来挖掘加密货币。这在 IT 术语中被称为 <ruby>   挖矿攻击  <rt>  cryptojacking </rt></ruby>。

好消息是 Firefox 69 会自动阻止这些加密矿工脚本。因此，网站不再能利用你的系统资源进行挖矿攻击了。

#### Firefox 69 带来的更强隐私保护

如果你把隐私保护设置得更严格，那么它也会阻止指纹。因此，当你在 Firefox 69 中选择严格的隐私设置时，你不必担心通过[指纹](https://clearcode.cc/blog/device-fingerprinting/)共享计算机的配置信息。

在[关于这次发布的官方博客文章](https://blog.mozilla.org/blog/2019/09/03/todays-firefox-blocks-third-party-tracking-cookies-and-cryptomining-by-default/)中，Mozilla 提到，在此版本中，他们希望默认情况下为 100％ 的用户提供保护。

#### 性能改进

尽管在更新日志中没有提及 Linux，但它提到了在 Windows 10/mac OS 上运行性能、UI 和电池寿命有所改进。如果你发现任何性能改进，请在评论中提及。

### 总结

除了所有这些之外，还有很多底层的改进。你可以查看[发行说明](https://www.mozilla.org/en-US/firefox/69.0/releasenotes/)中的详细信息。

Firefox 69 对于关注其隐私的用户来说是一个令人印象深刻的更新。与我们最近对某些[安全电子邮件服务](https://itsfoss.com/secure-private-email-services/)的建议类似，我们建议你更新浏览器以充分受益。新版本已在大多数 Linux 发行版中提供，你只需要更新你的系统即可。

如果你对阻止广告和跟踪 Cookie 的浏览器感兴趣，请尝试[开源的 Brave 浏览器](https://itsfoss.com/brave-web-browser/)，他们甚至给你提供了加密货币以让你使用他们的浏览器，你可以使用这些加密货币来奖励你最喜爱的发布商。

你觉得这个版本怎么样？请在下面的评论中告诉我们你的想法。

---

via: <https://itsfoss.com/firefox-69/>

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

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


区块链能如何补充开源

Summary: 了解区块链如何成为去中心化的开源补贴模型。

了解区块链如何成为去中心化的开源补贴模型。

# 区块链能如何补充开源

>
> 了解区块链如何成为去中心化的开源补贴模型。
>
>
>

《<ruby>   大教堂与集市  <rt>  The Cathedral and The Bazaar </rt></ruby>》是 20 年前由<ruby> 埃里克·史蒂文·雷蒙德 <rt>  Eric Steven Raymond </rt> <rt> </rt></ruby>（ESR）撰写的经典开源故事。在这个故事中，ESR 描述了一种新的革命性的软件开发模型，其中复杂的软件项目是在没有（或者很少的）集中管理的情况下构建的。这个新模型就是<ruby> 开源 <rt>  open source </rt></ruby>。

ESR 的故事比较了两种模式：

* 经典模型（由“大教堂”所代表），其中软件由一小群人在封闭和受控的环境中通过缓慢而稳定的发布制作而成。
* 以及新模式（由“集市”所代表），其中软件是在开放的环境中制作的，个人可以自由参与，但仍然可以产生一个稳定和连贯的系统。 开源如此成功的一些原因可以追溯到 ESR 所描述的创始原则。尽早发布、经常发布，并接受许多头脑必然比一个更好的事实，让开源项目进入全世界的人才库（很少有公司能够使用闭源模式与之匹敌）。

在 ESR 对黑客社区的反思分析 20 年后，我们看到开源成为占据主导地位的的模式。它不再仅仅是为了满足开发人员的个人喜好，而是创新发生的地方。甚至是全球[最大](http://oss.cash/)软件公司也正在转向这种模式，以便继续占据主导地位。

### 易货系统

如果我们仔细研究开源模型在实践中的运作方式，我们就会意识到它是一个封闭系统，只对开源开发者和技术人员开放。影响项目方向的唯一方法是加入开源社区，了解成文和不成文的规则，学习如何贡献、编码标准等，并自己亲力完成。

这就是集市的运作方式，也是这个易货系统类比的来源。易货系统是一种交换服务和货物以换取其他服务和货物的方法。在市场中（即软件的构建地）这意味着为了获取某些东西，你必须自己也是一个生产者并回馈一些东西——那就是通过交换你的时间和知识来完成任务。集市是开源开发者与其他开源开发者交互并以开源方式生成开源软件的地方。

易货系统向前迈出了一大步，从自给自足的状态演变而来，而在自给自足的状态下，每个人都必须成为所有行业的杰出人选。使用易货系统的集市（开源模式）允许具有共同兴趣和不同技能的人们收集、协作和创造个人无法自行创造的东西。易货系统简单，没有现代货币系统那么复杂，但也有一些局限性，例如：

* 缺乏可分性：在没有共同的交换媒介的情况下，不能将较大的不可分割的商品/价值兑换成较小的商品/价值。例如，如果你想在开源项目中进行一些哪怕是小的更改，有时你可能仍需要经历一个高进入门槛。
* 存储价值：如果一个项目对贵公司很重要，你可能需要投入大量投资/承诺。但由于它是开源开发者之间的易货系统，因此拥有强大发言权的唯一方法是雇佣许多开源贡献者，但这并非总是可行的。
* 转移价值：如果你投资了一个项目（受过培训的员工、雇用开源开发者）并希望将重点转移到另一个项目，却不可能快速转移（你在上一个项目中拥有的）专业知识、声誉和影响力。
* 时间脱钩：易货系统没有为延期或提前承诺提供良好的机制。在开源世界中，这意味着用户无法提前或在未来期间以可衡量的方式表达对项目的承诺或兴趣。 下面，我们将探讨如何使用集市的后门解决这些限制。

### 货币系统

人们因为不同的原因勾连于集市上：有些人在那里学习，有些是出于满足开发者个人的喜好，有些人为大型软件工厂工作。因为在集市中拥有发言权的唯一方法是成为开源社区的一份子并加入这个易货系统，为了在开源世界获得信誉，许多大型软件公司雇用这些开发者并以货币方式支付薪酬。这代表可以使用货币系统来影响集市，开源不再只是为了满足开发者个人的喜好，它也占据全球整体软件生产的重要部分，并且有许多人想要施加影响。

开源设定了开发人员交互的指导原则，并以分布式方式构建一致的系统。它决定了项目的治理方式、软件的构建方式以及其成果如何分发给用户。它是分散的实体共同构建高质量软件的开放共识模型。但是开源模型并没有包括如何补贴开源的部分，无论是直接还是间接地，通过内在或外在动机的赞助，都与集市无关。

目前，没有相当于以补贴为目的的去中心化式开源开发模型。大多数开源补贴都是集中式的，通常一家公司通过雇用该项目的主要开源开发者来主导该项目。说实话，这是目前最好的状况，因为它保证了开发人员将长期获得报酬，项目也将继续蓬勃发展。

项目垄断情景也有例外情况：例如，一些云原生计算基金会（CNCF）项目是由大量的竞争公司开发的。此外，Apache 软件基金会（ASF）旨在通过鼓励不同的贡献者来使他们管理的项目不被单一供应商所主导，但实际上大多数受欢迎的项目仍然是单一供应商项目。

我们缺少的是一个开放的、去中心化的模式，就像一个没有集中协调和所有权的集市一样，消费者（开源用户）和生产者（开源开发者）在市场力量和开源价值的驱动下相互作用。为了补充开源，这样的模型也必须是开放和去中心化的，这就是为什么我认为区块链技术[最适合](https://opensource.com/article/18/8/open-source-tokenomics)的原因。

旨在补贴开源开发的大多数现有区块链（和非区块链）平台主要针对的是漏洞赏金、小型和零碎的任务。少数人还专注于资助新的开源项目。但并没有多少平台旨在提供维持开源项目持续开发的机制 —— 基本上，这个系统可以模仿开源服务提供商公司或开放核心、基于开源的 SaaS 产品公司的行为：确保开发人员可以获得持续和可预测的激励，并根据激励者（即用户）的优先事项指导项目开发。这种模型将解决上面列出的易货系统的局限性：

* 允许可分性：如果你想要一些小的修复，你可以支付少量费用，而不是成为项目的开源开发者的全部费用。
* 存储价值：你可以在项目中投入大量资金，并确保其持续发展和你的发言权。
* 转移价值：在任何时候，你都可以停止投资项目并将资金转移到其他项目中。
* 时间脱钩：允许定期定期付款和订阅。

还有其他好处，纯粹是因为这种基于区块链的系统是透明和去中心化的：根据用户的承诺、开放的路线图承诺、去中心化决策等来量化项目的价值/实用性。

### 总结

一方面，我们看到大公司雇用开源开发者并收购开源初创公司甚至基础平台（例如微软收购 GitHub）。许多（甚至大多数）能够长期成功运行的开源项目都集中在单个供应商周围。开源的重要性及其集中化是一个事实。

另一方面，[维持开源软件](https://www.youtube.com/watch?v=VS6IpvTWwkQ)的挑战正变得越来越明显，许多人正在更深入地研究这个领域及其基本问题。有一些项目具有很高的知名度和大量的贡献者，但还有许多其他也重要的项目缺乏足够的贡献者和维护者。

有[许多努力](https://opensource.com/article/18/8/open-source-tokenomics)试图通过区块链来解决开源的挑战。这些项目应提高透明度、去中心化和补贴，并在开源用户和开发人员之间建立直接联系。这个领域还很年轻，但是进展很快，随着时间的推移，集市将会有一个加密货币系统。

如果有足够的时间和足够的技术，去中心化就会发生在很多层面：

* 互联网是一种去中心化的媒介，它释放了全球分享和获取知识的潜力。
* 开源是一种去中心化的协作模式，它释放了全球的创新潜力。
* 同样，区块链可以补充开源，成为去中心化的开源补贴模式。

请在[推特](http://twitter.com/bibryam)上关注我在这个领域的其他帖子。

---

via: <https://opensource.com/article/18/9/barter-currency-system>

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


Manjaro Linux 从业余爱好项目成长为专业项目

# Manjaro Linux 从业余爱好项目成长为专业项目

>
> Manjaro 正在走专业化路线。虽然 Manjaro 社区将负责项目的开发和其他相关活动，但该团队已成立了一家公司作为其法人实体处理商业协议和专业服务。
>
>
>

Manjaro 是一个相当流行的 Linux 发行版，而它只是由三个人（Bernhard、Jonathan 和 Phili）于 2011 年激情之下创建的项目。现在，它是目前[最好的 Linux 发行版](https://itsfoss.com/best-linux-distributions/)之一，所以它不能真的一直还只是个业余爱好项目了，对吧。

嗯，现在有个好消息：Manjaro 已经建立了一家新公司“[Manjaro GmbH & Co. KG]”，以 [Blue Systems](https://www.blue-systems.com/) 为顾问，以便能够全职雇佣维护人员，并探索未来的商业机会。

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

### 具体有什么变化？

根据[官方公告](https://forum.manjaro.org/t/manjaro-is-taking-the-next-step/102105)，Manjaro 项目将保持不变。但是，成立了一家新公司来保护该项目，以允许他们制定法律合同、官方协议和进行其他潜在的商业活动。因此，这使得这个“业余爱好项目”成为了一项专业工作。

除此之外，捐赠资金将转给非营利性的[财政托管](https://en.wikipedia.org/wiki/Fiscal_sponsorship)（[CommunityBridge](https://communitybridge.org/) 和 [OpenCollective](https://opencollective.com/)），让他们来代表项目接受和管理资金。请注意，这些捐赠没有被用于创建这个公司，因此，将资金转移给非营利的财务托管将在确保捐赠的同时也确保透明度。

### 这会有何改善？

随着这个公司的成立，（如开发者所述）新结构将以下列方式帮助 Manjaro：

* 使开发人员能够全职投入 Manjaro 及其相关项目；
* 在 Linux 相关的比赛和活动中与其他开发人员进行互动；
* 保护 Manjaro 作为一个社区驱动项目的独立性，并保护其品牌；
* 提供更快的安全更新，更有效地响应用户需求；
* 提供在专业层面上作为公司行事的手段。

Manjaro 团队还阐明了它将如何继续致力于社区：

>
> Manjaro 的使命和目标将与以前一样 —— 支持 Manjaro 的协作开发及其广泛使用。这项工作将继续通过捐赠和赞助来支持，这些捐赠和赞助在任何情况下都不会被这个成立的公司使用。
>
>
>

### 关于 Manjaro 公司的更多信息

尽管他们提到该项目将独立于公司，但并非所有人都清楚当有了一家具有商业利益的公司时 Manjaro 与“社区”的关系。因此，该团队还在公告中澄清了他们作为一家公司的计划。

>
> Manjaro GmbH ＆ Co.KG 的成立旨在有效地参与商业协议、建立合作伙伴关系并提供专业服务。有了这个，Manjaro 开发者 Bernhard 和 Philip 现在可以全职工作投入到 Manjaro，而 Blue Systems 将担任顾问。
>
>
> 公司将能够正式签署合同并承担职责和保障，而社区不能承担或承担责任。
>
>
>

### 总结

因此，通过这一举措以及商业机会，他们计划全职工作并聘请贡献者。

当然，现在他们的意思是“业务”（我希望不是作为坏人）。对此公告的大多数反应都是积极的，我们都祝他们好运。虽然有些人可能对具有“商业”利益的“社区”项目持怀疑态度（还记得 [FreeOffice 和 Manjaro 的挫败](https://itsfoss.com/libreoffice-freeoffice-manjaro-linux/)吗？），但我认为这是一个有趣的举措。

你怎么看？请在下面的评论中告诉我们你的想法。

---

via: <https://itsfoss.com/manjaro-linux-business-formation/>

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


开源新闻综述：五角大楼、好莱坞和 Sandboxie 的开源

Summary: 不要错过两周以来最大的开源头条新闻。

不要错过两周以来最大的开源头条新闻。

# 开源新闻综述：五角大楼、好莱坞和 Sandboxie 的开源

>
> 不要错过两周以来最大的开源头条新闻。
>
>
>

<img src="content_image/album_201909_17_122416ry11111hiy11bt4x.png" alt="Weekly news roundup with TV" title="Weekly news roundup with TV">

在本期我们的开源新闻综述中有 Sandboxie 的开源之路、五角大楼开源计划的进一步变化、好莱坞开源等等！

### 五角大楼不符合白宫对开源软件的要求

2016 年，美国白宫要求每个美国政府机构必须在三年内开放至少 20％ 的定制软件。2017 年有一篇关于这一倡议的[有趣文章](https://medium.com/@DefenseDigitalService/code-mil-an-open-source-initiative-at-the-pentagon-5ae4986b79bc)，其中列出了一些令人激动的事情和面临的挑战。

根据美国政府问责局（GAO）的说法，[美国五角大楼做的还远远不足](https://www.nextgov.com/analytics-data/2019/09/pentagon-needs-make-more-software-open-source-watchdog-says/159832/)。

在一篇关于 Nextgov 的文章中，Jack Corrigan 写道，截至 2019 年 7 月，美国五角大楼仅发布了 10％ 的代码为开源代码。他们还没有实施的其它白宫任务包括要求制定开源软件政策和定制代码的清单。

根据该报告，一些美国政府官员告诉 GAO，他们担心美国政府部门间共享代码的安全风险。他们还承认没有创建衡量开源工作成功的指标。美国五角大楼的首席技术官将五角大楼的规模列为不执行白宫的开源任务的原因。在周二发布的一份报告中，GAO 表示，“在（美国国防部）完全实施其试点计划并确定完成行政管理和预算局（OMB）要求的里程碑之前，该部门将无法达成显著的成本节约和效率的目的。”

### Sandboxie 在开源的过程中变成了免费软件

一家英国安全公司 Sophos Group plc 发布了[其流行的 Sandboxie 工具的免费版本](https://www.sandboxie.com/DownloadSandboxie)，它用作Windows 的隔离操作环境（[可在此下载](https://www.sandboxie.com/DownloadSandboxie)）。

Sophos 表示，由于 Sandboxie 不是其业务的核心，因此更容易做出的决定就是关闭它。但 Sandboxie 因为无需让用户的操作系统冒风险就可以在安全的环境中运行未知软件而[广受赞誉](https://betanews.com/2019/09/13/sandboxie-free-open-source/)，因此该团队正在投入额外的工作将其作为开源软件发布。这个免费但非开源的中间阶段似乎与当前的系统设计有关，因为它需要激活密钥：

>
> Sandboxie 目前使用许可证密钥来激活和授予仅针对付费客户开放的高级功能的访问权限（与使用免费版本的用户相比）。我们修改了代码，并发布了一个不限制任何功能的免费版本的更新版。换句话说，新的免费许可证将可以访问之前仅供付费客户使用的所有功能。
>
>
>

受此工具的社区影响，Sophos 的高级领导人宣布发布 Sandboxie 版本 5.31.4，这个不受限制的程序版本将保持免费，直到该工具完全开源。

>
> “Sandboxie 用户群代表了一些最热情、前瞻性和知识渊博的安全社区成员，我们不想让你失望，”[Sophos 的博文说到](https://community.sophos.com/products/sandboxie/f/forum/115109/major-sandboxie-news-sandboxie-is-now-a-free-tool-with-plans-to-transition-it-to-an-open-source-tool/414522)。“经过深思熟虑后，我们认为让 Sandboxie 走下去的最佳方式是将其交还给用户，将其转换为开源工具。”
>
>
>

### 志愿者团队致力于查找和数字化无版权书籍

1924 年以前在美国出版的所有书籍都是[公有的、可以自由使用/复制的](https://www.vice.com/en_us/article/a3534j/libraries-and-archivists-are-scanning-and-uploading-books-that-are-secretly-in-the-public-domain)。1964 年及之后出版的图书在出版日期后将保留 95 年的版权。但由于版权漏洞，1923 年至 1964 年间出版的书籍中有高达 75％ 可以免费阅读和复制。现在只需要耗时确认那些书是什么。

因此，一些图书馆、志愿者和档案管理员们联合起来了解哪些图书没有版权，然后将其数字化并上传到互联网。由于版权续约记录已经数字化，因此很容易判断 1923 年至 1964 年间出版的书籍是否更新了其版权。但是，由于试图提供的是反证，因此寻找缺乏版权更新的难度要大得多。

参与者包括纽约公共图书馆（NYPL），它[最近解释了](https://www.nypl.org/blog/2019/09/01/historical-copyright-records-transparency)为什么这个耗时的项目是值得的。为了帮助更快地找到更多书籍，NYPL 将许多记录转换为 XML 格式。这样可以更轻松地自动执行查找可以将哪些书籍添加到公共域的过程。

### 好莱坞的学院软件基金会获得新成员

微软和苹果公司宣布计划以<ruby> 学院软件基金会 <rt>  Academy Software Foundation </rt></ruby>（ASWF）的高级会员做出贡献。他们将加入[创始董事会成员](https://variety.com/2019/digital/news/microsoft-apple-academy-software-foundation-1203334675/)，其它成员还包括 Netflix、Google Cloud、Disney Studios 和 Sony Pictures。

学院软件基金会于 2018 年作为[电影艺术与科学学院](https://www.oscars.org/)和[Linux 基金会](http://www.linuxfoundation.org/)的联合项目而启动。

>
> 学院软件基金会（ASWF）的使命是提高贡献到内容创作行业的开源软件库的质量和数量；提供一个中立的论坛来协调跨项目的工作；提供通用的构建和测试基础架构；并为个人和组织提供参与推进我们的开源生态系统的明确途径。
>
>
>

在第一年内，该基金会构建了 [OpenTimelineIO](https://github.com/PixarAnimationStudios/OpenTimelineIO)，这是一种开源 API 和交换格式，可帮助工作室团队跨部门协作。OpenTImelineIO 被该[基金会技术咨询委员会](https://www.linuxfoundation.org/press-release/2019/07/opentimelineio-joins-aswf/)去年 7 月正式接受为第五个托管项目。他们现在将它与 [OpenColorIO](https://opencolorio.org/)、[OpenCue](https://www.opencue.io/)、[OpenEXR](https://www.openexr.com/) 和 [OpenVDB](https://www.openvdb.org/) 并列维护。

### 其它新闻

* [Comcast 将开源网络软件投入生产环境](https://www.fiercetelecom.com/operators/comcast-puts-open-source-networking-software-into-production)
* [SD Times 本周开源项目：Ballerina](https://sdtimes.com/os/sd-times-open-source-project-of-the-week-ballerina/)
* [美国国防部努力实施开源计划](https://www.fedscoop.com/open-source-software-dod-struggles/)
* [Kong 开源通用服务网格 Kuma](https://sdtimes.com/micro/kong-open-sources-universal-service-mesh-kuma/)
* [Eclipse 推出 Jakarta EE 8](https://devclass.com/2019/09/11/hey-were-open-source-again-eclipse-unveils-jakarta-ee-8/)

一如既往地感谢 Opensource.com 的工作人员和主持人本周的帮助。

---

via: <https://opensource.com/article/19/9/news-september-15>

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


如何使用 Bash 脚本从 SAR 报告中获取 CPU 和内存使用情况

# 如何使用 Bash 脚本从 SAR 报告中获取 CPU 和内存使用情况

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

大多数 Linux 管理员使用 [SAR 报告](https://www.2daygeek.com/sar-system-performance-monitoring-command-tool-linux/)监控系统性能，因为它会收集一周的性能数据。但是，你可以通过更改 `/etc/sysconfig/sysstat` 文件轻松地将其延长到四周。同样，这段时间可以延长一个月以上。如果超过 28，那么日志文件将放在多个目录中，每月一个。

要将覆盖期延长至 28 天，请对 `/etc/sysconfig/sysstat` 文件做以下更改。

编辑 `sysstat` 文件并将 `HISTORY=7` 更改为 `HISTORY=28`。

在本文中，我们添加了三个 bash 脚本，它们可以帮助你在一个地方轻松查看每个数据文件的平均值。

我们过去加过许多有用的 shell 脚本。如果你想查看它们，请进入下面的链接。

* [如何使用 shell 脚本自动化日常操作](https://www.2daygeek.com/category/shell-script/)

这些脚本简单明了。出于测试目的，我们仅包括两个性能指标，即 CPU 和内存。你可以修改脚本中的其他性能指标以满足你的需求。

### 脚本 1：从 SAR 报告中获取平均 CPU 利用率的 Bash 脚本

该 bash 脚本从每个数据文件中收集 CPU 平均值并将其显示在一个页面上。

由于是月末，它显示了 2019 年 8 月的 28 天数据。

```
# vi /opt/scripts/sar-cpu-avg.sh

#!/bin/sh

echo "+----------------------------------------------------------------------------------+"
echo "|Average:         CPU     %user     %nice   %system   %iowait    %steal     %idle  |"
echo "+----------------------------------------------------------------------------------+"

for file in `ls -tr /var/log/sa/sa* | grep -v sar`
do
    dat=`sar -f $file | head -n 1 | awk '{print $4}'`
    echo -n $dat
    sar -f $file  | grep -i Average | sed "s/Average://"
done

echo "+----------------------------------------------------------------------------------+"
```

运行脚本后，你将看到如下输出。

```
# sh /opt/scripts/sar-cpu-avg.sh

+----------------------------------------------------------------------------------+
|Average:         CPU     %user     %nice   %system   %iowait    %steal     %idle  |
+----------------------------------------------------------------------------------+
08/01/2019        all      0.70      0.00      1.19      0.00      0.00     98.10
08/02/2019        all      1.73      0.00      3.16      0.01      0.00     95.10
08/03/2019        all      1.73      0.00      3.16      0.01      0.00     95.11
08/04/2019        all      1.02      0.00      1.80      0.00      0.00     97.18
08/05/2019        all      0.68      0.00      1.08      0.01      0.00     98.24
08/06/2019        all      0.71      0.00      1.17      0.00      0.00     98.12
08/07/2019        all      1.79      0.00      3.17      0.01      0.00     95.03
08/08/2019        all      1.78      0.00      3.14      0.01      0.00     95.08
08/09/2019        all      1.07      0.00      1.82      0.00      0.00     97.10
08/10/2019        all      0.38      0.00      0.50      0.00      0.00     99.12
.
.
.
08/29/2019        all      1.50      0.00      2.33      0.00      0.00     96.17
08/30/2019        all      2.32      0.00      3.47      0.01      0.00     94.20
+----------------------------------------------------------------------------------+
```

### 脚本 2：从 SAR 报告中获取平均内存利用率的 Bash 脚本

该 bash 脚本从每个数据文件中收集内存平均值并将其显示在一个页面上。

由于是月末，它显示了 2019 年 8 月的 28 天数据。

```
# vi /opt/scripts/sar-memory-avg.sh

#!/bin/sh

echo "+-------------------------------------------------------------------------------------------------------------------+"
echo "|Average:       kbmemfree kbmemused  %memused kbbuffers kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty  |"
echo "+-------------------------------------------------------------------------------------------------------------------+"

for file in `ls -tr /var/log/sa/sa* | grep -v sar`
do
    dat=`sar -f $file | head -n 1 | awk '{print $4}'`
    echo -n $dat
    sar -r -f $file  | grep -i Average | sed "s/Average://"
done

echo "+-------------------------------------------------------------------------------------------------------------------+"
```

运行脚本后，你将看到如下输出。

```
# sh /opt/scripts/sar-memory-avg.sh

+--------------------------------------------------------------------------------------------------------------------+
|Average:        kbmemfree kbmemused  %memused kbbuffers kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty  |
+--------------------------------------------------------------------------------------------------------------------+
08/01/2019      1492331   2388461     61.55     29888   1152142   1560615     12.72   1693031    380472         6
08/02/2019      1493126   2387666     61.53     29888   1147811   1569624     12.79   1696387    373346         3
08/03/2019      1489582   2391210     61.62     29888   1147076   1581711     12.89   1701480    370325         3
08/04/2019      1490403   2390389     61.60     29888   1148206   1569671     12.79   1697654    373484         4
08/05/2019      1484506   2396286     61.75     29888   1152409   1563804     12.75   1702424    374628         4
08/06/2019      1473593   2407199     62.03     29888   1151137   1577491     12.86   1715426    371000         8
08/07/2019      1467150   2413642     62.19     29888   1155639   1596653     13.01   1716900    372574        13
08/08/2019      1451366   2429426     62.60     29888   1162253   1604672     13.08   1725931    376998         5
08/09/2019      1451191   2429601     62.61     29888   1158696   1582192     12.90   1728819    371025         4
08/10/2019      1450050   2430742     62.64     29888   1160916   1579888     12.88   1729975    370844         5
.
.
.
08/29/2019      1365699   2515093     64.81     29888   1198832   1593567     12.99   1781733    376157        15
08/30/2019      1361920   2518872     64.91     29888   1200785   1595105     13.00   1784556    375641         8
+-------------------------------------------------------------------------------------------------------------------+
```

### 脚本 3：从 SAR 报告中获取 CPU 和内存平均利用率的 Bash 脚本

该 bash 脚本从每个数据文件中收集 CPU 和内存平均值并将其显示在一个页面上。

该脚本与上面相比稍微不同。它在同一位置同时显示两者（CPU 和内存）平均值，而不是其他数据。

```
# vi /opt/scripts/sar-cpu-mem-avg.sh

#!/bin/bash

for file in `ls -tr /var/log/sa/sa* | grep -v sar`
do
    sar -f $file | head -n 1 | awk '{print $4}'
    echo "-----------"
    sar -u -f $file | awk '/Average:/{printf("CPU Average: %.2f%\n"), 100 - $8}'
    sar -r -f $file | awk '/Average:/{printf("Memory Average: %.2f%\n"),(($3-$5-$6)/($2+$3)) * 100 }'
    printf "\n"
done
```

运行脚本后，你将看到如下输出。

```
# sh /opt/scripts/sar-cpu-mem-avg.sh

08/01/2019
-----------
CPU Average: 1.90%
Memory Average: 31.09%

08/02/2019
-----------
CPU Average: 4.90%
Memory Average: 31.18%

08/03/2019
-----------
CPU Average: 4.89%
Memory Average: 31.29%

08/04/2019
-----------
CPU Average: 2.82%
Memory Average: 31.24%

08/05/2019
-----------
CPU Average: 1.76%
Memory Average: 31.28%
.
.
.
08/29/2019
-----------
CPU Average: 3.83%
Memory Average: 33.15%

08/30/2019
-----------
CPU Average: 5.80%
Memory Average: 33.19%
```

---

via: <https://www.2daygeek.com/linux-get-average-cpu-memory-utilization-from-sar-data-report/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


Firefox 69 已可在 Fedora 中获取

# Firefox 69 已可在 Fedora 中获取

当你安装 Fedora Workstation 时，你会发现它包括了世界知名的 Firefox 浏览器。Mozilla 基金会以开发 Firefox 以及其他促进开放、安全和隐私的互联网项目为己任。Firefox 有快速的浏览引擎和大量的隐私功能。

开发者社区不断改进和增强 Firefox。最新版本 Firefox 69 于最近发布，你可在稳定版 Fedora 系统（30 及更高版本）中获取它。继续阅读以获得更多详情。

### Firefox 69 中的新功能

最新版本的 Firefox 包括<ruby>   增强跟踪保护  <rt>  Enhanced Tracking Protection </rt></ruby>（ETP）。当你使用带有新（或重置）配置文件的 Firefox 69 时，浏览器会使网站更难以跟踪你的信息或滥用你的计算机资源。

例如，不太正直的网站使用脚本让你的系统进行大量计算来产生加密货币，这称为<ruby>   加密挖矿  <rt>  cryptomining </rt></ruby>。加密挖矿在你不知情或未经许可的情况下发生，因此是对你的系统的滥用。Firefox 69 中的新标准设置可防止网站遭受此类滥用。

Firefox 69 还有其他设置，可防止识别或记录你的浏览器指纹，以供日后使用。这些改进为你提供了额外的保护，免于你的活动被在线追踪。

另一个常见的烦恼是在没有提示的情况下播放视频。视频播放也会占用更多的 CPU，你可能不希望未经许可就在你的笔记本上发生这种情况。Firefox 使用<ruby>   阻止自动播放  <rt>  Block Autoplay </rt></ruby>这个功能阻止了这种情况的发生。而 Firefox 69 还允许你停止静默开始播放的视频。此功能可防止不必要的突然的噪音。它还解决了更多真正的问题 —— 未经许可使用计算机资源。

新版本中还有许多其他新功能。在 [Firefox 发行说明](https://www.mozilla.org/en-US/firefox/69.0/releasenotes/)中阅读有关它们的更多信息。

### 如何获得更新

Firefox 69 存在于稳定版 Fedora 30、预发布版 Fedora 31 和 Rawhide 仓库中。该更新由 Fedora 的 Firefox 包维护者提供。维护人员还确保更新了 Mozilla 的网络安全服务（nss 包）。我们感谢 Mozilla 项目和 Firefox 社区在提供此新版本方面的辛勤工作。

如果你使用的是 Fedora 30 或更高版本，请在 Fedora Workstation 上使用*软件中心*，或在任何 Fedora 系统上运行以下命令：

```
$ sudo dnf --refresh upgrade firefox
```

如果你使用的是 Fedora 29，请[帮助测试更新](https://bodhi.fedoraproject.org/updates/FEDORA-2019-89ae5bb576)，这样它可以变得稳定，让所有用户可以轻松使用。

Firefox 可能会提示你升级个人设置以使用新设置。要使用新功能，你应该这样做。

---

via: <https://fedoramagazine.org/firefox-69-available-in-fedora/>

作者：[Paul W. Frields](https://fedoramagazine.org/author/pfrields/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


每周开源点评：Linux Plumbers、Appwrite

Summary: 了解每周的开源社区和行业趋势。

了解每周的开源社区和行业趋势。

# 每周开源点评：Linux Plumbers、Appwrite

>
> 了解每周的开源社区和行业趋势。
>
>
>

<img src="content_image/album_201909_18_113440ao2ox4rqpxlz7o4o.png" alt="Person standing in front of a giant computer screen with numbers, data" title="Person standing in front of a giant computer screen with numbers, data">

作为采用开源开发模式的企业软件公司的高级产品营销经理，这是我为产品营销人员、经理和其他相关人员发布的有关开源社区、市场和行业趋势的定期更新。以下是本次更新中我最喜欢的五篇文章。

### 《在 Linux Plumbers 会议上解决 Linux 具体细节》

* [文章地址](https://www.zdnet.com/article/working-on-linuxs-nuts-and-bolts-at-linux-plumbers/)

>
> Linux 的创建者 Linus Torvalds 告诉我，<ruby> 内核维护者峰会 <rt>  Kernel Maintainers Summit </rt></ruby>是顶级 Linux 内核开发人员的邀请制聚会。但是，虽然你可能认为这是关于规划 Linux 内核的未来的会议，但事实并非如此。“这个维护者峰会真的与众不同，因为它甚至不谈论技术问题。”相反，“全都谈的是关于创建和维护 Linux 内核的过程。”
>
>
>

**影响**：这就像技术版的 Bilderberg 会议：你们举办的都是各种华丽的流行语会议，而在这里我们做出的才是真正的决定。不过我觉得，可能不太会涉及到私人飞机吧。（LCTT 译注：有关 Bilderberg 请自行搜索）

### 《微软主办第一个 WSL 会议》

* [文章地址](https://www.zdnet.com/article/microsoft-hosts-first-windows-subsystem-for-linux-conference/)

>
> [Whitewater Foundry](https://github.com/WhitewaterFoundry) 是一家专注于 [Windows 的 Linux 子系统（WSL）](https://docs.microsoft.com/en-us/windows/wsl/install-win10)的创业公司，它的创始人 Hayden Barnes [宣布举办 WSLconf 1](https://www.linkedin.com/feed/update/urn:li:activity:6574754435518599168/)，这是 WSL 的第一次社区会议。该活动将于 2020 年 3 月 10 日至 11 日在华盛顿州雷德蒙市的微软总部 20 号楼举行。会议是合办的。我们已经知道将有来自[Pengwin（Whitewater 的 Linux for Windows）](https://www.zdnet.com/article/pengwin-a-linux-specifically-for-windows-subsystem-for-linux/)、微软 WSL 和 Canonical 的 Ubuntu on WSL 开发人员的演讲和研讨会。
>
>
>

**影响**：微软正在培育社区成长的种子，围绕它越来越多地采用开源软件并作出贡献。这足以让我眼前一亮。

### 《Appwrite 简介：面向移动和 Web 开发人员的开源后端服务器》

* [文章链接](https://medium.com/@eldadfux/introducing-appwrite-an-open-source-backend-server-for-mobile-web-developers-4be70731575d)

>
> [Appwrite](https://appwrite.io) 是一个新的[开源软件](https://github.com/appwrite/appwrite)，用于前端和移动开发人员的端到端的后端服务器，可以让你更快地构建应用程序。[Appwrite](https://medium.com/@eldadfux/introducing-appwrite-an-open-source-backend-server-for-mobile-web-developers-4be70731575d?source=friends_link&sk=b6a2be384aafd1fa5b1b6ff12906082c) 的目标是抽象和简化 REST API 和工具背后的常见开发任务，以帮助开发人员更快地构建高级应用程序。
>
>
> 在这篇文章中，我将简要介绍一些主要的 [Appwrite](https://appwrite.io/) 服务，并解释它们的主要功能以及它们的设计方式，相比从头开始编写所有后端 API，这可以帮助你更快地构建下一个项目。
>
>
>

**影响**：随着更多开源中间件变得更易于使用，软件开发越来越容易。Appwrite 声称可将开发时间和成本降低 70％。想象一下这对小型移动开发机构或个人开发者意味着什么。我很好奇他们将如何通过这种方式赚钱。

### 《“不只是 IT”：开源技术专家说协作文化是政府转型的关键》

* [文章链接](https://medium.com/agile-government-leadership/more-than-just-it-open-source-technologist-says-collaborative-culture-is-key-to-government-c46d1489f822)

>
> AGL（<ruby> 敏捷的政府领导 <rt>  agile government leadership </rt></ruby>）正在为那些帮助政府更好地为公众工作的人们提供价值支持网络。该组织专注于我非常热衷的事情：DevOps、数字化转型、开源以及许多政府 IT 领导者首选的类似主题。AGL 为我提供了一个社区，可以了解当今最优秀和最聪明的人所做的事情，并与整个行业的同行分享这些知识。
>
>
>

**影响**：不管你的政治信仰如何，对政府都很容易愤世嫉俗。我发现令人耳目一新的是，政府也是由一个个实际的人组成的，他们大多在尽力将相关技术应用于公益事业。特别是当该技术是开源的！

### 《彭博社如何通过 Kubernetes 实现接近 90-95% 的硬件利用率》

* [文章链接](https://www.cncf.io/blog/2019/09/12/how-bloomberg-achieves-close-to-90-95-hardware-utilization-with-kubernetes/)

>
> 2016 年，彭博社采用了 Kubernetes（当时仍处于 alpha 阶段中），自使用该项目的上游代码以来，取得了显著成果。Rybka 说：“借助 Kubernetes，我们能够非常高效地使用我们的硬件，使利用率接近 90% 到 95%。”Kubernetes 中的自动缩放使系统能够更快地满足需求。此外，Kubernetes “为我们提供了标准化我们构建和管理服务的方法的能力，这意味着我们可以花费更多时间专注于实际使用我们支持的开源工具，”数据和分析基础架构主管 Steven Bower 说，“如果我们想要在世界的另一个位置建立一个新的集群，那么这样做真的非常简单。一切都只是代码。配置就是代码。”
>
>
>

**影响**：没有什么能像利用率统计那样穿过营销的迷雾。我听说过关于 Kube 的一件事是，当人们运行它时，他们不知道用它做什么。像这样的用例可以给他们（和你）一些想要的东西。

*我希望你喜欢这个上周重要内容的清单，请下周回来了解有关开源社区、市场和行业趋势的更多信息。*

---

via: <https://opensource.com/article/19/9/conferences-industry-trends>

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


使用 Conda 管理 MacOS 上的 Ansible 环境

# 使用 Conda 管理 MacOS 上的 Ansible 环境

>
> Conda 将 Ansible 所需的一切都收集到虚拟环境中并将其与其他项目分开。
>
>
>

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

如果你是一名使用 MacOS 并涉及到 Ansible 管理的 Python 开发人员，你可能希望使用 Conda 包管理器将 Ansible 的工作内容与核心操作系统和其他本地项目分开。

Ansible 基于 Python。要让 Ansible 在 MacOS 上工作，Conda 并不是必须要的，但是它确实让你管理 Python 版本和包依赖变得更加容易。这允许你在 MacOS 上使用升级的 Python 版本，并在你的系统中、Ansible 和其他编程项目之间保持 Python 包的依赖性相互独立。

在 MacOS 上安装 Ansible 还有其他方法。你可以使用 [Homebrew](https://brew.sh/)，但是如果你对 Python 开发（或 Ansible 开发）感兴趣，你可能会发现在一个独立 Python 虚拟环境中管理 Ansible 可以减少一些混乱。我觉得这更简单；与其试图将 Python 版本和依赖项加载到系统或 `/usr/local` 目录中 ，还不如使用 Conda 帮助我将 Ansible 所需的一切都收集到一个虚拟环境中，并将其与其他项目完全分开。

本文着重于使用 Conda 作为 Python 项目来管理 Ansible，以保持它的干净并与其他项目分开。请继续阅读，并了解如何安装 Conda、创建新的虚拟环境、安装 Ansible 并对其进行测试。

### 序幕

最近，我想学习 [Ansible](https://docs.ansible.com/?extIdCarryOver=true&sc_cid=701f2000001OH6uAAG)，所以我需要找到安装它的最佳方法。

我通常对在我的日常工作站上安装东西很谨慎。我尤其不喜欢对供应商的默认操作系统安装应用手动更新（这是我多年作为 Unix 系统管理的习惯）。我真的很想使用 Python 3.7，但是 MacOS 的 Python 包是旧的 2.7，我不会安装任何可能干扰核心 MacOS 系统的全局 Python 包。

所以，我使用本地 Ubuntu 18.04 虚拟机上开始了我的 Ansible 工作。这提供了真正意义上的的安全隔离，但我很快发现管理它是非常乏味的。所以我着手研究如何在本机 MacOS 上获得一个灵活但独立的 Ansible 系统。

由于 Ansible 基于 Python，Conda 似乎是理想的解决方案。

### 安装 Conda

Conda 是一个开源软件，它提供方便的包和环境管理功能。它可以帮助你管理多个版本的 Python、安装软件包依赖关系、执行升级和维护项目隔离。如果你手动管理 Python 虚拟环境，Conda 将有助于简化和管理你的工作。浏览 [Conda 文档](https://conda.io/projects/conda/en/latest/index.html)可以了解更多细节。

我选择了 [Miniconda](https://docs.conda.io/en/latest/miniconda.html) Python 3.7 安装在我的工作站中，因为我想要最新的 Python 版本。无论选择哪个版本，你都可以使用其他版本的 Python 安装新的虚拟环境。

要安装 Conda，请下载 PKG 格式的文件，进行通常的双击，并选择 “Install for me only” 选项。安装在我的系统上占用了大约 158 兆的空间。

安装完成后，调出一个终端来查看你有什么了。你应该看到：

* 在你的家目录中的 `miniconda3` 目录
* shell 提示符被修改为 `(base)`
* `.bash_profile` 文件更新了一些 Conda 特有的设置内容

现在基础已经安装好了，你有了第一个 Python 虚拟环境。运行 Python 版本检查可以证明这一点，你的 `PATH` 将指向新的位置：

```
(base) $ which python
/Users/jfarrell/miniconda3/bin/python
(base) $ python --version
Python 3.7.1
```

现在安装了 Conda，下一步是建立一个虚拟环境，然后安装 Ansible 并运行。

### 为 Ansible 创建虚拟环境

我想将 Ansible 与我的其他 Python 项目分开，所以我创建了一个新的虚拟环境并切换到它:

```
(base) $ conda create --name ansible-env --clone base
(base) $ conda activate ansible-env
(ansible-env) $ conda env list
```

第一个命令将 Conda 库克隆到一个名为 `ansible-env` 的新虚拟环境中。克隆引入了 Python 3.7 版本和一系列默认的 Python 模块，你可以根据需要添加、删除或升级这些模块。

第二个命令将 shell 上下文更改为这个新的环境。它为 Python 及其包含的模块设置了正确的路径。请注意，在 `conda activate ansible-env` 命令后，你的 shell 提示符会发生变化。

第三个命令不是必须的；它列出了安装了哪些 Python 模块及其版本和其他数据。

你可以随时使用 Conda 的 `activate` 命令切换到另一个虚拟环境。这将带你回到基本环境：`conda base`。

### 安装 Ansible

安装 Ansible 有多种方法，但是使用 Conda 可以将 Ansible 版本和所有需要的依赖项打包在一个地方。Conda 提供了灵活性，既可以将所有内容分开，又可以根据需要添加其他新环境（我将在后面演示）。

要安装 Ansible 的相对较新版本，请使用:

```
(base) $ conda activate ansible-env
(ansible-env) $ conda install -c conda-forge ansible
```

由于 Ansible 不是 Conda 默认通道的一部分，因此 `-c` 用于从备用通道搜索和安装。Ansible 现已安装到 `ansible-env` 虚拟环境中，可以使用了。

### 使用 Ansible

既然你已经安装了 Conda 虚拟环境，就可以使用它了。首先，确保要控制的节点已将工作站的 SSH 密钥安装到正确的用户帐户。

调出一个新的 shell 并运行一些基本的 Ansible 命令：

```
(base) $ conda activate ansible-env
(ansible-env) $ ansible --version
ansible 2.8.1
  config file = None
  configured module search path = ['/Users/jfarrell/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/jfarrell/miniconda3/envs/ansibleTest/lib/python3.7/site-packages/ansible
  executable location = /Users/jfarrell/miniconda3/envs/ansibleTest/bin/ansible
  python version = 3.7.1 (default, Dec 14 2018, 13:28:58) [Clang 4.0.1 (tags/RELEASE_401/final)]
(ansible-env) $ ansible all -m ping -u ansible
192.168.99.200 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
```

现在 Ansible 工作了，你可以在控制台中抽身，并从你的 MacOS 工作站中使用它们。

### 克隆新的 Ansible 进行 Ansible 开发

这部分完全是可选的；只有当你想要额外的虚拟环境来修改 Ansible 或者安全地使用有问题的 Python 模块时，才需要它。你可以通过以下方式将主 Ansible 环境克隆到开发副本中:

```
(ansible-env) $ conda create --name ansible-dev --clone ansible-env
(ansible-env) $ conda activte ansible-dev
(ansible-dev) $
```

### 需要注意的问题

偶尔你可能遇到使用 Conda 的麻烦。你通常可以通过以下方式删除不良环境：

```
$ conda activate base
$ conda remove --name ansible-dev --all
```

如果出现无法解决的错误，通常可以通过在 `~/miniconda3/envs` 中找到该环境并删除整个目录来直接删除环境。如果基础环境损坏了，你可以删除整个 `~/miniconda3`，然后从 PKG 文件中重新安装。只要确保保留 `~/miniconda3/envs` ，或使用 Conda 工具导出环境配置并在以后重新创建即可。

MacOS 上不包括 `sshpass` 程序。只有当你的 Ansible 工作要求你向 Ansible 提供 SSH 登录密码时，才需要它。你可以在 SourceForge 上找到当前的 [sshpass 源代码](https://sourceforge.net/projects/sshpass/)。

最后，基础的 Conda Python 模块列表可能缺少你工作所需的一些 Python 模块。如果你需要安装一个模块，首选命令是 `conda install package`，但是需要的话也可以使用 `pip`，Conda 会识别安装的模块。

### 结论

Ansible 是一个强大的自动化工具，值得我们去学习。Conda 是一个简单有效的 Python 虚拟环境管理工具。

在你的 MacOS 环境中保持软件安装分离是保持日常工作环境的稳定性和健全性的谨慎方法。Conda 尤其有助于升级你的 Python 版本，将 Ansible 从其他项目中分离出来，并安全地使用 Ansible。

---

via: <https://opensource.com/article/19/8/using-conda-ansible-administration-macos>

作者：[James Farrell](https://opensource.com/users/jamesf) 选题：[lujun9972](https://github.com/lujun9972) 译者：[heguangzhi](https://github.com/heguangzhi) 校对：[wxy](https://github.com/wxy)

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


Richard Stallman 被迫辞去 FSF 主席的职务

Hmmm

无语了，激进主义真是太。。

清除别人总是比建立一个胜于他的组织更容易。所以才有那么多人喜欢当政客

这就是当一个政客的后果，斯托曼同志早就不写代码，专门从事软件政治运动去了。很明确的说，那些女政客也不是什么好鸟，女权主义冲昏头脑，睚眦必报。

来自湖北武汉的 Chrome Mobile 57.0|Android 8.1 用户

我同意原文作者最后的观点，理查德·斯托曼不应该这样被对待

那个要把mit夷为平地的女人怎么就没事？难道不是恐怖主义分子吗？

# Richard Stallman 被迫辞去 FSF 主席的职务

>
> Richard Stallman，自由软件基金会的创建者以及主席，已经辞去主席及董事会职务。此前，因为 Stallman 对于爱泼斯坦事件中的受害者的观点，一小撮活动家以及媒体人发起了清除 Stallman 的运动。这份声明就是在这些活动后发生的。阅读全文以获得更多信息。
>
>
>

### Stallman 事件的背景概述

如果你不知道这次事件发生的前因后果，请看本段的详细信息。

[Richard Stallman](https://en.wikipedia.org/wiki/Richard_Stallman)，66岁，是就职于 [MIT](https://en.wikipedia.org/wiki/Massachusetts_Institute_of_Technology) 的计算机科学家。他最著名的成就就是在 1983 年发起了[自由软件运动](https://en.wikipedia.org/wiki/Free_software_movement)。他也开发了 GNU 项目旗下的部分软件，比如 GCC 和 Emacs。受自由软件运动影响选择使用 GPL 开源协议的项目不计其数。Linux 是其中最出名的项目之一。

[Jeffrey Epstein](https://en.wikipedia.org/wiki/Jeffrey_Epstein)（爱泼斯坦），美国亿万富翁，金融大佬。其涉嫌为社会上流精英提供性交易服务（其中有未成年少女）而被指控成为性犯罪者。在受审期间，爱泼斯坦在监狱中自杀身亡。

[Marvin Lee Minsky](https://en.wikipedia.org/wiki/Marvin_Minsky)，MIT 知名计算机科学家。他在 MIT 建立了人工智能实验室。2016 年，88 岁的 Minsky 逝世。在 Minsky 逝世后，一位名为 Misky 的爱泼斯坦事件受害者声称其在未成年时曾被“诱导”到爱泼斯坦的私人岛屿，与之发生性关系。

但是这些与 Richard Stallman 有什么关系？这要从 Stallman 发给 MIT 计算机科学与人工智能实验室（CSAIL）的学生以及附属机构就爱泼斯坦的捐款提出抗议的邮件列表的邮件说起。邮件全文翻译如下：

>
> 周五事件的公告对 Marvin Minsky 来说是不公正的。
>
>
> “已故的人工智能 ‘先锋’ Marvin Minsky （被控告侵害了爱泼斯坦事件的受害者之一[2]）”
>
>
> 不公正之处在于 “<ruby> 侵害 <rt>  assulting </rt></ruby>” 这个用语。“<ruby> 性侵犯 <rt>  sexual assault </rt></ruby>” 这个用语非常的糢糊，夸大了指控的严重性：宣称某人做了 X 但误导别人，让别人觉得这个人做了 Y，Y 远远比 X 严重。
>
>
> 上面引用的指控显然就是夸大。报导声称 Minksy 与爱泼斯坦的<ruby> 女眷 <rt>  harem </rt></ruby>之一发生了性关系（详见 <https://www.theverge.com/2019/8/9/20798900/marvin-minsky-jeffrey-epstein-sex-trafficking-island-court-records-unsealed>）。我们假设这是真的（我找不到理由不相信）。
>
>
> “<ruby> 侵害 <rt>  assulting </rt></ruby>” 这个词，意味着他使用了某种暴力。但那篇报道并没有提到这个，只说了他们发生了性关系。
>
>
> 我们可以想像很多种情况，但最合理的情况是，她在 Marvin 面前表现的像是完全自愿的。假设她是被爱泼斯坦强迫的，那爱泼斯坦有充足的理由让她对大多数人守口如瓶。
>
>
> 从各种的指控夸大事例中，我总结出，在指控时使用“<ruby> 性侵犯 <rt>  sexual assault </rt></ruby>”是绝对错误的。
>
>
> 无论你想要批判什么行为，你都应该使用特定的词汇来描述，以此避免批判的本质的道德模糊性。
>
>
>

### “清除 Stallman” 的呼吁

‘爱泼斯坦’在美国是颇具争议的‘话题’。Stallman 对该敏感事件做出如此鲁莽的 “知识陈述” 不会有好结果，事实也是如此。

一位机器人学工程师从她的朋友那里收到了转发的邮件并发起了一个[清除 Stallman 的活动](https://medium.com/@selamie/remove-richard-stallman-fec6ec210794)。她要的不是澄清或者道歉，她只想要清除斯托曼，就算这意味着 “将 MIT 夷为平地” 也在所不惜。

>
> 是，至少 Stallman 没有被控强奸任何人。但这就是我们的最高标准吗？这所声望极高的学院坚持的标准就是这样的吗？如果这是麻省理工学院想要捍卫的、想要代表的标准的话，还不如把这破学校夷为平地…
>
>
> 如果有必要的话，就把所有人都清除出去，之后从废墟中建立出更好的秩序。
>
>
> —— Salem，发起“清除 Stallman“运动的机器人学专业学生
>
>
>

Salem 的声讨最初没有被主流媒体重视。但它还是被反对软件行业内的精英崇拜以及性别偏见的积极分子发现了。

>
> [#epstein](https://twitter.com/hashtag/epstein?src=hash&ref_src=twsrc%5Etfw) [#MIT](https://twitter.com/hashtag/MIT?src=hash&ref_src=twsrc%5Etfw) 嗨 记者没有回复我我很生气就自己写了这么个故事。作为 MIT 的校友我还真是高兴啊? <https://t.co/D4V5L5NzPA>
>
>
> — SZJG (@selamjie) [September 12, 2019](https://twitter.com/selamjie/status/1172244207978897408?ref_src=twsrc%5Etfw)
>
>
>

>
> 是不是对于性侵儿童的 “杰出混蛋” 我们也可以辩护说 “万一这是你情我愿的” <https://t.co/gSYPJ3WOfp>
>
>
> — Tracy Chou ??? (@triketora) [September 13, 2019](https://twitter.com/triketora/status/1172443389536555009?ref_src=twsrc%5Etfw)
>
>
>

>
> 多年来我就一直发推说 Richard RMS Stallman 这人有多恶心 —— 恋童癖、厌女症、还残障歧视
>
>
> 不可避免的是，每次我这样做，都会有老哥检查我的数据来源，然后说 “这都是几年前的事了！他现在变了！”
>
>
> 变个屁。 <https://t.co/ti2SrlKObp>
>
>
> — Sarah Mei (@sarahmei) [September 12, 2019](https://twitter.com/sarahmei/status/1172283772428906496?ref_src=twsrc%5Etfw)
>
>
>

下面是 Sage Sharp 开头的一篇关于 Stallman 的行为如何对科技人员产生负面影响的帖子：

>
> ?大家说下 Richard Stallman 对科技从业者的影响吧，尤其是女性。 [例如: 强奸、乱伦、残障歧视、性交易]
>
>
> [@fsf](https://twitter.com/fsf?ref_src=twsrc%5Etfw) 有必要永久禁止 Richard Stallman 担任自由软件基金会董事会主席。
>
>
> — Sage Sharp (@\_sagesharp\_) [September 16, 2019](https://twitter.com/_sagesharp_/status/1173637138413318144?ref_src=twsrc%5Etfw)
>
>
>

Stallman 一直以来也不是一个圣人。他粗暴，不合时宜、多年来一直在开带有性别歧视的笑话。你可以在[这里](https://geekfeminism.wikia.org/wiki/Richard_Stallman)和[这里](https://medium.com/@selamie/remove-richard-stallman-appendix-a-a7e41e784f88)读到。

很快这个消息就被 [The Vice](https://www.vice.com/en_us/article/9ke3ke/famed-computer-scientist-richard-stallman-described-epstein-victims-as-entirely-willing)、[每日野兽](https://www.thedailybeast.com/famed-mit-computer-scientist-richard-stallman-defends-epstein-victims-were-entirely-willing)，[未来主义](https://futurism.com/richard-stallman-epstein-scandal)等大媒体采访。他们把 Stallman 描绘成爱泼斯坦的捍卫者。在强烈的抗议声中，[GNOME 执行董事威胁要结束 GNOME 和 FSF 之间的关系](https://blog.halon.org.uk/2019/09/gnome-foundation-relationship-gnu-fsf/)。

最后，Stallman 先是从 MIT 辞职，现在又从 [自由软件基金会](https://www.fsf.org/news/richard-m-stallman-resigns) 辞职。

### 危险的特权？

我们见识到了，把一个人从他创建并为之工作了三十多年的组织中驱逐出去仅仅需要五天。这甚至还是在 Stallman 没有参与性交易丑闻的情况下。

其中一些 “活动家” 过去也曾[针对过 Linux 的作者 Linus Torvalds](https://www.newyorker.com/science/elements/after-years-of-abusive-e-mails-the-creator-of-linux-steps-aside)。Linux 基金会背后的管理层预见到了科技行业激进主义的增长趋势，因此他们制定了[适用于 Linux 内核开发的行为准则](https://itsfoss.com/linux-code-of-conduct/)并[强制 Torvalds 接受培训以改善他的行为](https://itsfoss.com/torvalds-takes-a-break-from-linux/)。如果他们没有采取纠正措施，可能 Torvalds 也已经被批倒批臭了。

忽视技术支持者的鲁莽行为和性别歧视是不可接受的，但是对于那些遇到不同意某种流行观点的人就进行声讨，施以私刑也是不道德的做法。我不支持 Stallman 和他过去的言论，但我也不能接受他以这种方式（被迫？）辞职。

Techrights 对此有一些有趣的评论，你可以在[这里](http://techrights.org/2019/09/15/media-attention-has-been-shifted/)和[这里](http://techrights.org/2019/09/16/stallman-removed/)看到。

*你对此事有何看法？请文明分享你的观点和意见。过激评论将不会公布。*

---

via: <https://itsfoss.com/richard-stallman-controversy/>

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

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


如何在 Linux Mint 中更换主题

Summary: 一直以来，使用 Cinnamon 桌面环境的 Linux Mint 都是一种卓越的体验。这也是为何我喜爱 Linux Mint的主要原因之一。

# 如何在 Linux Mint 中更换主题

一直以来，使用 Cinnamon 桌面环境的 Linux Mint 都是一种卓越的体验。这也是[为何我喜爱 Linux Mint](https://itsfoss.com/tiny-features-linux-mint-cinnamon/)的主要原因之一。

自从 Mint 的开发团队[开始更为严肃的对待设计](https://itsfoss.com/linux-mint-new-design/), “桌面主题” 应用便成为了更换新主题、图标、按钮样式、窗口边框以及鼠标指针的重要方式，当然你也可以直接通过它安装新的主题。感兴趣么？让我们开始吧。

### 如何在 Linux Mint 中更换主题

在菜单中搜索主题并打开主题应用。

在应用中有一个“添加/删除”按钮，非常简单吧。点击它，我们可以看到按流行程度排序的 Cinnamon Spices（Cinnamon 的官方插件库）的主题。

要安装主题，你所要做的就是点击你喜欢的主题，然后等待它下载。之后，主题将在应用第一页的“Desktop”选项中显示可用。只需双击已安装的主题之一就可以开始使用它。

下面是默认的 Linux Mint 外观：

这是在我更换主题之后：

所有的主题都可以在 Cinnamon Spices 网站上获得更多的信息和更大的截图，这样你就可以更好地了解你的系统的外观。

* [浏览 Cinnamon 主题](https://cinnamon-spices.linuxmint.com/themes)

### 在 Linux Mint 中安装第三方主题

>
> “我在另一个网站上看到了这个优异的主题，但 Cinnamon Spices 网站上没有……”
>
>
>

Cinnamon Spices 集成了许多优秀的主题，但你仍然会发现，你看到的主题并没有被 Cinnamon Spices 官方网站收录。

这时你可能会想：如果有别的办法就好了，对么？你可能会认为有（我的意思是……当然啦）。首先，我们可以在其他网站上找到一些很酷的主题。

我推荐你去 Cinnamon Look 浏览一下那儿的主题。如果你喜欢什么，就下载吧。

* [在 Cinnamon Look 中获取更多主题](https://www.cinnamon-look.org/)

下载了首选主题之后，你现在将得到一个压缩文件，其中包含安装所需的所有内容。提取它并保存到 `~/.themes`。迷糊么? `~` 代表了你的家目录的对应路径：`/home/{YOURUSER}/.themes`。

然后跳转到你的家目录。按 `Ctrl+H` 来[显示 Linux 中的隐藏文件](https://itsfoss.com/hide-folders-and-show-hidden-files-in-ubuntu-beginner-trick/)。如果没有看到 `.themes` 文件夹，创建一个新文件夹并命名为 `.themes`。记住，文件夹名称开头的点很重要。

将提取的主题文件夹从下载目录复制到你的家目录中的 `.themes` 文件夹中。

最后，在上面提到的应用中查找已安装的主题。

>
> 注记
>
>
> 请记住，主题必须是 Cinnamon 相对应的，即使它是一个从 GNOME 复刻的系统也不行，并不是所有的 GNOME 主题都适用于 Cinnamon。
>
>
>

改变主题是 Cinnamon 定制工作的一部分。你还可以[通过更改图标来更改 Linux Mint 的外观](https://itsfoss.com/install-icon-linux-mint/)。

我希望你现在已经知道如何在 Linux Mint 中更改主题了。快去选取你喜欢的主题吧。

---

via: <https://itsfoss.com/install-themes-linux-mint/>

作者：[It’s FOSS](https://itsfoss.com/author/itsfoss/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[qfzy1233](https://github.com/qfzy1233) 校对：[wxy](https://github.com/wxy)

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


如何查看 Linux Mint 版本号和代号

sudo apt install screenfetch -y

screenfetch

不用谢

# 如何查看 Linux Mint 版本号和代号

Linux Mint 每两年发布一次主版本（如 Mint 19），每六个月左右发布一次次版本（如 Mint 19.1、19.2 等）。 你可以自己升级 Linux Mint 版本，而次版本也会自动更新。

在所有这些版本中，你可能想知道你正在使用的是哪个版本。了解 Linux Mint 版本号可以帮助你确定某个特定软件是否适用于你的系统，或者检查你的系统是否已达到使用寿命。

你可能需要 Linux Mint 版本号有多种原因，你也有多种方法可以获取此信息。让我向你展示用图形和命令行的方式获取 Mint 版本信息。

* [使用命令行查看 Linux Mint 版本信息](tmp.pL5Hg3N6Qt#terminal)
* [使用 GUI（图形用户界面）查看 Linux Mint 版本信息](tmp.pL5Hg3N6Qt#GUI)

### 使用终端查看 Linux Mint 版本号的方法

我将介绍几种使用非常简单的命令查看 Linux Mint 版本号和代号的方法。 你可以从 “菜单” 中打开终端，或按 `CTRL+ALT+T`（默认热键）打开。

本文中的最后两个命令还会输出你当前的 Linux Mint 版本所基于的 Ubuntu 版本。

#### 1、/etc/issue

从最简单的 CLI 方法开始，你可以打印出 `/etc/issue` 的内容来检查你的版本号和代号：

```
[email protected]:~$ cat /etc/issue
Linux Mint 19.2 Tina \n \l
```

#### 2、hostnamectl

这一个命令（`hostnamectl`）打印的信息几乎与“系统信息”中的信息相同。 你可以看到你的操作系统（带有版本号）以及你的内核版本。

#### 3、lsb\_release

`lsb_release` 是一个非常简单的 Linux 实用程序，用于查看有关你的发行版本的基本信息：

```
[email protected]:~$ lsb_release -a
No LSB modules are available.
Distributor ID:    LinuxMint
Description:    Linux Mint 19.2 Tina
Release:    19.2
Codename:    tina
```

**注：** 我使用 `–a` 标签打印所有参数, 但你也可以使用 `-s` 作为简写格式，`-d` 用于描述等 （用 `man lsb_release` 查看所有选项）

#### 4、/etc/linuxmint/info

这不是命令，而是 Linux Mint 系统上的文件。只需使用 `cat` 命令将其内容打印到终端，然后查看你的版本号和代号。

#### 5、使用 /etc/os-release 命令也可以获取到 Ubuntu 代号

Linux Mint 基于 Ubuntu。每个 Linux Mint 版本都基于不同的 Ubuntu 版本。了解你的 Linux Mint 版本所基于的 Ubuntu 版本有助你在必须要使用 Ubuntu 版本号的情况下使用（比如你需要在 [Linux Mint 中安装最新的 Virtual Box](https://itsfoss.com/install-virtualbox-ubuntu/)添加仓库时）。

`os-release` 则是另一个类似于 `info` 的文件，向你展示 Linux Mint 所基于的 Ubuntu 版本代号。

#### 6、使用 /etc/upstream-release/lsb-release 只获取 Ubuntu 的基本信息

如果你只想要查看有关 Ubuntu 的基本信息，请输出 `/etc/upstream-release/lsb-release`：

```
[email protected]:~$ cat /etc/upstream-release/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"
```

特别提示：[你可以使用 uname 命令查看 Linux 内核版本](https://itsfoss.com/find-which-kernel-version-is-running-in-ubuntu/)。

```
[email protected]:~$ uname -r
4.15.0-54-generic
```

**注：** `-r` 代表 release，你可以使用 `man uname` 查看其他信息。

### 使用 GUI 查看 Linux Mint 版本信息

如果你对终端和命令行不满意，可以使用图形方法。如你所料，这个非常明了。

打开“菜单” (左下角)，然后转到“偏好设置 > 系统信息”：

或者，在菜单中，你可以搜索“System Info”：

在这里，你可以看到你的操作系统（包括版本号），内核和桌面环境的版本号：

### 总结

我已经介绍了一些不同的方法，用这些方法你可以快速查看你正在使用的 Linux Mint 的版本和代号（以及所基于的 Ubuntu 版本和内核）。我希望这个初学者教程对你有所帮助。请在评论中告诉我们你最喜欢哪个方法！

---

via: <https://itsfoss.com/check-linux-mint-version/>

作者：[Sergiu](https://itsfoss.com/author/sergiu/) 选题：[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 脚本发送新用户帐户创建的邮件

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

出于某些原因，你可能需要跟踪 Linux 上的新用户创建信息。同时，你可能需要通过邮件发送详细信息。这或许是审计目标的一部分，或者安全团队出于跟踪目的可能希望对此进行监控。

我们可以通过其他方式进行此操作，正如我们在上一篇文章中已经描述的那样。

* [在系统中创建新用户帐户时发送邮件的 Bash 脚本](https://www.2daygeek.com/linux-bash-script-to-monitor-user-creation-send-email/)

Linux 有许多开源监控工具可以使用。但我不认为他们有办法跟踪新用户创建过程，并在发生时提醒管理员。

那么我们怎样才能做到这一点？

我们可以编写自己的 Bash 脚本来实现这一目标。我们过去写过许多有用的 shell 脚本。如果你想了解，请进入下面的链接。

* [如何使用 shell 脚本自动化日常活动？](https://www.2daygeek.com/category/shell-script/)

### 这个脚本做了什么？

这将每天两次（一天的开始和结束）备份 `/etc/passwd` 文件，这将使你能够获取指定日期的新用户创建详细信息。

我们需要添加以下两个 cron 任务来复制 `/etc/passwd` 文件。

```
# crontab -e

1 0 * * * cp /etc/passwd /opt/scripts/passwd-start-$(date +"%Y-%m-%d")
59 23 * * * cp /etc/passwd /opt/scripts/passwd-end-$(date +"%Y-%m-%d")
```

它使用 `diff` 命令来检测文件之间的差异，如果发现与昨日有任何差异，脚本将向指定 email 发送新用户详细信息。

我们不用经常运行此脚本，因为用户创建不经常发生。但是，我们计划每天运行一次此脚本。

这样，你可以获得有关新用户创建的综合报告。

**注意：**我们在脚本中使用了我们的电子邮件地址进行演示。因此，我们要求你用自己的电子邮件地址。

```
# vi /opt/scripts/new-user-detail.sh

#!/bin/bash
mv /opt/scripts/passwd-start-$(date --date='yesterday' '+%Y-%m-%d') /opt/scripts/passwd-start
mv /opt/scripts/passwd-end-$(date --date='yesterday' '+%Y-%m-%d') /opt/scripts/passwd-end
ucount=$(diff /opt/scripts/passwd-start /opt/scripts/passwd-end | grep ">" | cut -d":" -f6 | cut -d"/" -f3 | wc -l)
if [ $ucount -gt 0 ]
then
  SUBJECT="ATTENTION: New User Account is created on server : `date --date='yesterday' '+%b %e'`"
  MESSAGE="/tmp/new-user-logs.txt"
  TO="2daygeek@gmail.com"
  echo  "Hostname: `hostname`" >> $MESSAGE
  echo -e "\n" >> $MESSAGE
  echo "The New User Details are below." >> $MESSAGE
  echo "+------------------------------+" >> $MESSAGE
  diff /opt/scripts/passwd-start /opt/scripts/passwd-end | grep ">" | cut -d":" -f6 | cut -d"/" -f3 >>  $MESSAGE
  echo "+------------------------------+" >> $MESSAGE
  mail -s "$SUBJECT" "$TO" < $MESSAGE
  rm $MESSAGE
fi
```

给 `new-user-detail.sh` 文件添加可执行权限。

```
$ chmod +x /opt/scripts/new-user-detail.sh
```

最后添加一个 cron 任务来自动执行此操作。它在每天早上 7 点运行。

```
# crontab -e

0 7 * * * /bin/bash /opt/scripts/new-user.sh
```

**注意：**你会在每天早上 7 点都会收到一封关于昨日详情的邮件提醒。

**输出：**输出与下面的输出相同。

```
# cat /tmp/new-user-logs.txt

Hostname: CentOS.2daygeek.com

The New User Details are below.
+------------------------------+
tuser3
+------------------------------+
```

---

via: <https://www.2daygeek.com/linux-shell-script-to-monitor-user-creation-send-email/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


我们想换个徽标，大家看怎么样？

Summary: 为 Linux 中国设计制作一个新的徽标

前面CN艺术化，后面Linux字母拼写

记得合并分支啊(◦˙▽˙◦)

原来的 Logo 就很好看啊，新 logo 感觉含义太丰富了，但是整个图形体现不出来寓意，仅代表个人意见

为 Linux 中国设计制作一个新的徽标

# 我们想换个徽标，大家看怎么样？

几年前，当我和 DeadFire 想拿手里的域名 linux.cn 建立一个 Linux 方面的社区时，我们在想该叫个什么名字。讨论之下，就不揣浅陋叫了 “Linux 中国”这个名称，那个时候其实也没多想到会做多久、多大，却不料一直做了这么多年，仅仅是从 LCTT 算起，也有 6 年了。

有了网站（论坛），那就得有个徽标（Logo）啊。作为非艺术战线的工科男，我觉得简洁就好，于是就采用了“L”作为基本创意，请朋友（兴航）帮忙设计制作了徽标。后来虽然有过一些小的演变，不过基本上没有大的变化。

这是我们当前的徽标：

由于我的画蛇添足，这个徽标上加了很多自以为得意的小零件，但是在很多场合看起来并不清晰和大方，比如说，经常有合作伙伴和我要徽标放到展板和印刷品上去，其实往往显得比较另类——倒是比较好找到。

所以，换个徽标的想法我也是由来已久。于是，就有了这个新的徽标——不瞒你说，完全是我自己制作出来的（言外之意，专业性方面肯定不够了）。

这个徽标背后的思路是这样的：

* 灵感来自于俄罗斯方块游戏
* 配色的蓝绿：绿色一直是我们主题色，蓝色比较搭配，当然要是给它赋予专业、自由的寓意也无不可
* 主体是一个 4x4 的离散格子，其中由两个字母组成，分别“L”和“c”，这是我们的简写
* 更多的寓意——那就是在胡扯了

所以，大家觉得怎么样？欢迎给出意见和建议。

当然，这是我们抛出的砖头，也欢迎大家投稿——要不，我们做一次徽标征集活动？

### 徽标征集活动

活动目标：为 Linux 中国设计制作一个新的徽标

活动时间：2019 年 9 月 20 日 — 2019 年 10 月 31 日

时间节点：

* 2019 年 9 月 20 日 — 2019 年 10 月 20 日：徽标征集及点评
* 2019 年 9 月 21 日 — 2019 年 10 月 30 日：官方评选
* 2019 年 10 月 31 日 评选结果发布

参与方式：本活动完全在 GitHub 上进行，因此投稿、点评、建议都采用 GitHub 相应机制来完成。

仓库地址： <https://github.com/LCTT/logo>

* 投稿：通过 GitHub 的 PR 提交你的徽标设计展示图和设计说明。格式要求：
	+ 每个投稿一个自行命名的文件夹，不当命名我们会予以修改。文件夹内包括：
	+ 名为 logo.png 的 png 格式的徽标，尺寸为 500px X 500px，评选阶段无需投递原稿
	+ 一个名为 README.md 的说明文件，说明创意构思
* 点评：对提交徽标的 PR 发表评论
* 建议：通过 GitHub 的<ruby> 议题 <rp>  （ </rp> <rt>  issue </rt> <rp>  ） </rp></ruby>发起

最后，既然是征集评选活动，那就该有奖品：

* 一等奖（获选）一名，奖金 3000 元
* 二等奖两名，各奖 500 元
* 三等奖五名，各奖 100 元

此外，一等奖作品的作者需同样将该的完整版权授予 Linux 中国，但作品作者的相关信息会在 Linux 中国官方予以记录和致谢。


虚拟机管理器（Virtual Machine Manager）简介

Summary: virt-manager 为 Linux 虚拟化提供了全方位的选择。

# 虚拟机管理器（Virtual Machine Manager）简介

>
> virt-manager 为 Linux 虚拟化提供了全方位的选择。
>
>
>

在我关于 [GNOME Boxes](https://wiki.gnome.org/Apps/Boxes) 的[系列文章](https://opensource.com/sitewide-search?search_api_views_fulltext=GNOME%20Box)中，我已经解释了 Linux 用户如何能够在他们的桌面上快速启动虚拟机。当你只需要简单的配置时，Box 可以轻而易举地创建虚拟机。

但是，如果你需要在虚拟机中配置更多详细信息，那么你就需要一个工具，为磁盘、网卡（NIC）和其他硬件提供全面的选项。这时就需要 [虚拟机管理器（Virtual Machine Manager）](https://virt-manager.org/)（virt-manager）了。如果在应用菜单中没有看到它，你可以从包管理器或命令行安装它：

* 在 Fedora 上：`sudo dnf install virt-manager`
* 在 Ubuntu 上：`sudo apt install virt-manager`

安装完成后，你可以从应用菜单或在命令行中输入 `virt-manager` 启动。

为了演示如何使用 virt-manager 创建虚拟机，我将设置一个 Red Hat Enterprise Linux 8 虚拟机。

首先，单击 “<ruby> 文件 <rt>  File </rt></ruby>” 然后点击 “<ruby> 新建虚拟机 <rt>  New Virtual Machine </rt></ruby>”。Virt-manager 的开发者已经标记好了每一步（例如，“<ruby> 第 1 步，共 5 步 <rt>  Step 1 of 5 </rt></ruby>”）来使其变得简单。单击 “<ruby> 本地安装介质 <rt>  Local install media </rt></ruby>” 和 “<ruby> 下一步 <rt>  Forward </rt></ruby>”。

在下个页面中，选择要安装的操作系统的 ISO 文件。（RHEL 8 镜像位于我的下载目录中。）Virt-manager 自动检测操作系统。

在步骤 3 中，你可以指定虚拟机的内存和 CPU。默认值为内存 1,024MB 和一个 CPU。

我想给 RHEL 充足的配置来运行，我使用的硬件配置也充足，所以我将它们（分别）增加到 4,096MB 和两个 CPU。

下一步为虚拟机配置存储。默认设置是 10GB 硬盘。（我保留此设置，但你可以根据需要进行调整。）你还可以选择现有磁盘镜像或在自定义位置创建一个磁盘镜像。

步骤 5 是命名虚拟机并单击“<ruby> 完成 <rt>  Finish </rt></ruby>”。这相当于创建了一台虚拟机，也就是 GNOME Boxes 中的一个 Box。虽然技术上讲是最后一步，但你有几个选择（如下面的截图所示）。由于 virt-manager 的优点是能够自定义虚拟机，因此在单击“<ruby> 完成 <rt>  Finish </rt></ruby>”之前，我将选中“<ruby> 在安装前定制配置 <rt>  Customize configuration before install </rt></ruby>”的复选框。

因为我选择了自定义配置，virt-manager 打开了一个有一组设备和设置的页面。这里是重点！

这里你也可以命名该虚拟机。在左侧列表中，你可以查看各个方面的详细信息，例如 CPU、内存、磁盘、控制器和许多其他项目。例如，我可以单击 “CPU” 来验证我在步骤 3 中所做的更改。

我也可以确认我设置的内存量。

当虚拟机作为服务器运行时，我通常会禁用或删除声卡。为此，请选择 “<ruby> 声卡 <rt>  Sound </rt></ruby>” 并单击 “<ruby> 移除 <rp>  （ </rp> <rt>  Remove </rt> <rp>  ） </rp></ruby>” 或右键单击 “<ruby> 声卡 <rt>  Sound </rt></ruby>” 并选择 “<ruby> 移除硬件 <rp>  （ </rp> <rt>  Remove Hardware </rt> <rp>  ） </rp></ruby>”。

你还可以使用底部的 “<ruby> 添加硬件 <rp>  （ </rp> <rt>  Add Hardware </rt> <rp>  ） </rp></ruby>” 按钮添加硬件。这会打开 “<ruby> 添加新的虚拟硬件 <rp>  （ </rp> <rt>  Add New Virtual Hardware </rt> <rp>  ） </rp></ruby>” 页面，你可以在其中添加其他存储设备、内存、声卡等。这就像可以访问一个库存充足的（虚拟）计算机硬件仓库。

对 VM 配置感到满意后，单击 “<ruby> 开始安装 <rt>  Begin Installation </rt></ruby>”，系统将启动并开始从 ISO 安装指定的操作系统。

完成后，它会重新启动，你的新虚拟机就可以使用了。

Virtual Machine Manager 是桌面 Linux 用户的强大工具。它是开源的，是专有和封闭虚拟化产品的绝佳替代品。

---

via: <https://opensource.com/article/19/9/introduction-virtual-machine-manager>

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


Oracle 发布全球最快的数据库机器 Exadata X8M

# Oracle 发布全球最快的数据库机器 Exadata X8M

>
> Exadata X8M 是第一台具有集成持久内存和 RoCE 的数据库机器。Oracle 还宣布推出 Oracle 零数据丢失恢复设备 X8M（ZDLRA）。
>
>
>

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

Oracle 发布了新的 Exadata 数据库机器 X8M，旨在为数据库基础架构市场树立新的标杆。

Exadata X8M 结合了英特尔 Optane DC 持久存储器和通过融合以太网（RoCE）的 100 千兆的远程直接内存访问（RDMA）来消除存储瓶颈，并显著提高性能，其适用于最苛刻的工作负载，如在线事务处理（OLTP）、分析、物联网、欺诈检测和高频交易。

“借助 Exadata X8M，我们可以提供内存级的性能，同时为 OLTP 和分析提供共享存储的所有优势，”Oracle 任务关键型数据库技术执行副总裁 Juan Loaiza 说。

“使用对共享持久存储器的直接数据库访问将响应时间减少一个数量级，可加速每个 OLTP 应用程序，它是需要实时访问大量数据的应用程序的游戏规则改变者，例如欺诈检测和个性化购物，”官方补充。

### 它有什么独特之处？

Oracle Exadata X8M 使用 RDMA 让数据库直接访问智能存储服务器中的持久内存，从而绕过整个操作系统、IO 和网络软件堆栈。这导致更低的延迟和更高的吞吐量。使用 RDMA 绕过软件堆栈还可以释放存储服务器上的 CPU 资源，以执行更多智能扫描查询来支持分析工作负载。

### 更少的存储瓶颈

“高性能 OLTP 应用需要高的每秒输入/输出操作（IOPS）和低延迟。直接数据库访问共享持久性内存可将SQL 读取的峰值性能提升至 1600 万 IOPS，比行业领先的 Exadata X8 高出 2.5 倍，“Oracle 在一份声明中表示。

此外，Exadata X8M 通过使远程 IO 延迟低于 19 微秒，大大减少了关键数据库 IO 的延迟 —— 这比 Exadata X8 快 10 倍以上。即使对于每秒需要数百万 IO 的工作负载，也可实现这些超低延迟。

### 比 AWS 和 Azure 更高效

该公司声称，与 Oracle 最快的 Amazon RDS 存储相比，Exadata X8M 的延迟降低了 50 倍，IOPS 提高了 200 倍，容量提高了 15 倍。

与 Azure SQL 数据库服务存储相比，Exadata X8M 的延迟降低了 100 倍，IOPS 提高了 150 倍，容量提高了 300 倍。

据 Oracle 称，单机架 Exadata X8M 可提供高达 2 倍的 OLTP 读取 IOPS，3 倍的吞吐量和比具有持久性内存的共享存储系统（如 Dell EMC PowerMax 8000 的单机架）低 5 倍的延迟。

“通过同时支持更快的 OLTP 查询和更高的分析工作负载吞吐量，Exadata X8M 是融合混合工作负载环境以降低 IT 成本和复杂性的理想平台，”该公司说。

### Oracle 零数据丢失恢复设备 X8

Oracle 当天还宣布推出 Oracle 零数据丢失恢复设备 X8M（ZDLRA），它使用新的 100Gb RoCE，用于计算和存储服务器之间的高吞吐量内部数据传输。

Exadata 和 ZDLRA 客户现在可以在 RoCE 或基于 InfiniBand 的工程系统之间进行选择，以在其架构部署中实现最佳灵活性。

---

via: <https://opensourceforu.com/2019/09/oracle-unleashes-worlds-fastest-database-machine-exadata-x8m/>

作者：[Longjam Dineshwori](https://opensourceforu.com/author/dineshwori-longjam/) 选题：[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/) 荣誉推出


使用 sed 命令查找和替换文件中的字符串的 16 个示例

Summary: sed 命令主要用于替换一个文件中的文本。

怎么替换匹配到一行的一部分字符串？<br />
比如 "key_buffer_size=  11M"  替换 11M  为   123kb ，前面的都不动。

sed  'n s/11M/123kb/'    文件名  其中n是你这个的行数 应该就可以了

cool

这也需要问吗？

echo 'key_buffer_size=11M'|sed -r '/key_buffer_size=/ s/11M/123kb/g'

文章写的详细易懂,帮助我学会了sed的简单应用，还不太费脑子。为作者和翻译点赞！

11M不是固定内容的时候呢 怎么替换？

s替换模式中 &指代匹配的字符串      sed 's/xxx/&123/' test.txt  会把xxx换为xxx123  利用这一点 匹配=后面的内容 然后进行替换

sed -i 's/[0-9]\+.*$/你想填入的内容/'     test.txt

sed -i "s/11M/123kb"

sed 命令主要用于替换一个文件中的文本。

# 使用 sed 命令查找和替换文件中的字符串的 16 个示例

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

当你在使用文本文件时，很可能需要查找和替换文件中的字符串。`sed` 命令主要用于替换一个文件中的文本。在 Linux 中这可以通过使用 `sed` 命令和 `awk` 命令来完成。

在本教程中，我们将告诉你使用 `sed` 命令如何做到这一点，然后讨论讨论 `awk` 命令相关的。

### sed 命令是什么

`sed` 命令表示 Stream Editor（流编辑器），用来在 Linux 上执行基本的文本操作。它可以执行各种功能，如搜索、查找、修改、插入或删除文件。

此外，它也可以执行复杂的正则表达式匹配。

它可用于以下目的：

* 查找和替换匹配给定的格式的内容。
* 在指定行查找和替换匹配给定的格式的内容。
* 在所有行查找和替换匹配给定的格式的内容。
* 搜索并同时替换两种不同的模式。

本文列出的十五个例子可以帮助你掌握 `sed` 命令。

如果要使用 `sed` 命令删除文件中的行，去下面的文章。

注意：由于这是一篇演示文章，我们使用不带 `-i` 选项的 `sed` 命令，该选项会在 Linux 终端中删除行并打印文件内容。

但是，在实际环境中如果你想删除源文件中的行，使用带 `-i` 选项的 `sed` 命令。

常见的 `sed` 替换字符串的语法。

```
sed -i 's/Search_String/Replacement_String/g' Input_File
```

首先我们需要了解 `sed` 语法来做到这一点。请参阅有关的细节。

* `sed`：这是一个 Linux 命令。
* `-i`：这是 `sed` 命令的一个选项，它有什么作用？默认情况下，`sed` 打印结果到标准输出。当你使用 `sed` 添加这个选项时，那么它会在适当的位置修改文件。当你添加一个后缀（比如，`-i.bak`）时，就会创建原始文件的备份。
* `s`：字母 `s` 是一个替换命令。
* `Search_String`：搜索一个给定的字符串或正则表达式。
* `Replacement_String`：替换的字符串。
* `g`：全局替换标志。默认情况下，`sed` 命令替换每一行第一次出现的模式，它不会替换行中的其他的匹配结果。但是，提供了该替换标志时，所有匹配都将被替换。
* `/`：分界符。
* `Input_File`：要执行操作的文件名。

让我们来看看文件中用sed命令来搜索和转换文本的一些常用例子。

我们已经创建了用于演示的以下文件。

```
# cat sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 1) 如何查找和替换一行中“第一次”模式匹配

下面的 `sed` 命令用 `linux` 替换文件中的 `unix`。这仅仅改变了每一行模式的第一个实例。

```
# sed 's/unix/linux/' sed-test.txt

1 Unix linux unix 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 2) 如何查找和替换每一行中“第 N 次”出现的模式

在行中使用`/1`、`/2`……`/n` 等标志来代替相应的匹配。

下面的 `sed` 命令在一行中用 `linux` 来替换 `unix` 模式的第二个实例。

```
# sed 's/unix/linux/2' sed-test.txt

1 Unix unix linux 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 3) 如何搜索和替换一行中所有的模式实例

下面的 `sed` 命令用 `linux` 替换 `unix` 格式的所有实例，因为 `g` 是一个全局替换标志。

```
# sed 's/unix/linux/g' sed-test.txt

1 Unix linux linux 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 4) 如何查找和替换一行中从“第 N 个”开始的所有匹配的模式实例

下面的 `sed` 命令在一行中替换从模式的“第 N 个”开始的匹配实例。

```
# sed 's/unix/linux/2g' sed-test.txt

1 Unix unix linux 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 5) 在特定的行号搜索和替换模式

你可以替换特定行号中的字符串。下面的 `sed` 命令用 `linux` 仅替换第三行的 `unix` 模式。

```
# sed '3 s/unix/linux/' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 6) 在特定范围行号间搜索和替换模式

你可以指定行号的范围，以替换字符串。

下面的 `sed` 命令在 1 到 3 行间用 `linux` 替换 `Unix` 模式。

```
# sed '1,3 s/unix/linux/' sed-test.txt

1 Unix linux unix 23
2 linux Linux 34
3 linuxlinux UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 7) 如何查找和修改最后一行的模式

下面的 sed 命令允许你只在最后一行替换匹配的字符串。

下面的 `sed` 命令只在最后一行用 `Unix` 替换 `Linux` 模式。

```
# sed '$ s/Linux/Unix/' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Unix is free and opensource operating system
```

### 8) 在一行中如何只查找和替换正确的模式匹配

你可能已经注意到，子串 `linuxunix` 被替换为在第 6 个示例中的 `linuxlinux`。如果你只想更改正确的匹配词，在搜索串的两端用这个边界符 `\b`。

```
# sed '1,3 s/\bunix\b/linux/' sed-test.txt

1 Unix linux unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 9) 如何以不区分大小写来搜索与替换模式

大家都知道，Linux 是区分大小写的。为了与不区分大小写的模式匹配，使用 `I` 标志。

```
# sed 's/unix/linux/gI' sed-test.txt

1 linux linux linux 23
2 linux Linux 34
3 linuxlinux linuxLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 10) 如何查找和替换包含分隔符的字符串

当你搜索和替换含分隔符的字符串时，我们需要用反斜杠 `\` 来取消转义。

在这个例子中，我们将用 `/usr/bin/fish` 来替换 `/bin/bash`。

```
# sed 's/\/bin\/bash/\/usr\/bin\/fish/g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /usr/bin/fish CentOS Linux OS
Linux is free and opensource operating system
```

上述 `sed` 命令按预期工作，但它看起来来很糟糕。 为了简化，大部分的人会用竖线 `|` 作为正则表达式的定位符。 所以，我建议你用它。

```
# sed 's|/bin/bash|/usr/bin/fish/|g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /usr/bin/fish/ CentOS Linux OS
Linux is free and opensource operating system
```

### 11) 如何以给定的模式来查找和替换数字

类似地，数字可以用模式来代替。下面的 `sed` 命令以 `[0-9]` 替换所有数字为 `number`。

```
# sed 's/[0-9]/number/g' sed-test.txt

number Unix unix unix numbernumber
number linux Linux numbernumber
number linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 12) 如何用模式仅查找和替换两个数字

如果你想用模式来代替两位数字，使用下面的 `sed` 命令。

```
# sed 's/\b[0-9]\{2\}\b/number/g' sed-test.txt

1 Unix unix unix number
2 linux Linux number
3 linuxunix UnixLinux
linux /bin/bash CentOS Linux OS
Linux is free and opensource operating system
```

### 13) 如何用 sed 命令仅打印被替换的行

如果你想显示仅更改的行，使用下面的 `sed` 命令。

* `p` - 它在终端上输出替换的行两次。
* `-n` - 它抑制由 `p` 标志所产生的重复行。

```
# sed -n 's/Unix/Linux/p' sed-test.txt

1 Linux unix unix 23
3 linuxunix LinuxLinux
```

### 14) 如何同时运行多个 sed 命令

以下 `sed` 命令同时检测和置换两个不同的模式。

下面的 `sed` 命令搜索 `linuxunix` 和 `CentOS` 模式，用 `LINUXUNIX` 和 `RHEL8` 一次性更换它们。

```
# sed -e 's/linuxunix/LINUXUNIX/g' -e 's/CentOS/RHEL8/g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 LINUXUNIX UnixLinux
linux /bin/bash RHEL8 Linux OS
Linux is free and opensource operating system
```

下面的 `sed` 命令搜索替换两个不同的模式，并一次性替换为一个字符串。

以下 `sed` 的命令搜索 `linuxunix` 和 `CentOS` 模式，用 `Fedora30` 替换它们。

```
# sed -e 's/\(linuxunix\|CentOS\)/Fedora30/g' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 Fedora30 UnixLinux
linux /bin/bash Fedora30 Linux OS
Linux is free and opensource operating system
```

### 15) 如果给定的模式匹配，如何查找和替换整个行

如果模式匹配，可以使用 `sed` 命令用新行来代替整行。这可以通过使用 `c` 标志来完成。

```
# sed '/OS/ c\
New Line
' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
New Line
Linux is free and opensource operating system
```

### 16) 如何搜索和替换相匹配的模式行

在 `sed` 命令中你可以为行指定适合的模式。在匹配该模式的情况下，`sed` 命令搜索要被替换的字符串。

下面的 `sed` 命令首先查找具有 `OS` 模式的行，然后用 `ArchLinux` 替换单词 `Linux`。

```
# sed '/OS/ s/Linux/ArchLinux/' sed-test.txt

1 Unix unix unix 23
2 linux Linux 34
3 linuxunix UnixLinux
linux /bin/bash CentOS ArchLinux OS
Linux is free and opensource operating system
```

---

via: <https://www.2daygeek.com/linux-sed-to-find-and-replace-string-in-files/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Asche910](https://github.com/asche910) 校对：[wxy](https://github.com/wxy)

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


Linux 内核的五大创新

Summary: 想知道什么是 Linux 内核上真正的（不是那种时髦的）创新吗？

想知道什么是 Linux 内核上真正的（不是那种时髦的）创新吗？

# Linux 内核的五大创新

>
> 想知道什么是 Linux 内核上真正的（不是那种时髦的）创新吗？
>
>
>

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

在科技行业，*创新*这个词几乎和*革命*一样到处泛滥，所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux 内核被称为创新，但它又被称为现代计算中最大的奇迹，一个微观世界中的庞然大物。

撇开营销和模式不谈，Linux 可以说是开源世界中最受欢迎的内核，它在近 30 年的生命时光当中引入了一些真正的规则改变者。

### Cgroups（2.6.24）

早在 2007 年，Paul Menage 和 Rohit Seth 就在内核中添加了深奥的[控制组（cgroups）](https://en.wikipedia.org/wiki/Cgroups)功能（cgroups 的当前实现是由 Tejun Heo 重写的）。这种新技术最初被用作一种方法，从本质上来说，是为了确保一组特定任务的服务质量。

例如，你可以为与你的 WEB 服务相关联的所有任务创建一个控制组定义（cgroup），为例行备份创建另一个 cgroup ，再为一般操作系统需求创建另一个 cgroup。然后，你可以控制每个组的资源百分比，这样你的操作系统和 WEB 服务就可以获得大部分系统资源，而你的备份进程可以访问剩余的资源。

然而，cgroups 如今变得这么著名是因其作为驱动云技术的角色：容器。事实上，cgroups 最初被命名为[进程容器](https://lkml.org/lkml/2006/10/20/251)。当它们被 [LXC](https://linuxcontainers.org)、[CoreOS](https://coreos.com/) 和 Docker 等项目采用时，这并不奇怪。

就像闸门打开后一样，“容器” 一词就像成为了 Linux 的同义词一样，微服务风格的基于云的“应用”概念很快成为了规范。如今，已经很难摆脱 cgroups 了，它们是如此普遍。每一个大规模的基础设施（如果你运行 Linux 的话，可能还有你的笔记本电脑）都以一种合理的方式使用了 cgroups，这使得你的计算体验比以往任何时候都更加易于管理和灵活。

例如，你可能已经在电脑上安装了 [Flathub](http://flathub.org) 或 [Flatpak](http://flatpak.org)，或者你已经在工作中使用 [Kubernetes](http://kubernetes.io) 和/或 [OpenShift](https://www.redhat.com/sysadmin/learn-openshift-minishift)。不管怎样，如果“容器”这个术语对你来说仍然模糊不清，则可以 [通过 Linux 容器从背后](https://opensource.com/article/18/11/behind-scenes-linux-containers)获得对容器的实际理解。

### LKMM（4.17）

2018 年，Jade Alglave、Alan Stern、Andrea Parri、Luc Maranget、Paul McKenney 以及其他几个人的辛勤工作的成果被合并到主线 Linux 内核中，以提供正式的内存模型。Linux 内核内存[一致性]模型（LKMM）子系统是一套描述 Linux 内存一致性模型的工具，同时也产生用于测试的用例（特别命名为 klitmus）。

随着系统在物理设计上变得越来越复杂（增加了更多的中央处理器内核，高速缓存和内存增长，等等)，它们就越难知道哪个中央处理器需要哪个地址空间，以及何时需要。例如，如果 CPU0 需要将数据写入内存中的共享变量，并且 CPU1 需要读取该值，那么 CPU0 必须在 CPU1 尝试读取之前写入。类似地，如果值是以一种顺序方式写入内存的，那么期望它们也以同样的顺序被读取，而不管哪个或哪些 CPU 正在读取。

即使在单个处理器上，内存管理也需要特定的任务顺序。像 `x = y` 这样的简单操作需要处理器从内存中加载 `y` 的值，然后将该值存储在 `x` 中。在处理器从内存中读取值之前，是不能将存储在 `y` 中的值放入 `x` 变量的。此外还有地址依赖：`x[n] = 6` 要求在处理器能够存储值 `6` 之前加载 `n`。

LKMM 可以帮助识别和跟踪代码中的这些内存模式。它部分是通过一个名为 `herd` 的工具来实现的，该工具（以逻辑公式的形式）定义了内存模型施加的约束，然后列举了与这些约束一致性的所有可能的结果。

### 低延迟补丁（2.6.38）

很久以前，在 2011 年之前，如果你想[在 Linux 上进行多媒体工作](http://slackermedia.info)，你必须得有一个低延迟内核。这主要适用于[录音](https://opensource.com/article/17/6/qtractor-audio)时添加了许多实时效果（如对着麦克风唱歌和添加混音，以及在耳机中无延迟地听到你的声音）。有些发行版，如 [Ubuntu Studio](http://ubuntustudio.org)，可靠地提供了这样一个内核，所以实际上这没有什么障碍，这只不过是当艺术家选择发行版时的一个重要提醒。

然而，如果你没有使用 Ubuntu Studio，或者你需要在你的发行版提供之前更新你的内核，你必须跳转到 rt-patches 网页，下载内核补丁，将它们应用到你的内核源代码，编译，然后手动安装。

后来，随着内核版本 2.6.38 的发布，这个过程结束了。Linux 内核突然像变魔术一样默认内置了低延迟代码（根据基准测试，延迟至少降低了 10 倍)。不再需要下载补丁，不用编译。一切都很顺利，这都是因为 Mike Galbraith 编写了一个 200 行的小补丁。

对于全世界的开源多媒体艺术家来说，这是一个规则改变者。从 2011 年开始事情变得如此美好，到 2016 年我自己做了一个挑战，[在树莓派 v1（型号 B）上建造一个数字音频工作站（DAW）](https://opensource.com/life/16/3/make-music-raspberry-pi-milkytracker)，结果发现它运行得出奇地好。

### RCU（2.5）

RCU，即<ruby> 读-拷贝-更新 <rt>  Read-Copy-Update </rt></ruby>，是计算机科学中定义的一个系统，它允许多个处理器线程从共享内存中读取数据。它通过延迟更新但也将它们标记为已更新来做到这一点，以确保数据读取为最新内容。实际上，这意味着读取与更新同时发生。

典型的 RCU 循环有点像这样：

1. 删除指向数据的指针，以防止其他读操作引用它。
2. 等待读操作完成它们的关键处理。
3. 回收内存空间。

将更新阶段划分为删除和回收阶段意味着更新程序会立即执行删除，同时推迟回收直到所有活动读取完成（通过阻止它们或注册一个回调以便在完成时调用）。

虽然 RCU 的概念不是为 Linux 内核发明的，但它在 Linux 中的实现是该技术的一个定义性的例子。

### 合作（0.01）

对于 Linux 内核创新的问题的最终答案永远是协作。你可以说这是一个好时机，也可以称之为技术优势，称之为黑客能力，或者仅仅称之为开源，但 Linux 内核及其支持的许多项目是协作与合作的光辉范例。

它远远超出了内核范畴。各行各业的人都对开源做出了贡献，可以说都是因为 Linux 内核。Linux 曾经是，现在仍然是[自由软件](http://fsf.org)的主要力量，激励人们把他们的代码、艺术、想法或者仅仅是他们自己带到一个全球化的、有生产力的、多样化的人类社区中。

### 你最喜欢的创新是什么？

这个列表偏向于我自己的兴趣：容器、非统一内存访问（NUMA）和多媒体。无疑，列表中肯定缺少你最喜欢的内核创新。在评论中告诉我。

---

via: <https://opensource.com/article/19/8/linux-kernel-top-5-innovations>

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

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


Summary: 自动化是 IT 行业的增长趋势，其目的是消除重复任务中的手动干扰。

好吧，我们离天网更近了一步。

自动化是 IT 行业的增长趋势，其目的是消除重复任务中的手动干扰。

# Oracle Autonomous Linux：用于云计算的自我更新、自我修补的 Linux 发行版

自动化是 IT 行业的增长趋势，其目的是消除重复任务中的手动干扰。Oracle 通过推出 Oracle Autonomous Linux 向自动化世界迈出了又一步，这无疑将使 IoT 和云计算行业受益。

### Oracle Autonomous Linux：减少人工干扰，增多自动化

<img src="content_image/album_201909_22_093857pn9k69e9fn5x9969.png" alt="" title="">

周一，Oracle 联合创始人<ruby> 拉里·埃里森 <rt>  Larry Ellison </rt></ruby>参加了在旧金山举行的Oracle OpenWorld 全球大会。[他宣布了](https://www.zdnet.com/article/oracle-announces-oracle-autonomous-linux/)一个新产品：世界上第一个自治 Linux。这是 Oracle 向第二代云迈进的第二步。第一步是两年前发布的 [Autonomous Database](https://www.oracle.com/in/database/what-is-autonomous-database.html)。

Oracle Autonomous Linux 的最大特性是降低了维护成本。根据 [Oracle 网站](https://www.oracle.com/corporate/pressrelease/oow19-oracle-autonomous-linux-091619.html) 所述，Autonomous Linux “使用先进的机器学习和自治功能来提供前所未有的成本节省、安全性和可用性，并释放关键的 IT 资源来应对更多的战略计划”。

Autonomous Linux 可以无需人工干预就安装更新和补丁。这些自动更新包括 “Linux 内核和关键用户空间库”的补丁。“不需要停机，而且可以免受外部攻击和内部恶意用户的攻击。”它们也可以在系统运行时进行，以减少停机时间。Autonomous Linux 还会自动处理伸缩，以确保满足所有计算需求。

埃里森强调了新的自治系统将如何提高安全性。他特别提到了 [Capitol One 数据泄露](https://www.zdnet.com/article/100-million-americans-and-6-million-canadians-caught-up-in-capital-one-breach/)是由于配置错误而发生的。他说：“一个防止数据被盗的简单规则：将数据放入自治系统。没有人为错误，没有数据丢失。 那是我们与 AWS 之间的最大区别。”

有趣的是，Oracle 还瞄准了这一新产品以与 IBM 竞争。埃里森说：“如果你付钱给 IBM，可以停了。”所有 Red Hat 应用程序都应该能够在 Autonomous Linux 上运行而无需修改。有趣的是，Oracle Linux 是从 Red Hat Enterprise Linux 的源代码中[构建](https://distrowatch.com/table.php?distribution=oracle)的。

看起来，Oracle Autonomous Linux 不会用于企业市场以外。

### 关于 Oracle Autonomous Linux 的思考

Oracle 是云服务市场的重要参与者。这种新的 Linux 产品将使其能够与 IBM 竞争。让人感兴趣的是 IBM 的反应会是如何，特别是当他们有来自 Red Hat 的新一批开源智能软件。

如果你看一下市场数字，那么对于 IBM 或 Oracle 来说情况都不好。大多数云业务由 [Amazon Web Services、Microsoft Azure 和 Google Cloud Platform](https://www.zdnet.com/article/top-cloud-providers-2019-aws-microsoft-azure-google-cloud-ibm-makes-hybrid-move-salesforce-dominates-saas/) 所占据。IBM 和 Oracle 落后于他们。[IBM 收购 Red Hat](https://itsfoss.com/ibm-red-hat-acquisition/) 试图获得发展。这项新的自主云计划是 Oracle 争取统治地位（或至少试图获得更大的市场份额）的举动。让人感兴趣的是，到底有多少公司因为购买了 Oracle 的系统而在互联网的狂野西部变得更加安全？

我必须简单提一下：当我第一次阅读该公告时，我的第一反应就是“好吧，我们离天网更近了一步。”如果我们技术性地考虑一下，我们就像是要进入了机器人末日。如果你打算帮我，我计划去购买一些罐头食品。

你对 Oracle 的新产品感兴趣吗？你会帮助他们赢得云战争吗？在下面的评论中让我们知道。

如果你觉得这篇文章有趣，请花一点时间在社交媒体、Hacker News 或 [Reddit](https://reddit.com/r/linuxusersgroup) 上分享。

---

via: <https://itsfoss.com/oracle-autonomous-linux/>

作者：[John Paul](https://itsfoss.com/author/john/) 选题：[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 上建立一个 TFTP 服务器

Summary: TFTP 即简单文本传输协议，允许用户通过 UDP 协议在系统之间传输文件。

TFTP 即简单文本传输协议，允许用户通过 UDP 协议在系统之间传输文件。

# 如何在 Fedora 上建立一个 TFTP 服务器

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

TFTP 即<ruby> 简单文本传输协议 <rt>  Trivial File Transfer Protocol </rt></ruby>，允许用户通过 [UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) 协议在系统之间传输文件。默认情况下，协议使用的是 UDP 的 69 号端口。TFTP 协议广泛用于无盘设备的远程启动。因此，在你的本地网络建立一个 TFTP 服务器，这样你就可以对 [安装好的 Fedora](https://docs.fedoraproject.org/en-US/fedora/f30/install-guide/advanced/Network_based_Installations/) 和其他无盘设备做一些操作，这将非常有趣。

TFTP 仅仅能够从远端系统读取数据或者向远端系统写入数据，而没有列出远端服务器上文件的能力。它也没提供用户身份验证。由于安全隐患和缺乏高级功能，TFTP 通常仅用于局域网内部（LAN）。

### 安装 TFTP 服务器

首先你要做的事就是安装 TFTP 客户端和 TFTP 服务器：

```
dnf install tftp-server tftp -y
```

上述的这条命令会在 `/usr/lib/systemd/system` 目录下为 [systemd](https://fedoramagazine.org/systemd-getting-a-grip-on-units/) 创建 `tftp.service` 和 `tftp.socket` 文件。

```
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
```

接下来，将这两个文件复制到 `/etc/systemd/system` 目录下，并重新命名。

```
cp /usr/lib/systemd/system/tftp.service /etc/systemd/system/tftp-server.service
cp /usr/lib/systemd/system/tftp.socket /etc/systemd/system/tftp-server.socket
```

### 修改文件

当你把这些文件复制和重命名后，你就可以去添加一些额外的参数，下面是 `tftp-server.service` 刚开始的样子：

```
[Unit]
Description=Tftp Server
Requires=tftp.socket
Documentation=man:in.tftpd

[Service]
ExecStart=/usr/sbin/in.tftpd -s /var/lib/tftpboot
StandardInput=socket

[Install]
Also=tftp.socket
```

在 `[Unit]` 部分添加如下内容：

```
Requires=tftp-server.socket
```

修改 `[ExecStart]` 行：

```
ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpboot
```

下面是这些选项的意思：

* `-c` 选项允许创建新的文件
* `-p` 选项用于指明在正常系统提供的权限检查之上没有其他额外的权限检查
* `-s` 建议使用该选项以确保安全性以及与某些引导 ROM 的兼容性，这些引导 ROM 在其请求中不容易包含目录名。

默认的上传和下载位置位于 `/var/lib/tftpboot`。

下一步，修改 `[Install]` 部分的内容

```
[Install]
WantedBy=multi-user.target
Also=tftp-server.socket
```

不要忘记保存你的修改。

下面是 `/etc/systemd/system/tftp-server.service` 文件的完整内容：

```
[Unit]
Description=Tftp Server
Requires=tftp-server.socket
Documentation=man:in.tftpd

[Service]
ExecStart=/usr/sbin/in.tftpd -c -p -s /var/lib/tftpboot
StandardInput=socket

[Install]
WantedBy=multi-user.target
Also=tftp-server.socket
```

### 启动 TFTP 服务器

重新启动 systemd 守护进程：

```
systemctl daemon-reload
```

启动服务器：

```
systemctl enable --now tftp-server
```

要更改 TFTP 服务器允许上传和下载的权限，请使用此命令。注意 TFTP 是一种固有的不安全协议，因此不建议你在与其他人共享的网络上这样做。

```
chmod 777 /var/lib/tftpboot
```

配置防火墙让 TFTP 能够使用：

```
firewall-cmd --add-service=tftp --perm
firewall-cmd --reload
```

### 客户端配置

安装 TFTP 客户端

```
yum install tftp -y
```

运行 `tftp` 命令连接服务器。下面是一个启用详细信息选项的例子：

```
[client@thinclient:~ ]$ tftp 192.168.1.164
tftp> verbose
Verbose mode on.
tftp> get server.logs
getting from 192.168.1.164:server.logs to server.logs [netascii]
Received 7 bytes in 0.0 seconds [inf bits/sec]
tftp> quit
[client@thinclient:~ ]$
```

记住，因为 TFTP 没有列出服务器上文件的能力，因此，在你使用 `get` 命令之前需要知道文件的具体名称。

---

via: <https://fedoramagazine.org/how-to-set-up-a-tftp-server-on-fedora/>

作者：[Curt Warfield](https://fedoramagazine.org/author/rcurtiswarfield/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[amwps290](https://github.com/amwps290) 校对：[wxy](https://github.com/wxy)

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


使用 Java 框架 Scipio ERP 创建一个在线商店

Summary: Scipio ERP 具有包罗万象的应用程序和功能。

Scipio ERP 具有包罗万象的应用程序和功能。

# 使用 Java 框架 Scipio ERP 创建一个在线商店

>
> Scipio ERP 具有包罗万象的应用程序和功能。
>
>
>

如果，你想在网上销售产品或服务，但要么找不到合适的软件，要么觉得定制成本太高？那么，[Scipio ERP](https://www.scipioerp.com) 也许正是你想要的。

Scipio ERP 是一个基于 Java 的开源的电子商务框架，具有包罗万象的应用程序和功能。这个项目于 2014 年从 [Apache OFBiz](https://ofbiz.apache.org/) 分叉而来，侧重于更好的定制和更现代的吸引力。这个电子商务组件非常丰富，可以在多商店环境中工作，同时支持国际化，具有琳琅满目的产品配置，而且它还兼容现代 HTML 框架。该软件还为许多其他业务场景提供标准应用程序，例如会计、仓库管理或销售团队自动化。它都是高度标准化的，因此易于定制，如果你想要的不仅仅是一个虚拟购物车，这是非常棒的。

该系统也使得跟上现代 Web 标准变得非常容易。所有界面都是使用系统的“[模板工具包](https://www.scipioerp.com/community/developer/freemarker-macros/)”构建的，这是一个易于学习的宏集，可以将 HTML 与所有应用程序分开。正因为如此，每个应用程序都已经标准化到核心。听起来令人困惑？它真的不是 HTML——它看起来很像 HTML，但你写的内容少了很多。

### 初始安装

在你开始之前，请确保你已经安装了 Java 1.8（或更高版本）的 SDK 以及一个 Git 客户端。完成了？太棒了！接下来，切换到 Github 上的主分支：

```
git clone https://github.com/ilscipio/scipio-erp.git
cd scipio-erp
git checkout master
```

要安装该系统，只需要运行 `./install.sh` 并从命令行中选择任一选项。在开发过程中，最好一直使用 “installation for development”（选项 1），它还将安装一系列演示数据。对于专业安装，你可以修改初始配置数据（“种子数据”），以便自动为你设置公司和目录数据。默认情况下，系统将使用内部数据库运行，但是它[也可以配置](https://www.scipioerp.com/community/developer/installation-configuration/configuration/#database-configuration)使用各种关系数据库，比如 PostgreSQL 和 MariaDB 等。

*按照安装向导完成初始配置*

通过命令 `./start.sh` 启动系统然后打开链接 <https://localhost:8443/setup/> 完成配置。如果你安装了演示数据, 你可以使用用户名 `admin` 和密码 `scipio` 进行登录。在安装向导中，你可以设置公司简介、会计、仓库、产品目录、在线商店和额外的用户配置信息。暂时在产品商店配置界面上跳过网站实体的配置。系统允许你使用不同的底层代码运行多个在线商店；除非你想这样做，一直选择默认值是最简单的。

祝贺你，你刚刚安装了 Scipio ERP！在界面上操作一两分钟，感受一下它的功能。

### 捷径

在你进入自定义之前，这里有一些方便的命令可以帮助你：

* 创建一个 shop-override：`./ant create-component-shop-override`
* 创建一个新组件：`./ant create-component`
* 创建一个新主题组件：`./ant create-theme`
* 创建管理员用户：`./ant create-admin-user-login`
* 各种其他实用功能：`./ant -p`
* 用于安装和更新插件的实用程序：`./git-addons help`

另外，请记下以下位置：

* 将 Scipio 作为服务运行的脚本：`/tools/scripts/`
* 日志输出目录：`/runtime/logs`
* 管理应用程序：`<https://localhost:8443/admin/>`
* 电子商务应用程序：`<https://localhost:8443/shop/>`

最后，Scipio ERP 在以下五个主要目录中构建了所有代码：

* `framework`: 框架相关的源，应用程序服务器，通用界面和配置
* `applications`: 核心应用程序
* `addons`: 第三方扩展
* `themes`: 修改界面外观
* `hot-deploy`: 你自己的组件

除了一些配置，你将在 `hot-deploy` 和 `themes` 目录中进行开发。

### 在线商店定制

要真正使系统成为你自己的系统，请开始考虑使用[组件](https://www.scipioerp.com/community/developer/architecture/components/)。组件是一种模块化方法，可以覆盖、扩展和添加到系统中。你可以将组件视为独立 Web 模块，可以捕获有关数据库（[实体](https://www.scipioerp.com/community/developer/entities/)）、功能（[服务](https://www.scipioerp.com/community/developer/services/)）、界面（[视图](https://www.scipioerp.com/community/developer/views-requests/)）、[事件和操作](https://www.scipioerp.com/community/developer/events-actions/)和 Web 应用程序等的信息。由于组件功能，你可以添加自己的代码，同时保持与原始源兼容。

运行命令 `./ant create-component-shop-override` 并按照步骤创建你的在线商店组件。该操作将会在 `hot-deploy` 目录内创建一个新目录，该目录将扩展并覆盖原始的电子商务应用程序。

*一个典型的组件目录结构。*

你的组件将具有以下目录结构：

* `config`: 配置
* `data`: 种子数据
* `entitydef`: 数据库表定义
* `script`: Groovy 脚本的位置
* `servicedef`: 服务定义
* `src`: Java 类
* `webapp`: 你的 web 应用程序
* `widget`: 界面定义

此外，`ivy.xml` 文件允许你将 Maven 库添加到构建过程中，`ofbiz-component.xml` 文件定义整个组件和 Web 应用程序结构。除了一些在当前目录所能够看到的，你还可以在 Web 应用程序的 `WEB-INF` 目录中找到 `controller.xml` 文件。这允许你定义请求实体并将它们连接到事件和界面。仅对于界面来说，你还可以使用内置的 CMS 功能，但优先要坚持使用核心机制。在引入更改之前，请熟悉 `/applications/shop/`。

#### 添加自定义界面

还记得[模板工具包](https://www.scipioerp.com/community/developer/freemarker-macros/)吗？你会发现它在每个界面都有使用到。你可以将其视为一组易于学习的宏，它用来构建所有内容。下面是一个例子：

```
<@section title="Title">
    <@heading id="slider">Slider</@heading>
    <@row>
        <@cell columns=6>
            <@slider id="" class="" controls=true indicator=true>
                <@slide link="#" image="https://placehold.it/800x300">Just some content…</@slide>
                <@slide title="This is a title" link="#" image="https://placehold.it/800x300"></@slide>
            </@slider>
        </@cell>
        <@cell columns=6>Second column</@cell>
    </@row>
</@section>
```

不是很难，对吧？同时，主题包含 HTML 定义和样式。这将权力交给你的前端开发人员，他们可以定义每个宏的输出，并坚持使用自己的构建工具进行开发。

我们快点试试吧。首先，在你自己的在线商店上定义一个请求。你将修改此代码。一个内置的 CMS 系统也可以通过 <https://localhost:8443/cms/> 进行访问，它允许你以更有效的方式创建新模板和界面。它与模板工具包完全兼容，并附带可根据你的喜好采用的示例模板。但是既然我们试图在这里理解系统，那么首先让我们采用更复杂的方法。

打开你商店 `webapp` 目录中的 [controller.xml](https://www.scipioerp.com/community/developer/views-requests/request-controller/) 文件。控制器会跟踪请求事件并相应地执行操作。下面的操作将会在 `/shop/test` 下创建一个新的请求:

```
<!-- Request Mappings -->
<request-map uri="test">
     <security https="true" auth="false"/>
      <response name="success" type="view" value="test"/>
</request-map>
```

你可以定义多个响应，如果需要，可以在请求中使用事件或服务调用来确定你可能要使用的响应。我选择了“视图”类型的响应。视图是渲染的响应；其他类型是请求重定向、转发等。系统附带各种渲染器，可让你稍后确定输出；为此，请添加以下内容：

```
<!-- View Mappings -->
<view-map name="test" type="screen" page="component://mycomponent/widget/CommonScreens.xml#test"/>
```

用你自己的组件名称替换 `my-component`。然后，你可以通过在 `widget/CommonScreens.xml` 文件的标签内添加以下内容来定义你的第一个界面：

```
<screen name="test">
        <section>
            <actions>
            </actions>
            <widgets>
                <decorator-screen name="CommonShopAppDecorator" location="component://shop/widget/CommonScreens.xml">
                    <decorator-section name="body">
                        <platform-specific><html><html-template location="component://mycomponent/webapp/mycomponent/test/test.ftl"/></html></platform-specific>
                    </decorator-section>
                </decorator-screen>
            </widgets>
        </section>
    </screen>
```

商店界面实际上非常模块化，由多个元素组成（[小部件、动作和装饰器](https://www.scipioerp.com/community/developer/views-requests/screen-widgets-decorators/)）。为简单起见，请暂时保留原样，并通过添加第一个模板工具包文件来完成新网页。为此，创建一个新的 `webapp/mycomponent/test/test.ftl` 文件并添加以下内容：

```
<@alert type="info">Success!</@alert>
```

*一个自定义的界面。*

打开 <https://localhost:8443/shop/control/test/> 并惊叹于你自己的成就。

#### 自定义主题

通过创建自己的主题来修改商店的界面外观。所有主题都可以作为组件在 `themes` 文件夹中找到。运行命令 `./ant create-theme` 来创建你自己的主题。

*一个典型的主题组件布局。*

以下是最重要的目录和文件列表：

* 主题配置：`data/*ThemeData.xml`
* 特定主题封装的 HTML：`includes/*.ftl`
* 模板工具包 HTML 定义：`includes/themeTemplate.ftl`
* CSS 类定义：`includes/themeStyles.ftl`
* CSS 框架: `webapp/theme-title/`

快速浏览工具包中的 Metro 主题；它使用 Foundation CSS 框架并且充分利用了这个框架。然后，然后，在新构建的 `webapp/theme-title` 目录中设置自己的主题并开始开发。Foundation-shop 主题是一个非常简单的特定于商店的主题实现，你可以将其用作你自己工作的基础。

瞧！你已经建立了自己的在线商店，准备个性化定制吧！

*一个搭建完成的基于 Scipio ERP的在线商店。*

### 接下来是什么？

Scipio ERP 是一个功能强大的框架，可简化复杂的电子商务应用程序的开发。为了更完整的理解，请查看项目[文档](https://www.scipioerp.com/community/developer/architecture/components/)，尝试[在线演示](https://www.scipioerp.com/demo/)，或者[加入社区](https://forum.scipioerp.com/).

---

via: <https://opensource.com/article/19/1/scipio-erp>

作者：[Paul Piper](https://opensource.com/users/madppiper) 选题：[lujun9972](https://github.com/lujun9972) 译者：[laingke](https://github.com/laingke) 校对：[wxy](https://github.com/wxy)

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


如何在互联网放置 HTML 页面

# 如何在互联网放置 HTML 页面

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

我喜欢互联网的一点是在互联网放置静态页面是如此简单。今天有人问我该怎么做，所以我想我会快速地写下来！

### 只是一个 HTML 页面

我的所有网站都只是静态 HTML 和 CSS。我的网页设计技巧相对不高（<https://wizardzines.com> 是我自己开发的最复杂的网站），因此保持我所有的网站相对简单意味着我可以做一些改变/修复，而不会花费大量时间。

因此，我们将在此文章中采用尽可能简单的方式 —— 只需一个 HTML 页面。

### HTML 页面

我们要放在互联网上的网站只是一个名为 `index.html` 的文件。你可以在 <https://github.com/jvns/website-example> 找到它，它是一个 Github 仓库，其中只包含一个文件。

HTML 文件中包含一些 CSS，使其看起来不那么无聊，部分复制自 <https://example.com>。

### 如何将 HTML 页面放在互联网上

有以下几步：

1. 注册 [Neocities](https://neocities.org/) 帐户
2. 将 index.html 复制到你自己 neocities 站点的 index.html 中
3. 完成

上面的 `index.html` 页面位于 [julia-example-website.neocities.com](https://julia-example-website.neocities.org/) 中，如果你查看源代码，你将看到它与 github 仓库中的 HTML 相同。

我认为这可能是将 HTML 页面放在互联网上的最简单的方法（这是一次回归 Geocities，它是我在 2003 年制作我的第一个网站的方式）:)。我也喜欢 Neocities （像 [glitch](https://glitch.com)，我也喜欢）它能实验、学习，并有乐趣。

### 其他选择

这绝不是唯一简单的方式，在你推送 Git 仓库时，Github pages 和 Gitlab pages 以及 Netlify 都将会自动发布站点，并且它们都非常易于使用（只需将它们连接到你的 GitHub 仓库即可）。我个人使用 Git 仓库的方式，因为 Git 不会让我感到紧张，我想知道我实际推送的页面发生了什么更改。但我想你如果第一次只想将 HTML/CSS 制作的站点放到互联网上，那么 Neocities 就是一个非常好的方法。

如果你不只是玩，而是要将网站用于真实用途，那么你或许会需要买一个域名，以便你将来可以更改托管服务提供商，但这有点不那么简单。

### 这是学习 HTML 的一个很好的起点

如果你熟悉在 Git 中编辑文件，同时想练习 HTML/CSS 的话，我认为将它放在网站中是一个有趣的方式！我真的很喜欢它的简单性 —— 实际上这只有一个文件，所以没有其他花哨的东西需要去理解。

还有很多方法可以复杂化/扩展它，比如这个博客实际上是用 [Hugo](https://gohugo.io/) 生成的，它生成了一堆 HTML 文件并放在网络中，但从基础开始总是不错的。

---

via: <https://jvns.ca/blog/2019/09/06/how-to-put-an-html-page-on-the-internet/>

作者：[Julia Evans](https://jvns.ca/) 选题：[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/) 荣誉推出


Skytap 和微软将 IBM 机器搬到了 Azure

Summary: 微软再次证明了其摒弃了“非我发明”这一态度来支持客户。

微软再次证明了其摒弃了“非我发明”这一态度来支持客户。

# Skytap 和微软将 IBM 机器搬到了 Azure

>
> 微软再次证明了其摒弃了“非我发明”这一态度来支持客户。
>
>
>

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

当微软将 Azure 作为其 Windows 服务器操作系统的云计算版本发布时，它并没有使其成为仅支持 Windows 系统的版本，它还支持 Linux 系统，并且在短短几年内[其 Linux 实例的数量现在已经超过了Windows 实例的数量](https://www.openwall.com/lists/oss-security/2019/06/27/7)。

很高兴看到微软终于摆脱了这种长期以来非常有害的“非我发明”态度，该公司的最新举动确实令人惊讶。

微软与一家名为 Skytap 的公司合作，以在 Azure 云服务上提供 IBM Power9 实例，可以在 Azure 云内运行基于 Power 的系统，该系统将与其已有的 Xeon 和 Epyc 实例一同作为 Azure 的虚拟机（VM）。

Skytap 是一家有趣的公司。它由华盛顿大学的三位教授创立，专门研究本地遗留硬件的云迁移，如 IBM System I 或 Sparc 的云迁移。该公司在西雅图拥有一个数据中心，以 IBM 的硬件运行 IBM 的 PowerVM 管理程序，并且对在美国和英格兰的 IBM 数据中心提供主机托管。

该公司的座右铭是快速迁移，然后按照自己的节奏进行现代化。因此，它专注于帮助一些企业将遗留系统迁移到云，然后实现应用程序的现代化，这也是它与微软合作的目的。Azure 将通过为企业提供平台来提高传统应用程序的价值，而无需花费巨额费用重写一个新平台。

Skytap 提供了预览，可以看到使用 Skytap 上的 DB2 提升和扩展原有的 IBM i 应用程序以及通过 Azure 的物联网中心进行扩展时可能发生的情况。该应用程序无缝衔接新旧架构，并证明了不需要完全重写可靠的 IBM i 应用程序即可从现代云功能中受益。

### 迁移到 Azure

根据协议，微软将把 IBM 的 Power S922 服务器部署在一个未声明的 Azure 区域。这些机器可以运行 PowerVM 管理程序，这些管理程序支持老式 IBM 操作系统以及 Linux 系统。

Skytap 首席执行官<ruby> 布拉德·希克 <rt>  Brad Schick </rt></ruby>在一份声明中说道：“通过先替换旧技术来迁移上云既耗时又冒险。……Skytap 的愿景一直是通过一些小小的改变和较低的风险实现企业系统到云平台的迁移。与微软合作，我们将为各种遗留应用程序迁移到 Azure 提供本地支持，包括那些在 IBM i、AIX 和 Power Linux 上运行的程序。这将使企业能够通过使用 Azure 服务进行现代化来延长传统系统的寿命并增加其价值。”

随着基于 Power 应用程序的现代化，Skytap 随后将引入 DevOps CI/CD 工具链来加快软件的交付。迁移到 Azure 的 Skytap 上后，客户将能够集成 Azure DevOps，以及 Power 的 CI/CD 工具链，例如 Eradani 和 UrbanCode。

这些听起来像是迈出了第一步，但这意味着以后将会实现更多，尤其是在应用程序迁移方面。如果它仅在一个 Azure 区域中，听起来好像它们正在对该项目进行测试和验证，并可能在今年晚些时候或明年进行扩展。

---

via: <https://www.networkworld.com/article/3438904/microsoft-brings-ibm-iron-to-azure-for-on-premises-migrations.html>

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


从 IaaS 到 HaaS：京东云的新“硬盒”

Summary: 京东云下一代服务器是比裸金属和异构计算更底层的基础设施服务。

京东云下一代服务器是比裸金属和异构计算更底层的基础设施服务。

# 从 IaaS 到 HaaS：京东云的新“硬盒”

作为一个曾经亲自扛着 2U 服务器进长安街长话机房的系统工程师，我对服务器的感情是深厚的，当抚摸着冰冷的裸金属，感受着机房内嗡嗡的背景噪音时，似乎能感觉到数据的流动。因此，当得知我的采访对象是国内第一个服务器硬件开源项目的总架构师陈国峰先生时，我还是有点小激动的。

国峰是一个十分低调的人，现任京东云硬件研发总监，他曾在百度工作，负责过百度硬件架构设计的相关工作，如百度的“北极”整机柜服务器、百度网盘用的冰山服务器、百度 AI 所使用的 X-MAN 异构计算服务器等就是其带领团队研发的成果，他也曾任开放数据中心委员会“天蝎”项目的总架构设计师。这十来年的硬件设计经历，让这个行业“老兵”对于互联网的基础设施——服务器，有着独到的见解。

### 演进：从复杂到简单的服务器

我最早接触过的服务器是 Sun 微系统的 Sparc 小型服务器，并没有见识过最早的<ruby> 大型机 <rp>  （ </rp> <rt>  MainFrame </rt> <rp>  ） </rp></ruby>。随着互联网的发展，作为互联网迅猛发展的重要基础设施，服务器的形态也逐渐演变，从塔式服务器、刀片式服务器，再到机架式服务器，我们可以看到服务器的发展从高成本向低成本演进，由复杂变简单，由高技术壁垒向无技术壁垒演进。

就好比手机的演进过程，从一开始使用模拟网的大哥大，到后来使用数字网的手机（现在我们称之为功能机），再到现在的智能机，可以看到，手机的技术在急速进步，技术壁垒在迅速降低，生产成本也以不可思议的速度降低。而在服务器硬件方面，我们同样发现，现在的机架式服务器与原来的大型机相比，亦是如此。

从另外一个角度来看，随着市场需求的不断加大，我们对于服务器硬件的看法也逐渐发生了变化。从过去每个互联网公司最重要的硬件资产就是昂贵的服务器，到如今服务器已经成为了基本的生产资料一样普遍和随处可见。

以前对大机和小机追求的高可靠性、高稳定性，以及由此产生的高成本，随着云计算技术的普及，对单个服务器基础设施的稳定性和可靠性也在降低。互联网应用系统可以通过软件、集群的方式，来提升可靠性和稳定性，通过软件上的容忍度，对集群的容忍度会变高，通过这些上层的手段来避免对于底层基础设施的过度追求。相应的，随着对于基础设施的要求的不断降低，硬件设计的成本自然而然的也就降了下来。

### 变化：源自真实场景的需求

京东云的下一代服务器也并非完全凭空诞生，而是源自于实际需求的变化。

在过去，使用机架式服务器依然有大量的工作需要在机房内由人工完成，比如一个月可以在一个机房内交付 1 万台机器，一年 10 万台左右的规模。在过去的产业模式下，这种机制尚可持续，但如今的 HyperScale 模式下，这样的交付效率显然无法满足业务对于大规模数据中心的部署要求。

另外，随着云计算的兴起，云的场景也开始多元化，传统的公有云开始衍生出混合云、私有云……这样就会诞生另外一个场景，私有化的部署，包括边缘部署。这种部署是很分散的，不是集中式的。对于这种分散式的部署，我们更需要的是一体化集成的整机柜服务器，避免把很多部署的技术资源分散到各个地域和零散的点上面去。然而云用户，特别是私有云和混合云用户对硬件的稳定和配合功能往往也会有不同的诉求，这给传统的整机柜服务器提出了新的挑战。

为此，国峰带领他的团队，设计出了京东云下一代服务器。

在他看来，下一代服务器必须具备以下几个特性：

1. **高稳定性**。在过去私有云的时代，总拥有成本（TCO）是服务器定制的核心诉求，而在云的时代，为用户提供高可靠的基础设施是京东云的基本服务宗旨，所以，我们把高稳定性放在第一位，而不再是简单的将成本放在第一位。
2. **高灵活性**。公有云就意味着你的客户也是千人千面，不同于传统自用私有云，公有云客户需求的多元化是不可避免的，因此，基础服务就必须有足够的灵活性，以适配这种来自需求的灵活性。这也是为什么京东云下一代服务器要采用模块化设计的概念。
3. **高效率**。对于当前复杂的云市场，公有云，私有云，混合云多种场景并存的市场下，提供一体化交付，并且快速响应客户的资源需求也是产品竞争力的一项重要指标；高效另外一个层面的含义是高能效，能效是数据中心技术中的又一项重要指标，直接影响基础设施的运营成本；因此高效率也成为硬件基础设施的重要特性。
4. **低成本**。任何产品都避不开成本，成本是产品市场的核心因素，影响到产品的核心竞争力，但是，在云的场景下成本管控应当是在为客户提供了高稳定性、高灵活性、高效率之后考虑的事情。

### HaaS ：Hardware as a Service

和我们所熟知的裸金属、异构计算不同，京东云下一代服务器是比裸金属和异构计算更底层的基础设施服务。确切地说，不管是裸金属还是异构计算，包括上层的 IaaS、PaaS、SaaS 等服务都可以在京东云下一代服务器上呈现。

京东云将会围绕着下一代服务器打造公有云、私有云、混合云、全方位的云产品。一方面，这些底层的硬件服务会服务于京东集团内部的自用私有云，同时也会服务于集团的公有云业务。另一方面，针对私有云和混合云，也可以对外提供私有化交付。如果客户有需求，京东云可以将这些定制的硬件结合京东云的 Iaas、Paas、SaaS 相关技术和产品做成整体解决方案，交付给客户。针对不同的客户需求，京东云可以围绕定制化服务器硬件和MDC（整合IT，供电，制冷一体方案）提供租、售产品服务。这就是我们所谓的 HaaS 的理念和概念。

### 挑战：技术的进步

当然，下一代服务器并非一蹴而就，所面临的挑战主要分为三个方面：

第一、设计理念——高灵活性，因为用户的需求不可预测，用户场景复杂，租用机房较多，每个机房基础设施条件不一样，同时业务类型复杂，资源调配迁移需求比较多，而目前主流的整机柜与通用机相比，无论从 21 英寸的尺寸还是集中的散热方式都有很大的差异，造成了整机柜部署的局限性，很难实现灵活迁移，混合部署。京东云的下一代服务器通过“标准化，模块化，弹性化”，极大地提高了多场景支撑的灵活性。首先我们采用 42U 19 英寸标准机柜为设计单位，节点独立散热，通用性强，实现了整机柜和标准机架服务器任意切换。其次，节点前 IO 设计，机柜后部无任何线缆，所有运维工作均可在冷通道进行，单边维护效率更高，环境更友好。同时通过模块化设计，可实现前后 IO 灵活切换，集中供电和单机供电模式灵活切换。

第二、也是这个行业面临的通用性技术挑战——高功率密度问题。因为现在芯片行业已经进入到后摩尔定律时代了，意味着计算力的提升也会带来功耗的不断提升。功耗的上升，对于系统散热设计的挑战就会越来越大，风冷已经不足以满足目前的制冷需求，甚至散热某种程度上已经制约了服务器和数据中心的发展。所以，在新的架构设计上，我们会通过一些新的散热手段，比如通过风液混合散热的方式解决功率密度的问题。

第三，功率密度提高之后，风扇转速就会更高。同时由于硬盘的存储密度不断上升，对于外部环境的振动、噪声的敏感度就越来越高。所以我们在设计上对于硬盘和风扇振动需要考虑得更多，我们采用了“硬盘前置，风扇后置”的系统架构，最大程度的拉开风扇和硬盘之间的距离，有效的降低了震动对硬盘的影响。

### 开源：硬件开源任重道远

软件是开源领域的主力，虽然已经有一些开源硬件的出现，但是，仍然算不上主流，绝大多数团队在硬件方面依然采用传统的闭源方式。

在这个方面，我专门请教了国峰。在他看来，首先，必须承认硬件开源的发展远不如软件开源。硬件开源是最近几年兴起的，国际上比较知名的组织就是 OCP（[Open Compute Project](https://www.opencompute.org/)），以及国内比较知名的 ODCC ，其前身是 BAT 三家发起的天蝎项目。

他认为，之所以过去大家不做硬件开源，主要是两个原因：

一方面，原来硬件的技术壁垒相对较高，大家希望通过这些技术壁垒来创造价值，来实现商业变现，所以，之前市场上一直没有硬件开源的社区和项目。

另一方面，硬件跟软件有一个很大的不同点，软件的代码一旦写好，在机器上直接运行就能知道是否可以工作，硬件不一样，要验证一个硬件系统的设计，首先要从原理图上设计出来，然后在工厂生产出来，最后进行验证。它的周期长，同时需要大量实物的投入，投入成本相对比较大。此外，还需要有很多专业设备做测试，调试，所以，它的验证成本也非常高。这也是为什么硬件开源难以发展起来的原因。

但是，随着时代的变化，市场的不断变大，技术的开放力度也在不断的增强，技术壁垒也相应在不断降低，成本也越来越低。众人拾柴火焰高，一个新的硬件出来之后有更多的人参与进来，它的上下游的生态就会建得更快一点，普及周期就会变得更短。

这也是为什么京东云下一代服务器要做硬件开源的原因，我们希望建立和维护这样的生态，把大家拉到一起共同推动新生态的演进。

当然，开源也并非易事，要开源首先必须得做好充分的准备来接受市场以及行业专业人士的检验。目前京东云正在为下一代服务器的开源做准备。接下来，京东云也会围绕其新的硬件设计建立一些开源的渠道，比如 OCP、ODCC 等。

京东云希望通过硬件开源，让行业里面更多相关经验的从业者参与到下一代服务器的硬件设计中来，共同围绕新的服务器架构营造一个合作共赢的生态。