硬核观察 #456 中国科学家否定谷歌的量子霸权

Summary: 更多：• IBM 称量子计算取得突破 • Windows 11 更新恢复蓝屏死机

![](/data/attachment/album/202111/15/200037gbxx003979005zm5.jpg)

### 中国科学家否定谷歌的量子霸权

![](/data/attachment/album/202111/15/200052z8oniqqqojqbcoeq.jpg)

2019 年 10 月，Google 宣布它的悬铃木量子计算机第一个实现了量子霸权，它在 3 分 20 秒内完成了一项任务，同样的任务当时最强的经典超算 ——IBM 的 Summit 需要花 10000 年。但这个 10000 年的说法受到了质疑，中国科学家 [表示](https://www.scmp.com/news/china/science/article/3155902/chinese-teams-classical-computing-tackles-impossible-challenge) ，在经典计算机“使用了 512 个 GPU，在大约 15 个小时内”完成了对谷歌悬铃木量子电路的模拟，而且保真度高于它。而如果在最新的 exaFLOP 超算上实现，原则上整体模拟时间可以减少到几十秒。

>
> 老王点评：虽然对悬铃木的质疑来的有点晚，但是中国在超算和量子计算机方面的进步有目共睹。
>
>
>

### IBM 称量子计算取得突破

![](/data/attachment/album/202111/15/200115tqmurmipnaryu1pm.jpg)

IBM 称它的新 Eagle 处理器能处理 [127 个量子比特](https://www.axios.com/ibm-quantum-computing-axios-hbo-bd9d50b7-3c11-4586-bdb1-8bbc9928ad1b.html)，突破 100 量子比特就使得量子计算超过了传统计算机的能力。IBM CEO 认为量子计算能在数年内展现实力，但其他人认为至少需要十年。他说，虽然不能解决所有问题，但“你无法在经典计算机上完成这台计算机能做的工作。这需要一台比这个星球还大的普通计算机才能做到。”

>
> 老王点评：真是进入了量子竞赛时代，到底谁能将量子计算机步入实用，必然取得压倒性的胜利。
>
>
>

### Windows 11 恢复蓝屏死机

![](/data/attachment/album/202111/15/200125sboizkckh0ikw44i.jpg)

微软最近向测试渠道推送了 Windows 11 的补丁。值得注意的变化是黑屏死机变回 [蓝屏死机](https://arstechnica.com/gadgets/2021/11/next-windows-11-update-makes-the-blue-screen-of-death-blue-again/)（BSOD）。蓝屏死机已成为 Windows 操作系统的一个标志性错误，但上个月发布的 Windows 11 将系统崩溃时的颜色从原来的蓝色变成了黑色，最新更新又改了回去。

>
> 老王点评：还是习惯蓝屏死机，毕竟黑着屏幕没那么刺眼。
>
>
>


如何用 JavaScript 构建命令行应用

>
> 为你的用户提供选项是任何应用的一个重要功能，而 Commander.js 使它变得容易做到。你最喜欢的 JavaScript 命令行构建器是什么？
>
>
>

![](/data/attachment/album/202111/16/114501u11upndpphhu2uhh.jpg "Javascript code close-up with neon graphic overlay")

JavaScript 是一种为 Web 开发的语言，但它的用处已经远远超出了互联网的范畴。由于 Node.js 和 Electron 这样的项目，JavaScript 既是一种通用的脚本语言，也是一种浏览器组件。有专门设计的 JavaScript 库来构建命令行界面。是的，你可以在你的终端中运行 JavaScript。

现在，当你在终端中输入一个命令时，一般都有 [选项](https://opensource.com/article/21/8/linux-terminal)，也叫 *开关* 或 *标志*，你可以用来修改命令的运行方式。这是由 [POSIX 规范](https://opensource.com/article/19/7/what-posix-richard-stallman-explains) 定义的一个有用的惯例，所以作为一个程序员，知道如何检测和解析这些选项是很有帮助的。要从 JavaScript 获得此功能，使用旨在简化构建命令行界面的库很有用。我最喜欢的是 [Commander.js](https://github.com/tj/commander.js)。它很简单，很灵活，而且很直观。

### 安装 node

要使用 Commander.js 库，你必须安装 Node.js。在 Linux 上，你可以用你的包管理器安装 Node。例如，在 Fedora、CentOS、Mageia 和其他系统上：

```
$ sudo dnf install nodejs

```

在 Windows 和 macOS 上，你可以 [从 nodejs.org 网站下载安装程序](https://nodejs.org/en/download)。

### 安装 Commander.js

要安装 Commander.js，请使用 `npm` 命令：

```
$ npm install commander

```

### 在你的 JavaScript 代码中添加一个库

在 JavaScript 中，你可以使用 `require` 关键字在你的代码中包含（或者导入，如果你习惯于 Python）一个库。创建一个名为 `example.js` 的文件，并在你喜欢的文本编辑器中打开它。在顶部添加这一行，以包括 Commander.js 库：

```
const { program } = require('commander');

```

### JavaScript 中的选项解析

要解析选项，你必须做的第一件事是定义你的应用可以接受的有效选项。Commander.js 库可以让你定义短选项和长选项，同时还有一个有用的信息来澄清每个选项的目的。

```
program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
  .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

```

第一个选项，我称之为 `--alpha`（简写 `-a`），是一个布尔型开关：它要么存在，要么不存在。它不需要任何参数。第二个选项，我称之为 `--beta`（简写 `-b`），接受一个参数，甚至在你没有提供任何参数的情况下指定一个默认值。

### 访问命令行数据

当你定义了有效的选项，你就可以使用长的选项名称来引用这些值：

```
program.parse();

const options = program.opts();
console.log('Options detected:');

if (options.alpha) console.log('alpha');

const beta = !options.beta ? 'no' : options.beta;
console.log('beta is: %s', beta);

```

### 运行应用

试着用 `node` 命令来运行它，首先不使用选项：

```
$ node ./example.js
Options detected:
beta is: Foo

```

在用户没有覆盖的情况下，`beta` 的默认值被使用。

再次运行它，这次使用选项：

```
$ node ./example.js --beta hello --alpha
Options detected:
alpha
beta is: hello

```

这次，测试脚本成功检测到了选项 `--alpha`，以及用户提供的 `--beta` 选项的值。

### 选项解析

下面是完整的演示代码供你参考：

```
const { program } = require('commander');

program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
    .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

program.parse();

const options = program.opts();
console.log('Options detected:');

console.log(typeof options);

if (options.alpha) console.log(' * alpha');
const beta = !options.beta ? 'no' : options.beta;
console.log(' * beta is: %s', beta);

```

在该项目的 [Git 仓库](https://github.com/tj/commander.js) 中还有更多例子。

对任何应用来说，包括用户的选项都是一个重要的功能，而 Commander.js 使它很容易做到。除了 Commander.js，还有其他库，但我觉得这个库使用起来很方便快捷。你最喜欢的 JavaScript 命令行构建器是什么？

---

via: <https://opensource.com/article/21/11/javascript-command-line-apps>

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


7 个好玩的 Linux 命令

Summary: 这些好玩的 Linux 命令也有它的用处。

kubuntu的确比Ubuntu好用，Ubuntu合盖再打开就是黑屏，虽然可以让它合盖继续运行，但kubuntu，就没有这个问题

cat可不是catch

应该是concatenate，意思是 连接

你man cat一下就能看到解释

这些好玩的 Linux 命令也有它的用处。

>
> 这些好玩的 Linux 命令也有它的用处。
>
>
>

![](/data/attachment/album/202111/16/164838m35s5q81t353sxq3.jpg "Woman sitting in front of her laptop")

Linux 的命令行可以说是资深用户和系统管理员的小窝。然而，Linux 不仅仅是大量的枯燥工作。Linux 是由爱玩的人开发的，他们还创造了一系列搞笑的命令。当你想轻松一下的时候，就可以自己试着这些。

### 蒸汽机车

随便什么时候，你可以使用 `sl` 命令使一辆<ruby> 蒸汽机车 <rt>  Steam Locomotive </rt></ruby>在你的终端上跑过。可以用你的软件包管理器安装这辆蒸汽机车。例如，在 Fedora 上可以这样：

```
$ sudo dnf install sl

```

![由符号和字符组成的蒸汽机车引擎图](/data/attachment/album/202111/16/164846dtk5uxc1u4l1xkmt.png "Steam locomotive")

#### 实际用途

据我所知，`sl` 命令确实只是为了好玩。你对 `sl` 有什么有趣的用途吗？请在评论中告诉我。

（LCTT 译注：`sl` 的实际用途就是提醒你 `ls` 打错了。?）

### 壁炉

点燃一座壁炉来温暖你的心和你的终端吧，`aafire` 命令会播放一段壁炉的动画。你可以用你的软件包管理器安装 `aafire`。在 Debian、Mint、 Elementary 之类的发行版上：

```
$ sudo apt install libaa-bin

```

在 Fedora、CentOS 之类的发行版：

```
$ sudo dnf install aalib

```

![由文字符号和字符组成的火的黑白图像](/data/attachment/album/202111/16/164846hwa9qabggbtbtwgj.png "fireside")

#### 实际用途

这个动画是向你的团队或老板传达一切即将化为乌有的微妙方式。

### 是的

你可以使用 `yes` 命令打印出一串文字，直到用 `Ctrl+C` 强行停止。例如，我是一个 Buffalo Bills 的球迷，所以我选择用 `yes` 命令打印出一串无尽的 “Buffalo Bills”：

```
$ yes Buffalo Bills

```

![画面上重复显示的是一行行 Buffalo Bills（左侧边缘略微被切断）](/data/attachment/album/202111/16/164847beg25y5da7dag4im.png "Yes command")

#### 实际用途

你可以用这个命令来向脚本输送确认信息，这样，当脚本停顿下来要求确认时，它就会自动收到 `yes`。例如，想象一下，你运行的一个脚本经常停下来问你确认：

```
$ foo
Are you sure you want to do this? Y/n  Y
Are you really sure? y/N  Y
But are you really? y/N

```

你可以通过向命令传递 `yes` 来自动接受这些信息：

```
$ yes | foo

```

另外，你也可以用 `yes` 来自动拒绝信息：

```
$ yes no | foo

```

### 命运

通过安装 `fortune` 命令，你可以就可以得到命运的指点。`fortune` 会打印出一段随机的、可能有意义的话语（LCTT 译注：来自命运的指点）。

用你的软件包管理器安装 `fortune`：

```
$ sudo apt install fortune

```

在 Fedora 上：

```
$ sudo dnf install fortune-mod

```

命运命令有许多数据集，它可以从中提取各种话语。例如，你可以从文学作品或科幻电视节目 《Firefly》中获得名人名言，或者从笑话、关于 Linux 的技巧等中选择。在你的资源库中搜索 `fortune`，看看你的发行版提供了哪些数据集。

```
$ fortune
Johnson's law:
  Systems resemble the organizations that create them.

```

#### 实际用途

你可以用命运来生成一个伪随机数。没有足够的熵来使它在密码学上安全，但当你需要一个意外的数字时，你可以用来计算字符或单词：

```
$ fortune | wc --chars
38
$ fortune | wc --words
8
$ fortune | wc --chars
169

```

### 彩虹猫

彩虹猫（`lolcat`）是一个将文件或标准输入连接到标准输出的程序（就像一般的 `cat` 命令），并在其中加入彩虹色。你可以用管道将其他命令的输出连接到 `lolcat`，这样就可以为结果加上彩虹色。

下面是 `lolcat -h` 的帮助输出的结果。

![屏幕上的文字被染成了彩虹的渐变色](/data/attachment/album/202111/16/164847mnzrh0rnhz0llenq.png "lolcat")

（LCTT 译注：我知道 `cat` 是 `catch`。）

### “FIG 来信”和横幅

“FIG 来信”（FIGlet）来源于 Frank、Ian 和 Glenn 信件中的签名艺术。这个命令（`figlet`）和横幅命令（`banner`）可以帮你创建简单的 ASCII 文本横幅。下面是一个 CentOS 系统的文本横幅：

```
$ figlet centos.com

```

![由符号和字符组成的阅读 “centos.com” 的文本横幅](/data/attachment/album/202111/16/164847yu3vwh3242pv5m18.png "figlet text banner")

将 `figlet` 连接到 `lolcat`，可以得到一个彩色的横幅：

```
$ figlet centos.com | lolcat

```

![用 lolcat 将 “centos.com” 的文字横幅渲染成彩虹色](/data/attachment/album/202111/16/164848ykcl3zl2kjs9cx34.png "Figlet with lolcat effects")

```
$ banner Hello World

```

![用英镑符号拼出的 “Hello World” 横幅](/data/attachment/album/202111/16/164848c0y2sqif4sqza3ia.png "Hello World banner")

#### 实际用途

`figlet` 和 `banner` 都是提醒用户他们正在登录的系统的简单方法。就像许多系统管理员、网页设计师和云开发人员一样，当你和几十台服务器一起工作时，这很有帮助。

### 电子语音

你可以通过安装电子语音（`espeak`）来为你的命令行添加语音功能。

一旦 `espeak` 安装完毕，调高你的电脑的音量，听你的机器和你说话，会有一些乐趣。电子语音是一个软件语音合成器，有几个不同的语音库可用：

```
$ espeak "Linux is the best operating system.”

```

### 有趣的命令

请查阅所有这些命令的手册，以探索所有的可能性和变化。你最喜欢哪些好玩的命令，它们在现实世界中是否也有用途？请在评论中分享你的最爱。

---

via: <https://opensource.com/article/21/11/fun-linux-commands>

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

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


硬核观察 #457 新的“行锤”攻击打破了 DDR4 内存保护

Summary: 更多：• 英特尔 4004 微处理器推出 50 周年 • 因文字太难输入，Facebook Messenger 五成语音流量来自柬埔寨

“行锤”肯定是DDR5搞的

![](/data/attachment/album/202111/16/185135ah6h1l6gikdgwndd.jpg)

### 新的“行锤”攻击打破了 DDR4 内存保护

![](/data/attachment/album/202111/16/185150uauqfpfiq5uy5zad.jpg)

“<ruby> 行锤 <rt>  Rowhammer </rt></ruby>”攻击是通过每秒数百万次访问（或者说锤打）脆弱芯片内的物理行，导致相邻行的比特翻转，这意味着 1 变成 0，0 变成了 1。一个没有特权的应用程序可以通过每秒数百万次以特定模式访问 DDR 内存的“行锤”来破坏内存中的数据，从而 [获得系统特权](https://arstechnica.com/gadgets/2021/11/ddr4-memory-is-even-more-susceptible-to-rowhammer-attacks-than-anyone-thought/)。这个漏洞已经在 2015 年被发现，对 DDR3 造成了严重影响后，在 DDR4 中有所缓解。以前的“行锤”攻击都是以统一的模式锤击行，这些“攻击者”行被访问的次数相同。而 [新发表的研究](https://comsec.ethz.ch/research/dram/blacksmith/) 中使用了非均匀模式，以不同的频率访问两个或更多的攻击者行。结果是：在一个测试池中，所有 40 个随机选择的 DIMM 都经历了比特翻转。

>
> 老王点评：如果这个攻击技术被武器化，那所有使用 DDR 内存的计算机都处于被攻击的阴影笼罩之下。
>
>
>

### 英特尔 4004 微处理器推出 50 周年

![](/data/attachment/album/202111/16/185230uj5m87ka7al54a5z.jpg)

[1971 年 11 月 15 日](https://www.wsj.com/articles/the-chip-that-changed-the-world-microprocessor-computing-transistor-breakthrough-intel-11636903999) 英特尔推出的 4004 微处理器仅使用了 2,300 个晶体管，一次可在芯片中运行四位数据。这种半英寸长的矩形集成电路的时钟速度为 750 kHz，每秒可进行约 92,000 次运算。英特尔于 1972 年推出有 3,500 个晶体管的八位的 8008；1978 年推出有 29,000 个晶体管的十六位的 8086，每秒可进行 710,000 次运算。IBM 将下一代的英特尔 8088 用于其首款 PC。而如今，苹果新的 M1 Max 处理器有 570 亿个晶体管，每秒可执行 10.4 万亿次浮点运算。这意味着计算机能力在 50 年内至少提高了 10 亿倍。

>
> 老王点评：50 年对于人类历史来说是短短一瞬间，但是这小小的芯片却整个改变了世界。
>
>
>

### 因文字太难输入，Facebook Messenger 五成语音流量来自柬埔寨

![](/data/attachment/album/202111/16/185207nank7aj8jcq1ai7b.jpg)

2018 年 Facebook 工程师注意到了一个令他们不解的现象：Messenger 近五成语音流量 [来自柬埔寨](https://www.indiatimes.com/technology/news/50-percent-voice-messaging-traffic-facebook-messenger-cambodia-554079.html)。高棉语有 74 个字符，比大部分文字都多。高棉语在每个键位都有两个字符，需要在两个按键层反复切换。因此在柬埔寨人们大量使用语音，虽然后来高棉语输入法也得到了改善。当然，语音沟通的不便之处就是没法快速搜索，只能根据语音条长短大致记忆。

>
> 老王点评：还好我们的中文输入法比较好，或者说拼音普及的好，要不中文输入更难。
>
>
>


入门：如何更改 Ubuntu 的终端的字体和大小

![](/data/attachment/album/202111/17/132645otre44u7ge68tzzb.jpg)

如果你在 Ubuntu 上使用终端的时间很长，你可能会希望调整终端的字体和大小以获取一种良好的体验。

更改字体是一种最简单但最直观的 [Linux 的终端自定义](https://itsfoss.com/customize-linux-terminal/) 的方法。让我向你展示在 Ubuntu 中更改终端的字体的详细步骤，以及一些字体选择的提示和建议。

注意：这些步骤可能也对大多数的其它的 [Linux 的终端模拟器](https://itsfoss.com/linux-terminal-emulators/) 有效，但是你访问选项的方法可能会有所不同。

### 使用 GUI 更改 Ubuntu 的终端的字体和大小

**步骤 1.** [在 Ubuntu 中打开终端窗口](https://itsfoss.com/open-terminal-ubuntu/) ，方法是按 `Ctrl+Alt+T` 组合键。

**步骤 2.** 打开终端“<ruby> 首选项 <rt>  Preferences </rt></ruby>”。你可以单击菜单按钮来找到它。

![](/data/attachment/album/202111/17/132703fn9cbztcnxkcz9nb.png)

你也可以右击终端屏幕的任意位置来访问首选项，如下图所示。

![](/data/attachment/album/202111/17/132703hutffu35dt33y2dn.png)

**步骤 3.** 现在，你应该能够访问针对终端的设置。在默认情况下，在这里将会有一个未命名的配置文件。这就是默认的配置文件。**我建议创建一个新的配置文件**，以便你的更改不会影响默认的设置。

![](/data/attachment/album/202111/17/132705njh4ng0qzq40iex2.png)

**步骤 4.** 为了更改字体，你需要启用“<ruby> 自定义字体 <rt>  Custom font </rt></ruby>” 选项，接下来单击 “**Monospace Regular**” 。

![](/data/attachment/album/202111/17/132707ityaczde00izm5qi.png)

它将显示针对这个选项的可用的一个字体列表。

![](/data/attachment/album/202111/17/132709utjbejwrz9ziddw8.png)

在这里，你可以在字体列表的底部快速预览字体，也可以调整你的 Ubuntu 的终端的字体大小。

在默认情况下，字体的大小是 **12** ，字体的样式是 **Ubuntu mono** 。

**步骤 5.** 最后，你也可以搜索你喜欢的字体样式，并在查看预览和调整字体大小后，通过点击 “<ruby> 选择 <rt>  Select </rt></ruby>” 来完成更改字体。

![](/data/attachment/album/202111/17/132710tcc4xlbc1dp9ccel.png)

这就是全部的步骤。你已经成功地更改字体。在下面的图像中查看更改。移动划款来查看不同点。

![Ubuntu terminal font change](/data/attachment/album/202111/17/132711bouvync3nbbilcx3.png)

### 获取针对 Ubuntu 的终端的新字体的提示

你可以中从因特网上下载 TTF 格式的字体文件，右击这些 TTF 文件 [可以很容易在 Ubuntu 中安装这些新的字体](https://itsfoss.com/install-fonts-ubuntu/) 。

![](/data/attachment/album/202111/17/132713n22572i7gdi274ii.png)

你可以打开一个新的终端窗口来加载新安装的字体。

不过，请记住，**Ubuntu 不会在终端中显示所有新安装的字体**。为什么？因为终端已经被分配使用 monospaced 字体。如果字体中字母间靠得很近的，那看起来就很诡异了。一些字体不能清晰区分字母 “o” 和数字 “0” 。同样，你也可能面临区分小写字母 “l” 和小写字母 “i” 的难题。

这就是为什么你会在终端中所看到的字体的名称中通常会带有 “mono” 的原因。

一般来说，在字体方面可能会有很多可读性难题，这可能会造成更加混乱的局面。因此，最好选择一种不会在终端上使人难易阅读的字体。

你还应该检查在你增大/减少字体大小期间该字体是否看起来良好/诡异，以确保在你自定义你的终端时没有问题。

### 针对终端自定义的字体建议

Free mono 和 Noto mono 是默认字体选择列表中可用的一些好字体，可应用于你的终端。

你可以尝试 [在 Linux 中安装新的字体](https://itsfoss.com/install-fonts-ubuntu/) ，像 **JetBrains Mono** 、**Robo Mono** 、Larabiefont 、Share Tech Mono 以及来自 Google 和其它来源的字体。

你喜欢在 Ubuntu 的终端上使用什么样的字体和大小？请在下面的评论区告诉我们！

---

via: <https://itsfoss.com/change-terminal-font-ubuntu/>

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

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


如何打包你的 Python 代码

Summary: 使用 setuptools 来向用户交付 Python 代码。

>
> 使用 setuptools 来向用户交付 Python 代码。
>
>
>

![](/data/attachment/album/202111/17/180249s8s1cnnn18gh3fsk.jpg "Python programming language logo with question marks")

你花了几周的时间来完善你的代码。你已经对它进行了测试，并把它发送给一些亲近的开发者朋友以保证质量。你已经将所有的源代码发布在 [你的个人 Git 服务器](https://opensource.com/life/16/8/how-construct-your-own-git-server-part-6) 上，并且从一些勇敢的早期使用者收到了一些有用的错误报告。现在你已经准备好将你的 Python 代码提供给全世界。

就在这时你遇到一个问题。你不知道如何交付产品。

将代码交付给它的目标用户是一件大事。这是软件开发的一个完整的分支，是 CI/CD 中的 “D”，但很多人都忘记了，至少到最后才知道。我写过关于 [Autotools](https://opensource.com/article/19/7/introduction-gnu-autotools) 和 [Cmake](https://opensource.com/article/21/5/cmake) 的文章，但有些语言有自己的方法来帮助你将你的代码提供给用户。对于 Python 来说，向用户提供代码的一个常见方法是使用 `setuptools`。

### 安装 setuptools

安装和更新 `setuptools` 的最简单方法是使用 `pip`：

```
$ sudo python -m pip install --upgrade setuptools

```

### 示例库

我创建了一个简单的 Python 库，名为 `myhellolib`，来作为需要打包的示例代码。这个库接受一个字符串，然后用大写字母打印出这个字符串。

它只有两行代码，但项目结构很重要，所以首先创建目录树：

```
$ mkdir -p myhellolib.git/myhellolib

```

为了确认这个项目是一个可导入的库（即 Python “模块”），在代码目录中创建一个空文件 `__init__.py`，同时创建一个包含代码的文件：

```
$ touch myhellolib.git/myhellolib/__init__.py
$ touch myhellolib.git/myhellolib/myhellolib.py

```

在 `myhellolib.py` 文件中，输入简单的 Python 代码：

```
def greeter(s):
    print(s.upper())

```

这就是写好的库。

### 测试它

在打包之前，测试一下你的库。创建一个 `myhellolib.git/test.py` 文件并输入以下代码：

```
import myhellolib.myhellolib as hello
hello.greeter("Hello Opensource.com.")

```

运行该脚本：

```
$ cd myhellolib.git
$ python ./test.py
HELLO OPENSOURCE.COM

```

它可以工作，所以现在你可以把它打包了。

### Setuptools

要用 `setuptools` 打包一个项目，你必须创建一个 `.toml` 文件，将 `setuptools` 作为构建系统。将这段文字放在项目目录下的 `myhellolib.toml` 文件中。

```
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

```

接下来，创建一个名为 `setup.py` 的文件，包含项目的元数据：

```
from setuptools import setup

setup(
   name='myhellolib',
   version='0.0.1',
   packages=['myhellolib'],
   install_requires=[
      'requests',
      'importlib; python_version == "3.8"',
   ],
)

```

不管你信不信，这就是 `setuptools` 需要的所有设置。你的项目已经可以进行打包。

### 打包 Python

要创建你的 Python 包，你需要一个构建器。一个常见的工具是 `build`，你可以用 `pip` 安装它：

```
$ python -m pip install build --user

```

构建你的项目：

```
$ python -m build

```

过了一会儿，构建完成了，在你的项目文件夹中出现了一个新的目录，叫做 `dist`。这个文件夹包含一个 `.tar.gz` 和一个 `.whl` 文件。

这是你的第一个 Python 包! 下面是包的内容：

```
$ tar --list --file dist/myhellolib-0.0.1.tar.gz
myhellolib-0.0.1/
myhellolib-0.0.1/PKG-INFO
myhellolib-0.0.1/myhellolib/
myhellolib-0.0.1/myhellolib/__init__.py
myhellolib-0.0.1/myhellolib/myhellolib.py
myhellolib-0.0.1/myhellolib.egg-info/
myhellolib-0.0.1/myhellolib.egg-info/PKG-INFO
myhellolib-0.0.1/myhellolib.egg-info/SOURCES.txt
myhellolib-0.0.1/myhellolib.egg-info/dependency_links.txt
myhellolib-0.0.1/myhellolib.egg-info/requires.txt
myhellolib-0.0.1/myhellolib.egg-info/top_level.txt
myhellolib-0.0.1/setup.cfg
myhellolib-0.0.1/setup.py

$ unzip -l dist/myhellolib-0.0.1-py3-none-any.whl
Archive:  dist/myhellolib-0.0.1-py3-none-any.whl
Name
----
myhellolib/__init__.py
myhellolib/myhellolib.py
myhellolib-0.0.1.dist-info/METADATA
myhellolib-0.0.1.dist-info/WHEEL
myhellolib-0.0.1.dist-info/top_level.txt
myhellolib-0.0.1.dist-info/RECORD
-------
6 files

```

### 让它可用

现在你知道了打包你的 Python 包是多么容易，你可以使用 Git 钩子、GitLab Web 钩子、Jenkins 或类似的自动化工具来自动完成这个过程。你甚至可以把你的项目上传到 PyPi，这个流行的 Python 模块仓库。一旦它在 PyPi 上，用户就可以用 `pip` 来安装它，就像你在这篇文章中安装 `setuptools` 和 `build` 一样！

当你坐下来开发一个应用或库时，打包并不是你首先想到的事情，但它是编程的一个重要方面。Python 开发者在程序员如何向世界提供他们的工作方面花了很多心思，没有比 `setuptools` 更容易的了。试用它，使用它，并继续用 Python 编码！

---

via: <https://opensource.com/article/21/11/packaging-python-setuptools>

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


硬核观察 #458 CentOS Linux 8 最后的绝响

Summary: 更多：• B 站加入了开放发明网络 • 付费版 Firefox Relay 提供无限量的电子邮件别名

![](/data/attachment/album/202111/17/202820qctoasgplgjvl368.jpg)

### CentOS Linux 8 最后的绝响

![](/data/attachment/album/202111/17/202844e3ztoz3e9xlz93x9.jpg)

RHEL 8.5 上周发布之后，CentOS Linux 8 2111 作为 RHEL 8.5 的重构版本于近日 [发布](https://blog.centos.org/2021/11/announcing-the-latest-release-of-centos-linux-8-2111/)。该版本同时也是基于上游 RHEL 8.5 的**最后一个版本**，在更新日志中再次重申了 **CentOS Linux 8 将在 2021 年 12 月 31 日结束使用**。RHEL 8.5 带来了各种容器的改进，Cockpit 网络管理的改进，以及其他各种更新和改进。此外，RHEL 8.5 还支持最近推出的 OpenJDK 17 和微软 .NET 6。那些寻找 CentOS Linux 8 替代品的人可以看看 Rocky Linux 和 AlmaLinux，它们都已经发布了基于 RHEL 8.5 的版本。当然，国内用户也可以看看欧拉和龙蜥。

>
> 老王点评：一代绝响，真正改变了企业级 Linux 市场格局，但是到底哪个替代品能真正接过 CentOS 的大旗呢？
>
>
>

### B 站加入了开放发明网络

![](/data/attachment/album/202111/17/202904znxput1ua3p8u6us.jpg)

开放发明网络（OIN）是世界上最大的专利互不侵犯联盟。它保护 Linux 和相关的开源软件及其背后的公司免受专利攻击和专利巨头的侵害。OIN 最近扩大了其范围，从核心的 Linux 程序和相邻的开源代码扩大到其他专利，如安卓开源项目（AOSP）和 exFAT 文件系统。加入 OIN 可以在免版税的基础上将其专利相互授权。之前，中国已经有很多公司加入了 OIN，而 [除了 B 站](https://www.zdnet.com/article/bilibili-chinas-youtube-joins-the-open-invention-network/)，不久前抖音母公司字节跳动和快手公司也都加入了 ION。

>
> 老王点评：OIN 的意义不用多说，让人欣喜的是，除了一些大公司，中国更多的较小规模的科技公司也开始加入 OIN。
>
>
>

### 付费版 Firefox Relay 提供无限量的电子邮件别名

![](/data/attachment/album/202111/17/202923fqfi12i0047c200h.jpg)

Mozilla 推出的 Firefox Relay 是一个免费产品，它为你提供了五个 [电子邮件别名](https://www.engadget.com/firefox-relay-premium-service-140023689.html)，每次你需要在网上随机注册一个账户时都可以使用。现在，该服务推出了一个付费版，可以得到你自己的子域（[yourdomain.mozmail.com](http://yourdomain.mozmail.com/)）。你必须安装它的 Firefox 扩展，才能使用该功能。每当你访问一个要求提供电子邮件地址的网站时，浏览器上就会出现 Relay 图标，你可以点击它来生成一个随机的地址。

>
> 老王点评：这个服务不错，或许但是给 Mozilla 带来的收入应该不多。
>
>
>


在 FreeDOS 中设置和使用环境变量

Summary: 环境变量几乎在每种命令行环境中都是很有帮助的，自然包括 FreeDOS 。

环境变量几乎在每种命令行环境中都是很有帮助的，自然包括 FreeDOS 。

>
> 环境变量几乎在每种命令行环境中都是很有帮助的，自然包括 FreeDOS 。
>
>
>

![](/data/attachment/album/202111/18/152155twzasgwwrzsmmvs2.jpg)

几乎在每个命令行环境中的一个有用的功能是 *环境变量*。其中的一些变量允许你控制命令行的行为或功能，其它的变量仅允许你存储可能稍后需要的数据，在 FreeDOS 中也使用了环境变量。

### 在 Linux 上的变量

在 Linux 上，你可能已经熟悉其中的一些重要的环境变量。在 Linux 上的 [Bash](https://opensource.com/article/19/8/using-variables-bash) shell 中，`PATH` 变量标示着 shell 可以在哪里找到程序和命令。例如，在我的 Linux 系统上，我的 `PATH` 值如下：

```
bash$ echo $PATH
/home/jhall/bin:/usr/lib64/ccache:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin

```

这意味着，当我输入一个像 `cat` 这样的命令的名称时，Bash 将会按顺序检查我在 `PATH` 变量中所列出的每个目录：

1. `/home/jhall/bin`
2. `/usr/lib64/ccache`
3. `/usr/local/bin`
4. `/usr/local/sbin`
5. `/usr/bin`
6. `/usr/sbin`

在我的实例中，`cat` 命令位于 `/usr/bin` 目录，因此，完整的路径是 `/usr/bin/cat` 。

为在 Linux 上设置一个环境变量，你可以输入一个变量的名称，接着输入一个等于符号（`=`），接着输入一个要存储在变量中的值。为了随后使用 Bash 引用这个值，你需要在变量的名称前输入一个美元符号（`$`）。

```
bash$ var=Hello
bash$ echo $var
Hello

```

### 在 FreeDOS 上的变量

在 FreeDOS 上，环境变量提供一种类似的功能。一些变量控制 DOS 系统的行为，另一些变量用于存储一些临时值。

为在 FreeDOS 上设置一个环境变量，你需要使用 `SET` 关键字。FreeDOS 是 *不区分大小写的* ，因此你可以输入大写字母也可以使用小写字母。接下来，像你在 Linux 上一样设置变量，使用变量名称，一个等于符号（`=`），你想要存储的值。

不过，在 FreeDOS 中引用或 *扩展* 一个环境变量的值的方法，与你在 Linux 上所使用的方法是完全不同的。在 FreeDOS 中，你不能使用美元符号（`$`）来引用一个变量。你反而需要使用百分符号 （`%`）来包围变量的名称。

![Use % (not $) to reference a variable's value](/data/attachment/album/202111/18/152204xathvo7cvtazbo31.png)

在名称前后使用百分符号是非常重要，因为这就是 FreeDOS 知悉变量名称在哪里开始和结束的方式。这是非常有用的，因为它会允许你引用一个变量的值，与此同时，它会立即附加（或预置）其它的文本到值中。让我通过设置一个新的名称为 `reply` 的值为 `yes` 的变量，然后在 “11” 之前和 “22” 之后引用这个值来演示这一点：

![Set and reference an environment variable](/data/attachment/album/202111/18/152204y41040a4xgj1l6zu.png)

因为 FreeDOS 是不区分大小写的，所以你可以使用大写字母称或小写字母的变量名称以及 `SET` 关键字。不过，变量的值将使用你在命令行中所输入的字母。

最后，你可以看到当前在 FreeDOS 中定义的所有的环境变量。不使用任何参数的 `SET` 关键字将显示所有的变量，因此你可以一目了然：

![Show all variables at once with SET](/data/attachment/album/202111/18/152205m43j0jxxo4jcboiz.png)

环境变量是一个有用的基本的命令行环境，同样适用于 FreeDOS 。你可以设置你自己的变量以满足你自己的需要，但是要仔细地更改 FreeDOS 使用的一些变量。这些变量会更改你正在运行的 FreeDOS 系统的行为：

* `DOSDIR`：FreeDOS 安装目录的位置，通常是 `C:\FDOS`
* `COMSPEC`：FreeDOS 的 shell 的当前实例，通常是 `C:\COMMAND.COM` 或 `%DOSDIR%\BIN\COMMAND.COM`
* `LANG`：用户的首选语言
* `NLSPATH`：系统语言文件的位置，通常是 `%DOSDIR%\NLS`
* `TZ`：系统的时区
* `PATH`：一个目录列表，FreeDOS 可以在其中找到要运行的程序，例如 `%DOSDIR%\BIN`
* `HELPPATH`：系统文档文件的位置，通常是 `%DOSDIR%\HELP`
* `TEMP`：一个临时目录，FreeDOS 在其中存储来自每个命令的输出，如同它在命令行上的程序之间的 “管道” 数据
* `DIRCMD`：一个控制 `DIR` 命令如何显示文件和目录的变量，通常设置 `/OGNE` 来排序（`O`）内容，先通过分组（`G`）目录，接下来按照名称（`N`） 、扩展名（`E`）来排序条目

如果你偶然间更改了任意的 FreeDOS 的 “内部” 变量，你可能会阻碍 FreeDOS 的一些部分的正常工作。在这种情况下，只需要简单地重新启动你的计算机，FreeDOS 将会按照系统默认值重新设置变量。

---

via: <https://opensource.com/article/21/6/freedos-environment-variables>

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

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


硬核观察 #459 百亿亿次超算尚未到来

Summary: 更多：• Canonical 将从根本上改善 Ubuntu 文档 • Discord 正在悄悄地建立一个机器人的应用帝国

![](/data/attachment/album/202111/18/162443p8nu5xz0un05nxxq.jpg)

### 百亿亿次超算尚未到来

![](/data/attachment/album/202111/18/162456eg2pgxsid251u3ey.jpg)

Top 500 超算项目公布了 [最新的榜单](https://www.top500.org/news/still-waiting-exascale-japans-fugaku-outperforms-all-competition-once-again/)，百亿亿次超算尚未到来，日本的 ARM 超算富岳第四次登顶。目前筹备中的百亿亿次（Exascale）超算美国有 [两台](https://www.hpcwire.com/2021/11/15/top500-no-exascale-fugaku-still-reigns-polaris-debuts-at-12/)，中国也有 [两台](/article-13930-1.html)。Top 10 中唯一的新人是第十的微软 Azure 超算。AMD 在榜单中取得了明显进步，Top 10 中有四台采用了 AMD 的 CPU，Top 500 中共有 73 台，而英特尔的比例从上半年的 86.4% 降至了 81.4%。

>
> 老王点评：这么说，我们之前在 [#438 期](/article-13930-1.html) 的报道有误，中国的百亿亿次超算还没正式上线。
>
>
>

### Canonical 将从根本上改善 Ubuntu 文档

![](/data/attachment/album/202111/18/162521v5vqcgvsal2qncql.jpg)

在过去，Ubuntu 的 Wiki 是业内公认优质的 Linux 文档资源库，不过现在更多用户偏好于 Arch Linux Wiki，后者被视为开源文档的黄金标准。不过 Canonical 现在 [希望](https://ubuntu.com//blog/the-future-of-documentation-at-canonical) 从根本上改善 Ubuntu 及其他软件产品的 [文档](https://help.ubuntu.com/)。他们说，“我们希望它能成为最好的。我们所说的‘最好’是指文件首先要理解、尊重、反映并服务于其用户的需求。”

>
> 老王点评：这真是一个功德无量的工作，我只希望国内的发行版厂商也能看齐。
>
>
>

### Discord 正在悄悄地建立一个机器人的应用帝国

![](/data/attachment/album/202111/18/162537m3rfophru9ratfm2.jpg)

Discord 服务器所有者在服务器上安装机器人，以帮助管理，或为其社区提供小游戏或功能。现在超过 30% 的 Discord 服务器在 [使用机器人](https://www.theverge.com/2021/11/17/22787018/discord-bots-app-discovery-platform)，每周有 1.5 亿月度活跃用户在使用 43 万个机器人。目前共有约 12,000 个经过验证的应用程序和机器人。

>
> 老王点评：相比之下，看看微信只知道一力封杀第三方机器人，而自己的机器人又是个跛脚的。
>
>
>


树莓派 3 还是 4：你应该买哪一个？

Summary: 树莓派 3 仍然值得考虑吗？或者，你应该去买最新和更强大的树莓派 4？

有钱就直接上PI4 ，但是现在都缺货，微雪电子也都是限购

树莓派 3 仍然值得考虑吗？或者，你应该去买最新和更强大的树莓派 4？

![](/data/attachment/album/202111/18/171924sg0bk3iu43bwi3x4.jpg)

树莓派是一种物美价廉的单板计算机，在很多场景都很有用。不过，在树莓派 4 之前，它作为快速的桌面替代品并不是一个特别合适的选择。

所以，树莓派 4 以其新的功能改变了游戏规则。但是，它与树莓派 3 相比如何？

树莓派 3 仍然值得考虑吗？或者，你应该去买最新和更强大的树莓派 4？

在这篇文章中，我们试图通过强调两者之间的一些关键差异来为你提供一些答案。

首先，让我们看一下两者提供的规格：

### 树莓派 3 的规格

![](/data/attachment/album/202111/18/171951z7pqdplqq0k9kpqg.jpg)

树莓派 3 满足了一个基本入门 DIY 项目的所有要求。如果 [树莓派 Zero 或 树莓派 Zero W](https://itsfoss.com/raspberry-pi-zero-vs-zero-w/) 不符合你的要求，那么树莓派 3 是一个物美价廉的选择：

* 四核 1.2GHz 博通 BCM2837 64 位 CPU
* 1GB 内存
* 无线局域网和低功耗蓝牙（BLE）
* 以太网
* 40 针扩展 GPIO
* 4 个 USB 2 端口
* 4 极立体声输出和复合视频端口
* 全尺寸的 HDMI
* CSI 摄像机端口
* DSI 显示端口
* 用于操作系统和存储数据的微型 SD 端口
* 升级后的开关式微型 USB 电源，最高可达 2.5A 电流

### 树莓派 4 的规格

![](/data/attachment/album/202111/18/171952dkeq6eq9yvzrvllm.jpg)

* 博通 BCM2711，四核 Cortex-A72（ARM v8）64 位 SoC @ 1.5GHz
* 2GB、4GB 或 8GB LPDDR4-3200
* 2.4 GHz 和 5.0 GHz IEEE 802.11ac 无线，蓝牙 5.0，BLE
* 千兆位以太网
* 2 个 USB 3.0 端口
* 2 个 USB 2.0 端口
* 40 针 GPIO 接头（向后兼容）
* 2 个微型 HDMI 端口（最多可支持 4kp60）
* 2 线 MIPI DSI 显示端口
* 2 线 MIPI CSI 摄像头端口
* 4 极立体声音频和复合视频端口
* H.265（4kp60 解码），H264（1080p60 解码，1080p30 编码）
* OpenGL ES 3.1，Vulkan 1.0
* 用于操作系统和存储数据的 MicroSD 卡插槽
* 通过 USB-C 接口的 5V 直流电
* 通过 GPIO 接头的 5V 直流电
* 通过以太网供电

### 内存（RAM）选项

对于树莓派机型，通常情况下，你会得到一个包括 1 或 2GB 内存的单一产品阵容。

树莓派 3B+ 就是这种情况。如果你不需要更多的内存，树莓派 3 可以就是一个不错的解决方案，可以满足所有常规 DIY 项目的需求。

然而，对于树莓派 4，你可以选择 2GB、4GB 和 8GB 的版本。所以，如果你想完成更多的事情，或者在你的树莓派板上实现多个任务，树莓派 4 应该是一个不错的选择。

### 性能差异

尽管这两块板子都采用了博通公司的芯片，但树莓派 4 的性能明显更快。

如果你想把它作为你的迷你桌面的替代品，或者想为你的任务获得更好的计算能力，树莓派 4 将是明显的选择。

说到树莓派 3，它配备了一个四核 1.2GHz 的博通 BCM2837 64 位 CPU。它是一个能够完成各种任务的芯片。

#### 连接能力

两块树莓派板都提供了一个 40 针的扩展 GPIO 接头。

然而，说到 USB 连接时，树莓派 4 提供了两个 USB 3.0 端口以及另外两个 USB 2 端口。而树莓派 3 只限于两个 USB 2 端口。

因此，如果你需要更快的数据传输速度，USB 3.0 端口应该会有帮助。例如，如果你要使用任何 [媒体服务器软件](https://itsfoss.com/best-linux-media-server/)，这可以派上用场。

除此之外，树莓派 4 上还有 USB-C 的存在，如果 USB 配件需要，它可以用来给电路板供电（5V DC）。

#### 双显示器与相机支持

虽然树莓派 3 提供了一个全尺寸的 HDMI 端口、DSI 端口和 CS 端口，但它并不具有双显示器支持。

有了树莓派 4，你可以得到两个微型 HDMI 端口，一个双通道 DSI 端口和一个双通道 CSI 摄像头端口。

### 你应该买哪一个？

| 规格 | 树莓派 3 | 树莓派 4 |
| --- | --- | --- |
| **处理器** | 四核 1.2GHz 博通 BCM2837 | 四核 1.5GHz 博通BCM2711 |
| **RAM** | 1 GB | 高达 8 GB |
| **蓝牙** | BLE | 蓝牙 5.0 |
| **USB端口** | 4 x USB 2.0 | 2 x USB 3.0，2 x USB 2.0 |
| **无线连接** | 是 | 是，2.4 GHz & 5 GHz 频段支持 |
| **显示端口** | 1 x HDMI，1 x DSI | 2 x micro-HDMI，1 个 DSI |
| **电源** | microUSB 和 GPIO，高达 2.5 A | 5V DC，通过 USB-C 和GPIO（3 A） |
| **MicroSD 插槽** | 是 | 是 |
| **价格** | 35 美元 | 35 美元（1 GB 内存）、45 美元（2 GB 内存）、55 美元（4 GB 内存）、75 美元（8 GB 内存） |

如果你想要更快的数据传输，支持双显示器，以及更好的性能，树莓派 4 是一个很好的选择。

考虑到 2GB 内存的树莓派 4 基本型号的价格约为 35 美元。以几乎相同的价格选择 1GB 的树莓派 3 型号，实在是毫无意义。

当然，除非你能得到一个更便宜的价格，并且有特定的要求。树莓派 4 总体上是一个明确的选择。

然而，有一些事情，如板子发热和其他潜在的问题，你可能想在决定之前探讨一下。树莓派 3 已被证明能在许多项目中发挥作用，而树莓派 4 是相当新的，可能还没有经过各种项目的测试。

一旦你确定了这一点，你就可以继续得到它们中的任何一个。

你喜欢用什么？你都试过了吗？请在下面的评论中告诉我们。

---

via: <https://itsfoss.com/raspberry-pi-3-vs-4/>

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

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


利用基于 QEMU 的 Quickgui 轻松创建虚拟机

我用Virt-Manager

我搞不懂，用virtualbox不香吗？简单易用，要是搞生产，我直接Xen，搞测试简单的不行？

寸有所长，尺有所短

“QEMU/KVM - 未连接” “错误: 没有活动连接可用于安装“<br />
这个怎么办？(qemu已安装）

>
> Quickgui 旨在成为 VirtualBox 的一个更简单的替代品，帮助你快速创建虚拟机。让我们来看看它。
>
>
>

![](/data/attachment/album/202111/19/104431xwh8h8hw228e77hh.jpg)

目前，借助 VirtualBox、VMware 和其他一些程序，创建虚拟机相当容易。

你当然可以 [在你的 Linux 系统中安装 VirtualBox](https://itsfoss.com/install-virtualbox-ubuntu/) 来创建虚拟机。但是，在这篇文章中，我把重点放在一个令人兴奋的工具上，即 Quickgui，它使用简单，运行速度快，能帮助你快速启动虚拟机。

### Quickgui：Quickemu 的图形用户界面前端

![](/data/attachment/album/202111/19/104521zufbsdx6ouysbutf.png)

Quickemu 是一个基于终端的工具，可以让你创建优化的桌面虚拟机并轻松地管理它们。该工具专注于消除配置虚拟机的所有细微差别。相反，它根据虚拟机的可用系统资源选择最佳配置以使其正常工作。

不仅限于配置，它还会下载操作系统的镜像（使用 quickget 包）。

因此，你所要做的就是像通常那样安装操作系统，然后开始工作。

Quickemu 以 [QEMU](https://www.qemu.org/) 为核心，旨在用 Bash 和 QEMU 取代 VirtualBox。

QEMU 是一个开源的机器仿真器和虚拟化器。

Quickemu 是一个有趣的项目，由 [Martin Wimpress](https://twitter.com/m_wimpress)（Ubuntu MATE 负责人）在一些贡献者的帮助下完成。

作为对这个工具的补充，Quickgui 是一个使用 [Flutter](https://itsfoss.com/install-flutter-linux/) 开发的前端，由另一组开发人员开发，以帮助在没有终端的情况下使用 Quickemu。

在此，我们重点介绍使用 Quickemu 创建和管理虚拟机的前端 Quickgui。

### Quickgui 的特点

![在 Zorin OS 16 上使用 Quickgui 运行虚拟机](/data/attachment/album/202111/19/104522ojzr1nc8jij8said.png)

如上所述，Quickgui 作为一个前端，其核心利用的是 Quickemu。因此，你可以期待其具有同样的功能。

你可以用它做的一些事情包括：

* 搜索操作系统并下载它们以创建虚拟机。
* 管理你现有的虚拟机。
* 当你建立一个虚拟机时，创建默认配置。
* 提供黑暗模式。
* 开箱即用地创建 Windows 和 macOS 虚拟机。
* 支持各种 Linux 发行版，包括 elementaryOS、ZorinOS、Ubuntu 等。
* 支持 FreeBSD 和 OpenBSD。
* 支持 EFI 和传统的 BIOS。
* 不需要提升权限就能工作。
* 默认情况下，宿主机/访客机共享剪贴板。
* 可以选择镜像压缩方法。
* 能够禁用输入。
* 能够切换虚拟机中宿主机/访客机的可用 USB 设备。
* 包括对 [SPICE 连接](https://www.spice-space.org/index.html) 的支持。
* 网络端口转发。
* Samba 文件共享。
* VirGL 加速。
* 智能卡直通。

鉴于它是如此简单和容易使用，其功能集令人印象深刻。让我给你提供一些使用的技巧。

### Quickgui 入门

用户界面非常简单，你可以选择 “<ruby> 管理现有机器 <rt>  Manage existing machines </rt></ruby>” 和 “<ruby> 创建新机器 <rt>  Create new machines </rt></ruby>”。

你需要点击“<ruby> 创建 <rt>  Create </rt></ruby>”来开始制作虚拟机。

![Quickgui VM Creation](/data/attachment/album/202111/19/104523wpm9csdvejpi3vcd.png)

选择操作系统，你应该看到一个列表。如果你找不到目标操作系统，只需搜索一下，它应该会出现。

![](/data/attachment/album/202111/19/104523xxwwdw3ax9nxsg2w.png)

你会看到各种各样的操作系统。在接下来的选择中，选择所需的操作系统及其版本。然后，点击 “<ruby> 下载 <rt>  Download </rt></ruby>”。

它应该会下载恢复镜像或 ISO，这取决于你正在尝试的操作系统。下载将取决于你的互联网连接，但它工作得很完美。

如果你想自己下载 ISO，你将就得为它创建配置并进行设置。看看 [Quickemu 的 GitHub 页面](https://github.com/wimpysworld/quickemu)，了解一下它的说明。

![](/data/attachment/album/202111/19/104523j6m1qq3rl6dx2df1.png)

你只需要在下载完成后点击 “<ruby> 去除 <rt>  Dismiss </rt></ruby>”。

在这篇文章中，我测试了启动一个 Linux 虚拟机（[elementary OS 6](https://news.itsfoss.com/elementary-os-6-features/)）、一个 macOS 实例，以及一个 Windows 虚拟机。

我成功地以虚拟机方式运行了 Linux 和 macOS 。然而，我在快速建立一个 Windows 虚拟机时遇到了一些问题。我在 Quickemu 的 GitHub 页面上找不到任何相关信息，所以我没有费心去排除故障。

如果你需要使用 Windows 虚拟机，可以自己试试，并在他们的 [Discord 服务器](https://discord.com/invite/sNmz3uw) 中联系他们寻求帮助。

你不一定需要改变虚拟机的配置来使其工作。因此，它变成了一个节省时间的工具。

### 在 Linux 中安装 Quickgui

要使用 Quickgui，你需要先安装 Quickemu。

对于基于 Ubuntu 的发行版，你可以使用 PPA 来安装它：

```
sudo apt-add-repository ppa:flexiondotorg/quickemu
sudo apt update
sudo apt install quickemu

```

它应该安装了你需要的所有东西（连同 quickget 包），使其发挥作用。

完成后，你可以使用另一个 PPA 继续安装 Quickgui：

```
sudo add-apt-repository ppa:yannick-mauray/quickgui
sudo apt update
sudo apt install quickgui

```

如果你使用的是其他 Linux 发行版，你可以参考 [Quickemu 的 GitHub 页面](https://github.com/wimpysworld/quickemu) 和查看 [Quickgui 的 GitHub 页面](https://github.com/quickgui/quickgui)，以获得更多说明。

### 总结

Quickgui 使人们能够方便地利用 Quickemu 的能力，快速创建和管理多个虚拟机，而不需要进行任何配置。

更有好的是，你不需要提升权限就能让它工作。

因此，如果你正在寻找 VirtualBox 的替代品，这可能就是答案。或者，你也可以试试 [GNOME Boxes](https://help.gnome.org/users/gnome-boxes/stable/) 作为一个更简单的替代品。

你对 Quickgui 有什么看法？请在下面的评论中告诉我你的想法。

---

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

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

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


使用 qrcp 在你的手机和 Linux 之间传输文件

>
> qrcp 项目提供了一种快速地从你的 iPhone 或 Android 设备中复制文件到你的 Linux 电脑的方法，反之也可。
>
>
>

![](/data/attachment/album/202111/19/114121wt40ilipix1oo1zh.jpg "A person looking at a phone")

你是否在寻找一种快速复制文件的方法，从你的 iPhone 或 Android 移动设备到你的 Linux 电脑，或者从你的 Linux 电脑到你的设备？我最近发现了一个开源的应用，它很容易安装，并且传输文件只需一个二维码。

`qrcp` 项目提供了一个命令，可以在你的终端生成一个二维码，让你通过网络向你的电脑发送或接收文件。

### 在 Linux、Windows 或 Mac 上安装 qrcp

开发者 Claudio d'Angelis 以 MIT 许可证发布了 `qrcp` 应用。我发现它很容易安装，也很容易使用。它适用于 Linux、Windows 和 macOS，可以作为 RPM、DEB 或 tarball 下载。它为几乎所有的平台做了构建，包括树莓派。

如果你想在 Linux 上安装它，下载 RPM 或 DEB，并使用你的包管理器进行本地安装。例如，在 Fedora、CentOS 或 Mageia，或类似的平台上：

```
$ sudo dnf install ./qrcp*rpm

```

如果你只是想试试，你可以下载 tar.gz 压缩包并在本地运行它：

```
$ tar --extract --file qrcp*tar.gz
$ ./qrcp version
qrcp 0.x.y

```

### 设置 qrcp

你可以通过使用 `--help` 选项查看所有可用的 `qrcp` 选项：

```
$ qrcp --help
$ ./qrcp --help
Usage:
 qrcp [flags]
 qrcp [command]

Available Commands:
 completion  Generate completion script
 config      Configure qrcp
 help        Help about any command
 receive     Receive one or more files
 send        Send a file(s) or directories from this host
 version     Print version number and build information.
[...]

```

默认配置文件位于 `~/.config/qrcp/config.json` ，你可以使用你喜欢的编辑器编辑，或从命令行调用配置向导来配置应用。

```
$ qrcp config

```

第一步是创建一个配置文件。`qrcp config` 命令将带你完成这个过程，但会问你几个问题。

第一个问题是要求你提供一个“完全限定域名”。如果你在一个不使用完全限定域名的本地网络上使用 `qrcp`（或者你不知道哪种方式），那么就把这个留空。`qrcp` 命令将使用你的本地 IP 地址代替。

下一个问题是提示你选择端口。大多数防火墙会阻止非标准的端口，但会将 8080 端口作为互联网流量的情况并不少见。如果你的防火墙屏蔽了 8080 端口，那么你还是要添加一个例外。假设你的系统使用 `firewalld`，你可以用这个命令允许 8080 端口的流量：

```
$ sudo firewall-cmd --add-port 8080/tcp --permanent

```

拒绝在“传输完成后保持网络连接”的选项，让 `qrcp` 生成一个随机路径。

假设你在一个可信的网络上，使用 HTTP（而不是 HTTPS）连接，那么你不必配置 TLS。

配置保存在 `~/.config/qrcp/config.json` 中，并且之后可以编辑，所以如果你想改变设置，它很容易更新。

更新后的配置看起来像这样：

```
{
  "fqdn": "",
  "interface": "wlp0s20f3",
  "port": 8080,
  "keepAlive": false,
  "path": "",
  "secure": false,
  "tls-key": "",
  "tls-cert": "",
  "output": "/home/don"
}

```

### 用 qrcp 传输文件

现在你已经准备好从你的 Linux 电脑向你的移动设备发送一个文件。在这个例子中，我使用了我的 iPhone，它完全不支持 Linux，这是臭名昭著的。这个过程在安卓设备上是完全一样的。

我是这样做的。首先，我在我的电脑上创建一个示例文件：

```
$ echo "Hello world"> ~/example.txt

```

接下来，我使用 `send` 子命令将文件从我的 Linux 电脑发送到我的手机：

```
Linux~$ qrcp send example.txt

```

![example of sending a file](/data/attachment/album/202111/19/114132b34rz3t3hctxxlnp.png)

*使用 `qrcp send example.txt` 发送文件的例子（CC BY-SA 4.0）*

我打开我的相机应用（在 Android 上，我使用一个保护隐私的专用二维码扫描器），iPhone 扫描二维码并在我的手机上启动 Safari 浏览器。最后，我点击“下载”按钮。

![example download](/data/attachment/album/202111/19/114133xdpd6iad56sairah.png)

*下载示例 .txt 文件（CC BY-SA 4.0）*

### 用 qrcp 接收文件

接收文件也一样简单，只是命令略有不同：

```
$ qrcp receive

```

![example of receiving a file](/data/attachment/album/202111/19/114133qsyvfssqc8sq3dym.png)

*使用 `qrcp receive` 命令接收一个文件（CC BY-SA 4.0）*

我扫描了二维码，它再次启动了我手机上的 Safari 浏览器，但这次出现了一些不同，因为我正在将文件从我的 iPhone 发送到 Linux 电脑上。

![example of selecting a file](/data/attachment/album/202111/19/114133zll8zq77s5sosubn.jpg)

*选择一个要传输的文件（CC BY-SA 4.0）*

我点击“选择文件”，它让我选择想发送的文件。

![file appears in default location](/data/attachment/album/202111/19/114134tfr3drodlrecn232.png)

*文件被下载到默认位置（CC BY-SA 4.0）*

发送文件后，是在我的配置中指定的默认位置找到了文件。

### 尝试 qrcp

项目文档很简短但已足够，除了最初提出这个想法的 Claudio d'Angelis 之外，它还有开发者社区的支持。社区欢迎你加入他们，该应用将改变你对移动设备之间文件传输的看法。试试吧！

---

via: <https://opensource.com/article/21/11/transfer-files-phone-linux>

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

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


硬核观察 #460 哈希表理论突破提升数据存储效率

Summary: 更多：• 英特尔发布了检测漏洞的 AI • 英特尔开发下一代固件平台

更多：• 英特尔发布了检测漏洞的 AI • 英特尔开发下一代固件平台

![](/data/attachment/album/202111/19/211946cms4lmah5dnana9f.jpg)

### 哈希表理论突破提升数据存储效率

![](/data/attachment/album/202111/19/212005e8uyea3qnux39xu8.jpg)

哈希表是最常用的组织和存储数据的方法之一。线性探测哈希表于 1954 年引入，是当今可用的最古老、最简单和最快的数据结构之一。在线性探测哈希表中，可存储信息的位置位于一个线性数组中。几乎每个使用线性探测哈希表的人都认为，如果你让它们变得太满，那么长长的、被占据的位置就会聚集在一起形成“集群”，结果找到一个空位所花费的时间会急剧增加。但是这个已有半个多世纪、一直不利于高负载率的原则已被 [三名研究人员的工作](https://news.mit.edu/2021/theoretical-breakthrough-hash-tables-could-boost-data-storage-1116) 彻底颠覆。他们发现，对于插入和删除数量大体相等的应用程序，线性探测哈希表可以在不牺牲速度的情况下以高存储容量运行。

>
> 老王点评：果然只有数学理论的突破才能真正突破硬件的升级幅度。
>
>
>

### 英特尔发布了检测漏洞的 AI

![](/data/attachment/album/202111/19/212019bzx6r2njo1x6joot.jpg)

英特尔上个月开源了 ControlFlag，今天 [发布了 1.0](https://github.com/IntelLabs/control-flag/releases/tag/v1.0)。在该版本中，他们宣传说已经完全支持 C 语言编程，并特别针对 C 程序的 if 条件语句做了调整。ControlFlag 的方法是在 C/C++ 开源代码库中挖掘模式，然后在开发者的代码库中检测异常模式。他们在 6000 多个 GitHub 存储库的超过 10 亿行代码中进行了训练。英特尔表示，他们已经成功地在他们的软件中使用了它，包括应用程序和固件。

>
> 老王点评：以后看来不但写程序不用程序员，就连程序员的 bug 也不用程序员找了。
>
>
>

### 英特尔开发下一代固件平台

![](/data/attachment/album/202111/19/212044yeebmd4yvm0n1yhm.jpg)

英特尔 [发布](https://www.phoronix.com/scan.php?page=news_item&px=Intel-USF-Firmware) 了 [通用可扩展固件（USF）](https://github.com/universalscalablefirmware) 的规范草案。USF 建立在现有的行业标准上，如 UEFI 和 ACPI。USF 在 SoC、平台和操作系统之间引入了新的抽象和领域界限。USF 打算将其范围扩大到不仅仅是系统固件，还计划让英特尔的独立图形处理器使用。USF 的目的是“开放”，但英特尔承认它由外部行业规范和他们的内部规范组成。据估计，英特尔或将使 USF 成为一个完全开源的固件堆栈。

>
> 老王点评：虽然已经有了一些开源固件解决方案，但是如果 USF 能真正开源，那对开放硬件应该是一件好事。
>
>
>


vifm：为铁杆 Vim 爱好者提供的终端文件浏览器

Summary: 让我们探索一个基于终端的文件浏览器，可以使用 Vim 风格的键绑定。

让我们探索一个基于终端的文件浏览器，可以使用 Vim 风格的键绑定。

>
> 让我们探索一个基于终端的文件浏览器，可以使用 Vim 风格的键绑定。
>
>
>

![](/data/attachment/album/202111/20/103256stau7uhetccj7uun.png)

当在命令行中浏览 [Linux 目录结构](https://linuxhandbook.com/linux-directory-structure/) 时，人们经常依赖 [cd 命令](https://linuxhandbook.com/cd-command-examples/)。

这也没什么不好，因为你登录到任何一个 Linux 系统上都有 `cd` 命令。

然而，如果系统是由你维护的，你想更直观地看到目录，那么文件管理器比 `cd` 或 `tree` 命令要好得多。

是的，你也可以在终端中找到文件管理器。它们可能不如 Nautilus 这样的图形界面应用，但仍然比普通的老命令好。

有几个 [TUI](https://itsfoss.com/gui-cli-tui/) 文件浏览器，我们已经介绍了其中的几个。今天，我们来看看 `vifm`。

### vifm 简介

![](/data/attachment/album/202111/20/103304e318nfadf21c8aqg.png)

[vifm](https://github.com/vifm/vifm) 是一个命令行工具，它是一个文件管理器，导航和操作文件系统对象的键绑定与 Vim 类似。如果你不清楚我所说的“文件系统对象”是什么意思，它们是文件、目录、符号链接、硬链接等。

除了非常直观的 Vim 交互键绑定外，下面是 `vifm` 为你提供的一系列功能：

* 一个就在你的终端中的快速文件管理器
* 从文件管理器内编辑文本文件
* `vifm` 使用 curses 界面
* `vifm` 是跨平台的（在 Cygwin 的帮助下甚至可以在 Windows 上工作；它应该可以，但我没有测试过）
* 支持 Vim 风格的键绑定输入，如 `dd`、`j`、`k`、`h`、`l` 等
* [vifm 插件](https://github.com/vifm/vifm.vim) 可以在 Vim 中使用，这样就可以通过 Vim 打开文件
* 支持 Vim 命令的自动补完
* 支持多个面板
* 可以使用 [或不使用] 正则表达式进行批量重命名

### 在 Linux 上安装 vifm

`vifm` 软件包并不算新，因此在默认情况下，即使是“稳定”发行版（如 Debian）的软件库中也很容易找到它。

在 Debian 和基于 Debian 的发行版（如 Ubuntu、Pop!\_OS、Mint 等）之上，你可以 [使用 apt 软件包管理器](https://itsfoss.com/apt-command-guide/) 来安装 `vifm`：

```
sudo apt install vifm

```

使用 [pacman 软件包管理器](https://itsfoss.com/pacman-command/) 在 [基于 Arch 的 Linux 发行版](https://itsfoss.com/arch-based-linux-distros/)上安装 `vifm`：

```
sudo pacman -S vifm

```

`vifm` 在 Fedora 和 RHEL 仓库中也有；用 DNF 软件包管理器安装它：

```
sudo dnf install vifm

```

安装好了 `vifm`，你可以简单地在终端输入 `vifm`，像下面这样，然后启动它：

```
vifm

```

### vifm 的用户界面

当你第一次启动 `vifm` 时，默认情况下，它启动时显示你当前所在的目录的概览。你还会注意到，`vifm` 默认使用两个窗格。

![默认的 vifm 界面，包括一个正常的视图（隐藏的文件不可见）和两个默认打开的窗格](/data/attachment/album/202111/20/103304an2qml4oqhi52iol.jpg)

如果你对界面感到困惑，只需尝试按 `j` 键将光标向下移动一行，按 `k` 键将光标向上移动一行。你可以通过按 `h` 键向上移动一级目录。就像 Vim 中一样！

如果你的光标目前在一个文件上，按 `l` 键将在 Vim 中打开该文件（如果没有另外说明的话）。但如果你的光标在一个目录上，按 `l` 键将导航到该目录并显示其内容。

你也可以通过按 `Ctrl + g` 键绑定，从文件管理器中获得关于文件或目录的详细信息。

![ 键绑定如何显示目录/文件信息的屏幕截图](/data/attachment/album/202111/20/103305b5p4p733botb4u42.jpg)

你可以按 `za` 键来显示被隐藏的文件和目录（开头有 `.` 的文件和目录默认是隐藏的）。如果这些特殊的文件和目录没有被隐藏，按 `za` 键将会隐藏它们。

你可以用 `zo` 键绑定一直显示隐藏的文件和目录，或用 `zm` 键绑定使这些项目一直不可见。

![举例说明，当你按下  键绑定时的情况](/data/attachment/album/202111/20/103305u29fgcchgcuvt9vu.jpg)

### 总结

由于它是基于 Vim 的，你可以用 vifmrc 文件来配置它。在 [vifm wiki](https://wiki.vifm.info/index.php/Main_Page) 上有最新的默认绑定键的速查表，在 [这里](https://vifm.info/cheatsheets.shtml)。这个项目的文档非常好。

![vifm 默认按键绑定](/data/attachment/album/202111/20/103305eojv43boujj1dqy3.jpg)

`vifm` 是一个了不起的文件管理器，特别是对于 Vim 用户来说，因为它与 Vim 生态系统整合得非常好。它将许多 Vim 的功能和按键绑定整合到一个文件管理器中。默认的双窗格布局使其更具生产力。

不要犹豫，尝试一下 `vifm`。它真的是一个了不起的命令行工具。

---

via: <https://itsfoss.com/vifm-terminal-file-manger/>

作者：[Pratham Patel](https://itsfoss.com/author/pratham/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


入门：如何在 Fedora Linux 中切换到深色模式

Gnome浅色模式不得不说的优点>>>就是看着想吐, 还特么是默认的

来自120.230.61.23的 Chrome Mobile 80.0|Android 10 用户

最好能全部显示浅色

![](/data/attachment/album/202111/20/114412oqqw4mdnxbwfbprb.jpg)

与 Ubuntu 不同，Fedora 提供的是真正的、原生般的 GNOME 体验，而且体验很好，横向布局、三指滑动，一切都很好。

我不喜欢的一点是默认的标准主题，它是 Adwaita Light（默认）主题和深色的 GNOME Shell 的混合体。

因此，虽然通知和通知区是深色的，但系统和应用的其他部分是浅色主题。老实说，对我来说，这看起来很不协调。

![Fedora GNOME standard theme](/data/attachment/album/202111/20/114421ke95enbn5pe60mu5.jpg)

另一方面，深色主题让它看起来更好。

![Fedora GNOME dark theme](/data/attachment/album/202111/20/114422ep2qrv8yvcqqvvv8.jpg)

让我告诉你如何在 Fedora 或其他任何使用 GNOME 桌面环境的发行版中开启深色模式。

### 在 Fedora 中切换到深色模式

好了！我将分享命令行的方法，因为它更快。打开一个终端，使用这个命令：

```
gsettings set org.gnome.desktop.interface gtk-theme Adwaita-dark

```

完成了。这很容易，对吗？但我也要展示一下 GUI 的方法。

因为我主要使用 Ubuntu，所以我始终参照 Ubuntu。Ubuntu 在系统设置中本身就提供了在浅色和深色主题之间切换的选项。

然而，在原生 GNOME 中却没有这样的设置。你必须先 [在 Fedora 上安装 GNOME Tweaks 工具](https://itsfoss.com/install-gnome-tweaks-fedora/)，然后用它来切换主题。

你可以在软件中心搜索它并点击“<ruby> 安装 <rt>  Install </rt></ruby>”按钮：

![Install GNOME Tweaks from the software center in Fedora](/data/attachment/album/202111/20/114423l9r4r47w33xn4wg9.jpg)

或者，你在终端输入以下命令：

```
sudo dnf install gnome-tweaks

```

安装完成后，按 `Super` 键（`Windows` 键）在系统菜单中搜索它：

![Start GNOME Tweaks](/data/attachment/album/202111/20/114425v3thjckr5qisc03i.png)

点击左侧边栏的“<ruby> 外观 <rt>  Appearance </rt></ruby>”标签，点击主题部分下的应用。

![Changing theme in Fedora](/data/attachment/album/202111/20/114425qa9yxqgiyx7ppxy7.jpg)

你会看到这里有几个可用的主题。你应该在这里选择 “Adwaita-dark”。当你选择了它，应用就会切换到深色主题。

![Selecting the Adwaita-dark theme](/data/attachment/album/202111/20/114427iz356d3dpqd858ps.png)

就是你在 Fedora 中切换到深色模式所需要做的一切。由于 GNOME Shell 已经在使用深色主题，你不需要明确地将它设置为深色模式。所有的通知、信息栏等都是在深色模式下的。

### 总结

你可以找到各种深色 GTK 主题并安装它们来给你的 Fedora 带来不同的深色外观。然而，我注意到，只有系统自己的深色主题才能被网页浏览器识别。

所以，如果你访问一个根据你的系统主题自动启用深色模式的网站，它将与 Adwaita-dark 兼容，但可能与其他深色 GTK 主题不兼容。

这就是使用系统提供的深色主题的一个优势。

如你所见，在 Fedora 中启用深色模式并不是什么火箭科学。它只是一个了解和发现的过程。

享受深色色彩吧！

---

via: <https://itsfoss.com/fedora-dark-mode/>

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


硬核观察 #461 Winamp 准备重启

Summary: 更多：• 狗狗电话让宠物给它们的主人打电话 • Alphabet 将原型机器人用于清理谷歌的办公室

![](/data/attachment/album/202111/20/205931ftpp6iaonifironn.jpg)

### Winamp 准备重启

![](/data/attachment/album/202111/20/205941pe3oabbb6xtxoebk.jpg)

在我们用流媒体播放音乐之前，最受欢迎的播放 MP3 的媒体播放器之一是 Winamp。用户会翻录他们的专辑或下载 MP3，用媒体播放器在他们的电脑上收听。然而，Winamp 在 2007 年发布 5.5 版本后就再无下文。虽然 Winamp 的所有者 Radionomy 说他们对 Winamp 有很大的计划，但此后没有进一步的版本发布。2018 年 10 月，在 Winamp 5.8 版本在网上被泄露后，Winamp 社区的开发者决定在他们的网站 [Winamp.com](https://www.winamp.com/) 上 [发布泄露的版本](https://www.bleepingcomputer.com/news/software/winamp-prepares-a-relaunch-new-beta-version-almost-ready/)。我们所看到的唯一新的 Winamp 开发是由 [Winamp 社区更新项目（WACUP）](https://getwacup.com/) 发布的预览版。

>
> 老王点评：真是令人怀念的软件。
>
>
>

### 狗狗电话让宠物给它们的主人打电话

![](/data/attachment/album/202111/20/210001cpko4yj5jukpff4d.jpg)

[英国卫报报道](https://www.theguardian.com/lifeandstyle/2021/nov/17/can-i-give-you-a-call-bark-dogphone-lets-pets-ring-their-owners)，研究人员为独自留在家中的犬类创造了一种高科技的选择：一个被称为“DogPhone”的软球可以让它们呼叫主人。当这个软球被移动时，会向一台笔记本电脑发送信号，启动视频通话，并发出电话铃声。主人可以选择是否接电话，以及何时挂断电话，同时他们也可以给他们的宠物打电话，尽管狗必须移动球才能接电话。这项研究 [发表](https://dl.acm.org/doi/10.1145/3488539) 在《计算机协会计算机与人类互动论文集》上。但记录表明，研究者的狗似乎并不总是知道自己在做什么，打出的许多电话似乎都是意外。但研究者认为“当狗用屁股触发系统时，这可能是故意的，是狗触发互动的独特方式。”

>
> 老王点评：要不是发表在了 ACM，我以为这是准备申报今年的搞笑诺贝尔奖的。
>
>
>

### Alphabet 将原型机器人用于清理谷歌的办公室

![](/data/attachment/album/202111/20/210058fvqhhsrn02g0n9n7.jpg)

Alphabet 旗下的 X 实验室内致力于创造“通用学习机器人”的团队已经将其一些 [原型机器人](https://www.theverge.com/2021/11/19/22791267/alphabet-google-everyday-robot-project-cleaning-office-prototype) 放到谷歌的湾区园区。他们说，“我们现在正在运营一个由 100 多个机器人原型组成的车队，它们正在我们的办公室周围自主地执行一系列有用的任务。”这些机器人现在可以配备一个刮刀来擦桌子，也可以用抓手来开门。

>
> 老王点评：以后或许我们身边很多在做着各种活的机器人。
>
>
>


自由之狼：一个没有遥测的开源火狐复刻

>
> LibreWolf 是一个火狐浏览器的复刻，它关注于隐私和安全，消除了遥测并增加了其他好处。让我们来了解一下它。
>
>
>

![](/data/attachment/album/202111/21/121135e2mmb6ym53hxzlmj.jpg)

<ruby> 火狐 <rt>  Firefox </rt></ruby> 是 Linux 上最好的网页浏览器之一。然而，一些用户并不喜欢其中的遥测机制。

除此之外，有些人更喜欢一个开箱即用的、为最佳隐私和安全而调整过的浏览器，即使火狐浏览器是提供了最好的定制功能的浏览器之一。

如果你不想要火狐浏览器的干扰功能，想要一个无需你亲自调整的私密网络体验，LibreWolf（自由之狼）或许就是答案。

### LibreWolf：更好的火狐？

![](/data/attachment/album/202111/21/121142gnxn4e4neukwnwnp.png)

假设你想使用火狐，而不使用火狐的帐户同步的能力和其他一些火狐特有的功能，如 “添加到 Pocket” 按钮。在这种情况下，LibreWolf 可以是一个不错的选择。

不同于其他火狐浏览器的复刻（例如，[Basilisk 浏览器](https://itsfoss.com/basilisk-browser/)），它是定期更新的。而且，它只专注于提供私密的网页浏览体验，而不影响你在火狐中所希望得到的用户体验。

![](/data/attachment/album/202111/21/121143too1lbezgkd1sosc.png)

### LibreWolf 的特点

LibreWolf 为安全的网页浏览体验提供了一套相当有用的开箱即用的功能。让我强调其中的一些特点：

* 移除遥测功能
* 不使用火狐账户进行云同步
* 私密搜索供应商，如 Searx、Qwant（DuckDuckGo 被设置为默认）
* 包含 uBlock Origin 以阻止脚本/广告
* 没有 “添加到 Pocket” 按钮
* 主页上默认没有赞助/推荐的内容
* 从设置中删除火狐<ruby> 状态条 <rt>  snippets </rt></ruby>，它用于在新标签中添加新闻/提示
* 没有赞助的快捷提示
* 追踪保护默认设置为“严格”模式
* Cookies 和历史记录设置为关闭浏览器时删除
* 默认启用 HTTPS-only 模式

正如你所注意到的，LibreWolf 的目标是提供一个更清洁和有利于隐私的体验，而不需要调整任何东西。

![](/data/attachment/album/202111/21/121143s126nzgj61uo9eut.png)

如果你不想反复登录网络服务和浏览历史记录来回忆你的浏览活动，一些选项如退出时清除 cookies/历史记录可能会很不方便。

所以，如果你想从火狐切换到 LibreWolf，你可能想在决定之前测试一下网页浏览体验。

![](/data/attachment/album/202111/21/121143d6r1ohzevwczorwj.png)

### 在 Linux 中安装 LibreWolf

对于任何 Linux 发行版，你可以使用 AppImage 文件或 Flathub 的 Flatpak 包。

如果你不知道，你可以参考我们关于 [使用 AppImage](https://itsfoss.com/use-appimage-linux/) 的指南和 [Flatpak 的资源](https://itsfoss.com/flatpak-guide/) 。

对于 Arch Linux 用户，它也可以在 [Arch 用户仓库（AUR）](https://itsfoss.com/aur-arch-linux/) 中找到。

也可以在他们的 [官方网站](https://librewolf-community.gitlab.io/install/) 或 [GitLab 页面](https://gitlab.com/librewolf-community) 中找到其他安装说明。

你试过 LibreWolf 吗？你喜欢用什么作为你的网页浏览器？请在下面的评论中分享你的想法！

---

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

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


Kubernetes 网络策略基础

>
> 在你通过 Kubernetes 部署一个应用之前，了解 Kubernetes 的网络策略是一个基本的要求。
>
>
>

![](/data/attachment/album/202111/21/130217ocykri3zbv37i6ou.jpg "Parts, modules, containers for software")

随着越来越多的云原生应用程序通过 Kubernetes 部署到生产环境，安全性是你必须在早期就需要考虑的一个重要检查项。在设计云原生应用程序时，预先嵌入安全策略非常重要。不这样做会导致后续的安全问题，从而导致项目延迟，并最终给你带来不必要的压力和金钱投入。

这么多年来，人们总是把安全留到最后，直到他们的部署即将发布到生产环境时才考虑安全。这种做法会导致项目交付的延迟，因为每个组织都有要遵守的安全标准，这些规定被绕过或不遵守，并承受大量的风险才得以实现可交付成果。

对于刚开始学习 Kubernetes 实施的人来说，理解 Kubernetes <ruby> 网络策略 <rt>  NetworkPolicy </rt></ruby> 可能会令人生畏。但这是在将应用程序部署到 Kubernetes 集群之前必须了解的基本要求之一。在学习 Kubernetes 和云原生应用程序时，请把“不要把安全抛在脑后！”定为你的口号。

### NetworkPolicy 概念

<ruby>   网络策略  <rt>  NetworkPolicy </rt></ruby> 取代了你所知道的数据中心环境中的防火墙设备 —— 如<ruby> 吊舱 <rt>  Pod </rt></ruby>之于计算实例、网络插件之于路由器和交换机，以及卷之于存储区域网络（SAN）。

默认情况下，Kubernetes 网络策略允许 <ruby>   吊舱  <rt>  Pod </rt></ruby> 从任何地方接收流量。如果你不担心吊舱的安全性，那么这可能没问题。但是，如果你正在运行关键工作负载，则需要保护吊舱。控制集群内的流量（包括入口和出口流量），可以通过网络策略来实现。

要启用网络策略，你需要一个支持网络策略的网络插件。否则，你应用的任何规则都将变得毫无用处。

[Kubernetes.io](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/) 上列出了不同的网络插件：

* CNI 插件：遵循 <ruby>   容器网络接口  <rt>  Container Network Interface </rt></ruby>（CNI）规范，旨在实现互操作性。
	+ Kubernetes 遵循 CNI 规范的 [v0.4.0](https://github.com/containernetworking/cni/blob/spec-v0.4.0/SPEC.md) 版本。
* Kubernetes 插件：使用桥接器和主机本地 CNI 插件实现基本的 `cbr0`。

### 应用网络策略

要应用网络策略，你需要一个工作中的 Kubernetes 集群，并有支持网络策略的网络插件。

但首先，你需要了解如何在 Kubernetes 的环境使用网络策略。Kubernetes 网络策略允许 [吊舱](https://kubernetes.io/docs/concepts/workloads/pods/) 从任何地方接收流量。这并不是理想情况。为了吊舱安全，你必须了解吊舱是可以在 Kubernetes 架构内进行通信的端点。

1、使用 `podSelector` 进行吊舱间的通信：

```
 - namespaceSelector:
    matchLabels:
      project: myproject

```

2、使用 `namespaceSelector` 和/或 `podSelector` 和 `namespaceSelector` 的组合进行命名空间之间的通信和命名空间到吊舱的通信。：

```
 - namespaceSelector:
    matchLabels:
      project: myproject
 - podSelector:
    matchLabels:
      role: frontend

```

3、对于吊舱的 IP 块通信，使用 `ipBlock` 定义哪些 IP CIDR 块决定源和目的。

```
 - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24

```

注意吊舱、命名空间和基于 IP 的策略之间的区别。对于基于吊舱和命名空间的网络策略，使用选择器来控制流量，而对基于 IP 的网络策略，使用 IP 块（CIDR 范围）来定义控制。

把它们放在一起，一个网络策略应如下所示：

```
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 192.168.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

```

参考上面的网络策略，请注意 `spec` 部分。在此部分下，带有标签 `app=backend` 的 `podSelector` 是我们的网络策略的目标。简而言之，网络策略保护给定命名空间内称为 `backend` 的应用程序。

此部分也有 `policyTypes` 定义。此字段指示给定策略是否适用于选定吊舱的入口流量、选定吊舱的出口流量，或两者皆有。

```
spec:
  podSelector:
    matchLabels:
      app: backend
  policyTypes:
  - Ingress
  - Egress

```

现在，请看 `Ingress`（入口）和 `Egress`（出口）部分。该定义规定了网络策略的控制。

首先，检查 `ingress from` 部分。

此实例中，网络策略允许从以下位置进行吊舱连接：

* `ipBlock`
	+ 允许 172.17.0.0/16
	+ 拒绝 192.168.1.0/24
* `namespaceSelector`
	+ `myproject`: 允许来自此命名空间并具有相同标签 project=myproject 的所有吊舱。
* `podSelector`
	+ `frontend`: 允许与标签 `role=frontend` 匹配的吊舱。

```
ingress:
 - from:
  - ipBlock:
      cidr: 172.17.0.0/16
      except:
      - 192.168.1.0/24
  - namespaceSelector:
      matchLabels:
        project: myproject
  - podSelector:
      matchLabels:
        role: frontend

```

现在，检查 `egress to` 部分。这决定了从吊舱出去的连接：

* `ipBlock`
	+ 10.0.0.0/24: 允许连接到此 CIDR
	+ Ports: 允许使用 TCP 和端口 5978 进行连接

```
egress:
 - to:
  - ipBlock:
      cidr: 10.0.0.0/24
  ports:
  - protocol: TCP
    port: 5978

```

### 网络策略的限制

仅靠网络策略无法完全保护你的 Kubernetes 集群。你可以使用操作系统组件或 7 层网络技术来克服已知限制。你需要记住，网络策略只能解决 IP 地址和端口级别的安全问题 —— 即开放系统互联（OSI）中的第 3 层或第 4 层。

为了解决网络策略无法处理的安全要求，你需要使用其它安全解决方案。以下是你需要知道的一些 [用例](https://kubernetes.io/docs/concepts/services-networking/network-policies/#what-you-can-t-do-with-network-policies-at-least-not-yet)，在这些用例中，网络策略需要其他技术的增强。

### 总结

了解 Kubernetes 的网络策略很重要，因为它是实现（但不是替代）你通常在数据中心设置中使用的防火墙角色的一种方式，但适用于 Kubernetes。将此视为容器安全的第一层，仅仅依靠网络策略并不是一个完整的安全解决方案。

网络策略使用选择器和标签在吊舱和命名空间上实现安全性。此外，网络策略还可以通过 IP 范围实施安全性。

充分理解网络策略是在 Kubernetes 环境中安全采用容器化的一项重要技能。

---

via: <https://opensource.com/article/21/10/kubernetes-networkpolicy>

作者：[Mike Calizo](https://opensource.com/users/mcalizo) 选题：[lujun9972](https://github.com/lujun9972) 译者：[perfiffer](https://github.com/perfiffer) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #462 Docker 贡献者数量远超 Linux

Summary: 更多：• GitHub 去年增加 1600 万新用户 • 美国计算机芯片繁荣的愿景让各城市趋之若鹜

![](/data/attachment/album/202111/21/142047n001ftuggtgqo0rf.jpg)

### Docker 贡献者数量远超 Linux

![](/data/attachment/album/202111/21/142104qfa10zxr1rl1a8af.jpg)

根据 [ZDnet 报道](https://www.zdnet.com/article/remote-work-developers-arent-planning-to-go-back-to-the-office/)，Docker 的 49593 个包有来自 215 个国家的高达 63.2 万名贡献者。这比估计的 Linux 贡献者数量（2 万）大了不止一个数量级，这意味着现在 GitHub 上 7300 万开发者中每 117 个开发者，就有一个对 Docker 有贡献。

>
> 老王点评：虽然说给 Docker 中众多的软件包做贡献容易一些，但是这个数量也非常令人吃惊。
>
>
>

### GitHub 去年增加 1600 万新用户

![](/data/attachment/album/202111/21/142126xcncgu5ho2n4n3uo.jpg)

据 [GitHub 年度报告](https://octoverse.github.com/)，GitHub 说它现在有 7300 万开发者用户，2021 年它获得了 1600 万新用户。用户创建了 6100 万个新存储库，有 1.7 亿个拉取请求被合并到项目中。以及在全球疫情前，有 41% 的开发者在办公室全职或兼职工作，但只有 10.7% 的人预计在疫情结束后会回到办公室。

>
> 老王点评：GitHub 一家独大的局面很难改变，就是不知道换帅之后会不会有变化。
>
>
>

### 美国计算机芯片繁荣的愿景让各城市趋之若鹜

![](/data/attachment/album/202111/21/142138xr11k295p2k5fz5x.jpg)

计算机芯片的短缺已经耗尽了全球经济的能量，影响了许多行业，并导致了对高通胀的担忧。美国大幅提高芯片产量的努力，让各个城市争相争取芯片厂商的落地。比如德克萨斯州的泰勒市，该市约有 17000 人，就正全力以赴地争取三星公司计划从明年初开始在美国建造的 [价值 170 亿美元的工厂](https://www.nytimes.com/2021/11/17/technology/samsung-semiconductor-chip-production.html)。

>
> 老王点评：看来不只是我们对芯片工厂热衷，美国也一样，就是不知道等产能拉上来之后会怎么样。
>
>
>


七个使用 wget 命令的技巧

Summary: 用你的 Linux 终端中从互联网上下载文件。

用你的 Linux 终端中从互联网上下载文件。

>
> 用你的 Linux 终端中从互联网上下载文件。
>
>
>

![](/data/attachment/album/202111/22/102927pjuji5juxzuikkg6.jpg "Computer screen with files or windows open")

`wget` 是一个下载网页文件的免费工具。它将互联网上的数据保存到一个文件或展示在终端上。实际上这也是像 Firefox 或 Chromium 这样的网页浏览器的工作原理。有一个区别是，网页浏览器默认将网页 <ruby> 渲染 <rt>  render </rt></ruby>在图形窗口中，并且通常需要用户主动来操作它们。而 `wget` 工具是无交互的使用方式，也就是说你可以使用脚本或定期使用 `wget` 来下载文件，不论你人是否在电脑面前。

### 使用 wget 下载文件

你可以通过提供一个特定 URL 的链接，用 `wget` 下载一个文件。如果你提供一个默认为 `index.html` 的 URL，那么就会下载该索引页。默认情况下，文件会被下载到你当前的工作目录，并保持原来的名字。

```
$ wget http://example.com
--2021-09-20 17:23:47-- http://example.com/
Resolving example.com... 93.184.216.34, 2606:2800:220:1:248:1893:25c8:1946
Connecting to example.com|93.184.216.34|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'

```

通过使用 `--output-document` 和 `-` 符号，你可以指示 `wget` 将数据发送到 <ruby> 标准输出 <rt>  stdout </rt></ruby>：

```
$ wget http://example.com --output-document - | head -n4
<!doctype html>
<html>
<head>
   <title>Example Domain</title>

```

你可以使用 `--output-document` 选项（简写为 `-O`）将下载文件命名为任何你想要的名称：

```
$ wget http://example.com --output-document foo.html

```

### 断点续传

如果你正在下载一个超大文件，你可能会遇到中断下载的情况。使用 `--continue`（简写为 `-c`），`wget` 可以确定从文件的哪个位置开始继续下载。也就是说，下次你在下载一个 4 GB 的 Linux 发行版 ISO 时，如果出现了错误导致中断，你不必重新从头开始。

```
$ wget --continue https://example.com/linux-distro.iso

```

### 下载一系列的文件

如果你要下载的不是单个大文件，而是一系列的文件，`wget` 也能提供很好的帮助。假如你知道要下载文件的路径以及文件名的通用范式，你可以使用 Bash 语法指示一个数字范围的起始和终点来表示这一系列文件名:

```
$ wget http://example.com/file_{1..4}.webp

```

### 镜像整个站点

使用 `--mirror` 选项你可以下载整个站点，包括它的目录结构。这与使用选项 `--recursive --level inf --timestamping --no-remove-listing` 的效果是一样的，该选项表明可以进行无限制的递归，得到你指定域下的所有内容。但你也可能会得到比预期多得多的内容，这取决于站点本身的老旧程度。

如果你正在使用 `wget` 来打包整个站点，选项 `--no-cookies --page-requisites --convert-links` 非常有用，它可以确保打包的站点是全新且完整的，站点副本或多或少是<ruby> 自包含的 <rt>  self-contained </rt></ruby>。

### 修改 HTML 标头

在计算机发送的通信报文里含有大量用于数据交换的<ruby> 元数据 <rt>  metadata </rt></ruby>。HTTP 标头是初始数据的组成部分。当你浏览某个站点时，你的浏览器会发送 HTTP 请求标头。使用 `--debug` 选项可以查看 `wget` 为每个请求发送了什么样的标头信息:

```
$ wget --debug example.com
---request begin---
GET / HTTP/1.1
User-Agent: Wget/1.19.5 (linux-gnu)
Accept: */*
Accept-Encoding: identity
Host: example.com
Connection: Keep-Alive

---request end---

```

你可以使用 `--header` 选项修改请求标头。实际上经常使用这种方式来模仿某特定浏览器，来测试或兼容某些编码糟糕、只能与特定代理通信的站点。

让请求被识别为来自 Windows 系统的 Microsoft Edge：

```
$ wget --debug --header="User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.59" http://example.com

```

你也可以假装为某个移动设备：

```
$ wget --debug --header="User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1" http://example.com

```

### 查看响应标头

与浏览器发送请求标头的方式一样，响应也包含有标头信息。你可以使用 `--debug` 选项来查看响应中的标头信息：

```
$ wget --debug example.com
[...]
---response begin---
HTTP/1.1 200 OK
Accept-Ranges: bytes
Age: 188102
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Etag: "3147526947"
Server: ECS (sab/574F)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

---response end---
200 OK
Registered socket 3 for persistent reuse.
URI content encoding = 'UTF-8'
Length: 1256 (1.2K) [text/html]
Saving to: 'index.html'

```

### 处理 301 响应

200 响应码意味着一切都在预料之中。而 301 响应则表示 URL 已经被永久迁移到了另外一个地方。这是站点管理员的一种常用手段，内容迁移后，为访问旧地址的用户留下寻找新地址的“线索”。`wget` 会默认跟随<ruby> 重定向 <rt>  redirect </rt></ruby>，这也是大部分情况下用户所希望的。

当然，你可以使用 `--max-redirect` 选项，用于控制 `wget` 默认处理 301 响应重定向的次数。设置为 `0` 意味着不会自动重定向到新的地址:

```
$ wget --max-redirect 0 http://iana.org
--2021-09-21 11:01:35-- http://iana.org/
Resolving iana.org... 192.0.43.8, 2001:500:88:200::8
Connecting to iana.org|192.0.43.8|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://www.iana.org/ [following]
0 redirections exceeded.

```

同时，你也可以设置为其他的数值来控制 `wget` 能重定向多少次。

### 展开 URL 缩写

使用`--max-redirect` 选项用于在实际访问之前查看 <ruby> URL 缩写 <rt>  shortened URL </rt></ruby>非常有用。缩写 URL 可用于用户无法完整拷贝和粘贴一个长 URL 时的<ruby> 印刷媒体 <rt>  print media </rt></ruby>，或是具有字数限制的社交网络（在类似 [Mastondon](https://opensource.com/article/17/4/guide-to-mastodon) 这种现代开源的社交网络上这并不是一个问题）。这种缩写具有一定的风险，因为本质上这些目的地是隐藏的。组合使用 `--head` 选项和 `--location` 选项来来查看 HTTP 头部并解开最终的目的地，你可以在不加载整个资源的情况下查看到缩写 URL 的完整内容：

```
$ wget --max-redirect 0 "https://bit.ly/2yDyS4T"
--2021-09-21 11:32:04-- https://bit.ly/2yDyS4T
Resolving bit.ly... 67.199.248.10, 67.199.248.11
Connecting to bit.ly|67.199.248.10|:443... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://example.com/ [following]
0 redirections exceeded.

```

从 `Location` 开始的倒数第二行输出，展示了实际的目的地。

### 使用 wget

若你开始考虑使用单个命令来实现整个网站访问的过程，`wget` 可以快速高效的帮你获取互联网上的信息，而不用在图形界面上耗费精力。为了帮你将它构造在你平常的工作流中，我们创建了一个 `wget` 常用使用方式和语法清单，包括使用它来查询 API 的概述。[在这里下载 Linux wget 速查表](https://opensource.com/downloads/linux-wget-cheat-sheet)。

---

来源: <https://opensource.com/article/21/10/linux-wget-command>

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

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


如何在 Linux 中挂载 Bitlocker 加密的 Windows 分区

Summary: 情况是这样的。我的系统自带 Windows 10 Pro，并且带有 BitLocker 加密功能。我 甚至在 Windows 启用了 BitLocker 加密的情况下，以双启动模式安装了 Ubuntu。

尝试挂载的时候，会提示“无法访问位置， No .filesystem or .Encrypted interface on D-Bus Object",然后给出一个关闭的选项，这个问题可以解决吗？

>
> 情况是这样的。我的系统自带 Windows 10 Pro，并且带有 BitLocker 加密功能。我 [甚至在 Windows 启用了 BitLocker 加密的情况下，以双启动模式安装了 Ubuntu](https://itsfoss.com/dual-boot-ubuntu-windows-bitlocker/)。
>
>
>

![](/data/attachment/album/202111/22/144133k6n9xsnnt46t0z94.jpg)

你可以轻松地从 Linux 中访问 Windows 文件。没有什么高科技的东西。只要进入文件管理器，点击通常位于“<ruby> 其他位置 <rt>  Other Locations </rt></ruby>”标签下的 Windows 分区。

![Mounting Windows partition through the file manager in Linux desktop](/data/attachment/album/202111/22/144146t9qo6pytmpqdpu2t.png)

对于 BitLocker 加密的 Windows 分区来说，这个过程也不是太复杂。只是当你试图挂载 Windows 分区时，它会要求你输入密码。

![Password required for encrypted Windows drive mount in Linux](/data/attachment/album/202111/22/144147a3u888k89c88oes8.png)

这是能工作的。在我的情况中，我输入了 48 位 BitLocker 恢复密码，它解密了 Windows 分区，并在带有 GNOME 40 的 Ubuntu 21.10 中毫无问题地挂载了它。

试试你的 BitLocker 密码。如果这不起作用，试试恢复密码。对于普通的 Windows 10 Pro 用户，恢复密码存储在你的微软账户中。

[BitLocker Recovery Password in Micrsoft Account](https://account.microsoft.com/devices/recoverykey?refd=support.microsoft.com)

输入恢复密码，你会看到 Windows 分区和它的文件现在可以访问。勾选“<ruby> 记住密码 <rt>  Remember Password </rt></ruby>”框也是为了进一步使用而节省时间。

![Encrypted Windows partition now mounted in Linux](/data/attachment/album/202111/22/144147hb5zs8kjuu5uv5pj.png)

如果上述方法对你不起作用，或者你不熟悉命令行，还有一个替代方法。

这个方法包括使用一个叫做 [Dislocker](https://github.com/Aorimn/dislocker) 的工具。

### 使用 Dislocker 在 Linux 中挂载 BotLocker 加密的 Windows 分区（命令行方法）

使用 Dislocker 分为两部分。第一部分是解开 BitLocker 的加密，并给出一个名为 `dislocker-file` 的文件。这基本上是一个虚拟的 NTFS 分区。第二部分是挂载你刚刚得到的虚拟 NTFS 分区。

你需要 BitLocker 密码或恢复密码来解密加密的驱动器。

让我们来看看详细的步骤。

#### 步骤 1：安装 Disclocker

大多数 Linux 发行版的仓库中都有 Dislocker。请使用你的发行版的包管理器来安装它。

在基于 Ubuntu 和 Debian 的发行版上，使用这个命令：

```
sudo apt install dislocker

```

![Installing Dislocker in Ubuntu](/data/attachment/album/202111/22/144148y36p9e9ztz699l9u.png)

#### 步骤 2：创建挂载点

你需要创建两个挂载点。一个是 Dislocker 生成 `dislocker-file` 的地方，另一个是将这个 `dislocker-file`（虚拟文件系统）作为一个回环设备挂载。

没有命名限制，你可以给这些挂载目录起任何你想要的名字。

逐一使用这些命令：

```
sudo mkdir -p /media/decrypt
sudo mkdir -p /media/windows-mount

```

![Creating mount points for dislocker](/data/attachment/album/202111/22/144148v100x4xd0bvidzre.png)

#### 步骤 3：获取需要解密的分区信息

你需要 Windows 分区的名称。你可以使用文件资源管理器或像 Gparted 这样的 GUI 工具。

![Get the partition name](/data/attachment/album/202111/22/144148c5dmmedf16ef9m5t.png)

在我的例子中，Windows 分区是 `/dev/nvme0n1p3`。对你的系统来说，这将是不同的。你也可以使用命令行来达到这个目的。

```
sudo lsblk

```

#### 步骤 4：解密分区并挂载

你已经设置好了一切。现在是真正的部分。

**如果你有 BitLocker 密码**，以这种方式使用 `dislocker` 命令（用实际值替换 `<partition_name>` 和 `<password>`）：

```
sudo dislocker <partition_name> -u<password> -- /media/decrypt

```

如果你只有恢复密码，请以这种方式使用该命令用实际值替换 `<partition_name>` 和 `<password>`）：

```
sudo dislocker <partition_name> -p<recovery_password> -- /media/decrypt

```

在解密该分区时，应该不会花很长时间。你应该在指定的挂载点看到 `dislocker-file`，在我们的例子中是 `/media/decrypt`。现在挂载这个 dislocker-file：

```
sudo mount -o loop /media/decrypt/dislocker-file /media/windows-mount

```

![](/data/attachment/album/202111/22/144149mye8qve8hirmxqjv.png)

完成了。你的 BitLocker 加密的 Windows 分区已经被解密并挂载到 Linux 中。你也可以从文件资源管理器中访问它。

![Mounting Dislocker decrypted Windows partition with file manager](/data/attachment/album/202111/22/144149lqqvg3gvgk5r44sd.png)

#### 文件系统类型错误的故障排除提示

如果你遇到这样的错误：

```
mount: /media/windows-mount: wrong fs type, bad option, bad superblock on /dev/loop35, missing codepage or helper program, or other error.

```

你应该在挂载时指定文件系统。

对于NTFS，使用：

```
sudo mount -t ntfs-3g -o loop /media/decrypt/dislocker-file /media/windows-mount

```

对于 exFAT，使用：

```
sudo mount -t exFAT-fuse -o loop /media/decrypt/dislocker-file /media/windows-mount

```

#### 解除对 Windows 分区的挂载

你可以从文件管理器中取消挂载的分区。只要**点击名为 windows-mount 的分区旁边的卸载符号**。

或者，你可以使用卸载命令：

```
sudo umount /media/decrypt
sudo umount /media/windows-mount

```

我希望这对你有帮助。如果你还有问题或建议，请在评论中告诉我。

---

via: <https://itsfoss.com/mount-encrypted-windows-partition-linux/>

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


硬核观察 #463 密码学家对加密货币使用“加密”这个词不满意

Summary: 更多：• 德国一个州正在将其 25000 台电脑从 Windows 转向 Linux • 《第 27 届互动小说年度大赛》决出胜利者

大名鼎鼎的AVG游戏，比如秋之回忆、缘之空

![](/data/attachment/album/202111/22/183514p6n6nvv45nviggad.jpg)

### 密码学家对加密货币使用“加密”这个词不满意

![](/data/attachment/album/202111/22/183524oypp3qd3t3z9yyzp.jpg)

密码学家门一直 [向公众澄清](https://www.theguardian.com/technology/2021/nov/18/crypto-cryptocurrency-cryptographers?mid=1) “<ruby> 加密 <rt>  crypto </rt></ruby>是指<ruby> 密码学 <rt>  cryptography </rt></ruby>”，而不是“<ruby> 加密货币 <rt>  cryptocurrency </rt></ruby>”。他们甚至还专门做了一个网站，他们说，“几十年来，‘crypto’一直被用作与密码学有关的事物的速记和前缀。”并且，密码学家们不准备向“一个可能无法在政府监管下生存的概念”让步。而事实上，在加密货币这个词中，前缀 crypto 指的就是密码学。

>
> 老王点评：你说的没错，但是我想早晚 crypto 会被更多人特指加密货币。
>
>
>

### 德国一个州正在将其 25000 台电脑从 Windows 转向 Linux

![](/data/attachment/album/202111/22/183543ctgkkl8t30o3zx8u.jpg)

德国北部的石勒苏益格-荷尔斯泰因州计划 [改用开源软件](https://blog.documentfoundation.org/blog/2021/11/18/german-state-planning-to-switch-25000-pcs-to-libreoffice/)，到 2026 年底，公务员和雇员（包括教师）使用的所有 25000 台计算机上的微软 Office 将被 LibreOffice 取代，Windows 操作系统将被 GNU/Linux 取代。该州议会已经将从专有系统过渡到开放系统的步骤编入法规。他们说，“我们已经在我们的 IT 部门测试了两年的 LibreOffice，我们的经验很清楚：它很有效，” 他们目前正在研究适合他们目的的五个发行版，但还没有选择哪个发行版作为标准。

>
> 老王点评：可能已经被德国地方拥抱开源的事迹麻木了，毕竟这不算什么大事是吧，对于 Linux 来说？
>
>
>

### 《第 27 届互动小说年度大赛》决出胜利者

![](/data/attachment/album/202111/22/183605bi9c8ij98yla9b98.jpg)

周六下午，91 名极客在 Twitch 上听取了《[第 27 届互动小说年度大赛](https://ifcomp.org/)》的获奖者名单。今年的比赛吸引了 71 个参赛作品，并筹集了约 1 万美元的现金奖励，第一名获得数百美元的奖金，前三分之二的人不等的分配了剩余奖金，最少的得到了 10 美元。此外还有很多有趣的非现金奖。第一名的作品有一个奇怪的标题《然后你来到了一个与前一个不一样的房子》。在这个文本冒险游戏中，你扮演一个少年，他开始出门……玩一个文本冒险游戏《贪吃的精灵：冒险 #1》……

>
> 老王点评：真是小众而有趣的活动，你听说过互动小说和文本冒险游戏吗？
>
>
>


使用 Powershell 来自动化 Linux、macOS 以及 Windows 流程

Summary: 自动化是 DevOps 的关键，但是，是否任何事都可以自动化？

微软的韭菜园子！！！

哈哈哈，微软当年针对开源软件的一系列骚操作，把口碑给败坏了。<br />
但是近些年，微软还是积极拥抱开源的。我觉得powershell可以了解下。至少比cmd好一点

自动化是 DevOps 的关键，但是，是否任何事都可以自动化？

>
> 自动化是 DevOps 的关键，但是，是否任何事都可以自动化？
>
>
>

![](/data/attachment/album/202111/23/123000eexe7iez7wsew72e.jpg "CICD with gears")

自动化控制了那些手工的、费力的和容易出错的过程，用运行自动化脚本的计算机代替了执行手工任务的工程师。每个人都认同手工流程是健康的 DevOps 模式的敌人。一些人认为自动化不是一件好事，因为它取代了辛勤工作的工程师，而另一些人则意识到它提高了一致性、可靠性和效率，节省了时间，（最重要的是）使工程师能够聪明地工作。

>
> “DevOps 并不只是自动化或者基础架构即代码。” — [Donovan Brown](http://www.donovanbrown.com/post/what-is-devops)
>
>
>

自从上个世纪 80 年代早期开始使用自动化流程和工具链以来，每当我听到或读到“自动化一切”的建议时，我总是会激动不已。虽然在技术上可以实现一切自动化，但自动化是复杂的，并且需要付出开发、调试和维护方面的代价。如果你曾经重新启用一个许久不用的 Azure 资源管理器（ARM）模板或很久以前编写的宝贵维护脚本，并期望它在几个月或几年之后仍然能够完美地执行，那么你就会明白，自动化就像任何其他代码一样，是脆弱的，需要持续的维护和培养。

所以，你应该对什么进行自动化并在何时进行自动化？

* 当你手动执行自动化流程超过一两次
* 当你需要经常地持续地执行自动化流程
* 自动化任何可被自动化的

更重要的是，什么是你不应该自动化的？

* 不要自动化一次性的流程，因为不值得投入，除非你会重新使用它作为参考文档，并定期验证它的可用性
* 不要自动化高度不稳定的流程，因为太复杂且昂贵
* 不要自动化有问题的流程，在自动化前先修复它们

举例来说，我的团队使用我们通用的协作和工程系统来不断的监控数百个用户活动。如果一个用户在三个月或者更长时间处于非活动状态，并且这个用户被分配了一个昂贵的许可证，我们就会重分配这个用户一个功能少一些但是免费的许可证。

如图 1 所示，这是一个没有技术挑战性的流程。这是一个令人费解且容易出错的过程，尤其是在执行上下文时与其他开发和运维任务切换时。

![Manual process to switch user license](/data/attachment/album/202111/23/123009p8u8ouddseevsugr.png "Manual process to switch user license")

*图 1 手工流程切换用户许可证*

顺带的，这里有一个用简单三步创建的价值流图的例子:

1. 可视化所有活动: 列出用户、过滤用户、重置许可证。
2. 确定利益相关者，即运营和授权团队。
3. 措施：

```
* 总交货时间（TLT）= 13 小时
* 总周期时间（TCT） = 1.5 小时
* 总效率百分比 = TLT/TCT*100 = 11.5%

```

如果你在人群流量大和容易看到的区域挂一个这些可视化的副本，比如在你的团队的讨论区、餐厅，或在去洗手间的路上，你将引发大量的讨论和主动反馈。例如，从视觉上看，很明显，手工任务是一种浪费，主要是由于漫长的流程等待时间造成的。

让我们研究一个简单的 PowerShell 脚本，它可以自动化该流程，如图 2 所示，将总交付时间从 13 小时减少到 4 小时加 60 秒，并将总体效率从 11.5 提高到 12.75%。

![Semi-automated PowerShell-based process to switch user license](/data/attachment/album/202111/23/123010owwfcklwsk4ywse4.png "Semi-automated PowerShell-based process to switch user license")

*图 2 半自动化的 PowerShell 脚本切换用户许可*

[PowerShell](https://opensource.com/article/19/8/variables-powershell) 是一种开源的基于任务的脚本语言。它可以在 [GitHub](https://github.com/powershell/powershell) 上找到。它构建在 .NET 上，允许你自动化 Linux、macOS 和 Windows 流程。具有开发背景的用户，特别是 C# 用户，将享受到 PowerShell 的全部好处。

下面的 PowerShell 脚本示例通过它的服务 [REST API](https://docs.microsoft.com/en-us/rest/api/azure/devops/?view=azure-devops-rest-5.1) 与 [Azure DevOps](https://docs.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops?view=azure-devops) 进行通信。脚本结合了在图 1 中的手动列表用户和过滤用户任务，识别了 Demo 组织中的所有两个月没有活动的、使用基本许可证或更昂贵的基本+测试许可证的用户，并将用户的详细信息输出到控制台。很简单！

首先，设置认证标头和其他变量，这些变量将在稍后的初始化脚本中使用：

```
param(
  [string]   $orgName       = "DEMO",
  [int]      $months        = "-2",
  [string]   $patToken      = "<PAT>"
)

# Basic authentication header using the personal access token (PAT)
$basicAuth = ("{0}:{1}" -f "",$patToken)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers   = @{Authorization=("Basic {0}" -f $basicAuth)}

# REST API Request to get all entitlements
$request_GetEntitlements    = "https://vsaex.dev.azure.com/" + $orgName + "/_apis/userentitlements?top=10000&api-version=5.1-preview.2";

# Initialize data variables
$members              = New-Object System.Collections.ArrayList
[int] $count          = 0;
[string] $basic       = "Basic";
[string] $basicTest   = "Basic + Test Plans";

```

接下来，使用此脚本查询所有授权，以识别不活动用户：

```
# Send the REST API request and initialize the members array list.
$response = Invoke-RestMethod -Uri $request_GetEntitlements -headers $headers -Method Get
$response.items | ForEach-Object { $members.add($_.id) | out-null }

# Iterate through all user entitlements
$response.items | ForEach-Object {
  $name    = [string]$_.user.displayName;
  $date    = [DateTime]$_.lastAccessedDate;
  $expired = Get-Date;
  $expired = $expired.AddMonths($months);
  $license = [string]$_.accessLevel.AccountLicenseType;
  $licenseName = [string]$_.accessLevel.LicenseDisplayName;
  $count++;

  if ( $expired -gt $date ) {

    # Ignore users who have NEVER or NOT YET ACTIVATED their license
    if ( $date.Year -eq 1 ) {
      Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName
    }
    # Look for BASIC license
    elseif ( $licenseName -eq $basic ) {
         Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName
    }
    # Look for BASIC + TEST license
    elseif ( $licenseName -eq $basicTest ) {
        Write-Host " **INACTIVE** " " Name: " $name " Last Access: " $date "License: " $licenseName
    }
  }
}

```

当你运行脚本时，你将得到以下输出，你可以将其转发给授权团队，以重置用户许可证：

```
**INACTIVE** Name: Demo1 Last Access: 2019/09/06 11:01:26 AM License: Basic
**INACTIVE** Name: Demo2 Last Access: 2019/06/04 08:53:15 AM License: Basic
**INACTIVE** Name: Demo3 Last Access: 2019/09/26 12:54:57 PM License: Basic
**INACTIVE** Name: Demo4 Last Access: 2019/06/07 12:03:18 PM License: Basic
**INACTIVE** Name: Demo5 Last Access: 2019/07/18 10:35:11 AM License: Basic
**INACTIVE** Name: Demo6 Last Access: 2019/10/03 09:21:20 AM License: Basic
**INACTIVE** Name: Demo7 Last Access: 2019/10/02 11:45:55 AM License: Basic
**INACTIVE** Name: Demo8 Last Access: 2019/09/20 01:36:29 PM License: Basic + Test Plans
**INACTIVE** Name: Demo9 Last Access: 2019/08/28 10:58:22 AM License: Basic

```

如果你将最后一步自动化，自动将用户许可设置为一个自由的利益相关方许可，如图3所示，你可以进一步将总体交付时间减少到65秒，并将总体效率提高到77%。

![Fully automated PowerShell-based process to switch user license](/data/attachment/album/202111/23/123010rujao3maq8aonx3j.png "Fully automated PowerShell-based process to switch user license")

*图 3 完全自动化的基于 Powershell 的流程来切换用户许可证。*

这个 PowerShell 脚本的核心价值不仅在于能够实现 *自动化*，还在于能够 *定期*、*持续* 和 *快速地* 执行这个流程。进一步的改进是使用 Azure 管道等调度器每周或每天触发脚本，但我将把程序化的许可证重置和脚本调度保留在未来的文章中。

这里有一个图表，可以直观地看到进展情况：

![Graph to visualize progress](/data/attachment/album/202111/23/123010rqt8zwttdvevtnmv.png "Graph to visualize progress")

*图 4，措施，措施，措施*

我希望你能喜欢这个简短的关于自动化、PowerShell、REST API 和价值流图的介绍。请在评论中分享你的想法和反馈。

---

via: <https://opensource.com/article/20/2/devops-automation>

作者：[Willy-Peter Schaub](https://opensource.com/users/wpschaub) 选题：[lujun9972](https://github.com/lujun9972) 译者：[FigaroCao](https://github.com/FigaroCao) 校对：[wxy](https://github.com/wxy)

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


一个正在开发中的类似 Notion 的开源 APP

>
> 它被称为“Notion 的开源替代品”，AppFlowy 旨在让你可以完全控制你的数据和定制选项。
>
>
>

![](/data/attachment/album/202111/23/162933pedqtdm73tk7tp49.jpg)

Notion 是深受团队和个人欢迎的生产力应用之一，而现在我们似乎有希望获得一个有前途的开源替代品。

这里为还没用过 Notion 的人介绍一下，Notion 是一个多功能合一的生产力应用，可以用于创建/管理任务、笔记、项目、数据，以及组建维基。

换句话说，它能让你自由组织你的<ruby> 工作流 <rt>  workflow </rt></ruby>，让你在一个地方就能集中完成所有事情。更进一步，Notion 还支持连接团队或邀请他人的协作功能。

那么，如果有一个可以提供类似 UI 和功能的开源应用会怎么样？

这就是 AppFlowy。

![](/data/attachment/album/202111/23/162421he83atti25ya8zxr.png)

### 什么是 AppFlowy

![Source: AppFlowy.io](/data/attachment/album/202111/23/162422n2ex16ujxk6escwe.png)

AppFlowy 和 Notion 非常相像，但有一个巨大的区别，那就是它是 100% 开源的。

虽然它还处在一个积极开发中的状态，但已经吸引到了不少的关注。至少可以说，尽管它是一个全新的东西，但任何开源替代项目都是令人兴奋的！

正如他们 GitHub 页面的表述，说明了为什么开发者们想要创造一个 Notion 的替代品：

>
> 我们都知道 Notion 有其局限性。比如说脆弱的数据安全性和糟糕的移动设备端兼容性。同样，其它一些协作工作管理工具替代品也具有各自的局限性。
>
>
>

因此，他们希望他们的的用户既拥有 Notion 的功能特性，又具备良好的数据安全性和由社区驱动的良好的原生体验。

他们也明确表示不想在功能特性和设计上与 Notion 相竞争。

>
> 坦率的讲，我们并没有声称在功能和设计上要优于 Notion，至少现在还是如此。此外，我们当前的首要任务也不在于提供更多的功能。相反，我们期望培养一个社区，使制作复杂工作场所管理工具的知识和设施民主化，同时通过为个人和企业配备一个多功能积木工具箱，使他们能够自己创造美好的事物。
>
>
>

听起来很吸引我！

继续关于 **AppFlowy** 的更多信息：

AppFlowy 的首个 macOS 版本已经在几天前发布了。它是用 Flutter 和 Rust 构建的。

它的目标是让用户和团队能够完整控制他们的数据和定制。他们还表示，他们希望提供包括移动设备在内的跨平台的原生体验。除此之外，你还可以离线访问你的工作区，这一点是与 Notion 不同的。

别忘了，社区可以发布定制主题和模板给他人使用，你可以按照你的需求任意定制。用户对它的发展能产生直接的影响。

它还将支持插件以扩展应用的功能。因此，即使你不具有任何编程经验，你也仍然可以选择使用这些插件来增强你工作空间的功能。并且，由于它的 UI 和 Notion 本身非常相似，如果你以后想要在两者之间切换，也不会让你感觉有太大的改变。

### 是否仅支持 macOS ？

到目前为止只有 macOS 的用户可以尝鲜使用 AppFlowy。但 Linux 和 Windows 客户端也在开发之中。你可以持续关注它的 [GitHub 主页](https://github.com/AppFlowy-IO/appflowy) 或订阅官网的最新通知。

开发者还希望能带来更多视觉上的改变和优化。

当然，它仍然处在开发阶段。所以也别期望它现在就能替代 Notion。一些类似于<ruby> 拖放模式 <rt>  drag/drop </rt> <ruby>  和离线模式的功能仍然还在它的  <a href="https://trello.com/b/NCyXCXXh/appflowy-roadmap">   路线图  </a>  之中。 </ruby></ruby>

如果你有兴趣的话，可以访问它的官方网站或 GitHub 页面获取更多的信息，以及为其发展做出贡献。

* [AppFlowy](https://www.appflowy.io)

### 总而言之

有了社区的支持，AppFlowy 可能是 Notion 的可靠替代品。基于免费和开源的事实让它一开始就吸引大量个人和团队来试用它。

我也开始期待它尽快增加对 Linux 的支持，我知道它已经在开发中了。

你如何看待 AppFlowy? 你会计划试用它吗？

---

via: <https://news.itsfoss.com/appflowy-development/>

作者：[Rishabh Moharir](https://news.itsfoss.com/author/rishabh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zengyi1001](https://github.com/zengyi1001) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #464 Rust 语言社区内讧，审核团队集体辞职

Summary: 更多：• JetBrains 发起成立 PHP 基金会 • 因微软赏金太少，安全研究人员曝光 Windows 提权零日漏洞

先知: Rust, I remember you!

Rust 还能平稳发展下去吗，难道我又要换编程语言了？

来自120.231.49.77的 Firefox 96.0|GNU/Linux 用户

不懂可以不写点评

所以刚成气候就内讧？？？

一怒曝光和利用漏洞做黑产没有区别, 你的脑洞也太大了吧.

![](/data/attachment/album/202111/23/184451b9zr5xsrezrkr9hy.jpg)

### Rust 语言社区内讧，审核团队集体辞职

![](/data/attachment/album/202111/23/184501liagfgq5uddxq8u1.jpg)

昨天，Rust 社区“帮助维护行为准则和社区标准”的审核团队突然宣布辞职，且即刻生效。他们用拉取请求发出了 [该声明](https://github.com/rust-lang/team/pull/671)，称辞职“是为了抗议核心团队不对任何人负责，除了他们自己。”[据悉](https://thenewstack.io/rust-mod-team-resigns-in-protest-of-unaccountable-core-team/)，这次冲突爆发的原因由来已久，有人 [指责](https://twitter.com/adamhjk/status/1462812664590045184) Rust 核心团队权力过大，他们之外的人无法决定谁加入核心团队，在 Rust 社区形成了一种“寡头政治”。也有人认为与 AWS 试图 [“接管” Rust](https://www.infoworld.com/article/3633002/the-future-of-rust.html) 有关。但目前具体情况尚没有得到澄清。而 Rust 核心团队已经火速任命了两位新的 [审核团队](https://www.rust-lang.org/governance/teams/moderation) 成员，以取代辞职的三位前成员。

>
> 老王点评：目前发展的很好的 Rust 语言，突然以这样的形式发生内讧，令整个社区为之震动，无论如何，我觉得这对 Rust 语言的发展是不利的。
>
>
>

### JetBrains 发起成立 PHP 基金会

![](/data/attachment/album/202111/23/184519whormoz5u9vhhm3l.jpg)

为 78% 的网站提供了动力的 PHP 已经有 [26 年历史](https://www.jetbrains.com/lp/php-25/) 了，终于有自己的基金会了，虽然这个基金会的成立原因让我百味杂陈。据悉，这项 [决定](https://blog.jetbrains.com/phpstorm/2021/11/the-php-foundation/) 背后的主要原因之一，是 PHP 的主要贡献者 Nikita Popov 决定离开 JetBrains，将精力从 PHP 转向 LLVM 。他在为 JetBrains 工作的近三年时间里，为 PHP 7.4/8.0/8.1 这三个大版本做出了重要贡献。[该基金会](https://opencollective.com/phpfoundation) 的成员除了 JetBrains 还包括 WordPress 背后的 Automattic，以及 Laravel、Zend 等公司。

>
> 老王点评：我居然忘记了 PHP 一直没有自己的基金会。虽然这次是由于主要贡献者离开而成立，但是希望可以带来更好的发展。
>
>
>

### 因微软赏金太少，安全研究人员曝光 Windows 提权零日漏洞

![](/data/attachment/album/202111/23/184533z8tmm2m2oq0qjzo2.jpg)

有安全研究人员在推特上说：由于微软调整了漏洞赏金计划，其原本想提交的一个影响所有受支持 Windows 操作系统版本的提权漏洞的“认定价值”，从 10000 美元瞬间跌到了 1000 美元。他称，大家对微软的新漏洞赏金政策感到十分沮丧，因而将其发现的漏洞 [公之于众](https://github.com/klinix5/InstallerFileTakeOver)。有安全研究人员认为他披露的漏洞，很容易让普通用户提权获得 SYSTEM 系统权限。

>
> 老王点评：虽然说微软这样的做法有些不厚道，但是一怒曝光也欠考虑。如果不满意微软的赏金，你可以不挖啊，这样直接曝光和利用漏洞做黑产有什么区别？
>
>
>


如何将 FreeDOS 作为嵌入式系统使用

>
> 现在，很多嵌入式系统都是在 Linux 上运行的。但是，在很久很久以前，嵌入式系统要么在一个定制的专有的平台上运行，要么在 DOS 上运行。
>
>
>

![](/data/attachment/album/202111/24/134734s6zuftzjgtt8herp.jpg "Computer laptop in space")

[FreeDOS 网站](https://www.freedos.org/) 宣称，大多数人使用 FreeDOS 来完成三项主要任务：

1. 玩经典的 DOS 游戏
2. 运行老式的 DOS 软件
3. 运行一款嵌入式系统

但是，运行一个“嵌入式”系统的意义是什么呢？

嵌入式系统基本上是一款非常小的系统，专用于运行一个特定的任务。你可以把现在的嵌入式系统当作是 *物联网*（IoT）的一部分，这包括传感器、恒温器和门铃摄像头。现在，很多嵌入式系统都是在 Linux 上运行的。

但是，在很久很久以前，嵌入式系统要么在一个定制的专有的平台上运行，要么在 DOS 系统上运行。在现在，一些基于 DOS 的嵌入式系统仍然在运行，例如，收银机或电话专用交换机（PBX）系统。举个例子来说，在 2017 年，酷爱列车的人发现一个正在运行 FreeDOS 的俄罗斯的电动列车控制系统 （俄语: *САВПЭ*），它使用特殊的软件来控制和监控郊区列车的线路，并发布乘客通告。

在 DOS 上建立一个嵌入式系统需要定义一个最小化的 DOS 环境来运行单个应用程序。幸运的是，设置一个最小化的 FreeDOS 环境是非常容易的。从技术上来说，启动 FreeDOS 并运行 DOS 应用程序仅需要内核和一个 `FDCONFIG.SYS` 配置文件。

### 安装一款最小化的系统

我们可以使用 QEMU 仿真器来模拟一个专用的、最小化的 FreeDOS 系统，并给它分配很少的资源。为了更准确地反映一个嵌入式系统，我将定义一个只有 8 MB 的存储器和仅仅有 2 MB 的硬盘驱动器的虚拟机。

为创建这个微小的虚拟硬盘，我将使用这个 `qemu-img` 命令来定义一个 2M 的文件：

```
$ qemu-img create tiny.img 2M
Formatting 'tiny.img', fmt=raw size=2097152

```

下面的这行命令定义了一个 32 位的 “i386” CPU、8MB 的存储器，使用 2MB 的 `tiny.img` 文件作为硬盘驱动器镜像，使用 FreeDOS 1.3 RC4 LiveCD 作为 CD-ROM 介质。我们也将机器设置为从 CD-ROM 驱动器启动（`-boot order=d`），尽管我们只需要用它来安装系统。在我们完成所有的设置后，我们将从该硬盘启动完成的嵌入式系统：

```
qemu-system-i386 -m 8 -hda tiny.img -cdrom FD13LIVE.iso -boot order=d

```

使用 “<ruby> 现场环境模式 <rt>  Live Environment mode </rt></ruby>” 来启动系统，这将为我们提供一个正在运行的 FreeDOS 系统，我们可以使用它来将一个最小化的 FreeDOS 转移到硬盘上。

![embedded setup](/data/attachment/album/202111/24/134748ddur1k49tzrj1ruk.png "Boot into the LiveCD environment")

*启动到 LiveCD 环境之中（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

我们需要在虚拟硬盘驱动器上为我们的程序创建一个分区。为此，从命令行中运行 `FDISK` 程序。`FDISK` 是 FreeDOS 上的一个标准的 *磁盘分区* 实用程序。使用 `FDISK` 来创建一个单个硬盘驱动器分区，占用整个（2 MB）硬盘驱动器。

![embedded setup](/data/attachment/album/202111/24/134748oihhkbbyszibsb8e.png "FDISK, after creating the 2 megabyte partition")

*FDISK，在创建 2 MB 分区后（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

但是，在你重新启动 FreeDOS 之前，FreeDOS 不会看到新的硬盘驱动器分区 — FreeDOS 仅在启动时读取硬盘详细信息。退出 `FDISK` ，并重新启动 FreeDOS 。

在重新启动后，你需要在新的硬盘驱动器上创建一个 DOS 文件系统。因为这里只有一个虚拟硬盘，FreeDOS 将识别其为 `C:` 驱动器。你可以使用 `FORMAT` 命令来在 `C:` 驱动器上创建一个 DOS 文件系统。使用 `/S` 选项将把操作系统文件（内核，外加一个 `COMMAND.COM` shell 的副本）转移到新的驱动器上。

![embedded setup](/data/attachment/album/202111/24/134748ebaai9w9vinpn09e.png "Format the new drive to create a DOS filesystem")

*格式化新的驱动器来创建一个 DOS 文件系统（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）* 你已经创建了硬盘驱动器并将其格式化，现在，你可以安装应用程序，这些应用程序是将会在新安装的嵌入式系统上运行的。

### 安装专用的应用程序

嵌入式系统实际上只是一个运行在一个专用系统上的单一用途的应用程序。这些应用程序通常是为其将要控制的系统而自定义构建的，例如，一台收银机、显示终端、或控制环境。在这个演示中，让我们使用一个来自 FreeDOS 1.3 RC4 安装光盘中的程序。它需要足够小，以适应我们为其创建的 2 MB 微型硬盘驱动器。这可以是任何东西，所以，为了好玩，让我们把它变成一个游戏。

FreeDOS 1.3 RC4 包含一些有趣的游戏。我喜欢的一个游戏是一个名称为 “Simple Senet” 的棋类游戏。它是一个基于 Senet 的古埃及棋类游戏。游戏的细节对这个演示并不重要，我们将安装它，并将其设置为嵌入式系统的专业应用程序。

为安装应用程序，在 FreeDOS 1.3 RC4 LiveCD 上，进入 `\PACKAGES\GAMES` 目录。你将在其中看到一个很长的软件包列表，而我们想要的 `SENET.ZIP` 。

![embedded setup](/data/attachment/album/202111/24/134748s4caqvbowzvn4ggq.png "A list of game packages from FreeDOS 1.3 RC4")

*来自 FreeDOS 1.3 RC4 的一个游戏软件包列表（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

为解压缩 “Simple Senet” 软件包到虚拟硬盘上，使用 `UNZIP` 命令。所有的 FreeDOS 软件包都是 Zip 文件，因此，你可以使用任意与 Zip 兼容的档案实用程序来管理它们。FreeeDOS 1.3 RC4 包含创建 Zip 档案文件的 `ZIP` 和提取 Zip 档案文件的 `UNZIP` 。它们都来自 [Info-Zip 项目](http://infozip.sourceforge.net/) 。

```
UNZIP SENET.ZIP -d C:\FDOS

```

通常，使用 `UNZIP` 来提取 Zip 文件到当前目录中。在命令行结尾的 `-d C:\FDOS` 选项将告诉 `UNZIP` 来提取 Zip 文件到 `C:\FDOS` 目录之中。（`-d` 指的是“目的地”）

![embedded setup](/data/attachment/album/202111/24/134749h89nfgt9y9qqyntt.png "Unzipping the Simple Senet game")

*解压缩 Simple Senet 游戏（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

为了让嵌入式系统启动时运行 “Simple Senet” 游戏，我们需要告诉 FreeDOS 来使用 Senet 作为系统的 “shell” 。 默认的 FreeDOS 的 shell 是 `COMMAND.COM` 程序，但是，你可以在 `FDCONFIG.SYS` 内核配置文件中使用 `SHELL=` 指令来定义一个不同的 shell 程序。我们可以使用 FreeDOS 的 Edit 来创建新的 `C:\FDCONFIG.SYS` 文件。

![Embedded edit senet](/data/attachment/album/202111/24/134749af8lji8lfcz3jp7n.png "Embedded edit senet")

*（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

如果你需要定义其它的参数来支持嵌入式系统，你可以将其添加到 `FDCONFIG.SYS` 文件之中。例如，你可能需要使用 `SET` 动作来设置环境变量，或者使用 `FILES=` 或 `BUFFERS=` 语句来调整 FreeDOS 内核。

### 运行嵌入式系统

在全面地完成嵌入式系统的定义之后，现在，我们可以重新启动计算机来运行嵌入式应用程序。运行一个嵌入式系统通常仅需要有限的资源，因此，在这个演示中，我们需要调整 QEMU 命令行来只从硬盘驱动器（`-boot order=c`）中启动，而不再定义一个 CD-ROM 驱动器：

```
qemu-system-i386 -m 8 -hda tiny.img -boot order=c

```

当 FreeDOS 内核启动时，它将读取 `FDCONFIG.SYS` 文件以获取启动参数。然后，它将使用 `SHELL=` 行的定义来运行 shell 。这将自动地运行 “Simple Senet” 游戏。

![embedded setup](/data/attachment/album/202111/24/134749ys2znchnc333s307.png "Running Simple Senet as an embedded system")

*作为一个嵌入式系统运行 Simple Senet（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

我们已经使用了 “Simple Senet” 来演示如何在 FreeDOS 上设置一个嵌入式系统。根据你的需要，你可以使用任何你喜欢的独立应用程序。在 `FDCONFIG.SYS` 中使用 `SHELL=` 行将其定义为 DOS 的 shell ，FreeDOS 将在启动时自动地启动该应用程序。

不过，在这里有一个限制。嵌入式系统通常不需要退回到一个命令行提示符之中，因此这些专用应用程序通常不允许用户退出到 DOS 之中。如果你设法退出了嵌入式应用程序，你可能会看到一个 “Bad or missing Command Interpreter” 的提示，你将需要在其中输入一个新的 shell 的完整路径。对于一个以用户为中心的桌面系统来说，这将是一个问题。但是在一个嵌入式系统上，它只专注执行一种工作的，那么，你也永远不需要退出嵌入式应用程序。

---

via: <https://opensource.com/article/21/6/freedos-embedded-system>

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

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


开发中的 KDE Plasma 5.24 新变化：增加 GNOME 式概览、防删功能

KDE第一！

不得不说KDE来了一个厉害的补刀。这个Pop!os乱删软件的事故告诉我们，千万别碰小作坊的linux发行版。

商店里有一个插件，只是较难用

来自117.136.57.174的 Opera Mobile 64.3|Android 10 用户

>
> KDE Plasma 正在升级中，以改善类似于 GNOME shell 的概览，并为非技术用户提供更多的可用性改进。
>
>
>

![](/data/attachment/album/202111/24/172946sdxdebf0zq67wrp7.png)

自从 2011 年 GNOME 3 以来，活动概览在与 GNOME 的互动中起到了关键作用。尽管它在发布时受到了严厉的批评，但许多用户现在已经爱上了它，导致其他一些桌面环境也在考虑实现类似的功能。

而且，看起来 KDE Plasma 正在添加类似的东西，它就像是一个全新的类似 GNOME 的概览。让我们来仔细了解一下。

### 新的 Plasma 概览

![Image: Vlad Zahorodnii / KDE Developer](/data/attachment/album/202111/24/172948k7kbpp4jbu77747u.png)

当我偶然看到 KDE 开发者 [Nate Graham 的博文](https://pointieststick.com/2021/11/19/this-week-in-kde-most-of-gnome-shell-in-the-overview-effect/) 时，我注意到了一个与 GNOME 活动概览非常相似的东西。

如上面的截图所示，当你在 KDE 上按 `Windows`/`Super` 键进入概览界面时，你就会看到它。

然而，值得注意的是，它仍然处在开发版本中。而且，它已经被合并到 KDE Plasma 5.24 中去了。

但是它和 GNOME 活动概览相似吗？

它看起来确实相似，但有一些关键的区别，其中包括：

* 在概览中，你可以完全访问底部面板。
* 搜索功能是由 KRunner 提供的，用来寻找应用程序和活动窗口。

#### 可以完全访问底部面板

如果你正在使用 KDE，你肯定知道底部面板。到目前为止，它与 GNOME 的概览效果最显著的区别是有任务栏。这使得用户可以访问一个统一的地方来打开应用程序，访问快速设置，并查看通知。

作为一个拥有任务栏的传统桌面理念的粉丝，这对于 Plasma 这样的传统桌面环境来说感觉非常完美。

#### 使用 KRunner 进行强大的搜索（新增加的功能）

![](/data/attachment/album/202111/24/172948k7kbpp4jbu77747u.png)

多年来，KRunner 无疑是 Linux 中最强大的应用程序启动器之一。它的一些神奇功能包括可以搜索：

* 文件
* 设置
* 应用程序
* 打开浏览器标签
* 打开现有窗口

因此，KRunner 已被整合到 KWin 的概览效果中，可以让你搜索现有窗口或启动新的应用程序。

我相信很多用户会非常高兴地看到这个整合，特别是那些已经使用 KRunner 的用户。

### 防止用户卸载 KDE

为了改善非技术用户的用户体验，Discover（KDE 的软件中心）现在会阻止任何删除任何关键软件包的行为，比如桌面环境。

![来自 PointiestStick 博客](/data/attachment/album/202111/24/172950d4pp4t4004b3tust.png)

你可能知道，这个问题是由 Linus Sebastian（Linus Tech Tips）强调的，当他在 Pop!\_OS 上安装 Steam 时，结果却删除了 GNOME、Xorg 和其他重要软件包。

所以，接下来的改进是为了解决这个问题，这对 KDE Plasma 5.24 来说是一个很好的补充。

### 其他改进

除了关键的亮点之外，KDE Plasma 5.24 旨在提高性能、响应速度和用户体验。

此外，也有一些细微的用户界面调整和小程序改进。要想了解更多，你应该浏览一下 [Nate 的博文](https://pointieststick.com/2021/11/19/this-week-in-kde-most-of-gnome-shell-in-the-overview-effect/) 以及与上述功能相关的 [合并请求](https://invent.kde.org/plasma/kwin/-/merge_requests/1688)。

### 总结

根据我对 KDE Plasma 的体验，它是一个非常注重生产力的桌面。KDE 在改善桌面环境的概览效果和可用性的同时，将包括一个同样具有生产力和专注性的用户界面，这是很有意义的。

如果你想尝试新的改进，恐怕你必须等待 Plasma 5.24 发布。虽然这对现在来说是要等待相当长的时间（2022 年 2 月），但我相信这将是值得的。

---

via: <https://news.itsfoss.com/kde-plasma-5-24-dev/>

作者：[Jacob Crume](https://news.itsfoss.com/author/jacob/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #465 攻击者不愿费力暴力破解长密码

Summary: 更多：• 央视新闻 AI 手语主播亮相 • 苹果“播客”应用找到了迅速提升了评分的捷径

密码长就有用吗，特别是现在这个钱可以买到用户数据的时代?

![](/data/attachment/album/202111/24/192055udahif3h3n9nrz3s.jpg)

### 攻击者不愿费力暴力破解长密码

![](/data/attachment/album/202111/24/192112fkzw8zjohyakc730.jpg)

根据微软蜜罐服务器网络收集的数据，大多数暴力破解攻击者主要 [尝试猜测短密码](https://therecord.media/attackers-dont-bother-brute-forcing-long-passwords-microsoft-engineer-says/)，很少攻击针对长的或包含复杂字符的凭证。微软安全研究员表示：“我分析了微软传感器网络中约 30 天的数据，这包括超过一百万次针对 SSH 的暴力攻击输入的凭据。77% 的破解行为使用的是长度在 1 至 7 个字符之间的密码。长度超过 10 个字符的密码尝试只占 6%。”

>
> 老王点评：看，你只需要使用一个比较长的密码就可以了，换句话说，你只要“比其他人跑得快，狗熊就追不上你”。
>
>
>

### 央视新闻 AI 手语主播亮相

![](/data/attachment/album/202111/24/192134qyffh4hzdd594s7y.jpg)

11 月 24 日，据 [央视新闻官微消息](https://weibo.com/2656274875/L2Vrqjan6?refer_flag=1001030103_)，今日，央视新闻联合百度智能云打造的首个 AI 手语主播正式亮相，将从 2022 北京冬奥会开始为听障人士提供全年无休服务。从视频来看，这位 AI 手语主播有着“真人般”的皮肤、头发、眼睛，形象亲切自然，气质优雅独特。据介绍，百度智能云采⽤语⾳识别、⾃然语⾔处理等⼈⼯智能技术，构建出⼀套复杂⽽精确的⼿语翻译引擎，实现了⽂字及⾳视频内容到⼿语的翻译。随后，通过专为⼿语优化的⾃然动作引擎，进⾏虚拟形象的驱动，将⼿语实时演绎为数字⼈的表情动作。

>
> 老王点评：AI 技术的正确打开方式，这比现在热捧的元宇宙有用多了。
>
>
>

### 苹果“播客”应用找到了迅速提升了评分的捷径

![](/data/attachment/album/202111/24/192439guzgtkkvhujk4jkw.jpg)

苹果默认安装的“播客”应用在一个多月内，在没有任何实际修复的情况下，从公开的 1.8 星得分一路上升到 4.6 星。而且它还在上升：该应用每天都有成千上万的评分，其中绝大多数都是 5 星。截至目前，该应用的总体评分已达到 4.7 星，并稳居苹果应用商店“播客”搜索结果的第一位。而做到这一切的做法是通过 [应用内的提示](https://www.theverge.com/2021/11/19/22791968/apple-podcasts-star-score-review-prompt) 来中断听众的播客收听，让他们提交更好的评论和评分。可能很多喜欢苹果“播客”应用的人，从未费心在苹果商店中查找它并给出评分；但是另外一方面，一些积极的评论根本不是对苹果“播客”应用的评论，它们是对播客内容本身的评论。

>
> 老王点评：滥觞一开，我觉得各种浏览器、内容应用都可以效仿了。
>
>
>


Kubernetes 复制控制器如何工作

Summary: 复制控制器负责管理吊舱的生命周期并确保在任何时候运行着所需的指定数量的吊舱。

复制控制器负责管理吊舱的生命周期并确保在任何时候运行着所需的指定数量的吊舱。

>
> 复制控制器负责管理吊舱的生命周期并确保在任何时候运行着所需的指定数量的吊舱。
>
>
>

![Ships at sea on the web](/data/attachment/album/202111/25/131052ltjaz53jqkfamthh.jpg "Ships at sea on the web")

你有没有想过，谁负责监督和管理 Kubernetes 集群内运行的“<ruby> 吊舱 <rt>  pod </rt></ruby>”的确切数量？Kubernetes 可以通过多种方式做到这一点，但一个常见的方法是使用 “<ruby> 复制控制器 <rt>  ReplicationController </rt></ruby>（RC）”。RC 负责管理吊舱的生命周期，并确保在任何时候运行着所需的指定数量的吊舱。但另一方面，它不负责高级的集群能力，如执行自动扩展、准备度和活跃探测以及其他高级的复制能力。Kubernetes 集群中的其他组件可以更好地执行这些功能。

简而言之，RC 的职责有限，通常用于不需要复杂逻辑就能达到某些要求的具体实现（例如，确保所需的吊舱数量总是与指定的数量相符）。如果超过了所需的数量，RC 会删除多余的，并确保即使在节点故障或吊舱终止的情况下，也有相同数量的存在。

简单的事情不需要复杂的解决方案，对我来说，这就是 RC 如何被使用的一个完美的比喻。

### 如何创建一个 RC

像大多数 Kubernetes 资源一样，你可以使用 YAML 或 JSON 格式创建一个 RC，然后将其发布到 Kubernetes API 端点。

```
$ kubectl create -f rcexample.yaml
 replicationcontroller/rcexample created

```

现在，我将深入一下 `rcexample.yaml` 的样子。

```
apiVersion: v1
kind: ReplicationController   →  RC 描述符
metadata:
 name: rcexample            →  复制控制器名字
spec:
 replicas: 3                 → 预期的吊舱数量
 selector:                  → 这个 RC 的吊舱选择器
   app: nginx
 template:                  → 用于创建新吊舱的模板
   metadata:
     labels:
       app: nginx
   spec:
     containers:
     - name: nginx
       image: nginx

```

进一步解释，这个文件在执行时创建了一个名为 `rcexample` 的 RC，确保三个名为 `nginx` 的吊舱实例一直在运行。如果一个或所有的 `app=nginx` 吊舱没有运行，新的吊舱将根据定义的吊舱模板创建。

一个 RC 有三个部分：

* 复制品：`3`
* 吊舱模板：`app=nginx`
* 吊舱选择器：`app=nginx`

注意，吊舱模板要与吊舱选择器相匹配，以防止 RC 一直创建吊舱。如果你创建的 RC 的吊舱选择器与模板不匹配，Kubernetes API 服务器会给你一个错误。

为了验证 RC `rcexample` 是否被创建：

```
$ kubectl get po
NAME     READY   STATUS       RESTARTS  AGE
rcexample-53thy  0/1  Running         0     10s
rcexample-k0xz6  0/1  Running         0     10s
rcexample-q3vkg  0/1  Running         0     10s

```

要删除 RC：

```
$ kubectl delete rc rcexample
 replicationcontroller "rcexample" deleted

```

注意，你可以对 RC 中的服务使用 [滚动更新](https://kubernetes.io/docs/tutorials/kubernetes-basics/update/update-intro/) 策略，逐个替换吊舱。

### 其他复制容器的方法

在 Kubernetes 部署中，有多种方法可以实现容器的复制。Kubernetes 成为容器平台的主要选择的主要原因之一是复制容器以获得可靠性、负载平衡和扩展的原生能力。

我在上面展示了你如何轻松地创建一个 RC，以确保在任何时候都有一定数量的吊舱可用。你可以通过更新副本的数量来手动扩展吊舱。

另一种可能的方法是通过使用 “<ruby>   复制集  <rt>  ReplicaSet </rt></ruby>（RS）”来达到复制的目的。

```
(kind: ReplicaSet)

```

RS 的功能几乎与 RC 相同。主要区别在于，RS 不允许滚动更新策略。

另一种实现复制的方法是通过使用 “<ruby>   部署  <rt>  Deployments </rt></ruby>”。

```
(kind: Deployment)

```

部署是一种更高级的容器复制方法。从功能上讲，部署提供了相同的功能，但在需要时可以推出和回滚变化。这种功能之所以能够实现，是因为部署有 “<ruby> 策略类型 <rt>  StrategyType </rt></ruby>” 规范来用新的吊舱替换旧的吊舱。你可以定义两种类型的部署策略：“<ruby> 重新创建 <rt>  Recreate </rt></ruby>” 和 “<ruby> 滚动更新 <rt>  RollingUpdate </rt></ruby>”。你可以如下指定部署策略：

```
StrategyType: RollingUpdate

```

### 总结

容器的复制功能是大多数企业考虑采用 Kubernetes 的主要原因之一。复制可以让你达到大多数关键应用程序需要的可靠性和可扩展性，作为生产的最低要求。

了解在 Kubernetes 集群中使用哪些方法来实现复制，对于决定哪种方法最适合你的应用架构考虑非常重要。

---

via: <https://opensource.com/article/21/11/kubernetes-replicationcontroller>

作者：[Mike Calizo](https://opensource.com/users/mcalizo) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


亚马逊自己的 Linux 发行版现在完全基于 Fedora 了

不基于欧拉，不爱国，大家抵制亚马逊

一时间不知是敌是友

>
> 亚马逊已经发布了 Amazon Linux 2022 的公开预览版，并有了新的发布模式。
>
>
>

![](/data/attachment/album/202111/25/142143j9xw8dtrty09ox30.png)

如果你还不知道，亚马逊有自己的通用 Linux 发行版，自然而然，它被称为 Amazon Linux。

它的目的是在 AWS 服务器上使用。当你部署服务器时，你可以选择使用 Amazon Linux，或其他流行的选择，如 Ubuntu、Debian 等。由于它来自亚马逊，所以没有许可费，而且亚马逊对软件库和软件包进行控制。你可以期待它与 AWS 工具紧密结合，并通过它获得新的 AWS 创新。

Amazon Linux 2022（AL2022）是其版本 1 和 2 之后的下一个版本，它将在 2022 年发布（你可以从版本号上猜到）。

### 即将发布的 Amazon Linux 2022 只基于 Fedora

到目前为止，Amazon Linux 的发布是基于红帽 Linux 和 Fedora 两者的组合。从 AL2022 开始，它将明确使用 Fedora 作为上游。

此举意在为 AWS 客户“提供各种最新软件，如更新的语言运行时，作为季度发布的一部分”。

为了提高安全性，减少攻击面，AL2022 还将启用 [SELinux](https://linuxhandbook.com/selinux/) 并默认执行。

### 与 Ubuntu 相似的新发布模式

Amazon Linux 还选择了一个更可预测的发布时间表。每两年将发布一个新的 Amazon Linux 主要版本，并将支持五年。这样，用户就会知道何时以及如何升级他们的操作系统。

这种“每两年一个新的 LTS 版本和 5 年的支持”与 Ubuntu 如今的特点非常相似。

### 还有什么？

AL2022 也能锁定到亚马逊 Linux 软件包库的特定版本。这使得用户可以控制如何以及何时吸收更新。

Amazon Linux 2022 在所有的地理区域都可以作为预览版（即 beta 版）体验。你可以访问他们的 GitHub 页面了解更多关于 AL2022 的信息。

---

via: <https://news.itsfoss.com/amazon-linux-2022-preview/>

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

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


硬核观察 #466 周易 AI 加速器因缺乏开源客户端而无法进入 Linux 内核主线

Summary: 更多：• 开发了五年的新 Linux 随机数发生器仍然无法进入内核主线 • 三分之一的暗网域名现在是 V3 洋葱网站

![](/data/attachment/album/202111/25/173725cgegv402ze1gzxnx.jpg)

### 周易 AI 加速器因缺乏开源客户端而无法进入 Linux 内核主线

![](/data/attachment/album/202111/25/173739bo8zm3w9mwbclz3b.jpg)

周易 AI 加速器是由 Arm 中国开发的，目前已经用在一些 SoC 中，如全志 R329。一位百度工程师发布了一个超过五千行代码的新内核驱动，[实现了对它的支持](https://www.phoronix.com/scan.php?page=news_item&px=Linux-Driver-Zhouyi-AI)。但是这个驱动目前只能进入暂存区，而无法进入 Linux 内核主线，因为 Arm 中国只是以二进制方式分发了用户空间组件（客户端），而没有提供它的源代码。甚至开发该驱动的开发者似乎也没有用户空间的源代码，而是要靠逆向工程来实现。

>
> 老王点评：这种闭源而小众的硬件，Linux 内核是不欢迎的。
>
>
>

### 开发了五年的新 Linux 随机数发生器仍然无法进入内核主线

![](/data/attachment/album/202111/25/173802fnaokb2jnz2ys7ul.jpg)

LRNG 是 Linux 上的一个新的 `/dev/random` 实现，它已经开发了五年多。它采用与现有内核实现不同的设计，但是完全兼容现有的接口。由于加密处理的改进、大型并行系统更好的可扩展性、关键代码路径中高达 130% 的性能提升等等，[这个实现更加出色](https://www.phoronix.com/scan.php?page=news_item&px=Linux-LRNG-43rd)。但是这个新的随机数发生器何时能进入 Linux 内核，目前还需要拭目以待。

>
> 老王点评：随机数的实现看似简单和基础，但是其实是整个安全系统的基石，所以内核对它非常慎重。
>
>
>

### 三分之一的暗网域名现在是 V3 洋葱网站

![](/data/attachment/album/202111/25/173814s8z2prirflpo8bbx.jpg)

过去两年，Tor 匿名网络经历了一个重大变化，.onion 域名取消了被称为 V2 地址的 16 个字符长的域名，取而代之的是被称为 V3 的 56 个字符长的域名。[据调查](https://www.darkowl.com/blog-content/tor-v2-depreciation-shifts-darknet-landscape)，目前 62% 是 V2 地址，38% 是 V3 地址。Tor 团队在 9 月自己的 V2-V3 分析中指出，预计 V2 网站将在未来一年内绝迹。

>
> 老王点评：V3 域名给对洋葱网络上的非法内容打击增加了困难。
>
>
>


使用 cowsay 命令的 3 种有趣方式

Summary: 想试一个只是好玩的应用吗？试试 cowsay。

想试一个只是好玩的应用吗？试试 cowsay。

>
> 想试一个只是好玩的应用吗？试试 cowsay。
>
>
>

![](/data/attachment/album/202111/25/232451f6v8fnne2np8e22e.jpg "Cow on parade.")

大多数时候，终端是一个生产力的动力源。但是，终端的作用不止是命令和配置。在所有杰出的开源软件中，有些是 [为了好玩而写的](https://opensource.com/life/16/6/fun-and-semi-useless-toys-linux)。我以前介绍过一些 [有趣的命令](https://opensource.com/article/21/11/fun-linux-commands)，但这篇文章只讲一个：古老的 `cowsay` 命令。

`cowsay` 是一只可配置的会说话（或思考）的牛。它接受一个文本字符串，并输出一个牛说话的图形。下面是一头牛在说它喜欢 Linux：

```
< I love Linux >
--------------
       \   ^__^
        \  (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||

```

要得到这个结果，我只需输入：

```
$ cowsay "I love Linux"

```

### 在 Linux 上安装 cowsay

你可以用你的包管理器安装 `cowsay`。在 Debian、Mint、Elementary 和类似的发行版上：

```
$ sudo apt install cowsay

```

在 Fedora 上：

```
$ sudo apt install cowsay-beefymiracle

```

### Cowsay 命令选项

`cowsay` 是一个简单又有点傻的应用。除了为你的终端机提供一些不同样式外，它并没有什么实际用途。例如，与其让一头普通的牛说一个有趣短语，你可以让一头长着古怪眼睛的牛说一个有趣的短语。输入：

```
$ cowsay -e @@ Hello

```

你会看到：

```
< Hello >
 -------
       \   ^__^
        \  (@@)\_______
           (__)\       )\/\
               ||----w |
               ||     ||

```

或者你可以让它伸出舌头。输入：

```
$ cowsay -T U Hello

```

你会看到：

```
< Hello >
-------
       \   ^__^
        \  (oo)\_______
           (__)\       )\/\
            U ||----w |
               ||     ||

```

更好的是，你可以将 `fortune` 命令与 `cowsay` 结合起来：

```
$ fortune | cowsay

```

现在你有了一头特别睿智的牛：

```
 _______________________________________
/ we:                                   \
|                                       |
| The single most important word in the |
\ world.                                /
 ---------------------------------------
       \   ^__^
        \  (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||

```

### “结实的奇迹”

在 Fedora 上，有一个额外的 `cowsay` 选项，也是一个非官方的项目吉祥物。多年来，Fedora 安装程序一直在展示宣传开源贡献的幻灯片。因为它们是根据汽车电影院的插曲设计的，所以幻灯片中常见的卡通人物是拟人化的热狗。

为了与这个主题保持一致，你可以用 Fedora 版本的 `cowsay` 调用一个所谓的“<ruby> 结实的奇迹 <rt>  beefy miracle </rt></ruby>”。（LCTT 译注：Fedora 17 的开发代号。）

```
$ cowsay -f beefymiracle Hello Fedora

```

你会得到一个非常傻的输出：

```
< Hello Fedora >
 --------------      .---. __
          ,    \    /     \   \    ||||
         \\\\      |O___O |    | \\||||
         \   //    | \_/  |    |  \   /
          '--/----/|     /     |   |-'
                 // //  /     -----'
                //  \\ /      /
               //  // /      /
              //  \\ /      /
             //  // /      /
            /|   ' /      /
            //\___/      /
           //   ||\     /
           \\_  || '---'
           /' /  \\_.-
          /  /    --| |
          '-'      |  |
                    '-'

```

### 图形化的 cowsay

如果你发现自己需要用图形化的牛来传递信息，可以使用 `xcowsay` 命令。这是一个类似于 `cowsay` 的图形程序，它接受一个由用户输入的文本字符串，或从另一个应用（如 Fortune）输送过来的文本字符串。

![A cartoon cow has a speech bubble that reads "I love Linux"](/data/attachment/album/202111/25/232504dx3txxf473gssvcf.png "graphical cowsay")

### 有趣的 Linux 命令

虽然 `cowsay` 不是一个有用的命令，但它是一个有趣的命令，相当于你终端的桌面小工具。它很适合用来分散注意力和进行有趣的管道命令实验（尝试将 `ifconfig` 管道到 `cowsay`，或 `lsblk` 或 `mount`，或任何东西！）。如果你想让你的终端更有趣，试试 `cowsay`。

---

via: <https://opensource.com/article/21/11/linux-cowsay-command>

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

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


不使用安装程序安装 FreeDOS

Summary: 这里是如何在不使用安装程序的情况下来手动设置你的 FreeDOS 系统。

但是装这个的意义是什么？现在能做什么？

这里是如何在不使用安装程序的情况下来手动设置你的 FreeDOS 系统。

>
> 这里是如何在不使用安装程序的情况下来手动设置你的 FreeDOS 系统。
>
>
>

![](/data/attachment/album/202111/25/235643wvmciyy2f8y3mi73.jpg "FreeDOS fish logo and command prompt on computer")

大多数的人应该能够使用安装程序来非常容易地安装 FreeDOS 1.3 RC4 。FreeDOS 安装程序会先询问几个问题，然后处理剩余的工作，包括为 FreeDOS 制作安装空间和使系统可启动。

但是，如果安装程序不适合你怎么办？或者，你更喜欢 *手动* 设置你的 FreeDOS 系统，而不喜欢使用安装程序怎么办？使用 FreeDOS ，你也可以做到这些！让我们在不使用安装程序的情况下逐步走完安装 FreeDOS 的步骤。我将使用 QEMU 虚拟机的一个空白的硬盘驱动器镜像来完成所有的步骤。我使用这个 Linux 命令来创建了一个 100 MB 的硬盘驱动器镜像：

```
$ qemu-img create freedos.img 100M

```

我下载了 FreeDOS 1.3 RC4 的 LiveCD ，并将其命名为 `FD13LIVE.iso` ，它提供了一个 “身临其境” 的环境，我可以在其中运行 FreeDOS ，包括所有的标准工具。大多数用户也使用 LiveCD 自带的常规安装程序来安装 FreeDOS 。但是，在这里我将仅使用 LiveCD ，并从其命令行中使用某些类型的命令来安装 FreeDOS 。

我使用这个相当长的 QEMU 命令来启动虚拟机，并选择 “Use FreeDOS 1.3 in Live Environment mode” 启动菜单项：

```
$ qemu-system-x86_64 -name FreeDOS -machine pc-i440fx-4.2,accel=kvm,usb=off,dump-guest-core=off -enable-kvm -cpu host -m 8 -overcommit mem-lock=off -no-user-config -nodefaults -rtc base=utc,driftfix=slew -no-hpet -boot menu=on,strict=on -sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny -msg timestamp=on -hda freedos.img -cdrom FD13LIVE.iso -device sb16 -device adlib -soundhw pcspk -vga cirrus -display sdl -usbdevice mouse

```

![manual install](/data/attachment/album/202111/25/235654a06h0ihi1pl4p011.png "Select \"Use FreeDOS 1.3 in Live Environment mode\" to boot the LiveCD")

*选择 "Use FreeDOS 1.3 in Live Environment mode" 来启动 LiveCD（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

这个 QEMU 命令行包含大量的选项，乍看可能会让你迷糊。因为你完全使用命令行选项配置 QEMU ，所以在这里有很多东西需要审查。但是，我将简单地重点说明几个重要的选项：

* `-m 8`：设置系统存储器（RAM）为 8 MB
* `-boot menu=on,strict=on`：使用一个启动菜单，这样，我可以选择从 CD-ROM 镜像或硬盘驱动器镜像启动
* `-hda freedos.img`：使用 `freedos.img` 作为硬盘驱动器镜像
* `-cdrom FD13LIVE.iso`：使用 `FD13LIVE.iso` 作为 CD-ROM 镜像
* `-device sb16 -device adlib -soundhw pcspk`：定义计算机带有一个 SoundBlaster16 声卡、AdLib 数字音乐卡、PC 扬声器模拟器（如果你想玩 DOS 游戏的话，这些模拟器很有用）
* `-usbdevice mouse`：将用户的鼠标识别为一个 USB 鼠标（在 QEMU 窗口中单击以使用鼠标）

### 对硬盘驱动器进行分区

你可以从 LiveCD 使用 FreeDOS 1.3 RC4 ，但是，如果你想安装 FreeDOS 到你的计算机中，你需要先在硬盘驱动器上制作安装空间。这需要使用 FDISK 程序来创建一个 *分区* 。

从 DOS 命令行中，输入 `FDISK` 来运行 *分区* 设置程序。FDISK 是一个全屏交互式程序，你只需要输入数字来选择菜单项。从 FDISK 的主菜单中，输入 `1` 来在驱动器上创建一个 DOS 分区，然后在接下来的屏幕上输入 `1` 来创建一个 “主” DOS 分区。

![using fdisk](/data/attachment/album/202111/25/235654dmpy9nrembmnrrun.png "Select \"1\" to create a partition")

*选择 `1` 来创建一个分区（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

![using fdisk](/data/attachment/album/202111/25/235654rj0bgbwvr8xbk7rw.png "Select \"1\" on the next menu to make a primary partition")

*在接下来的菜单上选择 `1` 来制作一个主分区（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

`FDISK` 会询问你是否想要使用全部的硬盘空间大小来创建分区。除非你需要在这个硬盘驱动器上和另外一个操作系统（例如 Linux）共享硬盘空间，否则，对于这个提示，你应该回答 `Y` 。

在 `FDISK` 创建新的分区后，在 DOS 能够识别新的分区信息前，你将需要重新启动 DOS 。像所有的 DOS 操作系统一样，FreeDOS 仅在其启动时识别硬盘驱动器信息。因此，如果你创建或删除任何的磁盘分区的话，你都将需要重新启动 FreeDOS ，只有这样做，FreeDOS 才能识别到更改的分区信息。`FDISK` 会提醒你重新启动，因此，你是不会忘记的。

![using fdisk](/data/attachment/album/202111/25/235655q84x4zawri0uiw8r.png "You need to reboot to recognize the new partition")

*你需要重新启动以识别新的分区（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

你可以通过停止或重新启动 QEMU 虚拟机来重新启动 FreeDOS，但是我更喜欢在 FreeDOS 命令行中使用 FreeDOS 的高级电源管理（`FDADPM`）工具来重新启动 FreeDOS 。为了重新启动，输入命令 `FDADPM /WARMBOOT` ，FreeDOS 将自动重新启动。

### 对硬盘驱动器进行格式化

在 FreeDOS 重新启动后，你可以继续设置硬盘驱动器。创建磁盘分区是这个过程的“第一步”；现在你需要在分区上创建一个 DOS *文件系统* ，以便 FreeDOS 可以使用它。

DOS 系统使用字母 `A` 到 `Z` 来识别“驱动器”。FreeDOS 将识别第一个硬盘驱动器的第一个分区为 `C` 驱动器，依此论推。你经常使用字母和一个冒号（`:`）来表示驱动器，因此我们在上面创建的新分区实际上是 `C:` 驱动器。

你可以在新的分区上使用 `FORMAT` 命令来创建一个 DOS 文件系统。这个命令带有一些选项，但是，我们将仅使用 `/S` 选项来告诉 `FORMAT` 来使新的文件系统可启动： `S` 意味着安装 FreeDOS “系统” 文件。输入 `FORMAT /S C:` 来在 `C:` 驱动器上制作一个新的 DOS 文件系统。

![formatting the disk](/data/attachment/album/202111/25/235655sxvjmbccmg3c3mss.png "Format the partition to create the DOS filesystem")

*格式化分区来创建 DOS 文件系统（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

使用 `/S` 选项，`FORMAT` 将运行 `SYS` 程序来传输系统文件。你将看到这是从 `FORMAT` 输出的一部分:

![formatting the disk](/data/attachment/album/202111/25/235655x4ylu4yuzu37pm4e.png "FORMAT /S will use SYS to make the disk bootable")

*`FORMAT /S` 将使用 SYS 来使磁盘可启动（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

### 安装软件

在使用 `FDISK` 创建了一个新的分区，并使用 `FORMAT` 创建了一个新的文件系统后, 新的 `C:` 驱动器基本上是空的。此时，`C:` 驱动器仅包含一份内核和 `COMMAND.COM` 命令行 shell 的副本。为使新的磁盘可以执行一些有用的操作，我们需要在其上安装软件。这是手动安装过程的最后步骤。

FreeDOS 1.3 RC4 LiveCD 包含所有的你可能希望在新的系统上所要安装的软件。每个 FreeDOS 程序都是一个单独的 “软件包” ，它实际上只是一个 Zip 档案文件。建立标准 DOS 环境的软件包存储在 LiveCD 上 `PACKAGES` 目录下的 `BASE` 目录之中。

你可以一次一个的将其中的每一个软件包都 “解压缩” 到硬盘驱动器来完成安装。在 `Base` 组中有 62 个单独的软件包，如果每次安装一个软件包，这可能会花费非常多的时间。不过，你可以运行一个只有一行的 `FOR` “循环” 命令来 `UNZIP` 每个程序。接下来 FreeDOS 可以为你 “解压缩” 所有的软件包。

`FOR` 循环的基本用法中提及的一个单个字母变量（让我们使用 `%F`），稍后，FreeDOS 将使用该字母变量来 “填充” 文件名称。`FOR` 还需要括号中的一个文件列表，这个命令会对每个文件都运行一次。用来解压一系列的 Zip 文件的语法看起来像这样：

```
FOR %F IN (*.ZIP) DO UNZIP %F

```

这将提取所有的 Zip 文件到当前目录之中。为提取或 `UNZIP` 文件到一个不同的位置，在 `UNZIP` 命令行结尾处使用 `-d` (“目的地”) 选项。对于大多数的 FreeDOS 系统来说，你应该安装软件包到 `C:\FDOS` 目录中：

![installing the software](/data/attachment/album/202111/25/235656tu8yewenxfr52qnk.png "Unzip all of the Base packages to finish installing FreeDOS")

*解压缩所有的基本软件包来完成安装 FreeDOS（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

FreeDOS 会处理剩余的工作，安装所有的 62 个软件包到你的系统之中。这可能会花费几分钟的时间，因为 DOS 在处理很多单个的文件时会很慢，这个命令需要提取 62 个 Zip 文件。如果我们使用单个的 `BASE.ZIP` 档案文件的话，安装过程可能会运行地更快，但是使用软件包的话，在你选择想要安装或不安装软件包时会提供更多的灵活性。

![installing the software](/data/attachment/album/202111/25/235656hprgxww8tui7ib8i.png "After installing all the Base packages")

*在安装所有的基本软件包后（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

在我们安装完所有的东西后，使用 `FDADPM /WARMBOOT` 来重新启动你的系统。手动安装意味着你的新 FreeDOS 系统没有常见的 `FDCONFIG.SYS` 配置文件，因此，当 FreeDOS 在启动时，它将假设一些典型的默认值。因为没有 `AUTOXEC.BAT` 文件，FreeDOS 也会提示你时间和日期。

![rebooting FreeDOS](/data/attachment/album/202111/25/235656b5dv4vah1ni77vin.png "Rebooting FreeDOS after a manual install")

*在手动安装后，重新启动 FreeDOS（Jim Hall, [CC-BY SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)）*

大多数的用户应该能够使用比较用户友好的过程来在一台新的计算机上安装 FreeDOS 。但是如果你想自己使用“古老的”方法来安装它，那么你可以手动运行安装步骤。这会提供一些额外的灵活性和控制权，因为是你自己安装的一切。现在你知道如何安装它了。

---

via: <https://opensource.com/article/21/6/install-freedos-without-installer>

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

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