使用 RT-Thread 实时操作系统驱动你的硬件

>
> 编程驱动一个微处理器芯片是相当有难度的，但在嵌入式系统开发上，实时操作系统可以为你解决很多此类的困难。
>
>
>

![Puzzle pieces coming together to form a computer screen](/data/attachment/album/202008/15/065451hu3784opp7p74qtp.jpg "Puzzle pieces coming together to form a computer screen")

从通用计算的角度，操作系统是提供计算机基本功能的一组软件。操作系统保证了计算机硬件可以探测并响应外围器件（如键盘、屏幕、移动设备、打印机等），并管理内存空间和外部存储空间。

虽然一个 CPU 核心同一时间只能运行单个线程，但现代操作系统可以使多个程序表现的像是在同时运行。每一个任务执行的如此之短，一系列任务切换的如此之快，以至于看起来多个任务像是在并行进行。这一切都是由一个叫做 *调度器* 的子进程来控制的。

操作系统通常是为计算机准备的，安装在硬盘上，管理计算机所要执行的任务。

### 为什么实时操作系统对嵌入式系统而言不可或缺

我曾经在 2008 年接触过嵌入式软件，那时候我还是一名学生，正在学习 [MCS-51](https://en.wikipedia.org/wiki/Intel_MCS-51) 微处理器编程。因为我的主修专业是计算机科学，我在其它课程中的所有程序都是在 PC 上执行的。为微处理器芯片编程是完全不同的体验。人生中第一次，我看到我的程序在裸板上运行，即使到现在我仍然记得，在我看到自己人生中第一个走马灯程序成功运行时的那种兴奋和激动。

但那种兴奋转瞬即逝。随着为裸板写出越来越多的程序，我遇到了越来越多的问题。这种沮丧并不是我独有的。直接为芯片写程序很困难，这也是 PC 要运行操作系统的很重要的原因。不幸的是，微处理器芯片（或嵌入式系统）通常是没有操作系统的，它们只能采用“硬编码”的方式编程，没有操作系统帮助你管理代码的运行。

在以“硬编码”的方式为处理芯片编写代码的时候，可能会遇到下列问题：

#### 并发

在裸板上是没有管理程序运行的现成守护进程的。嵌入式系统软件中，无可避免的要把所有的逻辑功能放在一个巨大的 `while (1)` 循环中。每个功能可能包含一个或多个延时函数。CPU 在运行延时函数的时候是顺序执行的，没有任何办法跨越一个不必要的延时。正因如此，运行事务的复位操作只能是等待。最终结果就是很多的 CPU 处理时间浪费在空循环上，这对任务的并发非常不利。

#### 模块化

从软件工程的角度，高內聚低耦合原则在软件开发过程中被不厌其烦的频频强调，但是嵌入式软件的不同模块之间常常是重度耦合的，很多功能都集中在一个巨大的 `while (1)` 循环中，很难切分为模块。设计低耦合软件在编程上只是繁琐一些，但在嵌入式系统上，要低耦合就难以编写比较大型的软件。

与此同时，如果使用了看门狗定时器，程序员还得在调用延时函数时倍加小心。如果延时时间太长，主程序没有得到及时“喂狗”的时机，那么看门狗将在程序运行过程中被触发。嵌入式系统软件开发过程中，需要考虑的东西太多了，即便是个简单的延时函数，都不能掉以轻心。软件越复杂，就越需要细心。想象一下，试图将这一系列具有精细时间关系的交互功能拆分为模块会怎么样。

#### 软件生态

很多高级的软件组件依赖于其所基于的底层操作系统的实现。举个自身的例子，我曾开发过一个基于 [FreeModbus](https://www.embedded-solutions.at/files/freemodbus-v1.6-apidoc/) 的开源项目，原计划将它移植到多种平台上，包括裸板。但与适应不同操作系统的便利性相比，有些功能过于复杂，无法在所有裸机板上实现。更糟糕的是，很多硬件平台因为缺乏一致性，只能各自从头做起。

直至现在，我的 Modbus 栈仍然不支持在裸板上运行。

很多像 Realtek、TI 和 MediaTek 的大厂，所提供的 WiFi 软件开发工具只能在操作系统上运行，且他们不公开固件源码，所以在裸板上根本没法使用这些工具。

#### 实时性

有些应用领域对实时性有要求，比如有些场景中，必须在特定的时间触发特定的软件操作。在工业控制场景，机器实体控制过程中，机械部件必须以确定的时间和确定的顺序执行动作。如果不能保证控制系统的实时性，整个机器可能出现功能异常，甚至危及工人生命。在裸板平台，所有的功能都塞在一个巨大的 `while (1)` 循环中，实时性无从保证。

#### 重用性

重用性依赖于模块化。没谁愿意翻来覆去做一成不变的事，对程序员而言更是如此。这不单单是浪费时间，更要命的是这使得代码的维护异常复杂。尤其是，因为功能的实现依赖于底层的硬件，使用了不同芯片的不同硬件平台上，同样的功能必须适配不同的硬件平台。这种情况下，重新发明轮子是无法避免的。

### 实时操作系统的优势

幸运的是，现在有针对各种微处理器芯片的操作系统，它们被称为实时操作系统（RTOS），和大多数操作系统一样，它们拥有调度器，保证代码以可预见的顺序运行。

我是在 2010 年初次在裸板上使用实时操作系统。那时候，[STM32](https://en.wikipedia.org/wiki/STM32) 系列微处理器（MCU）开始流行，因为这种微处理器性能强大、功能丰富，很多人在上面跑操作系统。我使用的是 [RT-Thread](https://github.com/RT-Thread/rt-thread) 操作系统，有很多基于它的现成组件可用。它使用的是 Apache 2.0 许可，和其它操作系统相比，我觉得这个很舒心。我已经基于它作为平台从事开发工作 10 年了。

使用实时操作系统为裸板编程，操作系统为我们解决了需要处理的大部分问题。

#### 模块化

在操作系统支持下，整个软件可以分割为多个任务（即线程）。每个线程拥有自己独立的运行空间。线程之间互相独立，这促进了软件的模块化。

#### 并发

如果一个线程有延时函数，它将自动让出 CPU 资源给需要 CPU 的线程，这提高了 CPU 的整体利用率，也提升了系统的并发性能。

#### 实时性

实时操作系统从设计上就具备实时性。每个线程都被指定了特定的优先级，比较重要的线程设置为更高的优先级，不重要的线程优先级也低。正是以这种方式，软件整体的实时性得到了保证。

#### 开发效率

操作系统提供了统一的抽象接口，这使得可重用组件得以不断积累，同时提升了开发效率。

操作系统是软件极客集体智慧的结晶。很多通用的软件功能，如信号量、事件提醒、邮箱、环形缓冲、单向链表、双向链表等，被抽象出来并实现了封装，可随时调用。

Linux、RT-Thread 等操作系统为五花八门的硬件实现了一致的硬件接口，也就是常说的设备驱动框架。正因如此，软件工程师可以专注于软件开发，而不用关心底层的硬件，也不用重复造轮子。

#### 软件生态

RT-Thread 丰富的软件生态为大量的从业者带来了巨大的改变。操作系统带来的模块化和重用性，使得程序员可以基于 RT-Thread 封装出方便嵌入式系统开发使用的可重用组件。这些组件可以在其它项目中重用，也可以分享给其他的嵌入式应用开发者，以最大化软件的价值。

比如，LkdGui 是个开源的单色显示图形库，你可能在工业控制面板上简单而美观的设置界面上见过它。LkdGui 提供了像描点、画线、绘矩形及显示文本、按钮组件、进度条等绘图功能。

![LkdGui](/data/attachment/album/202008/15/065758q2oi2pqupq1zi5pp.jpg "LkdGui")

使用像 LkdGui 这样兼具扩展性和健壮性的功能库，程序员们可以在同行已有工作成果的基础上充分施展自己的才能。而这一切，没有实时操作系统这样一个统一的基础，是根本不可能的。

### 试用 RT-Thread

作为开源极客，我已经在 GitHub 上开源了一些嵌入式软件。在发布开源软件之前，我很少对他人谈及自己曾经的项目，因为不同的人在使用各种不同的微处理器芯片和硬件平台，我的代码极可能无法在他人的板子上运行。类似于 RT-Thread 这样的实时操作系统极大的提升了软件的可重用性，所以全世界的不同领域的专家得以就同一个项目展开探讨。这鼓励着越来越多的人分享和交流各自的项目。如果你在做裸板的软件开发，下次可以试试 TR-Thread。

---

via: <https://opensource.com/article/20/6/open-source-rtos>

作者：[Zhu Tianlong](https://opensource.com/users/zhu-tianlong) 选题：[lujun9972](https://github.com/lujun9972) 译者：[silentdawn-zz](https://github.com/silentdawn-zz) 校对：[wxy](https://github.com/wxy)

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


#新闻拍一拍# Facebook 加入 Linux 基金会，成为白金会员

Summary: • 日本货轮触礁燃油泄漏原因查明：或因船员想靠岸连 Wi-Fi • 在京津冀、长三角等具备条件试点地区开展数字人民币试点

永别了Linux中国，快5年的老读者了，现在每次打开就被新闻拍一拍这个栏目恶心的不要不要的。希望平台以后还是越办越好吧，但是我是不会回来了。

![](/data/attachment/album/202008/15/074148mnkezk0kznrkeyhr.jpg)

#### Facebook 加入 Linux 基金会，成为白金会员

社交巨人 Facebook 加入了 Linux 基金会，成为白金会员。作为白金会员，Facebook 开源负责人 Kathy Kam 将加入基金会的董事会。Facebook 向很多开源项目贡献了代码，如 React JS项目，它也是 Linux 基金会托管的项目 Presto、GraphQL、Osquery 和 ONNX 的主要贡献者。

来源：[solidot](https://www.solidot.org/story?sid=65248)

>
> 拍一拍：原来才加入啊。
>
>
>

#### 日本货轮触礁燃油泄漏原因查明：或因船员想靠岸连 Wi-Fi

近日，一艘装载了约 200 吨柴油和 3800 吨船用燃料油日本货轮在在途经毛里求斯东南海域时触礁，随后造成货轮船体出现破裂，导致大量燃料油泄漏，毛里求斯宣布进入环境紧急状态。8 月 14 日，据媒体报道，责营运该货轮的公司针对这起事故进行了调查，初步调查结果显示货轮触礁的原因可能是因为船员想将船靠近陆地，方便连上 Wi-Fi。

来源：[快科技](https://www.cnbeta.com/articles/tech/1015795.htm)

>
> 拍一拍：这事是 Wi-Fi 的锅吗？
>
>
>

#### 在京津冀、长三角等具备条件试点地区开展数字人民币试点

商务部发布关于印发全面深化服务贸易创新发展试点总体方案的通知。在“全面深化服务贸易创新发展试点任务、具体举措及责任分工”部分提出：在京津冀、长三角、粤港澳大湾区及中西部具备条件的试点地区开展数字人民币试点。

来源：[商务部](https://www.cnbeta.com/articles/tech/1015677.htm)

>
> 拍一拍：谨慎乐观地看待这件事。
>
>
>


在树莓派 3 上安装 Fedora

Summary: 在树莓派上运行 Fedora。

在树莓派上运行 Fedora。

![](/data/attachment/album/202008/15/232153dxw9jan3l2jg3aii.png)

>
> 在树莓派上运行 Fedora。
>
>
>

[树莓派基金会](https://www.raspberrypi.org/about/)这几年来生产了很多型号。本文的安装过程已经在第三代树莓派上进行了测试：[3B v1.2](https://www.raspberrypi.org/products/raspberry-pi-3-model-b/) 和 [B+](https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/)（较旧的 [树莓派 2](https://www.raspberrypi.org/products/raspberry-pi-2-model-b/) 和新的 [树莓派 4](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/) 都还没有测试）。这些是已经发布了几年的信用卡大小的树莓派。

### 获取硬件

你需要一些硬件组件，包括树莓派。你不需要任何 [HaT（安装在顶部的硬件）](https://www.raspberrypi.org/blog/introducing-raspberry-pi-hats/) 板或 USB 天线。如果你使用过树莓派，那么可能会有这些。

* **当前网络**。也许是你的家庭实验室。
* **网线**。连接当前网络到树莓派
* **树莓派 3**，型号 B 或 B+。
* **电源**。
* **8 GB 或更大容量的 micro-SD 卡**。
* **键盘**和**显示器**。

键盘和显示器共同组成本地控制台。即使没有控制台，也能进行操作（尽管很复杂），例如设置自动安装然后通过网络连接。在 Fedora 首次启动时，本地控制台可轻松回应配置问题。同样，在 AP 配置期间出错可能会破坏网络配置，从而阻止远程用户连入。

### 下载 Fedora Minimal

* 查找 Fedora 的[其他可选架构镜像](https://alt.fedoraproject.org/alt/)。
* 下载 [ARM® aarch64 架构镜像](https://download.fedoraproject.org/pub/fedora-secondary/releases/32/Spins/aarch64/images/Fedora-Minimal-32-1.6.aarch64.raw.xz)。

Fedora Minimal 镜像是 [Fedora 的其他可选下载之一](https://alt.fedoraproject.org/)，它有所有必需的核心软件包和网络软件包（嗯，是几乎，注意下面的 dnsmasq）。该镜像包含一个现成的文件系统，它已经安装了 400 多个软件包。此最小镜像不包括流行的软件包，像开发环境、互联网服务或桌面。这些类型的软件不是这里所必需的，如果安装它们，可能会占用过多的内存。

Fedora Minimal 原始镜像可安装在小型 SD 卡上，并在少于 1GB 的内存中运行（这些旧的树莓派有 1GB 的内存）。

下载文件的名称类似于 `Fedora-Minimal-32-1.6.aarch64.raw.xz`。该文件已压缩，大小约为 700MB。文件解压缩后为 5GB。这是一个 ext4 文件系统，它大部分是空的：已使用约 1GB，空余 4GB。这些空的空间是压缩文件比未压缩的原始文件小得多的原因。

### 复制到 micro-SD 卡

* 将镜像复制到 micro-SD 卡。

这可能比听起来更复杂，而且会带来痛苦的体验。找到一个[良好的 micro-SD 卡](https://www.jeffgeerling.com/blog/2019/raspberry-pi-microsd-card-performance-comparison-2019)需要花费精力。然后是将卡插到计算机的挑战。也许你的笔记本电脑有全尺寸的 SD 卡插槽，你还需要卡适配器，或者你需要一个 USB 适配器。然后，在进行复制时，操作系统可能会帮助你，也可能会妨碍你。你可能很幸运有 [Fedora Media Writer](https://fedoramagazine.org/make-fedora-usb-stick/)，或使用这些 Linux 命令：

```
unxz ./Fedora-Minimal-32-1.6.aarch64.raw.xz
dd if=./Fedora-Minimal-32-1.6.aarch64.raw of=/dev/mmcblk0 bs=8M status=progress oflag=direct

```

### 安装 Fedora

* 连接树莓派、电源线、网线和 micro-SD 卡。
* 打开电源。
* 当图形芯片通电时，看见彩色框。
* 等待 [anaconda 安装程序](https://fedoraproject.org/wiki/Anaconda)启动。
* 回答 anaconda 的设置问题。

操作系统的初始配置需要几分钟的时间。等待启动需要花费几分钟，还需要花费一些时间填写 anaconda 的文本安装程序的问题。在下面的例子中，用户名为 `nick`，并且还是管理员（`wheel` 组的成员）。

恭喜你！你的树莓派已启动并可运行。

### 更新软件

* 用 `dnf update` 更新软件包。
* 通过 `systemctl reboot` 重启。

多年来，很多人为使树莓派正常工作付出了很多工作。使用最新的软件，以确保你从他们的辛勤工作中受益。如果你跳过此步骤，你可能会发现有些东西无法正常工作。

此次更新下载并安装了约一百个软件包。由于存储设备是 micro-SD 卡，因此写入新软件的过程很慢。这就是 90 年代使用存储器的感觉。

### 可以摆弄的东西

如果你想摆弄的话，此时可以设置其他一些内容。这都是可选的。试试这些。

* `sudo hostnamectl set-hostname raspi` 替换 `localhost` 主机名。
* 用 `ip addr` 查找 IP 地址。
* 尝试 SSH 登录，甚至使用 `ssh-copy-id` 设置基于密钥的登录。
* 使用 `systemctl poweroff` 关机。

---

via: <https://fedoramagazine.org/install-fedora-on-a-raspberry-pi/>

作者：[Nick Hardiman](https://fedoramagazine.org/author/nickhardiman/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


为什么犯错让我成为一个更好的系统管理员

Summary: 诀窍就是同一个错误不要犯两次。

诀窍就是同一个错误不要犯两次。

>
> 诀窍就是同一个错误不要犯两次。
>
>
>

![](/data/attachment/album/202008/16/001203jeyztczb8t6q8egc.jpg)

到目前为止，我已做了十多年 [Fedora](http://getfedora.org) 贡献者。 Fedora 有一个由开发者和用户组成的大型社区，其中每一个人，不管是极富洞察力的用户还是出色的程序员，都有一些独有的技能。我喜欢这样的社区，因为它能激励我培养自己的新技能。

对我来说，培养技能最好的方法就是犯错，比如把事情搞得一团糟。犯什么样的错误不重要，因为相比错误本身，我在脱离困境的过程里学习到了什么更重要。

### 为什么犯错误是好事

我依然记得我犯的第一个计算机错误。我家的第一台电脑是我叔叔升职后送个我们的爱普生笔记本电脑，它有一个特别快的 10 MHz 处理器，因为太重了，所以还有一个手提把手。我很喜欢它。

它运行 DOS，但有一个基于文本的菜单应用，所以对新手用户比较友好。硬盘菜单有十个“页面”，每个“页面”可以配置十个命令。我们有一个游戏页面，还有一个页面放些“无聊的东西”，比如文字处理程序和电子表格等等。

硬盘菜单还有一些其他功能，当我玩腻了游戏，就会去探索它们。有一天，我决定使用菜单的账户功能。账户不会改变出现的应用程序，但在某种程度上，可以防止对应用程序未经授权的访问。你可以直接跳到 DOS 中取代它，但使用账户仍然是一个不错的尝试。

我为自己、父母和妹妹创建了账户。虽然我父母有点不开心，但他们最终迁就了我。万事顺遂了一段时间后，妹妹忘记了她的账户密码。于是，我父母让我删掉她的密码，但是没有妹妹的密码去登录账户，我就无法删除她的密码（那是在 90 年代初，一个比现在简单得多的时代）。要怎么办？要怎么办？

那以后一段时间，我们一直试着猜测密码，直到有一天，我决定尝试做一些我还没有做过的事情。当我第一次创建帐户时，我设置了一个主密码。如果我输入主密码来代替我妹妹的密码，会发生什么呢？

如果你在想，“这当然不会有用的”，那么显然你不熟悉 90 年代安全策略的天真幼稚。有了主密码（顺便说一下，主密码是 “worf” ，指的是企业号星舰的克林贡人安全主管，如果你不是《星际迷航：下一代》粉丝的话），我可以删除所有密码。于是，家里的每个人又都可以毫无障碍地使用电脑了。

### 试运行的重要性

在那之后，我又犯了更大更有益的错误。比如，在我第一次做系统管理员时，当时我正整理一些数据以重新配置存储阵列。有一次，我意外地颠倒了源路径和目标路径，而且那是一个带有 `——delete` 标志的 `rsync` 命令。真的是太糟糕了!

幸运的是，我自己的账户也崩溃了，这让我的道歉更容易被其他受影响的用户接受。对我们所有人来说更幸运的是，我们有备份。所以那天结束的时候，每个人的文件都找回来了，我还学到了一个宝贵的教训，那就是在进行破坏性同步之前，先使用 `--dry-run` 标志试运行。

### 以正确的方式处理错误

我不介意犯错误。这些年来，我积累了很多实践经验，学到的诀窍就是不要犯同样的错误。从错误中学习能让我在技能和事业上取得进步，并发现新的会犯的错误。作为 Linux 系统管理员，我总是试图在一个安全的环境（测试平台就很好）中犯错误，确保我可以从错误中恢复（备份真的非常非常重要！），并给以后的我留个笔记，这样他就不会重复犯错（文档是你的朋友）。当然，还要勇于承认自己的错误，并在出现问题时清楚地与用户沟通。如果我一直这样做，也许有一天我就会觉得我很清楚我在做什么！

---

via: <https://opensource.com/article/20/8/sysadmin-mistakes>

作者：[Ben Cotton](https://opensource.com/users/bcotton) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Starryi](https://github.com/Starryi) 校对：[wxy](https://github.com/wxy)

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


#新闻拍一拍# 数据显示目前全球游戏玩家数量已超过 30 亿

Summary: • Ubuntu 18.04.5 和 16.04.7 LTS 发布 • Google 继续尝试在 Chrome 86 中隐藏完整网址

![](/data/attachment/album/202008/16/080730ccqa5jajhcrqpp8z.jpg)

#### 数据显示目前全球游戏玩家数量已超过 30 亿

DFC Intelligence 发布报告，截至今年年中，全球游戏玩家人口目前已经超过了 30 亿。有近一半的玩家只使用智能手机玩游戏，亚洲地区只使用移动游戏市场的规模是最大的。即便如此，在 PC 游戏方面，中国也是参与度最高的国家，拥有 3 亿用户，其次是印度的近 1.5 亿。2023 年游戏行业将突破 30 亿用户，收入将达 2000 亿美元。亚洲是付费游戏消费者的主要地区，达到 14.2 亿人。

来源：[cnBeta.COM](https://hot.cnbeta.com/articles/game/1016127.htm)

>
> 拍一拍：这里也有很多中国游戏厂商的“功劳”啊。
>
>
>

#### Ubuntu 18.04.5 和 16.04.7 LTS 发布

Ubuntu 18.04.5 从 Ubuntu 20.04 引入了更新的硬件支持堆栈，因此可在较新的硬件平台上正常运行。Ubuntu 18.04.5 服务器版本则默认使用较旧的内核，但也可以轻松切换到更新的 HWE 内核。Ubuntu 16.04.7，此次更新不会带来任何新的硬件支持堆栈，而是重点专注于交付最新的安全软件包更新和其他修复程序。

来源：[开源中国](https://www.oschina.net/news/117937/ubuntu-18-04-5-n-16-04-7-released)

>
> 拍一拍：不知道还有多少人继续使用老版本，甚至连点版本都不升级？
>
>
>

#### Google 继续尝试在 Chrome 86 中隐藏完整网址

Google 多次尝试在浏览器地址栏隐藏完整的网址，搜索巨人也许是认为长地址是邪恶的。它的每一次尝试都遭到了批评，但这并没有阻止了它继续推进这一计划。支持者认为隐藏完整域名将有助于增加钓鱼的难度，但批评者认为此举旨在让用户一直停留在 Google 内容上，而它将能展示更多的广告。

来源：[solidot](https://www.solidot.org/story?sid=65253)

>
> 拍一拍：个人感觉利弊参半吧，但是 Chrome 的重点难道不该是如何解决占内存问题么？
>
>
>


使用 PDF Mix Tool 执行常见的 PDF 编辑任务

>
> PDF Mix Tool 是一个简单、轻巧的开源 PDF 编辑应用，可让你从 PDF 中提取页面、合并两个 PDF、从 PDF 中删除页面等。
>
>
>

![](/data/attachment/album/202008/16/203411puozfr91f1pmzg9z.jpg)

### PDF Mix Tool：一个简单的开源 PDF 编辑工具

![](/data/attachment/album/202008/16/203630tytdct4ndzzorcx7.png)

有[几个可以在 Linux 中使用的 PDF 编辑器](https://itsfoss.com/pdf-editors-linux/)，我通常将它们分为两类：

* 可让你编辑内容（注释、高亮、更改文本、添加/删除图像等）的 PDF 编辑器，
* 可让你通过合并、分割、提取页面等来修改文件的 PDF 编辑器。

[PDF Mix Tool](https://scarpetta.eu/pdfmixtool/) 属于第二类。它是用 C++ 和 Qt5 编写的开源软件。它可让你合并两个或更多 PDF 文件，并为每个文件指定页面，还有旋转页面、添加空白页、删除页面以及从 PDF 文件提取页面。

在本周的开源软件亮点中，让我们看一下使用 PDF Mix Tool。

### 使用 PDF Mix Tool 在 Linux 中编辑 PDF

![](/data/attachment/album/202008/16/204321szcxeo0cvkcc0k9y.png)

PDF Mix Tool 并没有很多功能，但是有一些非常重要的功能。

#### 合并 PDF 文件

![](/data/attachment/album/202008/16/203851su5apmvrvavjm4jm.png)

你可以轻松合并多个 PDF 文件，同时指定确切的页面。它让你能够调整页面数、旋转，还能使用 “<ruby> 交替混合 <rt>  Alternate mix </rt></ruby>” 反转页面顺序合并。

![](/data/attachment/album/202008/16/203949efrmswofbnbz0vmv.png)

你只需要单击 “<ruby> 添加 PDF 文件 <rt>  Add PDF File </rt></ruby>” 添加文件，然后使用可用的选项对其进行编辑（如上图所示），最后生成编辑的 PDF。

#### 旋转页面

你可以在合并多个文件或仅对单个 PDF 文件进行操作时旋转 PDF 文件的页面。

对于合并文件，你可以参考上面的截图。但是当你选择一个文件时，它看上去像这样：

![](/data/attachment/album/202008/16/203957dlm6oaqmztzo24pi.png)

你有多种选择，但是要旋转页面，需要选择 “<ruby> 编辑页面布局 <rt>  Edit page layout </rt></ruby>” 选项，如上截图所示。

#### 添加或删除页面

要从其他 PDF 文件添加新页面，最好利用此选项。

但是，如果要添加空白页，你可以选择一个文件进行添加。不只是添加空白页面，还可以删除特定页面。下面的截图圈出了高亮选项：

![](/data/attachment/album/202008/16/204103jeblk35e7er433dk.png)

#### 从 PDF 文件提取页面

![](/data/attachment/album/202008/16/204233skgk2ykis21huki8.png)

除了所有其他选项之外，你还可以从给定的 PDF 文件中提取特定页面（或全部）。你还可以为所有提取的页面生成一个新的 PDF 文件，或者为提取的每个页面制作单独的 PDF 文件。在许多场景中，它应该派上用场。

#### 其他功能

利用上面所有功能，你可以生成自己选择的全新 PDF，颠倒顺序、提取页面、制作单独的 PDF 文件等等。

它不会减小 PDF 文件的大小。你必须使用其他工具[在 Linux 中压缩 PDF 文件](https://itsfoss.com/compress-pdf-linux/)。

因此，当你组合使用可用选项时，它是功能丰富的工具。

### 在 Linux 上安装 PDF Mix Tool

![](/data/attachment/album/202008/16/204257snd59z7xxix4s1oj.png)

PDF Mix Tool 存在于 Snap 和 [Flatpak 软件包](https://flathub.org/apps/details/eu.scarpetta.PDFMixTool)中。这意味着如果发行版支持这任意一种，你都可以在软件管理器中找到它。

或者，如果你[启用了 Snap 软件包支持](https://itsfoss.com/install-snap-linux/)，那么可以使用以下命令进行安装：

```
sudo snap install pdfmixtool

```

如果你想[使用 Flatpak](https://itsfoss.com/flatpak-guide/)，那么使用：

```
flatpak install flathub eu.scarpetta.PDFMixTool

```

如果你使用的是 Arch Linux，那么可以从[社区仓库](https://www.archlinux.org/packages/community/x86_64/pdfmixtool/)中获取。

```
sudo pacman -S pdfmixtool

```

你也可以选择查看它的 [GitLab 页面](https://gitlab.com/scarpetta/pdfmixtool)获取源码。

* [下载 PDF Mix Tool 源码](https://www.scarpetta.eu/pdfmixtool/)

### 总结

它可能不是功能最丰富的 PDF 编辑工具，但考虑到它是轻量级的开源工具，因此它是已安装的应用中非常有用的。过去我们也介绍过类似的工具 [PDF Arranger](https://itsfoss.com/pdfarranger-app/)。你可能会想了解一下。

你如何看待它？你有尝试过么？在下面的评论中让我知道你的想法。

---

via: <https://itsfoss.com/pdf-mix-tool/>

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


不要忽视 .gitignore

Summary: 使用 .gitignore 文件是提高代码和 Git 仓库质量的最佳实践之一。

使用 .gitignore 文件是提高代码和 Git 仓库质量的最佳实践之一。

>
> 使用 .gitignore 文件是提高代码和 Git 仓库质量的最佳实践之一。
>
>
>

![](/data/attachment/album/202008/16/211643mahzp0zthbh0z55w.jpg)

我注意到很多开发者没有使用 `.gitignore` 文件，尽管使用 `.gitignore` 文件来指定你不希望 Git 在版本控制中跟踪的文件是[最佳实践](https://opensource.com/article/20/7/git-repos-best-practices)之一。`.gitignore` 可以提高代码质量，所以你不应该忽略版本库中的 [.gitignore](https://git-scm.com/docs/gitignore)。

### 什么是 .gitignore？

Git 仓库中的文件可以是：

1. **未跟踪的**：未被暂存或提交的变更。
2. **跟踪的**：已暂存或提交的变更。
3. **忽略的**：你让 Git 忽略的文件。

有些文件你希望 Git 忽略，不要在你的版本库中跟踪它，这些文件包括许多自动生成的或特定于平台的文件，以及其他本地配置文件，如：

1. 含有敏感信息的文件
2. 编译出的代码，如 `.dll` 或 `.class`。
3. 系统文件，如 `.DS_Store` 或 `Thumbs.db`。
4. 含有临时信息的文件，如日志、缓存等。
5. 生成的文件，如 `dist` 文件夹。

如果你不想让 Git 跟踪版本库中的某些文件，不过这不能通过 [Git 命令](https://acompiler.com/git-commands/)做到。（虽然你可以用 `git rm` 命令停止跟踪一个文件，比如 `git rm --cached`。）相反，你需要使用 `.gitignore` 文件，这是一个告诉 Git 不要跟踪哪些文件的文本文件。

创建 `.gitignore` 文件很简单，只需创建一个文本文件并命名为 `.gitignore`。记得在文件名的开头有一个点（`.`）。就这样就完成了。

### 编写 .gitignore 文件的规则

根据[文档](https://git-scm.com/docs/gitignore)，“`.gitignore` 文件中的每一行都指定了一个模式。”

在此上下文中，“模式”可以指一个特定的文件名，或者指文件名的某些部分结合上通配符。换句话说，`example.txt` 是匹配名为 `example.txt` 的文件的有效模式，而 `ex*txt` 是匹配名为 `example.txt` 以及 `export.txt` 的文件的有效模式。

以下是一些帮助你正确设置 `.gitignore` 文件的基本规则：

1. 任何以哈希（`#`）开头的行都是注释。
2. `\` 字符可以转义特殊字符。
3. `/` 字符表示该规则只适用于位于同一文件夹中的文件和文件夹。
4. 星号（`*`）表示任意数量的字符（零个或更多）。
5. 两个星号（`**`）表示任意数量的子目录。
6. 一个问号（`?`）代替零个或一个字符。
7. 一个感叹号（`!`）会反转特定的规则（即包括了任何被前一个模式排除的文件）。
8. 空行会被忽略，所以你可以用它们来增加空间，使你的文件更容易阅读。
9. 在末尾添加 `/` 会忽略整个目录路径。

### 本地与全局 .gitignore 文件的比较

有两种类型的 `.gitignore` 文件：

* **本地**：放在 Git 仓库的根目录下，只在该仓库中工作，并且必须提交到该仓库中。
* **全局**：放在你的主目录根目录下，影响你在你的机器上使用的每个仓库，不需要提交。

很多开发者在项目仓库中使用本地的 `.gitignore` 文件，但很少有人使用全局的 `.gitignore` 文件。使用全局文件最显著的优势是，你不需要提交就可以使用它，而且做一个改动会影响你所有的版本库。

### Git 忽略的优势

除了确保特定的文件不被 Git 追踪之外，使用 `.gitignore` 文件还有其他好处。

1. 通过忽略不需要的文件，它可以帮助你保持代码库的干净。
2. 它可以控制代码库的大小，这在你正在做一个大项目的时候特别有用。
3. 你的每一次提交、推送和拉取请求都将是干净的。

### 结束语

Git 很强大，但归根结底，它只是一个计算机程序而已。使用最佳实践并保持你的代码仓库稳定是一个团队的努力，其中要做到一件事就是使用 `.gitignore` 文件。

---

via: <https://opensource.com/article/20/8/dont-ignore-gitignore>

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


#新闻拍一拍# 英伟达仅用一月时间就组装好全球第七快超算 Selene

Summary: • 微软上线一个开源的开源网站 • Docker 禁止美国“实体清单”主体使用，但其开源项目不受影响 • 文泉驿字体项目宣布停止接受捐款，开发工作近期将重启

![](/data/attachment/album/202008/17/085356newtv214yeus6d31.jpg)

#### 英伟达仅用一月时间就组装好全球第七快超算 Selene

该计算机此前在 6 月份成为了世界上速度第七快的超级计算机。在流感大流行期间，仅用了三个半星期的时间，一个跟社会保持距离的六人小组加上一个名为 Trip 的轻便机器人就把整个东西组装好了。它采用的是英伟达商用 GPU 加速 DGX SuperPOD 架构，而不是在 500 强中占主导地位的大量定制 CPU 设计。另外，这台超算在绿色 500 最节能超级计算机排行榜上排名第二。

来源：[cnBeta.COM](https://www.cnbeta.com/articles/tech/1016283.htm)

>
> 拍一拍：说不准以后超算也可以像早年间攒机一样了。
>
>
>

#### 微软上线一个开源的开源网站

微软近日上线了一个新的开源网站——网站本身既是开源的，内容也是关于开源的——来展示其如何拥抱开源，同时提供一些开源服务。从首页来看，这一开源网站的核心理念是“开放”、“协作”和“灵活”。微软在网站中陈列了自己的开源项目和服务。网站分为参与、项目、生态、招聘及博客等版块。其中，“参与”页面还会实时显示微软各个 GitHub repo 的最新动态。

来源：[开源中国](https://www.oschina.net/news/117949/about-opensource-microsoft-com)

>
> 拍一拍：这个事情不稀奇，只是微软开源路上的一件小事而已（已经被微软的开源新闻麻木了）。
>
>
>

#### Docker 禁止美国“实体清单”主体使用，但其开源项目不受影响

Docker 公司最新的服务条款 8 月 13 日生效。条款引起关注的地方简单来说就是，Docker 公司提供的服务，禁止美国“实体清单”上的实体使用。从条款中可以明确的是，受限制的是 Docker公司的商业软件及服务，比如 Docker Hub。EAR 管制的是没有实现公开可获取的软件源代码，也就是说，由于开源软件已公布给公众，因此一般不受 EAR 的管制。

来源：[开源中国](https://www.oschina.net/news/117954/docker-terms-service-updated)

>
> 拍一拍：虽然 Dockerhub 受限不是太大的事情，但是我最担心的是 GitHub/GitLab 的服务会不会也受限？因为虽然它们是免费使用的，但是其实是背后商业公司提供的服务。
>
>
>

#### 文泉驿字体项目宣布停止接受捐款，开发工作近期将重启

文泉驿是一个开源汉字字体项目，由旅美学者房骞骞（FangQ）于 2004 年 10 月创建，集中力量解决 GNU/Linux 高质量中文字体匮乏的状况。文泉驿字体在逐渐完善后就停止了更新，最后更新时间为 2011 年 5 月份。文泉驿官网今天贴出一行短短的公告：“感谢大家对文泉驿计划的支持！目前项目不再接受捐款。我们会在最近一段时间重启文泉驿项目，和发布新版本的字体，请大家重新关注这个项目。(FangQ / 2020年7月23) ”

来源：[cnBeta.COM](https://www.cnbeta.com/articles/tech/1016323.htm)

>
> 拍一拍：作为一个完成了历史任务的重要开源项目，是时候整装再发，迎接新的时代对开源字体的需求了。
>
>
>


如何在 Ubuntu 和其它的 Linux 发现版上安装 Itch

Summary: Itch 是独立数字创造者的平台，主要专注于独立游戏。

Itch 是独立数字创造者的平台，主要专注于独立游戏。

![](/data/attachment/album/202008/18/100214bx880jp1me4e8ipe.png)

[Itch](https://itch.io/?ac=ywUpyBMGXvG) 是独立数字创造者的平台，主要专注于独立游戏。它最初是一个托管、销售和下载独立视频游戏的网站。但是现在，Itch 也提供书籍、漫画、工具、棋类游戏、原声带等来自独立创造者的数字内容。

作为一名用户，你或者能够免费下载这些数字内容，或者按照创造者设定的价格下载。你所有下载和购买的东西都同步到你的账户，以便你可以在任何你想的时间内下载它们。

它有点像 Steam，但是更专注于独立开发者和创作者。

你可以从它的网站浏览 Itch ，但是 Itch 也提供了一个 [开源的桌面客户端](https://github.com/itchio/itch)，有一些额外的优势。使用桌面客户端：

* 你可以浏览游戏和其它的内容，并下载它们到你的系统上。
* 桌面客户端会自动更新所有新功能。
* 你下载的游戏也自动更新。
* 如果你在 Itch 玩基于浏览器的游戏, 那么你可以使用 Itch 桌面客户端离线玩。

在这篇教程中，我将向你展示在 Ubuntu 或其它任何 Linux 发行版上安装 Itch 的步骤。

### 在 Linux 桌面上安装 Itch

Itch 提供一个名称为 itch-setup 的安装器。你可以从它的下载网页下载这个文件。

* [下载 Linux 版 Itch](https://itch.io/app)

这个 itch-setup 文件可以工作在任何的 Linux 发行版上，只要它已经安装有 GTK 3 （libgtk-3-0）。大多数当前的 Linux 发行版应该已经有它了。

在你下载安装文件后，在其上面右击并给予它可执行权限。

![](/data/attachment/album/202008/18/100140omracc84adid3u94.png)

现在在这个安装文件上通过双击来运行。它将下载 Itch 的最新版本。

![](/data/attachment/album/202008/18/100148def4wffvv4vx4uvz.jpg)

实际花费的时间取决于你的网速。几分钟后，你应该会看到这个屏幕，要求你登录你的 Itch 账号。

![](/data/attachment/album/202008/18/100205u2xol4bfbcaj788z.jpg)

在你登录后，你可以浏览游戏和其它的内容，并下载/购买它们。

整个安装过程类似于 [在 Ubuntu 上安装 Steam](https://itsfoss.com/install-steam-ubuntu-linux/)。

你可以在 `~/.itch` 文件夹中找到 Itch 的文件。你从 Itch 下载的内容通常位于 `~/.config/itch` 。补充一句，`~` 意味着你的家目录。

### 从你的系统中移除 Itch 桌面应用程序

出于某些原因，如果你不想再使用 Itch ，你可以从你的系统中移除它。为此，麻烦的是，你需要使用终端。

打开一个终端，并使用下面的命令：

```
~/.itch/itch-setup --uninstall

```

它不会移除你的内容库。如果你想移除下载的游戏和材料，你可以手动删除 `~/.config/itch` 文件夹。

```
rm -r ~/.config/itch

```

### 你用 Itch 吗？

Itch 是一个独立创作者的道德平台，也是这种模式的支持者。Itch 使用 “你想付多少钱就付多少钱”，买家可以支付大于或相等内容创作者设置的任何金额。

Itch 也有开放收益分享模式。创作者可以与 Itch 分享部分他们产生的收入，也可以不分享。

就我个人而言，我更喜欢像 Itch 和 Humble Bundle 这些有道德的商店。像 Humble Bundle 一样，Itch 也时不时地进行销售和捆绑销售。这有助于你节省资金，并支持独立开发者和创作者。

你使用 Itch ，还是 Humble Bundle ？你还使用哪种类似的平台？

---

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

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


Manjaro 和 Arch Linux 有何不同，哪个更好？

>
> Manjaro 还是 Arch Linux？如果说 Manjaro 是基于 Arch 的，那么它和 Arch 又有什么不同呢？请在这篇比较文章中阅读 Arch 和 Manjaro 的不同之处吧。
>
>
>

大多数[适合初学者的 Linux 发行版](https://itsfoss.com/best-linux-beginners/)都是基于 Ubuntu 的。随着 Linux 用户经验的增加，一些人开始尝试使用更高级的发行版，主要是在“Arch 领域”。

这个所谓的 “Arch 领域”以两个发行版为主。[Arch Linux](https://www.archlinux.org/) 本身和 [Manjaro](https://manjaro.org/)。还有其他[基于 Arch 的 Linux 发行版](https://itsfoss.com/arch-based-linux-distros/)，但都没有这两个发行版受欢迎。

如果你在 Arch 和 Manjaro 之间感到困惑，那么这个比较应该能帮助你。

### Manjaro 和 Arch Linux：它们有什么不同或相似之处？

![](/data/attachment/album/202008/18/110704hybh54i812fkdy15.png)

我试图在各个方面比较这两种发行版。请记住，我并没有只关注差异，我还指出了它们的相似之处。

#### 两者都是滚动发布的版本，但不是同一种类型

在 Arch 和 Manjaro 中，没有像 Ubuntu 或 Fedora 那样每隔几个月或几年就会有一次“发布”。只要[保持你的 Arch 或 Manjaro 系统的更新](https://itsfoss.com/update-arch-linux/)，你将永远拥有最新版本的操作系统和软件包。你不需要像以往一样担心升级你的安装版本。

如果你打算在某个时候进行全新安装，请记住，Manjaro 和 Arch 都会定期更新它的安装 ISO。这被称为 ISO 刷新，它确保新安装的系统不必安装过去几个月中所有可用的新系统更新。

但 Arch 和 Manjaro 的滚动发布模式是有区别的。

除了社区维护的 <ruby> Arch 用户软件库 <rt>  Arch User Repository </rt></ruby>（AUR）之外，Manjaro 也维护着自己的独立软件库，这些软件库也包含了非 Arch 提供的软件包。那些原本由 Arch 官方软件库提供的流行软件包将首先进行彻底的测试（必要时打上补丁），然后 Manjaro 再次发布，这通常比 Arch 晚两周左右，发布到 Manjaro 自己的稳定软件库供公众使用。

![](/data/attachment/album/202008/18/110716gs617u9q6qqzh367.png)

适应这个测试过程的一个后果是，Manjaro 永远不会像 Arch 一样那么激进尝鲜。但这样一来，就使得 Manjaro 比 Arch 稍微稳定一些，也不容易破坏你的系统。

#### 包管理 - Pacman 和 Pamac

Arch 和 Manjaro 都提供了基于命令行的软件包管理工具 Pacman，它是用 C 语言编写的，使用 `tar` 来打包应用程序。换句话说，你可以[使用相同的 pacman 命令](https://itsfoss.com/pacman-command/)来管理两个发行版的软件包。

除了 Pacman，Manjaro 还开发了一个名为 Pamac 的 GUI 应用程序，用于在 Manjaro 上轻松安装软件。这使得使用 Manjaro 比使用 Arch 更容易。

![](/data/attachment/album/202008/18/110726uqmxx9eqaaamaybf.png)

请注意，你也可以在 Arch Linux 中从 AUR 安装 Pamac，但该工具是 Manjaro 的组成部分。

#### Manjaro 硬件检测工具（MHWD）

Pamac 并不是 Manjaro 团队开发的唯一帮助用户的 GUI 工具。Manjaro 还有一个专门的工具，用于检测硬件并为其推荐驱动程序。

![](/data/attachment/album/202008/18/110737qn6cne639474hjcz.png)

这个硬件检测工具非常有用，可以说是 [Manjaro 受到社区喜爱的主要原因](https://itsfoss.com/why-use-manjaro-linux/)之一。它使得检测、安装、使用或从一个驱动切换到另一个驱动都非常简单，让硬件兼容性成为了过去。

#### 驱动程序支持

Manjaro 为 GPU 驱动提供了极大的支持。我们都知道多年来 Linux 在安装驱动程序（特别是 Nvidia）方面存在问题。

当[安装 Manjaro](https://itsfoss.com/install-manjaro-linux/) 时，它给出了从开源（自由）或非开源（非自由）图形驱动安装开始的选项。当你选择“非自由”时，它会自动检测你的显卡，并为其安装最合适的驱动程序，因此 GPU 可以开箱即用。

由于有了上一节中看到的硬件检测工具，甚至在安装 Manjaro 时，安装显卡驱动会更加容易。

如果你有一个带有 Nvidia Optimus 卡（混合 GPU）的系统，它与 Manjaro 配合良好。你会有很多方式来让它工作。

在 Arch Linux 中，你必须为你的机器安装（如果你能找到）合适的驱动程序。

#### 访问 Arch 用户软件库（AUR）

[Arch 用户软件库](/article-12107-1.html)（AUR）是一个面向基于 Arch 的 Linux 发行版用户的社区驱动的软件库。AUR 的创建是为了组织和分享来自社区的新软件包，并帮助加快流行软件包被纳入[社区软件库](https://wiki.archlinux.org/index.php/Community_repository)。

大量进入官方软件库的新软件包都是从 AUR 开始的。在 AUR 中，用户能够贡献自己的软件包构建（`PKGBUILD` 和相关文件）。

你可以在 Arch 和 Manjaro 中使用 AUR。

#### 桌面环境

好吧！你可以在任何 Linux 发行版上使用几乎所有的桌面环境。Arch 和 Manjaro 也不例外。

然而，一个专门的桌面风格或版本可以让用户更容易地在桌面环境里获得顺畅的体验。

默认的 Arch ISO 并不包含任何桌面环境。例如，你想[在 Arch Linux 上安装 KDE](/article-12258-1.html)，你必须在[安装 Arch Linux](https://itsfoss.com/install-arch-linux/) 时或在之后下载安装它。

而 Manjaro 则为 Xfce、KDE 和 GNOME 等桌面环境提供了不同的 ISO。Manjaro 社区还维护着 MATE、Cinnamon、LXDE、LXQt、OpenBox 等桌面环境的 ISO。

#### 安装程序

![](/data/attachment/album/202008/18/110750y89zhvhzlouhhjkn.jpg)

Manjaro 是基于 Arch Linux 的，它是兼容 Arch 的，但**它不是 Arch**。它甚至不是只有一个图形安装程序的预配置版本的 Arch。Arch 并不具备通常的舒适的开箱即用，这也是为什么大多数人喜欢更简单的东西。Manjaro 为你提供了简单的入口，但支持你成为经验丰富的用户或资深用户。

#### 文档和支持

Arch 和 Manjaro 都有自己的维基页面和支持论坛来帮助各自的用户。

虽然 Manjaro 有一个不错的[维基](https://wiki.manjaro.org/index.php?title=Main_Page)文档，但 [Arch 维基](https://wiki.archlinux.org/)则不可同日而语。你可以在 Arch 维基中找到关于 Arch Linux 各方面的详细信息。

#### 目标受众

关键的区别在于 [Arch 针对的是抱着自己动手的态度的用户](/article-12445-1.html)，他们愿意阅读文档，自己解决问题。

而 Manjaro 则是针对那些没有那么多经验或者不想花时间组装操作系统的 Linux 用户。

### 结论

有些人经常说 Manjaro 是给那些不会安装 Arch 的人用的。但我认为这是不对的。不是每个人都想从头配置 Arch，或者没有太多时间。

Manjaro 绝对是一只野兽，但与 Arch 截然不同。**快速、强大，并总是保持更新**，Manjaro 提供了 Arch 操作系统的所有优点，但特别强调**稳定性、用户友好性和可访问性**，既适合新手，也适合有经验的用户。

Manjaro 并不像 Arch Linux 那样极简主义。在 Arch 中，你从一个空白的画布开始，手动调整每个设置。当默认的 Arch 安装完成后，你在命令行就有了一个正在运行的 Linux 实例。想要一个[图形化桌面环境](https://itsfoss.com/best-linux-desktop-environments/)？那就自己来吧 —— 有很多选择。选择一个，安装，然后配置它。你可以从中学到很多东西，特别是如果你是 Linux 新手的话。你会对系统是如何组合在一起的，以及为什么要以这样的方式安装东西有很好的理解。

我希望你现在对 Arch 和 Manjaro 有了更好的理解。现在，你明白了它们是相似而不同的了吧。

我已经发表了我的看法。不要犹豫，请在评论区分享你的观点。在 Arch 和 Manjaro 之间，你更喜欢哪一个，为什么。

Abhishek Prakash 也对此文补充了内容。

---

via: <https://itsfoss.com/manjaro-vs-arch-linux/>

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


#新闻拍一拍# 微软多项网络服务将逐步停止支持 IE 11

Summary: • IBM 宣布 POWER10 处理器 • Debian GNU/Linux 诞生 27 周年 • 比特币延续涨势，创 13 个月来最高纪录

![](/data/attachment/album/202008/18/125258mxdixz8vxyza2bhy.jpg)

#### 微软多项网络服务将逐步停止支持 IE 11

微软今天宣布，从 2021 年 8 月 17 日起，微软 365 应用和服务将停止支持 IE 11。广受欢迎的通讯工具之一 Microsoft Teams 也将从 2020 年 11 月 30 日起停止支持 IE 11。在规定日期之后，客户通过 IE 11 使用时体验将有所下降。而且在最坏的情况下，他们将无法连接到应用程序和服务。

来源：[cnBeta.COM](https://www.cnbeta.com/articles/tech/1016871.htm)

>
> 拍一拍：连微软都放弃了的 IE，你还在用吗？
>
>
>

#### IBM 宣布 POWER10 处理器

IBM 宣布了它的下一代处理器 POWER10。IBM 早已不再自己生产芯片，POWER10 将由三星制造，采用 7 纳米工艺，是 IBM 第一款使用 7 纳米制程技术的商业处理器。IBM 在新闻稿中称，POWER10 的能效三倍于上一代的 POWER9，采用 POWER10 的系统将在明年上半年上市。

来源：[solidot](https://www.solidot.org/story?sid=65269)

>
> 拍一拍：三倍能效的提高会不会有力地推动 POWER 服务器的使用推广？
>
>
>

#### Debian GNU/Linux 诞生 27 周年

1993 年 8 月 16 日，当时还是普渡大学本科生的 Ian Murdock 发起了 Debian GNU/Linux 项目，上周日是它的 27 岁生日。

来源：[solidot](https://www.solidot.org/story?sid=65262)

>
> 拍一拍：虽然是最早的 Linux 发行版之一，不过已经度过了 27 年了，还是令人吃惊。
>
>
>

#### 比特币延续涨势，创 13 个月来最高纪录

周一，比特币延续涨势，跃升至一年多来的最高水平。自今年 3 月底部以来，比特币价格已上涨逾两倍。比特币一度上涨 4.4%，至 12424 美元，为 2019 年 7 月以来的最高水平。

来源：[新浪美股](https://www.cnbeta.com/articles/tech/1016875.htm)

>
> 拍一拍：最近区块链市场又是一片火爆，历史总是轮回的。
>
>
>

#### 美国邮政早已申请基于区块链的安全投票系统专利

据爆料，美国邮政于 2020 年 2 月 7 日申请了一项“安全投票系统”的专利，该系统使用了区块链访问层。显然，这可能是美国政府欢迎区块链的最强烈信号之一。

来源：[新浪财经](https://www.cnbeta.com/articles/tech/1016905.htm)

>
> 拍一拍：真能在美国总统选举中用上才是有力的证明和推动。
>
>
>


《代码英雄》第一季（4）：DevOps，拆掉那堵墙

>
> 代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。
>
>
>

>
> **什么是《代码英雄》**
>
>
> <ruby> 代码英雄 <rt>  Command Line Heroes </rt></ruby>是世界领先的企业开源软件解决方案供应商红帽（Red Hat）精心制作的原创音频播客，讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。
>
>
>

![](/data/attachment/album/202008/18/182320m8u45vzzn3663k5w.png)

本文是《[代码英雄](https://www.redhat.com/en/command-line-heroes)》系列播客[第一季（4）：DevOps，拆掉那堵墙](https://www.redhat.com/en/command-line-heroes/season-1/devops-tear-down-that-wall)的[音频](https://cdn.simplecast.com/audio/a88fbe/a88fbe81-5614-4834-8a78-24c287debbe6/20f736e5-7a08-4701-ae2d-e523f6754e17/beffda00.mp3)脚本。

当应用开发的争斗暂告一段落，横亘在开发者与运维之间的那堵墙开始崩塌。在墙彻底倒塌的时候，墙两边的人都应该学会如何合作，彼此变得亲密无间。

不过到底什么是 DevOps？开发者一方的嘉宾，包括来自微软的 Scott Hanselman 和 Cindy Sridharan（即 @copyconstruct），他们从开发者的角度认为 DevOps 是一种惯实践。而来自运维一方的成员则他们一直在努力捍卫的东西。双方依然存在差异，不过因为 DevOps 的诞生，大家的合作效率会比之前更上一层楼。这集节目讲述了这种方法的诞生对于大家有多重要。

**Saron Yitbarek**： 请你想象这样一堵墙：这堵墙从你目之所及的最右侧延伸到最左侧。墙比你高，你无法看见墙背后。你知道墙的另一侧有很多很多人，但你不清楚他们是否和你一样，不清楚他们是敌是友。

**00:00:30 - Gordon Haff**： 开发者创造代码，然后把代码扔过墙丢给运维，之后发生的问题都是运维的责任了。

**Richard Henshall**： 他们随心所欲，并不真正关心服务质量。

**Sandra Henry-Stocker**： 墙这两面的人几乎做着相反的工作 —— 一方做出改变，另一方尽可能抵制那些改变。

**Richard Henshall**： 但对于他们到底想共同达成什么，却没有在同一幅蓝图中规划过。

**00:01:00 - Saron Yitbarek**： 我是 Saron Yitbarek，这里是《代码英雄》，由红帽公司推出的原创播客栏目。第四期，我们的标题是《DevOps，拆掉那堵墙》。

是的，数十年来，IT 界划分为各种角色。一边是开发者，他们要尽可能快地去创造更多变化。然后另一边是运维团队，他们要去阻止太多改变发生。与此同时，代码在没有充分共鸣和沟通的条件下，被盲目扔过两方之间的墙。怎样才能拆掉这堵墙呢？这需要一个重大的转变。

**00:01:30 - Saron Yitbarek**： 开源运动震撼了整个战场。[上一期](/article-12508-1.html)，我们看到了新的敏捷方法论，它重视不间断的迭代改进，而这种对速度的要求将迫使我们改变彼此的工作方式。一群彼此孤立的人工作的速度是有极限的，而这个极限是一个问题，因为……

**00:02:00 - Richard Henshall**： 因为都是为了更快的将产品推向市场、提高敏捷性、更多的迭代，而不是长期而大量的工作。

**Saron Yitbarek**： Richard Henshall 是 Ansible 的一位产品经理。

**Richard Henshall**： 是的。还记得你以前下单购买服务器，四个月后到货。所有东西都整合在一起，所以整个堆栈是一个整体，要花几年时间来设计和建造那些东西。现在这种情况已经不存在了，对于很多组织来说，这种方法已经……已经寿终正寝，偶尔拿过来试试，然后放弃它。

**00:02:30 - Saron Yitbarek**： 如今，像亚马逊这样的公司每分钟都会部署几次新的代码。想象一下，用按部就班的瀑布式工作流，简直不可能完成这些工作。所以为了继续快速完成工作，那些关于稳定性、安全性、可靠性的顾虑都会被运维丢到一边不管。

**00:03:00 - Saron Yitbarek**： 同时，开发者也没有意识到他们的责任是创造真实环境可用的代码。开发者对稳定性和安全性毫无兴趣，但这些恰恰是我们需要解决的问题。所以，我们最终会有很多无谓的修改，在双方之间来来回回。

想象一下过度分工会如何拖慢公司效率，但开发法者很少被鼓励思考除代码之外的其他事务。

**Sandra Henry-Stocker**： 他们的目录规模只会越来越臃肿，但他们从不清理。除非已经无法工作才不得不清理。

**00:03:30 - Saron Yitbarek**： Sandra Henry-Stocker 是位退休的系统管理员，为 IDG 杂志撰稿。

**Sandra Henry-Stocker**： 我过去经常劝说别人，说，“嘿，你看，你用了这么多的磁盘空间。是不是有什么东西你可以整理一下，这样我们就有更多的存储空间来运行了 —— 因为服务器上的存储空间快用完了。”是的，我们经常经历这些事。

**Saron Yitbarek**： 归根结底，这是一个心态问题。这种开发者和运维之间的态度分裂，一方不必去理解另一方的担忧。好吧，在过去这还没太大问题，但随着开发速度成为一种重要的优势，这种分裂的文化急需改进。孤立在自己的工作圈子里，效率太低了。

Jonah Horowitz 在 Stripe 的可靠性工程团队工作。他描述了即使开发人员和运维人员想一起工作，他们也无法做到。因为从某种意义上说，他们被安排在对立的团队中。

**00:04:30 - Jonah Horowitz**： 运维团队经常以正常运行时间和可靠性来衡量，而提高正常运行时间的最大方法之一，就是减少系统的变化量。当然，发布新功能就是在改变系统，而做产品工作的软件工程师有动力去尽快发布尽可能多的功能。所以，当开发和运维的职责不同时，他们自然有了冲突。

**00:05:00 - Saron Yitbarek**： 开发者致力于新建功能，运营致力于维持运行，两者目标相互矛盾。但就像我说的，由于对速度的需求越来越大，对快速迭代发布的需求越来越大，开发和运维之间的脱节已经到了一个临界点，必须要有所改变。

**00:05:30 - Saron Yitbarek**： 在 2009 年左右，将开发和运维分开的那堵墙看起来像是监狱的墙。我们需要的是一种新的方法论，它能使开发和运维之间的隔阂顺畅过度，让双方以更快、更整体化的方式工作。

视频平台 Small Town Heroes 的首席技术官 Patrick Debois 为想要拆掉这堵墙的人发起了一场会议。他把这个的脑洞叫做 DevOps Days（开发运维日）。为了便利，他将其缩短为 DevOps，于是这场改革就有了名字。

**00:06:00 - Saron Yitbarek**： 不过名字并不代表改革的一步，我们知道为什么我们需要 DevOps，但究竟该如何做？我们应该如何将开发和运维结合起来而不引发战争？幸运的是，我有 Scott Hanselman 来指导我。Scott 是微软 .NET 和 [ASP.NET](http://ASP.NET) 的首席项目经理。

所以，Scott，我认识你确实有几年了，但感觉还是相见恨晚啊。

**00:06:30 - Scott Hanselman**： 我也是，相见恨晚哈。

**Saron Yitbarek**： 我想和你聊聊你如何成为一个开发者，和 DevOps 这些年的变化。觉得如何？

**Scott Hanselman**： 嗯，听上去挺有意思。

**00:07:00 - Saron Yitbarek**： 好的。我认为究竟什么是 DevOps 是一个好的开场问题。你会怎么定义它呢？

**Scott Hanselman**： 在 2008 年，维基百科有个关于 DevOps 的定义确实很棒。它说，这是一套“惯例”，目的是在保证质量的前提下，缩短提交变更和变更投入生产之间的时间。所以，如果你想想，假如今天是周二，我检查了一些代码，而这些代码将在 6 月的版本中上线。这就很糟糕了，因为这不是持续集成，而是一年几次的集成。

**00:07:30 - Scott Hanselman**： 如果你有一个健康的 DevOps 体系，如果你已经有“<ruby> 设置 - 上线 <rt>  set - up </rt></ruby>”的惯例，那么你就可以不断地将代码集成到生产中去。那么，你能做什么？你可以定义、创造怎样是最佳“惯例”，这将决定你能否成功。所以，我在周二检查的一些代码，周四就上线了。那么现在，为了保证高质量，最重要的事情就会是 —— 谨慎上线。

**00:08:00 - Saron Yitbarek**： 这个定义真的很有趣呢，是个“惯例”。但我觉得当我听人们谈论 DevOps 时，它具体一点。他们谈论它就像它是一个角色、一个工作、一个职位或一个头衔。你觉得这与它是一套“惯例”的观点是否有冲突？

**Scott Hanselman**： 我认为，当一套新的方法或一个新的流行语出现时，人们喜欢把它加在名片上。我不是不尊重那些正在收听这个播客，并且感到被我冒犯、正骂骂咧咧把名片掏出来看的人们。虽然，他们现在可能正要怒盖笔电、退出这个播客。

**00:08:30 - Scott Hanselman**： 有一个帖子写得非常好，作者是 Brian Guthrie，他是一个脑力劳动者，在 SoundCloud 工作。他是一个超级聪明的人，几天前他在 Twitter 上的帖子中说到 DevOps。他说 DevOps 就是一套惯例，不是一个工作头衔、不是一个软件工具、不是一个你安装的东西、也不是一个团队的名字。

**00:09:00 - Scott Hanselman**： 他的原话是：“DevOps 不是神奇的‘企业万能药’”。如果你没有好的惯例，如果你没有良好的习惯，你就没有 DevOps。所以，这更多的是一种心态，而不是摆出一个工作头衔，然后“我们要雇佣一个 DevOps 工程师，然后我们要把这些神奇的 DevOps 工程师撒到组织中。虽然整个组织没有意志力，也没有信奉 DevOps 的想法。” 所以，如果你认为 DevOps 是一个工具或者是用来安装的东西，那么你就完全理解错了。

**00:09:30 - Saron Yitbarek**： 好吧，让我们回到过去，在 DevOps 这个名词出现之前，在我们往名片上写 DevOps 或者把它作为一套“惯例”来讨论之前。在 10 年前，你会如何描述开发者和那些运维人员之间的关系？

**Scott Hanselman**： 那是相当的水火不容。举个例子，运维控制着生产，但开发人员从来没有接近过生产。我们站在一堵不透明的墙的两侧。我们在开发部的时候，尽可能地去做一些看起来像生产环境能用的东西，但实际上从来没有……从来没有像样的产品。

**00:10:00 - Scott Hanselman**： 我们有相当多问题。我们的开发环境从各个方面来说都不像生产环境，所以你不可避免地会遇到那些 “嘿，它在生产环境中的工作方式和在开发环境中的不同” 的问题。然后，从开发到投入生产之间的间距是几周几周的长久间隔，所以你的大脑甚至不在正确的频道上。比如说，我在一月份的时候就在研究这个功能，现在四月份才刚刚上线，那么当 bug 不可避免地出现的时候，要等到六月份才能修复，我甚至不记得我们之前在干嘛。

所以运维团队的人，他们的工作是……他们的工作几乎就是有意识地让我们慢下来。好像他们的存在是为了让开发人员更慢，然后他们还觉得我们随时会让生产环境崩坏。

**00:11:00 - Saron Yitbarek**： 那么为什么会这样呢？是对开发者想要做什么和他们做了什么不了解？还是信任问题？为什么会有这么大的冲突？

**Scott Hanselman**： 我觉得你已经回答了，而且回答得很到位。你说的很对，确实是信任的问题。我觉得开发人员认为他们是特殊的，或者某些方面比 IT 人员更优越，而 IT 人员认为开发人员不尊重生产。

**00:11:30 - Scott Hanselman**： 我认为这种文化的产生，一部分来源于高层。他们认为我们是不同的组织，并且我们的目标也不同。我认为软件业正在走向成熟，因为我们都意识到，无论业务是什么，我们写软件都是为了推动业务发展。

所以现在有种 “我们都在往正确的方向推进” 的感觉，就像他们说的，“专注一件产品并做到极致”。但这是需要绝对的信任，可 DevOps 工程师不信任产品工程师来部署代码，对吧？

**00:12:00 - Scott Hanselman**： 但 DevOps 工程师传统上并不写代码，所以他们并不了解什么被修改了。所以他们对于在各个层面的人都缺乏信任。没有人理解部署过程，人们只信任自己，他们的心态……举个例子，就像“我只信任自己的工作。我不能相信 Saron 的工作，她甚至不知道她在干些什么。我会做完所有的事情。”

**00:12:30 - Scott Hanselman**： 所以如果没有人真正理解这个系统，那么<ruby> 全栈工程师 <rt>  full stack engineer </rt></ruby>的概念就是一个神话。但是现在，我们开始将一整个组织称之为全栈。我们已经有了<ruby> 全产品所有权 <rt>  full product ownership </rt></ruby>这样的名词，敏捷方法论也出现了，也就是说每个人都应该拥有产品。社区对于软件所有权和对于代码的想法都慢慢发生了变化，这种改变带来了一个充满信任的环境。

**00:13:00 - Saron Yitbarek**： 我是 Saron Yitbarek，你现在收听的是《代码英雄》，来自红帽公司的一档原创播客栏目。所以，要想让 DevOps 发挥出它的潜力，我们就需要双方都有更多的信任，这就意味着要有更多的沟通。回到 Richard Henshall 身上，他认为双方的共情是 DevOps 的基石 。

**00:13:30 - Richard Henshall**： 一些 DevOps 的从业者，一群真正优秀的从业者，都参与过这两种角色。我认为这才是真正的力量所在 —— 当人们真正做过了两种角色，而不是只看到其中一种。所以，你不该保持孤立，你实际上……你应该去和双方都一起工作一段时间。我想这才是让人恢复同理心的方法。

**Saron Yitbarek**： 现在，这不仅仅是为了温情的沟通。Richard Henshall 所描述的是行业重点的转向 —— Scott 刚刚提到过。

**00:14:00 - Saron Yitbarek**： 一个关于<ruby> 持续集成 <rt>  continuous integration </rt></ruby>（CI）的观点。软件不仅要以小批量快速编写和发布，还要以小批量进行快速测试。这意味着，开发人员需要即时反馈他们正在编写的代码在现实世界中的表现。

随着上市时间从几个月缩短到几天，再到几个小时，我们四处寻找一套新的工具，可以将任何可以自动化的元素自动化。

**00:14:30 - Gordon Haff**： 你需要一个全新的生态系统和工具，来最有效地进行 DevOps。

**Saron Yitbarek**： Gordon Haff 是一位红帽公司高级工程师。

**Gordon Haff**： 我们看到有很多巨大的、DevOps 可以利用的新种集合工具和平台，它们都诞生于开源。

**Saron Yitbarek**： Gordon 是对的。新的集合工具是很庞大，关于开源这点他说的也对。在一个严格的专有系统中，自动化工具是不可能发展的。

**00:15:00 - Gordon Haff**： 其中有很多监控工具，Prometheus 是其中一个常见的工具。它开始引起很多人兴趣，用于编排服务的 STO 也出自这里。

**Saron Yitbarek**： GitHub 让你跟踪变化，PagerDuty 管理数字业务，NFS 可以跨网络挂载文件系统，Jenkins 让你自动测试你的构建。

**00:15:30 - Saron Yitbarek**： 这么多工具，这么多自动化流程。最终的结果是，开发人员可以将他们的变更直接推送到生产现场，自动创建构造，实行经过严格管理的编译与针对性的自动测试。Sandra Henry-Stocker 描述了这是怎样的变化。

**Sandra Henry-Stocker**： 所以，我可以把我正在工作编写的东西快速部署。我可以只在一个系统上，通过命令行控制许多系统，而不是必须在在很多不同的系统上工作，也不用学习就可以利用网络，将代码部署到其他机器上。

**00:16:00 - Sandra Henry-Stocker**： 现在，在计算机系统中进行改动更容易了。坐在一个地方，就能实行一切操作。

**Saron Yitbarek**： 自动化工具已经解决了速度问题。但我不希望我们只赞美工具，而忽略了实际的方法论，文化的转变。Scott Hanselman 和我谈到了这个微妙的界限。

**00:16:30 - Saron Yitbarek**： 你在这次谈话开始时说，DevOps 是一套惯例，是一种心态，是一种思维方式。听起来，我们创造的工具是我们应该思考和操作方式的具体代码实现。

**Scott Hanselman**： 我喜欢这句话，你真是个天才。没错，我们以前让产品开发在 Word 文档中写下这些代码是如何工作的。他们写的是规范，对吧？这些文档过期了吗？

**00:17:00 - Saron Yitbarek**： 没错。（答非所问）

**Scott Hanselman**： 哈？

**Saron Yitbarek**： 好吧，我只是很高兴 Scott 刚才说我是天才。但我也确实认为，这些工具几乎是我们文化转变的象征。它们鼓励我们拓宽我们的角色定义。我们开发者已经被迫，至少偶尔关注代码的运行。这样一来，开发和运维的主要职责就部分统一了。事实上，DevOps 的兴起告诉我们的是，在一个速度不断提升的世界里，没有人能够保持孤岛状态。

**00:17:30 - Saron Yitbarek**： Jonah Horowitz 曾在湾区多家公司工作，包括 Quantcast 和 Netflix。他说即使是世界上一些最大的公司，也从这个角度重新塑造了他们的文化。

**Jonah Horowitz**： 我们在文化上得到了整个公司的认同，就像，“这就是我们要部署软件的方式，我们将以小批量的方式进行部署，我们将使用这些程序帮助部署。” 如果 DevOps 只是被运营团队所驱动，我不认为它可以……我不认为它可以成功。

**00:18:00 - Jonah Horowitz**： 这必须成为公司的管理层和领导层所认同的东西才能发挥作用，而这件事很大程度上，意味着一种文化转变。

**Saron Yitbarek**： 当 MacKenzie 对 800 名 CIO 和 IT 高管进行调查时，80% 的人表示，他们正在规划让自己的一部分下属组织实施 DevOps，超过一半的人计划到 2020 年，在全公司范围内实施。高管们意识到，自动化工具可以提升交付速度。

**00:18:30 - Saron Yitbarek**： 这些人过去也是这样的人，他们习惯于让一个货板先到达数据中心，然后在新机器上线之前让它在那里放上整整一个月。不过在今天，如果你等待的时间超过 10 分钟，就说明你做错了什么。随着竞争对手的速度增加，没有人能够承受得起落后。

**00:19:00 - Saron Yitbarek**： 我可以想象，运维团队一定很紧张，因为他们把所有的工具都交给开发人员。运维团队习惯了做成年人，而现在叫他们把车钥匙交给一贯的孩子 —— 开发人员？呀，我想我们开发人员正在学习，如何在不破坏东西的前提下快速移动。但随着 DevOps 革命的尘埃落定，变化最大的可能是运维团队。

**00:19:30 - Saron Yitbarek**： DevOps 是否真的威胁到了运维的存在？开发是否在用它闪亮的新工具来吃掉运维？Cindy Sridharan 是一位开发者，她写了一篇长篇调查文章来讨论这些问题。在你的文章和博客中，你提到运维人员对事情这样的发展并不一定满意。到底发生了什么？你会说什么？

**Cindy Sridharan**： 这么说吧，DevOps 的理想是责任共享。开发者和运维将有，就像你知道的，更多的是五五分成，以真正确保软件的整体交付。

**00:20:00 - Cindy Sridharan**： 我认为很多运维工程师的不快乐源于这样一个事实，那就是这些改变都没有实际功效。他们仍然是总被鸡蛋挑骨头的人，他们仍然是总做苦力工作的那些人，他们还是那些主要肩负着实际运行应用的责任的人，而开发者不一定要做得足够好。

**Saron Yitbarek**： 这个问题在未来几年将至关重要。DevOps 的作用到底有多大？随着我们的自动化进程，运维的作用是会被削弱，还是会发生转变？

**00:20:30 - Saron Yitbarek**： 但是我们要记住，DevOps 不仅仅是工具和新技术的应用。这种方法论实际上是在塑造技术，反过来技术也在塑造方法论，这样就有了一个神奇的反馈循环。文化造就了工具，而工具又强化了文化。

**00:22:00 - Saron Yitbarek**： 最后，我们在节目开头描述的那堵墙，也就是把开发和运维划分开来的那堵墙，我甚至不知道五年后“把你的代码扔过墙”的比喻对一个开发者来说是否有意义，如果五年后大家都听不懂这个比喻，那真是一件大好事。不过目前为止的访谈很有价值，我听到了很多新的故事。

现在说话的是云架构师 Richard Henshall。

**Richard Henshall**： 我觉得 DevOps 开始让人们意识到对方关心的是什么，我看到了更多对彼此的理解。

**00:23:00 - Saron Yitbarek**： 现在是系统管理员 Jonah Horowitz。

**00:23:00 - Jonah Horowitz**： 我认为你需要很棒的技巧来写出真正好的软件，我在与我合作过最棒的开发者身上看到了一件事，那就是他们真的，他们贡献了关于的软件工程新技巧，或者说他们推动了软件开发这个行业的发展。

**Saron Yitbarek**： 最后一个是系统管理员 Sandra Henry-Stocker。

**Sandra Henry-Stocker**： 我认为，开发者会变得更加精明、更加谨慎。他们始终要提升自己的技能，我知道这需要很多辛苦的学习。

**00:23:30 - Saron Yitbarek**： DevOps 是个爱的结晶。原来，在那堵墙的另一边还有一些朋友，很高兴认识你们。所以，坦白一下，我以前总觉得 DevOps 很无聊，就是一堆硬核的自动化脚本和扩展问题。我的抵触情绪有一部分是出于它的实践难度。作为开发者，我每周都要面对一些新出来的工具，一些新的框架。DevOps 一直是那些可怕的、快速变化的一部分。但现在，尤其是听了这些故事之后，我明白了。

**00:24:00 - Saron Yitbarek**： DevOps 不仅仅是其工具。它是教导我们如何合作，更快地构建更好的产品的方法。

好消息是，随着为你我这样的开发者准备的新平台出现，我们的工作变得更好、更快、更能适应不同的环境，我的业务圈也可以不断扩大。你会看到人们将 DevOps 扩大到安全部分，所以我们能得到 Sec DevOps。或者他们开始包含商务，那我们就得到了 Business DevOps。我们现在要辩论的话题是：对于一个开发者来说，不仅要了解如何使用这些工具，还有了解所有 DevOps 的东西是如何工作的必要吗？以及我们需要所有开发者都去了解这个新世界吗？

**00:24:30 - Saron Yitbarek**： 这场辩论的结果将决定未来一期《代码英雄》的内容。

你可能已经注意到，在所有关于工具和自动化的谈话中，我漏掉了一些工具。好吧，我把这些留到下一期，当所有这些 DevOps 自动化达到光速时，我们将追踪容器的崛起。

**00:25:00 - Saron Yitbarek**： 是的，这些都会留到第五期。

《代码英雄》是红帽公司推出的原创播客栏目。想要了解更多关于本期节目和以往节目的信息，请访问 [redhat.com/commandlineheroes](http://redhat.com/commandlineheroes) 。在那里，你还可以注册我们的新闻资讯。想免费获得新剧集的自动推送，请务必订阅该节目。

**00:25:30 - Saron Yitbarek**： 只要在苹果播客、Spotify、Google Play、CastBox 中搜索《代码英雄》，或者通过其他方式收听，并点击订阅，这样你就能在第一时间知道最新剧集。我是 Saron Yitbarek。感谢您的收听，编程不止。

>
> **什么是 LCTT SIG 和 LCTT LCRH SIG**
>
>
> LCTT SIG 是 LCTT <ruby> 特别兴趣小组 <rt>  Special Interest Group </rt></ruby>，LCTT SIG 是针对特定领域、特定内容的翻译小组，翻译组成员将遵循 LCTT 流程和规范，参与翻译，并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽（Red Hat）发起的 SIG，当前专注任务是《代码英雄》系列播客的脚本汉化，已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。
>
>
> 欢迎[加入 LCRH SIG](/article-12436-1.html) 一同参与贡献，并领取红帽（Red Hat）和我们联合颁发的专属贡献者证书。
>
>
>

---

via: <https://www.redhat.com/en/command-line-heroes/season-1/devops-tear-down-that-wall>

作者：[Red Hat](https://www.redhat.com/en/command-line-heroes) 选题：[bestony](https://github.com/bestony) 译者：[LikChung](https://github.com/LikChung) 校对：[acyanbird](https://github.com/acyanbird)

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


将 Vim 设置为 Rust IDE

Summary: Vim 编辑器是很好的 Rust 应用开发环境。

Vim 编辑器是很好的 Rust 应用开发环境。

>
> Vim 编辑器是很好的 Rust 应用开发环境。
>
>
>

![](/data/attachment/album/202008/19/075952unmdre9m29u9omar.jpg)

[Rust](https://www.rust-lang.org/) 语言旨在以 C++ 开发人员熟悉的方式实现具有安全并发性和高内存性能的系统编程。它也是 [Stack Overflow 的 2019 年开发人员调查](https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages)中最受欢迎的编程语言之一。

文本编辑器和[集成开发环境（IDE）工具](https://en.wikipedia.org/wiki/Integrated_development_environment)使编写 Rust 代码更加轻松快捷。有很多编辑器可供选择，但是我相信 [Vim 编辑器](https://opensource.com/resources/what-vim)非常适合作为 Rust IDE。在本文中，我将说明如何为 Rust 应用开发设置 Vim。

### 安装 Vim

Vim 是 Linux 和 Unix 中最常用的命令行文本编辑器之一。最新版本（在编写本文时）是 [8.2](https://github.com/vim/vim)，它在使用方式上提供了前所未有的灵活性。

[Vim 的下载页面](https://www.vim.org/download.php)提供了多种二进制或软件包形式安装。例如，如果使用 macOS，那么可以安装 [MacVim](https://github.com/macvim-dev/macvim) 项目，然后通过[安装 Vim 插件](https://opensource.com/article/20/2/how-install-vim-plugins) 扩展 Vim 的功能。

要设置 Rust 进行开发，请下载 [Rustup](https://rustup.rs/)，这是一个方便的 Rust 安装器工具，并在你的终端上运行以下命令（如果你使用 macOS、Linux 或任何其他类 Unix 系统）：

```
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

```

在提示中选择安装选项。然后，你将看到如下输出：

```
stable installed - rustc 1.43.1 (8d69840ab 2020-05-04)

Rust is installed now. Great!

To get started you need Cargo's bin directory ($HOME/.cargo/bin) in your PATH
environment variable. Next time you log in this will be done
automatically.

To configure your current shell run source $HOME/.cargo/env

```

### 语法高亮

Vim 能让你通过 `.vimrc` 文件配置你的运行时环境。要启用语法高亮，请打开 `.vimrc` 文件（如果不存在就创建一个）：

```
$ vim ~/.vimrc

```

在 `.vimrc` 中添加以下内容并保存：

```
filetype plugin indent on
syntax on

```

第一行同时打开检测、插件和缩进配置。第二行启用语法高亮。这些功能将帮助你在 Rust 中管理开发流程。在 Vim 的[帮助文件](http://vimdoc.sourceforge.net/htmldoc/filetype.html#:filetype-overview)中了解更多信息。

### 在 Vim 中创建一个 Rust 应用

要使用 Vim 创建一个新的 Rust HelloWorld 应用（`hello.rs`），请输入：

```
$ vim hello.rs

```

输入以下 Rust 代码在控制台中打印 `Hello World!`：

```
fn main() {
    println!("Hello World");
}

```

它看起来应该像这样：

![Rust code with syntax highlighting](/data/attachment/album/202008/19/080022qytdrq6dwf3szyi3.png "Rust code with syntax highlighting")

没有语法高亮的样子如下：

![Rust code without syntax highlighting](/data/attachment/album/202008/19/080026tdxoedzerrd2eznn.png "Rust code without syntax highlighting")

你是否注意到 Vim 自动缩进和组织代码？那是因为你在 `.vimrc` 文件中输入了第一行。

很好！接下来，你将使用 Rust 的包管理器 [Cargo](https://opensource.com/article/20/3/rust-cargo) 构建此应用。

### Cargo 集成

Cargo 使创建应用更加容易。要查看操作方法，请创建一个基于 Cargo 的 HelloWorld 应用。如果你尚未在 Linux 或 macOS 系统上安装 Cargo，请输入：

```
$ curl https://sh.rustup.rs -sSf | sh

```

然后使用 Cargo 创建包：

```
$ cargo new my_hello_world

```

如果查看目录结构，你会看到 Cargo 自动生成一些源码和目录。如果你安装了 `tree`，请运行它查看目录结构：

```
$ tree my_hello_world
my_hello_world
├── Cargo.toml
└── src
    └── main.rs

1 directory, 2 files

```

在 Vim 中打开 `main.rs` 源码文件：

```
$ vim my_hello_world/src/main.rs

```

它与你在上面手动创建的 HelloWorld 示例中的代码相同。用 `Rust with Vim` 代替 `World`：

```
 fn main() {
      println!("Hello, Rust with Vim");
 }

```

使用 `:wq` 保存更改并退出 Vim。

### 编译你的应用

现在你可以使用 `cargo build` 编译你的第一个 Rust 应用：

```
$ cd my_hello_world
$ cargo build

```

你的终端输出将类似于以下内容：

```
   Compiling my_hello_world v0.1.0 (/Users/danieloh/cloud-native-app-dev/rust/my_hello_world)

    Finished dev [unoptimized + debuginfo] target(s) in 0.60s

```

你可能会看到一条警告消息，因为你重用了示例包名 `my_hello_world`，但现在可以忽略它。

运行应用：

```
$ target/debug/my_hello_world
Hello, Rust with Vim!

```

你也可以使用 `cargo run` 一次构建和运行应用：

```
$ cargo run

    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/my_hello_world`
Hello, Rust with Vim!!

```

恭喜！你在本地的 Vim 编辑器中设置了 Rust IDE，开发了第一个 Rust 应用，并使用 Cargo 包管理器工具构建、测试和运行了它。如果你想学习其他 Cargo 命令，请运行 `cargo help`。

---

via: <https://opensource.com/article/20/7/vim-rust-ide>

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


#新闻拍一拍# 苹果威胁将 Epic 及虚幻引擎驱除出 Mac 和 iOS

Summary: • Rust 团队回应 Mozilla 裁员：Rust 项目没有危险 • FBI、NSA 发联合安全警告：俄罗斯黑客使用新型 Linux 恶意软件进行攻击

![](/data/attachment/album/202008/19/081652rmdrvroxsmjvxmmz.jpg)

#### 苹果威胁将 Epic 及虚幻引擎驱除出 Mac 和 iOS

Epic 和苹果之间的法律战持续升温。Epic 在法庭文件中称，苹果表示将在 8 月 28 日终止 Epic 的开发者账号。苹果此举不仅威胁到《堡垒之夜》，还威胁到每一个使用虚幻引擎的游戏。Epic 称，到 8 月 28 日苹果将阻止 Epic 访问在苹果平台开发软件所需的必要工具——其中包括了提供给第三方开发者的虚幻引擎所需的开发工具，苹果从未声称虚幻引擎侵犯了它的任何政策。

来源：[solidot](https://www.solidot.org/story?sid=65273 "https://www.solidot.org/story?sid=65273")

>
> 拍一拍：如果真的虚幻引擎被禁，很多非常受欢迎的游戏也将遭受池鱼之灾。
>
>
>

#### Rust 团队回应 Mozilla 裁员：Rust 项目没有危险

Rust 是 Mozilla 推出的编程语言，因为怕被裁员事件影响舆论，Rust Core 团队近日公开表示“Rust 项目没有危险”，并且在接下来的几周内，团队将在博客上对此事进行说明。

来源：[开源中国](https://www.oschina.net/news/117999/rust-core-team-rust-not-in-existential-danger "https://www.oschina.net/news/117999/rust-core-team-rust-not-in-existential-danger")

>
> 拍一拍：所以说，即便是由大公司主导的开源项目，也要尽量社区化。
>
>
>

#### FBI、NSA 发联合安全警告：俄罗斯黑客使用新型 Linux 恶意软件进行攻击

美国的 FBI 和 NSA 近日发出联合安全警报称，俄罗斯军事情报部门已经开发出了一款针对 Linux 系统的恶意软件，名为“Drovorub”。据介绍，Drovorub 是一个多组件系统，其中包括一个 implant、一个内核模块 rootkit、一个文件传输工具、一个 port-forwarding 模块以及一个命令和控制（C2）服务器。FBI 和 NSA 建议所有的 Linux系统都升级到 Linux Kernel 3.7 或更高版本，并采取预防措施以确保仅加载具有有效数字签名的模块。

来源：[开源中国](https://www.oschina.net/news/117995/fbi-nsa-linux-malware-drovorub "https://www.oschina.net/news/117995/fbi-nsa-linux-malware-drovorub")

>
> 拍一拍：国家黑客的力量。
>
>
>


使用微软的 ProcDump 调试 Linux

Summary: 用这个微软的开源工具，获取进程信息。

用这个微软的开源工具，获取进程信息。

>
> 用这个微软的开源工具，获取进程信息。
>
>
>

![](/data/attachment/album/202008/20/095646k5wz7cd11vyc7lhr.jpg)

微软越来越心仪 Linux 和开源，这并不是什么秘密。在过去几年中，该公司稳步地增加了对开源的贡献，包括将其部分软件和工具移植到 Linux。2018 年底，微软[宣布](https://www.zdnet.com/article/microsoft-working-on-porting-sysinternals-to-linux/)将其 [Sysinternals](https://docs.microsoft.com/en-us/sysinternals/) 的部分工具以开源的方式移植到 Linux，[Linux 版的 ProcDump](https://github.com/Microsoft/ProcDump-for-Linux)是其中的第一个。

如果你在 Windows 上从事过调试或故障排除工作，你可能听说过 Sysinternals，它是一个“瑞士军刀”工具集，可以帮助系统管理员、开发人员和 IT 安全专家监控和排除 Windows 环境的故障。

Sysinternals 最受欢迎的工具之一是 [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump)。顾名思义，它用于将正在运行的进程的内存转储到磁盘上的一个核心文件中。然后可以用调试器对这个核心文件进行分析，了解转储时进程的状态。因为之前用过 Sysinternals，所以我很想试试 ProcDump 的 Linux 移植版。

### 开始使用 Linux 上的 ProcDump

要试用 Linux 上的 ProcDump，你需要下载该工具并编译它。（我使用的是 Red Hat Enterprise Linux，尽管这些步骤在其他 Linux 发行版上应该是一样的）：

```
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.2 (Ootpa)
$
$ uname -r
4.18.0-193.el8.x86_64
$

```

首先，克隆 Linux 版 ProcDump 的版本库。

```
$ git clone https://github.com/microsoft/ProcDump-for-Linux.git
Cloning into 'ProcDump-for-Linux'...
remote: Enumerating objects: 40, done.
remote: Counting objects: 100% (40/40), done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 414 (delta 14), reused 14 (delta 6), pack-reused 374
Receiving objects: 100% (414/414), 335.28 KiB | 265.00 KiB/s, done.
Resolving deltas: 100% (232/232), done.
$
$ cd ProcDump-for-Linux/
$
$ ls
azure-pipelines.yml  CONTRIBUTING.md  docs     INSTALL.md  Makefile    procdump.gif  src
CODE_OF_CONDUCT.md   dist             include  LICENSE     procdump.1  README.md     tests
$

```

接下来，使用 `make` 构建程序。它能准确地输出编译源文件所需的 [GCC](https://gcc.gnu.org/) 命令行参数。

```
$ make
rm -rf obj
rm -rf bin
rm -rf /root/ProcDump-for-Linux/pkgbuild
gcc -c -g -o obj/Logging.o src/Logging.c -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/Events.o src/Events.c -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/ProcDumpConfiguration.o src/ProcDumpConfiguration.c -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/Handle.o src/Handle.c -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/Process.o src/Process.c -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/Procdump.o src/Procdump.c -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/TriggerThreadProcs.o src/TriggerThreadProcs.c -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/CoreDumpWriter.o src/CoreDumpWriter.c -Wall -I ./include -pthread -std=gnu99
gcc -o bin/procdump obj/Logging.o obj/Events.o obj/ProcDumpConfiguration.o obj/Handle.o obj/Process.o obj/Procdump.o obj/TriggerThreadProcs.o obj/CoreDumpWriter.o -Wall -I ./include -pthread -std=gnu99
gcc -c -g -o obj/ProcDumpTestApplication.o tests/integration/ProcDumpTestApplication.c -Wall -I ./include -pthread -std=gnu99
gcc -o bin/ProcDumpTestApplication obj/ProcDumpTestApplication.o -Wall -I ./include -pthread -std=gnu99
$

```

编译过程中会创建两个新的目录。第一个是 `obj/` 目录，存放编译期间创建的对象文件。第二个（也是更重要的）目录是 `bin/`，它是存储编译出的 `procdump` 程序的地方。它还会编译另一个名为 `ProcDumpTestApplication` 的测试二进制文件：

```
$ ls obj/
CoreDumpWriter.o  Handle.o   ProcDumpConfiguration.o  ProcDumpTestApplication.o  TriggerThreadProcs.o
Events.o          Logging.o  Procdump.o               Process.o
$
$
$ ls bin/
procdump  ProcDumpTestApplication
$
$ file bin/procdump
bin/procdump: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=6e8827db64835ea0d1f0941ac3ecff9ee8c06e6b, with debug_info, not stripped
$
$ file bin/ProcDumpTestApplication
bin/ProcDumpTestApplication: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=c8fd86f53c07df142e52518815b2573d1c690e4e, with debug_info, not stripped
$

```

在此情况下，每次运行 `procdump` 实用程序时，你都必须移动到 `bin/` 文件夹中。要使它在系统中的任何地方都可以使用，运行 `make install`。这将这个二进制文件复制到通常的 `bin/` 目录中，它是你的 shell `$PATH` 的一部分：

```
$ which procdump
/usr/bin/which: no procdump in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
$
$ make install
mkdir -p //usr/bin
cp bin/procdump //usr/bin
mkdir -p //usr/share/man/man1
cp procdump.1 //usr/share/man/man1
$
$ which procdump
/usr/bin/procdump
$

```

安装时，ProcDump 提供了一个手册页，你可以用 `man procdump` 访问：

```
$ man procdump
$

```

### 运行 ProcDump

要转储一个进程的内存，你需要向 ProcDump 提供它的进程 ID（PID）。你可以使用机器上任何正在运行的程序或守护进程。在这个例子中，我将使用一个永远循环的小 C 程序。编译程序并运行它（要退出程序，按 `Ctrl+C`，如果程序在后台运行，则使用 `kill` 命令并输入 PID）：

```
$ cat progxyz.c
#include <stdio.h>

int main() {
        for (;;)
        {
                printf(".");
                sleep(1);
        }
        return 0;
}
$
$ gcc progxyz.c -o progxyz
$
$ ./progxyz &
[1] 350498
$

```

运行该程序，你可以使用 `pgrep` 或 `ps` 找到它的 PID。记下 PID：

```
$ pgrep progxyz
350498
$
$ ps -ef | grep progxyz
root      350498  345445  0 03:29 pts/1    00:00:00 ./progxyz
root      350508  347350  0 03:29 pts/0    00:00:00 grep --color=auto progxyz
$

```

当测试进程正在运行时，调用 `procdump` 并提供 PID。下面的输出表明了该进程的名称和 PID，并报告它生成了一个核心转储文件，并显示其文件名：

```
$ procdump -p 350498

ProcDump v1.1.1 - Sysinternals process dump utility
Copyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.
Mark Russinovich, Mario Hewardt, John Salem, Javid Habibi
Monitors a process and writes a dump file when the process exceeds the
specified criteria.

Process:                progxyz (350498)
CPU Threshold:          n/a
Commit Threshold:       n/a
Polling interval (ms):  1000
Threshold (s):  10
Number of Dumps:        1

Press Ctrl-C to end monitoring without terminating the process.

[03:30:00 - INFO]: Timed:
[03:30:01 - INFO]: Core dump 0 generated: progxyz_time_2020-06-24_03:30:00.350498
$

```

列出当前目录的内容，你应该可以看到新的核心文件。文件名与 `procdump` 命令显示的文件名一致，日期、时间、PID 都会附加在文件名上：

```
$ ls -l progxyz_time_2020-06-24_03\:30\:00.350498
-rw-r--r--. 1 root root 356848 Jun 24 03:30 progxyz_time_2020-06-24_03:30:00.350498
$
$ file progxyz_time_2020-06-24_03\:30\:00.350498
progxyz_time_2020-06-24_03:30:00.350498: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style, from './progxyz', real uid: 0, effective uid: 0, real gid: 0, effective gid: 0, execfn: './progxyz', platform: 'x86_64'
$

```

### 用 GNU 项目调试器分析核心文件。

要查看是否可以读取该转储文件，调用 [GNU 项目调试器](https://www.gnu.org/software/gdb/)（`gdb`）。记得提供测试二进制文件的路径，这样你就可以看到堆栈上所有的函数名。在这里，`bt`（回溯）表明，当转储被采集时，`sleep()` 函数正在执行：

```
$ gdb -q ./progxyz ./progxyz_time_2020-06-24_03\:30\:00.350498
Reading symbols from ./progxyz...(no debugging symbols found)...done.
[New LWP 350498]
Core was generated by `./progxyz'.
#0  0x00007fb6947e9208 in nanosleep () from /lib64/libc.so.6
Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-101.el8.x86_64
(gdb) bt
#0  0x00007fb6947e9208 in nanosleep () from /lib64/libc.so.6
#1  0x00007fb6947e913e in sleep () from /lib64/libc.so.6
#2  0x00000000004005f3 in main ()
(gdb)

```

### gcore 怎么样？

Linux 用户会很快指出，Linux 已经有一个叫 `gcore` 的命令，大多数 Linux 发行版都有这个命令，它的作用和 ProcDump 完全一样。你说的对。如果你从来没有使用过它，可以尝试用 `gcore` 来转储一个进程的核心。再次运行测试程序，然后运行 `gcore`，并提供 PID 作为参数：

```
$ ./progxyz &
[1] 350664
$
$
$ pgrep progxyz
350664
$
$
$ gcore 350664
0x00007fefd3be2208 in nanosleep () from /lib64/libc.so.6
Saved corefile core.350664
[Inferior 1 (process 350664) detached]
$

```

`gcore` 打印一条消息，说它已将核心文件保存到一个特定的文件中。检查当前目录，找到这个核心文件，然后再次使用 `gdb` 加载它：

```
$
$ ls -l  core.350664
-rw-r--r--. 1 root root 356848 Jun 24 03:34 core.350664
$
$
$ file core.350664
core.350664: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style, from './progxyz', real uid: 0, effective uid: 0, real gid: 0, effective gid: 0, execfn: './progxyz', platform: 'x86_64'
$
$ gdb -q ./progxyz ./core.350664
Reading symbols from ./progxyz...(no debugging symbols found)...done.
[New LWP 350664]
Core was generated by `./progxyz'.
#0  0x00007fefd3be2208 in nanosleep () from /lib64/libc.so.6
Missing separate debuginfos, use: yum debuginfo-install glibc-2.28-101.el8.x86_64
(gdb) bt
#0  0x00007fefd3be2208 in nanosleep () from /lib64/libc.so.6
#1  0x00007fefd3be213e in sleep () from /lib64/libc.so.6
#2  0x00000000004005f3 in main ()
(gdb) q
$

```

为了使 `gcore` 可以工作，你需要确保以下设置到位。首先，确保为核心文件设置了 `ulimit`，如果设置为 `0`，核心文件将不会被生成。第二，确保 `/proc/sys/kernel/core_pattern` 有正确的设置来指定核心模式：

```
$ ulimit -c
unlimited
$

```

### 你应该使用 ProcDump 还是 gcore？

有几种情况下，你可能更喜欢使用 ProcDump 而不是 gcore，ProcDump 有一些内置的功能，在一些情况下可能很有用。

#### 等待测试二进制文件的执行

无论是使用 ProcDump 还是 gcore，测试进程必须被执行并处于运行状态，这样才能提供一个 PID 来生成核心文件。但 ProcDump 有一个功能，就是等待特定的二进制文件运行，一旦发现运行的测试二进制文件与给定的名称相匹配，它就会为该测试二进制文件生成一个核心文件。它可以使用 `-w` 参数和程序名称而不是 PID 来启用。这个功能在测试程序快速退出的情况下很有用。

下面是它的工作原理。在这个例子中，没有名为 `progxyz` 的进程在运行：

```
$ pgrep progxyz
$

```

用 `-w` 参数调用 `procdump`，让它保持等待。在另一个终端，调用测试二进制 `progxyz`：

```
$ procdump -w progxyz

ProcDump v1.1.1 - Sysinternals process dump utility
Copyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.
Mark Russinovich, Mario Hewardt, John Salem, Javid Habibi
Monitors a process and writes a dump file when the process exceeds the
specified criteria.

Process:                progxyz (pending)
CPU Threshold:          n/a
Commit Threshold:       n/a
Polling interval (ms):  1000
Threshold (s):  10
Number of Dumps:        1

Press Ctrl-C to end monitoring without terminating the process.

[03:39:23 - INFO]: Waiting for process 'progxyz' to launch...

```

然后，从另一个终端调用测试二进制 `progxyz`：

```
$ ./progxyz &
[1] 350951
$

```

ProcDump 立即检测到该二进制正在运行，并转储这个二进制的核心文件：

```
[03:39:23 - INFO]: Waiting for process 'progxyz' to launch...
[03:43:22 - INFO]: Found process with PID 350951
[03:43:22 - INFO]: Timed:
[03:43:23 - INFO]: Core dump 0 generated: progxyz_time_2020-06-24_03:43:22.350951
$

$ ls -l progxyz_time_2020-06-24_03\:43\:22.350951
-rw-r--r--. 1 root root 356848 Jun 24 03:43 progxyz_time_2020-06-24_03:43:22.350951
$
$ file progxyz_time_2020-06-24_03\:43\:22.350951
progxyz_time_2020-06-24_03:43:22.350951: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style, from './progxyz', real uid: 0, effective uid: 0, real gid: 0, effective gid: 0, execfn: './progxyz', platform: 'x86_64'
$

```

#### 多个核心转储

另一个重要的 ProcDump 功能是，你可以通过使用命令行参数 `-n <count>` 指定要生成多少个核心文件。核心转储之间的默认时间间隔是 `10` 秒，但你可以使用 `-s <sec>` 参数修改。这个例子使用 ProcDump 对测试二进制文件进行了三次核心转储：

```
$ ./progxyz &
[1] 351014
$
$ procdump -n 3 -p 351014

ProcDump v1.1.1 - Sysinternals process dump utility
Copyright (C) 2020 Microsoft Corporation. All rights reserved. Licensed under the MIT license.
Mark Russinovich, Mario Hewardt, John Salem, Javid Habibi
Monitors a process and writes a dump file when the process exceeds the
specified criteria.

Process:                progxyz (351014)
CPU Threshold:          n/a
Commit Threshold:       n/a
Polling interval (ms):  1000
Threshold (s):  10
Number of Dumps:        3

Press Ctrl-C to end monitoring without terminating the process.

[03:45:20 - INFO]: Timed:
[03:45:21 - INFO]: Core dump 0 generated: progxyz_time_2020-06-24_03:45:20.351014
[03:45:31 - INFO]: Timed:
[03:45:32 - INFO]: Core dump 1 generated: progxyz_time_2020-06-24_03:45:31.351014
[03:45:42 - INFO]: Timed:
[03:45:44 - INFO]: Core dump 2 generated: progxyz_time_2020-06-24_03:45:42.351014
$
$ ls -l progxyz_time_2020-06-24_03\:45\:*
-rw-r--r--. 1 root root 356848 Jun 24 03:45 progxyz_time_2020-06-24_03:45:20.351014
-rw-r--r--. 1 root root 356848 Jun 24 03:45 progxyz_time_2020-06-24_03:45:31.351014
-rw-r--r--. 1 root root 356848 Jun 24 03:45 progxyz_time_2020-06-24_03:45:42.351014
$

```

#### 基于 CPU 和内存使用情况的核心转储

ProcDump 还可以让你在测试二进制或进程达到一定的 CPU 或内存阈值时触发核心转储。ProcDump 的手册页显示了调用 ProcDump 时使用的命令行参数：

* `-C`：当 CPU 超过或等于指定值时，触发核心转储生成（0 到 100 \* nCPU）。
* `-c`：当 CPU 小于指定值时，触发核心转储生成（0 到 100 \* nCPU）。
* `-M`：当内存提交超过或等于指定值（MB）时，触发核心转储生成。
* `-m`：当内存提交小于指定值（MB）时，触发核心转储生成。
* `-T`：当线程数超过或等于指定值时触发。
* `-F`：当文件描述符数量超过或等于指定值时触发。
* `-I`：轮询频率，单位为毫秒（默认为 1000）。

例如，当给定 PID 的 CPU 使用率超过 70% 时，可以要求 ProcDump 转储核心：

```
procdump -C 70 -n 3 -p 351014

```

### 结论

ProcDump 是一长串被移植到 Linux 的 Windows 程序中的一个有趣的补充。它不仅为 Linux 用户提供了额外的工具选择，而且可以让 Windows 用户在 Linux 上工作时更有熟悉的感觉。

---

via: <https://opensource.com/article/20/7/procdump-linux>

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


#新闻拍一拍# 微软：IE11 之后再无 IE

Summary: • Zorin OS：新线索表明有更多 Windows 用户拥抱 Linux • Rust 语言成立自己的基金会

为IE默哀。

![](/data/attachment/album/202008/20/103513lz7gy2qjzqjqoqjw.jpg)

#### 微软：IE11 之后再无 IE

1995 年 8 月 16 日，微软推出了第一代 Internet Explore 浏览器。2013 年 IE11 发布后，微软开发了浏览器 Edge。今年 1 月 15 日微软新版 Edge 浏览器正式发布，它基于 Chromium 内核。在微软官方 IE 和 Edge 生命周期问答[文档](https://docs.microsoft.com/en-us/lifecycle/faq/internet-explorer-microsoft-edge)中称：是的，IE11 是 Internet Explorer 浏览器的最后一个重大版本。

来源：[快科技](https://www.cnbeta.com/articles/tech/1017697.htm)

>
> 拍一拍：那个糟糕的、曾经统治了浏览器市场的 IE 终于要退场了，但是我觉得也要感谢 IE 为互联网的发展做出的贡献。从另一个方面来看，新的浏览器巨头在制霸，谁是下一个打倒恶龙的勇士呢？
>
>
>

#### Zorin OS：新线索表明有更多 Windows 用户拥抱 Linux

自 9 个月前的 Zorin OS 15 大版本更新以来，其已迎来超过 90 万的下载量。其称，“值得一提的是，在每 3 个下载中、就有 2 个来自 Windows 和 macOS，表明最终用户对 Zorin OS 很是认可。”

来源：[cnBeta.COM](https://www.cnbeta.com/articles/tech/1017673.htm)

>
> 拍一拍：Zorin，加油！
>
>
>

#### Rust 语言成立自己的基金会

Rust 语言项目宣布成立自己的基金会，基金会的第一项任务就是接管所有权。与 Rust、Cargo、[crates.io](http://crates.io/) 相关的商标和域名将转移到基金会名下，而基金会也将承担相应的财务责任。Rust 最初是 Mozilla 的一个研究项目，2015 年发布了 1.0 版本，此后它确立了项目方向，独立于 Mozilla 组织进行治理。

来源：[solidot](https://www.solidot.org/story?sid=65289)

>
> 拍一拍：在 Mozilla 裁员的背景之下，被业界热捧的 Rust 积极展开自救。Mozilla 大家庭的其它兄弟姐妹纷纷侧目。
>
>
>


《代码英雄》第一季（5）：容器竞赛

Summary: 这场战斗的奖品是容器编排的控制权，参赛者包括这个行业最快最强的玩家。

这场战斗的奖品是容器编排的控制权，参赛者包括这个行业最快最强的玩家。

>
> 代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。
>
>
>

>
> **什么是《代码英雄》**
>
>
> <ruby> 代码英雄 <rt>  Command Line Heroes </rt></ruby>是世界领先的企业开源软件解决方案供应商红帽（Red Hat）精心制作的原创音频播客，讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。
>
>
>

![](/data/attachment/album/202008/21/000308a577z40hqta5qhpg.png)

本文是《[代码英雄](https://www.redhat.com/en/command-line-heroes)》系列播客[第一季（5）：容器竞赛](https://www.redhat.com/en/command-line-heroes/season-1/the-containers-derby)的[音频](https://dts.podtrac.com/redirect.mp3/audio.simplecast.com/3aed4d5c.mp3)脚本。

容器的兴起为开发者们打开了一道新的大门，它简化了在机器与机器之间传递项目的成本。随着它变得广受欢迎，一场大战也悄悄拉开帷幕。这场战斗的奖品是容器编排的控制权，参赛者包括这个行业最快最强的玩家。

容器是开源运动中最重要的一项突破之一。在这一集里，特邀嘉宾 Kelsey Hightower、Laura Frank 和 Clayton Coleman 将告诉我们容器如何为未来添砖加瓦，以及编排技术为何如此重要。

**Saron Yitbarek**：

你有看过赛马吗？赛马们排成一行，蹄子刨着脚下的土壤。你可以想象出这么一副画面。比赛即将开始，在这些竞争者中脱颖而出的将是优胜者。

**00:00:30**：

不同的是，比赛的不是马。而是科技世界的诸侯。那么是什么让比赛如此重要？是怎样的珍贵的奖励，才会让这些参赛者们排着队，迫不及待地想要得到它? 这是一场赢家将掌握容器编排技术规则的竞赛，而且胜利者只有一个。重要的是，不同于其他的比赛，赢得这场比赛，你不仅仅会成为今天的冠军，更有可能在来持续领先。

**00:01:30**:

我是 Saron Yitbarek，这里是代码英雄，一款红帽公司原创的博客。

第五集，容器竞赛。[上一集](/article-12529-1.html)我们见证了 DevOps 的崛起，以及一组新工具如何影响了其他人对开发者这一概念的看法。在这一集栏目中，我们会追溯容器技术崛起的历史，讲述容器技术如何通过拥有支持全新工作的可能性，来进一步扩展开发者这一角色的概念。然后我们会一起见证容器标准化是如何为容器编排奠定比赛基础的。

**00:01:30**：

这是一场严肃的比赛，也是一场全球性的比赛，吸引了行业里最快，最强大的选手。他们都准备好了为冲刺终点线而奋力一搏。准备好了吗? 比赛开始了！

现在，随着这些“赛马”离开起点，也许我们应该弄清楚为什么这场比赛如此重要。谁会关心容器呢？好吧，算我一个。但是实际上，一开始我也并不知道容器是什么。以下我将讲述一个小故事 —— 我是如何醒悟容器之美的。

**00:02:00**：

不久之前，我还在为我网站写代码，然后有天我让我的朋友 Nadia 过来实现一些新的功能。我在保持代码干爽和可读性方面做得很好，当然，代码也经过了很好的测试。所以再加入一个新的网站开发者也不是一件难事。对吗？如果你也这样以为，那就错了。这是一个非常繁琐的过程，特别是当我们跑规范化测试时，这个问题尤为明显。

**00:02:30**：

代码运行正常，但我们不能在两台电脑上同时通过所有测试。我们有很奇怪的电脑时区设置问题，而且她的 Ruby on Rails 版本跟我的不同。就是一个很经典的问题：“我的电脑上可以代码运行”，“可是在我的电脑上就是不行”。我只好对代码做一些修改，直到它在我这里正常运行，但当我把它发送给 Nadia 时，程序又会崩溃。

**00:03:00**：

我很清楚，我和 Nadia 所碰到的这些问题，对于所有的开发者来说都或多或少经历过，甚至他们把这种经历当作玩笑来讲。有时候，我只能把这个当做是在我工作时必须要忍受的一部分。我没有意识到的是，这个问题有个最终解决办法。想象有一种方式可以降低人与人之间的隔阂；想象有一种方法可以让我们在开发中使用任意喜欢的工具，并且在传递工作成果时毫无阻碍；想象一下有一种办法，无论有多少人同时进行一个项目的开发，不管这些人散布在世界何地，都可以让项目从开发到测试，再到生产环境，保持连贯性。如果在我浪费好几周，用最笨的方式传递工作成果前就想到了容器该多好。

**00:03:30 - Liz Rice**：

一个容器实际上就是一个进程。

**Saron Yitbarek**：

Liz Rice 是 Aqua Security 的一名技术布道师。她描述了为何容器会如此实用。事实上容器把一切打包到了一个整洁、并且可以迁移的包中。

**00:04:00 - Liz Rice**：

这就像任何其他的进程一样，不同的是容器的世界非常小。比如，如果你启动一个容器，进程会被授予它自己的根目录。然后它认为自己在查看的是整台计算机的根目录，但实际上它只是在查看这个文件系统很小的一个子集。

**00:04:30 - Saron Yitbarek**：

通过打包一个可执行文件及其所有的依赖，容器可以在任何笔记本或者云中的虚拟机上运行。带着它自己的执行文件、库和依赖。所有的一切都包含在了容器中。所以，这就是容器神奇之处，容器在每个环境中的运行都会完全一样。这也就意味着开发者可以轻松地分享并协作应用开发，而不用担心计算机之间相互不兼容这个老问题。

**00:05:00**：

举一个类比的例子希望能够帮助你理解。你有听说过<ruby> 蓝围裙 <rt>  Blue Apron </rt></ruby>这个服务吗？该服务提供你做饭所需的一切，包括精心按照菜谱卡片搭配好的，所有做饭需要的原料。好的，想象一下如果蓝围裙所能带给你的不仅仅只是还没有处理过的食材，而是一整个厨房，有煤气灶，还有你所需要的全部餐具，一切你需要的都会装到小盒子里，放在门阶上。这就是一个容器。在我提到的那种情况下，容器技术就可以很好地解决 Nadia 加入进来时所碰到的问题，简单到像使用蓝围裙服务做一顿晚餐一样。虚拟机同样也可以提供一个预装好的环境。但要解释这个，我们就不得不抛弃蓝围裙这个比喻，让我们来看一看具体的细节。

**00:05:30 - Liz Rice**：

许多人都认为容器是某种轻量级的虚拟化技术、轻量级的虚拟机，事实上并不是。容器与虚拟机有很大不同。虚拟机有独属于自己的一整个操作系统，相比起来容器是共享操作系统的。一个计算机上的所有容器共享同一个操作系统的。

**00:06:00 - Saron Yitbarek**：

最后一点，容器和虚拟机可以并肩工作。容器不能替代虚拟机。虚拟化技术仍然可以提高过时系统的效率，并且对于服务器整合非常关键。但容器技术的兴起也为我们打开了新的大门。不妨这样想，如果我们全部依靠虚拟机的话，运行所有仿真服务器将产生大量的额外负担。

**00:06:30**：

一台虚拟机的大小至少是以 G 为单位的，然而一个容器可能也就只有 20 M 左右。一台虚拟机可能会需要若干分钟来启动，如果我尝试用它部署一个网页应用的话，这可不是一个好消息。很长时间以来，人们都期盼一个轻量级的、更快速的完整机器虚拟化替代方案出现。

**00:00:07**：

回顾一下历史，1979 年就出现了容器的原型。Unix V7 的开发者们设计了一种根系统调用，使环境中只包括特定的程序。该突破为我们现在看到的容器技术指明了道路。另一个巨大的进展来源于 2008 年的 Linux 容器技术。现在，我们有了操作系统级的虚拟化技术。

**00:07:30**：

我们终于可以在一个单独的 Linux 内核上运行多个容器，而无需使用完整的虚拟机。这也就意味着程序对于基础架构的需求逐渐减少，但不是每一个人都能立马看到容器技术的潜力。

**Laura Frank**：

容器化真的是前所未有的、崭新的一个天才般的想法。

**Saron Yitbarek**：

Laura Frank 是 CloudBees 的技术总监。

**00:08:00 - Laura Frank**：

只有少部分人了解容器技术的来龙去脉，并可以运用它。不过相信随着时间的推移越来越多的人会接触到容器化的概念，随着越来越多的人开始使用这项技术，并且这些知识通过工程团队和工程组织，通过社区进行传播，就会变得更容易获得。

**Saron Yitbarek**：

因为和我们之前提到的与虚拟机的相似性，Laura 认为，因为我们之前提到的容器技术与虚拟机的相似性，容器的潜力被低估了。

**00:08:30 - Laura Frank**：

我在回想我的职业生涯，那是我还只是个普通的日常技术人员。如果你不是一个系统管理员或者 Linux 资深用户的话，容器还是一个你刚刚了解到的全新概念。我把它理解为使用一台虚拟机模式类似的东西，我可以去建立一个可以用完即弃的环境，而且这个环境完全独立，清理之后不留痕迹。

**Saron Yitbarek**：

容器除了能保持系统整洁之外，其实还大有可为。容器将会革新整个行业，并且随着开源项目和社区的兴起，在不久之后，容器标准化的充分实施将变为可能。

**00:09:00 - Scott McCarty**：

整个界面已经变得非常简单。

**Saron Yitbarek**：

Scott McCarty 是红帽的一名资深的容器策略顾问。他称得上是这个行业的资深人士，他在容器出现前，甚至是虚拟机出现前，就在做这方面的工作了。

**00:09:30 - Scott McCarty**：

在互联网 1.0 时代，我在一家线上零售商工作，我们有上千台实体机，我们用不同的方式，在所有这些不同的服务器上一遍又一遍地安装相同的软件。我们尝试了所有的方法。当你从原始的操作系统迁移到虚拟机，然后再到 Linux 容器、Solaris 容器，同样的问题一再出现，你仍然不得不在不同的虚拟机，或者类似操作系统实例的结构体之间管理配置。

**Saron Yitbarek**：

一旦容器变的规范化，一切都将改变。

**00:10:00 - Scott McCarty**：

比如，有了很多非常标准化的方式可以去处理现在这些打包好的应用，我认为容器技术的出现，从根本上改变了一切。它使得那些应用非常容易使用，而且容器还不会对系统本身造成损害，同时相比虚拟机更加小巧快捷。

**00:10:30 - Saron Yitbarek**：

借助 Linux 容器带来的进步，这些新的开源项目和社区使得开发者们可以更好地携手合作。很多我们对于后端的焦虑都被一扫而光。突然间，容器和由它促进的微服务变得十分有吸引力。一旦一种共同的容器语言出现了，障碍就消失了，与此同时容器技术改变了我们的工作方式，也改变了我们学习新技术的步伐。

**00:11:00**：

还记得之前我和同事 Nadia 遇到的反复出现的问题吗？“在我这代码能跑”的场景？在容器的世界，这个问题将不复存在。相比于我们之前使用的标准的操作系统，开发者社区见证了容器是如何变得更加快速，成本低廉，并且容易使用的 —— 比传统操作系统更加容易。容器技术被采纳的速度十分惊人。但是要记得：容器标准的出现仅仅是容器编排这场竞赛的热身。

赛马们已经整齐排列好，随着信号枪一声令下，它们为了这场比赛的冠军而拼尽全力。竞争的不是容器本身，而是我们部署和管理容器所使用的工具。

**00:11:30**：

我是 Saron Yitbarek，这里是代码英雄。在这场标准容器编排竞赛中，哪位会胜出成为管理所有容器的平台呢？起初有两位竞争者处于领先地位。

**00:12:00**：

由 Apache 驾驭的 Swarm，和 Docker 驾驭的 Mesos。但是等等，怎么？现在出现了一匹黑马改变了这个格局，那就是谷歌。Linux 设立了云原生计算基金会（CNCF），随后 CNCF 推动了谷歌开源的编排引擎 Kubernetes。

**00:12:30**：

现在，相比 Kubernetes，Mesos 和 Swarm 已经抢占了先机，对吗？它们得到了 Apache 和 Docker 的支持，已经入场了一段时间了。但是 Kubernetes 有其他的“赛马”所不具备的优势。Clayton Coleman 会告诉我们这个秘密是什么。Clayton 是红帽负责 Kubernetes 和 OpenShift 的一名架构师。

**00:13:00 - Clayton Coleman**：

在 Kubernetes 诞生之初，谷歌就在项目的开放上做的很好，它降低了项目的贡献和参与的难度。谷歌极其关注让开发者和运维人员能更加容易地开展工作。有这样一个强烈的关注点，就是要做一个能让大多数开发者和运维的生活更轻松的东西。我觉得 Kubernetes 和围绕着Kubernetes 的社区找到了一个足够好的方式，让大部分人参与进来，他们让 Kubernetes 具有足够的可扩展性，还可以解决一些极端的用例。

**Saron Yitbarek**：

在早期，来自于红帽、CoreOS 和谷歌的工程师们都参与到了 Kubernetes 的开发中。随着 Kubernetes 开发到 1.0，不管是初创公司还是大公司都参与其中，一起构建和完善它。关键的是，所有这些增长从来都不是只归功于谷歌或者任何一方。

**00:13:30 - Clayton Coleman**：

在这个例子中，我喜欢以 Linux 打比方。Linux 并不是始于 Linus 开始编写内核，然后告诉所有人，在用户空间如何写 GCC，如何去建立 NGINX 或者 Apache。相反，内核团队专注于建立一个高效的操作系统内核，并与其他诸如 GNU 项目的开源社区合作，并且将可以在其他 Unix 系统上工作的工具引入 Linux。

**00:14:00**：

因此，我们如今所使用的许多工具，都不是 Linux 核心团队交付的。

但是 Linux 作为一个整体，相比于其内核涵盖的范围要宽泛得多，而且我认为这种模式的优势是 Kubernetes 取得现在成就所不可或缺的。当我们建立社区并且专注于 Kubernetes 范围时，我们可以试图从“Kubernetes 内核”的角度来考虑它，这是分布式集群操作系统的内核。

**00:14:30 - Saron Yitbarek**：

Kubernetes 证明了自己在开源世界中建立社区的能力，令人难以置信。正如我们在操作系统之战中谈到的 Linux 崛起一样，现如今这场关于容器的战争中，获胜者往往懂得如何借助社区力量。事实上，尽管谷歌可能开创了 Kubernetes，但目前它属于每一位开发者，并由云原生计算基金会（CNCF）管理。

**00:15:00**：

在 GitHub 上，Kubernetes 有大约 3 万的星标数，而 Swarm 和 Mesos 只有数千，这已经很能说明问题了。这就是由社区所生，为社区所用的技术。

我想了解谷歌的态度，一个如此庞大并且以效益为导向的大公司，是怎么做到如此擅长跟其他开发者合作的呢？我找到了很适合回答这个问题的人 —— Kelsey Hightower，他是谷歌负责容器技术支持的技术专家。

**00:15:30**：

想想谷歌的地位：它在分布式系统领域具备丰富的经验，还运行着分布在世界各地的许许多多的服务器，因此它开发的 Kubernetes 似乎有着很大的优势，并且有信心一定能在这场容器竞赛中胜出。那么，当你想到 Kubernetes 和开源时，你是如何看待这种关系的？

**00:16:00 - Kelsey Hightower**：

我想当谈到基础架构工具，甚至编程语言时，大家没有什么选择 —— 你不可能用个专有工具，即使它很棒。如果它不是开源的，大多数人可能甚至都不会想去了解。而且我认为这也是大多数人会采用像 Kubernetes 这样的基础架构工具的原因，你可能会对自己说：“好吧，我们就要坚持使用这个版本四、五年，也可能我们需要根据自己的一些独特需求来对其进行修改。”

**00:16:30**：

一旦走到这一步，就很难说服企业接受，“嘿，每台服务器使用程序的价格是 200 美元，而且你看不到源代码，所以有需要的话也必须等我们来修改”。

那样的日子一去不复返了，所以我不确定是否真的可以在没有开源的情况下建立基础架构。开源的另一个意味是拥有一个与项目紧密联合的社区，所以我认为 Kubernetes 一开始就锁定了胜利。

**Saron Yitbarek**：

让我们回到这场容器竞赛。在这里不仅仅有你提到的 Kubernetes，还有 Docker 的 Swarm Apache 的 Mesos……

**00:17:00 - Kelsey Hightower**：

所以，我想当人们谈论容器竞赛时，我不确定竞争是否发生在我们和 Mesos、Docker 使用者之间。我认为，真正的竞争发生在争取目前没有使用容器的潜在用户身上。是的，你还在使用原生 Bash 脚本，你迷茫着，不知道自己该归属何方。这些尚未选择编排工具和平台之人的市场，比起已选择了 Mesos 或 Swarm 的一方，要多得多。

**00:17:30**：

这就是容器战争存在并将继续的原因，真正的关键点在于如何帮助最终用户。Mesos、Kubernetes 或 Docker Swarm 是否会成为寻求更好解决方案的人们的首选？这一切都还悬而未决（SIG 译注：现在已经尘埃落定，Kubernetes 取得了全胜），但我会告诉你，像我一样，在这个领域工作的工程师来说，如果你不考虑市场营销和供应商，我会使用这个短语“不同的公司，相同的团队。”

**00:18:00**：

我们为彼此开发了许多工具，最终以某种方式出现在其他产品中。没错吧？好主意就是好主意。没有理由说，“哦，这是 Mesos 的人正在做的事情，那就忽略吧”，这有点愚蠢。所以从技术和社区的角度来看，我们的想法需要交流。同时也需要竞争来迫使我们来进行独立思考，然后最棒的点子就会浮出水面，接着我们再选择采用哪种方式来正确满足用户的需要。

**00:18:30**：

因此，就这场竞赛而言，仍处于初期阶段，而且这个事情本身不会带来利润。明白我的意思吗？我们不是直接向任何人销售这个产品，这更像是一个平台之间的游戏，对所有人开放，然后用户会选择满足他们需求的那个，这就是我认为 Kubernetes 在社区方面做得很好的地方，真正开放，真正能解决实际问题。

**Saron Yitbarek**：

听起来很棒啊。我喜欢这个想法：在同一个球队踢球，而不要管球队是在什么地方。你对于容器和编排工具，还有 Kbubernetes 的未来有什么展望吗？

**00:19:00 - Kelsey Hightower**：

是的，我在 KubeCon 上做了一次主题演讲。所有这些工具都很棒，它们就像是乐高积木，我们有 Kubernetes，你可以选择一种产品用于安全，选择另一种产品用于网络，但最终，作为开发人员而言，你所想要的只是检查你的代码，并希望你的代码可以某种方式以呈现在客户面前。而我认为 Kubernetes 还有容器都会作为底层技术或者成为类似 Serverless 这种技术的基础平台。

**00:19:30**：

这是我的代码片段，已经打包完毕了。所有的平台都会把你的代码片段，用容器包装起来，然后帮你运行，但是不需要向你公开所有这些过程。因此，在未来，我认为随着 Kubernetes 变得普及，容器的应用场景将从大大小小的供应商或个人，提升到云供应商，因为这些事情往往需要专业知识和软件投资。容器将会遍布各个角落，但同时也就此隐藏起来。它会随着应用场景的扩展而渐渐隐形。

**00:20:00 - Saron Yitbarek**：

Kelsey Hightower 是 Google 的员工开发人员。在 2017 年秋天，Docker 宣布支持 Kubernetes。他们并不是说就放弃 Swarm 了，只是决定与容器编排竞赛的明显赢家和解。

**00:20:30**：

并不只有它一方，Azure 和 AWS 都宣布了对 Kubernetes 的支持。与此同时，像 OpenShift 这样的 Kubernetes 发行版仍在不断发展。我们得到的是一个可以扩展，支持新的用例的 Kubernetes 内核，这些用例包括微服务或持续集成项目。

**00:21:00 - Clayton Coleman**：

这个生态系统在类似 Linux 的模式下能得到最好的发展，而且我认为我们正朝着这条道路迈进。因此，就像所有优秀的开源项目一样，相对于单打独斗，让每个人都能够参与进来构建更好的东西，那就算是成功了。

**00:21:30 - Saron Yitbarek**:

所有这一切都在快速发生着，毕竟，这是一场竞赛，而这正是我们期望能从开源中获得的东西。在我们才刚刚理解什么是容器时，第一轮几乎就结束了，

这是来自 Red Hat 的 Scott McCarty。

**Scott McCarty**：

回想一下两年前，容器镜像格式还是一个巨大的战场，然后回到六个月至一年前，容器编排就成为了下一个巨大的战场。紧接着，如果你看看 2017 年的 KubeCon 及前几周，几乎每个主要供应商都宣布支持 Kubernetes。因此，很明显 Kubernetes 在这一方面上获胜了。

**00:22:00 - Saron Yitbarek**：

这章关于容器战争的故事即将结束。就像容器技术的开始一样迅速。

**Scott McCarty**：

因此，Kubernetes 已经成为标准，其美妙之处是，现在的应用定义已经变得标准化了。因此，任何人都可以在这些 YAML 文件中使用 Kubernetes 对象并定义应用，这就是我们共同所追求的事情。事实上，对于容器技术足够处理处理大型扩展系统这件事，我已经期待了 20 年。

**00:22:30 - Saron Yitbarek**：

Kubernetes 的成功看起来板上钉钉，但即使竞赛尘埃落定，我们仍然面临更大的一些问题。容器是否会成为未来几年的默认选择？是否会促使更多的云原生开发？这些转变将促生哪些工具和服务上？以下是我们目前所知道的。

**00:23:00**：

社区将通过 CNCF 继续改进 Kubernetes，并作为它最重要的使命之一，我们将建立一套全新的容器技术。

容器已经催生了大量新的基础设施，伴随而来的是全新的服务的需求。举个例子让你感受下容器的整合程度和发展速度，仅 Netflix 每周就运行超过一百万个容器。毫不夸张得说，容器是未来的构件。

**00:23:30**：

这一整季的栏目中，我们一直在追踪开源运动的演变。首先看到 Linux 如何主导战场，以及开源理念是如何改变商业、工作流程和每日使用的工具。容器真的是开源运动中最重要的里程碑之一。它们具有很好的迁移性、轻量、易于扩展。

**00:24:00**：

容器技术很好地体现了开源的优势，开源项目自然而然也推动了容器技术的发展。这是一个全新的世界，我们不用再担心从不同计算机或者云间的迁移产生的隔阂。

**00:24:30**：

容器的标准化比任何人预测的都要快。接下来的一集，我们将转向另一场悬而未决的战争。这场云间战争史无前例地催生者行业重量级人物。微软、阿里巴巴、谷歌和亚马逊四家云供应商的摩擦正在升温，随之而来的将是一场暴风骤雨。我们将会追随它们激发的闪电，和广受欢迎的几位代码英雄一起探讨云间战争。

**00:25:00**：

《代码英雄》是红帽公司推出的原创播客栏目。想要了解更多关于本期节目和以往节目的信息，请访问 [redhat.com/commandlineheroes](http://redhat.com/commandlineheroes) 。在那里，你还可以注册我们的新闻资讯。想免费获得新剧集的自动推送，请务必订阅该节目。

只要在苹果播客、Spotify、Google Play、CastBox 中搜索 “Command Line Heroes”，或者通过其他方式收听，并点击订阅，这样你就能在第一时间知道最新剧集。我是 Saron Yitbarek。感谢您的收听，编程不止。

>
> **什么是 LCTT SIG 和 LCTT LCRH SIG**
>
>
> LCTT SIG 是 LCTT <ruby> 特别兴趣小组 <rt>  Special Interest Group </rt></ruby>，LCTT SIG 是针对特定领域、特定内容的翻译小组，翻译组成员将遵循 LCTT 流程和规范，参与翻译，并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽（Red Hat）发起的 SIG，当前专注任务是《代码英雄》系列播客的脚本汉化，已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。
>
>
> 欢迎[加入 LCRH SIG](/article-12436-1.html) 一同参与贡献，并领取红帽（Red Hat）和我们联合颁发的专属贡献者证书。
>
>
>

---

via: <https://www.redhat.com/en/command-line-heroes/season-1/the-containers-derby>

作者：[Red Hat](https://www.redhat.com/en/command-line-heroes) 选题：[bestony](https://github.com/bestony) 译者：[lujun9972](https://github.com/lujun9972) 校对：[acyanbird](https://github.com/acyanbird)

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


凯蒂阿姨的自定义 Mac 终端

Summary: 开源意味着我可以在任何终端上找到熟悉的 Linux。

开源意味着我可以在任何终端上找到熟悉的 Linux。

>
> 开源意味着我可以在任何终端上找到熟悉的 Linux。
>
>
>

![](/data/attachment/album/202008/21/002323xqslvqnnmdz487dq.jpg)

十年前，我开始了我的第一份工作，它要求我使用 Linux 作为我的笔记本电脑的操作系统。如果我愿意的话，我可以使用各种 Linux 发行版，包括 Gentoo，但由于我过去曾短暂地使用过Ubuntu，所以我选择了 Ubuntu Lucid Lynx 10.04。

我的 [Konsole](https://konsole.kde.org/) 终端使用的是 [Zenburn](https://github.com/brson/zenburn-konsole) 主题，有一个类似于这样的 Bash 提示符：

```
machinename ~/path/to/folder $

```

现在，我使用 Mac，具体来说是 macOS Catalina，我使用 [iTerm2](https://www.iterm2.com/) 与 [Zenburn 主题](https://gist.github.com/fooforge/3373215)，zsh 提示符是这样的：

```
machinename ~/path/to/folder
$

```

我想，十年来几乎相同的提示符，我已经赢得了*老古板*的称号，不过这只是标志着，我的喜好和习惯与现在耍酷的孩子们不一样而已。

仿佛是为了证明我的古板观点，我想改变我的终端和我的旧终端一样。在 Mac 上获得一个看起来和感觉像 Lucid Lynx 的设置并不简单，而且我很花了一些时间。

我最近最大的改变是从 Bash 转移到 zsh，并迁移了我的 [Bash 魔改](https://opensource.com/article/20/1/bash-scripts-aliases)。但这只是其中一个重大的转变。我学到了许多新式的经验，现在我把这些经验赠送给你，亲爱的读者。

### Coreutils 对选项的顺序更宽容

从 Ubuntu 转移到 macOS 并没有太大的转变，直到我开始觉得我失去了 Unix 范。我试着运行一些基本的操作，比如删除文件夹，但却被告知我错误地调用了 `rm`。

事实证明，GNU 风格的实用程序可能看起来 BSD 风格的差不多，但最大的可用性差异之一是*参数顺序*。未命名参数的排列顺序并不一致。例如：`rm`。

下面是我们熟悉的 GNU 风格的删除目录的命令：

```
$ rm path/to/folder -rf

```

这与同一命令的 BSD 风格版本形成鲜明对比：

```
$ rm path/to/folder -rf
rm: path/to/folder: is a directory
rm: -rf: No such file or directory

```

我通过 [Homebrew](https://opensource.com/article/20/6/homebrew-mac) 安装 [Coreutils](https://formulae.brew.sh/formula/coreutils) 解决了这个问题。这将 GNU 实用程序引入到了 macOS，并使我不必为那些已经深深扎根于我的肌肉记忆中的命令记住选项顺序，从而对选项顺序更加宽容。

### 强大的 iTerm2

我不知道有哪个操作系统的资深用户会对默认终端满意。在 macOS 这块土地上，我选择了 [iTerm2](https://www.iterm2.com/)，它允许我比基本的操作系统终端应用更灵活。我最喜欢的 iTerm 强大功能之一是能够使用 `Command+D` 和 `Command+Shift+D` 来垂直和水平分割窗格。还有很多技巧需要学习，但仅是简单的分割窗格就值得用 iTerm2 换掉默认终端。

### 上下文感知的插件

即使是一个古板的用户也会自定义终端提示，其中一个原因是为了获得一些情境感知。我喜欢终端给我提供上下文，并回答所有想到的问题。不仅仅是我在哪个文件夹里，而是：我在什么机器上？这是个 Git 仓库吗？如果是，我在哪个分支？我是在 Python 虚拟环境中吗？

这些问题的答案最终都归结为一类称之为“上下文感知插件”的终端扩展。

对于当前的 Git 分支，我使用了这个 [parse\_git\_branch()](https://gist.github.com/kevinchappell/09ca3805a9531b818579) 方法（如果你使用的是 [Oh My Zsh](https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git)，也有类似的插件）。对于 Python 来说，virtualenv 会自动给提示符加前缀。Oh My Zsh 有如此多的[插件](https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins)，你一定能找到改善你生活的东西。

至于我的本地机？我就直接用 `PS1` 格式，因为我喜欢这样的基本信息，而且 macOS 并没有*真正*让你给机器起个名字。

### 多行提示符也不错

观察力强的读者可能会注意到，十年来我的提示符有一个变化，就是现在它是两行。这是最近的一个变化，我慢慢学会了喜欢，因为我前面提到的所有这些插件都让我的提示符变得很长很长。你在文件系统中导航不能太深，要不你试图做任何基本的事情都会输入换行。随之而来的是偶尔的重绘问题和可读性问题。

我收到的关于解决这个问题的建议大多围绕着“哦，你在用 zsh？用 [Powerlevel10k](https://github.com/romkatv/powerlevel10k) 吧！”这对于像我这样不固步自封的人来说是不错的，但我能够从这些主题中学习到一些，并从中获取一点技巧。

我所做的是在我的提示符中的最后一个 `$` 前加一个 `$'\n'`，这样我的上下文信息 —— 当前机器、当前文件夹、当前 GitHub 分支、当前 virtualenv 等等 —— 都可以在一行中出现，然后我的命令就可以顺利输入了。

我发现唯一的问题是学会在哪里*看*。我习惯于让我的眼睛从行的中心开始，因为以前我的提示符就是从那里开始的。我正在慢慢学会向左看提示符，但这是一个缓慢的过程。我有十几年的眼睛习惯要撤销。

### 使用适合你的方法

如果你喜欢某种风格或工具，那么你的这种偏好是绝对有效的。你可以尝试其他的东西，但千万不要认为你必须使用最新和最伟大的，只是为了像很酷的孩子一样。你的风格和喜好可以随着时间的推移而改变，但千万不要被迫做出对你来说不舒服的改变。

*等下一次，凯蒂阿姨再给你吐槽一下 IDE。*

---

via: <https://opensource.com/article/20/7/mac-terminal>

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


#新闻拍一拍# 大学生用 GPT-3 生成伪文章成功骗过众人

Summary: • G Suite 服务宕机数小时 • Grafana 的开发商 Grafana Labs 宣布已完成 5000 万美元的 B 轮融资

![](/data/attachment/album/202008/21/005134nctawqncaclwi2ni.jpg)

#### 大学生用 GPT-3 生成伪文章成功骗过众人

加州大学伯克利分校的学生以 Adolos 为笔名开通博客，在其中发布由 GPT-3 模型生成的文章，第一篇就被顶至 Hacker News 头条，还被 medium 等各大平台转载，该博客迅速获得了 60 位关注者及大约 2.6 万访问量。但注意到文章是由人工智能生成，且提出质疑的人屈指可数。这篇题为《觉得生产力低下？也许你应该停止过度思考》的文章，仅指定了标题和简介，其他内容都交由 GPT-3 完成，却引来一众网友共情并应声附和。

来源：[开源中国](https://www.oschina.net/news/118021/gpt-3-fake-blog)

>
> 拍一拍：或许，等 GPT-3 的使用门槛进一步降低后，很多人的工作都不在需要。
>
>
>

#### G Suite 服务宕机数小时

根据 G Suite Status Dashboard 上的信息，多个 Google 服务宕机数小时，Google 尚未给出解释，只是表示正在调查问题。受到影响的服务包括 Gmail、Google Drive、Google Docs、Google Slides、Google Sites、Google Groups、Google Chat 和 Google Meet。

来源：[solidot](https://www.solidot.org/story?sid=65302)

>
> 拍一拍：云服务垄断了互联网服务的同时，无论是哪家云服务商，均出现过大范围的、长时间的服务故障，或许这就是集中化、规模化带来副作用。
>
>
>

#### Grafana 的开发商 Grafana Labs 宣布已完成 5000 万美元的 B 轮融资

2019 年 10 月的首轮融资，当时该公司筹得 2,400 万美元。Grafana 是一款开源的可视化系统指标监控与分析平台，支持与包括 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB 等在内的众多数据源集成。

来源：[开源中国](https://www.oschina.net/news/118041/grafana-labs-raises-50m-in-series-b-funding)

>
> 拍一拍：真正有影响力的开源软件，一样能赢得资本市场的青睐。
>
>
>


Photoflare：满足简单编辑需求的开源图像编辑器

简单易用，启动速度非常快！并且在ubuntu官方源里就有，只是版本低一些。ubuntu20.04里是1.6.2，ppa里是1.6.5

>
> Photoflare 是一款可用于 Linux 和 Windows 上的图像编辑器。它有一个免费而开源的社区版本。
>
>
>

在 Linux 上编辑图像时，GIMP 显然是首选。但是，如果你不需要高级编辑功能，GIMP 可能会让人不知所措。这是像 Photoflare 这样的应用立足的地方。

### PhotoFlare：一个简单的图像编辑器

![](/data/attachment/album/202008/21/233828npoopm43suckztpt.jpg)

Photoflare 是一个在简单易用的界面里提供了基本的图像编辑功能的编辑器。

它受流行的 Windows 应用 [PhotoFiltre](http://photofiltre.free.fr/frames_en.htm) 的启发。这个程序不是一个克隆品，它是用 C++ 从头开始编写的，并使用 Qt 框架作为界面。

它的功能包括裁剪、翻转/旋转、调整图像大小。你还可以使用诸如油漆刷、油漆桶、喷雾罐、模糊工具和橡皮擦之类的工具。魔术棒工具可让你选择图像的特定区域。

你还可以在图像上添加线条和文本。你还可以更改图像的色调。

你也可以像其他[画图应用](https://itsfoss.com/open-source-paint-apps/)一样从头开始创建图像。

批处理编辑选项可让你同时为多张图片调整大小、转换文件格式和添加滤镜。

![Batch Editing Feature in Photoflare | Photo Credit: Photoflare website](/data/attachment/album/202008/21/233806a8u8urp9ujj6y9zp.png)

### Photoflare 的功能

为了方便参考，我将列出 Photoflare 的主要功能：

* 创建/绘制图像
* 裁剪图像
* 旋转图像
* 调整图像大小
* 使用画笔、油漆桶、喷涂、模糊工具和图像等工具编辑图像
* 在图像上添加线条和文字
* 更改图像的色调
* 添加老照片滤镜
* 批量调整大小、滤镜等

### 在 Linux 上安装 Photflare

![](/data/attachment/album/202008/21/233811cjuu7pdbye2uoqaq.png)

在 Photoflare 的网站上，你可以找到定价以及每月订阅的选项。但是，该应用是开源的，它的[源码可在 GitHub 上找到](https://github.com/PhotoFlare/photoflare)。

应用也是“免费”使用的。[定价/订购部分](https://photoflare.io/pricing/)用于该项目的财务支持。你可以免费下载它，如果你喜欢该应用并且会继续使用，请考虑给它捐赠。

Photoflare 有[官方 PPA](https://launchpad.net/~photoflare/+archive/ubuntu/photoflare-stable)，适用于 Ubuntu 和基于 Ubuntu 的发行版。此 PPA 可用于 Ubuntu 18.04 和 20.04 版本。

打开终端，逐一输入下面的命令安装 Photoflare：

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

```

要从基于 Ubuntu 的发行版中删除 Photoflare，请使用以下命令：

```
sudo apt remove photoflare

```

最好也删除 PPA：

```
sudo add-apt-repository -r ppa:photoflare/photoflare-stable

```

Arch Linux 和 Manjaro 用户可以[从 AUR 获取](https://aur.archlinux.org/packages/photoflare-git/)。

Fedora 没有现成的软件包，因此你需要获取源码：

* [Photoflare 源代码](https://github.com/PhotoFlare/photoflare)

### Photoflare 的经验

我发现它与 [Pinta](https://itsfoss.com/pinta-new-release/) 有点相似，但功能更多。它是用于基本图像编辑的简单工具。批处理功能是加分项。

我注意到图像在打开编辑时看起来不够清晰。我打开一张截图进行编辑，字体看起来很模糊。但是，保存图像并在[图像查看器](https://itsfoss.com/image-viewers-linux/)中打开后，没有显示此问题。

总之，如果你不需要专业级的图像编辑，它是一个不错的工具。

如果你曾经使用过或会去尝试它，请分享你的 Photoflare 使用经验。

---

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

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

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


合并和排序 Linux 上的文件

Summary: 在本文中，我们将查看一些用于排序和合并文件内容的命令，并重点介绍结果有何不同。

在本文中，我们将查看一些用于排序和合并文件内容的命令，并重点介绍结果有何不同。

![](/data/attachment/album/202008/22/102250i3943is48r34w4nz.jpg)

在 Linux 上合并和排序文本的方法有很多种，但如何去处理它取决于你试图做什么：你是只想将多个文件的内容放入一个文件中，还是以某种方式组织它，让它更易于使用。在本文中，我们将查看一些用于排序和合并文件内容的命令，并重点介绍结果有何不同。

### 使用 cat

如果你只想将一组文件放到单个文件中，那么 `cat` 命令是一个容易的选择。你所要做的就是输入 `cat`，然后按你希望它们在合并文件中的顺序在命令行中列出这些文件。将命令的输出重定向到要创建的文件。如果指定名称的文件已经存在，那么文件将被覆盖。例如：

```
$ cat firstfile secondfile thirdfile > newfile

```

如果要将一系列文件的内容添加到现有文件中，而不是覆盖它，只需将 `>` 变成 `>>`。

```
$ cat firstfile secondfile thirdfile >> updated_file

```

如果你要合并的文件遵循一些方便的命名约定，那么任务可能更简单。如果可以使用正则表达式指定所有文件名，那就不必列出所有文件。例如，如果文件全部以 `file` 结束，如上所示，你可以进行如下操作：

```
$ cat *file > allfiles

```

请注意，上面的命令将按字母数字顺序添加文件内容。在 Linux 上，一个名为 `filea` 的文件将排在名为 `fileA` 的文件的前面，但会在 `file7` 的后面。毕竟，当我们处理字母数字序列时，我们不仅需要考虑 `ABCDE`，还需要考虑 `0123456789aAbBcCdDeE`。你可以使用 `ls *file` 这样的命令来查看合并文件之前文件的顺序。

注意：首先确保你的命令包含合并文件中所需的所有文件，而不是其他文件，尤其是你使用 `*` 等通配符时。不要忘记，用于合并的文件仍将单独存在，在确认合并后，你可能想要删除这些文件。

### 按时间期限合并文件

如果要基于每个文件的时间期限而不是文件名来合并文件，请使用以下命令：

```
$ for file in `ls -tr myfile.*`; do  cat $file >> BigFile.$$; done

```

使用 `-tr` 选项（`t` = 时间，`r` = 反向）将产生按照最早的在最前排列的文件列表。例如，如果你要保留某些活动的日志，并且希望按活动执行的顺序添加内容，则这非常有用。

上面命令中的 `$$` 表示运行命令时的进程 ID。不是很必要使用此功能，但它几乎不可能会无意添加到现有的文件，而不是创建新文件。如果使用 `$$`，那么生成的文件可能如下所示：

```
$ ls -l BigFile.*
-rw-rw-r-- 1 justme justme   931725 Aug  6 12:36 BigFile.582914

```

### 合并和排序文件

Linux 提供了一些有趣的方式来对合并之前或之后的文件内容进行排序。

#### 按字母对内容进行排序

如果要对合并的文件内容进行排序，那么可以使用以下命令对整体内容进行排序：

```
$ cat myfile.1 myfile.2 myfile.3 | sort > newfile

```

如果要按文件对内容进行分组，请使用以下命令对每个文件进行排序，然后再将它添加到新文件中：

```
$ for file in `ls myfile.?`; do sort $file >> newfile; done

```

#### 对文件进行数字排序

要对文件内容进行数字排序，请在 `sort` 中使用 `-n` 选项。仅当文件中的行以数字开头时，此选项才有用。请记住，按照默认顺序，`02` 将小于 `1`。当你要确保行以数字排序时，请使用 `-n` 选项。

```
$ cat myfile.1 myfile.2 myfile.3 | sort -n > xyz

```

如果文件中的行以 `2020-11-03` 或 `2020/11/03`（年月日格式）这样的日期格式开头，`-n` 选项还能让你按日期对内容进行排序。其他格式的日期排序将非常棘手，并且将需要更复杂的命令。

### 使用 paste

`paste` 命令允许你逐行连接文件内容。使用此命令时，合并文件的第一行将包含要合并的每个文件的第一行。以下是示例，其中我使用了大写字母以便于查看行的来源：

```
$ cat file.a
A one
A two
A three

$ paste file.a file.b file.c
A one   B one   C one
A two   B two   C two
A three B three C thee
        B four  C four
                C five

```

将输出重定向到另一个文件来保存它：

```
$ paste file.a file.b file.c > merged_content

```

或者，你可以将每个文件的内容在同一行中合并，然后将文件粘贴在一起。这需要使用 `-s`（序列）选项。注意这次的输出如何显示每个文件的内容：

```
$ paste -s file.a file.b file.c
A one   A two   A three
B one   B two   B three B four
C one   C two   C thee  C four  C five

```

### 使用 join

合并文件的另一个命令是 `join`。`join` 命令让你能基于一个共同字段合并多个文件的内容。例如，你可能有一个包含一组同事的电话的文件，其中，而另一个包含了同事的电子邮件地址，并且两者均按个人姓名列出。你可以使用 `join` 创建一个包含电话和电子邮件地址的文件。

一个重要的限制是文件的行必须是相同的顺序，并在每个文件中包括用于连接的字段。

这是一个示例命令：

```
$ join phone_numbers email_addresses
Sandra 555-456-1234 bugfarm@gmail.com
Pedro 555-540-5405
John 555-333-1234 john_doe@gmail.com
Nemo 555-123-4567 cutie@fish.com

```

在本例中，即使缺少附加信息，第一个字段（名字）也必须存在于每个文件中，否则命令会因错误而失败。对内容进行排序有帮助，而且可能更容易管理，但只要顺序一致，就不需要这么做。

### 总结

在 Linux 上，你有很多可以合并和排序存储在单独文件中的数据的方式。这些方法可以使原本繁琐的任务变得异常简单。

---

via: <https://www.networkworld.com/article/3570508/merging-and-sorting-files-on-linux.html>

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

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


快来测试 Python 开发工具 pipenv 的新版本

Summary: pipenv 是一个可帮助 Python 开发人员维护具有特定一组依赖关系的隔离虚拟环境，以实现可重新复制的开发和部署环境的工具。

![](/data/attachment/album/202008/22/104612gfgllhf85mahvm3j.jpg)

[pipenv](https://github.com/pypa/pipenv) 是一个可帮助 Python 开发人员维护具有特定一组依赖关系的隔离虚拟环境，以实现可重新复制的开发和部署环境的工具。它类似于其他编程语言中的工具如 bundler、composer、npm、cargo、yarn 等。

最近发布了新版本的 pipenv 2020.6.2。现在可以在 Fedora 33 和 Rawhide 中使用它。对于较旧的 Fedora，维护人员决定打包到 [COPR](https://copr.fedorainfracloud.org/coprs/g/python/pipenv/) 中来先进行测试。所以在他们把它推送到稳定的Fedora版本之前，来试试吧。新版本没有带来任何新颖的功能，但是经过两年的开发，它解决了许多问题，并且在底层做了很多不同的事情。之前可以正常工作的应该可以继续工作，但是可能会略有不同。

### 如何获取

如果你已经在运行 Fedora 33 或 Rawhide，请运行 `$ sudo dnf upgrade pipenv` 或者 `$ sudo dnf install pipenv`，你将获得新版本。

在 Fedora 31 或 Fedora 32 上，你需要使用 [copr 仓库](https://copr.fedorainfracloud.org/coprs/g/python/pipenv/)，直到经过测试的包出现在官方仓库中为止。要启用仓库，请运行：

```
$ sudo dnf copr enable @python/pipenv

```

然后将 `pipenv` 升级到新版本，运行：

```
$ sudo dnf upgrade pipenv

```

或者，如果尚未安装，请通过以下方式安装：

```
$ sudo dnf install pipenv

```

如果你需要回滚到官方维护的版本，可以运行：

```
$ sudo dnf copr disable @python/pipenv
$ sudo dnf distro-sync pipenv

```

*COPR 不受 Fedora 基础架构的官方支持。使用软件包需要你自担风险。*

### 如何使用

如果你有用旧版本 `pipenv` 管理的项目，你应该可以毫无问题地使用新版本。如果有问题请让我们知道。

如果你还不熟悉 `pipenv` 或想开始一个新项目，请参考以下快速指南：

创建一个工作目录：

```
$ mkdir new-project && cd new-project

```

使用 Python 3 初始化 `pipenv`：

```
$ pipenv --three

```

安装所需的软件包，例如：

```
$ pipenv install six

```

生成 `Pipfile.lock` 文件：

```
$ pipenv lock

```

现在，你可以将创建的 `Pipfile` 和 `Pipfile.lock` 文件提交到版本控制系统（例如 git）中，其他人可以在克隆的仓库中使用此命令来获得相同的环境：

```
$ pipenv install

```

有关更多示例，请参见 [pipenv 的文档](https://pipenv.pypa.io/en/latest/install/)。

### 如何报告问题

如果你使用新版本的 `pipenv` 遇到任何问题，请[在 Fedora 的 Bugzilla中 报告问题](https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&component=pipenv)。Fedora 官方仓库和 copr 仓库中 `pipenv` 软件包的维护者是相同的人。请在报告中指出是新版本。

---

via: <https://fedoramagazine.org/come-test-a-new-release-of-pipenv-the-python-development-tool/>

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


#新闻拍一拍# 科学家创造网速新巅峰：每秒 178 Tb

Summary: • 知名跑分 App 安兔兔被谷歌删除，随后山寨应用满天飞 • 新 P2P 僵尸网络感染了 500 台属于知名美国和欧洲大学的服务器

![](/data/attachment/album/202008/22/112939cruoxn2uj8vn8ul0.jpg)

#### 科学家创造网速新巅峰：每秒 178 Tb

英国和日本的工程师合作找到了新的方法，在光信号被传送到光纤之前对其进行调制，从而实现了比平时更宽的带宽。甚至远远超过美国宇航局的 ESnet（400 Gb/s）。也就是说可以在 1 秒时间内下载整个 Netflix 库。

来源：[cnBeta.COM](https://www.cnbeta.com/articles/science/1018655.htm "https://www.cnbeta.com/articles/science/1018655.htm")

>
> 拍一拍：真是不敢想象的速度。从历史可知，技术和生活的进步，取决于基础设施的改进。
>
>
>

#### 知名跑分 App 安兔兔被谷歌删除，随后山寨应用满天飞

由于违反了谷歌的政策，国内非常流行的跑分应用安兔兔已经被谷歌下架，3 月份就被删除了。如今被封杀，这也导致了一个意外的结果，那就是山寨安兔兔应用满天飞。毫无疑问，这些山寨 APP 不是来做慈善的。

来源：[快科技](https://www.cnbeta.com/articles/tech/1018819.htm "https://www.cnbeta.com/articles/tech/1018819.htm")

>
> 拍一拍：管杀不管埋。
>
>
>

#### 新 P2P 僵尸网络感染了 500 台属于知名美国和欧洲大学的服务器

安全公司 Guardicore Labs 的研究人员披露了一个没有中心服务器利用 P2P 机制进行控制的僵尸网络 FritzFrog。这种控制机制意味着僵尸网络更难被关闭。FritzFrog 只在内存中运行不留下硬盘文件的恶意负荷；自 1 月以来发布了 20 多个版本；只感染 SSH 服务器。

来源：[solidot](https://www.solidot.org/story?sid=65307 "https://www.solidot.org/story?sid=65307")

>
> 拍一拍：对这种 P2P 机制的攻击网络确实不好阻断。有 SSH 服务器要注意了。
>
>
>


5 个开源的 Java IDE 工具

一直觉得VS Code不算是IDE，只能算文本编辑器。

>
> Java IDE 工具提供了大量的方法来根据你的独特需求和偏好创建一个编程环境。
>
>
>

![](/data/attachment/album/202008/22/235441wnnorcvo4olasv8o.jpg)

通过简化程序员的工作，[Java](https://opensource.com/resources/java) 框架可以使他们的生活更加轻松。这些框架是为了在各种服务器环境上运行各种应用程序而设计开发的；这包括解析注解、扫描描述符、加载配置以及在 Java 虚拟机（JVM）上启动实际的服务等方面的动态行为。控制这么多的任务需要更多的代码，这就很难降低内存占用、加快新应用的启动时间。无论如何，据 [TIOBE 指数](https://www.tiobe.com/tiobe-index/)，在当今使用的编程语言中 Java 一直排名前三，拥有着 700 万到 1000 万开发者的社区。

有这么多用 Java 编写的代码，这意味着有一些很好的集成开发环境（IDE）可供选择，可以为开发人员提供有效地编写、整理、测试和运行 Java 应用程序所需的所有工具。

下面，我将按字母顺序介绍五个我最喜欢的用于编写 Java 的开源 IDE 工具，以及如何配置它们的基本功能。

### BlueJ

[BlueJ](https://www.bluej.org/about.html) 为 Java 初学者提供了一个集成的教育性 Java 开发环境。它也可以使用 Java 开发工具包（JDK）开发小型软件。各种版本和操作系统的安装方式都可以在[这里](https://www.bluej.org/versions.html)找到。

在笔记本电脑上安装 BlueJ IDE 后，启动一个新项目，点击<ruby> 项目 <rt>  Project </rt></ruby>菜单中的<ruby> 新项目 <rt>  New Project </rt></ruby>，然后从创建一个<ruby> 新类 <rt>  New Class </rt></ruby>开始编写 Java 代码。生成的示例方法和骨架代码如下所示：

![BlueJ IDE screenshot](/data/attachment/album/202008/22/235549gxbh4zo0szvtzxsx.png "BlueJ IDE screenshot")

BlueJ 不仅为学校的 Java 编程课的教学提供了一个交互式的图形用户界面（GUI），而且可以让开发人员在不编译源代码的情况下调用函数（即对象、方法、参数）。

### Eclipse

[Eclipse](https://www.eclipse.org/ide/) 是桌面计算机上最著名的 Java IDE 之一，它支持 C/C++、JavaScript 和 PHP 等多种编程语言。它还允许开发者从 Eclipse 市场中的添加无穷无尽的扩展，以获得更多的开发便利。[Eclipse 基金会](https://www.eclipse.org/)提供了一个名为 [Eclipse Che](https://opensource.com/article/19/10/cloud-ide-che) 的 Web IDE，供 DevOps 团队在多个云平台上用托管的工作空间创建出一个敏捷软件开发环境。

[可以在这里下载](https://www.eclipse.org/downloads/)；然后你可以创建一个新的项目或从本地目录导入一个现有的项目。在[本文](https://opensource.com/article/19/10/java-basics)中找到更多 Java 开发技巧。

![Eclipse IDE screenshot](/data/attachment/album/202008/22/235606vcjq3h4n0qjilqqw.png "Eclipse IDE screenshot")

### IntelliJ IDEA

[IntelliJ IDEA CE（社区版）](https://www.jetbrains.com/idea/)是 IntelliJ IDEA 的开源版本，为 Java、Groovy、Kotlin、Rust、Scala 等多种编程语言提供了 IDE。IntelliJ IDEA CE 在有经验的开发人员中也非常受欢迎，可以用它来对现有源码进行重构、代码检查、使用 JUnit 或 TestNG 构建测试用例，以及使用 Maven 或 Ant 构建代码。可在[这里](https://www.jetbrains.org/display/IJOS/Download)下载它。

IntelliJ IDEA CE 带有一些独特的功能；我特别喜欢它的 API 测试器。例如，如果你用 Java 框架实现了一个 REST API，IntelliJ IDEA CE 允许你通过 Swing GUI 设计器来测试 API 的功能。

![IntelliJ IDEA screenshot](/data/attachment/album/202008/22/235634skhtta9tnnhxkrok.png "IntelliJ IDEA screenshot")

IntelliJ IDEA CE 是开源的，但其背后的公司也提供了一个商业的终极版。可以在[这里](https://www.jetbrains.com/idea/features/editions_comparison_matrix.html)找到社区版和终极版之间的更多差异。

### Netbeans IDE

[NetBeans IDE](https://netbeans.org/) 是一个 Java 的集成开发环境，它允许开发人员利用 HTML5、JavaScript 和 CSS 等支持的 Web 技术为独立、移动和网络架构制作模块化应用程序。NetBeans IDE 允许开发人员就如何高效管理项目、工具和数据设置多个视图，并帮助他们在新开发人员加入项目时使用 Git 集成进行软件协作开发。

[这里](https://netbeans.org/downloads/8.2/rc/)下载的二进制文件支持 Windows、macOS、Linux 等多个平台。在本地环境中安装了 IDE 工具后，新建项目向导可以帮助你创建一个新项目。例如，向导会生成骨架代码（有部分需要填写，如 `// TODO 代码应用逻辑在此`），然后你可以添加自己的应用代码。

### VSCodium

[VSCodium](https://vscodium.com/) 是一个轻量级、自由的源代码编辑器，允许开发者在 Windows、macOS、Linux 等各种操作系统平台上安装，是基于 [Visual Studio Code](https://opensource.com/article/20/6/open-source-alternatives-vs-code) 的开源替代品。其也是为支持包括 Java、C++、C#、PHP、Go、Python、.NET 在内的多种编程语言的丰富生态系统而设计开发的。Visual Studio Code 默认提供了调试、智能代码完成、语法高亮和代码重构功能，以提高开发的代码质量。

在其[资源库](https://github.com/VSCodium/vscodium#downloadinstall)中有很多下载项。当你运行 Visual Studio Code 时，你可以通过点击左侧活动栏中的“扩展”图标或按下 `Ctrl+Shift+X` 键来添加新的功能和主题。例如，当你在搜索框中输入 “quarkus” 时，就会出现 Visual Studio Code 的 Quarkus 工具，该扩展允许你[在 VS Code 中使用 Quarkus 编写 Java](https://opensource.com/article/20/4/java-quarkus-vs-code)：

![VSCodium IDE screenshot](/data/attachment/album/202008/22/235658ea227wtkrngif2cr.png "VSCodium IDE screenshot")

### 总结

Java 作为最广泛使用的编程语言和环境之一，这五种只是 Java 开发者可以使用的各种开源 IDE 工具的一小部分。可能很难知道哪一个是正确的选择。和以往一样，这取决于你的具体需求和目标 —— 你想实现什么样的工作负载（Web、移动应用、消息传递、数据交易），以及你将使用 IDE 扩展功能部署什么样的运行时（本地、云、Kubernetes、无服务器）。虽然丰富的选择可能会让人不知所措，但这也意味着你可能可以找到一个适合你的特殊情况和偏好的选择。

你有喜欢的开源 Java IDE 吗？请在评论中分享吧。

---

via: <https://opensource.com/article/20/7/ide-java>

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


FreeFileSync：开源的文件同步工具

>
> FreeFileSync 是一个开源的文件夹比较和同步工具，你可以使用它将数据备份到外部磁盘、云服务（如 Google Drive）或任何其他存储路径。
>
>
>

### FreeFileSync：一个免费且开源的同步工具

![](/data/attachment/album/202008/23/060523ubx28vyi8qf8sv9d.jpg)

[FreeFileSync](https://freefilesync.org/) 是一个令人印象深刻的开源工具，可以帮助你将数据备份到其他位置。

它们可以是外部 USB 磁盘、Google Drive 或使用 **SFTP 或 FTP** 连接到任何云存储。

你可能之前读过我们的[如何在 Linux 上使用 Google Drive](https://itsfoss.com/use-google-drive-linux/) 的教程。不幸的是，没有合适的在 Linux 上原生使用 Google Drive 的 FOSS 方案。有个 [Insync](https://itsfoss.com/recommends/insync/)，但它是收费软件而非开源软件。

FreeFileSync 可使用 Google Drive 帐户同步文件。事实上，我用它把我的文件同步到 Google Drive 和一个单独的硬盘上。

### FreeFileSync 的功能

![](/data/attachment/album/202008/23/060540pp9yspy1pj2is5y7.jpg)

尽管 FreeFileSync 的 UI 看起来可能很老，但它为普通用户和高级用户提供了许多有用的功能。

我将在此处把所有能重点介绍的功能都介绍出来：

* 跨平台支持（Windows、macOS 和 Linux）
* 同步前比较文件夹
* 支持 Google Drive、[SFTP](https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol) 和 FTP 连接
* 提供在不同的存储路径（或外部存储设备）上同步文件的能力
* 多个可用的同步选项（从源更新文件到目标或镜像目标和源之间的文件）
* 支持双向同步（如果目标文件夹或源文件夹有任何修改，将同步更改）
* 适用于高级用户的版本控制
* 可进行实时同步
* 能安排批处理作业
* 同步完成时通过电子邮件收到通知（付费）
* 便携式版（付费）
* 并行文件复制（付费）

如果你看一下它提供的功能，它不仅是普通的同步工具，而且还免费提供了更多功能。

此外，为了让你了解，你还可以在同步文件之前先比较它们。例如，你可以比较文件内容/文件时间，或者简单地比较源文件夹和目标文件夹的文件大小。

![](/data/attachment/album/202008/23/060541yzrqldbbquqvvro7.png)

你还有许多同步选项来镜像或更新数据。如下所示：

![](/data/attachment/album/202008/23/060543woklmm7imdlknmoo.png)

但是，它也为你提供了捐赠密钥的可选选项，它可解锁一些特殊功能，如在同步完成时通过电子邮件通知你等。

以下是免费版本和付费版本的不同：

![](/data/attachment/album/202008/23/060543ixiixfpvp2sbzlif.jpg)

因此，大多数基本功能是免费的。高级功能主要是针对高级用户，当然，如果你想支持他们也可以。（如果你觉得它有用，请这么做）。

此外，请注意，捐赠版单用户最多可在 3 台设备上使用。所以，这绝对不差！

### 在 Linux 上安装 FreeFileSync

你可以前往它的[官方下载页面](https://freefilesync.org/download.php)，并下载 Linux 的 tar.gz 文件。如果你喜欢，你还可以下载源码。

![](/data/attachment/album/202008/23/060544x4f45yr8zzm20pzj.jpg)

接下来，你只需解压并运行可执行文件就可以了（如上图所示）

* [下载 FreeFileSync](https://freefilesync.org/)

### 如何开始使用 FreeFileSync？

虽然我还没有成功地尝试过创建自动同步作业，但它很容易使用。

[官方文档](https://freefilesync.org/manual.php)应该足以让你获得想要的。

但是，为了让你初步了解，这里有一些事情，你应该记住。

![](/data/attachment/album/202008/23/060545k4cqz7qlqlrcq4cx.jpg)

如上面的截图所示，你只需选择源文件夹和要同步的目标文件夹。你可以选择本地文件夹或云存储位置。

完成后，你需要选择在同步中文件夹比较的类型（通常是文件时间和大小），在右侧，你可以调整要执行的同步类型。

#### FreeFileSync 的同步类型

当你选择 “更新” 的方式进行同步时，它只需将新数据从源文件夹复制到目标文件夹。因此，即使你从源文件夹中删除了某些东西，它也不会在目标文件夹中被删除。

如果你希望目标文件夹有相同的文件副本，可以选择 “镜像”同步方式。这样，如果你从源文件夹中删除内容，它就会从目标文件夹中删除。

还有一个 “双向” 同步方式，它检测源文件夹和目标文件夹的更改（而不是只监视源文件夹）。因此，如果对源/目标文件夹进行了任何更改，都将同步修改。

有关更高级的用法，我建议你参考[文档](https://freefilesync.org/manual.php)。

### 总结

还有一个[开源文件同步工具是 Syncthing](https://itsfoss.com/syncthing/)，你可能想要看看。

FreeFileSync 是一个相当被低估的文件夹比较和同步工具，适用于使用 Google Drive、SFTP 或 FTP 连接以及单独的存储位置进行备份的 Linux 用户。

而且，所有这些功能都免费提供对 Windows、macOS 和 Linux 的跨平台支持。

这难道不令人兴奋吗？请在下面的评论，让我知道你对 Freefilesync 的看法。

---

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

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


#新闻拍一拍# 黑莓手机还活着

Summary: • Chromium 对根 DNS 服务器流量的影响 • zstd 有望进入 Linux 5.9，支持压缩系统固件

![](/data/attachment/album/202008/23/063531o7wzs4rr8snnc7w8.jpg)

#### 黑莓手机还活着

获得黑莓品牌使用权的 TCL 公司今年初宣布它将在今年晚些时候停止销售黑莓手机，因为双方的合作即将结束。但本周一家美国得州公司 OnwardMobility 宣布与黑莓公司达成协议，将发布一款带物理键盘的 5G 黑莓 Android 手机，预计 2021 年上半年在欧洲和北美市场发售。

来源：[solidot](https://www.solidot.org/story?sid=65310 "https://www.solidot.org/story?sid=65310")

>
> 拍一拍：黑莓是当年的传奇手机，奈何时代将其抛弃。就像 Palm 一样，这样的电子产品你还记得几个？
>
>
>

#### Chromium 对根 DNS 服务器流量的影响

有些 ISP 会对于无效域名会进行拦截重定向到广告页挣些广告费。Chromium 在 DNS 查询的时候需要识别某个网络是否存在这种拦截。在每次启动、每次 IP 地址变化、每次设备 DNS 配置变更时对 3 个随机的 10 字符长的字符串进行 DNS 查询。这种行为会在根 DNS 服务器留下记录。根据亚太互联网络信息中心的统计，根服务器一半的查询流量来自于 Chromium 的检查，这相当于每天查询 600 亿次。

来源：[solidot](https://www.solidot.org/story?sid=65317 "https://www.solidot.org/story?sid=65317")

>
> 拍一拍：形成垄断性格局的 Chromium 的一点点小功能，都可能对互联网基础设施形成重压。
>
>
>

#### zstd 有望进入 Linux 5.9，支持压缩系统固件

此前 Facebook 工程师向 Linux 内核提交了使用 zstd 压缩 Linux 内核镜像的补丁，这些补丁显示了使用 zstd 对内核、ramdisk 和 initramfs 进行压缩操作具备巨大潜力。现在有内核开发者提交补丁，希望采用 zstd 统一压缩内核所有内容，包括固件文件。

来源：[开源中国](https://www.oschina.net/news/118084/zstd-firmware-compress-patch "https://www.oschina.net/news/118084/zstd-firmware-compress-patch")

>
> 拍一拍：是时候在内核中采用更先进的算法了，现在采用 zlib 有点落后了。
>
>
>


一次让字体看起来更像手写体的尝试

没有中文哎

![](/data/attachment/album/202008/24/111019lzpc280kkvlfpv1p.jpg)

其实我对这个实验的结果并不是特别满意，但我还是想分享一下，因为摆弄字体是件非常简单和有趣的事情。而且有人问我怎么做，我告诉她我会写一篇博文来介绍一下 :smiley:

### 背景：原本的手写体

先交代一些背景信息：我有一个我自己的手写字体，我已经在我的电子杂志中使用了好几年了。我用一个叫 [iFontMaker](https://2ttf.com/) 的令人愉快的应用程序制作了它。他们在网站上自诩为“你可以在 5 分钟内只用手指就能制作出你的手工字体”。根据我的经验，“5 分钟”的部分比较准确 —— 我可能花了更多的时间，比如 15 分钟。我对“只用手指”的说法持怀疑态度 —— 我用的是 Apple Pencil，它的精确度要好得多。但是，使用该应用程序制作你的笔迹的 TTF 字体是非常容易的，如果你碰巧已经有了 Apple Pencil 和 iPad，我认为这是一个有趣的方式，我只花了 7.99 美元。

下面是我的字体的样子。左边的“CONNECT”文字是我的实际笔迹，右边的段落是字体。其实有 2 种字体 —— 有一种是普通字体，一种是手写的“等宽”字体。（其实实际并不是等宽，我还没有想好如何在 iFontMaker 中制作一个实际的等宽字体）

![](/data/attachment/album/202008/24/111121ae3cvij4piievjzg.png)

### 目标：在字体上做更多的字符变化

在上面的截图中，很明显可以看出这是一种字体，而不是实际的笔迹。当你有两个相同的字母相邻时，就最容易看出来，比如“HTTP”。

所以我想，使用一些 OpenType 的功能，以某种方式为这个字体引入更多的变化，比如也许两个 “T” 可以是不同的。不过我不知道该怎么做！

### 来自 Tristan Hume 的主意：使用 OpenType！

然后我在 5 月份的 !!Con 2020 上（所有的[演讲录音都在这里！](http://bangbangcon.com/recordings.html)）看到了 Tristan Hume 的这个演讲：关于使用 OpenType 通过特殊的字体将逗号插入到大的数字中。他的演讲和博文都很棒，所以这里有一堆链接 —— 下面现场演示也许是最快看到他的成果的方式。

* 一个现场演示： [Numderline 测试](https://thume.ca/numderline/)
* 博客文章：[将逗号插入到大的数字的各个位置：OpenType 冒险](https://blog.janestreet.com/commas-in-big-numbers-everywhere/)
* 谈话：[!!Con 2020 - 使用字体塑型，把逗号插入到大的数字的各个位置！](https://www.youtube.com/watch?v=Biqm9ndNyC8)
* GitHub 存储库： <https://github.com/trishume/numderline/blob/master/patcher.py>

### 基本思路：OpenType 允许你根据上下文替换字符

我一开始对 OpenType 到底是什么非常困惑。目前我仍然不甚了然，但我知道到你可以编写极其简单的 OpenType 规则来改变字体的外观，而且你甚至不需要真正了解字体。

下面是一个规则示例：

```
sub a' b by other_a;

```

这里 `sub a' b by other_a;` 的意思是：如果一个 `a` 字形是在一个 `b` 之前，那么替换 `a` 为字形 `other_a`。

所以这意味着我可以让 `ab` 和 `ac` 在字体中出现不同的字形。这并不像手写体那样随机，但它确实引入了一点变化。

### OpenType 参考文档：真棒

我找到的最好的 OpenType 文档是这个 [OpenType™ 特性文件规范](https://adobe-type-tools.github.io/afdko/OpenTypeFeatureFileSpecification.html) 资料。里面有很多你可以做的很酷的事情的例子，比如用一个连字替换 “ffi”。

### 如何应用这些规则：fonttools

为字体添加新的 OpenType 规则是超容易的。有一个 Python 库叫 `fonttools`，这 5 行代码会把放在 `rules.fea` 中的 OpenType 规则列表应用到字体文件 `input.ttf` 中。

```
from fontTools.ttLib import TTFont
from fontTools.feaLib.builder import addOpenTypeFeatures

ft_font = TTFont('input.ttf')
addOpenTypeFeatures(ft_font, 'rules.fea', tables=['GSUB'])
ft_font.save('output.ttf')

```

`fontTools` 还提供了几个名为 `ttx` 和 `fonttools` 的命令行工具。`ttx` 可以将 TTF 字体转换为 XML 文件，这对我很有用，因为我想重新命名我的字体中的一些字形，但我对字体一无所知。所以我只是将我的字体转换为 XML 文件，使用 `sed` 重命名字形，然后再次使用 `ttx` 将 XML 文件转换回 `ttf`。

`fonttools merge` 可以让我把我的 3 个手写字体合并成 1 个，这样我就在 1 个文件中得到了我需要的所有字形。

### 代码

我把我的极潦草的代码放在一个叫 [font-mixer](https://github.com/jvns/font-mixer/) 的存储库里。它大概有 33 行代码，我认为它不言自明。（都在 `run.sh` 和 `combine.py` 中）

### 结果

下面是旧字体和新字体的小样。我不认为新字体的“感觉”更像手写体 —— 有更多的变化，但还是比不上实际的手写体文字（在下面）。

我觉得稍微有点不可思议，它明明还是一种字体，但它却要假装成不是字体：

![](/data/attachment/album/202008/24/111122edid99b8mv91iu2n.png)

而这是实际手写的同样的文字的样本：

![](/data/attachment/album/202008/24/111122uogtogvoa2xfkpxr.jpg)

如果我在制作另外 2 种手写字体的时候，把原来的字体混合在一起，再仔细一点，可能效果会更好。

### 添加 OpenType 规则这么容易，真酷！

这里最让我欣喜的是，添加 OpenType 规则来改变字体的工作方式是如此的容易，比如你可以很容易地做出一个“the”单词总是被“teh”代替的字体（让错别字一直留着！）。

不过我还是不知道如何做出更逼真的手写字体：）。我现在还在用旧的那个字体（没有额外的变化），我对它很满意。

---

via: <https://jvns.ca/blog/2020/08/08/handwritten-font/>

作者：[Julia Evans](https://jvns.ca/) 选题：[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/) 荣誉推出


IBM 披露了下一代 POWER10 处理器细节

![](/data/attachment/album/202008/24/114824nhzdzlf3u55uhmuz.jpg)

>
> 新的 CPU 针对企业混合云和 AI 推断进行了优化，它采用了为 PB 级内存集群开发的新技术。
>
>
>

IBM 上周一公布了最新的 POWER RISC CPU 系列，该系列针对企业混合云计算和人工智能 （AI）推理进行了优化，同时还进行了其他一些改进。

Power 是上世纪 90 年代最后一款 Unix 处理器，当时 Sun Microsystems、HP、SGI 和 IBM 都有竞争性的 Unix 系统，以及与之配合的 RISC 处理器。后来，Unix 让位给了 Linux，RISC 让位给了 x86，但 IBM 坚持了下来。

这是 IBM 的第一款 7 纳米处理器，IBM 宣称它将在与前代 POWER9 相同的功率范围内，将容量和处理器能效提升多达三倍。该处理器采用 15 核设计（实际上是 16 核，但其中一个没有使用），并允许采用单芯片或双芯片型号，因此 IBM 可以在同一外形尺寸中放入两个处理器。每个核心最多可以有 8 个线程，每块 CPU 最多支持 4TB 的内存。

更有趣的是一种名为 Memory Inception 的新内存集群技术。这种形式的集群允许系统将另一台物理服务器中的内存当作自己的内存来看待。因此，服务器不需要在每个机箱中放很多内存，而是可以在内存需求激增的时候，从邻居那里借到内存。或者，管理员可以在集群的中间设置一台拥有大量内存的服务器，并在其周围设置一些低内存服务器，这些服务器可以根据需要从大内存服务器上借用内存。

所有这些都是在 50 到 100 纳秒的延迟下完成的。IBM 的杰出工程师 William Starke 在宣布前的视频会议上说：“这已经成为行业的圣杯了。与其在每个机器里放很多内存，不如当我们对内存的需求激增时，我可以向邻居借。”

POWER10 使用的是一种叫做开放内存接口（OMI）的东西，因此服务器现在可以使用 DDR4，上市后可以升级到 DDR5，它还可以使用 GPU 中使用的 GDDR6 内存。理论上，POWER10 将具备 1TB/秒的内存带宽和 1TB/秒的 SMP 带宽。

与 POWER9 相比，POWER10 处理器每个核心的 AES 加密引擎数量增加了四倍。这实现了多项安全增强功能。首先，这意味着在不降低性能的情况下进行全内存加密，因此入侵者无法扫描内存内容。

其次，它可以为容器提供隔离的硬件和软件安全。这是为了解决更高密度的容器相关的行安全考虑。如果一个容器被入侵，POWER10 处理器的设计能够防止同一虚拟机中的其他容器受到同样的入侵影响。

最后，POWER10 提供了核心内的 AI 业务推断。它通过片上支持用于训练的 bfloat16 以及 AI 推断中常用的 INT8 和 INT4 实现。这将允许事务性负载在应用中添加 AI 推断。IBM 表示，POWER10 中的 AI 推断是 POWER9 的 20 倍。

公告中没有提到的是对操作系统的支持。POWER 运行 IBM 的 Unix 分支 AIX，以及 Linux。这并不太令人惊讶，因为这个消息是在 Hot Chips 上发布的，Hot Chips 是每年在斯坦福大学举行的年度半导体会议。Hot Chips 关注的是最新的芯片进展，所以软件通常被排除在外。

IBM 一般会在发布前一年左右公布新的 POWER 处理器，所以有足够的时间进行 AIX 的更新。

---

via: <https://www.networkworld.com/article/3571415/ibm-details-next-gen-power10-processor.html>

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

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


#新闻拍一拍# 开源如此火热，但研究表明该领域已不再增长

Summary: • 英特尔回应 Linus Torvalds 对 AVX512 的批评 • Ubuntu 正在考虑使用 Intel 的 IWD 提供更好的 WiFi 支持

![](/data/attachment/album/202008/24/122233sx01rfkffvly600f.jpg)

#### 开源如此火热，但研究表明该领域已不再增长

Blekinge 理工学院的 Michael Dorner 等人近期发布的一项报告指出：开源领域已不再增长。该团队研究了过去 25 年中出现的超 224,000 个开源项目发现，自 2016 年以来，活跃的开源项目数量一直在萎缩，而贡献者和提交者的数量也自 2013 年的峰值以来有所减少。自 2011 年以来，代码行数的增长就开始持续放缓；2015 年之后，代码行数则完全停止增长。同时，提交量也在随时间的增长而下降。2015 年之后，提交量进入自由落体状态，跌回了 2007 年时的水平。

来源：[开源中国](https://www.oschina.net/news/118100/open-source-is-not-growing-anymore "https://www.oschina.net/news/118100/open-source-is-not-growing-anymore")

>
> 拍一拍：如果这是真的，背后是原因是什么？是开源社区不敌开源企业么？
>
>
>

#### 英特尔回应 Linus Torvalds 对 AVX512 的批评

上个月 Linus Torvalds “让 Intel AVX-512 去死”的言论引起热议。Linus 称 Intel 的 AVX-512 指令集是“功率病毒”，其创建目的单纯只是为了使 Intel 公司的 CPU 硬件在基准测试中跑分更高。Intel 首席架构师 Raja Koduri 对 Linus 的说法进行了回应，社区之所以喜欢 AVX-512，是因为它可以带来巨大的性能提升。他承认 Linus 的部分批评可能是有道理的，但他表示对 AVX512 等指令集的批评并不会改变 Intel 的方向，表示理解 Torvalds 的担心，理解第一代 AVX512 对处理器频率的影响，称每一代都在取得进步。

来源：[solidot](https://www.solidot.org/story?sid=65325 "https://www.solidot.org/story?sid=65325")

>
> 拍一拍：“你说的有道理，那又如何。”
>
>
>

#### Ubuntu 正在考虑使用 Intel 的 IWD 提供更好的 WiFi 支持

Intel 的开源团队一直在开发 IWD，以替代 WPA\_Supplicant，而最近 Ubuntu 开发人员发现它已经实现 WPA\_Supplicant 的大部分功能，并且水平相当。IWD 具有更快的网络发现能力、更可靠的漫游、更少的系统资源占用，同时它利用现代 Linux 内核功能，提供了对企业安全功能的支持，并可以支持多个客户端，还能简化网络管理。

来源：[开源中国](https://www.oschina.net/news/118123/ubuntu-call-for-testing-improved-wifi-via-iwd "https://www.oschina.net/news/118123/ubuntu-call-for-testing-improved-wifi-via-iwd")

>
> 拍一拍：Ubuntu 社区需要评估 IWD 的稳定性和可用性，不管怎么说，多一个可选的竞品才能有更好的软件出现。
>
>
>