用于调度任务的 systemd 定时器

![](/data/attachment/album/202106/25/175650j4wrdw0z884iod80.jpg)

systemd 提供定时器有一段时间了，定时器替代了 cron 功能，这一特性值得看看。本文将向你介绍在系统启动后如何使用 systemd 中的定时器来运行任务，并在此后重复运行。这不是对 systemd 的全面讨论，只是对此特性的一个介绍。

### 快速回顾：cron、anacron 与 systemd

cron 可以以几分钟到几个月或更长时间的粒度调度运行一个任务。设置起来相对简单，它只需要一个配置文件。虽然配置过程有些深奥，但一般用户也可以使用。

然而，如果你的系统在需要执行的时间没有运行，那么 cron 会失败。

anacron 克服了“系统没有运行”的问题。它确保任务将在你的系统再次启动时执行。虽然它旨在给管理员使用，但有些系统允许普通用户访问 anacron。

但是，anacron 的执行频率不能低于每天一次。

cron 和 anacron 都存在执行上下文一致性的问题。必须注意任务运行时有效的环境与测试时使用的环境完全相同。必须提供相同的 shell、环境变量和路径。这意味着测试和调试有时会很困难。

systemd 定时器提供了 cron 和 anacron 二者的优点，允许调度到分钟粒度。确保在系统再次运行时执行任务，即使在预期的执行时间内系统处于关闭状态。它对所有用户都可用。你可以在它将要运行的环境中测试和调试执行。

但是，它的配置更加复杂，至少需要两个配置文件。

如果你的 cron 和 anacron 配置可以很好地为你服务，那么可能没有理由改变。但是 systemd 至少值得研究，因为它可以简化任何当前的 cron/anacron 工作方式。

### 配置

systemd 定时器执行功能至少需要两个文件。这两个是“<ruby> 定时器单元 <rt>  timer unit </rt></ruby>”和“<ruby> 服务单元 <rt>  service unit </rt></ruby>”。（其执行的）“动作”不仅仅是简单的命令，你还需要一个“作业”文件或脚本来执行必要的功能。

定时器单元文件定义调度表，而服务单元文件定义执行的任务。有关的更多详细信息请参考 `man systemd.timer` 中提供的 .timer 单元。服务单元的详细信息可在 `man systemd.service` 中找到。

单元文件存放在几个位置（在手册页中有列出）。然而，对于普通用户来说，最容易找到的位置可能是 `~/.config/systemd/user`。请注意，这里的 `user` 是字符串 `user`。

### 示例

此示例是一个创建用户调度作业而不是（以 root 用户身份运行的）系统调度作业的简单示例。它将消息、日期和时间打印到文件中。

1、首先创建一个执行任务的 shell 脚本。在你的本地 `bin` 目录中创建它，例如在 `~/bin/schedule-test.sh` 中。

创建文件：

```
touch ~/bin/schedule-test.sh

```

然后将以下内容添加到你刚刚创建的文件中：

```
#!/bin/sh
echo "This is only a test: $(date)" >> "$HOME/schedule-test-output.txt"

```

记住赋予你的 shell 脚本执行权限。

2、创建 .service 单元调用上面的脚本。在以下位置创建目录与文件：`~/.config/systemd/user/schedule-test.service`：

```
[Unit]
Description=A job to test the systemd scheduler

[Service]
Type=simple
ExecStart=/home/<user>/bin/schedule-test.sh

[Install]
WantedBy=default.target

```

请注意 `<user>` 应该是你的家目录地址，但是单元文件路径名中的 `user` 实际上是字符串 `user`。

`ExecStart` 应该提供一个没有变量的绝对地址。例外情况是，对于用户单元文件，你可以用 `%h` 替换 `$HOME`。换句话说，你可以使用:

```
ExecStart=%h/bin/schedule-test.sh

```

这仅用于用户单元文件，而不适用于系统服务，因为在系统环境中运行时 `%h` 总是返回 `/root`。其他特殊符号可在 `man systemd.unit` 的 `SPECIFIERS` 中找到。因为它超出了本文的范围，所以这就是我们目前需要了解的关于特殊符号的全部内容。

3、创建一个 .timer 单元文件，该文件实际上调度你创建的 .service 单元文件。在 .service 单元文件相同位置创建它：`~/.config/systemd/user/schedule-test.timer`。请注意，文件名仅在扩展名上有所不同，例如一个是 `.service`，一个是 `.timer`。

```
[Unit]
Description=Schedule a message every 1 minute
RefuseManualStart=no  # Allow manual starts
RefuseManualStop=no   # Allow manual stops

[Timer]
#Execute job if it missed a run due to machine being off
Persistent=true
#Run 120 seconds after boot for the first time
OnBootSec=120
#Run every 1 minute thereafter
OnUnitActiveSec=60
#File describing job to execute
Unit=schedule-test.service

[Install]
WantedBy=timers.target

```

请注意，这个 .timer 单元文件使用了 `OnUnitActiveSec` 来指定调度表。`OnCalendar` 选项更加灵活。例如:

```
# run on the minute of every minute every hour of every day
 OnCalendar=*-*-* *:*:00
# run on the hour of every hour of every day
 OnCalendar=*-*-* *:00:00
# run every day
 OnCalendar=*-*-* 00:00:00
# run 11:12:13 of the first or fifth day of any month of the year
# 2012, but only if that day is a Thursday or Friday
 OnCalendar=Thu,Fri 2012-*-1,5 11:12:13

```

有关 `OnCalendar` 的更多信息参见 [这里](https://www.freedesktop.org/software/systemd/man/systemd.time.html#Calendar%20Events)。

4、所有的部件都已就位，但你应该进行测试，以确保一切正常。首先，启用该用户服务:

```
$ systemctl --user enable schedule-test.service

```

这将导致类似如下的输出:

```
Created symlink /home/<user>/.config/systemd/user/default.target.wants/schedule-test.service → /home/<user>/.config/systemd/user/schedule-test.service.

```

现在执行测试工作：

```
$ systemctl --user start schedule-test.service

```

检查你的输出文件（`$HOME/schedule-test-output.txt`），确保你的脚本运行正常。应该只有一个条目，因为我们还没有启动定时器。必要时进行调试。如果你需要更改 .service 单元文件，而不是更改它调用的 shell 脚本，请不要忘记再次启用该服务。

5、一旦作业正常运行，通过为服务启用、启动用户定时器来实时调度作业：

```
$ systemctl --user enable schedule-test.timer
$ systemctl --user start schedule-test.timer

```

请注意，你已经在上面的步骤 4 中启动、启用了服务，因此只需要为它启用、启动定时器。

`enable` 命令会产生如下输出：

```
Created symlink /home/<user>/.config/systemd/user/timers.target.wants/schedule-test.timer → /home/<user>/.config/systemd/user/schedule-test.timer.

```

`start` 命令将只是返回命令行界面提示符。

### 其他操作

你可以检查和监控服务。如果你从系统服务收到错误，下面的第一个命令特别有用：

```
$ systemctl --user status schedule-test
$ systemctl --user list-unit-files

```

手动停止服务：

```
$ systemctl --user stop schedule-test.service

```

永久停止并禁用定时器和服务，重新加载守护程序配置并重置任何失败通知：

```
$ systemctl --user stop schedule-test.timer
$ systemctl --user disable schedule-test.timer
$ systemctl --user stop schedule-test.service
$ systemctl --user disable schedule-test.service
$ systemctl --user daemon-reload
$ systemctl --user reset-failed

```

### 总结

本文以 systemd 定时器为出发点，但是 systemd 的内容远不止于此。这篇文章应该为你提供一个基础。你可以从 [Fedora Magazine systemd 系列](https://fedoramagazine.org/what-is-an-init-system/) 开始探索更多。

### 参考

更多阅读：

* `man systemd.timer`
* `man systemd.service`
* [Use systemd timers instead of cronjobs](https://opensource.com/article/20/7/systemd-timers)
* [Understanding and administering systemd](https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/)
* <https://opensource.com/> 内有 systemd 速查表

---

via: <https://fedoramagazine.org/systemd-timers-for-scheduling-tasks/>

作者：[Richard England](https://fedoramagazine.org/author/rlengland/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[dcoliversun](https://github.com/dcoliversun) 校对：[wxy](https://github.com/wxy)

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


使用 QEMU 尝鲜 Windows 11

Summary: 我想到用 QEMU 虚拟机来体验一下新发布的 Windows 11 尝尝鲜。

最后那个应该不是Mobile版的tiktok吧

哇哦，作者好棒！！！牛逼，第一次看到Win11！！

新商店还没有更新，Tiktok 是 PWA 版本

你的CentOS 环境是arm架构的cpu吗

你的CentOS 环境是arm架构的cpu吗

你的CentOS 环境是arm架构的cpu吗

我想到用 QEMU 虚拟机来体验一下新发布的 Windows 11 尝尝鲜。

![](/data/attachment/album/202106/26/115008nnhoeh5ksxfoksn3.jpg)

2021 年 06 月 24 日微软正式发布了 Windows 11 操作系统，这是微软时隔 6 年来的再次发布操作系统。根据其官方介绍，Windows 11 新增了许多特性，考虑到安装 Windows 11 到 PC 会耽误现在的正常工作（毕竟用 Windows 11 替换 PC 中的 Windows 10 后需要重新安装各种工程软件，这是件很耗时的事情），因此我想到用 QEMU 虚拟机来体验一下新发布的 Windows 11 尝尝鲜。

### 一、准备工作

我们需要准备 QEMU 环境、Windows 11 镜像文件、virtio-win 的镜像文件，这里罗列一下：

* QEMU（本文是在 CentOS 环境下安装的 QEMU 工具）
* Windows 11 镜像（下载地址：[win11.iso](https://www.mutaz.net/free-programs/en/download/?2131))，需要空间 4.5G
* virtio-win 镜像（下载地址：[virtio-win-0.1.190.iso](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.190-1/))，需要空间 479M

注意：下载完成后，为了简化，我这里将镜像都重新简化命名如下：

| 镜像文件 | 简化命名 |
| --- | --- |
| virtio-win-xxx.iso | `virtio-win.iso` |
| xxx-windows11-xxx.iso | `windows11.iso` |

#### 1、安装 qemu 命令

如果是 Ubuntu 系统，可以直接用`sudo apt-get install qemu`或者`sudo apt-get install qemu-system-i386`命令来安装 QEMU。

本文中是使用的 qemu-5.1.0（下载地址：[qemu](https://www.qemu.org/)）来编译生成的 `qemu-system-x86_64`、`qemu-img` 等命令。

操作步骤：

```
# 在根目录下解压 qemu-5.1.0.tar.xz
cp qemue-5.1.10.tar.xz /
cd /
tar xvf qemu-5.1.0.tar.xz

# 进入 qemu-5.1.0 源码目录
cd /qemu-5.1.0

# 编译
mkdir build
cd build
../configure
make

```

编译完之后，`qemu-img` 以及 `qemu-system-x86_64` 两个命令所在的位置分别是：

| 命令工具 | 所在路径 |
| --- | --- |
| `qemu-img` | `/qemu-5.1.0/build/qemu-img` |
| `qemu-system-x86_64` | `/qemu-5.1.0/build/x86_64-softmmu/qemu-system-x86_64` |

#### 2、制作 Windows 11 安装磁盘

我们重新创建一个目录，用来存放 `windows11.iso`、`virtio-win.iso` 镜像文件以及马上就要生成的 `windows11.qcow2` 文件。

```
# 为了方便，依旧在根目录下操作（其实这是很不好的习惯）
cd /
mkdir win11
cd win11

# 将下载好的 windows 11 镜像以及 virtio-win 镜像拷贝进来
cp xxx/windows11.iso /win11/
cp xxx/virtio-win.iso /win11/

# 然后利用 qemu-img 命令制作系统安装磁盘，分配磁盘大小 120G 空间
/qemu-5.1.0/build/qemu-img create -f qcow2 ./windows11.qcow2 120G

```

此时，`/win11/`目录下应该是这样几个文件：

![](/data/attachment/album/202106/26/112137ighsstpa166dtost.png)

#### 3、编写启动 Windows 11 脚本

为了方便后面启动 Windows 11 系统，将 qemu 启动命令写入一个脚本中。

编辑 start.sh 脚本：

```
vim /win11/start.sh
```

编写脚本命令内容：

```
/qemu-5.1.0/build/x86_64-softmmu/qemu-system-x86_64 \
  -enable-kvm \
  -smp 4 \
  -m 4G \
  -machine usb=on \
  -device usb-tablet \
  -display default \
  -vga virtio \
  -device e1000,netdev=net0 \
  -netdev user,id=net0,net=192.168.20.0/24,dhcpstart=192.168.20.20 \
  -drive file=/win11/windows11.qcow2,if=virtio \
  -drive file=/win11/virtio-win.iso,index=1,media=cdrom \
  -drive file=/win11/windows11.iso,index=2,media=cdrom \
  -spice port=8891,addr=172.17.81.26,disable-ticketing

```

脚本中的第 9 行与第 10 行指定了 Windows 11 中网卡驱动类型为 `e1000`，并指定其采用 `dhcp` 方式获取 IP 地址。第 14 行则指定了 spice 协议连接地址，其中`172.17.81.26:8891`是指的我的宿主机的 IP 地址和端口号（**此处 IP 地址以及端口号需要根据个人的宿主机环境进行修改**），待执行 `start.sh` 脚本后可以通过 spice 协议连接 Windows 11 系统界面。

赋予 `start.sh` 可执行权限：

```
chmod +x /win11/start.sh
```

#### 4、安装 spice 客户端

推荐使用`virt-vierer`工具客户端，用来通过spice协议连接即将安装的windows11系统桌面。

下载地址：[virt-viewer](https://releases.pagure.org/virt-viewer/)，推荐下载`virt-vierer-x64-2.0.msi`版本。

#### 5、完成准备工作

至此，准备工作都完成了，此时`/win11/`目录下应该有 4 个文件，如下图所示。

![](/data/attachment/album/202106/26/112623rzslsa3awdsdw3wd.png)

### 二、安装 Windows 11 系统

#### 1、启动 start.sh 脚本

执行 `start.sh` 脚本，然后用 spice 协议连接`172.17.81.26:8891`端口：

![](/data/attachment/album/202106/26/112731twctpqgmwxwx80qe.png)

#### 2、安装 Windows 11 系统

连接上远程界面后，首先看到的是经典的 Windows 界面：

![](/data/attachment/album/202106/26/112804ykud3odtgkuctb9g.png)

然后进入语言、时区、键盘等选项，此处不用修改，一直选择默认的即可。

![](/data/attachment/album/202106/26/112823i2z4l0ld3l2l4sfj.png)

接着需要输入密钥，但我们并没有，此处选择“I don't have a product key”即可。

![](/data/attachment/album/202106/26/112847tu1ve9u27gv6q7ej.png)

然后进入了磁盘选择页面，会发现没有磁盘可选，此时单击“Load driver”选项就进行扫描，然后就可以发现磁盘（此处便是 `virtio-win.iso` 在起作用了）。此处发现**并没有 Windows 11 的选项，直接选择 “w10” 那一项即可**（我猜测是因为 `virtio-win.iso` 还并未支持 Windows 11 选项，相信马上就会更新了）。

![](/data/attachment/album/202106/26/113514rnc5f4n45c9gs0zq.png)

然后找到安装磁盘，并选择，然后下一步。

![](/data/attachment/album/202106/26/113528lrrtttgqvht6trqq.png)

然后进入安装过程，稍作等待 3-5 分钟。

![](/data/attachment/album/202106/26/113542m1s5uskyszk01oro.png)

安装完成后，进入准备桌面过程，是不是很熟悉？

![](/data/attachment/album/202106/26/113646dspum59pp9d2my54.png)

接着就到了“just a moment”界面了，马上就可以进入桌面了，是不是很激动了，哈哈哈哈。

![](/data/attachment/album/202106/26/113708tflk0ic9vfnnqjn6.png)

进入了桌面，此处其实是个动态的过程，因为截屏所以看不出效果。这个 Windows 界面重新设计过 UI了，个人觉得更好看了。

![](/data/attachment/album/202106/26/113732danmh09zns090hnd.png)

#### 3. 进入桌面前的准备

至此，Windows 11 安装即将完成，只差最后的初次设置步骤了。

首先是选择国家地区，此处也即默认即可，无需更改。

![](/data/attachment/album/202106/26/113750p28m4gi811zz8f1w.png)

然后是检查更新，此处根据网速快慢，等待的时间不定，需要耐心等待。

![](/data/attachment/album/202106/26/113801q5av5926y52k6zuu.png)

Windows 11 这里非要让用户填写 “Microsoft 账户”，无法跳过，很是郁闷，只能填写账户，然后下一步了。没有账户的可能得先申请一个微软账户了（估计正式版本会增加跳过选项吧）。

![](/data/attachment/album/202106/26/113838e0fmk52by0jo2f8j.png)

然后设置开机登录密码。

![](/data/attachment/album/202106/26/113858fz9d7dadqbma35f9.png)

最后，最后，最后，激动的时刻来了，进入桌面了。初次见面，什么感觉？

乍一看，怎么那么像 Mac 的风格和 UI 界面。

![](/data/attachment/album/202106/26/113929tvm4tmar5umumbkg.png)

为了显示更舒适一点，推荐设置以下屏幕分辨率（根据个人电脑屏幕大小自行设定）。这里我选择的是`1920*1080`。

![](/data/attachment/album/202106/26/113942p347u34t0w3eywcu.jpg)

### 三、体验 Windows 11 系统

根据微软官方的介绍，Windows 11 增加了很多新的功能。这里挑几个新功能体验一下。

#### 1、新的 UI 外观以及菜单

![](/data/attachment/album/202106/26/114021wbmeybmac2qnyeam.jpg)

确实，这个 UI 风格和 Windows 10 还是有较大区别的，和 Windows 7 相比，特别时尚了。我感觉这个 UI 风格是为了适配平板、Surface 等便携式设备而优化的。

#### 2、“Snap Layout” 布局功能

这个功能说实用也实用，说没啥用我觉得也没啥多大用（可能是我还没体会到多任务同时处理的便捷性吧）。Windows 旧版本中也有桌面并排处理等功能，但和这个布局功能比，还是逊色了点。

**在窗口的最大化按钮上，鼠标悬停，即可出现 “Snap Layout” 布局窗口**，然后可以选择一种布局，将该任务放置到某个位置中。这样做的目的是为了方便多任务同时处理。

如下图所示，选择了四个桌面的布局，将两个任务放在了上面两个布局框中。

![](/data/attachment/album/202106/26/114132eimpa44v58vu34u8.jpg)

#### 3、新的小工具窗口

这是由 Microsoft Edge 和 AI 提供的全新 Widgets功能，包含日历、天气、待办事项、照片等功能。

![](/data/attachment/album/202106/26/114350ynsdllykt31zle66.jpg)

#### 4、不同场景设置不同桌面

这个功能我觉得还蛮实用的，可以根据使用的场景不同，设置不同的桌面（甚至包含常用软件的设置）。比如设置“home”、 “game”、“work”三种不同的桌面环境，方便场景快速切换。

![](/data/attachment/album/202106/26/114429yiochm070fq7jvfh.png)

#### 5、全新的应用商店

这个应该是比较重大的新功能了。微软官方介绍，Windows 11 正式版可以安装安卓 APP，极大地方便了用户的使用。

微软商店界面：

![](/data/attachment/album/202106/26/114507scmm2c2aj5mnmmmy.jpg)

我们来安装个 tiktok 试试，看看效果如何。首先在商店中搜索“tiktok”。然后会发现，tiktok 有 PC 版、Moblie device 版本。

![](/data/attachment/album/202106/26/114558wlhcynr76yrnwkcw.png)

根据 tiktok 界面看，我觉得我这里安装的应该是 Mobile device 版本的 tiktok。这个界面是不是很类似手机和平板的 tiktok 界面风格呢？这应该是 Windows 11 的一个较为新颖的功能。

![](/data/attachment/album/202106/26/114647qjs68s1r886198uj.jpg)

### 总结

本文简略的在 QEMU 的帮助体验了 Windows 11 操作系统。由于是在虚拟机中体验的，并不能真实的体验到 Windows 11 的触摸便捷性、游戏画面优化、声音优化、以及其他的一些新功能特性。期待在将来能在真实设备上体验 Windows 11 操作系统。


硬核观察 #314 Windows 11 将提供 Windows Subsystem for Android

Summary: 更多：• 谷歌将推迟两年淘汰第三方 cookie • 世界上有一半的人拥有智能手机

![](/data/attachment/album/202106/26/134314gefz6nh6bmbb6w60.jpg)

### Windows 11 将提供 Windows Subsystem for Android

![](/data/attachment/album/202106/26/134332hirduzsaslp9zful.jpg)

微软在宣布 Windows 11 时透露它能[运行](https://www.zdnet.com/article/microsoft-here-comes-the-windows-subsystem-for-android/) Android 应用。微软公开了这一功能背后的技术细节：Windows Subsystem for Android。它的作用类似 Windows Subsystem for Linux（WSL），在 Android 应用模型和 Windows 应用模型之间提供一个代理原生应用，将有一个虚拟机提供对 AOSP 的兼容。亚马逊已经宣布将和微软合作将其应用商店带到 Windows 11 上。

>
> Windows 真是想把其它操作系统都纳入旗下啊。
>
>
>

### 谷歌将推迟两年淘汰第三方 cookie

![](/data/attachment/album/202106/26/134346pf6e3jd2zhrhl9lt.jpg)

第三方 cookie 用于帮助广告商提供个性化广告，苹果的 Safari 和 Mozilla 的 Firefox 已经默认屏蔽了第三方 cookie，而谷歌的Chrome 是目前市场份额最高的浏览器，而谷歌同时也是最大的网络广告商，它淘汰第三方 cookie 的计划以及替代 cookie 方案引发了它可能获得相对于竞争对手优势的担忧。谷歌[表示](https://blog.google/products/chrome/updated-timeline-privacy-sandbox-milestones/)将留出更多的时间与监管机构和数字广告行业相关企业进行讨论，避免危及现有的网络商业模式。

>
> 淘汰第三方 cookie 是对的，最大的网络广告商谷歌的问题是，用一个可能更坏的方案来替代一个糟糕的方案。
>
>
>

### 世界上有一半的人拥有智能手机

![](/data/attachment/album/202106/26/134358ry5vqs4vs52c2ccs.jpg)

据研究，到 2021 年 6 月，世界上[一半的人口](https://news.strategyanalytics.com/press-releases/press-release-details/2021/Strategy-Analytics-Half-the-World-Owns-a-Smartphone/default.aspx)都拥有智能手机。今天约有 40 亿人使用智能手机。达到这一历史性的里程碑用了 27 年时间。全球智能手机用户群已经从 1994 年的仅 3 万人急剧上升到 2012 年的10亿人，并在 2021 年 6 月达到今天创纪录的 39.5 亿。

>
> 智能手机真正构建了如今的互联网。
>
>
>


FCC 的频谱拍卖是对 5G 普及的长期助推

Summary: FCC 制定新政策是为了让更多的频谱能够被用于通信以此来创造新的服务。

FCC 制定新政策是为了让更多的频谱能够被用于通信以此来创造新的服务。

>
> FCC 制定新政策是为了让更多的频谱能够被用于通信以此来创造新的服务。
>
>
>

![FCC](/data/attachment/album/202106/27/103059gjees1zo1le6833e.jpg)

随着 5G 的发展，为了完全实现它的服务，显然需要更多的频谱来，FCC 显然对此当成重中之重。

FCC 近日完成了有关<ruby> 公民宽带无线电服务 <rt>  Citizen’s Broadband Radio Service </rt></ruby>（CBRS）的 5G 频谱的[拍卖](https://www.networkworld.com/article/3572564/cbrs-wireless-yields-45b-for-licenses-to-support-5g.html)，这些频谱是位于 3.5GHz 频段中的 70MHz 新带宽。它拍卖了 45.8 个亿，是近几年为无线传输释放更多频道的拍卖会之一。FCC 在 2011、2014 和 2015 年在中低频段（大致在 1.7GHz 至 2.2GHz）和 700MHz 上拍卖了 65MHz。

当前频谱可操作的范围是低于 6GHz 频段或是中频段的频谱，与 [CBRS](https://www.networkworld.com/article/3180615/faq-what-in-the-wireless-world-is-cbrs.html) 拍卖中出售的频谱处于同一区域。据专家称，即将举行的 C 频段拍卖将会是重要一环，将会有高达 280 MHz 频谱被拍卖。

IDC 的研究主管 Jasom leigh 说，“C 频段的拍卖将带来大笔资金。……美国的中频段频谱是稀缺的，这就是为什么你会看到这种巨大的紧迫性。”

虽然几大主要移动运营商仍有望抢到这次拍卖中的大部分可用的许可证，但频谱的一些最具创新性的用途将由企业实施，所以将会与运营商竞争一系列可用的频段。

[物联网](https://www.networkworld.com/article/3207535/what-is-iot-the-internet-of-things-explained.html)、资产追踪以及其他私人网络应用的专用网络早已可以通过私人 LTE 实现，但由于 5G 技术先进的频谱共享、低延迟和多连接的特性，它的成熟大大拓宽了它们的范围。广义上讲，能替代更多当前需要连线的应用，如工业自动化、设备管理等等。

### 重新分配频谱就意味着谈判

对于想要改变美国的频谱优先事项上的问题并不是小事，FCC 前主席 Tom Wheeler 对此绝对深有体会，过去 10 年里，美国政府一直在推动重新分配频段，而持有频段者的大多是政府机构或者是卫星网络运营商。

Wheeler 说，这些利益相关者必须被分配到不同频段，通常以纳税人出资补偿，而让各个相关方参与分享和进行分享经常是一个复杂的过程。

他指出，“FCC 现在面临的挑战之一是，频谱的分配是根据假定使用模拟信号做出的，而这些假定由于数字技术而被改写”。就像电视从模拟电视转变成数字电视。当模拟电视占用了 6MHz 频段，并需要两侧的保护带以避免干扰时，数字信号却能够在一个频段里容纳四到五个信号。

事实证明，这些假定是很难面对的。反对者公开反对 FCC 在中频段的动作，认为这样做没有足够的预防措施来避免对他们原有的设备和服务的干扰，而改变频率也意味着必须购买新的设备。

“我们和［美国国防部］还有卫星公司讨论过，事实上其中一个较大的原因是监管的挑战，没人想放弃现有体系下基于模拟信号假定下的安全地位。”Wheeler 说到，“我认为你也必须考虑周全，但我发现那些所谓宣声信号冲突的人，其实是将眼下当作避难所，根本没有竞争和威胁方面的意识。”

### 未来：更多的服务

Leigh 表示，无论开放频谱的确切方式如何，但广泛的观点认为将中频频段开放给运营商和企业，对美国商业会有潜在的优势。而当美国坚持以拍卖形式分配无线频谱时，其他国家，像德国，就已经专门预留了供企业使用的中频段频谱。

对于试图推出自己的私有 5G 网络的公司而言，可能会推高频谱拍卖价格。但是，只要最终有足够可用的频谱，就有服务足够可用，无论它们是内部提供的，还是由移动运营商或供应商销售的。

他说：“企业在 5G 方面做的事情，将推动真正的未来。”

---

via: <https://www.networkworld.com/article/3584072/fcc-auctions-should-be-a-long-term-boost-for-5g-availability.html>

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

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


如何维护关键的 Python 项目

Summary: 一窥开源 Python 项目保持平稳运行的社区幕后。

一窥开源 Python 项目保持平稳运行的社区幕后。

>
> 一窥开源 Python 项目保持平稳运行的社区幕后。
>
>
>

![](/data/attachment/album/202106/27/130401uu3l1nkq1padn1gn.jpg "and old computer and a new computer, representing migration to new software or hardware")

Jannis Leidel 是 [Jazzband](https://jazzband.co/) 社区的一部分。Jazzband 是一个协作社区，共同承担维护基于 [Python](https://opensource.com/resources/python) 的项目。

Jazzband 的诞生源于长期独自维护一个开源项目的压力。Jannis 是“roadie”，这意味着他负责管理任务并确保团队中的人可以在他们想要的时候参与。

Jazzband 并不是他的第一个开源志愿者工作——他是前 [Django](https://opensource.com/article/18/8/django-framework) 核心开发人员，[Django 软件基金会](https://www.djangoproject.com/foundation/) 董事会成员，编写了许多 Django 应用程序和 Python 项目，曾是 [pip](https://opensource.com/article/19/11/python-pip-cheat-sheet) 和 [virtualenv](https://virtualenv.pypa.io/en/latest/) 核心开发人员和发布经理，共同创立了 <ruby> <a href="https://www.pypa.io/en/latest/">  Python 打包机构 </a> <rt>  Python Packaging Authority </rt></ruby>，还担任过 [PyPI](https://pypi.org/) 管理员。在社区方面，他共同创立了德国 Django 协会，担任 [DjangoCon Europe](https://djangocon.eu/) 2010 联合主席，在多个会议上发言，并在去年担任了 [Python 软件基金会](https://www.python.org/psf/) 董事和联席主席。

### Moshe Zadka: 你是如何开始编程的？

Jannis Leidel：我开始接触编程是在高中的常规德国计算机科学课程中，在那里我涉猎了 Turbo Pascal 和 Prolog。我很快就进入了 Web 开发的世界，并使用 PHP3、[Perl5](http://opensource.com/article/18/1/why-i-love-perl-5) 和 [MySQL](https://opensource.com/life/16/10/all-things-open-interview-dave-stokes) 编写了一些小型网站。后来在大学里，我在从事媒体艺术项目时再次学习了编程，发现 [Ruby](http://opensource.com/business/16/4/save-development-time-and-effort-ruby)、Perl 和 Python 特别有用。我最终坚持使用 Python，因为它的多功能性和易用性。从那时起，我很高兴能够在我的职业生涯中使用 Python 和开放 Web 技术（HTML/JS/CSS）。

### Zadka: 你是如何开始接触开源的？

Leidel：作为大学艺术项目的一部分，我需要一种与各种 Web 服务对话并与一些电子设备交互的方法，但发现我之前的 PHP 技能无法胜任这项任务。因此，我参加了有关使用 Python 编程的课程，相比库，我对学习更多有关框架如何工作更感兴趣，因为它们进一步体现了我想了解的最佳实践。特别是，新生的 Django Web 框架对我很有吸引力，因为它倾向于一种务实的方法，并为如何开发 Web 应用程序提供了大量指导。 2007 年，我作为学生参与了 Google Summer of Code for Django，后来为 Django 及其可重用组件生态系统做出了更多贡献，不久我也成为了 Django 核心开发人员。在完成学位期间，我能够利用这些技能成为一名自由职业者，并花时间在 Django 社区的许多不同部分工作。在那时，横向移动到更广泛的 Python 社区不过是很自然的。

### Zadka: 你的日常工作是什么？

Leidel：我是 Mozilla 的一名软件工程师，致力于为 Firefox 数据管道开发数据工具。实际上，这意味着我在更广泛的 Firefox 工程团队中工作，从事各种内部和面向公众的基于 Web 的项目，这些项目帮助 Mozilla 员工和社区成员理解 Firefox Web 浏览器发送的遥测数据。我目前的部分重点是维护我们的数据分析和可视化平台，该平台基于开源项目 [Redash](https://redash.io/)，并对其做出贡献。我参与的其他项目是我们的下一代遥测系统 [Glean](https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/start/report-gecko-telemetry-in-glean.html) 和一个允许你在浏览器（包括 Scientific Python 堆栈）中进行数据科学的工具 [Iodide](https://alpha.iodide.io/)。

### Zadka: 你是如何参与 Jazzband 的？

Leidel：早在 2015 年，我就对单独维护很多人所依赖的项目感到沮丧，并看到我的许多社区同行都在为类似的问题苦苦挣扎。我不知道有什么好方法可以让社区中更多的人对长期维护感兴趣。在某些情况下，我觉得新的“社会编码”范式的社会性的不足，而且常常是孤立的，有时甚至对新老贡献者来说都是创伤。我相信在我们的社区中，我现在觉得无法容忍的不平等现象在当时更加猖獗，这使得为贡献者提供一个安全的环境变得困难——我们现在知道这对于稳定的项目维护至关重要。我想知道我们是否缺少一种更具协作性和包容性的软件开发方法。

Jazzband 项目的启动是为了降低进入维护的门槛，并简化其中一些较无聊的方面（例如，围绕 [CI](https://opensource.com/article/19/12/cicd-resources) 的最佳实践）。

### Zadka: 你最喜欢 Jazzband 的哪一点？

Leidel：我最喜欢 Jazzband 的一点是，我们确保了许多人所依赖的许多项目的维护，同时还确保任何经验水平的新贡献者都可以加入。

### Zadka: Jazzband 的“roadie”的工作是什么？

Leidel：“roadie”是指处理 Jazzband 幕后所有事务的人。这意味着，例如，处理新项目的进入、维护 Jazzband 网站以处理用户管理和项目发布、充当安全或行为准则事件的第一响应者等等。“roadie”这个词是从音乐和演出行业借来的，指的是支持人员，他们负责在巡回演出中几乎所有需要做的事情，除了实际的艺术表演。在 Jazzband，他们的存在是为了确保成员可以在项目中工作。这也意味着，在有意义的情况下，某些任务是部分或完全自动化的，并且最佳实践被应用于大多数 Jazzband 项目，如打包设置、文档托管或持续集成。

### Zadka: 作为 Jazzband 的“roadie”，你工作中最具挑战性的方面是什么？

Leidel：目前，我作为“roadie”的工作中最具挑战性的方面是实施社区成员提出的 Jazzband 改进，而不影响他们所依赖的工作流程。换句话说，Jazzband 越大，在概念级别上扩展项目变得越困难。具有讽刺意味的是，我是目前唯一的“roadie”，独自处理一些任务，而 Jazzband 却试图阻止其项目发生这种情况。这是 Jazzband 未来的一大担忧。

### Zadka: 对于有兴趣想知道能否加入 Jazzband 的人，你有什么想说的？

Leidel：如果你有兴趣加入一群相信协作工作比单独工作更好的人，或者如果你一直在为自己的维护负担而苦苦挣扎，并且不知道如何继续，请考虑加入 Jazzband。它简化了新贡献者的进入流程，提供了一个争议解决框架，并自动发布到 [PyPI](https://opensource.com/downloads/7-essential-pypi-libraries)。有许多最佳实践可以很好地降低项目无人维护的风险。

### Zadka: 你还有什么想告诉我们的读者的吗？

Leidel：我鼓励每个从事开源项目的人都考虑屏幕另一边的人。要有同理心，记住你自己的经历可能不是你同龄人的经历。要明白你是全球多元化社区的成员，这要求我们始终尊重我们之间的差异。

---

via: <https://opensource.com/article/20/2/python-maintained>

作者：[Moshe Zadka](https://opensource.com/users/moshez) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

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


13 个 Linux 5.13 中最值得关注的变化

Summary: Linux 5.13 很快就会发布，而且会有很多新功能。

不用注册就可评论，良心网站啊

Linux 5.13 很快就会发布，而且会有很多新功能。

![](/data/attachment/album/202106/27/160435jcvev1pjiokkkv9z.jpg)

如果一切顺利的话，周日 Linus Torvalds 将会发布 Linux 5.13 稳定版，而不是发布 5.13-rc8 测试版并把最终版本再推后一个版本。不管是哪种情况，Linux 5.13 很快就会发布，而且会有很多新功能。

在合并窗口结束后，我们照例发布了 Linux 5.13 的功能概述。但是，对于那些不记得在 4 月底到 5 月初的合并窗口期间所有这些变化的人来说，这里回顾了这个下一个内核版本中最突出的变化：

* [对苹果 M1 SoC 和 2020 硬件平台的初步支持](https://www.phoronix.com/scan.php?page=news_item&px=Apple-M1-ARM-SoCs-In-Linux-5.13)，尽管这种支持仍然是早期的，对苹果 M1 GPU 等还没有主线支持。
* 经过多年的开发，[Landlock Linux](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Landlock-Lands) 安全模块已经合并入主线，支持无特权的应用程序沙箱。
* [对 Alder Lake S 图形的初步支持](https://www.phoronix.com/scan.php?page=news_item&px=Intel-Alder-Lake-S-DRM-Next)，以及许多使其进入 Linux 5.13 的 Alder Lake 启用代码，如对 Perf 和其他领域。
* [AMDGPU FreeSync HDMI 支持](https://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-Linux-5.13-Aldebaran)现在进入了主线，允许在 HDMI（v2.1 之前）连接上实现 FreeSync，而不仅仅是通过 DisplayPort。
* 对 [Aldebaran](https://www.phoronix.com/scan.php?page=search&q=Aldebaran) 作为下一代 AMD CDNA 加速器的初步支持。
* [一个新的英特尔冷却驱动](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Intel-Cooling-Driver)，允许在比系统默认温度更低的阈值下对 CPU 进行降频。
* [一个通用的 USB 显示驱动](https://www.phoronix.com/scan.php?page=news_item&px=Generic-USB-Display-GUD-5.13)，用于将树莓派 Zero 变成一个基于 USB 的显示适配器。
* [对 IO\_uring 的更多性能增强](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-More-IO_uring)，它在整个开源生态系统中不断得到采用。
* 支持 [Realtek RTL8156 和 RTL8153D 网络适配器](https://www.phoronix.com/scan.php?page=news_item&px=Realtek-RTL8153-RTL8156-Linux)。同时在音频方面也有一些[新的 Realtek 硬件支持](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Sound)。
* 亚马逊的 [Luna 游戏控制器现在由 XPad 驱动支持](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Amazon-Game-Control)。
* 对[较新的微软 Surface 笔记本电脑的触摸板和键盘支持](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Surface-HID)，以前需要使用树外的内核代码。
* 对主线内核的 [Clang 控制流完整性支持](https://www.phoronix.com/scan.php?page=news_item&px=Clang-CFI-Linux-5.13)（CFI），可以增强安全性而仅有少量运行时开销。
* 作为另一项内核安全改进，将每个[系统调用的内核堆栈偏移量随机化](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Rand-Offset-Sys-Call)。

---

via: <https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Features>

作者：[Michael Larabel](https://www.phoronix.com/scan.php?page=michaellarabel) 选题：[wxy](https://github.com/wxy) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-13526-1.html) 荣誉推出


硬核观察 #315 华为工程师向 Linux 内核提出一项“华为摘要列表”功能建议

Summary: 更多：• Rocky Linux 8.4 正式发布 • Fedora 35 将自动启用最佳加密扇区大小

记得当年三星一个季度宣传费就上百亿美金，某位得上千万吧

来自广东深圳的 Chrome Mobile iOS 87.0|iOS 14.6 用户

象你这样无处不在的打手某国一个季度恐怕要支出上千亿吧！

华为是你爹吗？

又开始了又开始了<br />
还是同一个人

华为C了你妈？

![](/data/attachment/album/202106/27/170440ii7b0f10551fsace.jpg)

### 华为工程师向 Linux 内核提出一项“华为摘要列表”功能建议

![](/data/attachment/album/202106/27/170450ucwqckhq9lyy0039.jpg)

该[功能](https://lore.kernel.org/lkml/20210625165614.2284243-1-roberto.sassu@huawei.com/)作为核内数据库来存储文件和元数据摘要。预期用于完整性测量（IMA）和通过 SecurityFS 将数据库暴露给用户空间。其数据可能包括 RPM 头文件和 Debian 存储库元数据信息。华为将其设计为核内数据库以便其驻留在内核内存中，不容易受到用户空间的攻击。目前该功能已经在 openEuler Linux 发行版中使用。当前的实现只有不到四千行的代码。

>
> 不管该功能是否能被内核接纳，但这种上游优先的做法是值得赞赏的。
>
>
>

### Rocky Linux 8.4 正式发布

![](/data/attachment/album/202106/27/170506wowqio8r8kr8pr53.jpg)

Rocky 企业软件基金会宣布了 [Rocky Linux 8.4](https://rockylinux.org/download/) 的第一个通用版本。很多大公司都依赖于 CentOS，这包括迪斯尼、GoDaddy、Rackspace、丰田和 Verizon 等，据说他们对 RedHat 结束 CentOS Linux 的决定不满意。事实证明，Rocky Linux 很受欢迎。除了迅速为该项目建立起数百名贡献者的大军外，Rocky Linux 8.4 在发布后的半天内被下载了至少 1 万次，这还不算镜像下载量，可能至少是这个数字的 3-4 倍。Rocky Linux 项目的创始人[表示](https://www.zdnet.com/article/centos-replacement-rocky-linux-8-4-arrives-and-proves-instantly-popular/)，“Rocky Linux 可能很快就会成为企业和云计算中使用最多的 Linux 操作系统！”

>
> 一个纯正的 CentOS 替代品接过了 CentOS Linux 退出后留下的市场，不知道这是不是红帽所希望的呢？
>
>
>

### Fedora 35 将自动启用最佳加密扇区大小

![](/data/attachment/album/202106/27/170530h1v51lq388jzjuj1.jpg)

在今年秋天发布的 Fedora 35 中，对于那些采用 LUKS/dm-crypt 加密并使用基于 4K 扇区大小的存储的用户来说可以带来更好的性能。目前，当在磁盘上安装 Fedora Linux 并使用 LUKS 加密时，无论基础磁盘的物理扇区大小如何，都会使用 512 字节的扇区大小。但现在最新的 cryptsetup 版本提供了一个选项，能够自动确定最佳扇区大小，Fedora 35 正计划[跟随启用](https://fedoraproject.org/wiki/Changes/LUKSEncryptionSectorSize)这个选项。

>
> Fedora 在实验新特性方面总是比较及时，所以我不明白的是，为什么还要有 CentOS Stream。
>
>
>


七个改变我生活的 Git 小技巧

Summary: 这些有用的小技巧将改变你在当前最流行的版本控制系统下的工作方式。

这些有用的小技巧将改变你在当前最流行的版本控制系统下的工作方式。

>
> 这些有用的小技巧将改变你在当前最流行的版本控制系统下的工作方式。
>
>
>

![](/data/attachment/album/202106/28/110029d64pblurlh5a4a50.jpg "Computer screen with files or windows open")

Git 是当前最流行最普遍的版本控制系统之一，它被应用于私有系统和公开网站上各种各样的开发工作。不论我变得对 Git 有多熟悉，似乎总有些功能等待着被发掘。下面分享下和 Git 相关的改变我工作方式的一些小技巧。

### 1、Git 中的自动纠错

我们每个人都不时在输入时犯拼写错误，但是如果你使能了 Git 的自动纠错功能，你就能让 Git 自动纠正一些输入错误的子命令。

假如你想用命令 `git status` 来检查状态，但是你恰巧错误地输入了 `git stats`。通常情况下，Git 会告诉你 ‘stats’ 不是个有效的命令：

```
$ git stats
git: ‘stats’ is not a git command. See ‘git --help’.

The most similar command is
status

```

为了避免类似情形，只需要在你的 Git 配置中使能自动纠错功能。

```
$ git config --global help.autocorrect 1

```

如果你只想对当前的仓库生效，就省略掉选项 `--global`。

这个命令会使能自动纠错功能。在相应的 [Git 官方文档](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration#_code_help_autocorrect_code) 中可以看到这个命令的详细说明，但是试着敲一下上面的错误命令会使你对这个设置干了什么有个直观的了解：

```
$ git stats
git: ‘stats’ is not a git command. See ‘git --help’.
On branch master
Your branch is up to date with ‘origin/master’.

nothing to commit, working tree clean

```

在上面的例子中，Git 直接运行了它建议命令的第一个，也就是 `git status`，而不是给你展示它所建议的子命令。

### 2、对提交进行计数

需要对提交进行计数的原因有很多。例如，一些开发人员利用提交计数来判断什么时候递增工程构建序号，也有一些开发人员用提交计数来对项目进展取得一个整体上的感观。

对提交进行计数相当简单而且直接，下面就是相应的 Git 命令：

```
$ git rev-list --count branch-name

```

在上述命令中，参数 `branch-name` 必须是一个你当前仓库里的有效分支名。

```
$ git rev-list –count master
32
$ git rev-list –count dev
34

```

### 3、仓库优化

你的代码仓库不仅对你来说很宝贵，对你所在的组织也一样。通过少数几个惯例你就能使自己的仓库整洁并且保持最新。[使用 .gitignore 文件](https://opensource.com/article/20/8/dont-ignore-gitignore) 就是这些最好的惯例之一。通过使用这个文件你可以告诉 Git 不要保存一些不需要记录的文件，如二进制文件、临时文件等等。

当然，你还可以使用 Git 的垃圾回收来进一步优化你的仓库。

```
$ git gc --prune=now --aggressive

```

这个命令在你和你的团队经常使用 `pull` 或者 `push` 操作的时候很有帮助。

它是一个内部工具，能清理掉你的仓库里没法访问或者说“空悬”的 Git 对象。

### 4、给未追踪的文件来个备份

大多数时候，删除所有未追踪的文件是安全的。但很多时候也有这么一种场景，你想删掉这些未追踪的文件同时也想做个备份防止以后需要用到。

Git 组合一些 Bash 命令和管道操作，可以让你可以很容易地给那些未追踪的文件创建 zip 压缩包。

```
$ git ls-files --others --exclude-standard -z |\
  xargs -0 tar rvf ~/backup-untracked.zip

```

上面的命令就生成了一个名字为 `backup-untracked.zip` 的压缩包文件（当然，在 `.gitignore` 里面忽略了的文件不会包含在内）。

### 5、了解你的 .git 文件夹

每个仓库都有一个 `.git` 文件夹，它是一个特殊的隐藏文件夹。

```
$ ls -a
. … .git

```

Git 主要通过两个东西来工作：

1. 当前工作树（你当前检出的文件状态）
2. 你的 Git 仓库的文件夹（准确地说，包含版本信息的 `.git` 文件夹的位置）

这个文件夹存储了所有参考信息和一些其他的如配置、仓库数据、HEAD 状态、日志等更多诸如此类的重要细节。

一旦你删除了这个文件夹，尽管你的源码没被删，但是类似你的工程历史记录等远程信息就没有了。删除这个文件夹意味着你的工程（至少本地的复制）不再在版本控制的范畴之内了。这也就意味着你没法追踪你的修改；你没法从远程仓拉取或推送到远程仓了。

通常而言，你需要或者应当对你的 `.git` 文件夹的操作并不多。它是被 Git 管理的，而且大多数时候是一个禁区。然而，在这个文件夹内还是有一些有趣的工件，比如说当前的 HEAD 状态在内的就在其中。

```
$ cat .git/HEAD
ref: refs/heads/master

```

它也隐含着对你仓库地描述：

```
$ cat .git/description

```

这是一个未命名的仓库；通过编辑文件 ‘description’ 可以给这个仓库命名。

Git 钩子文件夹连同一些钩子文件例子也在这里。参考这些例子你就能知道 Git 钩子能干什么了。当然，你也可以 [参考这个 Seth Kenlon 写的 Git 钩子介绍](https://opensource.com/life/16/8/how-construct-your-own-git-server-part-6)。

### 6、浏览另一个分支的文件

有时，你会想要浏览另一个分支下某个文件的内容。这其实用一个简单的 Git 命令就可以实现，甚至都不用切换分支。

设想你有一个命名为 [README.md](http://README.md) 的文件，并且它在 `main` 分支上。当前你正工作在一个名为 `dev` 的分支。

用下面的 Git 命令，在终端上就行。

```
$ git show main:README.md

```

一旦你执行这个命令，你就能在你的终端上看到 `main` 分支上该文件的内容。

### 7、Git 中的搜索

用一个简单的命令你就能在 Git 中像专业人士一样搜索了。更有甚者，尽管你不确定你的修改在哪次提交或者哪个分支上，你依然能搜索。

```
$ git rev-list --all | xargs git grep -F ''

```

例如，假设你想在你的仓库中搜索字符串 `“font-size: 52 px;"` ：

```
$ git rev-list –all | xargs git grep -F ‘font-size: 52 px;’
F3022…9e12:HtmlTemplate/style.css: font-size: 52 px;
E9211…8244:RR.Web/Content/style/style.css: font-size: 52 px;

```

### 试试这些小技巧

我希望这些小技巧对你是有用的，或者增加你的生产力或者节省你的大量时间。

你也有一些喜欢的 [Git 技巧](https://acompiler.com/git-tips/) 吗？在评论区分享吧。

---

via: <https://opensource.com/article/20/10/advanced-git-tips>

作者：[Rajeev Bera](https://opensource.com/users/acompiler) 选题：[lujun9972](https://github.com/lujun9972) 译者：[BoosterY](https://github.com/BoosterY) 校对：[wxy](https://github.com/wxy)

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


KTorrent：KDE 上的一个非常有用的 BitTorrent 应用

现在好像很少用到这些下载工具了

兄弟老了，哈哈

老了。。。。。

国内用ktorrent就算了，bt资源大部分被XL垄断。

唉～

![](/data/attachment/album/202106/28/120031cml79jimcs99ybpy.jpg)

Linux 中有各种各样的 BitTorrent 应用。但是，找到一个好的、提供许多功能的应用将可以为你节省一些时间。

KDE 的 KTorrent 就是这样一个为 Linux 打造的 BitTorrent 应用。

虽然 [Linux 有好几个 torrent 客户端](https://itsfoss.com/best-torrent-ubuntu/)，但我最近发现 KTorrent 对我而言很合适。

### KTorrent: 适用于 Linux 的开源 BitTorrent 客户端

![](/data/attachment/album/202106/28/120036y6xppw2f8dwaaxmb.png)

KTorrent 是一个成熟的 torrent 客户端，主要为 KDE 桌面定制。无论你使用什么桌面环境，它都能很好地工作。

当然，使用 KDE 桌面，你可以得到一个无缝的用户体验。

让我们来看看它的所有功能。

### KTorrent 的功能

![](/data/attachment/album/202106/28/120036zlbbmwtc95icbbc0.png)

对于普通的 torrent 用户来说，拥有一套全面的功能使事情变得简单。而 KTorrent 也不例外。在这里，我将列出 KTorrent 的主要亮点：

* 在一个队列中添加 torrent 下载
* 能够控制每次下载（或整体）的速度限制
* 视频和音频文件预览选项
* 支持导入下载的文件（部分/全部）
* 在下载多个文件时，能够对 torrent 下载进行优先排序
* 为多文件 torrent 选择要下载的特定文件
* IP 过滤器，可选择踢走/禁止对端。
* 支持 UDP 跟踪器
* 支持 µTorrent 对端
* 支持协议加密
* 能够创建无跟踪器的 torrent
* 脚本支持
* 系统托盘集成
* 通过代理连接
* 增加了插件支持
* 支持 IPv6

KTorrent 看起来可以作为一个日常使用的 torrent 客户端，在一个地方管理所有的 torrent 下载。

![](/data/attachment/album/202106/28/120036aoqc5yiznvjo99yj.png)

除了上面提到的功能外，它还对客户端的行为提供了很大的控制。例如，调整下载/暂停/跟踪器的指示颜色。

如果你想禁用完成 torrent 下载时的声音或得到活动通知，你还可以设置通知。

![](/data/attachment/album/202106/28/120037c0baz03bt4tpk0b0.png)

虽然像协议加密支持这样的功能可能无法取代一些 [最好的私有专用网络](https://itsfoss.com/best-vpn-linux/) 服务，但它对桌面客户端来说是一个重要的补充。

### 在 Linux 中安装 KTorrent

KTorrent 应该可以通过包管理器（如 [Synaptic](https://itsfoss.com/synaptic-package-manager/)）或默认的仓库获得。你也可以在你的软件中心找到它并轻松安装。

除此之外，它还在 [Flathub](https://flathub.org/apps/details/org.kde.ktorrent) 上提供了一个适用于任何 Linux 发行版的 [Flatpak](https://itsfoss.com/what-is-flatpak/) 官方包。如果你需要帮助，我们有一个 [Flatpak 指南](https://itsfoss.com/flatpak-guide/) 供参考。

如果你喜欢的话，你也可以尝试可用的 [snap包](https://snapcraft.io/ktorrent)。

要探索更多关于它和源码的信息，请前往它的 [官方 KDE 应用页面](https://apps.kde.org/ktorrent/)。

* [KTorrent](https://apps.kde.org/ktorrent/)

### 结束语

KTorrent 是 Linux 中一个出色的 torrent 客户端。我在我的 Linux Mint 系统的 Cinnamon 桌面上试用了它，它运行得很好。

我喜欢它的简单和可配置性。尽管我不是每天都在使用 torrent 客户端，但在我短暂的测试中，我没有发现 KTorrent 有什么奇怪的地方。

你认为 KTorrent 作为 Linux 的 torrent 客户端怎么样？你喜欢用什么呢？

---

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

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

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


硬核观察 #316 使用 AI 给游戏配音，引来配音演员强烈不满

Summary: 更多：• 微软承认曾向包含恶意驱动程序提供签名 • Linux Kernel 5.13 发布

![](/data/attachment/album/202106/28/141005amii393g2b9bmznr.jpg)

### 使用 AI 给游戏配音，引来配音演员强烈不满

![](/data/attachment/album/202106/28/140701t4aukm4rlufkkrbt.jpg)

《巫师 3：狂猎》MOD 的开发者用 CyberVoice 软件对《巫师 3》主角的配音演员的声音进行训练，然后生成了几乎以假乱真的新台词语音。部分配音演员对这一结果表达了[强烈不满](https://www.inputmag.com/gaming/video-game-voice-ai-human-actors-witcher-3-mod-controversy)。

>
> AI 终究会取代大部分工作，即便是一些需要专业技能的工作。
>
>
>

### 微软承认曾向包含恶意驱动程序提供签名

![](/data/attachment/album/202106/28/140718fepzfhzbooizm7ow.jpg)

自 Windows Vista 以来，任何在内核模式下运行的代码都需要在公开发布前进行测试和签名，没有微软证书的驱动程序默认不能安装。这个名为“Netfilter”的驱动程序实际上是一个 rootkit，它被观察到与一个位于中国的命令与控制 IP 进行通信，该威胁行为者主要针对中国的游戏行业。

这家开发包含恶意行为的软件公司像任何正常公司一样，仅仅通过遵循正常程序提交了驱动程序进行认证，就[击穿](https://www.bleepingcomputer.com/news/security/microsoft-admits-to-signing-rootkit-malware-in-supply-chain-fiasco/)了微软的安全防线。到目前为止，还没有证据表明使用了被盗的代码签名证书。

>
> 这一特殊事件暴露了合法代码签名过程中的弱点，威胁者利用这些弱点获得了微软的签名代码，而没有破坏任何证书。
>
>
>

### Linux Kernel 5.13 发布

![](/data/attachment/album/202106/28/140734kzr044czy8rc8hai.jpg)

Linus Torvalds 今天发布了 Linux Kernel 5.13。新版内核添加了对 M1 芯片的初步支持，不过目前还没有加速图形支持。其主要变化可以参见我们昨天的[介绍](/article-13527-1.html)。Torvalds 说，“5.13 的总体规模实际上是相当大的。事实上，它是较大的 5.x 版本之一，有来自 2000 多名开发者的超过 16000 个提交（如果算上合并，则超过 17000个）。”

>
> 我更期待的是下一个版本，慢慢已经习惯了 Linux 内核不断的滚动新版本。
>
>
>


在 Linux 上用 dust 代替 du

Summary: dust 命令是用 Rust 编写的对 du 命令的一个更直观实现。

dust=du+tree???

来自湖北武汉武汉大学测绘学院的 Chrome 91.0|Windows 10 用户

dust 命令是用 Rust 编写的对 du 命令的一个更直观实现。

>
> dust 命令是用 Rust 编写的对 du 命令的一个更直观实现。
>
>
>

![](/data/attachment/album/202106/29/033403l8x83x7a4tt4fq84.jpg)

如果你在 Linux 命令行上工作，你会熟悉 `du` 命令。了解像 `du` 这样的命令，可以快速返回磁盘使用情况，是命令行使程序员更有效率的方法之一。然而，如果你正在寻找一种方法来节省更多的时间，使你的生活更加容易，看看 [dust](https://github.com/bootandy/dust)，它是用 Rust 重写的 `du`，具有更多的直观性。

简而言之，`dust` 是一个提供文件类型和元数据的工具。如果你在一个目录中运行了 `dust`，它将以几种方式报告该目录的磁盘利用率。它提供了一个信息量很大的图表，告诉你哪个文件夹使用的磁盘空间最大。如果有嵌套的文件夹，你可以看到每个文件夹使用的空间百分比。

### 安装 dust

你可以使用 Rust 的 Cargo 包管理器安装 `dust`：

```
$ cargo install du-dust

```

另外，你可以在 Linux 上的软件库中找到它，在 macOS 上，可以使用 [MacPorts](https://opensource.com/article/20/11/macports) 或 [Homebrew](https://opensource.com/article/20/6/homebrew-mac)。

### 探索 dust

在一个目录中执行 `dust` 命令，会返回一个图表，以树状格式显示其内容和每个项目所占的百分比。

```
$ dust
 5.7M   ┌── exa                                                           │                                                ██ │   2%
 5.9M   ├── tokei                                                         │                                                ██ │   2%
 6.1M   ├── dust                                                          │                                                ██ │   2%
 6.2M   ├── tldr                                                          │                                                ██ │   2%
 9.4M   ├── fd                                                            │                                                ██ │   4%
 2.9M   │ ┌── exa                                                         │                                              ░░░█ │   1%
  15M   │ ├── rustdoc                                                     │                                              ░███ │   6%
  18M   ├─┴ bin                                                           │                                              ████ │   7%
  27M   ├── rg                                                            │                                            ██████ │  11%
 1.3M   │     ┌── libz-sys-1.1.3.crate                                    │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │   0%
 1.4M   │     ├── libgit2-sys-0.12.19+1.1.0.crate                         │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │   1%
 4.5M   │   ┌─┴ github.com-1ecc6299db9ec823                               │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │   2%
 4.5M   │ ┌─┴ cache                                                       │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█ │   2%
 1.0M   │ │   ┌── git2-0.13.18                                            │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   0%
 1.4M   │ │   ├── exa-0.10.1                                              │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 1.5M   │ │   │ ┌── src                                                   │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 2.2M   │ │   ├─┴ idna-0.2.3                                              │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 1.2M   │ │   │       ┌── linux                                           │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   0%
 1.6M   │ │   │     ┌─┴ linux_like                                        │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 2.6M   │ │   │   ┌─┴ unix                                                │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 3.1M   │ │   │ ┌─┴ src                                                   │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 3.1M   │ │   ├─┴ libc-0.2.94                                             │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 1.2M   │ │   │     ┌── test                                              │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   0%
 2.6M   │ │   │   ┌─┴ zlib-ng                                             │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 904K   │ │   │   │   ┌── vstudio                                         │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   0%
 2.0M   │ │   │   │ ┌─┴ contrib                                           │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 3.4M   │ │   │   ├─┴ zlib                                                │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 6.1M   │ │   │ ┌─┴ src                                                   │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓██ │   2%
 6.1M   │ │   ├─┴ libz-sys-1.1.3                                          │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓██ │   2%
 1.6M   │ │   │     ┌── pcre                                              │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 2.5M   │ │   │   ┌─┴ deps                                                │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 3.8M   │ │   │   ├── src                                                 │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓▓█ │   1%
 7.4M   │ │   │ ┌─┴ libgit2                                               │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓██ │   3%
 7.6M   │ │   ├─┴ libgit2-sys-0.12.19+1.1.0                               │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓▓▓██ │   3%
  26M   │ │ ┌─┴ github.com-1ecc6299db9ec823                               │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████ │  10%
  26M   │ ├─┴ src                                                         │               ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████ │  10%
 932K   │ │   ┌── .cache                                                  │               ░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓█ │   0%
  11M   │ │   │     ┌── pack-c3e3a51a17096a3078196f3f014e02e5da6285aa.idx │               ░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓███ │   4%
 135M   │ │   │     ├── pack-c3e3a51a17096a3078196f3f014e02e5da6285aa.pack│               ░░░░░░▓▓███████████████████████████ │  53%
 147M   │ │   │   ┌─┴ pack                                                │               ░░░░░░█████████████████████████████ │  57%
 147M   │ │   │ ┌─┴ objects                                               │               ░░░░░░█████████████████████████████ │  57%
 147M   │ │   ├─┴ .git                                                    │               ░░░░░░█████████████████████████████ │  57%
 147M   │ │ ┌─┴ github.com-1ecc6299db9ec823                               │               ░░░░░░█████████████████████████████ │  57%
 147M   │ ├─┴ index                                                       │               ░░░░░░█████████████████████████████ │  57%
 178M   ├─┴ registry                                                      │               ███████████████████████████████████ │  69%
 257M ┌─┴ .                                                               │██████████████████████████████████████████████████ │ 100%
$

```

将 `dust` 应用于一个特定的目录：

```
$ dust ~/Work/

```

![Dust output from a specific directory](/data/attachment/album/202106/29/033426cqplpkxjjkqq3dzy.png "Dust output from a specific directory")

`-r` 选项以相反的顺序显示输出，“根”在底部：

```
$ dust -r ~/Work/

```

使用 `dust -d 3` 会返回三层的子目录和它们的磁盘利用率：

```
$ dust -d 3 ~/Work/wildfly/jaxrs/target/classes
 4.0K     ┌── jaxrs.xml                                                           │                                         █ │   1%
 4.0K   ┌─┴ subsystem-templates                                                   │                                         █ │   1%
 4.0K   │   ┌── org.jboss.as.controller.transform.ExtensionTransformerRegistration│                                         █ │   1%
 4.0K   │   ├── org.jboss.as.controller.Extension                                 │                                         █ │   1%
 8.0K   │ ┌─┴ services                                                            │                                         █ │   2%
 8.0K   ├─┴ META-INF                                                              │                                         █ │   2%
 4.0K   │ ┌── jboss-as-jaxrs_1_0.xsd                                              │                                        ░█ │   1%
 8.0K   │ ├── jboss-as-jaxrs_2_0.xsd                                              │                                        ░█ │   2%
  12K   ├─┴ schema                                                                │                                        ██ │   3%
 408K   │   ┌── as                                                                │  ████████████████████████████████████████ │  94%
 408K   │ ┌─┴ jboss                                                               │  ████████████████████████████████████████ │  94%
 408K   ├─┴ org                                                                   │  ████████████████████████████████████████ │  94%
 432K ┌─┴ classes                                                                 │██████████████████████████████████████████ │ 100%
$

```

### 总结

`dust` 的魅力在于它是一个小而简单的、易于理解的命令。它使用颜色方案来表示最大的子目录，使你的目录易于可视化。这是一个受欢迎的项目，欢迎大家来贡献。

你是否使用或考虑使用 `dust`？如果是，请在下面的评论中告诉我们你的想法。

---

via: <https://opensource.com/article/21/6/dust-linux>

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

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


为什么我们要开源我们的 Python 平台

Summary: 开源开发的理念使得 Anvil 的整个解决方案更加有用且值得信赖。

开源开发的理念使得 Anvil 的整个解决方案更加有用且值得信赖。

>
> 开源开发的理念使得 Anvil 的整个解决方案更加有用且值得信赖。
>
>
>

![](/data/attachment/album/202106/29/041151fpvlz4a75ihlr0lv.jpg "neon sign with head outline and open source why spelled out")

Anvil 团队最近开源了 [Anvil App Server](https://anvil.works/blog/open-source)， 一个用于托管完全用 Python 构建的 Web 程序的运行时引擎。

社区的反应十分积极，我们 Anvil 团队已经将许多反馈纳入了我们的 [下一个版本](https://github.com/anvil-works/anvil-runtime)。但是我们不断被问到的问题是，“为什么你们选择开源这个产品的核心呢？”

### 我们为何创造 Anvil

[Anvil](https://anvil.works/) 是一个可以使得构建 Web 应用更加简单的工具。我们让你们有能力仅使用一种语言—— Python —— 就可以来构建你的整个应用。

在 Anvil 之前，如果你想要构建一个 Web app，你需要写很多代码，用很多的技术，比如 HTML、Javascript、CSS、Python、SQL、React、Redux、Bootstrap、Sass、Webpack 等。这需要花费很长时间来学习。对于一个简单的应用便是这样子；相信我，一般的应用其实 [更加复杂](https://github.com/kamranahmedse/developer-roadmap#introduction)。

![A complex framework of development tools needed for a simple web app](/data/attachment/album/202106/29/041259blruibu8cmmm6emf.png "A complex framework of development tools needed for a simple web app")

*是的。对于一个简单的 web 应用便是需要如此多的技术。*

但即使如此，你还没有完成！你需要了解有关 Git 和云托管提供商的所有信息、如何保护（很有可能是）Linux 操作系统、如何调整数据库，然后随时待命以保持其运行。一直如此。

因此，我们开发出了 Anvil，这是一个在线 IDE，你可以在用 [拖放编辑器](https://anvil.works/docs/client/ui) 来设计你的 UI 界面，用 Python 编写你的 [逻辑](https://anvil.works/docs/client/python)，然后 Anvil 会负责其余的工作。我们将所有的繁杂的技术栈进行了替换，只用 Python 就行啦！

### 简单的 Web 托管很重要，但还不够

Anvil 还可以为你托管你的应用程序。为什么不呢？部署 Web 应用程序非常复杂，因此运行我们自己的云托管服务是提供我们所需的简单性的唯一方法。在 Anvil 编辑器中构建一个应用程序，[单击按钮](https://anvil.works/docs/deployment)，它就在网上发布了。

但我们不断听到有人说，“那太好了，但是……”

* “我需要在没有可靠互联网接入的海外平台上运行这个应用。”
* “我想要将我的应用程序嵌入到我售出的 IoT 设备中”
* "如果我把我的宝都压到你的 Anvil 上，我怎么能确定十年后我的应用仍然能够运行呢？”

这些都是很好的观点！云服务并不是适合所有人的解决方案。如果我们想为这些用户提供服务，就必须有一些方法让他们把自己的应用从 Anvil 中取出来，在本地运行，由他们自己完全控制。

### 开源是一个逃生舱，而不是弹射座椅

在会议上，我们有时会被问到，“我可以将它导出为 Flask+JS 的应用程序吗？” 当然，我们可以将 Anvil 项目分别导出为 Python 和 JavaScript —— 我们可以生成一个服务器包，将客户端中的 Python 编译为 Javascript，然后生成一个经典的 Web 应用程序。但它会有严重的缺点，因为：**代码生成是一个弹射座椅。**

![Code generation is an ejector seat from a structured platform](/data/attachment/album/202106/29/041259rtzu3zw1yze2212u.jpg "Code generation is an ejector seat from a structured platform")

生成的代码聊胜于无；至少你可以编辑它！但是在你编辑该代码的那一刻，你就失去了生成它的系统的所有好处。如果你使用 Anvil 是因为它的 [拖放编辑器](https://anvil.works/docs/editor) 和 [运行在浏览器中的 Python](https://anvil.works/docs/client)，那么你为什么必须使用 vim 和 Javascript 才能在本地托管你的应用程序？

我们相信 [逃生舱，而不是弹射座椅](https://anvil.works/blog/escape-hatches-and-ejector-seats)。所以我们选择了一个正确的方式——我们 [开源了 Anvil 的运行引擎](https://anvil.works/blog/open-source)，这与在我们的托管服务中为你的应用程序提供服务的代码相同。这是一个独立的应用程序；你可以使用文本编辑器编辑代码并在本地运行。但是你也可以将它直接用 `git` 推回到我们的在线 IDE。这不是弹射座椅；没有爆炸性的转变。这是一个逃生舱；你可以爬出来，做你需要做的事情，然后再爬回来。

### 如果它开源了，它还可靠吗

开源中的一个看似矛盾的是，它的免费可用性是它的优势，但有时也会产生不稳定的感觉。毕竟，如果你不收费，你如何保持这个平台的长期健康运行？

我们正在做我们一直在做的事情 —— 提供一个开发工具，使构建 Web 应用程序变得非常简单，尽管你使用 Anvil 构建的应用程序 100% 是你的。我们为 Anvil 应用程序提供托管，并为 [企业客户](https://anvil.works/docs/overview/enterprise) 提供整个现场开发和托管平台。这使我们能够提供免费计划，以便每个人都可以将 Anvil 用于业余爱好或教育目的，或者开始构建某些东西并查看它的发展。

### 得到的多，失去的少

开源我们的运行引擎并没有减少我们的业务 —— 它使我们的在线 IDE 在今天和未来变得更有用、更值得信赖。我们为需要它的人开放了 Anvil App Server 的源代码，并提供最终的安全保障。对于我们的用户来说，这是正确的举措 —— 现在他们可以放心地进行构建，因为他们知道开源代码 [就在那里](https://github.com/anvil-works/anvil-runtime)，如果他们需要的话。

如果我们的开发理念与你产生共鸣，何不亲自尝试 Anvil？

---

这篇文章改编自 [Why We Open Sourced the Anvil App Server](https://anvil.works/blog/why-open-source)，经许可重复使用。

---

via: <https://opensource.com/article/20/7/why-open-source>

作者：[Meredydd Luff](https://opensource.com/users/meredydd-luff) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zepoch](https://github.com/zepoch) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #317 DuckDuckGo 成为美国、加拿大、澳大利亚的第二大移动搜索引擎

Summary: 更多：• 使用虚拟机来隐藏勒索软件攻击正变得越来越流行 • GitHub 漏洞赏金激增超过 150 万美元大关

放20年前，老王可以呀：）

![](/data/attachment/album/202106/29/103059moslujlatsppkolo.jpg)

### DuckDuckGo 成为美国、加拿大、澳大利亚的第二大移动搜索引擎

![](/data/attachment/album/202106/29/103110bjmmttmmqlssj1ji.png)

DuckDuckGo 发布[公告](https://spreadprivacy.com/duckduckgrowing/)称，在过去的 12 个月里，其应用程序被下载了 5000 多万次，比以前所有年份的总和还要多，其月度搜索流量增加了 55%，在许多国家的移动搜索引擎中成长为第二名。DuckDuckGo 说，“我们不跟踪我们的用户，所以我们不能确定我们有多少用户，但根据市场份额的估计、下载量和国家调查，我们相信有 7000 万至 1 亿 DuckDuckGo 用户。”

DuckDuckGo 现在每年的收入超过 1 亿美元。2020 年底，他们还获得了超过 1 亿美元的投资。

>
> 然而，我没有使用过它，不是我不想用……
>
>
>

### 使用虚拟机来隐藏勒索软件攻击正变得越来越流行

![](/data/attachment/album/202106/29/103132wyqj8oabifcfujrj.jpg)

2020 年初，安全研究人员发现，一个勒索软件团伙想出了一个创新的招数，允许它在受感染主机的虚拟机内运行其有效载荷，作为绕过安全软件的技术解决方案。勒索软件团伙在受感染主机上有了一个小的立足点之后可以下载和安装虚拟机软件，启动一个虚拟机实例共享主机的存储空间，然后从虚拟机内继续加密受害者的文件。在执行过程中，主机的反病毒软件无法到达并检测到勒索软件。一年后，这种技术已经在地下网络犯罪中[传播](https://therecord.media/using-vms-to-hide-ransomware-attacks-is-becoming-more-popular/)，现在被多个勒索软件运营商使用。

>
> 没想到虚拟化还被运用到这个方面，不过这也并非无迹可查。
>
>
>

### GitHub 漏洞赏金激增超过 150 万美元大关

![](/data/attachment/album/202106/29/103151g9hx95tujljxe46l.jpg)

GitHub 表示，2020 年是漏洞披露方面“最繁忙的一年”。GitHub 安全漏洞赏金计划已经运作了 7 年，而在过去的一年里，发放了超过 50 万美元的[奖励](https://www.zdnet.com/article/github-bug-bounties-payouts-surge-past-1-5-million-mark/)，使支付的总金额超过 150 万美元。GitHub 的计划范围包括众多 GitHub 拥有的域名和目标，研究人员每份报告可获得高达 3 万美元。GitHub 的安全漏洞赏金计划在安全港原则下运作，遵守负责任的披露政策的漏洞赏金猎人受到保护，不会因其研究而产生任何潜在的法律后果。

>
> 做个白帽子挣赏金真香，可惜 20 年前没有这样的环境。
>
>
>


为什么要为你的家庭自动化项目选择开源

在opensource这都能水一篇文章？

>
> 家庭自动化是一个令人兴奋的技术分支。现在开始用开源工具为你的家庭自动化设计一套解决方案吧。
>
>
>

![](/data/attachment/album/202106/29/215353tk85i7m1myggvu8g.jpg "Working from home at a laptop")

行动起来吧。科技的关键是让生活更加美好。

当然，“更好”的标准因人而异，取决于他们在特定时刻的需求。尽管如此，技术具有影响许多不同阶段生活的独特能力。对一些人来说，科技提供了一个轻松的下午娱乐，而对另一些人来说，它提供导航帮助、改善医疗保健或更精确的科学研究。

有趣的是，为一个目的开发的技术很少与用于另一个目的的技术完全无关。例如，运动相机的进步使得一个人可以记录她们在滑雪场上的滑雪过程，也可以使得人体摄像头来帮助防止警察侵犯人权。3D 打印的进步可以让一个人可以制作超级英雄的动作手办，也使得志愿者可以为体弱者制造氧气呼吸机成为可能。技术很重要，它影响着我们所有人。

开源的工作之一是确保每个人都能获得技术进步，无论种族、性别、国籍、身体能力、宗教信仰或财富如何。可悲的是，有些公司将技术视为一种工具来获取有关其客户（即你和我！）的数据，即使这些客户为该技术的研究和开发提供资金。不过，这不是开源的目标，开源项目保护其用户。

是的，家庭自动化是一种现代便利，它正在变得一天比一天好。但这是你的家。开源家庭自动化可以让生活变得更轻松，更像是所有科幻书籍和电影中承诺的未来。但它也可以改善那些身体能力与电器制造商计划不同的人的生活。一个简单的 Python 脚本对一个用户来说可能只是带来了一些便利，而对其他人来说却可能会改变生活。

家庭自动化是一个令人兴奋和有趣的技术分支。 借助这本 **[电子书](https://opensource.com/downloads/home-automation-ebook)**，立即开始设计你的家庭自动化解决方案，然后与他人分享你的创新，让每个人都能受益。

这就是开源的真正意义所在：可以帮助世界上的所有人。

---

via: <https://opensource.com/article/21/6/home-automation-ebook>

作者：[Alan Smithee](https://opensource.com/users/alansmithee) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zepoch](https://github.com/zepoch) 校对：[wxy](https://github.com/wxy)

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


Fedora Linux 中的 Python 3.10 测试版

Summary: Python 开发者已经发布了 Python 3.10.0 的三个测试版本。

![](/data/attachment/album/202106/29/221603gdqc9cq9cjcjjuxg.jpg)

Python 开发者已经发布了 Python 3.10.0 的三个测试版本。现在，你可以在 Fedora Linux 中试用最新的版本尽早用 3.10 测试你的 Python 代码，为 10 月份的 3.10.0 最终版本做好准备。

### 在 Fedora Linux 上安装 Python 3.10

如果你运行 Fedora Linux，你可以用 `dnf` 从官方仓库安装 Python 3.10：

```
$ sudo dnf install python3.10

```

你可能需要启用 `updates-testing` 仓库来获得最新的预发布版本：

```
$ sudo dnf install --enablerepo=updates-testing python3.10

```

随着更多的测试版和候选版 [发布](https://www.python.org/dev/peps/pep-0619/)，Fedora 包将得到更新。不需要编译你自己的 Python 开发版本，只要安装它就可以获得最新。从第一个测试版开始，Python 开发者不会再增加新的功能了。你已经可以享受所有的新东西了。

### 用 Python 3.10 测试你的项目

运行 `python3.10` 命令来使用 Python 3.10，或者用 [内置的 venv 模块 tox](https://developer.fedoraproject.org/tech/languages/python/multiple-pythons.html) 或用 [pipenv](https://fedoramagazine.org/install-pipenv-fedora/) 和 [poetry](https://python-poetry.org/) 创建虚拟环境。下面是一个使用 `tox` 的例子：

```
$ git clone https://github.com/benjaminp/six.git
Cloning into 'six'...
$ cd six/
$ tox -e py310
py310 run-test: commands[0] | python -m pytest -rfsxX
================== test session starts ===================
platform linux -- Python 3.10.0b3, pytest-6.2.4, py-1.10.0, pluggy-0.13.1
collected 200 items

test_six.py ...................................... [ 19%]
.................................................. [ 44%]
.................................................. [ 69%]
.................................................. [ 94%]
............                                       [100%]

================== 200 passed in 0.43s ===================
________________________ summary _________________________
  py310: commands succeeded
  congratulations :)

```

如果你在 Fedora Linux 上发现了 Python 3.10 的问题，请 [在 Fedora 的 bugzilla 上提交 bug 报告](https://bugzilla.redhat.com/buglist.cgi?component=python3.10&product=Fedora) 或在 [Python 的问题追踪](https://bugs.python.org/) 上提交。如果你不确定这是否是 Python 的问题，你可以 [通过电子邮件或 IRC 直接联系 Fedora 的 Python 维护者](https://fedoraproject.org/wiki/SIGs/Python#Communicate) 。

### Python 3.10 中的新内容

参见 [Python 3.10 的全部新闻列表](https://docs.python.org/3.10/whatsnew/3.10.html)。例如，你可以尝试一下 [结构模式匹配](https://www.python.org/dev/peps/pep-0634/)：

```
$ python3.10
Python 3.10.0b3 (default, Jun 17 2021, 00:00:00)
[GCC 10.3.1 20210422 (Red Hat 10.3.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> point = (3, 10)
>>> match point:
...     case (0, 0):
...         print("Origin")
...     case (0, y):
...         print(f"Y={y}")
...     case (x, 0):
...         print(f"X={x}")
...     case (x, y):
...         print(f"X={x}, Y={y}")
...     case _:
...         raise ValueError("Not a point")
...
X=3, Y=10
>>> x
3
>>> y
10

```

敬请期待 [Fedora Linux 35 中的 python3 —— Python 3.10](https://fedoraproject.org/wiki/Changes/Python3.10)！

---

via: <https://fedoramagazine.org/python-3-10-beta-in-fedora-linux/>

作者：[Miro Hrončok](https://fedoramagazine.org/author/churchyard/) 选题：[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/) 荣誉推出


硬核观察 #318 微软推出 AI “结对编程”

Summary: 更多：• edX 被以 8 亿美元卖给营利性在线课程供应商 • 日本“富岳”在四项超级计算机世界排名中实现“三连冠”

![](/data/attachment/album/202106/30/063415guabxb98ksxwlkst.jpg)

### 微软推出 AI “结对编程”

微软周二[宣布](https://www.cnbc.com/2021/06/29/microsoft-github-copilot-ai-offers-coding-suggestions.html)了一个人工智能系统 GitHub Copilot，可以像结对编程一样，为软件开发人员推荐代码。微软在 OpenAI 的帮助下开发了它，利用了上传到 GitHub 以及其他网站的源代码。它依靠的是许多编程语言的大量代码和庞大的 Azure 云计算能力。

该工具查看当前文件中的现有代码和注释，以及光标的位置，并提供可以添加的一个或多个代码行。随着程序员接受或拒绝建议，该模型会随着时间的推移进行学习并变得更加复杂。GitHub 的数百名开发者在编码时整天都在使用 Copilot 功能，他们中的大多数人都接受了建议，而没有关闭该功能。

>
> 这样发展下去，早晚一天编程都不需要人参与了，程序员在积极挖自己职业发展的墙角啊。
>
>
>

### edX 被以 8 亿美元卖给营利性在线课程供应商

![](/data/attachment/album/202106/30/063443wacc7k17wqagc37p.jpg)

当麻省理工学院和哈佛大学在近十年前创办 edX 时，它被吹捧为营利性在线课程供应商的非营利性替代者。今天，这两所大学宣布，他们正以 8 亿美元的价格将 edX [出售](https://www.edsurge.com/news/2021-06-29-2u-buys-edx-for-800m-in-surprise-end-to-nonprofit-mooc-provider-started-by-mit-and-harvard)给一个营利性供应商 2U。edX 称，全球疫情是导致出售的一个因素。edX 仍然拥有 3500 万用户和 3000 多门课程。

2U 是一家所谓的在线项目管理公司，帮助传统学院启动和运行在线学位课程，它说将把 edX 作为一个独立的子公司来运营，其结构将是一个公共福利公司。这意味着它将是营利性的。

>
> 别人都是因为疫情而发展起来，偏偏 edX 却被出售。
>
>
>

### 日本“富岳”在四项超级计算机世界排名中实现“三连冠”

![](/data/attachment/album/202106/30/063501aomcbyrpkcwym4vg.jpg)

日本的“富岳”（富士山的别称）在超级计算机 TOP500、HPCG、HPL-AI、Graph500 等榜单中连续三期排名世界第一。这些榜单都是用来判断超级计算机性能的评价指标，每年 6 月与 11 月更新两次，每一个代表性能的一个方面，比如数据处理性能、系统软件性能、浮点性能，或者科学工程计算的性能等。

在最新发布的 TOP500 榜单中，富岳每秒可以计算 44.201 TFlop，是排名第二的美国橡树岭国家实验室超算“Summit”（14.86 TFlop）的约 3 倍。我国的“神威·太湖之光”超级计算机位列第四，每秒可以计算 9.30146 TFlop。TOP500 榜单中，中国超级计算机共 192 台（上一次 221 台），美国为 122 台（上一次 113 台）。

>
> 超算榜单并不是目标，真正将超算落实到实际应用中才是最重要的。
>
>
>


如何在 Linux 上设置雷蛇设备的灯光效果和其他配置

Summary: 你可以在 Linux 上轻松设置你的雷蛇外设。

你可以在 Linux 上轻松设置你的雷蛇外设。

你有了一个闪亮的新雷蛇硬件，但你找不到 Linux 的 Razer Synapse 软件。而你最终没有正确 RGB 同步，也没有办法定制它。你会怎么做呢？

好吧，对于某些功能，比如给你的鼠标添加宏，你仍然需要（在 Windows 或 MacOS 上）访问 Razer Synapse。

但是，要调整其他一些选项，如键盘的宏，改变鼠标的 DPI，或灯光效果，你可以在 Linux 上轻松设置你的雷蛇外设。

![My Razer Basilisk V2 with lighting effect](/data/attachment/album/202106/30/160631o9o6fgjo9z6pvv5t.jpg)

这里有一些鼠标和鼠标垫的照片。这是同样的设置，但有不同的照明方案。点击图片可以看到更大的图片。

![](/data/attachment/album/202106/30/160631v5rd7a0o1r7t4p62.jpg)

![](/data/attachment/album/202106/30/160632jnyn0gn080h05mi0.jpg)

![](/data/attachment/album/202106/30/160633aa3hh0dr3asthmd3.jpg)

雷蛇 Basilisk 是一款不错的游戏鼠标。如果你想，你可以从亚马逊订购或从当地商店获得。

如果你已经拥有一个雷蛇设备，让我展示一下配置它的步骤，就像我在这里做的那样。

### 步骤 1：安装 OpenRazer

**OpenRazer** 是一个开源的驱动程序，使雷蛇硬件在 Linux 上工作。它支持几种功能来定制和控制你的设备，包括 RGB 鼠标垫。

虽然这不是官方 Linux 驱动，但它在各种设备上工作良好。

它为各种 Linux 发行版提供支持，包括 Solus、openSUSE、Fedora、Debian、Arch Linux、Ubuntu 和其他一些发行版。

在这里，我将重点介绍在任何基于 Ubuntu 的发行版上安装它的步骤，对于其他发行版，你可能想参考 [官方说明](https://openrazer.github.io/#download)。

你需要在 Ubuntu 上 [使用 PPA](https://itsfoss.com/ppa-guide/) 安装 OpenRazer，下面是如何做的：

```
sudo apt install software-properties-gtk
sudo add-apt-repository ppa:openrazer/stable
sudo apt update
sudo apt install openrazer-meta

```

它也提供了一个 [守护进程](https://itsfoss.com/linux-daemons/)，你可以选择让它工作，你要把你的用户加入到 `plugdev` 组，它给了设备的特权访问：

```
sudo gpasswd -a $USER plugdev

```

我不需要用上述命令中配置/添加一个守护程序，但我仍然可以很好地使用这些设备。守护进程主要是确保驱动保持活跃。

* [下载 OpenRazer](https://openrazer.github.io/)

### 步骤 2：安装一个 GUI 来管理和调整选项

现在驱动已经安装完毕，你所需要的是一个图形用户界面 （GUI） 来帮助你定制你的雷蛇硬件。

你可以找到一些可用的选择，但我将推荐安装 [Polychromatic](https://polychromatic.app)，它提供了一个有吸引力的用户界面，而且运行良好。

![](/data/attachment/album/202106/30/160633rmrlj987tq7wl77w.png)

Polychromatic 是我能推荐的最接近 Razer Synapse 的应用，而且效果不错。

对于基于 Ubuntu 的发行版，你需要做的就是使用 PPA 安装它：

```
sudo add-apt-repository ppa:polychromatic/stable
sudo apt update
sudo apt install polychromatic

```

对于 Arch Linux 用户，你可以在 [AUR](https://itsfoss.com/aur-arch-linux/) 中找到它。关于更多的安装说明，你可以参考[官方下载页面](https://polychromatic.app/download/)。

* [下载 Polychromatic](https://polychromatic.app/)

你会得到不同设备的不同选项。在这里，我试着改变 DPI，自定义颜色周期，以及我的雷蛇 Basilisk v2 鼠标的轮询率，它完全正常。

![Customization options for a mouse](/data/attachment/album/202106/30/160634wcg5ff8f8fggjsjd.png)

如果你知道你想做什么，它还为你提供了轻松重启或停止 [守护进程](https://itsfoss.com/linux-daemons/)、改变小程序图标和执行高级配置选项的能力。

另外，你可以试试 [RazerGenie](https://github.com/z3ntu/RazerGenie)、[Snake](https://github.com/bithatch/snake) 或 [OpenRGB](https://itsfoss.com/openrgb/) （用于改变颜色）来调整鼠标的颜色或任何其他设置。

### 总结

现在你可以轻松地定制你的雷蛇硬件了，希望你能玩得开心！

虽然你可能会找到一些其他的选择来配置你的雷蛇设备，但我没有找到任何其他效果这么好的选择。

如果你遇到了一些有用的东西，值得在这里为所有的雷蛇用户提一下，请在下面的评论中告诉我。

---

via: <https://itsfoss.com/set-up-razer-devices-linux/>

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

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


使用开源工具创建私有的虚拟专用网络

OpenWrt使用的软件组件什么时候能独立打包到Debian Gnu/Linux中，成为Debian大家庭得一员，方便使用玩耍！！！

>
> 使用 OpenWRT 和 Wireguard 在路由器上创建自己的虚拟专用网络。
>
>
>

![](/data/attachment/album/202107/01/101629ym69mwpmcmetdp99.jpg "scrabble letters used to spell \"V\"")

通过计算机网络从一个地方到另一个地方可能是一件棘手的事情。除了知道正确的地址和打开正确的端口之外，还有安全问题。 对于 Linux，SSH 是一种流行的默认方式，虽然你可以使用 SSH 做很多事情，但它仍然“只是”一个安全外壳（实际上，这就是 SSH 的含义）。用于加密流量的更广泛的协议是“虚拟专用网络”，它创建了一个独特的两点之间的虚拟的专用网络。有了它，你可以登录到另一个网络上的计算机并使用它的所有服务（文件共享、打印机等等），就像你坐在同一个房间里一样，并且全部的数据都是从点到点加密的。

通常，为了使虚拟专用网络连接成为可能，进入每个网络的网关必须接受虚拟专用网络流量，并且必须侦听目标网络上的某些计算机的虚拟专用网络流量。然而，你可以运行自己的带有虚拟专用网络服务器的路由器固件，使你能够连接到目标网络，而无需担心转发端口或考虑内部拓扑。我最喜欢的固件是 OpenWrt，在本文中我将演示如何设置它，以及如何启用虚拟专用网络。

### 什么是 OpenWrt？

[OpenWrt](https://openwrt.org/) 是一个使用 Linux 面向嵌入式设备的开源项目。它已经存在超过 15 年，拥有庞大而活跃的社区。

使用 OpenWrt 的方法有很多种，但它的主要用途是在路由器中。它提供了一个具有包管理功能的完全可写的文件系统，并且由于它是开源的，你可以查看和修改代码并为生态系统做出贡献。如果你想对路由器进行更多控制，这就是你想要使用的系统。

OpenWrt 支持很多路由器，包括 [思科](https://www.cisco.com/c/en/us/products/routers/index.html)、[华硕](https://www.asus.com/Networking-IoT-Servers/WiFi-Routers/All-series/)、[MikroTik](https://mikrotik.com/)、[Teltonika Networks](https://teltonika-networks.com/)、[D-Link](https://www.dlink.com/en/consumer)、[TP-link](https://www.tp-link.com/us/)、[Buffalo](https://www.buffalotech.com/products/category/wireless-networking)、[Ubiquiti](https://www.ui.com/) 等知名品牌和 [许多其他品牌](https://openwrt.org/toh/views/toh_fwdownload)。

### Wireguard 是什么？

[Wireguard](https://www.wireguard.com/) 是开源的虚拟专用网络软件，它比 OpenVPN 等其他选项更快、更简单且更安全。它使用最先进的密码学：用于对称加密的 ChaCha20；用于密钥协商的 Curve 25519（使用椭圆曲线），和用于散列的 BLAKE2。这些算法的设计方式在嵌入式系统上是高效的。Wireguard 也可用于各种操作系统 [平台](https://www.wireguard.com/install/)。

### 先决条件

对于这个项目，你需要：

* [Teltonika RUT955](https://teltonika-networks.com/product/rut955/) 或支持 OpenWrt 的其他路由器
* 一个公网 IP 地址，用于从外部网络连接到虚拟专用网络
* 一部安卓手机

### 安装 OpenWrt

首先，下载路由器的 OpenWrt 镜像。使用 [固件选择器](https://firmware-selector.openwrt.org/) 检查 OpenWrt 是否支持你的路由器并下载固件。输入你的路由器型号，将显示选项：

![OpenWRT 固件选择器](/data/attachment/album/202107/01/101639f1ozjz8o1pcpo8he.png "OpenWRT firmware selector")

使用搜索框右侧的下拉输入选择要下载的固件版本。

下载出厂镜像。

![下载出厂镜像](/data/attachment/album/202107/01/101639y2hjuk3k7jtwjgy5.png "Downloading the Factory Image")

许多路由器允许你从 Web 界面刷入未经授权的固件，但 Teltonika Networks 不允许。要将 OpenWrt 固件刷入这样的路由器，你需要使用引导加载器。为此，请按照下列步骤操作：

1. 拔掉路由器的电源线。
2. 按住重置按钮。
3. 插入路由器的电源线。
4. 插入电源线后，继续按住重置按钮 5 到 8 秒。
5. 将计算机的 IP 地址设置为 `192.168.1.15`，将网络掩码设置为 `255.255.255.0`。
6. 使用以太网电缆通过 LAN 端口连接路由器和计算机。
7. 打开网页浏览器并输入 `192.168.1.1:/index.html`。
8. 上传并刷写固件。

刷机过程可能占用三分钟。之后，你应该可以通过在浏览器中输入 `192.168.1.1` 来访问路由器的 Web 界面。 默认情况下没有设置密码

![OpenWrt 授权](/data/attachment/album/202107/01/101640upwczwpczwc5cpp8.png "OpenWrt authorization")

### 配置网络连接

网络连接是必要条件。如果你的 Internet 服务提供商（ISP） 使用 DHCP 自动分配你的 IP 地址，你只需将以太网电缆插入路由器的 WAN 端口。

如果你需要手动分配 IP 地址，导航至 “Network → Interfaces”。选择 “Edit” 编辑你的 WAN 接口。从 “Protocol” 字段中，选择 “Static address”，然后选择 “Switch protocol”。

![手动分配 IP 地址](/data/attachment/album/202107/01/101640xgk7ggzhgolskkos.png "Assigning IP address manually")

在 “IPv4 address” 字段中，输入你的路由器地址。设置 “IPv4 netmask” 以匹配你的网络子网；输入你将用于连接到网络的 “IPv4 gateway” 地址； 并在 “Use custom DNS servers” 字段中输入 DNS 服务器的地址。保存配置。

就是这样！你已成功配置 WAN 接口以获得网络连接。

### 安装必要的包

默认情况下，该固件不包含很多包，但 OpenWrt 有一个包管理器和可选安装的软件包。导航到 “System → Software” 并通过选择 “Update list...” 更新你的包管理器。

![OpenWrt 包管理器](/data/attachment/album/202107/01/101640c0szpe6xax3cfltd.png "OpenWrt package manager")

在“Filter”输入中，键入 “Wireguard”，等待系统找到所有包含该关键字的包。找到并安装名为 “luci-app-wireguard” 的包。

![luci-app-wireguard 包](/data/attachment/album/202107/01/101641zjx09njjg50jze60.png "luci-app-wireguard package")

该软件包包括一个用于配置 Wireguard 的 Web 界面，并安装 Wireguard 所必需的所有依赖项。

如果你在安装 Wireguard 软件包之前收到一个软件包丢失的警告并且在存储库中找不到，请忽略它并继续。

接下来，找到并安装名为 “luci-app-ttyd” 的包。这将用于稍后访问终端。

安装这些软件包后，重新启动路由器以使更改生效。

### 配置 Wireguard 接口

接下来，创建 Wireguard 接口。导航到 “Network → Interfaces” 并选择左下角的 “Add new interface...”。在弹出窗口中，输入你想要的接口名称，从下拉列表中选择 “WireguardVPN”，然后选择右下角的 “Create interface”。

![创建 Wireguard 接口](/data/attachment/album/202107/01/101641l5enwic0uie5siwa.png "Creating Wireguard interface")

在新弹出的窗口中，选择 “Generate Key” 为 Wireguard 接口生成私钥。在 “Listen Port” 字段中，输入所需的端口。我将使用默认的 Wireguard 端口，“51820”。在 “IP Addresses” 字段中，分配将用于 Wireguard 接口的 IP 地址。在这个例子中，我使用了 `10.0.0.1/24`。数字 “24” 表明我的子网的大小。

![创建 Wireguard 接口](/data/attachment/album/202107/01/101641yuoc3z0leh3tlzl0.png "Creating Wireguard interface")

保存配置并重启接口。

导航到 “Services → Terminal”，登录到 shell，然后输入命令 `wg show`。你将看到有关 Wiregaurd 接口的一些信息，包括其公钥。复制公钥——稍后你将需要它来创建对等点。

![Wireguard 公钥](/data/attachment/album/202107/01/101642l1r88obvu8iliaij.png "Wireguard public key")

### 配置防火墙

导航到 “Network → Firewall” 并选择 “Traffic Rules” 选项卡。在页面底部，选择 “Add”。在弹出窗口的 “Name” 字段中，为你的规则命名，例如 “Allow-wg”。接下来，将 “Destination zone” 从 “Lan” 更改为 “Device”，并将 “Destination port” 设置为 “51820”。

![Wireguard 防火墙设置](/data/attachment/album/202107/01/101642an0o6jj6f0xws0ja.png "Wireguard firewall setup")

保存配置。

### 手机上配置 Wireguard

从 Google Play 在你的手机上安装 [Wireguard 应用程序](https://play.google.com/store/apps/details?id=com.wireguard.android&hl=lt&gl=US)。安装后，打开应用程序并从头开始创建一个新接口。在 “Name” 字段中，输入要用于接口的名称。在 “Private key” 字段中，按右侧的双向箭头图标生成密钥对。你将需要上面的公钥来在你的手机和路由器之间创建一个对等点。在 “Addresses” 字段中，分配你将用于通过虚拟专用网络访问电话的 IP 地址。我将使用 `10.0.0.2/24`。在 “Listen port” 中，输入端口；我将再次使用默认端口。

![在 Android 上设置虚拟专用网络接口](/data/attachment/album/202107/01/101642vixlctrpr5lfitl6.png "Setting up V interface on Android")

保存配置。

要向配置中添加对等点，请选择 “Add peer”。在 “Public key” 字段中，输入路由器的 Wireguard 公钥。在 “Endpoint” 字段中，输入路由器的公共 IP 地址和端口，以冒号分隔，例如 `12.34.56.78:51820`。在 “Allowed IP” 字段中，输入要通过 Wireguard 接口访问的 IP 地址。 （你可以输入路由器的虚拟专用网络接口 IP 地址和 LAN 接口地址。）IP 地址必须用逗号分隔。你还可以定义子网的大小。

![在 Android 上添加虚拟专用网络对等点](/data/attachment/album/202107/01/101643k4k1kc4hidveckky.png "Adding a V peer on an Android")

保存配置。

配置中还剩下最后一步：在路由器上添加一个对等点。

### 在路由器上添加一个对等点

导航到 “Network → Interfaces” 并选择你的 Wireguard 接口。转到 “Peers” 选项卡并选择 “Add peer”。在 “Description” 字段中，输入对等方的名称。在 “Public Key” 字段中输入手机的 Wireguard 接口公钥，在 “Allowed IPs” 字段中输入手机的 Wireguard 接口 IP 地址。选中 “Route Allowed IPs” 复选框。

![在路由器上添加一个对等点](/data/attachment/album/202107/01/101643cq08xcxcfimfw2fi.png "Adding a peer on the router")

保存配置并重启接口。

### 测试配置

在手机上打开 Web 浏览器。在 URL 栏中，输入 IP 地址 `10.0.0.1` 或 `192.168.1.1`。你应该能够访问路由器的网站。

![从 Android 登录 虚拟专用网络](/data/attachment/album/202107/01/101643c0fvs88k32uei3e2.png "Logging into the V from Android")

### 你自己的虚拟专用网络

这些天有很多虚拟专用网络服务商在做广告，但是拥有和控制自己的基础设施还有很多话要说，尤其是当该基础设施仅用于提高安全性时。无需依赖其他人为你提供安全的数据连接。使用 OpenWrt 和 Wireguard，你可以拥有自己的开源虚拟专用网络解决方案。

---

via: <https://opensource.com/article/21/5/open-source-private-vpn>

作者：[Lukas Janėnas](https://opensource.com/users/lukasjan) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #319 美国议员呼吁给加密货币留“后门”

Summary: 更多：• WWW 源代码的 NFT 拍卖以 540 万美元成交 • IBM 为期 18 个月的全公司电子邮件系统迁移已经崩溃

Gnu/Linux 5.13内核作为另一项内核安全改进，将每个系统调用的内核堆栈偏移量随机化。浏览器可不可以实现类似的用户数据处理随机化功能。很多美国科学家也很反感美国政府得无底线监控，所以他们也在用自己得知识和能力为保护更多人的隐私贡献自己的技术

![](/data/attachment/album/202107/01/105833ho0jronn8wefojno.jpg)

### 美国议员呼吁给加密货币留“后门”

![](/data/attachment/album/202107/01/105841kza5fe7yfudxhdy7.jpg)

美国国会区块链核心小组联合主席周二表示，应该允许一个受信任的第三方，例如法院，拥有访问加密货币“后门”的权限。他说，新的立法和规则可能会建立一种伪匿名模式，只有司法权力才能访问某些信息，建议允许法院获得访问一个“受到非常严密保护的钥匙”的途径，“本质上是一个加密后门”，从而使其可以逆转区块链上的交易。

>
> 我想说的是，其实他想要的一个联盟链而不是公链。
>
>
>

### WWW 源代码的 NFT 拍卖以 540 万美元成交

![](/data/attachment/album/202107/01/105903moxwswxz0x6duh4b.jpg)

在苏富比的一场在线拍卖中，WWW 的原始代码以 NFT 形式拍卖，最终拍卖价 [540 万美元](https://www.bbc.com/news/technology-57666335)。拍卖的 NFT 取名叫“This Changed Everything”，起拍价 1000 美元。该 NFT 来自英国计算机科学家、WWW 发明人蒂姆·伯纳斯-李。拍卖品包括原始时间戳文件，里面有蒂姆·伯纳斯-李编写的代码，还有代码可视化动画和一封信等。所有这些都有蒂姆·伯纳斯-李的数字签名。

>
> 能拍卖出如此高价，说明这个世界还是认可 WWW 之父的贡献的。
>
>
>

### IBM 为期 18 个月的全公司电子邮件系统迁移已经崩溃

![](/data/attachment/album/202107/01/105920rzdh9vomr2iy66yo.jpg)

这导致许多员工[无法使用](https://www.theregister.com/2021/06/30/ibm_email_outage/)电子邮件或安排日历事件，这种情况已经持续了好几天。电子邮件服务一直是断断续续的，而且不是每个人都受到同样的影响。据说 Slack 可以工作，但 Outlook、 Web 邮件和 Notes 一直不可靠。这个迁移计划源于 IBM 在 2018 年决定将包括 Notes 在内的各种软件产品出售给印度的HCL。出售之后，IBM 不希望其数据放在 HCL 的服务器上。

>
> 看来 Notes 上车后想下车没那么容易啊。
>
>
>


CI/CD 管道是什么？

Summary: 你如何定义持续集成/持续部署管道取决于你组织的要求。

你如何定义持续集成/持续部署管道取决于你组织的要求。

>
> 你如何定义持续集成/持续部署管道取决于你组织的要求。
>
>
>

![Plumbing tubes in many directions](/data/attachment/album/202107/02/105840iz2w2acqc1tq2ccn.png "Plumbing tubes in many directions")

<ruby> 持续集成 <rt>  continuous integration </rt></ruby>/<ruby> 持续部署 <rt>  continuous deployment </rt></ruby>（CI/CD）管道是每个 DevOps 计划的基础。 CI/CD 管道打破了传统的开发孤岛，使开发和运营团队能够在整个软件开发生命周期中进行协作。

更好的是，转向 DevOps 和 CI/CD 管道可以帮助你的组织以更高的速度更安全地 [交付软件](https://techbeacon.com/devops/5-reasons-why-cicd-vital-your-organizations-value-stream)。

### 拆解 CI/CD 管道

CI/CD 管道有很多定义，所以我总是建议组织定义自己的 CI/CD 管道版本和其他 DevOps 概念，而不是使用其他人的。开源 CI/CD 工具为你提供构建满足组织要求的 CI/CD 管道的自由和选择。

形成 CI/CD 管道的阶段是将不同的任务子集分组为 *管道阶段*。典型的管道阶段包括：

* **构建**：开发人员编译应用程序代码。
* **测试**：质量保证（QA）团队使用自动化测试工具和策略测试应用程序代码。
* **发布**：开发团队将应用程序代码交付到代码库。
* **部署**：DevOps 团队将应用程序代码分阶段投入生产。
* **安全性和合规性**：QA 团队根据项目要求验证构建。这是组织部署容器扫描工具的阶段，这些工具根据<ruby> 常见漏洞和暴露 <rt>  Common Vulnerabilities and Exposures </rt></ruby>（CVE）检查容器镜像的质量。

这些是 CI/CD 管道的标准阶段，但一些组织调整 CI/CD 管道模型以满足他们的要求。例如，为医疗保健市场构建应用程序的组织，具有严格的合规性标准，可以在整个工具链中分发测试、验证和合规性门槛。

其他示例可能是依赖于具有开源软件（OSS）的复杂软件供应链的组织。商业组件可能会设立一个门槛，开发团队成员可以在其中为 OSS 包生成 <ruby> <a href="https://www.ntia.gov/SBOM">  软件物料清单 </a> <rt>  software bill of materials </rt></ruby>（SBOM），或者外部商业软件供应商必须将 SBOM 作为其合同可交付成果的一部分进行交付。

### CI/CD 管道的障碍

实施 CI/CD 管道会改变团队的流程和文化。尽管许多开发人员愿意接受某些任务和测试的自动化，但人员可能成为采用 CI/CD 的障碍。

从瀑布式流程转向 CI/CD 可能会动摇某些组织中基本的和隐含的权力结构。由于 CI/CD 管道提高了软件交付速度，旧手动流程的“守门人”可能会受到这种变化的威胁。

### 整合机会

随着你在文化、流程和工具中达到更高的 DevOps 成熟度水平，包含 CI/CD 工具链的工具的开源根源为一些激动人心的集成创造了机会。

分析公司 Forrester 在 2020 年预测，<ruby> 即时学习 <rt>  just-in-time learning </rt></ruby>将加入 CI/CD 管道。如果你考虑一下，会发现这是有道理的。在当前远程工作的时代，甚至对于新员工的远程入职，这更有意义。例如，组织可以将文档 wiki 与内部流程文档集成到其管道中。

更雄心勃勃的组织可以将学习管理系统（LMS）（例如 [Moodle](https://moodle.org/)）集成到其 CI/CD 管道中。它可以使用 LMS 发布有关新 DevOps 工具链功能的简短视频，开发人员在加入时或在整个管道中更新工具时需要学习这些功能。

一些组织正在将群聊和其他协作工具直接集成到他们的 CI/CD 管道中。聊天平台提供警报并支持团队之间的协作和沟通。将 Mattermost、Rocket.Chat 或其他 [企业聊天](https://opensource.com/alternatives/slack) 平台集成到你的 CI/CD 管道中需要预先规划和分析，以确保管道用户不会被警报淹没。

另一个需要探索的集成机会是将分析和高级报告构建到你的 CI/CD 管道中。这有助于你利用通过管道传输的数据。

### 总结

CI/CD 管道是 DevOps 的基础。开源使其能够适应并灵活地满足你在 DevOps 之旅中实施的运营变更所产生的新需求。

我希望看到对统一 DevOps 平台趋势的开源响应，在这种趋势中，组织寻求端到端的 CI/CD 解决方案。这种解决方案的要素就在那里。毕竟，GitLab 和 GitHub 将他们的平台追溯到开源根源。

最后，不要忘记每一个成功的 CI/CD 工具链背后的教育和外展。记录你的工具链和相关流程将改善开发人员入职和持续的 DevOps 团队培训。

你和你的组织如何定义你的 CI/CD 工具链？请在评论中分享你的反馈。

---

via: <https://opensource.com/article/21/6/what-cicd-pipeline>

作者：[Will Kelly](https://opensource.com/users/willkelly) 选题：[lujun9972](https://github.com/lujun9972) 译者：[baddate](https://github.com/baddate) 校对：[wxy](https://github.com/wxy)

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


使用 Python 来解决慈善机构的业务问题

>
> 比较不同的编程语言如何解决同一个问题是一个很有趣的事情，也很有指导意义。接下来，我们就来讲一讲如何用 Python 来解决。
>
>
>

![](/data/attachment/album/202107/02/124241fzuzo7kflrf7g77v.jpg "Python programming language logo with question marks")

在我这一系列的 [第一篇文章](https://opensource.com/article/20/8/solving-problem-groovy) 里，我描述了这样子的一个问题，如何将一大批的救助物资分为具有相同价值的物品，并将其分发给社区中的困难住户。我也曾写过用不同的编程语言写一些小程序来解决这样子的小问题以及比较这些程序时如何工作的。

在第一篇文章中，我是使用了 [Groovy](https://groovy-lang.org/) 语言来解决问题的。Groovy 在很多方面都与 [Python](https://www.python.org/) 很相似，但是在语法上她更像 C 语言和 Java。因此，使用 Python 来创造一个相同的解决方案应该会很有趣且更有意义。

### 使用 Python 的解决方案

使用 Java 时，我会声明一个工具类来保存元组数据（新的记录功能将会很好地用于这个需求）。使用 Groovy 时，我就是用了该语言的映射功能，我也将在 Python 使用相同的机制。

使用一个字典列表来保存从批发商处批发来的货物：

```
packs = [
        {'item':'Rice','brand':'Best Family','units':10,'price':5650,'quantity':1},
        {'item':'Spaghetti','brand':'Best Family','units':1,'price':327,'quantity':10},
        {'item':'Sardines','brand':'Fresh Caught','units':3,'price':2727,'quantity':3},
        {'item':'Chickpeas','brand':'Southern Style','units':2,'price':2600,'quantity':5},
        {'item':'Lentils','brand':'Southern Style','units':2,'price':2378,'quantity':5},
        {'item':'Vegetable oil','brand':'Crafco','units':12,'price':10020,'quantity':1},
        {'item':'UHT milk','brand':'Atlantic','units':6,'price':4560,'quantity':2},
        {'item':'Flour','brand':'Neighbor Mills','units':10,'price':5200,'quantity':1},
        {'item':'Tomato sauce','brand':'Best Family','units':1,'price':190,'quantity':10},
        {'item':'Sugar','brand':'Good Price','units':1,'price':565,'quantity':10},
        {'item':'Tea','brand':'Superior','units':5,'price':2720,'quantity':2},
        {'item':'Coffee','brand':'Colombia Select','units':2,'price':4180,'quantity':5},
        {'item':'Tofu','brand':'Gourmet Choice','units':1,'price':1580,'quantity':10},
        {'item':'Bleach','brand':'Blanchite','units':5,'price':3550,'quantity':2},
        {'item':'Soap','brand':'Sunny Day','units':6,'price':1794,'quantity':2}]

```

大米有一包，每包中有 10 袋大米，意大利面条有十包，每包中有一袋意大利面条。上述代码中，变量 `packs` 被设置为 Python 字典列表。这与 Groovy 的方法非常相似。关于 Groovy 和 Python 之间的区别，有几点需要注意：

1. 在 Python 中，无需关键字来定义变量 `packs`，Python 变量初始化时需要设置一个值。
2. Python 字典中的词键（例如，`item`、`brand`、`units`、`price`、 `quantity`）需要引号来表明它们是字符串；Groovy 假定这些是字符串，但也接受引号。
3. 在 Python 中，符号 `{ ... }` 表明一个字典声明； Groovy 使用与列表相同的方括号，但两种情况下的结构都必须具有键值对。

当然，表中的价格不是以美元计算的。

接下来，打开散装包。例如，打开大米的单个散装包装，将产出 10 单元大米； 也就是说，产出的单元总数是 `units * quantity`。 Groovy 脚本使用一个名为 `collectMany` 的方便的函数，该函数可用于展平列表列表。 据我所知，Python 没有类似的东西，所以使用两个列表推导式来产生相同的结果：

```
units = [[{'item':pack['item'],'brand':pack['brand'],
        'price':(pack['price'] / pack['units'])}] *
        (pack['units'] * pack['quantity']) for pack in packs]
units = [x for sublist in units for x in sublist]

```

第一个列表可理解为（分配给单元）构建字典列表列表。 第二个将其“扁平化”为字典列表。 请注意，Python 和 Groovy 都提供了一个 `*` 运算符，它接受左侧的列表和右侧的数字 `N`，并复制列表 `N` 次。

最后一步是将这些单元的大米之类的重新包装到篮子（`hamper`）中以进行分发。 就像在 Groovy 版本中一样，你需要更具体地了解理想的篮子数，当你只剩下几个单元时，你最好不要过度限制，即可以做一些随机分配：

```
valueIdeal = 5000
valueMax = valueIdeal * 1.1

```

很好！ 重新打包篮子。

```
import random
hamperNumber = 0              # 导入 Python 的随机数生成器工具并初始化篮子数
while len(units) > 0:      # 只要有更多可用的单元，这个 `while` 循环就会将单元重新分配到篮子中：
    hamperNumber += 1
    hamper = []
    value = 0
    canAdd = True              # 增加篮子编号，得到一个新的空篮子（单元的列表），并将其值设为 0； 开始假设你可以向篮子中添加更多物品。
    while canAdd:              # 这个 `while` 循环将尽可能多地向篮子添加单元（Groovy 代码使用了 `for` 循环，但 Python 的 `for` 循环期望迭代某些东西，而 Groovy 则是为更传统的 C 形式的 `for` 循环形式）：
        u = random.randint(0,len(units)-1)  # 获取一个介于 0 和剩余单元数减 1 之间的随机数。
        canAdd = False                      # 假设你找不到更多要添加的单元。
        o = 0                               # 创建一个变量，用于从你正在寻找要放入篮子中的物品的起点的偏移量。
        while o < len(units):               # 从随机选择的索引开始，这个 `while` 循环将尝试找到一个可以添加到篮子的单元（再次注意，Python `for` 循环可能不适合这里，因为列表的长度将在迭代中中发生变化）。
            uo = (u + o) % len(units)
            unit = units[uo]
            unitPrice = unit['price']          # 找出要查看的单元（随机起点+偏移量）并获得其价格。
            if len(units) < 3 or not (unit in hamper) and (value + unitPrice) < valueMax:
                                               # 如果只剩下几个，或者添加单元后篮子的价值不太高，你可以将此单元添加到篮子中。
                hamper.append(unit)
                value += unitPrice
                units.pop(u)                   # 将单元添加到篮子中，按单价增加 篮子数，从可用单元列表中删除该单元。
                canAdd = len(units) > 0
                break                          # 只要还有剩余单元，你就可以添加更多单元，因此可以跳出此循环继续寻找。
            o += 1                             # 增加偏移量。
                                            # 在退出这个 `while` 循环时，如果你检查了所有剩余的单元并且找不到单元可以添加到篮子中，那么篮子就完成了搜索； 否则，你找到了一个，可以继续寻找更多。
    print('')
    print('Hamper',hamperNumber,'value',value)
    for item in hamper:
        print('%-25s%-25s%7.2f' % (item['item'],item['brand'],item['price'])) # 打印出篮子的内容。
    print('Remaining units',len(units))                                       # 打印出剩余的单元信息。

```

一些澄清如上面的注释。

运行此代码时，输出看起来与 Groovy 程序的输出非常相似：

```
Hamper 1 value 5304.0
UHT milk                 Atlantic                  760.00
Tomato sauce             Best Family               190.00
Rice                     Best Family               565.00
Coffee                   Colombia Select          2090.00
Sugar                    Good Price                565.00
Vegetable oil            Crafco                    835.00
Soap                     Sunny Day                 299.00
Remaining units 148

Hamper 2 value 5428.0
Tea                      Superior                  544.00
Lentils                  Southern Style           1189.00
Flour                    Neighbor Mills            520.00
Tofu                     Gourmet Choice           1580.00
Vegetable oil            Crafco                    835.00
UHT milk                 Atlantic                  760.00
Remaining units 142

Hamper 3 value 5424.0
Soap                     Sunny Day                 299.00
Chickpeas                Southern Style           1300.00
Sardines                 Fresh Caught              909.00
Rice                     Best Family               565.00
Vegetable oil            Crafco                    835.00
Spaghetti                Best Family               327.00
Lentils                  Southern Style           1189.00
Remaining units 135

...

Hamper 21 value 5145.0
Tomato sauce             Best Family               190.00
Tea                      Superior                  544.00
Chickpeas                Southern Style           1300.00
Spaghetti                Best Family               327.00
UHT milk                 Atlantic                  760.00
Vegetable oil            Crafco                    835.00
Lentils                  Southern Style           1189.00
Remaining units 4

Hamper 22 value 2874.0
Sardines                 Fresh Caught              909.00
Vegetable oil            Crafco                    835.00
Rice                     Best Family               565.00
Rice                     Best Family               565.00
Remaining units 0

```

最后一个篮子在内容和价值上有所简化。

### 结论

乍一看，这个程序的 Python 和 Groovy 版本之间没有太大区别。 两者都有一组相似的结构，这使得处理列表和字典非常简单。 两者都不需要很多“样板代码”或其他“繁杂”操作。

此外，使用 Groovy 时，向篮子中添加单元还是一件比较繁琐的事情。 你需要在单元列表中随机选择一个位置，然后从该位置开始，遍历列表，直到找到一个价格允许的且包含它的单元，或者直到你用完列表为止。 当只剩下几件物品时，你需要将它们扔到最后一个篮子里。

另一个值得一提的问题是：这不是一种特别有效的方法。 从列表中删除元素、极其多的重复表达式还有一些其它的问题使得这不太适合解决这种大数据重新分配问题。 尽管如此，它仍然在我的老机器上运行。

如果你觉得我在这段代码中使用 `while` 循环并改变其中的数据感到不舒服，你可能希望我让它更有用一些。 我想不出一种方法不使用 Python 中的 map 和 reduce 函数，并结合随机选择的单元进行重新打包。 你可以吗？

在下一篇文章中，我将使用 Java 重新执行此操作，以了解 Groovy 和 Python 的工作量减少了多少，未来的文章将介绍 Julia 和 Go。

---

via: <https://opensource.com/article/20/9/solve-problem-python>

作者：[Chris Hermansen](https://opensource.com/users/clhermansen) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zepoch](https://github.com/zepoch) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #320 谷歌和微软决定结束和平，重启诉讼大战

Summary: 更多：• 互联网在腐化 • 微软的蓝色死屏在 Windows 11中变成了黑色

更多：• 互联网在腐化 • 微软的蓝色死屏在 Windows 11中变成了黑色

![](/data/attachment/album/202107/02/151156hzm71330kzk973e1.jpg)

### 谷歌和微软决定结束和平，重启诉讼大战

![](/data/attachment/album/202107/02/151208jcxnee5gnkntcxpg.jpg)

两大巨头在五年前签署了互不侵犯协议，搁置诉讼，并创建一个程序闭门解决分歧，在要求监管方介入前先通过这个程序磋商。但随着微软认为谷歌在广告技术上没有公平游戏之后，和平走到了[尽头](https://arstechnica.com/tech-policy/2021/06/google-and-microsoft-ditch-non-aggression-pact-rev-up-rivalry-again/)。双方的 CEO 进行了磋商，但是没有取得进展。

>
> 战争与和平，这是一个问题。
>
>
>

### 互联网在腐化

![](/data/attachment/album/202107/02/151223azol8ailaiahzbor.jpg)

互联网的发明堪称奇迹，它就像一个不断增长的图书馆，但没有中心文件系统。不过这个没有中心文件系统的互联网面临的一大风险是里面的超链接会不断失效，这种现象被称为[链接腐化和内容漂移](https://www.theatlantic.com/technology/archive/2021/06/the-internet-is-a-collective-hallucination/619320/)。对美国最高法院司法意见书和《哈佛法律评论》的研究发现，自 1996 年以来，司法意见书里嵌入的超链接一半失效；《哈佛法律评论》中四分之三的链接失效。对《纽约时报》200 万外链的分析发现，四分之一的深链接失效，文章的年份越古老，超链失效的比例越高。

>
> 即便是有互联网档案馆这样的组织来保存一切，也依然会有一些信息逐渐遗失。不过，新陈代谢也是正常的。
>
>
>

### 微软的蓝色死屏在 Windows 11中变成了黑色

![](/data/attachment/album/202107/02/151242fh8zmmt41dp1bmqh.jpg)

微软将在 Windows 11 中改用[黑色死屏](https://www.theverge.com/2021/7/1/22559852/microsoft-windows-11-black-blue-screen-of-death-bsod-change)，与新的黑色登录和关机屏幕相匹配。这是自 2012 年微软在 Windows 8 的屏幕上添加“愁眉苦脸”的表情符，以及 2016 年添加二维码以来，BSOD 的第一个重大变化。微软在 Windows 3.0 中首次引入了蓝色死屏（BSOD），它是 Windows 自己的内核错误或错误检查，它通常包括一个数据转储，可以帮助系统管理员分析是什么系统故障导致蓝屏。

>
> 改成黑色也挺好，至少 BSOD 这个缩写不用改了。
>
>
>


《Bash it out》书评：用这本谜题书学习 Bash

所以这本书有中文版吗？

>
> 《Bash it out》使用 16 个谜题，涵盖了基本、中级和高级 Bash 脚本。
>
>
>

![](/data/attachment/album/202107/03/154134jgm2m82o76mrm2o7.jpg "Puzzle pieces coming together to form a computer screen")

计算机既是我的爱好，也是我的职业。我的公寓里散布着大约 10 台计算机，它们都运行 Linux（包括我的 Mac）。由于我喜欢升级我的电脑和提升我的电脑技能，当我遇到 Sylvain Leroux 的《[Bash it out](https://www.amazon.com/Bash-Out-Strengthen-challenges-difficulties/dp/1521773262/)》时，我抓住了购买它的机会。我在 Debian Linux 上经常使用命令行，这似乎是扩展我的 Bash 知识的好机会。当作者在前言中解释他使用 Debian Linux 时，我笑了，这是我最喜欢的两个发行版之一。

Bash 可让你自动执行任务，因此它是一种省力、有趣且有用的工具。在阅读本书之前，我已经有相当多的 Unix 和 Linux 上的 Bash 经验。我不是专家，部分原因是脚本语言非常广泛和强大。当我在基于 Arch 的 Linux 发行版 [EndeavourOS](https://endeavouros.com/) 的欢迎屏幕上看到 Bash 时，我第一次对 Bash 产生了兴趣。

以下屏幕截图显示了 EndeavourOS 的一些选项。你可能不相信，这些面板只指向 Bash 脚本，每个脚本都完成一些相对复杂的任务。而且因为它都是开源的，所以我可以根据需要修改这些脚本中的任何一个。

![EndeavourOS after install](/data/attachment/album/202107/03/154143wg356agqysgigks1.png "EndeavourOS after install")

![EndeavourOS install apps](/data/attachment/album/202107/03/154143f993g989l9ujutii.png "EndeavourOS install apps")

### 总有东西要学

我对这本书的印象非常好。虽然不长，但经过了深思熟虑。作者对 Bash 有非常广泛的了解，并且具有解释如何使用它的不可思议的能力。这本书使用 16 个谜题涵盖了基本、中级和高级 Bash 脚本，他称之为“挑战”。这教会了我将 Bash 脚本视为需要解决的编程难题，这让我玩起来更有趣。

Bash 的一个令人兴奋的方面是它与 Linux 系统深度集成。虽然它的部分能力在于它的语法，但它也很强大，因为它可以访问很多系统资源。你可以编写重复性任务或简单但厌倦了手动执行的任务的脚本。不管是大事还是小事，《Bash it out》可以帮助你了解可以做什么以及如何实现它。

如果我不提及 David Both 的发布在 [Opensource.com](http://Opensource.com) 的免费资源《[A sysadmin's guide to Bash scripting\_](https://opensource.com/downloads/bash-scripting-ebook)》，这篇书评就不会完整。这个 17 页的 PDF 指南与《Bash it out》不同，但它们共同构成了任何想要了解它的人的成功组合。

我不是计算机程序员，但《Bash it out》增加了我进入更高级 Bash 脚本水平的欲望——虽然没有这个打算，但我可能最终无意中成为一名计算机程序员。

我喜欢 Linux 的原因之一是因为它的操作系统功能强大且用途广泛。无论我对 Linux 了解多少，总有一些新东西需要学习，这让我更加欣赏 Linux。

在竞争激烈且不断变化的就业市场中，我们所有人都应该不断更新我们的技能。这本书帮助我以非常实际的方式学习了 Bash。几乎感觉作者和我在同一个房间里，耐心地指导我学习。

作者 Leroux 具有不可思议的能力去吸引读者。这是一份难得的天赋，我认为比他的技术专长更有价值。事实上，我写这篇书评是为了感谢作者预见了我自己的学习需求；虽然我们从未见过面，但我从他的天赋中受益匪浅。

---

via: <https://opensource.com/article/20/4/bash-it-out-book>

作者：[Carlos Aguayo](https://opensource.com/users/hwmaster1) 选题：[lujun9972](https://github.com/lujun9972) 译者：[baddates](https://github.com/baddates) 校对：[wxy](https://github.com/wxy)

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


在 WSL 上忘记了 Linux 密码？下面是如何轻松重设的方法

Summary: 如果你有一段时间没有使用它，你可能会忘记 WSL 的账户密码。

好文章,救命了!

如果你有一段时间没有使用它，你可能会忘记 WSL 的账户密码。

对于那些想从舒适的 Windows 中享受 Linux 命令行的人来说，WSL（Windows Subsystem for Linux） 是一个方便的工具。

当你 [在 Windows 上使用 WSL 安装 Linux](https://itsfoss.com/install-bash-on-windows/) 时，会要求你创建一个用户名和密码。当你在 WSL 上启动 Linux 时，这个用户会自动登录。

现在的问题是，如果你有一段时间没有使用它，你可能会忘记 WSL 的账户密码。而如果你要使用 `sudo` 的命令，这将成为一个问题，因为这里你需要输入密码。

![](/data/attachment/album/202107/03/155824ua3xfpzpal7irnx8.png)

不要担心。你可以很容易地重置它。

### 在 Ubuntu 或任何其他 Linux 发行版上重置遗忘的 WSL 密码

要在 WSL 中重设 Linux 密码，你需要：

* 将默认用户切换为 `root`
* 重置普通用户的密码
* 将默认用户切换回普通用户

让我向你展示详细的步骤和截图。

#### 步骤 1：将默认用户切换为 root

记下你的普通/常规用户名将是明智之举。如你所见，我的普通帐户的用户名是 `abhishek`。

![Note down the account username](/data/attachment/album/202107/03/155825mflz1lj0efrh2zd2.png)

WSL 中的 `root` 用户是无锁的，没有设置密码。这意味着你可以切换到 `root` 用户，然后利用 `root` 的能力来重置密码。

由于你不记得帐户密码，切换到 `root` 用户是通过改变你的 Linux WSL 应用的配置，使其默认使用 `root` 用户来完成。

这是通过 Windows 命令提示符完成的，你需要知道你的 Linux 发行版需要运行哪个命令。

这个信息通常在 [Windows 商店](https://www.microsoft.com/en-us/store/apps/windows) 中的发行版应用的描述中提供。这是你首次下载发行版的地方。

![Know the command to run for your distribution app](/data/attachment/album/202107/03/155825ps2ftt6fftjkus22.png)

从 Windows 菜单中，启动命令提示符：

![Start Command Prompt](/data/attachment/album/202107/03/155826way5ywdcrhy5m7wt.jpg)

在这里，以这种方式使用你的发行版的命令。如果你使用的是 Windows 商店中的 Ubuntu 应用，那么该命令将是：

```
ubuntu config --default-user root

```

截图中，我正在使用 Windows 商店中的 Ubuntu 20.04 应用。所以，我使用了 ubuntu2004 命令。

![Set root as default user in Linux app’s configuration](/data/attachment/album/202107/03/155826ujerby8j4y8rmhfh.png)

为了减少你的麻烦，我在这个表格中列出了一些发行版和它们各自的命令：

| 发行版应用 | Windows 命令 |
| --- | --- |
| Ubuntu | `ubuntu config –default-user root` |
| Ubuntu 20.04 | `ubuntu2004 config –default-user root` |
| Ubuntu 18.04 | `ubuntu1804 config –default-user root` |
| Debian | `debian config –default-user root` |
| Kali Linux | `kali config –default-user root` |

#### 步骤 2：重设帐户密码

现在，如果你启动 Linux 发行程序，你应该以 `root` 身份登录。你可以重新设置普通用户帐户的密码。

你还记得 WSL 中的用户名吗？（LCTT 译注：请使用你的“用户名”替换下列命令中的 `username`）如果没有，你可以随时检查 `/home` 目录的内容。当你有了用户名后，使用这个命令：

```
passwd username

```

它将要求你输入一个新的密码。\*\*当你输入时，屏幕上将不会显示任何内容。这很正常。只要输入新的密码，然后点击回车就可以了。\*\*你必须重新输入新的密码来确认，当你输入密码时，屏幕上也不会显示任何东西。

![Reset the password for the regular user](/data/attachment/album/202107/03/155827cpspiqpv7oo9q8po.png)

恭喜你。用户账户的密码已经被重置。但你还没有完成。默认用户仍然是 `root`。你应该把它改回你的普通用户帐户，否则它将一直以 `root` 用户的身份登录。

#### 步骤 3：再次将普通用户设置为默认用户

你需要你在上一步中用 [passwd 命令](https://linuxhandbook.com/passwd-command/) 使用的普通帐户用户名。

再次启动 Windows 命令提示符。**使用你的发行版命令**，方式与第 1 步中类似。然而，这一次，用普通用户代替 `root`。

```
ubuntu config --default-user username

```

![Set regular user as default user](/data/attachment/album/202107/03/155827g1tub4lunnt49yjb.png)

现在，当你在 WSL 中启动你的 Linux 发行版时，你将以普通用户的身份登录。你已经重新设置了密码，可以用它来运行 `sudo` 命令。

如果你将来再次忘记了密码，你知道重置密码的步骤。

### 如果重设 WSL 密码如此简单，这难道不是一种安全风险吗？

并非如此。你需要有对计算机的物理访问权以及对 Windows 帐户的访问权。如果有人已经有这么多的访问权，他/她可以做很多事情，而不仅仅是改变 WSL 中的 Linux 密码。

### 你是否能够重新设置 WSL 密码？

我给了你命令并解释了步骤。我希望这对你有帮助，并能够在 WSL 中重置你的 Linux 发行版的密码。

如果你仍然遇到问题，或者你对这个话题有疑问，请随时在评论区提问。

---

via: <https://itsfoss.com/reset-linux-password-wsl/>

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

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


硬核观察 #321 谷歌要用新的安卓软件包格式取代 APK

Summary: 更多：• 暂缓废除第三方 cookie 后，谷歌提出第二种替代方案 • 多个托管服务提供商遭遇 REvil 供应链攻击

![](/data/attachment/album/202107/03/174229r2zvm21vmctn9xfr.jpg)

### 谷歌要用新的安卓软件包格式取代 APK

![](/data/attachment/album/202107/03/174240c3li53i1zkxe3eee.jpg)

自 2008 年安卓发布以来，其软件包一直是 APK 格式。但谷歌想要更好的控制安卓应用的发布，[宣布](https://android-developers.googleblog.com/2021/06/the-future-of-android-app-bundles-is.html)从 8 月开始上传到 Play 商店的应用必须使用安卓应用打包格式 AAB。谷歌是在 2018 年推出 AAB 的，其背后动机是安卓支持的语言、CPU 架构和屏幕分辨率越来越多，单一的版本太占空间，因此通过提供多个 APK 文件集合，由 Play 商店根据相应的设备提供相应的特定 APK。但从 APK 切换到 AAB，谷歌对安卓生态系统有了[更大的控制](https://arstechnica.com/gadgets/2021/07/google-play-dumps-apks-for-the-more-google-controlled-android-app-bundle/)，因为 AAB 需要 Play 商店的云计算进行处理，增加了第三方应用商店的工作和困难。

>
> 假借技术之名的垄断之举，是谷歌对安卓的开放生态的收割。
>
>
>

### 暂缓废除第三方 cookie 后，谷歌提出第二种替代方案

![](/data/attachment/album/202107/03/174256vb6zhnqbbeh6ihz9.jpg)

在谷歌提出的 FLoC 方案遭到业界的联合反对之后，上周，谷歌提出暂缓废除第三方 cookie，允许它们存活到 2023 年底。现在，谷歌提案了一种新的“分区 cookies” 方案 [CHIPS](https://github.com/WICG/CHIPS)。该提案要求第三方服务器可以设置 Cookie，但只能在最初设置 Cookie 的第一方网站范围内读取，而不能在其它也设置该 Cookie 的网站中读取。

>
> 这个方案似乎不错，而且 FireFox 和 Safari 也实现了类似的方案。
>
>
>

### 多个托管服务提供商遭遇 REvil 供应链攻击

![](/data/attachment/album/202107/03/174313uhzbmgquggbgghvw.jpg)

[REvil 勒索软件团伙](https://www.bleepingcomputer.com/news/security/revil-ransomware-hits-200-companies-in-msp-supply-chain-attack/)又盯上了拥有数千名客户的多个大型托管服务提供商，大约有 200 家企业被加密。所有受影响的托管服务提供商都在使用 Kaseya VSA，且有证据表明他们的客户也受到了影响。Kaseya VSA 是一个基于云的 MSP 平台，允许提供商为客户执行补丁管理和客户端监控任务。Kaseya 在网站上发布了安全公告，警告所有 VSA 客户立即关闭他们的服务器，以防止事态的进一步蔓延。

>
> 利用供应链攻击进行的勒索攻击其影响广泛，目前看起来还没有特别好的方法。
>
>
>


“MAGFest 先生”专访：用 Python 和 Linux 进行音乐创作

Summary: 与 “MAGFest 先生” Brendan Becker 的对话。

>
> 与 “MAGFest 先生” Brendan Becker 的对话。
>
>
>

![](/data/attachment/album/202107/04/174833k7uvo4l5vov7umv4.jpg "Wires plugged into a network switch")

1999 年，我在一家计算机商店工作时遇到了 Brendan Becker。我们都喜欢构建定制计算机并在其上安装 Linux。Brendan 一直在同时参与着从游戏编程到音乐创作的多个技术项目。从那之后快进几年，他继续编写 [pyDance](http://icculus.org/pyddr/)，这是一个多舞种游戏的开源实现，然后成为了音乐和游戏项目 [MAGFest](http://magfest.org/) 的 CEO。他有时被称为 “MAGFest 先生”，因为他是该项目的负责人，Brendan 现在使用的音乐笔名是 “[Inverse Phase](http://www.inversephase.com/)”，是一位<ruby> 电子合音 <rt>  chiptune </rt></ruby>（主要在 8 位计算机和游戏机上创作的音乐）作曲家。

我认为采访并询问他在整个职业生涯中如何从 Linux 和开源软件中受益的一些细节会很有趣。

![Inverse Phase 表演照片](/data/attachment/album/202107/04/174853rmelmourjm8refes.png "Inverse Phase performance photo")

### 你是如何开始接触计算机和软件的？

Brendan Becker：从我记事起，我家就有一台电脑。我父亲热衷于技术；在康柏便携式电脑刚刚上市时，他就带了一台回家，当他不在上面工作时，我就可以使用它。由于我两岁时就开始阅读，使用电脑就成了我的第二天性——只要阅读磁盘上的内容，按照说明进行操作，我就可以玩游戏了！有时我会玩一些学习和教育软件，我们有几张装满游戏的磁盘，我可以在其他时间玩。我记得有一张磁盘，里面有一些流行游戏的免费副本。后来，我父亲向我展示了我们可以呼叫其他计算机（我 5 岁时就上了 BBS！），我看到了一些游戏来自那儿。我喜欢玩的一款游戏是用 BASIC 编写的，当我意识到我可以简单地修改游戏，只需阅读一些内容并重新输入它们游戏就会更轻松，玩游戏就没意思了。

### 这是上世纪 80 年代？

Becker：康柏便携式电脑于 1983 年推出，这可以给你一些参考。我爸爸有一个那个型号的初代产品。

### 你是如何进入 Linux 和开源软件的？

Becker：在上世纪 90 年代初，我酷爱 MOD 和<ruby> 演示场景 <rt>  demoscene </rt></ruby>之类的东西，我注意到 Walnut Creek（即 [cdrom.com](https://en.wikipedia.org/wiki/Walnut_Creek_CDROM)；现已解散）在 FreeBSD 上开设了商店。总的来说，我对 Unix 和其他操作系统非常好奇，但没有太多的第一手资料，我认为是时候尝试一些东西了。当时 DOOM 刚刚发布，有人告诉我，我可以试着在计算机上运行它。在这与能够运行很酷的互联网服务器之间，我开始陷入两难取舍。有人看到我在阅读有关 FreeBSD 的文章，并建议我了解一下 Linux，这是一个为 x86 重新编写的新操作系统，与 BSD 不同，（他们说）后者存在一些兼容性问题。因此，我加入了 undernet IRC 上的 #linuxhelp 频道，询问如何开始使用 Linux，并表明我已经做了一些研究（我已经能问出 “Red Hat 和 Slackware 之间有什么区别？”这样的问题），想知道什么是最容易使用的。频道里唯一说话的人说他已经 13 岁了，他都能弄明白 Slackware，所以我应该不会有问题。学校的一个数学老师给了我一个硬盘，我下载了 “A” 盘组和一个启动盘，写入到软盘，安装了它，回头看也并没有花太多时间。

### 你是如何被称为 “MAGFest 先生”的？

Becker：嗯，这个很简单。在第一个活动后，我几乎立即成为了 MAGFest 的代理负责人。前任主席都各奔东西，我向负责人要求不要取消活动。解决方案就是自己运营它，当我慢慢地将项目塑造成我自己的时，这个昵称就成了我的。

### 我记得我在早期参加过，MAGFest 最终变得有多大？

Becker：第一届 MAGFest 是 265 人。现在它超大，有两万多名不同的参与者。

### 太棒了！你能简要描述一下 MAGFest 大会吗？

Becker：我的一个朋友 Hex 描述得非常好。他说：“就像是和你所有的朋友一起举办这个以电子游戏为主题的生日派对，那里恰好有几千人，如果你愿意，他们都可以成为你的朋友，然后还有摇滚音乐会。” 这很快被采用并缩短为 “这是一个为期四天的电子游戏派对，有多场电子游戏摇滚音乐会”。通常 “音乐和游戏节” 这句话就能让人们明白这个意思。

### 你是如何利用开源软件来运行 MAGFest 的？

Becker：当我成为 MAGFest 的负责人时，我已经用 Python 编写了一个游戏，所以我觉得用 Python 编写我们的注册系统最舒服。这是一个非常轻松的决定，因为不涉及任何费用，而且我已经有了经验。后来，我们的在线注册系统和拼车界面都是用 PHP/MySQL 编写的，我们的论坛使用了 Kboard。最终，这发展到我们用 Python 从头开始编写了自己的注册系统，我们也在活动中使用它，并在主网站上运行 Drupal。有一次，我还用 Python 编写了一个系统来管理视频室和邀请比赛站。哦，我们有一些游戏音乐收听站，你可以翻阅标志性的游戏 OST（原始音轨）的曲目和简介，和演奏 MAGFest 的乐队。

### 我知道几年前你减少了你在 MAGFest 的职责，去追求新的项目。你接下来的努力是什么？

Becker：我一直非常投入游戏音乐领域，并试图将尽可能多的音乐带到 MAGFest 中。随着我越来越多地成为这些社区的一部分，我想参与其中。我使用以前用过的自由开源版本的 DOS 和 Windows 演示场景工具编写了一些视频游戏曲调的混合曲、封面和编曲，我以前使用过的这种工具也是免费的，但不一定是开源的。我在运行 MAGFest 的最初几年发布了一些曲目，然后在 Jake Kaufman（也被称为 `virt`；在他的简历之外也叫 Shovel Knight 和 Shantae）的一些严厉的关爱和建议之后，我改变主题到我更擅长的电子和音。尽管我小时候就用我的康柏便携式电脑编写了 PC 扬声器发出的哔哔啵啵声，并在 90 年代的演示场景中写过 MOD 文件，但我在 2006 年发布了第一首 NES 规格的曲目，我真的能很自豪地称之为我自己的作品。随后还有几张流行音乐的作品和专辑。

2010 年，有很多人找我做游戏配乐工作。尽管配乐工作对它没有太大影响，但我开始更认真地缩减我在 MAGFest 的一些职责，并且在 2011 年，我决定更多地进入幕后。我会留在董事会担任顾问，帮助人们了解他们需要什么来管理他们的部门，但我不再掌舵了。与此同时，我的兼职工作，即给我支付账单的工作，解雇了他们所有的工人，我突然发现自己有了很多空闲时间。我开始写《 Pretty Eight Machine》，这是一首向《Nine Inch Nails》致敬的作品，我在这个事情和游戏配乐工作之间花了一年多，我向自己证明了我可以用音乐来（即便只是勉强）维持生计，这就是我接下来想做的。

![Inverse Phase CTM Tracker](/data/attachment/album/202107/04/174854uw7qnw1aiqniqj99.png "Inverse Phase CTM Tracker")

*版权所有 Inverse Phase，经许可使用。*

### 就硬件和软件而言，你的工作空间是什么样的？

Becker：在我的 DOS/Windows 时代，我主要使用 FastTracker 2。在 Linux 中，我将其替换为 SoundTracker（不是 Karsten Obarski 的原始版本，而是 GTK 重写版本；参见 [soundtracker.org](http://soundtracker.org)）。近来，SoundTracker 处于不断变化的状态——虽然我仍然需要尝试新的 GTK3 版本——但是当我无法使用 SoundTracker 时，[MilkyTracker](http://www.milkytracker.org) 是一个很好的替代品。如果我真的需要原版 FastTracker 2，虽然老旧但它也可以在 DOSBox 中运行起来。然而，那是我开始使用 Linux 的时候，所以这是我在 20-25 年前发现的东西。

在过去的十年里，我已经从基于采样的音乐转向了电子和音，这是由来自 8 位和 16 位游戏系统和计算机的旧声音芯片合成的音乐。有一个非常好的跨平台工具叫 [Deflemask](http://www.deflemask.com)，可以为许多这些系统编写音乐。不过，我想为其创作音乐的一些系统不受支持，而且 Deflemask 是闭源的，因此我已经开始使用 Python 和 [Pygame](http://www.pygame.org) 从头开始构建自己的音乐创作环境。我使用 Git 维护我的代码树，并将使用开源的 [KiCad](http://www.kicad-pcb.org) 控制硬件合成器板。

### 你目前专注于哪些项目？

Becker：我断断续续地从事于游戏配乐和音乐委托工作。在此期间，我还一直致力于创办一个名为 [Bloop](http://bloopmuseum.com) 的电子娱乐博物馆。我们在档案和库存方面做了很多很酷的事情，但也许最令人兴奋的是我们一直在用树莓派构建展览。它们的用途非常广泛，而且我觉得很奇怪，如果我在十年前尝试这样做，我就不会有可以驱动我的展品的小型单板计算机；我可能会用把一个平板固定在笔记本电脑的背面！

### 现在有更多游戏平台进入 Linux，例如 Steam、Lutris 和 Play-on-Linux。你认为这种趋势会持续下去吗？这些会一直存在吗？

Becker：作为一个在 Linux 上玩了 25 年游戏的人——事实上，我 *是因为* 游戏才接触 Linux 的——我想我认为这个问题比大多数人认为的更艰难。我已经玩了 Linux 原生游戏几十年了，我甚至不得不对收回我当年说的“要么存在 Linux 解决方案，要么编写出来”这样的话，但最终，我做到了，我编写了一个 Linux 游戏。

说实话：Android 问世于 2008 年。如果你在 Android 上玩过游戏，那么你就在 Linux 上玩过游戏。Steam 在 Linux 已经八年了。Steambox/SteamOS 发布在 Steam 发布一年后。我没有听到太多 Lutris 或 Play-on-Linux 的消息，但我知道它们并希望它们成功。我确实看到 GOG 的追随者非常多，我认为这非常好。我看到很多来自 Ryan Gordon（icculus）和 Ethan Lee（flibitijibibo）等人的高质量游戏移植，甚至有些公司在内部移植。Unity 和 Unreal 等游戏引擎已经支持 Linux。Valve 已经将 Proton 纳入 Linux 版本的 Steam 已有两年左右的时间了，所以现在 Linux 用户甚至不必搜索他们游戏的 Linux 原生版本。

我可以说，我认为大多数游戏玩家期待并将继续期待他们已经从零售游戏市场获得的支持水平。就我个人而言，我希望这个水平是增长而不是下降！

*详细了解 Brendan 的 [Inverse Phase](https://www.inversephase.com) 工作。*

---

via: <https://opensource.com/article/20/2/linux-open-source-music>

作者：[Alan Formy-Duval](https://opensource.com/users/alanfdoss) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

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


在 Linux 和 FreeDOS 之间复制文件

>
> 下面是我如何在我的 FreeDOS 虚拟机和 Linux 桌面系统之间传输文件。
>
>
>

![](/data/attachment/album/202107/04/181327bfvv3mmzby9z2dpr.jpg "Files in a folder")

我运行 Linux 作为我的主要操作系统，我在一个虚拟机中启动 FreeDOS。大多数时候，我使用 QEMU 作为我的 PC 模拟器，但有时我会用 GNOME Boxes（它使用 QEMU 作为后端虚拟机）或用 VirtualBox 运行其他实验。

我喜欢玩经典的 DOS 游戏，有时我也会调出一个最喜欢的 DOS 应用。我在管理信息系统（MIS）课上讲计算机的历史，有时我会用 FreeDOS 和一个传统的 DOS 应用录制一个演示，比如 As-Easy-As（我最喜欢的 DOS 电子表格，曾经作为“共享软件”发布，但现在可以 [从 TRIUS 公司免费获得](http://www.triusinc.com/forums/viewtopic.php?t=10)）。

但是以这种方式使用 FreeDOS 意味着我需要在我的 FreeDOS 虚拟机和我的 Linux桌 面系统之间传输文件。让我来展示是如何做到这一点的。

### 用 guestmount 访问镜像

我曾经通过计算第一个 DOS 分区的偏移量来访问我的虚拟磁盘镜像，然后用正确的选项组合来调用 Linux 的 `mount` 命令来匹配这个偏移量。这总是很容易出错，而且不是很灵活。幸运的是，有一个更简单的方法可以做到这一点。来自 [libguestfs-tools](https://libguestfs.org/) 包的 `guestmount` 程序可以让你从 Linux 中访问或 *挂载* 虚拟磁盘镜像。你可以在 Fedora 上用这个命令安装 `libguestfs-tools`：

```
$ yum install libguestfs-tools libguestfs

```

使用 `guestmount` 并不像从 GNOME 文件管理器中双击文件那么简单，但命令行的使用并不难。`guestmount` 的基本用法是：

```
$ guestmount -a image -m device mountpoint

```

在这个用法中，`image` 是要使用的虚拟磁盘镜像。在我的系统中，我用 `qemu-img` 命令创建了 QEMU 虚拟磁盘镜像。`guestmount` 程序可以读取这种磁盘镜像格式，以及 GNOME Boxes 使用的 QCOW2 镜像格式，或者 VirtualBox 使用的 VDI 镜像格式。

`device` 选项表示虚拟磁盘上的分区。想象一下，把这个虚拟磁盘当作一个真正的硬盘使用。你可以用 `/dev/sda1` 访问第一个分区，用 `/dev/sda2` 访问第二个分区，以此类推。这就是 `guestmount` 的语法。默认情况下，FreeDOS 1.3 RC4 在一个空的驱动器上创建了一个分区，所以访问这个分区的时候要用 `/dev/sda1`。

而 `mountpoint` 是在你的本地 Linux 系统上“挂载” DOS 文件系统的位置。我通常会创建一个临时目录来工作。你只在访问虚拟磁盘时需要挂载点。

综上所述，我使用这组命令从 Linux 访问我的 FreeDOS 虚拟磁盘镜像：

```
$ mkdir /tmp/freedos
$ guestmount -a freedos.img -m /dev/sda1 /tmp/freedos

```

之后，我可以通过 `/tmp/freedos` 目录访问我的 FreeDOS 文件，使用 Linux 上的普通工具。我可以在命令行中使用 `ls /tmp/freedos`，或者使用桌面文件管理器打开 `/tmp/freedos` 挂载点。

```
$ ls -l /tmp/freedos
total 216
drwxr-xr-x. 5 root root 8192 May 10 15:53 APPS
-rwxr-xr-x. 1 root root 85048 Apr 30 07:54 COMMAND.COM
-rwxr-xr-x. 1 root root  103 May 13 15:48 CONFIG.SYS
drwxr-xr-x. 5 root root 8192 May 15 16:52 DEVEL
drwxr-xr-x. 2 root root 8192 May 15 13:36 EDLIN
-rwxr-xr-x. 1 root root 1821 May 10 15:57 FDAUTO.BAT
-rwxr-xr-x. 1 root root  740 May 13 15:47 FDCONFIG.SYS
drwxr-xr-x. 10 root root 8192 May 10 15:49 FDOS
-rwxr-xr-x. 1 root root 46685 Apr 30 07:54 KERNEL.SYS
drwxr-xr-x. 2 root root 8192 May 10 15:57 SRC
-rwxr-xr-x. 1 root root 3190 May 16 08:34 SRC.ZIP
drwxr-xr-x. 3 root root 8192 May 11 18:33 TEMP

```

![GNOME file manager](/data/attachment/album/202107/04/181333y8zys7s11kz3s8i1.png "Using GNOME file manager to access the virtual disk")

*使用 GNOME 文件管理器来访问虚拟磁盘*

例如，要从我的 Linux `projects` 目录中复制几个 C 源文件到虚拟磁盘镜像上的 `C:\SRC`，以便我以后能在 FreeDOS 下使用这些文件，我可以使用 Linux `cp` 命令：

```
$ cp /home/jhall/projects/*.c /tmp/freedos/SRC

```

虚拟驱动器上的文件和目录在技术上是不分大小写的，所以你可以用大写或小写字母来引用它们。然而，我发现使用所有大写字母来输入 DOS 文件和目录更为自然。

```
$ ls /tmp/freedos
APPS     CONFIG.SYS EDLIN    FDCONFIG.SYS KERNEL.SYS SRC.ZIP
COMMAND.COM DEVEL    FDAUTO.BAT FDOS     SRC     TEMP

$ ls /tmp/freedos/EDLIN
EDLIN.EXE MAKEFILE.OW

$ ls /tmp/freedos/edlin
EDLIN.EXE MAKEFILE.OW

```

### 用 guestmount 卸载

在你再次在虚拟机中使用虚拟磁盘镜像之前，你应该总是先 *卸载*。如果你在运行 QEMU 或 VirtualBox 时让镜像挂载，你有可能弄乱你的文件。

与 `guestmount` 配套的命令是 `guestunmount`，用来卸载磁盘镜像。只要给出你想卸载的挂载点就可以了：

```
$ guestunmount /tmp/freedos

```

请注意命令拼写与 Linux 的 `umount` 稍有不同。

---

via: <https://opensource.com/article/21/6/copy-files-linux-freedos>

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


硬核观察 #322 Bitcoin.org 败诉，需支付“中本聪” 35,000 英镑

Summary: 更多：• 古老的编程语言正面临人才青黄不接 • “天河”E级验证系统获得图计算领域两项世界第一

Craig Wright好无耻。

![](/data/attachment/album/202107/04/192634qaa83oaow1s4z383.jpg)

### Bitcoin.org 败诉，需支付“中本聪” 35,000 英镑

![](/data/attachment/album/202107/04/192722frz0exscjbcwv50b.jpg)

英国高等法院[裁决](https://markets.businessinsider.com/currencies/news/bitcoin-creator-satoshi-nakamoto-uk-court-cobra-copyright-craig-wright-2021-6)，[Bitcoin.org](http://bitcoin.org/) 不能再在其网站上分享发布于 2008 年的《[比特币白皮书](https://bitcoin.org/bitcoin.pdf)》，Craig Wright 声称是该文件的原始作者“中本聪”。[Bitcoin.org](http://bitcoin.org/) 的匿名创始人 Cobra 因为担心暴露身份而没有出席法院辩论，所以 Wright 以默认方式赢得了他提起的版权侵权案件。因此，[Bitcoin.org](http://bitcoin.org/) 必须支付 35,000 英镑的法律费用，并在其网站上发布法院命令的通知，为期六个月。

>
> 这么说，在英国《比特币白皮书》的使用要看“版权方”的脸色了。
>
>
>

### 古老的编程语言正面临人才青黄不接

![](/data/attachment/album/202107/04/192720kiay0jgdsj6rhhsd.jpg)

许多大型组织仍在依赖陈旧的 IT 系统和编程语言来支撑大型机的运转。但随着老一代开发者到了退休年龄，行业内正面临着人才青黄不接的尴尬局面。这些系统通常以诞生于 1959 年的 COBOL 等编程语言为基础，目前仍被许多大型组织广泛用于处理某些重要的中央系统数据，比如计费、账户、工资单和客户交易。比如，美国财政部国税局的“六号系统”，正是用汇编程序和 COBOL 语言来管理包含纳税人在内的各种数据的。

在 [Advanced Software 调查](https://modernsystems.oneadvanced.com/modernization2021/)的 400 家组织中，有 3/4 表示 COBOL 仍是其大型机应用中最主要的依赖语言，66% 的大型企业仍在使用汇编程序，其它主要语言包括 ADS/Online（40%）、CA Gen（37%）、CA Telon（24%）、以及 PL/1（15%）。

>
> 套用一句运维潜规则，“能运行的就不要去动”。越是老旧的系统和平台，越是没人敢碰。
>
>
>

### “天河”E级验证系统获得图计算领域两项世界第一

![](/data/attachment/album/202107/04/192726rr44nt58rpz2m84s.jpg)

据新华网报道，由国防科技大学研制，部署在国家超级计算天津中心的“天河”E级（百亿亿次）计算机关键技术验证系统，在 7 月 1 日发布的国际 Graph500 排名中，获得单源最短路径榜单世界第一和大数据图计算能效榜单世界第一的佳绩。

国家超级计算天津中心也是我国首个千万亿次超算“天河一号”部署所在地。

>
> 可喜可贺，榜单排名是一方面，希望可以在实际研究中取得重要应用。
>
>
>