在 systemd 中使用控制组管理资源

Summary: 控制组可以按照应用管理资源，而不是按照组成应用的单个进程。

控制组可以按照应用管理资源，而不是按照组成应用的单个进程。

>
> 控制组可以按照应用管理资源，而不是按照组成应用的单个进程。
>
>
>

![](/data/attachment/album/202110/14/114622by5jdu87u4vng272.jpg "Woman using laptop concentrating")

作为一个系统管理员，没有事情比意外地耗尽计算资源让我更觉得沮丧。我曾不止一次填满了一个分区的所有可用磁盘空间、耗尽内存、以及没有足够的 CPU 时间在合理的时间内处理我的任务。资源管理是系统管理员最重要的工作之一。

资源管理的关键是保证所有的进程能够相对公平的访问需要的系统资源。资源管理还包括确保在需要时添加内存、硬盘驱动器空间、还有 CPU 处理能力；或者在无法添加时限制资源的使用。此外，应该阻止独占系统资源的用户，无论其是否有意。

系统管理员可以通过一些工具监控和管理不同的系统资源。例如，[top](https://en.wikipedia.org/wiki/Top_(software)) 和类似的工具允许你监控内存、I/O、存储（磁盘、SSD 等）、网络、交换空间、CPU 的用量等。这些工具，尤其是那些以 CPU 为中心的工具，大部分基于以运行的进程为基本单位进行控制的模型。它们最多只是提供了一种方式来调整 `nice` 数字，从而修改优先级，或者杀死一个运行的进程。（要了解 `nice` 数字的信息，查看 [使用 Glances 监控 Linux 和 Windows 主机](https://opensource.com/article/19/11/monitoring-linux-glances)）。

SystemV 环境中基于传统的资源管理的其他工具，由 `/etc/security/limits.conf` 文件和 `/etc/security/limits.d` 中的本地配置文件控制。资源可以按照用户或组以一种相对粗糙但实用的方式限制。可以管理的资源包括内存的各个方面、每日的总 CPU 时间、数据总量、优先级、`nice` 数字、并发登录的数量、进程数、文件大小的最大值等。

### 使用控制组管理进程

[systemd 和 SystemV](https://opensource.com/article/20/4/systemd) 之间的一个主要差异是管理进程的方式。SystemV 将每个进程视作一个独立的实体。systemd 将相关的进程集中到一个控制组，简写做 [cgroup](https://en.wikipedia.org/wiki/Cgroups)，并将控制组作为一个整体管理系统资源。这意味着资源能够基于应用管理，而不是由组成应用的各个进程来管理。

控制组的控制单元称作<ruby> 切片单元 <rt>  slice unit </rt></ruby>。切片是允许 systemd 以树状格式控制程序次序，从而简化管理的概念化。

### 查看控制组

我将从一些允许你查看不同类型控制组信息的命令开始。 `systemctl status <service>` 命令显示一个特定服务的切片信息，包括服务的切片。这个例子展示了 `at` 守护进程：

```
[root@testvm1 ~]# systemctl status atd.service
● atd.service - Deferred execution scheduler
     Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-09-23 12:18:24 EDT; 1 day 3h ago
       Docs: man:atd(8)
   Main PID: 1010 (atd)
      Tasks: 1 (limit: 14760)
     Memory: 440.0K
        CPU: 5ms
     CGroup: /system.slice/atd.service
             └─1010 /usr/sbin/atd -f

Sep 23 12:18:24 testvm1.both.org systemd[1]: Started Deferred execution scheduler.
[root@testvm1 ~]#

```

这是一个我感到 systemd 比 SystemV 和旧的初始化程序更好用的原因的绝佳示例。这里的信息远比 SystemV 能够提供的丰富。`CGroup` 项包括的层级结构中，`system.slice` 是 systemd（PID 1），`atd.service` 在下一层，是 `system.slice` 的一部分。`CGroup` 项的第二行还显示了进程 ID（PID）和启动守护进程使用的命令。

`systemctl` 命令可以列出多个控制组项，`--all` 参数列出所有的切片，包括当前没有激活的切片：

```
[root@testvm1 ~]# systemctl -t slice --all
  UNIT                             LOAD   ACTIVE   SUB    DESCRIPTION
  -.slice                          loaded active   active Root Slice
  system-getty.slice               loaded active   active system-getty.slice
  system-lvm2\x2dpvscan.slice      loaded active   active system-lvm2\x2dpvscan.slice
  system-modprobe.slice            loaded active   active system-modprobe.slice
  system-sshd\x2dkeygen.slice      loaded active   active system-sshd\x2dkeygen.slice
  system-systemd\x2dcoredump.slice loaded inactive dead   system-systemd\x2dcoredump.slice
  system-systemd\x2dfsck.slice     loaded active   active system-systemd\x2dfsck.slice
  system.slice                     loaded active   active System Slice
  user-0.slice                     loaded active   active User Slice of UID 0
  user-1000.slice                  loaded active   active User Slice of UID 1000
  user.slice                       loaded active   active User and Session Slice

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

11 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.
[root@testvm1 ~]#

```

关于这个数据，第一个需要注意的是数据显示了 UID 0（root）和 UID 1000 的用户切片，UID 1000 是我登录的用户。这里列出了组成每个切片的切片部分，而不是服务。还说明了每个用户登录时都会为其创建一个切片，这为将一个用户的所有任务作为单个控制组项进行管理提供了一种方式。

### 探索控制组的层次结构

目前为止一切顺利，但是控制组是分层的，所有的服务单元作为其中一个控制组的成员运行。要查看这个层次结构很简单，使用一个旧命令和 systemd 的一个新命令即可。

`ps` 命令可以用于映射进程的和其所处的控制组层次。注意使用 `ps` 命令时需要指明想要的数据列。我大幅削减了下面命令的输出数量，但是试图保留足够的数据，以便你能够对自己系统上的输出有所感受：

```
[root@testvm1 ~]# ps xawf -eo pid,user,cgroup,args
    PID USER     CGROUP                      COMMAND
      2 root     -                           [kthreadd]
      3 root     -                            \_ [rcu_gp]
      4 root     -                            \_ [rcu_par_gp]
      6 root     -                            \_ [kworker/0:0H-kblockd]
      9 root     -                            \_ [mm_percpu_wq]
     10 root     -                            \_ [ksoftirqd/0]
     11 root     -                            \_ [rcu_sched]
     12 root     -                            \_ [migration/0]
     13 root     -                            \_ [cpuhp/0]
     14 root     -                            \_ [cpuhp/1]
<删节>
 625406 root     -                            \_ [kworker/3:0-ata_sff]
 625409 root     -                            \_ [kworker/u8:0-events_unbound]
      1 root     0::/init.scope              /usr/lib/systemd/systemd --switched-root --system --deserialize 30
    588 root     0::/system.slice/systemd-jo /usr/lib/systemd/systemd-journald
    599 root     0::/system.slice/systemd-ud /usr/lib/systemd/systemd-udevd
    741 root     0::/system.slice/auditd.ser /sbin/auditd
    743 root     0::/system.slice/auditd.ser  \_ /usr/sbin/sedispatch
    764 root     0::/system.slice/ModemManag /usr/sbin/ModemManager
    765 root     0::/system.slice/NetworkMan /usr/sbin/NetworkManager --no-daemon
    767 root     0::/system.slice/irqbalance /usr/sbin/irqbalance --foreground
    779 root     0::/system.slice/mcelog.ser /usr/sbin/mcelog --ignorenodev --daemon --foreground
    781 root     0::/system.slice/rngd.servi /sbin/rngd -f
    782 root     0::/system.slice/rsyslog.se /usr/sbin/rsyslogd -n
<删节>
    893 root     0::/system.slice/sshd.servi sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
   1130 root     0::/user.slice/user-0.slice  \_ sshd: root [priv]
   1147 root     0::/user.slice/user-0.slice  |   \_ sshd: root@pts/0
   1148 root     0::/user.slice/user-0.slice  |       \_ -bash
   1321 root     0::/user.slice/user-0.slice  |           \_ screen
   1322 root     0::/user.slice/user-0.slice  |               \_ SCREEN
   1323 root     0::/user.slice/user-0.slice  |                   \_ /bin/bash
 498801 root     0::/user.slice/user-0.slice  |                   |   \_ man systemd.resource-control
 498813 root     0::/user.slice/user-0.slice  |                   |       \_ less
   1351 root     0::/user.slice/user-0.slice  |                   \_ /bin/bash
 123293 root     0::/user.slice/user-0.slice  |                   |   \_ man systemd.slice
 123305 root     0::/user.slice/user-0.slice  |                   |       \_ less
   1380 root     0::/user.slice/user-0.slice  |                   \_ /bin/bash
 625412 root     0::/user.slice/user-0.slice  |                   |   \_ ps xawf -eo pid,user,cgroup,args
 625413 root     0::/user.slice/user-0.slice  |                   |   \_ less
 246795 root     0::/user.slice/user-0.slice  |                   \_ /bin/bash
 625338 root     0::/user.slice/user-0.slice  |                       \_ /usr/bin/mc -P /var/tmp/mc-root/mc.pwd.246795
 625340 root     0::/user.slice/user-0.slice  |                           \_ bash -rcfile .bashrc
   1218 root     0::/user.slice/user-1000.sl  \_ sshd: dboth [priv]
   1233 dboth    0::/user.slice/user-1000.sl      \_ sshd: dboth@pts/1
   1235 dboth    0::/user.slice/user-1000.sl          \_ -bash
<删节>
   1010 root     0::/system.slice/atd.servic /usr/sbin/atd -f
   1011 root     0::/system.slice/crond.serv /usr/sbin/crond -n
   1098 root     0::/system.slice/lxdm.servi /usr/sbin/lxdm-binary
   1106 root     0::/system.slice/lxdm.servi  \_ /usr/libexec/Xorg -background none :0 vt01 -nolisten tcp -novtswitch -auth /var/run/lxdm/lxdm-:0.auth
 370621 root     0::/user.slice/user-1000.sl  \_ /usr/libexec/lxdm-session
 370631 dboth    0::/user.slice/user-1000.sl      \_ xfce4-session
 370841 dboth    0::/user.slice/user-1000.sl          \_ /usr/bin/ssh-agent /bin/sh -c exec -l bash -c "/usr/bin/startxfce4"
 370911 dboth    0::/user.slice/user-1000.sl          \_ xfwm4 --display :0.0 --sm-client-id 2dead44ab-0b4d-4101-bca4-e6771f4a8ac2
 370930 dboth    0::/user.slice/user-1000.sl          \_ xfce4-panel --display :0.0 --sm-client-id 2ce38b8ef-86fd-4189-ace5-deec1d0e0952
 370942 dboth    0::/user.slice/user-1000.sl          |   \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libsystray.so 6 23068680 systr
ay Notification Area Area where notification icons appear
 370943 dboth    0::/user.slice/user-1000.sl          |   \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libpulseaudio-plugin.so 8 2306
8681 pulseaudio PulseAudio Plugin Adjust the audio volume of the PulseAudio sound system
 370944 dboth    0::/user.slice/user-1000.sl          |   \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libxfce4powermanager.so 9 2306
8682 power-manager-plugin Power Manager Plugin Display the battery levels of your devices and control the brightness of your display
 370945 dboth    0::/user.slice/user-1000.sl          |   \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libnotification-plugin.so 10 2
3068683 notification-plugin Notification Plugin Notification plugin for the Xfce panel
 370948 dboth    0::/user.slice/user-1000.sl          |   \_ /usr/lib64/xfce4/panel/wrapper-2.0 /usr/lib64/xfce4/panel/plugins/libactions.so 14 23068684 acti
ons Action Buttons Log out, lock or other system actions
 370934 dboth    0::/user.slice/user-1000.sl          \_ Thunar --sm-client-id 2cfc809d8-4e1d-497a-a5c5-6e4fa509c3fb --daemon
 370939 dboth    0::/user.slice/user-1000.sl          \_ xfdesktop --display :0.0 --sm-client-id 299be0608-4dca-4055-b4d6-55ec6e73a324
 370962 dboth    0::/user.slice/user-1000.sl          \_ nm-applet
<删节>

```

你可以使用 `systemd-cgls` 命令查看整个层次结构，这个命令不需要任何的复杂参数，更加简单。

我也大幅缩短了这个树状结构，但是保留了足够多的输出，以便你能够了解在自己的系统上执行这个命令时应该看到的数据总量和条目类型。我在我的一个虚拟机上执行了这个命令，输出大概有 200 行；我的主要工作站的输出大概有 250 行。

```
[root@testvm1 ~]# systemd-cgls
Control group /:
-.slice
├─user.slice
│ ├─user-0.slice
│ │ ├─session-1.scope
│ │ │ ├─  1130 sshd: root [priv]
│ │ │ ├─  1147 sshd: root@pts/0
│ │ │ ├─  1148 -bash
│ │ │ ├─  1321 screen
│ │ │ ├─  1322 SCREEN
│ │ │ ├─  1323 /bin/bash
│ │ │ ├─  1351 /bin/bash
│ │ │ ├─  1380 /bin/bash
│ │ │ ├─123293 man systemd.slice
│ │ │ ├─123305 less
│ │ │ ├─246795 /bin/bash
│ │ │ ├─371371 man systemd-cgls
│ │ │ ├─371383 less
│ │ │ ├─371469 systemd-cgls
│ │ │ └─371470 less
│ │ └─user@0.service …
│ │   ├─dbus-broker.service
│ │   │ ├─1170 /usr/bin/dbus-broker-launch --scope user
│ │   │ └─1171 dbus-broker --log 4 --controller 12 --machine-id 3bccd1140fca488187f8a1439c832f07 --max-bytes 100000000000000 --max-fds 25000000000000 --max->
│ │   ├─gvfs-daemon.service
│ │   │ └─1173 /usr/libexec/gvfsd
│ │   └─init.scope
│ │     ├─1137 /usr/lib/systemd/systemd --user
│ │     └─1138 (sd-pam)
│ └─user-1000.slice
│   ├─user@1000.service …
│   │ ├─dbus\x2d:1.2\x2dorg.xfce.Xfconf.slice
│   │ │ └─dbus-:1.2-org.xfce.Xfconf@0.service
│   │ │   └─370748 /usr/lib64/xfce4/xfconf/xfconfd
│   │ ├─dbus\x2d:1.2\x2dca.desrt.dconf.slice
│   │ │ └─dbus-:1.2-ca.desrt.dconf@0.service
│   │ │   └─371262 /usr/libexec/dconf-service
│   │ ├─dbus-broker.service
│   │ │ ├─1260 /usr/bin/dbus-broker-launch --scope user
│   │ │ └─1261 dbus-broker --log 4 --controller 11 --machine-id
<删节>
│   │ └─gvfs-mtp-volume-monitor.service
│   │   └─370987 /usr/libexec/gvfs-mtp-volume-monitor
│   ├─session-3.scope
│   │ ├─1218 sshd: dboth [priv]
│   │ ├─1233 sshd: dboth@pts/1
│   │ └─1235 -bash
│   └─session-7.scope
│     ├─370621 /usr/libexec/lxdm-session
│     ├─370631 xfce4-session
│     ├─370805 /usr/bin/VBoxClient --clipboard
│     ├─370806 /usr/bin/VBoxClient --clipboard
│     ├─370817 /usr/bin/VBoxClient --seamless
│     ├─370818 /usr/bin/VBoxClient --seamless
│     ├─370824 /usr/bin/VBoxClient --draganddrop
│     ├─370825 /usr/bin/VBoxClient --draganddrop
│     ├─370841 /usr/bin/ssh-agent /bin/sh -c exec -l bash -c "/usr/bin/startxfce4"
│     ├─370910 /bin/gpg-agent --sh --daemon --write-env-file /home/dboth/.cache/gpg-agent-info
│     ├─370911 xfwm4 --display :0.0 --sm-client-id 2dead44ab-0b4d-4101-bca4-e6771f4a8ac2
│     ├─370923 xfsettingsd --display :0.0 --sm-client-id 261b4a437-3029-461c-9551-68c2c42f4fef
│     ├─370930 xfce4-panel --display :0.0 --sm-client-id 2ce38b8ef-86fd-4189-ace5-deec1d0e0952
│     ├─370934 Thunar --sm-client-id 2cfc809d8-4e1d-497a-a5c5-6e4fa509c3fb --daemon
│     ├─370939 xfdesktop --display :0.0 --sm-client-id 299be0608-4dca-4055-b4d6-55ec6e73a324
<删节>
└─system.slice
  ├─rngd.service
  │ └─1650 /sbin/rngd -f
  ├─irqbalance.service
  │ └─1631 /usr/sbin/irqbalance --foreground
  ├─fprintd.service
  │ └─303383 /usr/libexec/fprintd
  ├─systemd-udevd.service
  │ └─956 /usr/lib/systemd/systemd-udevd
<删节>
  ├─systemd-journald.service
  │ └─588 /usr/lib/systemd/systemd-journald
  ├─atd.service
  │ └─1010 /usr/sbin/atd -f
  ├─system-dbus\x2d:1.10\x2dorg.freedesktop.problems.slice
  │ └─dbus-:1.10-org.freedesktop.problems@0.service
  │   └─371197 /usr/sbin/abrt-dbus -t133
  ├─sshd.service
  │ └─893 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
  ├─vboxservice.service
  │ └─802 /usr/sbin/VBoxService -f
  ├─crond.service
  │ └─1011 /usr/sbin/crond -n
  ├─NetworkManager.service
  │ └─765 /usr/sbin/NetworkManager --no-daemon
  ├─switcheroo-control.service
  │ └─787 /usr/libexec/switcheroo-control
 <删节>

```

这个树状视图显示了所有的用户和系统切片，以及每个控制组内正在运行的服务和程序。注意叫作 `scope`（范围）的单元，它将相关的程序组成一个管理单元，在上面列出的结果中就是 `user-1000.slice`。`user-1000.slice/session-7.scope` 控制组包含了 GUI 桌面程序层次结构，以 LXDM 显示管理器会话和其所有的子任务开始，包括像 Bash 命令行解释器和 Thunar GUI 文件管理器之类的程序。

配置文件中不定义范围单元，而是作为启动相关程序组的结果程序化生成的。范围单元不创建或启动作为控制组的组成部分运行的进程。范围内的所有进程都是平等的，没有内部的层次结构。一个范围的生命周期在第一个进程创建时开始，在最后一个进程销毁时结束。

在你的桌面打开多个窗口，比如终端模拟器、LibreOffice、或者任何你想打开的，然后切换到一个可用的虚拟控制台，启动类似 `top` 或 [Midnight Commander](https://midnight-commander.org/) 的程序。在主机运行 `systemd-cgls` 命令，留意整体的层次结构和范围单元。

`systemd-cgls` 命令提供的控制组层次结构表示（以及组成控制组单元的细节），比我见过的其他任何指令都要完整。和 `ps` 命令提供的输出相比，我喜欢 `systemd-cgls` 命令更简洁的树形表示。

### 来自朋友们的一点帮助

介绍完这些基础知识后，我曾计划过深入研究控制组的更多细节，以及如何使用，但是我在 [Opensource.com](http://Opensource.com) 的姐妹网站 [Enable Sysadmin](https://www.redhat.com/sysadmin/) 上发现了一系列四篇优秀文章，由 Red Hat 公司的 [Steve Ovens](https://www.redhat.com/sysadmin/users/steve-ovens) 所作。与其从头重写 Steve 的文章，我觉得倒不如通过链接到这些文章，利用他的控制组专业知识：

1. [一个 Linux 系统管理员对控制组的介绍](https://www.redhat.com/sysadmin/cgroups-part-one)
2. [如何用 CPUShares 管理控制组](https://www.redhat.com/sysadmin/cgroups-part-two)
3. [用更难的方式，手动管理控制组](https://www.redhat.com/sysadmin/cgroups-part-three)
4. [用 systemd 管理控制组](https://www.redhat.com/sysadmin/cgroups-part-four)

像我一样享受这些文章并从中汲取知识吧。

### 其他资源

互联网上充斥着大量关于 systemd 的信息，但大部分都简短生硬、愚钝、甚至令人误解。除了本文提到的资源，下面的网页提供了关于 systemd 启动更详细可靠的信息。自从我开始这一系列的文章来反映我所做的研究以来，这个的列表已经变长了。

* Fedora 项目有一个优质实用的 [systemd 指南](https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html)，几乎有你使用 systemd 配置、管理、维护一个 Fedora 计算机需要知道的一切。
* Fedora 项目还有一个好用的 [速查表](https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet)，交叉引用了古老的 SystemV 命令和对应的 systemd 命令。
* [systemd.unit(5) 手册页](https://man7.org/linux/man-pages/man5/systemd.unit.5.html) 包含了一个不错的单元文件中各个节的列表，以及这些节的配置选项和简洁的描述。
* Red Hat 文档包含了一个 [单元文件结构](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/managing-services-with-systemd_configuring-basic-system-settings#Managing_Services_with_systemd-Unit_File_Structure) 的有用描述，还有一些其他的重要信息。
* 要获取 systemd 的详细技术信息和创立的原因，查看 [Freedesktop.org](http://Freedesktop.org) 的 [systemd 描 述](https://www.freedesktop.org/wiki/Software/systemd/)。这个使我发现过的最棒页面之一，因为其中包含了许多指向其他重要准确文档的链接。
* [Linux.com](http://Linux.com) 上 “systemd 的更多乐趣” 提供了更高级的 systemd [信息和提示](https://www.linux.com/training-tutorials/more-systemd-fun-blame-game-and-stopping-services-prejudice/)。
* 查看 [systemd.resource-control(5)](https://man7.org/linux/man-pages/man5/systemd.resource-control.5.html) 的手册页
* 查看 [*Linux 内核用户和管理员指南*](https://www.kernel.org/doc/html/latest/admin-guide/index.html) 中的 [控制组 v2 条目](https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html)。

还有一系列针对系统管理员的深度技术文章，由 systemd 的设计者和主要开发者 Lennart Poettering 所作。这些文章写于 2010 年 4 月到 2011 年 9 月之间，但在当下仍然像当时一样有 价值。关于 systemd 及其生态的许多其他优秀的作品都是基于这些文章的。

* [Rethinking PID 1](http://0pointer.de/blog/projects/systemd.html)
* [systemd for Administrators, Part I](http://0pointer.de/blog/projects/systemd-for-admins-1.html)
* [systemd for Administrators, Part II](http://0pointer.de/blog/projects/systemd-for-admins-2.html)
* [systemd for Administrators, Part III](http://0pointer.de/blog/projects/systemd-for-admins-3.html)
* [systemd for Administrators, Part IV](http://0pointer.de/blog/projects/systemd-for-admins-4.html)
* [systemd for Administrators, Part V](http://0pointer.de/blog/projects/three-levels-of-off.html)
* [systemd for Administrators, Part VI](http://0pointer.de/blog/projects/changing-roots)
* [systemd for Administrators, Part VII](http://0pointer.de/blog/projects/blame-game.html)
* [systemd for Administrators, Part VIII](http://0pointer.de/blog/projects/the-new-configuration-files.html)
* [systemd for Administrators, Part IX](http://0pointer.de/blog/projects/on-etc-sysinit.html)
* [systemd for Administrators, Part X](http://0pointer.de/blog/projects/instances.html)
* [systemd for Administrators, Part XI](http://0pointer.de/blog/projects/inetd.html)

---

via: <https://opensource.com/article/20/10/cgroups>

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

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


硬核观察 #424 50 年前，第一个电子游戏《Computer Space》诞生

Summary: 更多：• 苹果借安卓的恶意软件状况而反对第三方应用商店 • LoongArch 向内核提交了 23000 行代码

老外还是很傲慢的，大多数评论并不关心龙芯做了啥

![](/data/attachment/album/202110/14/170533oeykfsz2qs1qwkf2.jpg)

### 50 年前，第一个电子游戏《Computer Space》诞生

![](/data/attachment/album/202110/14/170602cge6g61glezf6dkd.jpg)

《Computer Space》在 1971 年 10 月 15 日首次亮相时，标志着我们今天 1750 亿美元的 [电子游戏产业的开始](https://theconversation.com/computer-space-launched-the-video-game-industry-50-years-ago-heres-the-real-reason-you-probably-havent-heard-of-it-168349)。电子游戏是指所有依托于电子设备平台而运行的交互游戏，包括运行在家用游戏机、掌机、街机、电脑及手机上的游戏。《Computer Space》的场景是在太空中驾驶火箭飞船与两架飞碟展开激烈的搏斗，而当时美国阿波罗登月任务正如火如荼地进行着。但这个游戏没有得到大量订单。直到它的制作者离开公司，成立了雅达利公司，并在第二年推出了《Pong》，电子游戏的商业潜力才得以显现。到 1974 年，该公司卖出了 8,000 台《Pong》 游戏机。

>
> 老王点评：从此揭开了电子游戏“洪水猛兽”的大幕。
>
>
>

### 苹果借安卓的恶意软件状况而反对第三方应用商店

![](/data/attachment/album/202110/14/170636qdg47gx4g4d09gci.jpg)

苹果公司表示，其 iOS 设备之所以被锁定在其官方应用商店作为安装应用程序的唯一途径，是出于安全考虑，因为这允许其安全团队在应用程序到达用户之前扫描其恶意内容。苹果公司并指出，与它的应用程序生态系统相比，安卓系统的恶意软件 [多出 15 到 47 倍](https://therecord.media/apple-argues-against-allowing-app-sideloading-by-pointing-out-androids-malware-figures/)。苹果的这份 [第二版报告](https://www.apple.com/privacy/docs/Building_a_Trusted_Ecosystem_for_Millions_of_Apps_A_Threat_Analysis_of_Sideloading.pdf) 接着列出了多个针对安卓设备的恶意软件活动，威胁者要求用户侧载互联网网站或第三方应用商店中的恶意应用。

>
> 老王点评：虽然有一定道理，但是苹果的应用商店也屡屡有各种恶意应用和骗费应用。
>
>
>

### LoongArch 向内核提交了 23000 行代码

![](/data/attachment/album/202110/14/170737pdallokbwnhdlxyb.jpg)

龙芯推出的自主指令集 LoongArch 一直努力加入 Linux 内核，但因被认为某些方面只是复制现有的 MIPS 代码而引来一些内核贡献者的不满。龙芯最近开始提供一些 [LoongArch ISA 的文档](https://loongson.github.io/LoongArch-Documentation/README-EN.html)，以显示它不是 MIPS 的 1:1 拷贝，而是在它的基础上做了各种改变。昨天，LoongArch 的 [第 5 版补丁](https://lore.kernel.org/lkml/20211013063656.3084555-1-chenhuacai@loongson.cn/)已经出来了。在这些新的补丁中，基于最新的上游 Linux 5.15 做了各种修复，也调整了系统调用和 ptrace 代码。在这个补丁系列中，包括文档和 Kconfig 在内大约提交了 23000 行新的内核代码。

>
> 老王点评：龙芯 ISA 想获得内核社区的认可，还有不少工作，加油！
>
>
>


Seahorse：在 Linux 中管理你的密码和加密密钥

>
> Seahorse 是一个简洁的开源密码和加密密钥管理器，让我们来探讨一下它的功能和如何安装它。
>
>
>

![](/data/attachment/album/202110/15/120409ltfmw33c5xpw5bcx.jpg)

我们经常倾向于忽视许多默认/预装的应用，尤其是在内置了大量工具和实用程序时。

你可以在各种 Linux 发行版上使用的这样一个有用的工具是 **GNOME 的 Seahorse**。

### Seahorse：GNOME 的密码及加密密钥管理器

![](/data/attachment/album/202110/15/120415gso60srj5r3esedj.png)

主要来说，Seahorse 是一个预装在 GNOME 桌面的应用，并为其量身定做。

然而，你可以在你选择的任何 Linux 发行版上使用它。它是一个简单而有效的工具，可以在本地管理你的密码和加密密钥/钥匙环。

如果你是第一次使用，你可能想读一下 [Linux 中钥匙环的概念](https://itsfoss.com/ubuntu-keyring/)。

如果你不喜欢基于云的密码管理器，Seahorse 可以很好地解决你的要求。尽管它看起来很简单，但有几个基本功能你可能会觉得很有用。

当然，如果你的不太涉及管理加密密钥（或本地存储），你也应该探索一些 [可用于 Linux 的最佳密码管理器](https://itsfoss.com/password-managers-linux/) 。

### Seahorse 的特点

虽然你可以很容易地把它作为一个本地（离线）密码管理器，但在处理加密密钥时，你也可以用 Seahorse 做一些事情来加强你的安全管理。

![](/data/attachment/album/202110/15/120416m7fj3jjoadrl8kwd.png)

一些关键的亮点是:

* 能够存储 SSH 密钥（用于访问远程计算机/服务器）
* 存储用于保护电子邮件和文件的 GPG 密钥
* 支持为应用和网络添加密码钥匙环
* 安全地存储证书的私钥
* 存储一个密码/密语
* 能够导入文件并快速存储它们
* 查找远程密钥
* 同步和发布密钥
* 能够查找/复制 VPN 密码

![](/data/attachment/album/202110/15/120416vwkpmwm9pfgrkg2c.png)

### 在 Linux 中安装 Seahorse

如果你使用的是基于 GNOME 的发行版，你应该已经安装了它。你可以搜索 “Seahorse” 或者 “Passwords” 来找到它。

在其他情况下，你可以在软件中心搜索到它。根据我的快速测试，它在 KDE、LXQt 和不同的桌面环境下应该可以正常工作。

![](/data/attachment/album/202110/15/120417feqe2qushuu0blzz.png)

此外，你可以找到它的 [Flatpak 包](https://www.flathub.org/apps/details/org.gnome.seahorse.Application)。所以，无论你使用的是哪种 Linux 发行版，都可以安装 Seahorse。

如果你使用的是 Arch Linux，你也应该在 [AUR](https://itsfoss.com/aur-arch-linux/) 中找到它。

* [Seahorse](https://wiki.gnome.org/Apps/Seahorse/)

你对使用 Seahorse 来取代其他密码管理器有何看法？你是否已经用它来管理加密密钥？请在下面的评论中告诉我你的想法。

---

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

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


纪念 25 周年：KDE Plasma 5.23 发布

KDE YES!!!

用惯了，没感觉有啥大变动

来自河南南阳的 Chrome Mobile 94.0|Android 11 用户

KDE加油！

KDE 帅...

![](/data/attachment/album/202110/15/134057uzhjujbu7zbqz76v.png)

多年来，KDE Plasma 一直是最常用的桌面环境之一。这是因为它似乎有无穷无尽的定制选项、华丽的外观和有料的更新。

随着 KDE Plasma 5.23 的发布，这个桌面环境已经工作了 25 年。因此，这个版本也被称为 “Plasma 25 周年版”。

让我们回想一下，1996 年 10 月 14 日，KDE 的创始人 Matthias Ettrich [向一个新闻组](https://groups.google.com/g/de.comp.os.linux.misc/c/SDbiV3Iat_s/m/zv_D_2ctS8sJ?pli=1) 发出了呼唤，为他的 “<ruby> Kool 桌面环境 <rt>  Kool Desktop Environment </rt></ruby>（KDE）” 项目寻求其他程序员的帮助。

而你看，KDE 现在呢？

在这次更新中，我们可以看到包括 Plasma 内部和第三方应用程序在内的一些重大 UI 改进。

### KDE Plasma 5.23: 有什么新东西？

这次更新带来了许多改进，包括：

* 桌面重点颜色
* 新的 Breeze 主题
* 新的电源管理快速控制
* 应用程序启动器有更多的自定义选项
* 数以百计的错误修复

在这里，我们将看到所有这些新的改进：

#### 桌面重点颜色

![](/data/attachment/album/202110/15/134058wfff5z1q1z1a1r5b.png)

在系统设置中，你会发现有一个可以改变你的桌面重点颜色的选项，你可以选择一个你喜欢的自定义颜色或与默认应用的主题相融合的颜色。

#### 新的 Breeze 主题

![](/data/attachment/album/202110/15/134059gdvgntdz5tfziu5i.png)

这次更新带来了全新的 Breeze 主题：Breeze - Blue Ocean。默认主题经过多年的改进，这一次，它侧重于使视觉效果更加清晰和易于识别。

总的来说，新的主题提供了顺滑的外观。除了主题之外，图标也变得更加突出；增加了一个加载齿轮图标。而且，许许多多这样的细微变化已经进入了 KDE Plasma 5.23，以增强桌面的外观和感觉。

正如开发者 Nate Graham 在测试版发布时所说：

>
> 还有很多时间可以根据需要调整最终的外观，但总的来说，我认为它真的很棒了，我希望你和我一样喜欢它。
>
>
>

#### 系统设置中增强的搜索功能

为了更容易找到你要找的东西，KDE Plasma 5.23 增加了更多的关键词组合，以使你使用搜索栏寻找时可以快速提示你相关设置。

#### 系统托盘的改进

![](/data/attachment/album/202110/15/134100ponkfj7ivviiy773.png)

虽然系统托盘已经提供了许多控制，但现在监控你连接的网络以及访问剪贴板有了更精细的选项。

系统托盘也改进了显示正在播放的活动媒体时的整体外观。

#### 新的电源管理快速控制

随着 Linux 5.12 的发布，增加了一个电源管理功能。现在，KDE 引入了一种简单的调整方式，它出现在新的快速控制中。

它有三个选项：节电、平衡和性能。只需要一次点击就可以节省电池电力并根据需要调整性能。

#### 应用程序启动器的改进

![](/data/attachment/album/202110/15/134101in5wzn1nw5nt1mzl.png)

在 Plasma 5.21 中，KDE 引入了一个新的应用程序启动器，叫做 Kickoff。虽然它受到了普遍欢迎，但一些用户也抱怨与旧的启动器相比，自定义选项较少。

好在 Plasma 5.23 解决了这个问题，为 Kickoff 引入了一些全新的自定义选项。这些选项包括以下能力：

* 图标化电源和用户控件
* 所有项目都采用选择列表或网格视图，而不仅仅是收藏夹菜单
* 新的键盘快捷键 `CTRL+F` 可以快速聚焦到搜索栏
* 在右上角添加了一个新的按针状按钮，以保持应用程序启动器处于活动状态

总的来说，我预计用户会相当受欢迎这些新选项，特别是那些因为它有如此之多的定制选项而使用 KDE 的用户。

### 其他改进措施

其他的常规改进包括：

* 优化了 Wayland 会话
* 通过“反馈”程序提高了数据透明度
* 改进了 KDE 的 Discover（应用中心）的性能

要探索更多关于该版本的信息，你可以查看 [官方公告](https://kde.org/announcements/plasma/5/5.23.0/) 及其 [更新日志](https://kde.org/announcements/changelogs/plasma/5/5.22.5-5.23.0/)。

### 总结

虽然不是有史以来最大的版本，但这是一个重要的版本，具有纪念其 25 周年的宝贵补充。像往常一样，你应该在未来几个月内的某个时候收到更新，这取决于你的发行版。

你对 KDE Plasma 5.23 的改进有什么看法？请在下面的评论中告诉我。

---

via: <https://news.itsfoss.com/kde-plasma-5-23-release/>

作者：[Jacob Crume](https://news.itsfoss.com/author/jacob/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #425 PowerPC 版的 Firefox 走向尽头

Summary: 更多：• Ubuntu 21.10、OpenBSD 7.0 发布 • 研究发现勒索软件传播主要依赖于社会化工程

2030年，Mozilla宣布放弃了对x86_64版Firefiox[fox]的开发。

![](/data/attachment/album/202110/15/151733k7bvyq6gtf5ftbkq.jpg)

### PowerPC 版的 Firefox 走向尽头

![](/data/attachment/album/202110/15/151743asxshcbjjusv9ad6.jpg)

Mozilla 在开发 Firefox 4 时取消了对 PowerPC 的支持后，开源贡献者于 2010 年底发起了一个名为 [TenFourFox](https://www.floodgap.com/software/tenfourfox/) 的项目，这是一个 Firefox 浏览器的复刻，适用于在基于 G3、G4 和 G5 处理器的 PowerPC Mac 上运行的 Mac OS X 10.4 或 10.5 系统。但是，随着时间的推移，继续将 Firefox 的功能向后移植到老旧的 PowerPC 处理器上变得越来越困难。项目主要维护人 Kaiser 宣布 TenFourFox [在十多年的开发后结束更新](https://arstechnica.com/gadgets/2021/10/tenfourfox-one-of-the-last-modern-browsers-for-powerpc-macs-is-officially-dead/)，在本月初做了最后一次发布。

>
> 老王点评：总有一些人在做一些似乎没多大意义，但是值得赞赏的事情。Kaiser 的这篇 [告别贴](https://tenfourfox.blogspot.com/2020/04/the-end-of-tenfourfox-and-what-ive.html) 很长，但是值得一读。
>
>
>

### Ubuntu 21.10、OpenBSD 7.0 发布

![](/data/attachment/album/202110/15/151806dkaqqvkn3qayl33p.jpg)

两则发行版发布消息：

[Ubuntu 发布了 21.10](https://ubuntu.com/blog/ubuntu-21-10-has-landed)。它是一个短期版本，只支持 9 个月，下一个版本 22.04 将是 LTS 版本。桌面系统切换到 GNOME Shell 40，而不是最新的 GNOME 41；默认浏览器 Firefox 使用 Snap，而不是 deb 软件包；使用 Linux 5.13 内核和 GCC 11。

[OpenBSD 发布了 7.0](https://www.openbsd.org/70.html)。支持 64 位 RISC-V；改进了对 ARM64 的支持，但对苹果 M1 的支持尚未达到一般可用状态；淘汰了 OpenBSD/sgi 平台。

>
> 老王点评：开源世界的一个特点就是，总有各种层出不穷的新版本让你“喜新厌旧”。
>
>
>

### 研究发现勒索软件传播主要依赖于社会化工程

![](/data/attachment/album/202110/15/151824oydydldiypdjypbz.jpg)

Google 发布了一份新的 [勒索软件报告](https://storage.googleapis.com/vtpublic/vt-ransomware-report-2021.pdf)，委托网络安全公司 VirusTotal 分析了来自 140 个国家的 8000 万个勒索软件样本。报告发现，基于漏洞的勒索软件攻击只占样本的一小部分：5%，通常是使用社会工程、或安装恶意软件的小程序来部署的。此外，检测到的 95% 的勒索软件是基于 Windows 的可执行文件或动态链接库的，只有 2% 是基于安卓的。

>
> 老王点评：主要是通过社会化工程传播的，这要怎么防？
>
>
>


Ubuntu 21.10 版现已发布！终于带来了 Ubuntu 特色的 GNOME 40

昨晚试用了一下Ubuntu21.10。

其实gnome原生也还好，不用定制。定制让人觉得怪怪的。

不过还是不大喜欢gnome40，更喜欢之前的gnome3

![](/data/attachment/album/202110/16/100217pbz6pgbg5pbojrio.png)

>
> Ubuntu 21.10 是一个激动人心的版本，包含了 GNOME 40 和几个显著的变化。准备已经驶向了 Ubuntu 22.04 LTS 吗？
>
>
>

Ubuntu 21.10 是下一个大型 LTS 更新之前的最后一个非 LTS 版本。代号为 Impish Indri 的 Ubuntu 21.10 将被支持**九个月，直到 2022 年 7 月**。

除非你想尝试最新和最棒的功能，否则你应该坚持使用 Ubuntu 20.04 LTS 并等待 Ubuntu 22.04 LTS。

现在你可以下载 Ubuntu 21.10 并在你的系统上安装，让我重点介绍一下这次更新的几个亮点。

### Ubuntu 21.10 “Impish Indri” 有何新变化？

![](/data/attachment/album/202110/16/100218wuad5r5huicfu5uf.png)

Ubuntu 21.10 出炉时有几个重大变化。一些最有影响的改进包括：

* 新的安装程序
* 增加了 GNOME 40
* 抛弃了混合主题，选择了浅色/深色主题
* 包括 Linux 内核 5.13
* 加入了支持蓝牙 LDAC 的 PulseAudio 15
* 带有 Nvidia 专有驱动程序的 Wayland 会话

GNOME 40 可以说是 Ubuntu 中令人耳目一新的变化，但你只有在体验之后才能知道。为了让你快速感受一下，下面是这个版本中你可以期待的所有变化。

#### 粉饰一新的安装程序

![](/data/attachment/album/202110/16/100219i1inz1kw1nmikijz.png)

虽然 Ubuntu 的安装程序很容易使用，对新手也很友好，但 Canonical 希望通过对安装程序进行视觉和技术上的改造，使其更上一层楼。

开发团队利用 Flutter 使安装程序在所有其他 Ubuntu 口味和系统配置中保持一致。

![](/data/attachment/album/202110/16/100220wb09d8exld88b348.png)

#### GNOME 40

![](/data/attachment/album/202110/16/100221lltmnarskoo2ar56.png)

Ubuntu 的桌面体验与 GNOME 40 融为一体，没有提供任何混乱的布局。停靠区依然存在，水平活动概览也与之无缝衔接。

当然，[GNOME 40](https://news.itsfoss.com/gnome-40-release/) 中的所有改进，如核心应用程序的更新、工作区的改变等等，都会延续到 Ubuntu 21.10 中，只是 Canonical 做了一些改动。

就我个人而言，我并不喜欢 GNOME 40 的工作流程，但你可能会想体验一下。

#### 主题的变化

![](/data/attachment/album/202110/16/100222blcc9nb0nlg955vc.png)

我喜欢改进后的颜色方案，其目的是为了更好地与 Canonical 的 Ubuntu 品牌相融合。

然而，当涉及到与应用程序和整体主题选择的一致性时，混合（标准）主题是有点问题的。

在 Ubuntu 21.10 中，你会看到深色和浅色主题，而浅色是开箱即用的默认选择。如果你想进一步了解，你可以阅读我们的 [过去的报道以更多了解这一变化](https://news.itsfoss.com/ubuntu-21-10-theme-change/)。

#### Linux 内核 5.13

Linux 内核 5.13 的加入增加了对未来的英特尔和 AMD 芯片的支持，以及对苹果 M1 的初步支持。

你可以就一步了解 [Linux 内核 5.13](https://news.itsfoss.com/linux-kernel-5-13-release/) 的信息，但总的来说，它应该给你更好的硬件兼容性。

#### PulseAudio 15 支持蓝牙 LDAC

考虑到现在有更多的蓝牙耳机支持 LDAC，当你在桌面上使用 Ubuntu 21.10 时，你可以利用这一功能。

别担心，如果你不想尝试非 LTS 版本，Ubuntu 22.04 LTS 将包括同样的改进。所以，你必须耐心等待，直到明年才能利用这一点。

除此之外，PulseAudio 15 还带来了一系列的改进，你可以参考它的 [官方更新日志以了解更多信息](https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/) 。

#### Wayland 会话与 NVIDIA 专有驱动程序

现在，即使你使用 NVIDIA 专有的驱动程序，如果你需要也可以切换到 Wayland 会话。

#### Ubuntu 21.10 中的其他变化

![](/data/attachment/album/202110/16/100223ezikyfolzl9km75m.png)

Ubuntu 21.10 版本为其云镜像、树莓派支持和安全性带来了一系列高质量的变化。

其中一些值得注意的变化包括：

* [Firefox 默认采用 Snap](https://news.itsfoss.com/ubuntu-firefox-snap-default/)
* LibreOffice、Thunderbird 更新
* Ubuntu Sever 的改进
* 新的 PHP 默认为 8.0.8

如果你想探索所有的技术细节，你可能想参考一下 [官方发布说明](https://discourse.ubuntu.com/t/impish-indri-release-notes/21951)。

### 下载并升级到 Ubuntu 21.10

你可以选择全新安装或使用软件升级器 [从 Ubuntu 21.04 升级](https://itsfoss.com/upgrade-ubuntu-to-newer-version/) 到 Ubuntu 21.10。

请注意，如果你正在使用 Ubuntu 20.04 LTS，建议等待下一个 LTS 版本，除非你知道自己在做什么。

* [下载Ubuntu 21.10](https://releases.ubuntu.com/21.10/)

---

via: <https://news.itsfoss.com/ubuntu-21-10-release/>

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

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


最新 OpenPGP.js 版本的 3 个新功能

>
> OpenPGP.js 是一个实现了 OpenPGP 标准的密码学库，最常用于电子邮件加密。
>
>
>

![](/data/attachment/album/202110/16/115721k1vi1ekzip1kpqkg.jpg "email or newsletters via inbox and browser")

[OpenPGP.js](https://github.com/openpgpjs/openpgpjs) 是一个实现了 [OpenPGP 标准](https://tools.ietf.org/html/rfc4880) 的密码学库，最常用于电子邮件加密。ProtonMail、Mailvelope 和 FlowCrypt 都使用 OpenPGP.js，这还仅仅是其中一些。也就是说 OpenPGP.js 库对数百万用户的信息进行了加密。

OpenPGP 标准首次发布于 20 世纪 90 年代，像几乎任何东西一样，需要维护和更新，以保证安全和可用性。该标准的“加密刷新” [正在进行中](https://datatracker.ietf.org/doc/charter-ietf-openpgp/)，它增加了现代的加密算法并废除了过时的算法。为了提高可用性，各种电子邮件应用程序现在允许用户无缝加密他们的通信，用户无需管理他们的密钥或他们的联系人的密钥。

OpenPGP.js 于 2014 年首次发布，开始基于一个名为 GPG4Browsers 的早期原型，该原型基于 Herbert Hanewinkel（以及其他贡献者）的几个脚本。OpenPGP.js 的第二个版本于 2016 年发布，完全重新设计，使用 Uint8Arrays 而不是字符串（这大大增加了其性能），并在内部使用现代 ES6 模块而不是 CommonJS 模块。第 3 和第 4 版都是在 2018 年发布的，分别增加了对椭圆曲线加密法（ECC）和流的支持。

我和我的团队继续在 OpenPGP.js 上工作，以确保其发展为一个易于使用的强加密库。

### 1、默认的椭圆曲线加密

在 OpenPGP.js 第 4 版中，生成新密钥时默认使用 RSA。虽然 ECC 更快、更安全，但 Curve25519 还没有在 OpenPGP 规范中得到标准化。加密刷新草案包括了 Curve25519，并且预计它将“按原样”包含在下一版本的 OpenPGP 规范中，因此 OpenPGP.js 第 5 版现在默认使用 ECC 生成密钥。

### 2、只导入你需要的模块

同样，虽然 OpenPGP.js 内部使用 ES6 模块多年，但第 4 版仍然没有发布一个合适的 ES6 模块。相反，它只发布了一个<ruby> 通用模块定义 <rt>  Univeral Module Definition </rt></ruby>（UMD）模块，可以在浏览器和 Node.js 上运行。在第 5 版中，这种情况有所改变，为浏览器和 Node.js 发布了单独的模块（包括 ES6 和非 ES6），使库用户更容易在所有平台上导入 OpenPGP.js ，且（当使用 ES6 模块时）只导入他们需要的部分。这在很大程度上是通过将构建系统切换到 [rollup](https://rollupjs.org/) 来实现的。

### 3、拒绝弱加密技术

还有许多其他的安全改进。例如，1024 位 RSA 密钥、ElGamal 和 DSA 密钥被认为是不安全的，并被默认拒绝。此外，第 4 版已经默认使用 AES 加密，第 5 版现在完全默认拒绝使用较弱的算法进行加密，即使公钥声称只支持较弱的算法。相反，它假定所有的 OpenPGP 实现都支持 AES（这种情况已经存在很长时间了）。

### OpenPGP.js 的下一步是什么？

展望未来，有一些安全方面的改进要做。用于识别公钥的密钥指纹仍然使用 SHA-1，尽管在加密技术更新中计划对此进行修复。同时，建议使用不同的方法来确定用于加密的任何公钥的真实性，例如使用提议的 <ruby> <a href="https://datatracker.ietf.org/doc/html/draft-koch-openpgp-webkey-service">  网络密钥目录 </a> <rt>  Web Key Directory </rt></ruby>（WKD）标准直接从收件人的域中获取整个密钥，这已经由各种 [电子邮件提供商](https://wiki.gnupg.org/WKD#Mail_Service_Providers_offering_WKD) 实现。WKD 支持内置于 OpenPGP.js 第 4 版，但在第 5 版中是一个单独的模块，以保持主库的精简。

同样，当用密码而不是公钥加密信息或文件时（例如：在使用 OpenPGP 进行电子邮件加密时不常见，但在用于加密备份时更常见），密码会使用相对较弱的<ruby> 密钥衍生函数 <rt>  Key Derivation Function </rt></ruby>（KDF）转换为对称密钥。因此，建议应用在将用户的密码传递给 OpenPGP.js 之前，先通过一个强大的 KDF，如 [Argon2](https://en.wikipedia.org/wiki/Argon2) 或 [scrypt](https://en.wikipedia.org/wiki/Scrypt)。希望加密刷新草案会包括这些算法中的一种，以便在未来的 OpenPGP.js 版本中实现。

### 如何使用 OpenPGP.js 第 5 版

不过现在，OpenPGP.js 第 5 版已经 [发布](https://www.npmjs.com/package/openpgp) 到 npm 仓库。如果你喜欢，可以随时试用！欢迎在 GitHub 的 [讨论版](https://github.com/openpgpjs/openpgpjs/discussions) 中进行反馈。然而，请注意，虽然 OpenPGP.js 是一个通用的加密库，但它的主要使用情况是在需要与 OpenPGP 规范兼容的情况下（例如，在发送或接收 PGP 加密的电子邮件时）。对于其他的使用情况，不同的库可能是一个更合适或性能更好的选择。当然，总的来说，在尝试使用任何加密技术时都要小心。

感谢阅读，这里是保护电子邮件的未来！

---

via: <https://opensource.com/article/21/10/openpgpjs>

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


硬核观察 #426 机器狗正在安装枪支

Summary: 更多：• 今年又有三起针对水处理厂的勒索软件攻击事件 • 90% 的英国企业在使用开源技术

![](/data/attachment/album/202110/16/185106c79vyzy9ysyyub7f.jpg)

### 机器狗正在安装枪支

![](/data/attachment/album/202110/16/185118guxahuzac6892a99.jpg)

四足机器狗是近年来机器人技术中最有趣的发展之一。它们体积小，动作灵活，能够穿越那些令轮式机器沮丧的环境。在 [一篇报道的图片中](https://www.theverge.com/2021/10/14/22726111/robot-dogs-with-guns-sword-international-ghost-robotics) 显示了一个四足机器人配备了一把无人步枪。这把枪被设计成可以安装在各种机器人平台上，有 30 倍的光学变焦，热像仪可在黑暗中瞄准目标，有效射程为 1200 米。开发这把枪的公司称，“SWORD 防御系统 SPUR 是无人驾驶武器系统的未来，而这个未来就是现在。”

>
> 老王点评：令人不寒而栗！
>
>
>

### 今年又有三起针对水处理厂的勒索软件攻击事件

![](/data/attachment/album/202110/16/185135dxicxmpqjqx2jmxx.jpg)

美国政府发表的 [一份报告中说](https://therecord.media/us-govt-reveals-three-more-ransomware-attacks-on-water-treatment-plants-this-year/)，今年勒索软件团伙已经悄悄地袭击了三个美国水和废水处理设施。这些攻击以前没有报道过，它们发生在 3 月、7 月和 8 月，分别袭击了内华达州、缅因州和加利福尼亚州的设施。这些攻击导致威胁者对文件进行加密和控制了工业计算机。

>
> 老王点评：不像已经习惯了加强防御的互联网机构，传统的基础设施企业往往在面对来自互联网的侵袭有些麻痹。
>
>
>

### 90% 的英国企业在使用开源技术

![](/data/attachment/album/202110/16/185151n955zco3253jju35.jpg)

在一份 OpenUK 对开源软件对英国经济影响的 [调查报告](https://openuk.uk/wp-content/uploads/2021/10/openuk-state-of-open_final-version.pdf) 中称，89% 的英国公司正在使用开源技术。这份针对英国的报告还透露，英国是欧洲开源软件的最大贡献者，也是全球第五大贡献者。开源软件每年为英国的国内生产总值贡献 431.5 亿英镑，并在 2020 年为英国企业带来约 465 亿英镑的“潜在价值”。这些报告是基于 2021 年 5 月至 6 月在英国对 273 家企业的调查。

>
> 老王点评：虽然说对开源的认识有种种不同，但是开源已经深入到方方面面，发挥的作用也可能比我们意识到的更大更广。
>
>
>


Linus Torvalds ：开源改变了 Linux, 否则它就完了

Summary: Linux 本来会像其他业余项目一样被抛在后面，但开源改变了这一点。

我们总是愿意听 Torvalds 谈论 Linux。也许这就是领袖吧。

Linux 本来会像其他业余项目一样被抛在后面，但开源改变了这一点。

>
> Linux 本来会像其他业余项目一样被抛在后面，但开源改变了这一点。
>
>
>

![](/data/attachment/album/202110/17/100950k0x7hlv679g40xt6.png)

你可能已经知道这个故事，30 年前，芬兰学生 Linus Torvalds 开发了一个业余项目，创建了一个类 UNIX 操作系统。

你不知道的是，Torvalds 认为这个业余项目已经完成了，他本想把它抛在脑后，做一些新的、有趣的项目。

那么，是什么让他在这个“业余项目”上工作了 30 年呢？答案是开源。

### 开源改变了 Linux

在最近结束的 [北美开源峰会](https://events.linuxfoundation.org/open-source-summit-north-america/) 上，Linus Torvalds 分享了一些关于 Linux 项目过去、现在和未来的见解。

当回忆起这个项目的最初情况时，[Torvalds 说](https://thenewstack.io/linus-torvalds-on-community-rust-and-linuxs-longevity/) 他本以为会以“已完成的状态”抛下 Linux 这个项目，而去做些新的、有趣的事情。

>
> 显然是开源改变了这一切。这个项目，如果是由我来决定，我可能会把它抛在一边，但是突然间，我开始收到各种问题，最后还有人们提交的补丁，这使得我的动力不断持续。现在 30 年过去了，这仍然是动力所在。
>
>
>

Torvalds 还补充说，就他而言，Linux 在过去 29 年里已经完成了。以后添加的每一个其他的功能，都是其他人需要、想要或感兴趣的。

许多开发人员都会遇到这种情况。你在一个项目上工作，认为它已经达到“完成”的状态了，如果这个项目没有足够的吸引力，你就会对它失去兴趣，转而去做一些“新的、有趣的”事情。实际上继续这个项目的真正动力来自用户和认可。

当被问及 Linux 50 周年要做些什么时，Torvalds 说，他不认为自己在 70 岁的时候还能继续做内核编程。然后他还补充说，他也没想过自己在 50 岁还在做内核编程，但他现在却在做这个事情。

>
> “不知何故，我不认为我 70 岁还能做内核编程。但是另一方面，几年前，我也没想到自己 50 岁还在做内核编程，所以……我们拭目以待。”
>
>
>

我们总是愿意听 Torvalds 谈论 Linux，作为一个热心的 Linux 用户，我们还有如此多需要学习和交流的东西！

来源：[The News Stack](https://thenewstack.io/linus-torvalds-on-community-rust-and-linuxs-longevity/)

---

via: <https://news.itsfoss.com/open-source-changed-linux-torvalds/>

作者：[Abhishek](https://news.itsfoss.com/author/root/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zd200572](https://github.com/zd200572) 校对：[wxy](https://github.com/wxy)

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


如何使用 Apache 软件处理实时数据

Summary: 开源以丰富的项目画布引领着处理实时事件的方向。

开源以丰富的项目画布引领着处理实时事件的方向。

>
> 开源以丰富的项目画布引领着处理实时事件的方向。
>
>
>

![](/data/attachment/album/202110/17/105502opl53qrmj950j3mv.jpg "Alarm clocks with different time")

在“永不下线”的未来，入网设备规模可能会达到数十亿。存储原始数据，日后再进行分析的方案将不再能满足需求，因为用户需要实时且准确的响应。要对故障等对环境敏感的状况进行预测，实时处理数据也必不可少 —— 数据到达数据库后再处理肯定是来不及的。

有人可能会说，“云可扩展性”能够满足实时处理流数据的需求，但一些简单的例子就能表明它永远无法满足对无界数据流进行实时响应的需求。从移动设备到物联网，都需要一种新的范式来满足需求。尽管云计算依赖于对大数据“先存储后分析”的方案，但也迫切需要一种能够处理持续、杂乱和海量数据流的软件框架，并在数据流到达时立即对其进行处理，以保证实时的响应、预测和对数据的洞悉。

例如，在加利福尼亚州的帕洛阿尔托市，每天从基础交通设施产生的流数据比 Twitter Firehose 还要多。这是很大的数据量。为 Uber、Lyft 和 FedEx 等消费者预测城市交通需要实时的分析、学习和预测。云处理不可避免地导致每个事件大约会有半秒的延迟。

我们需要一个简单而强大的编程范式，让应用程序在类似下面的情况时能够动态处理无界数据流：

* 数据量巨大，或原始数据的移动成本很高。
* 数据由广泛分布的资产（例如移动设备）生成。
* 数据具有转瞬即逝的价值，即时分析迫在眉睫。
* 需要始终洞悉最新数据情况，外推法行不通。

### 发布和订阅

事件驱动系统领域中有一个关键架构模式：<ruby> 发布/订阅 <rt>  publish/subscribe </rt></ruby> 消息传递模式。这是一种异步通信方法，其中消息会从 *发布者*（数据产生方）传递到 *订阅者*（处理数据的应用程序）。发布/订阅模式可以将消息发送者与消费者分离开来。

在发布/订阅模式中，消息源会 *发布* 针对某个 <ruby> 主题 <rt>  topic </rt></ruby> 的 <ruby> 事件 <rt>  event </rt></ruby> 至 <ruby> 服务端 <rt>  broker </rt></ruby>，后者按接收顺序存储它们。应用程序可以 *订阅* 一个或多个 *主题*，然后 *服务端* 会转发匹配的事件。 Apache Kafka 和 Pulsar 以及 CNCF NATS 是发布/订阅系统。 发布/订阅的云服务包括 Google Pub/Sub、AWS Kinesis、Azure Service Bus、Confluent Cloud 等。（LCTT 译注：本段部分术语英文名称更为泛用，针对这些术语，采用了中英文标注。）

发布/订阅系统不会 *运行* 订阅者应用程序，它们只是 *传递* 数据给相应主题的订阅者。

流数据通常包含应用程序或基础架构状态更新的事件。在选择架构来处理数据时，发布/订阅框架等数据分发系统的作用是有限的。消费者应用程序的“处理方式”超出了发布/订阅系统的范围。这让开发人员的管理变得极具复杂性。所谓的流处理器是一种特殊的订阅者，可以动态分析数据并将结果返回给同一个服务端。

### Apache Spark

[Apache Spark](https://spark.apache.org/) 是用于大规模数据处理的统一分析引擎。通常将 Apache Spark Streaming 用作流处理器，例如给机器学习模型提供新数据。Spark Streaming 将数据分成小批量，每个小批量都由 Spark 模型或其他系统独立分析。事件流可以被分组成小批量以进行分析，但流处理器本身必须具有弹性：

* 流处理器必须能够根据数据速率进行扩展，甚至要能够跨越服务器和云，并且还可以跨实例实现负载均衡，以确保弹性和其他应用层的需求。
* 它必须能够分析来自不同来源的数据，这些数据源的报告速率可能相差很大。这意味着它必须是有状态的，或者将状态存储在数据库中。当使用 Spark Streaming 作为流处理器时，通常会使用后一种方法，这种方法在需要超低延迟响应时可能会存在性能问题。

相关项目 [Apache Samza](https://samza.apache.org/) 也提供了一种处理实时事件流的方法，并使用 [Hadoop Yarn](https://hadoop.apache.org/) 或 [Apache Mesos](http://mesos.apache.org/) 来管理计算资源，以便进行弹性扩展。

### 解决数据扩展问题

需要注意的是，即使是 Samza 也不能完全减轻开发人员的数据处理需求。扩展数据规模意味着处理事件的任务需要跨多个实例进行负载均衡，而使用数据库是实例间共享结果应用层状态的唯一方法。然而，当应用程序任务之间的状态协调转移到数据库时，对性能会产生不可避免的连锁反应。此外，数据库的选择也至关重要。随着系统的扩展，数据库的集群管理会成为下一个潜在的瓶颈。

这个问题可以通过有状态、有弹性的替代方案来解决，并且这样的解决方案可以用来代替流处理器。在应用程序级别（容器或实例内），这些解决方案依据流的更新，动态构建并发、互连的“web 代理”的有状态模型。代理是并发的“微服务”，它们消费单一来源的原始数据并维护它们的状态。基于数据中发现的源之间的真实关系（如包含和临近）,代理实现互连以共享状态。代理也因此形成了一个并发服务图，可以分析它们自己的状态和链接到的代理的状态。数据源将原始数据转换为状态，并根据自身及其链接子图的变化进行分析、学习和预测，每个代理都为单个这样的数据源提供微服务。

这些解决方案允许大量的代理（真实数据源的数字类比）分布，甚至还有在应用层使代理互连的分布式图，从而简化了应用架构。这是因为代理之间互连的本质，是映射到解决方案的当前运行时执行实例和代理本身的 URL。通过这种方式，应用程序可以跨实例无缝扩展，而无需担心 DevOps 问题。代理消费数据并维护状态，还会计算自己和其他代理的状态。由于代理是有状态的，因此不需要数据库，并且数据洞察是以内存速度计算的。

### 使用开源阅读数据世界

我们查看数据的方式正在发生翻天覆地的变化：不再将数据库用作记录系统，取而代之的是现实世界，现实世界事物的数字类比可以不断地传输它们的状态。幸运的是，开源社区在处理实时事件的项目丰富度方面处于领先地位。从发布/订阅模式（其中最活跃的社区是 Apache Kafka、Pulsar 和 CNCF NATS）到持续处理流数据的分析框架，包括 Apache Spark、[Flink](https://flink.apache.org/)、[Beam](https://beam.apache.org)、Samza，以及 Apache 许可的 [SwimOS](https://github.com/swimos/swim) 和 [Hazelcast](https://hazelcast.com/)，对开发人员来说，可选择项目非常之多。可以说，没有什么地方比开源社区的专有软件框架更多了。试看软件的未来，必是开源的天下。

---

via: <https://opensource.com/article/20/2/real-time-data-processing>

作者：[Simon Crosby](https://opensource.com/users/simon-crosby) 选题：[lujun9972](https://github.com/lujun9972) 译者：[unigeorge](https://github.com/unigeorge) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #427 Pine64 宣布最新的 Linux 手机 PinePhone Pro

Summary: 更多：• Python 的多线程速度可能大幅提高 • 佳能被控在打印机缺墨时人为禁用扫描和传真功能

佳能表示：你们这是明知故问啊。

![](/data/attachment/album/202110/17/192047lr2kfo8r5ed0x0yr.jpg)

### Pine64 宣布最新的 Linux 手机 PinePhone Pro

![](/data/attachment/album/202110/17/192056i7zk1mmrmzyy97br.jpg)

[PinePhone Pro](https://www.pine64.org/pinephonepro/) 说是手机有些不确切，从某种意义上来说，它也是一部电脑，是一部运行 Manjaro Linux 的电脑。把它插入显示器，它就是一台低功耗电脑。它所使用的 KDE Plasma Mobile 可以自适应这种手机显示和桌面显示切换的情况。它的主频为 1.5GHz，4GB 内存，128GB 存储。有一个 1300 万像素的主摄像头传感器和一个 500 万像素的前置摄像头，以及一个 6 英寸的 1440 x 720 的 IPS 触摸屏。此外，最重要的是，它提供了绝大多数手机缺少的功能，即硬件的隐私开关，这些藏在后盖的硬件开关可以关闭摄像头、麦克风、Wi-Fi、蓝牙、耳机插孔和 LTE 调制解调器（包括 GPS）等等。最后，它的价格是 399 美元，现在开发者版预定中。

>
> 老王点评：真是有点心动啊。
>
>
>

### Python 的多线程速度可能大幅提高

![](/data/attachment/album/202110/17/192118p8wjlt5tt3r458wz.jpg)

Python 长期以来有一个弱点，它无法在多线程环境中很好地扩展。[开发者提议](https://mail.python.org/archives/list/python-dev@python.org/thread/ABR2L6BENNA6UPSPKV474HCS4LWT26GY/) 对全局解释器锁（GIL）进行重大修改，重写 Python 在其运行时从多个线程对对象进行序列化访问的方式，将大大提升多线程的性能。这一变化的整体效果略微提高了 10% 的单线程性能。但在多线程情况下，每一个新的线程 [几乎是线性扩展的](https://www.infoworld.com/article/3637073/python-stands-to-lose-its-gil-and-gain-a-lot-of-speed.html)，例如，当使用 20 个线程时，基准测试中加速了 18.1 - 19.8 倍。

>
> 老王点评：要是多线程的性能能解决，那就真是一大胜利了。
>
>
>

### 佳能被控在打印机缺墨时人为禁用扫描和传真功能

![](/data/attachment/album/202110/17/192137x1dmpobw2zzznn1c.jpg)

佳能美国公司现在面临着一起 [集体诉讼](https://www.businessinsider.com/canon-printers-class-action-lawsuit-filed-over-printers-2021-10)，指控称，“尽管该打印机被宣传为具有三种不同的功能 —— 打印、复印和扫描，但却都没有警告说所有这些功能都需要墨水。因为在扫描时没有对墨水的实际需要，佳能这样做只是为了增加利润，因此该公司是在进行不当得利的行为。”目前该诉讼还没有被批准为集体诉讼，但如果它被批准并胜诉，任何佳能打印机的买家都可能获得赔偿。

>
> 老王点评：凭啥没墨你就不让扫描？
>
>
>


龙蜥操作系统：又一个 Linux 操作系统？

Summary: Anolis OS != Another Linux OS

那 Alibaba Cloud Linux 是不是要放弃了?

所以这篇文章是介绍阿里作为这系统的用户，是多么强大以及提供了多么丰富的实验数据。<br />
顺带给“套壳”重新下个定义。

![](/data/attachment/album/202110/18/171501a0xlcqcfoa8m081q.jpg)

### 故事的开始

自从 CentOS 宣布 CentOS 8 将成为绝响，业界在一片叹息和抗议之后，纷纷易弦更张，寻找别的替代品。这之后，开源社区和业界对 CentOS Stream 的讨论并没有如预期的增加。除了偶尔成立的几个 Stream SIG 还能引来一些关注，很多人都已经将目光放到了其它的替代品上了，尤其是采用了兼容 RHEL/CentOS 技术路线的几个国内外 Linux 发行版，在很短的时间内就获得了快速发展和极大关注。

在这个形势之下，国内有几家以企业服务市场为目标的“新” Linux 发行版纷纷涌现。其实说“新”也不新，这些发行版大多沿袭自它们的发行商原本的企业内的定制分支，甚至有的发行版在 CentOS 停更之前就公开发布过。但说它们“新”是因为在新的机遇之下，这些发行版一改过去低调发展、克制迭代的风格，更主动地拥抱了市场和迭代新技术，并将其投放到更大的用户市场。

这里，我们要谈谈其中一个值得注意的企业级操作系统：龙蜥操作系统（Anolis OS）。作为由阿里巴巴所孵化出来，并迅速拥有了多家核心企业支持的 Linux 发行版，显然是很具有话题性和影响力的，也不可避免的会遇到一些争议和观察。为此，我带上问题和龙蜥社区的理事长马涛聊了聊关于龙蜥操作系统背后的那些事情。

### 磨一剑，需十年

龙蜥操作系统并不是一个凭空诞生的发行版，相反，龙蜥操作系统更像是阿里巴巴十年磨一剑的产物，也是阿里巴巴和以统信及三大运营商等为代表的多家企业的技术沉淀。

早在十年前，淘宝内核组就基于 Linux 内核打造了一个阿里云内部使用的 Linux 发行版。而随着阿里巴巴集团业务的扩大，淘宝内核组从过去只服务于淘宝内部，变成了如今的阿里云智能基础软件部，将过去只为阿里巴巴内部提供服务的技术，开放给了更广泛的开发者使用。也正是因为这样的变化，促成了龙蜥操作系统的诞生。

**龙蜥操作系统最大的特色是除了社区多家生态企业的联合推动，还有不少来自阿里巴巴及其用户的多年技术实践的沉淀。**

在系统安全方面，除了基于阿里云在网络安全领域的积累而做的操作系统层面的加固外，龙蜥操作系统还提供了基于 OpenSSL 衍生的 BabaSSL，为龙蜥操作系统提供了诸如国密算法、QUIC API 等特性。它还内置了首个机密计算开源容器 Inclavare Containers，后者刚刚被捐赠给 CNCF 基金会孵化。这样，在安全方面龙蜥操作系统从根本上奠定了解决可信、可控问题的基础。

在系统管理方面，龙蜥操作系统则提供了一个全栈覆盖内核与核心组件的跟踪和诊断工具 sysAK，增强龙蜥操作系统在系统层面和应用层面的可观测性和可靠性，让业务的监控和诊断更加简单易用。

此外， 还有 Java 虚拟机 Dragonwell、PolarDB、OceanBase等一系列阿里巴巴自研的技术，都可以在龙蜥操作系统中找到身影。

可以看出，阿里巴巴是想将龙蜥操作系统打造成一艘承载着阿里巴巴在 Linux 技术方面多年积淀的旗舰。

### 一个字，“稳”

**对于龙蜥操作系统来说，稳定是第一要素。那就要看，龙蜥操作系统为何这么稳定？**

得益于淘宝和阿里云多年的打磨，历经多年的双十一大促、阿里云流量暴涨等事件的打磨，如今的龙蜥操作系统在稳定这件事情上，做到了极致。

龙蜥操作系统，是在国家有关主管部委的指导下，以阿里云为牵头单位，联合统信软件等多家专业操作系统厂商、多家芯片厂商和大行业用户共同推出的。这意味着它的演进速度、演进场景完全不同。相比于传统的操作系统场景，龙蜥操作系统的演进往往是在各种大型流量和大量用户群的场景下催生的。

![](/data/attachment/album/202110/18/170945zntlfuvzjmfje0uj.jpg)

*CentOS 主流版本与Anolis OS 衍生版宕机率对比 出处：阿里云*

通过在真实的业务流量场景下运行龙蜥操作系统，并在发现问题后及时修复，将更新推送到最新的龙蜥操作系统。它背后的阿里云，为龙蜥操作系统的迭代和升级提供了海量的修复案例，帮助它在更多问题发生之前就将其解决掉。

如果我们将龙蜥操作系统和一些传统发行版的厂商相比，龙蜥操作系统更像是通过开源的范式来开发的一个操作系统：**通过将操作系统放在海量的应用场景和实战场景下，去尽可能多地发现问题、修复问题。**而传统发行版厂商则更像是发现一个问题，修复一个问题，见招拆招地处理问题。虽然也会有定期的修复升级，但发现问题的频率和对迭代的诉求，显然和拥有海量应用场景的龙蜥操作系统不同。

### 套壳还是换芯？

作为一个追求稳定的发行版，龙蜥操作系统成为 CentOS 转为 Stream 模式后的一个不可忽视的选择。也让 龙蜥操作系统成为了众矢之的：“既然宣称兼容 CentOS，那是不是就是 CentOS 套壳？”

我用这么一个尖锐的问题，来寻求马涛的答复。他没有顾左右而言他，直接了当地给出了他的答复：**“****兼容不仅仅不是套壳，更是技术能力强的体现****”**，并进一步解释到：**“****兼容性并不是一句简单的大白话，背后包括了一整套兼容性分析体系，比如对语言运行时的分析、对系统参数和行为的分析、对内核的接口分析等等，是一个贯穿操作系统、从上到下的超级工程。另一方面，龙蜥操作系统是一个面向企业提供服务的发行版，稳定是第一要素。而对于目前的** **CentOS** **用户来说，我们如果无法提供对** **CentOS** **的兼容，又有哪个企业敢于选择龙蜥操作系统呢？****”**

其实每一次提起国产的 Linux 发行版，难免都会提及“套壳”这个话题。也正好借着龙蜥操作系统的话题，来聊聊这个事情。

到底什么才是“套壳”？我们似乎一直都没有一个明确的定义，难道说用了 Linux 内核就是 Linux 的“套壳”么？显然不是的。那所有使用 RPM 包的发行版都是 CentOS “套壳”么？答案显然也是否定的。

其实从 Linux 的发行版的发展来看，所有的发行版几乎都可以称之为“套壳”，除了 Arch Linux 、Gentoo 等几个少数的发行版以外，大部分都在使用 Deb 、RPM 打包系统，很难跳出这两个包管理器的世界，难道说这世界上只有两个发行版么？

对于 Linux 发行版来说，我们如果真的要定义“套壳”，应该说那些是“基于某一个发行版，替换一下主题，更新一下软件，替换一些字眼”的发行版才是“套壳”，而我们看到的，像 SESL、openSUSE 之类的这些发行版，它们更多是延续社区的成功经验，沿袭 CentOS 既有的技术方向，但独立发展，独立迭代的独立发行版。

### Anolis OS != Another Linux OS

所以，我们认为，龙蜥操作系统不是“又一个 Linux 操作系统”。一方面，这不是“又一个简单复制”，套个壳的 Linux 发行版；另一方面，龙蜥操作系统承载的也不仅仅是 Linux 操作系统，在其上还搭载着各种安全、容器、应用服务等最新技术，是一艘久经风浪的、稳定的不沉之舟。

>
> 花絮：我问马涛，到底龙蜥操作系统的英文名称 “Anolis OS” 是什么缩写？他说：**Anolis is Not Only LInux System**。嗯，这很 GNU（is Not Unix）！
>
>
>

### 支持，还是支持

CentOS Linux 的落幕，源自其失去了企业的支持，源自单方面的付出没有回报让企业失去了支持下去的勇气。而这个问题，其实对于任何一个发行版来说，都是存在的。龙蜥操作系统能够获得什么样的长期支持，才是它长期发展下去的原生动力。

就此问题，我对马涛进行了“逼问”，**龙蜥操作系统可以承诺多少年的支持？**

马涛给了我一个明确的承诺：**10** **年！**


C 语言编程中的 5 个常见错误及对应解决方案

Summary: 增强 C 语言程序的弹性和可靠性的五种方法。

增强 C 语言程序的弹性和可靠性的五种方法。

>
> 增强 C 语言程序的弹性和可靠性的五种方法。
>
>
>

![](/data/attachment/album/202110/18/174123p4cz99skp9zz4nf4.jpg "Bug tracking magnifying glass on computer screen")

即使是最好的程序员也无法完全避免错误。这些错误可能会引入安全漏洞、导致程序崩溃或产生意外操作，具体影响要取决于程序的运行逻辑。

C 语言有时名声不太好，因为它不像近期的编程语言（比如 Rust）那样具有内存安全性。但是通过额外的代码，一些最常见和严重的 C 语言错误是可以避免的。下文讲解了可能影响应用程序的五个错误以及避免它们的方法：

### 1、未初始化的变量

程序启动时，系统会为其分配一块内存以供存储数据。这意味着程序启动时，变量将获得内存中的一个随机值。

有些编程环境会在程序启动时特意将内存“清零”，因此每个变量都得以有初始的零值。程序中的变量都以零值作为初始值，听上去是很不错的。但是在 C 编程规范中，系统并不会初始化变量。

看一下这个使用了若干变量和两个数组的示例程序：

```
#include <stdio.h>
#include <stdlib.h>

int
main()
{
  int i, j, k;
  int numbers[5];
  int *array;

  puts("These variables are not initialized:");

  printf("  i = %d\n", i);
  printf("  j = %d\n", j);
  printf("  k = %d\n", k);

  puts("This array is not initialized:");

  for (i = 0; i < 5; i++) {
    printf("  numbers[%d] = %d\n", i, numbers[i]);
  }

  puts("malloc an array ...");
  array = malloc(sizeof(int) * 5);

  if (array) {
    puts("This malloc'ed array is not initialized:");

    for (i = 0; i < 5; i++) {
      printf("  array[%d] = %d\n", i, array[i]);
    }

    free(array);
  }

  /* done */

  puts("Ok");
  return 0;
}

```

这个程序不会初始化变量，所以变量以系统内存中的随机值作为初始值。在我的 Linux 系统上编译和运行这个程序，会看到一些变量恰巧有“零”值，但其他变量并没有：

```
These variables are not initialized:
  i = 0
  j = 0
  k = 32766
This array is not initialized:
  numbers[0] = 0
  numbers[1] = 0
  numbers[2] = 4199024
  numbers[3] = 0
  numbers[4] = 0
malloc an array ...
This malloc'ed array is not initialized:
  array[0] = 0
  array[1] = 0
  array[2] = 0
  array[3] = 0
  array[4] = 0
Ok

```

很幸运，`i` 和 `j` 变量是从零值开始的，但 `k` 的起始值为 32766。在 `numbers` 数组中，大多数元素也恰好从零值开始，只有第三个元素的初始值为 4199024。

在不同的系统上编译相同的程序，可以进一步显示未初始化变量的危险性。不要误以为“全世界都在运行 Linux”，你的程序很可能某天在其他平台上运行。例如，下面是在 FreeDOS 上运行相同程序的结果：

```
These variables are not initialized:
  i = 0
  j = 1074
  k = 3120
This array is not initialized:
  numbers[0] = 3106
  numbers[1] = 1224
  numbers[2] = 784
  numbers[3] = 2926
  numbers[4] = 1224
malloc an array ...
This malloc'ed array is not initialized:
  array[0] = 3136
  array[1] = 3136
  array[2] = 14499
  array[3] = -5886
  array[4] = 219
Ok

```

永远都要记得初始化程序的变量。如果你想让变量将以零值作为初始值，请额外添加代码将零分配给该变量。预先编好这些额外的代码，这会有助于减少日后让人头疼的调试过程。

### 2、数组越界

C 语言中，数组索引从零开始。这意味着对于长度为 10 的数组，索引是从 0 到 9；长度为 1000 的数组，索引则是从 0 到 999。

程序员有时会忘记这一点，他们从索引 1 开始引用数组，产生了<ruby> “大小差一” <rt>  off by one </rt></ruby>错误。在长度为 5 的数组中，程序员在索引“5”处使用的值，实际上并不是数组的第 5 个元素。相反，它是内存中的一些其他值，根本与此数组无关。

这是一个数组越界的示例程序。该程序使用了一个只含有 5 个元素的数组，但却引用了该范围之外的数组元素：

```
#include <stdio.h>
#include <stdlib.h>

int
main()
{
  int i;
  int numbers[5];
  int *array;

  /* test 1 */

  puts("This array has five elements (0 to 4)");

  /* initalize the array */
  for (i = 0; i < 5; i++) {
    numbers[i] = i;
  }

  /* oops, this goes beyond the array bounds: */
  for (i = 0; i < 10; i++) {
    printf("  numbers[%d] = %d\n", i, numbers[i]);
  }

  /* test 2 */

  puts("malloc an array ...");

  array = malloc(sizeof(int) * 5);

  if (array) {
    puts("This malloc'ed array also has five elements (0 to 4)");

    /* initalize the array */
    for (i = 0; i < 5; i++) {
      array[i] = i;
    }

    /* oops, this goes beyond the array bounds: */
    for (i = 0; i < 10; i++) {
      printf("  array[%d] = %d\n", i, array[i]);
    }

    free(array);
  }

  /* done */

  puts("Ok");
  return 0;
}

```

可以看到，程序初始化了数组的所有值（从索引 0 到 4），然后从索引 0 开始读取，结尾是索引 9 而不是索引 4。前五个值是正确的，再后面的值会让你不知所以：

```
This array has five elements (0 to 4)
  numbers[0] = 0
  numbers[1] = 1
  numbers[2] = 2
  numbers[3] = 3
  numbers[4] = 4
  numbers[5] = 0
  numbers[6] = 4198512
  numbers[7] = 0
  numbers[8] = 1326609712
  numbers[9] = 32764
malloc an array ...
This malloc'ed array also has five elements (0 to 4)
  array[0] = 0
  array[1] = 1
  array[2] = 2
  array[3] = 3
  array[4] = 4
  array[5] = 0
  array[6] = 133441
  array[7] = 0
  array[8] = 0
  array[9] = 0
Ok

```

引用数组时，始终要记得追踪数组大小。将数组大小存储在变量中；不要对数组大小进行<ruby> 硬编码 <rt>  hard-code </rt></ruby>。否则，如果后期该标识符指向另一个不同大小的数组，却忘记更改硬编码的数组长度时，程序就可能会发生数组越界。

### 3、字符串溢出

字符串只是特定类型的数组。在 C 语言中，字符串是一个由 `char` 类型值组成的数组，其中用一个零字符表示字符串的结尾。

因此，与数组一样，要注意避免超出字符串的范围。有时也称之为 *字符串溢出*。

使用 `gets` 函数读取数据是一种很容易发生字符串溢出的行为方式。`gets` 函数非常危险，因为它不知道在一个字符串中可以存储多少数据，只会机械地从用户那里读取数据。如果用户输入像 `foo` 这样的短字符串，不会发生意外；但是当用户输入的值超过字符串长度时，后果可能是灾难性的。

下面是一个使用 `gets` 函数读取城市名称的示例程序。在这个程序中，我还添加了一些未使用的变量，来展示字符串溢出对其他数据的影响：

```
#include <stdio.h>
#include <string.h>

int
main()
{
  char name[10];                       /* Such as "Chicago" */
  int var1 = 1, var2 = 2;

  /* show initial values */

  printf("var1 = %d; var2 = %d\n", var1, var2);

  /* this is bad .. please don't use gets */

  puts("Where do you live?");
  gets(name);

  /* show ending values */

  printf("<%s> is length %d\n", name, strlen(name));
  printf("var1 = %d; var2 = %d\n", var1, var2);

  /* done */

  puts("Ok");
  return 0;
}

```

当你测试类似的短城市名称时，该程序运行良好，例如伊利诺伊州的 `Chicago` 或北卡罗来纳州的`Raleigh`：

```
var1 = 1; var2 = 2
Where do you live?
Raleigh
<Raleigh> is length 7
var1 = 1; var2 = 2
Ok

```

威尔士的小镇 `Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch` 有着世界上最长的名字之一。这个字符串有 58 个字符，远远超出了 `name` 变量中保留的 10 个字符。结果，程序将值存储在内存的其他区域，覆盖了 `var1` 和 `var2` 的值：

```
var1 = 1; var2 = 2
Where do you live?
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
<Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch> is length 58
var1 = 2036821625; var2 = 2003266668
Ok
Segmentation fault (core dumped)

```

在运行结束之前，程序会用长字符串覆盖内存的其他部分区域。注意，`var1` 和 `var2` 的值不再是起始的 `1` 和 `2`。

避免使用 `gets` 函数，改用更安全的方法来读取用户数据。例如，`getline` 函数会分配足够的内存来存储用户输入，因此不会因输入长值而发生意外的字符串溢出。

### 4、重复释放内存

“分配的内存要手动释放”是良好的 C 语言编程原则之一。程序可以使用 `malloc` 函数为数组和字符串分配内存，该函数会开辟一块内存，并返回一个指向内存中起始地址的指针。之后，程序可以使用 `free` 函数释放内存，该函数会使用指针将内存标记为未使用。

但是，你应该只使用一次 `free` 函数。第二次调用 `free` 会导致意外的后果，可能会毁掉你的程序。下面是一个针对此点的简短示例程序。程序分配了内存，然后立即释放了它。但为了模仿一个健忘但有条理的程序员，我在程序结束时又一次释放了内存，导致两次释放了相同的内存：

```
#include <stdio.h>
#include <stdlib.h>

int
main()
{
  int *array;

  puts("malloc an array ...");

  array = malloc(sizeof(int) * 5);

  if (array) {
    puts("malloc succeeded");

    puts("Free the array...");
    free(array);
  }

  puts("Free the array...");
  free(array);

  puts("Ok");
}

```

运行这个程序会导致第二次使用 `free` 函数时出现戏剧性的失败：

```
malloc an array ...
malloc succeeded
Free the array...
Free the array...
free(): double free detected in tcache 2
Aborted (core dumped)

```

要记得避免在数组或字符串上多次调用 `free`。将 `malloc` 和 `free` 函数定位在同一个函数中，这是避免重复释放内存的一种方法。

例如，一个纸牌游戏程序可能会在主函数中为一副牌分配内存，然后在其他函数中使用这副牌来玩游戏。记得在主函数，而不是其他函数中释放内存。将 `malloc` 和 `free` 语句放在一起有助于避免多次释放内存。

### 5、使用无效的文件指针

文件是一种便捷的数据存储方式。例如，你可以将程序的配置数据存储在 `config.dat` 文件中。Bash shell 会从用户家目录中的 `.bash_profile` 读取初始化脚本。GNU Emacs 编辑器会寻找文件 `.emacs` 以从中确定起始值。而 Zoom 会议客户端使用 `zoomus.conf` 文件读取其程序配置。

所以，从文件中读取数据的能力几乎对所有程序都很重要。但是假如要读取的文件不存在，会发生什么呢？

在 C 语言中读取文件，首先要用 `fopen` 函数打开文件，该函数会返回指向文件的流指针。你可以结合其他函数，使用这个指针来读取数据，例如 `fgetc` 会逐个字符地读取文件。

如果要读取的文件不存在或程序没有读取权限，`fopen` 函数会返回 `NULL` 作为文件指针，这表示文件指针无效。但是这里有一个示例程序，它机械地直接去读取文件，不检查 `fopen` 是否返回了 `NULL`：

```
#include <stdio.h>

int
main()
{
  FILE *pfile;
  int ch;

  puts("Open the FILE.TXT file ...");

  pfile = fopen("FILE.TXT", "r");

  /* you should check if the file pointer is valid, but we skipped that */

  puts("Now display the contents of FILE.TXT ...");

  while ((ch = fgetc(pfile)) != EOF) {
    printf("<%c>", ch);
  }

  fclose(pfile);

  /* done */

  puts("Ok");
  return 0;
}

```

当你运行这个程序时，第一次调用 `fgetc` 会失败，程序会立即中止：

```
Open the FILE.TXT file ...
Now display the contents of FILE.TXT ...
Segmentation fault (core dumped)

```

始终检查文件指针以确保其有效。例如，在调用 `fopen` 打开一个文件后，用类似 `if (pfile != NULL)` 的语句检查指针，以确保指针是可以使用的。

人都会犯错，最优秀的程序员也会产生编程错误。但是，遵循上面这些准则，添加一些额外的代码来检查这五种类型的错误，就可以避免最严重的 C 语言编程错误。提前编写几行代码来捕获这些错误，可能会帮你节省数小时的调试时间。

---

via: <https://opensource.com/article/21/10/programming-bugs>

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

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


如何在 Debian 和 Kali Linux 上安装 Chrome 浏览器

>
> Debian 和基于 Debian 的 Kali Linux 将 Firefox 作为默认的网页浏览器。但这并不意味着你不能在其中安装其他网页浏览器。
>
>
>

![](/data/attachment/album/202110/18/175716cfvxnvf05b5je1ax.jpg)

Chrome 浏览器非常流行，你可能已经在其他系统上使用它了。如果你想在 Debian 上安装 Chrome，你肯定可以这样做。

你在 Debian 的软件库中找不到 Chrome，因为它不是开源软件，但你可以从 Chrome 网站下载并安装它。

在本教程中，我将向你展示在 Debian 上安装 Chrome 的两种方法：

* GUI 方法
* 命令行方法

让我们先从 GUI 方法开始。

>
> 注意：我在这里的例子中使用的是 Debian，但由于 Kali Linux 是基于 Debian 的，所以同样的方法也适用于 Kali Linux。
>
>
>

### 方法 1: 在 Debian 上以图形方式安装 Chrome 浏览器

这是一个不费吹灰之力的方法。你去 Chrome 网站，下载 deb 文件，然后双击它来安装它。我将详细地展示这些步骤，这样你就能很容易地掌握了。

前往 Chrome 的网站。

[Get Google Chrome](https://www.google.com/chrome/)

你会看到下载 Chrome 的选项。

![Click on the Download Chrome button](/data/attachment/album/202110/18/175725iz9ccliceep0m8vp.jpg)

当你点击下载按钮时，它会给你两个下载安装文件的选项。选择写着 Debian/Ubuntu 的那个。

![Download the Chrome installer file for Debian](/data/attachment/album/202110/18/175725pax5x8ph8xhxhz8p.jpg)

**请注意，Chrome 浏览器不适用于 32 位系统。**

接下来，你应该选择将文件保存到电脑中，而不是在软件中心打开进行安装。这样一来，下载的文件将被保存在下载文件夹中，而不是临时目录中。

![Save the downloaded DEB file for Google Chrome](/data/attachment/album/202110/18/175726ds1mmsmzvvmvn8v1.jpg)

进入下载文件夹，右击下载的 DEB 文件，选择用 “Software Install” 打开它。

![Right click on the downloaded DEB file and open with Software Install](/data/attachment/album/202110/18/175726yqgcvh3anu3oauv6.jpg)

它将打开软件中心，你应该看到现在安装 Chrome 浏览器的选项。点击安装按钮。

![Click on the install button](/data/attachment/album/202110/18/175726x74uaj9z73mjb4h3.jpg)

你会被要求输入账户的密码。这是你用来登录系统的同一密码。

![Enter your account’s password](/data/attachment/album/202110/18/175726a7fh0voere7lo89m.jpg)

在不到一分钟的时间里，Chrome 就会安装完毕。你现在应该看到一个删除选项，这表明软件已经安装完毕。

![Chrome is now installed](/data/attachment/album/202110/18/175727klpw3cv1eszi5q1w.png)

当 Chrome 在 Debian 上安装完毕，在系统菜单中搜索它并启动它。

![Start Google Chrome](/data/attachment/album/202110/18/175727xrqpybukyaaybqby.jpg)

它将要求成为你的默认浏览器，并将崩溃报告发送给谷歌。你可以取消勾选这两个选项。然后你就可以看到谷歌浏览器的窗口。

![](/data/attachment/album/202110/18/175727n0x8aq2ix2swkvc0.jpg)

如果你登录了你的谷歌账户，你应该可以在这里同步你的密码、书签和其他浏览数据。好好体验吧！

还有一点，安装完 Chrome 后，你可以从系统中删除下载的 DEB 文件。不再需要它了，甚至在卸载 Chrome 时也不需要。

### 方法 2：在 Debian 上从终端安装 Chrome

你刚才看到的内容可以在终端中轻松实现。

首先，确保你的软件包缓存已经刷新，并且你已经安装了 `wget`，用于 [在终端中从网上下载文件](https://itsfoss.com/download-files-from-linux-terminal/)。

```
sudo apt update && sudo apt install wget

```

接下来是下载 Chrome 的 .deb 文件。

```
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

```

下载后，你可以用 `apt` 命令 [在终端安装 deb 文件](https://itsfoss.com/install-deb-files-ubuntu/)，像这样：

```
sudo apt install ./google-chrome-stable_current_amd64.deb

```

安装完成后，你就可以开始使用 Chrome 了。

### 额外提示：更新 Chrome

这两种方法都会将谷歌的软件库添加到你的系统中。你可以在你的 `sources.list.d` 目录中看到它：

```
cat /etc/apt/sources.list.d/google-chrome.list

```

这意味着 Chrome 将与 Debian 和 Kali Linux 中的其他系统更新一起被更新。你知道 [如何在命令行中更新你的 Kali Linux](https://linuxhandbook.com/update-kali-linux/) 或 Debian 系统么？只要使用这个命令：

```
sudo apt update && sudo apt upgrade -y

```

### 从你的系统中卸载 Chrome

即使你选择用 GUI 方法在 Debian 上安装 Chrome，你也必须使用终端来删除它。

不要担心。这其实只是一个命令：

```
sudo apt purge google-chrome-stable

```

根据要求输入你的账户密码。当你输入密码时，屏幕上没有任何显示。这没关系。输入它并按回车键，确认删除。

![](/data/attachment/album/202110/18/175727owyyskokkodzhwto.jpg)

好了，就这些了。我希望你觉得这个教程有帮助。

---

via: <https://itsfoss.com/install-chrome-debian-kali-linux/>

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

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


硬核观察 #428 月球准备上线

Summary: 更多：• 研究发现拼车服务增加了污染和拥堵 • 爱丁堡大学的计算机老师正在考虑从课程中去掉 Alice 和 Bob

我感觉叫老王也挺好：）哈哈

老王：））

![](/data/attachment/album/202110/18/195025ggo474p3tgt4f334.jpg)

### 月球准备上线

![](/data/attachment/album/202110/18/195038a3f63j2pcp922wjz.jpg)

NASA 将在月球建立一个 [名为 LunaNet 的月球互联网](https://www.autoevolution.com/news/connectivity-in-space-the-moon-will-soon-have-its-own-internet-171863.html)，以类似 Wi-Fi 连接方式与月球表面和月球周围的宇航员进行通信。LunaNet 还将使用空间天气仪器识别潜在的危险太阳活动，宇航员将能直接收到警报，而不用通过地球中转。研究人员还可以利用 LunaNet 的天线“注视”太空并搜索来自遥远天体的无线电信号。NASA 最近发布了“LunaNet 互操作性规范草案”，准备启动新“月球互联网”的开发。NASA 计划在 2024 年重返月球。

>
> 老王点评：叮，你的月球好友已上线。
>
>
>

### 研究发现拼车服务增加了污染和拥堵

![](/data/attachment/album/202110/18/195056vmy35qtu9jvikkzi.jpg)

Uber 等拼车公司长期坚称它们的服务对环境有益，部分原因是它们减少了短途旅行的需要，聚集了要去大致相同方向的人，减少了不必要的行驶里程。[一项研究表明](https://www.nytimes.com/2021/10/17/opinion/uber-lyft.html)，Uber 的拼车服务确实可以减少冷车启动时排放的大量污染物，有助于减少空气污染。然而由于司机需要兜圈等待或者接载下一位乘客（此种情况被称为空驶），这种好处被抵消了。据估计，在 2019 年，在美国的六个城市，空驶里程大约相当于总拼车里程的 40%，相比私家车出行，没有乘客的空驶会导致总的燃料消耗和温室气体排放增加大约 20%。此外，由于拼车服务增加了交通拥堵、碰撞和噪声，典型出行的外部成本增加了 30% 到 35%。这些成本是由整个社会承担的。

>
> 老王点评：很多事情表面上看起来有利，但是结果往往背道而驰。
>
>
>

### 爱丁堡大学的计算机老师正在考虑从课程中去掉 Alice 和 Bob

![](/data/attachment/album/202110/18/195113ll55o9jvhelkkjve.jpg)

苏格兰爱丁堡大学信息学学院的一个工作组提出了 [一系列步骤](https://www.theregister.com/2021/10/15/computer_scientist_terminology/)，以使信息学课程“非殖民化”，其中包括尝试“避免使用主要是西方的名字，如在计算机安全文献中很常见的 [Alice 和 Bob](https://en.wikipedia.org/w/index.php?title=Alice_and_Bob&oldid=1048184437)。”Alice 和 Bob 的名字被用来代表一个公钥密码系统的两个用户，著名的 RSA 在 1978 年发表的一篇论文《一种获得数字签名和公钥密码系统的方法》中就使用了它们。而从那时起，在相关的学术论文中惯例采用各种西方的名字来说明计算机安全的情况，如 Eve 扮演一个拦截通信的窃听者。

>
> 老王点评：要不，叫张三、李四如何？
>
>
>


浅谈主机名

Summary: 主机名是人类用来指代特定计算机的标签。

你的名字可太草了hhh

主机名是人类用来指代特定计算机的标签。

>
> 主机名是人类用来指代特定计算机的标签。
>
>
>

![](/data/attachment/album/202110/19/134329lwni9tlq9h3u4f4o.jpg "Computer screen with files or windows open")

计算机有网络地址，但人类通常很难记住它们。主机名是帮助人类参考特定计算机的标签。例如，你可能不会导航到 `192.168.1.4`，而是导航到 `linuxlaptop` 或 `linuxlaptop.local`。

### 地址和名称

所有联网的计算机（也被称为<ruby> 主机 <rt>  host </rt></ruby>）都需要一个地址：一个与之相关的唯一数字，以使数据报文能够在它们之间进行正确的数据通信。这就是所谓的<ruby> 互联网协议 <rt>  Internet Protocol </rt></ruby>（IP）地址。数字 `54.204.39.132` 是一个<ruby> 互联网协议第四版 <rt>  Internet Protocol version 4 </rt></ruby>（IPv4）地址。较新的 IPv6 地址要长得多，像这样：`2001:0db6:3c4d:0017:0000:0000:2a2f:1a2b`。 哇！这将是很难记住的！

```
$ ip addr show

```

计算机也可以被赋予标签。被称为<ruby> 主机名 <rt>  hostname </rt></ruby>，这些是友好的名称，便于参考。我可以把我的计算机的主机名设置为 `copperhead`。只要这个名字在网络上是唯一的，所有其他用户和计算机都可以把 `copperhead` 作为地址，而不是 IP 地址。

```
$ hostname -s

```

你可以更新你的计算机的主机名。

阅读 Seth Kenlon 的文章 [如何在 Linux 上更改主机名](https://opensource.com/article/21/10/how-change-hostname-linux)，了解如何在 Linux 上这样做。

#### 完全限定域名

从技术上讲，主机名包括一个域名。如果我的域名是 `mycompany.com`，那么我的计算机的主机名是 `copperhead.mycompany.com`，以句点分隔。这就形成了一个<ruby> 完全限定域名 <rt>  fully qualified domain name </rt></ruby>（FQDN）。这很重要，因为 IP 地址可以解析为 FQDN。

```
host.domain.topleveldomain

```

例如：`www.example.com` 是一个完全限定域名。

你的域名一般已经确定了，所以你只负责提供主机部分。本文的重点是主机。

#### 名称解析

将 IP 地址转换为相应的主机名的过程被称为名称解析。这个过程首先发生在本地主机表中。Linux 使用文件 `/etc/hosts` 来存储这个表。

```
cat /etc/hosts

```

还有一个分层的、去中心化的基于网络的系统提供解析，称为<ruby> 域名系统 <rt>  Domain Name System </rt></ruby>（DNS）。这时 FQDN 变得非常重要。

```
$ dig www.opensource.com

```

### 名称的乐趣

为我们的计算机起名字可能很有趣。如果你有很多，你可以使用一个主题。我曾经为一家公司工作，该公司将所有的服务器都以蛇命名。

后来我工作的一家公司，我是一个数据中心经理，使用啤酒品牌。当我们收到一个新的服务器时，这很令人兴奋，因为我会给开发团队发邮件征求建议。我们大约有 100 台服务器。这些提供了一个有趣的清单，反映了公司的多样性。我们有从库尔斯和百威到阿姆斯特尔和浅粉象的一切。我们有虎牌啤酒、胜狮啤酒和札幌啤酒等等！

我们认为这很酷！然后，想象一下，当你试图记住卢云堡是拥有最多内存的虚拟化服务器，佩罗尼是 SQL 数据库服务器，喜力是新的域控制器时，会发生什么，特别是对于一个快速发展的公司的新员工。

### 惯例

当然，主机名是所有者的选择，所以请尽情发挥。然而，根据环境的不同，使用容易记忆的名字或基于命名惯例的名字可能更有意义，因为这些名字有利于描述主机。

#### 有用的名字

如果你想放弃有趣的东西，并对你的系统进行有益的命名，也许可以考虑它们的功能。数据库服务器可以被命名为 `database1`、`database2`、`database3` 等等。Web 服务器可以命名为 `webserver1`、`webserver2` 等等。

#### 位置名称

我在许多客户那里使用了一种技术，用一组字符的位置来命名服务器主机，这些字符描述了该系统的一个方面，有助于识别。例如，如果我正在为内政部（DOI）开发一个业务流程管理（BPM）系统，我就会在命名规则中加入他们的缩写词。

此外，就像许多大型企业、金融机构和政府一样，他们可能有不同的数据中心，位于不同的地理位置，以达到性能或灾难恢复的目的。因此，比如说，位于北美大陆东海岸的数据中心被称为 ED（East Data center），而位于西海岸的数据中心则是 WD（West Data center）。

所有这些信息将汇集到一个名称中，如 `doibpm1ed` 或 `doibpm1wd`。因此，虽然这些名字看起来不长，但在这个项目上工作的人可以很容易地识别它们的目的和位置，而且这个名字甚至可以对潜在的恶意者混淆它们的用途。换句话说，业主可以选择只对内部人员有意义的命名方式

### 互联网标准

有几个标准管理着主机名。你可以在<ruby> 互联网工程任务组 <rt>  Internet Engineering Task Force </rt></ruby>（IETF）维护的<ruby> 意见征求 <rt>  Requests for Comment </rt></ruby>（RFC）中找到这些标准。由此，请遵守以下规定：

* 主机名的长度应该在 1 到 63 个 ASCII 字符之间
* 一个 FQDN 的最大长度为 253 个 ASCII 字符
* 不区分大小写
* 允许的字符：`a` 到 `z`，`0` 到 `9`，`-`（连字符），和 `_`（下划线）。

我希望这篇文章能帮助你澄清主机名。玩得开心，发挥创意。

---

via: <https://opensource.com/article/21/10/what-hostname>

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

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


云栖大会 2021 首日亮点：倚天710、“磐久”自研服务器、开源玄铁技术细节

今日阿里云 · 云栖大会 2021 正式开幕， Linux 中国应邀前往杭州云栖小镇，参与云栖大会。

![](/data/attachment/album/202110/19/165318ia6r0dakkazp0jan.jpg)

以下是本次云栖大会首日看点：

### 阿里巴巴旗下半导体公司平头哥发布自研云芯片倚天 710

倚天 710 是业界性能最强的 ARM 服务器芯片，性能超过业界标杆 20%，能效比提升 50% 以上。倚天 710 是阿里云推进“一云多芯”策略的重要一步，也是阿里第一颗为云而生的 CPU 芯片，将在阿里云数据中心部署应用。

![](/data/attachment/album/202110/19/165736m0ksb7munxpksk1b.jpg)

倚天 710 针对云场景的高并发、高性能和高能效需求而设计，将领先的芯片设计技术与云场景的独特需求相结合，最终实现了性能和能效比的突破。目前，阿里云已全面兼容 x86、ARM、RISC-V 等主流芯片架构，自研的倚天 710 进一步丰富了阿里云的底层技术架构，并与飞天操作系统协同，为云上客户提供高性价比的云服务。

### 阿里云正式推出面向云原生时代的采用了倚天 710 的“磐久”自研服务器系列

阿里云将在今年内部署首款搭载自研芯片倚天 710 的磐久高性能计算服务器。

![](/data/attachment/album/202110/19/165737iz4r8ol2q8nzw7wo.jpg)

磐久服务器系列采用灵活模块化设计，可实现计算存储分离，包括高性能计算系列、大容量存储系列、高性能存储系列，且拥有风冷、液冷不同散热模式和归一化的主板，整机柜的设计让交付效率提升 50%，

### 阿里云开源玄铁 RISC-V 系列处理器并开放系列工具及系统软件

玄铁 RISC-V 系列处理器采用自研技术，覆盖从低功耗到高性能的各类场景，支持 AliOS、FreeRTOS、RT-Thread、Linux、Android 等操作系统，并已成功应用于微控制器、工业控制、智能家电、智能电网、图像处理、人工智能、多媒体和汽车电子等领域。

![](/data/attachment/album/202110/19/165738z3cb586c13e5emz3.jpg)

此次开源的玄铁系列 RISC-V 处理器，包括玄铁 E902、E906、C906、C910 等 4 款量产处理器 IP，以及基于玄铁的多操作系统的全栈软件及工具。开发者可通过平头哥 GitHub 和<ruby> <a href="https://occ.t-head.cn/">  芯片开放社区 </a> <rp>  （ </rp> <rt>  Open Chip Community </rt> <rp>  ） </rp></ruby>下载玄铁源代码，在此基础上，实现开源 EDA 协同，创新硬件架构，丰富软件应用生态。

### 总结

本次云栖大会看起来不那么“云”，但又是那么的”云“。说他不像云，是因为发布的都是芯片相关的产品。但像云是因为芯片背后是阿里云对于云计算产业变革的思考。

在阿里云看来，新型计算体系结构正在形成，未来计算将云上迁移。在这种情况下，基于传统场景下设计的芯片就存在了大量的问题。针对云计算场景设计的芯片，将会为整个云计算产业带来不同。


硬核观察 #429 Facebook 将在欧洲雇佣一万人打造 VR 元宇宙

Summary: 更多：• REvil 团伙在其站点被黑后再次陷入了沉寂 • ARM 公司将其芯片设计的虚拟模型放在云端供开发者测试

![](/data/attachment/album/202110/19/171452k5riorb1rvyzvsjk.jpg)

### Facebook 将在欧洲雇佣一万人打造 VR 元宇宙

![](/data/attachment/album/202110/19/171503tgnffbfxhulgw5wh.jpg)

Facebook 计划未来五年内在欧盟范围内 [雇佣 1 万名员工](https://about.fb.com/news/2021/10/creating-jobs-europe-metaverse/)。开发一个从一开始就以欧洲价值观制作的元宇宙。Facebook 希望元宇宙是“一组虚拟空间，你可以与其他不在同一物理空间的人一起创造和探索”。它说，“没有一家公司会拥有和运营元宇宙。像互联网一样，它的关键特征是其开放性和互操作性。”向欧盟寻找人才的另一个原因是，那里的政策制定者正试图确保技术进步仍然符合欧洲的价值观。它在 9 月宣布，将拨出 5000 万美元的专款来建设元宇宙。

>
> 老王点评：元宇宙概念很火，但是元宇宙可能离我们还很远，Facebook 这是个画了一个大饼。
>
>
>

### REvil 团伙在其站点被黑后再次陷入了沉寂

![](/data/attachment/album/202110/19/171524fa06f3el5zap66ce.jpg)

曾致使数千家美国企业感染了勒索软件的 REvil 团伙，在各方打击下曾经在 7 月份销声匿迹。然而 9 月份时，它又再次复出，并攻击了几十家公司。该组织一直在使劲招募壮大自身、并向第三方攻击者兜售其攻击服务。不过，最近安全专家们发现，它的 Tor 支付门户和数据泄露博客被黑后再次转入了沉寂。目前尚不清楚到底是谁破坏了 REvil 的服务器。之前有报道，在 7 月的 Kaseya 攻击事件后，美国联邦调查局就获得了该组织的加密密钥。

>
> 老王点评：[更具体的情况](https://www.zdnet.com/article/revil-ransomware-operators-claim-group-is-ending-activity-again-happy-blog-now-offline/) 就像小说一下，比我这里说的更精彩。
>
>
>

### ARM 公司将其芯片设计的虚拟模型放在云端供开发者测试

![](/data/attachment/album/202110/19/171543wgz4zkkzbffkggb3.jpg)

ARM 的[虚拟硬件产品](https://community.arm.com/arm-community-blogs/b/internet-of-things-blog/posts/introducing-arm-virtual-hardware-for-cloud-based-iot-development) 是名为“ARM 物联网整体解决方案”的新产品组合的一部分。ARM 希望让开发者在物联网应用（如汽车、机器人和冰箱）的编码方面 [取得先机](https://www.theregister.com/2021/10/18/arms_virtual_hardware/)，开发者可以在物理硬件到达他们手中之前编写和测试应用程序。历史上，一切都是按顺序进行的，ARM 向芯片供应商发布芯片设计 IP，在开始开发应用程序之前，需要等待三年。而现在，芯片设计和软件开发几乎可以并行进行，开发者可以在没有硬件的情况下在云中进行。这是 ARM 公司第一次提供虚拟硬件。

>
> 老王点评：这可以大大加快硬件投入生产和应用的时间，希望更多的芯片也可这样做。
>
>
>


《代码英雄》第四季（8）：史蒂夫·沃兹尼亚克轶事

Summary: 史蒂夫·沃兹尼亚克对硬件世界产生了巨大的影响。

史蒂夫·沃兹尼亚克对硬件世界产生了巨大的影响。

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

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

![](/data/attachment/album/202110/19/172609ssz8szakj7qioee5.jpg)

本文是《[代码英雄](https://www.redhat.com/en/command-line-heroes)》系列播客[《代码英雄》第四季（8）：史蒂夫·沃兹尼亚克轶事](https://www.redhat.com/en/command-line-heroes/season-4/steve-wozniak)的[音频](https://cdn.simplecast.com/audio/a88fbe/a88fbe81-5614-4834-8a78-24c287debbe6/64943244-8a71-440e-ad39-d6165ebeac29/clh-s4-ep-woz-vfinal_tc.mp3)脚本。

>
> 导语：<ruby> 史蒂夫·沃兹尼亚克 <rt>  Steve Wozniak </rt></ruby>（即<ruby> 沃兹 <rt>  Woz </rt></ruby>）对硬件世界产生了巨大的影响。第四季介绍了许多他设计、制造、参与，以及受到他的启发的设备。但对沃兹来说，最重要的往往并不是他所创造的设备，而是他如何建造它们。
>
>
> 沃兹讲述了他早期的<ruby> 黑客改造 <rt>  tinkering </rt></ruby>工作如何引发了他对工程的终生热情。他在高中时就开始在 GE 225 上学习计算机知识。很快，他就开始设计改进他想买的电脑，并最终确定了他的口号，即“简洁设计”。这种理念使得他在自制计算机俱乐部看到 Altair 8800 后完成了 Apple I，并为 Apple II 设计了软盘驱动器。但那时他最自豪的是他的工程成就得到了认可，并与世界分享了这些成就。
>
>
>

**00:00:01 - Saron Yitbarek**：

大家好，我是红帽原创播客《代码英雄》的主持人 Saron Yitbarek。如果你在数的话，本季是我们节目的第四季。在这一季中我们带你踏上了一段具有历史性的旅程，走进硬件世界以及那些敢于改变硬件制造传统的团队。从 Eagle 小型机到 GE-225 大型机，从 Altair 8800 到软盘，从 Palm 的掌上电脑到世嘉的电视游戏机，虽然这些机器现在已经过时，被大家所遗忘，但它们为今天的硬件演变和开发者们的发展铺平了道路。

**00:00:44**：

在此过程中，这些机器激发了个人计算机革命、开源软件运动和开源硬件运动，改变了计算机的历史进程。但在我们第四季结束之前，还有一件事要说。

**00:01:03 - <ruby> 史蒂夫·沃兹尼亚克 <rt>  Steve Wozniak </rt></ruby>**：

我是<ruby> 史蒂夫·沃兹尼亚克 <rt>  Steve Wozniak </rt></ruby>，苹果电脑公司的联合创始人。很高兴与您交谈。

![](/data/attachment/album/202110/19/172704yzw9ei49b999uxk4.png)

>
> 三十多年来，史蒂夫·沃兹尼亚克一直在帮助塑造计算机行业。他的早期贡献包括设计苹果公司的第一条产品线：Apple I 和 Apple II。他帮助创建了<ruby> 电子前沿基金会 <rt>  Electronic Frontier Foundation </rt></ruby>（EFF），并且是<ruby> 科技博物馆 <rt>  Tech Museum </rt></ruby>、<ruby> 硅谷芭蕾舞团 <rt>  Silicon Valley Ballet </rt></ruby>和<ruby> 圣何塞儿童探索博物馆 <rt>  Children’s Discovery Museum of San Jose </rt></ruby>的创始赞助商。2017 年，他共同创办了<ruby> 沃兹大学 <rt>  Woz U </rt></ruby>。
>
>
>

**00:01:08 - Saron Yitbarek**：

如果你回想一下本季的前面几集，就会发现史蒂夫·沃兹尼亚克的名字不止出现过一次、两次，而是很多次。这是因为沃兹（这是人们对他的亲切称呼），他不仅经历了那段历史，而且在其中发挥了重要作用。这个非常特别的代码英雄现在坐在这里，和我们谈论他在硬件历史上的亲身经历。让我们先从询问他钟爱的第一件硬件开始。

**00:01:42 - 史蒂夫·沃兹尼亚克**：

在我很小很小的时候，大概是 10 岁，我爱上了一台晶体管收音机，很多年以来，我睡觉的时候都会把它放在枕边播放音乐。这算是第一个，在那之后还经历了许多，在我做过的科学展览中就有几百个不可思议的部件。现在，谈到计算机方面的东西、命令行的东西，在我 10 岁那年，不知何故发现了一本叫做《数字逻辑》的小册子，我用它在纸上涂鸦。在那时我就说，“计算机将会是我一生的挚爱”。

**00:02:19 - Saron Yitbarek**：

20 世纪 60 年代，当史蒂夫·沃兹尼亚克还在上高中的时候，他有机会在通用电气公司（GE）放到他学校的一款电传终端机上试用分时系统，也就是我们在第二集中介绍 GE-225 大型机时讨论过的系统。

**00:02:37 - 史蒂夫·沃兹尼亚克**：

当时既没有书，也没有杂志告诉你“计算机是什么？”。在高中时我得到了……我记得是得到许可……去参与一次测试，测试我们几天前才有的一个小装置。它是一种和分时系统相连的<ruby> 电传打字机 <rt>  teletype </rt></ruby>，在这上面可以运行一些用 BASIC 语言编写的程序。我在上面做了一些实验并且感叹道：“嗯，这个 BASIC 有点简洁。”

**00:02:58 - Saron Yitbarek**：

在他高中的最后一年，沃兹尼亚克的电子老师安排他去加州森尼维尔的一家当地公司 Sylvania 学习如何为他们的计算机编程。

**00:03:10 - 史蒂夫·沃兹尼亚克**：

我的电子老师让我去一家公司，每周用 Fortran 语言在一台 IBM 1170 上编程一次，我想 1170 大概是这台计算机的编号。我当时还没有看到它的架构。但是当有一天我去那里的时候，在一个工程师的桌子上看到有一本叫做《小型计算机手册》的书，描述了 PDP-8 <ruby> 小型计算机 <rt>  minicomputer </rt></ruby>。

**00:03:33 - Saron Yitbarek**：

在第 1 集中，我们介绍了《<ruby> 新机器的灵魂 <rt>  The Soul of a New Machine </rt></ruby>》这本书中讲述的故事，该故事讲述了<ruby> 通用数据公司 <rt>  Data General </rt></ruby>的小型计算机 Eagle 是如何对抗<ruby> 数字设备公司 <rt>  Digital Equipment Corporation </rt></ruby>的小型计算机 VAX 的。PDP-8 是 VAX 的前身，并且也是数字设备公司第一款成功商用的小型计算机。

**00:03:53 - 史蒂夫·沃兹尼亚克**：

他们让我那种那本手册，把它给了我。我把它带回家研究。我的天，这本手册上记录了所有的小寄存器中不同的 1 和 0 代表什么意思，它们意味着什么指令，以及数据是如何存储在内存中的。天哪。于是我开始坐着在纸上写到：“我想知道我是否可以设计一台电脑。”这对我来说是一个重要的开始。我得到了这本小册子，我可以订购手册来获得零件。此时的问题是怎么能找到一家电脑公司，并且得到这家公司的地址呢？

**00:04:19**：

斯坦福直线加速器中心，我开车就能去，世界上最聪明的人都不锁门（所以那里会开着门）。我会在周日去，在他们的主楼里走走。我在那里的二楼找到了图书馆，坐了下来，那里有计算机方面的期刊和杂志，你也可以在图书馆中的小卡片上订购手册。我订购了一本通用数据公司的手册，它显示了总裁、运营主管、软件与工程主管的鼎鼎大名。但你知道那不是我想要的。

**00:04:51**：

我想要知道 1 和 0 的含义。在最后一页，它展示了一条指令，那是一条算术指令。我习惯于每台电脑都有 56 条指令。每个指令，每一个小比特，都有各自小的含义。一个比特可能代表在加法之前设置进位。另外三位比特可能意味着你要做加法、减法、异或运算，以及其他一些操作。那么其他的比特就会问：等一下，你是要补码运算的结果还是移位运算的结果？移位运算有进位吗？每一个比特都有各自的含义。

**00:05:21**：

我坐了下来，每个周末都在设计计算机，而那时小型计算机问世了。我坐下来设计它，每一个具有含义的比特，其实就是一根连接到芯片上的线，用来实现具体的功能，它的芯片数是我设计的其他小型计算机的一半，而且工作得一样好。我的墙上贴着那张他们和宣传册一起寄来的海报，就像普通的计算机设备一样，它是放在机架中的，因为它是前置面板，开关代表着 0 和 1，灯也代表着 0 和 1，全是些古怪的东西。

**00:05:54**：

而他们还有另一张图片，就像那种放在桌面上的台式机那样。这引起了我的兴趣，你怎么能想象出电脑居然可以放在桌面上呢？我告诉我的父亲我爱上了它，肯定地对我父亲说：“总有一天我会拥有一台 4K 大小的通用数据公司的 Nova 牌电脑。”为什么大小是 4K ？因为需要 4K 的空间才能运行像我编程所使用的 Fortran，或是 ALGOL、PL/I 这样的语言、任何需要 4K 的编程语言。我之前从来没有用 BASIC 编程过，我把这个告诉我父亲的时候，他说这个电脑和房子一样贵，我回答道，“那我就住在公寓里。”当时我就决定：我要有一台可以真正使用的电脑，尽管要整天切换 1 和 0，用按钮来把它存入内存，但这就是我想要的，它甚至比房子更加重要。

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

通用数据公司的 16 位 Nova 牌小型计算机是 32 位计算机 Eclipse 的前身，就是第 1 集中代号为 Eagle 的那个。实际上，正是 Nova 小型计算机启发了沃兹的工程设计理念。

**00:06:59 - 史蒂夫·沃兹尼亚克**：

这台计算机教会了我，应该始终用现有的部件来设计东西，以使用最少的结构和零件。那是我非常擅长的事情，我一直在从事设计工作，总是试图使用芯片更少的架构。如果围绕已有的芯片进行设计，那么从某种意义上讲，可以理解为用更少的部件、更干净、更少的工作量。后来这也成为我设计的口头禅，始终寻求简单、直接、易懂，不要构建出这样复杂化的东西：来让一项工作在 20 个芯片上运行，实现正确的功能、得到正确的信号，而是寻找简单、直接的方法。

**00:07:39 - Saron Yitbarek**：

沃兹的设计理念让我想起我们在第 5 集中提到的 Palm 公司用来开发应用程序的 Palm 之禅：让它简单。

**00:07:51**：

还记得第 3 集中我们谈到的 Altair 8800 和个人计算机的诞生吗？史蒂夫·沃兹尼亚克参加了自制计算机俱乐部具有决定性的第一次会议，当时他一直制作自己的版本的计算机。

**00:08:07 - 史蒂夫·沃兹尼亚克**：

在那里，我展示了各种电子游戏的设计，比如 Altair 游戏，我甚至为 Altair 设计出了“越狱”。我还看到了当今互联网的前身：ARPANET，它开始时全国大概只有五六台计算机。我看到有人在那上面，在那时我已经知道如何设计点东西了。可以使用我的电视作为输出，我曾为电子游戏做过。所以我做了一个带键盘的小终端，花了 60 美元。在当时，这是这些东西中最昂贵的部分。我有了一个键盘和一个视频显示器，我可以通过电话线与 ARPANET 联系，在那些日子里，通过非常慢的电话线调制解调器发送文本非常缓慢，我可以在波士顿的一台电脑上打字，可以打字回给我。我还可以切换到加州大学洛杉矶分校的电脑上，在上面读取文件、运行程序。这太不可思议了！

**00:08:57**：

我听说有一家俱乐部要成立了，还没有取名，只是一群技术爱好者。我想，“哦，天哪！我要炫耀一下，我有个小设计，没人知道其实可以使用自己的电视来进行显示。我要去炫耀我的设计，把它传播出去，我将成为一个英雄。”我到了俱乐部后，那里的每个人都在谈论这个叫做 Altair 的东西。它曾出现在《<ruby> 大众电子 <rt>  Popular Electronics </rt></ruby>》杂志的封面上，但我对此一无所知。有一些在这个俱乐部里的人去那个公司参观过，他们都在谈论现在你可以花 400 美元购买一台计算机。这是一台只有 256 字节内存的机器，它使用了静态内存。用的是英特尔的数据手册、英特尔的微处理器，英特尔展示了用这种方式具体连接到这些开关和灯，然后你可以有一个小系统来输入 1 和 0。

**00:09:39**：

在那之前，我用自己五年前买的芯片设计制造了自己的计算机。我曾经做过这些事，所以很清楚这些人在看什么，400 美元对一个人来说是负担得起的。设计师必须围绕静态存储器进行设计，这是计算机中最昂贵的部件，这也是为什么它只有 256 字节内存的原因。但如果你必须拥有 4K 的内存才能使用一种编程语言，那这些静态内存的成本就太高了，超出了任何正常人的能力范围，所以我们甚至不会认为它是一台能做有用事情的电脑。什么是有用的事情？遇到问题，输入程序，解决问题。

**00:10:14**：

现在，我坐在那里思考。我在惠普公司工作，研究能让人使用的计算器，而我有可以与 ARPANET 上的计算机进行通讯的小机器。我说，“等一下。”我发现微处理器的价格终于降下来了。英特尔的那款单个微处理器是 400 美元，我负担不起，Altair 就是基于它的。作为一名惠普的员工，我可以花 40 美元买到一个摩托罗拉 6800。因此，我设计出了具有微处理器和内存的计算机，不是那种买不起的昂贵的、价值 32 个芯片的静态内存。它只需要 8 块动态内存芯片，然后还有 5 块其他芯片帮助它循环，使它不致于丢失数据，这就是所谓的刷新。

**00:10:56**：

我围绕着摩托罗拉公司的 6800 设计计算机，之后一家公司在旧金山的一次展览上推出了 6502 微处理器。我买了那个微处理器，你知道的，整个设计计算机的公式都在我的脑海里，我很快就会拥有自己的计算机，而且我确实做到了。

**00:11:17 - Saron Yitbarek**：

沃兹并不是 BASIC 语言的忠实粉丝。但是，随着微软软件业务的起步：Altair BASIC 的推出，他意识到比尔·盖茨和保罗·艾伦的 BASIC 版本将会广泛使用。

**00:11:31 - 史蒂夫·沃兹尼亚克**：

Altair 一出现在我们俱乐部，我们就得到了这个消息。比尔·盖茨和保罗·艾伦已经为它开发了 BASIC。我的嗅觉告诉我，家用计算机的关键作用不再是传统意义上的计算机那样，也不再是库存量、销售数据、就业率，这些所有大公司用大型机在做的事情。不，它将会是游戏。它的关键是游戏、是 BASIC。我使用 Fortran、ALGOL 和 PL/I 以及一些汇编语言和科学计算的语言进行编程。除了高中的那三天之外，我一生中从未接触过 BASIC 语言，因为我觉得这是一种孩子的语言。

**00:12:08**：

这不是我们科学家真正使用的语言，我说：“这台机器上必须装有 BASIC 环境。”问题是没有其他人协助我的工作，这意味着，我不仅要开发硬件，还必须编写 BASIC 语言。我从来没有上过编写语言的课程，所以我写了自己的 BASIC 语言。我晚上去了我工作的惠普公司，打开 BASIC 手册，在纸上记录下 BASIC 的所有指令。我没有意识到此 BASIC 非彼 BASIC，和在所有的书中提起过的<ruby> 数字设备公司 <rt>  Digital Equipment Corporation </rt></ruby>（DEC）所使用的那种 BASIC 语言、比尔盖茨也编写过的那种，在处理字符串和字的方式上完全是一种不同的语言。

**00:12:45**：

它们处理字的方法和惠普公司完全不同。那时候我认为，你编写了一个 BASIC 语言，你用你的计算机来运行 BASIC，这在哪儿都是一样的。但事实并不是这样。所以这是一个关键，Altair 意识到现在必须要有一种自己的语言，这种语言必须是 BASIC 语言，否则人们不会把它放在家里。

**00:13:03 - Saron Yitbarek**：

在第 4 集中，我们了解到软盘是如何产生的，但是这种便携式存储方式是随着 Apple II 的磁盘驱动器的发明才变得无处不在。史蒂夫·沃兹尼亚克在巨大的压力下，用两周的时间创造出这个漂亮的硬件。这是他的故事。

**00:13:25 - 史蒂夫·沃兹尼亚克**：

实际上，苹果公司遇到了一个问题。我们的 Apple II 计算机最初使用的是盒式磁带。这意味着你要进行手动操作，如果需要某个特定程序，要在盒式磁带中搜索，在磁带中找到这个程序，将其放入磁带播放器中，然后再把它读入计算机。这不像你可以输入 “run checkbook” 命令来运行一个支票薄程序那样。我希望有一天能够达到那个水平，我们召开了一次员工会议。他们允许苹果公司……刚成立还不到一年的苹果公司，和 Commodore 和 Radio Shack 这三家个人计算机公司参加内华达州拉斯维加斯的 CES 展览。

**00:14:00**：

哇哦！除了在电影里，我从来没有见过拉斯维加斯。我想去那里，在我们的员工会议上，“嗯，我们只打算派三个营销人员去。”Mike Markkula 说，他负责市场营销，是我们的投资人，与我和<ruby> 史蒂夫·乔布斯 <rt>  Steve Jobs </rt></ruby>拥有同等的股份。史蒂夫·乔布斯会去，我们的销售人员 Gene Carter 也会去。我当时在想怎么去，只是不好意思说 “嘿！我是创始人之一，让我去看看拉斯维加斯！付钱让我去吧。”所以我举起了我的手，我也不知道那时为什么这么做。这场展览在两周以后开始。举手后我试图找个话题：“如果我们有了软盘，可以在展览上面展示它吗？”Mike Markkula 回答道：“当然可以！”他是我们公司中可以做主的人。这下球又踢到我这边了。

**00:14:38**：

如果对磁盘，它的软件和硬件一无所知的我能开发出一张软盘，在这张软盘上实现 “run checkbook”，在两周内做到这一点，他们就得带我去维加斯。如果他们要在展览会上介绍软盘，就得带上我。为此我每一天都在工作，不分昼夜、元旦、圣诞节，每一天都在工作。

**00:14:59**：

最开始我把视线聚焦在 Shugart 公司的五英寸软盘上，我注视着它，在脑海中对它进行逆向工程，把所有的东西都拆开，并且说道：“它需要的是大块数据，0 和 1，每个 4 微秒，我可以使用一根线来从我的计算机上提供这些数据。”所以我取出了所有的 Shugart 数字芯片，所有步进轨道的芯片，轨道之间切换使用所谓的步进电机，有 A、B、C、D 相位，每个相隔一个相位。A 是第一轨道，然后是 B-C，现在是第二轨道，再之后是 D-A，第三轨道。我一开始就去掉了他们的 20 块芯片，对自己说，“我只需要使用尽可能少的电路。”

**00:15:36**：

最后，我想到使用 7 块 1 美元的小芯片，可以在 4 微秒内一次写入这些数据位，以满足软盘的规格。我的计算机可以通过软件以不同的数据编码形式来计算出我需要发送的 0 和 1 。但更困难的是，当我把它放到我可以写入它的地方时，我可以用示波器看到信号高高低低变化，但我不知道它在哪里开始和停止。现在我必须要读取它。

**00:16:04**：

为了读取它，有一个比特进来，然后你需要做的就是等待...它将会在 4 或 8 微秒内切换，所以时间大约在 6 微秒内，你可以内置计时器然后说道：“在那段时间内信号从高到低还是从低到高？”我需要很多的芯片，可能是 10 到 20 个，这谁又知道呢？这里面的计时器会确定什么时候真正做出信号翻转的决定。然后我说：“我有一个 7 MHz 的时钟，我做一个所谓的状态机。”我在大学三年级的时候就上过一门状态机课程，状态机一般会有一个地址，来标识着现在所在的位置，或者是一个状态号。我只是想到了进入一个小 ROM 芯片的地址，我现在手里有这个 256 \* 8 的 ROM 芯片。

**00:16:48**：

我会把地址放在那个状态，这就决定了它现在的位置，然后放入软盘读取头的读到的比特。我把那个读取到的比特放进去，ROM 决定我的下一个状态，然后下一个状态就出现了这些比特。我可以在 7 MHz 的条件下翻转 28 个周期，这相当于是 4 微秒的时间，可以让它进入阶段 1、阶段 2、阶段 3 ... 阶段 28，最后在阶段 40 左右，它将做出决定：我有没有得到脉冲？我是要把一个 0 还是一个 1 移到寄存器中放入计算机中。

**00:17:23**：

整个过程只需要两块芯片就可以读取所有的数据。回首往事，我不知道当年脑海中奇妙的想法是如何涌出的。我只是在观察问题出在哪里，做这项工作的最小零件数量是多少，而不是它曾经 …… 因为我以前不知道这是怎么做的。我有一个名叫 Randy Wigginton 的高中生程序员，那些日子一直在协助我工作。当我完成了全部的工作以后，不禁说道：“为什么他们卖给 Altair 和 S-100 这些计算机的电路板体型都这么大？”

**00:17:51**：

我拿出来一样东西，我想那是 North Star 的 8 英寸软盘什么的。我看了看他们的电路板，上面有 50 个芯片。而我的只有 8 个，我可以控制两个软盘驱动器，并且正常工作。我们在展会上介绍了它。我去了拉斯维加斯，我要教我的高中朋友 Randy 玩骰子，他还赢了我 35 美元。这是一个很大而且重要的区别，因为对于用户而言，能够运行程序是一个巨大的进步。

**00:18:21 - Saron Yitbarek**：

在第 6 集中，我们了解了新一代的创客，即开源硬件运动背后的人们。这一运动被比作“自制计算机俱乐部”以及当时进行的所有合作与创新。我们问沃兹，他对硬件领域再次产生的创造力和开放性有何看法。

**00:18:44 - 史蒂夫·沃兹尼亚克**：

是的，我也是这样认为。你应该总是制作一些东西，并且分享你所拥有的东西，让别人能够运用他们自己的技能和经验对它加以拓展，做出比你原先想象的更新颖的事情，并将其应用到世界上不同的领域中，而不仅仅是一个你所理解那个小小的应用。我完全赞成。现在很多嵌入式处理器，有人做了这样的微处理器，实际上更像是制造了一张名片，它的厚度薄到像是上面只有一块扁平芯片的名片。你应该不知道，它还可以插入 USB 接口中。他花 2 美元建造了一台完整的 Linux 计算机。

**00:19:17**：

这些太令人兴奋了。我做了一个小的 PDP-8 套件，他们称之为 PiDP-8。树莓派是计算机，而这个套件有旧式 PDP-8 小型计算机所有的灯和开关，它还可以运行当时的一些 PDP-8 程序。PDP-8 最大内存只有 4K，这就是你如何让它与其他东西连接的方式。现在的处理器是树莓派里面的软件。你现在可以把树莓派与传感器和输出设备连接起来，人们就会想要进行实验和探索。

**00:19:52**：

回到构建某些复古计算机的过程中，肯定会教你如何将硬件连接到硬件，如何将其连接，以及如何使用它来做更多的事情。我能做什么还没做的事情？可能有点不同。这就是我喜欢的。独立的人，往往是学生。我想要学习，想尝试一些对生活没有任何价值的东西。我回顾这一系列的项目，可能有 10 或 15 个项目，没有任何价值。它们当时只是我觉得有趣的事情：“也许我可以做这个，我会尝试把这个放在一起，我会把这个构建起来。”如果你知道芯片的内部的构造方式，就可以弄清整个电路是如何工作的。

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

作为苹果公司的创始人之一，史蒂夫·沃兹尼亚克是现代科技的象征。但是对他来说，成功与名气无关。最重要的是让他的工作被看到，而工作始于命令行。

**00:20:45 - 史蒂夫·沃兹尼亚克**：

在我的一生中，甚至在苹果公司之前，我为公司做了很多项目，比如有史以来第一个酒店电影系统，电视台的使用一英寸磁带卷的时间码。我在做各种电路，一直以我的工程为荣。我希望其他工程师也能看到我的作品，因为一个工程师能看到普通人看不到的东西。不是它做什么，它是如何构造的。我想让他们看到它，为我的工程技能而发出惊叹。

**00:21:14**：

最近，我获得了 IEEE 奖金。这是你一生中能得到的其他工程师对电子工程的最高认可。我的意思是，它几乎让我热泪盈眶。这就是我想要的。不是创办一家公司，不是开创一个行业，而是想以一个伟大的工程师而闻名。现在工程师们可以看到我做了什么，他们看到了它的效果，但他们不能看着我的原理图和代码说，“你是怎么写这些代码的？”

**00:21:41**：

这是我一生中获得的最有意义的奖项之一。因为那是我一直想要的，没有人知道。每个人都认为，“哦，我的第一台电脑是 Apple II ，我在上面做这个做那个，在学校里运行这些程序，哇，是你设计了它！”那很酷。但他们不是从工程的角度来看的。

**00:21:58 - Saron Yitbarek**：

谢谢你，史蒂夫·沃兹尼亚克，感谢你参加我们的《代码英雄》访谈。在这一季结束之前，我想请一位特别嘉宾来告诉大家第五季的情况。

**00:22:10 - Clive Thompson**：

我是<ruby> 克莱夫·汤普森 <rt>  Clive Thompson </rt></ruby>，《<ruby> 程序员 <rt>  Coders </rt></ruby>》一书的作者。在第五季中，我将会是 Saron 旁边的嘉宾，讲述开发者的职业生涯。不要错过它。

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

《代码英雄》是红帽的原创播客。请访问 [redhat.com/commandlineheroes](https://www.redhat.com/commandlineheroes "redhat.com/commandlineheroes") 来看看我们对你在上一季听到的硬件的所有出色研究。我是 Saron Yitbarek，

**00:22:34 - 史蒂夫·沃兹尼亚克**：

我是史蒂夫·沃兹尼亚克。生命不息，编码不止。

>
> **什么是 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-4/steve-wozniak>

作者：[Red Hat](https://www.redhat.com/en/command-line-heroes) 选题：[bestony](https://github.com/bestony) 译者：[xiao-song-123](https://github.com/xiao-song-123) 校对：[pityonline](https://github.com/pityonline), [wxy](https://github.com/wxy)

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


PinePhone Pro：一款价位适中的 Linux 旗舰智能手机

它是打算加入微信，还是打算干掉微信，还是走kali手机的路

这个价手头宽裕买来玩玩倒是行

>
> 售价 399 美元的 PinePhone Pro 是一款 Linux 智能手机，或许有潜力取代一些预算相当的 Android 设备。但作为消费者，还需要等待几个月。
>
>
>

![](/data/attachment/album/202110/20/100445cqocq6hwwlrzqqbj.png)

早在 2019 年，当 Pine64 宣布推出 PinePhone 时，没有人想到它会变得如此受欢迎。在短短两年间，Pine64 已经成功建立了一个由数万名开发者和用户组成的社区，大家一起努力使 Linux 完美地跑在了手机上。

现在，随着 PinePhone Pro 的宣布，Pine64 正在扩大 Linux 手机的受众范围。这个设备有许多令人难以置信的新功能，所有这些都使它可以与许多中档 Android 手机相提并论。

### PinePhone Pro 功能

![](/data/attachment/album/202110/20/100446rsdezaydmtnymen1.png)

与原来的 PinePhone 相比，PinePhone Pro 带来了巨大的升级。这些升级中最值得注意的是使用了 Rockchip 的六核 RK3399S SoC 芯片，这应该能显著地提升性能。其他一些值得注意的功能和升级还有：

* 4GB LPDDR4 内存
* 128GB 存储 + microSD 卡插槽
* 6 英寸 IPS 显示屏，采用 **大猩猩 4 号玻璃**。
* 1300 万像素（后置）+ 500 万像素（前置）的摄像头

让我们来探讨一下这方面的更多细节。

#### 性能更好

![](/data/attachment/album/202110/20/100447o75uj3ezzip53prp.jpg)

到目前为止，最重要的升级是 RK3399S SoC 的加入，它是 Pine64 和 Rockchip 合作的结果。这个令人印象深刻的强大 SoC 包含 6 个 CPU 核心，以及一个四核 Mali T860 GPU。

这一组合带来了显著的性能提升，使得 PinePhone Pro 的性能与大多数中档安卓手机相当。这带来了一个更快的系统，能够运行许多桌面级应用程序，如用于照片编辑的 GIMP 和用于仿真游戏的 RetroArch。

总的来说，这次升级将大大改善开发者和消费者的用户体验。

#### 内存更多

考虑到智能手机已经开始提供 6GB 内存作为基本变体时，Linux 智能手机也应该使用更多的内存来保持流畅。虽然在优化方面已经做了很多工作，但更多的内存总是有益的。

PinePhone Pro 提供了 4GB 的内存，当放在基座上时可以有更大的通用性，当作为手机使用时可以多打开几个应用程序。我对此感到非常兴奋，因为它应该能够模拟更多的游戏，增加 PinePhone Pro 作为娱乐设备的吸引力。

#### 存储空间升级

我的原版的 PinePhone 面临的最大挑战之一是存储空间不足。从看电影到玩仿真游戏，我不得不不断地删除文件以获得足够的存储空间。

然而，在 PinePhone Pro 上，Pine64 已经解决了这个问题，它提供了 128GB 的闪存，这对任何人来说都足够了。

#### 显示屏改进

![](/data/attachment/album/202110/20/100448geplmllxhxt0lz0e.png)

虽然这并不是原版 PinePhone 的痛点，但 PinePhone Pro 的显示屏已经升级，变得更大，采用了大猩猩 4 号玻璃。这是非常值得欢迎的，这款手机现在应该可以提供明显改善的防刮伤性能和更多可用的屏幕空间。

虽然 AMOLED 面板会很好，但这在一定程度上会提高价格，可能会降低设备的吸引力。总的来说，我对这次升级很满意，我相信许多用户也是这样。

#### 相机升级

至少对我来说，原版的 PinePhone 的摄像头是一个相当大的痛点。主摄像头只有 500 万像素，还有一个小小的 200 万像素的前置摄像头，这两个摄像头都不能拍出非常高质量的图像。

原版的 PinePhone 的主摄像头已被移到 PinePhone Pro 的前面。它与一个 1300 万像素的索尼摄像头传感器相配，能够录制 4K 视频和提供更高的图像质量。

用户终于可以用他们的 Linux 智能手机来拍摄照片，在社交媒体平台上分享了。

### 你可以升级你的原版 PinePhone 吗？

这是我看到该公告时问的第一个问题。不幸的是，将你的 PinePhone 升级到 PinePhone Pro 主板是不可行的。我认为 Pine64 解释得很好：

>
> 虽然 PinePhone Pro 的主板尺寸适合 PinePhone，但机框、IPS 显示面板、摄像头、子板和散热系统都不同。例如，PinePhone Pro 的摄像头就不适合 PinePhone 的机框，而且与 PinePhone Pro 的主板在电气上不兼容。散热是另一个重要的考虑因素，因为在原来的 PinePhone 的机框中，较高的热量输出可能不能简单地忽略，这需要克服解决。
>
>
>

虽然 Pine64 不建议升级你原来的 PinePhone 的主板，但我认为尝试一下还是很有意思的。虽然令人失望，但也应该注意到，Pine64 并不打算停止原来的 PinePhone 开发，因为它对于想要一个便宜的 Linux 手机作为基本用途的人来说是完美的。

### 总结

总的来说，我非常兴奋地看到又一个设备进入 Linux 手机市场，尤其是像 PinePhone Pro 这样将得到良好支持（希望是这样）的设备。尽管其价格是 399 美元，但我认为很多人都会蜂拥而至购买这款手机。

如果你认为你可能是这些人中的一员，但你得等待几个月后的正式发布。

然而，想要获得早期设备的开发者现在可以点击下面的按钮来预购 PinePhone Pro。

* [预购PinePhone Pro](https://preorder.pine64.org/)

关于 PinePhone Pro 的可用性和规格的更多细节，你应该去他们的 [官方网站](https://www.pine64.org/pinephonepro/) 看看。

你要买 PinePhone Pro 吗？请在下面的评论中告诉我！

---

via: <https://news.itsfoss.com/pinephone-pro-introduced/>

作者：[Jacob Crume](https://news.itsfoss.com/author/jacob/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


如何现在就升级到 Ubuntu 21.10

[Ubuntu 21.10 “Impish Indri” 刚刚发布](/article-13887-1.html)。如果你正在使用 Ubuntu 21.04，你应该有升级到 Ubuntu 21.10 的选项。

![](/data/attachment/album/202110/20/105035l6ig4lkjnk5cipuw.jpg)

然而，这种推出将是逐步的。这意味着不是每个人都会立即得到新版本可用的通知。在你看到升级选项之前，可能需要几周的时间。

但是，如果你迫不及待地想获得带有 GNOME 40 和其他新功能的 Ubuntu 21.10 呢？你真的需要等待吗？不用。

### 现在就从 Ubuntu 21.04 升级到 Ubuntu 21.10

以下是你要做的。打开“<ruby> 软件和更新 <rt>  Software & Updates </rt></ruby>”应用：

![Start the Software & Updates application](/data/attachment/album/202110/20/105106s1ulasqtj7alaqzz.jpg)

并确保你在“<ruby> 更新 <rt>  Updates </rt></ruby>”标签下将“<ruby> 通知我新的 Ubuntu 版本 <rt>  Notify me of a new Ubuntu version </rt></ruby>”设置为“<ruby> 任何新版本 <rt>  For any new version </rt></ruby>”。

![Make sure that settings are right for new Ubuntu version notification](/data/attachment/album/202110/20/105107ia447cb4vub5cy3q.jpg)

现在打开终端，输入以下命令，以确保你的系统已经更新：

```
sudo apt update && sudo apt upgrade

```

当你的 Ubuntu 21.04 系统安装了所有的更新，运行更新管理器来寻找开发版本（本例中为 Ubuntu 21.10）。

```
update-manager -d

```

它将打开寻找更新的“<ruby> 更新管理器 <rt>  Update Manager </rt></ruby>”。由于你已经更新了系统，它不会找到新的更新来安装。然而，它将看到 Ubuntu 21.10 现在已经可用。

![Hit the upgrade button](/data/attachment/album/202110/20/105107juds9v97sv67u7k7.jpg)

你可以点击“<ruby> 升级 <rt>  Upgrade </rt></ruby>”按钮，按照屏幕上的选项开始升级程序。你需要有良好的网络速度来下载 2GB 的更新。确保你的系统在升级过程中保持与电源的连接。

享受 Ubuntu 21.10！

（题图：[discourse.ubuntu.com](https://discourse.ubuntu.com/t/wallpaper-competition-for-impish-indri-ubuntu-21-10/22852)）

---

via: <https://itsfoss.com/upgrade-ubuntu-to-newer-version/>

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


硬核观察 #430 软件自由保护协会起诉智能电视生产商 Vizio 违反 GPL

Summary: 更多：• 83% 的勒索软件受害者支付了赎金 • 微软正式废弃通用 Windows 平台

![](/data/attachment/album/202110/20/125941sz7qdaawqp9daq4i.jpg)

### 软件自由保护协会起诉智能电视生产商 Vizio 违反 GPL

![](/data/attachment/album/202110/20/125955ccc1ccaww7qlhfgq.jpg)

软件自由保护协会（SFC）宣布它已对 Vizio 公司 [提起诉讼](https://sfconservancy.org/news/2021/oct/19/vizio-lawsuit/)。Vizio 的 SmartCast 操作系统是基于 Linux 的。Linux 的源代码受 GPLv2 保护。除了 Linux 内核，SmartCast 中的其他受 GPL 和 LGPL 保护的代码包括 U-Boot、bash、gawk、tar、Glibc 和 FFmpeg 等等。Vizio 在 2018 年 8 月就被 SFC 告知，它因没有发布 [SmartCast OS](https://www.vizio.com/en/smartcast) 的源代码而违反了 GPLv2。经过一年多的沟通努力，SFC 宣布，该公司不仅仍然拒绝遵守 GPL，而且从 2020 年 1 月起完全停止回应询问。

以前，这些案件是为了维护开发者的权利，但 SFC 在这次诉讼中采取了一种新的策略。它是作为一个产品的购买者提出的，这个产品非法地包含了版权代码。这种做法使其成为第一个关注个人消费者作为第三方 GPL 受益人权利的法律案件。你作为购买者也是有权利访问这些源代码的。

>
> 老王点评：你知道还有哪些无视 GPL 的智能电视生产商？
>
>
>

### 83% 的勒索软件受害者支付了赎金

![](/data/attachment/album/202110/20/130024seaj2mp4g4e2anlj.jpg)

在一项针对 300 名美国 IT 决策者的 [新调查发现](https://thycotic.com/resources/ransomware-survey-and-report-2021/)，64% 的人在过去 12 个月里曾是勒索软件攻击的受害者，而这些攻击受害者中有 83% 支付了赎金要求。在接受调查的人中，72% 的人看到网络安全预算因勒索软件威胁而增加，93% 的人正在分配特别预算来对抗勒索软件威胁。受访者表示，最容易受到勒索软件攻击的载体是电子邮件（53%），其次是应用程序（41%）和云（38%）。专家说，“像‘永远不要支付赎金’这样的天真声明忽略了现实的情况，并没有任何机会在实际改变什么。”

>
> 老王点评：受害者只要评估支付的赎金低于损失就会支付，但是支付不一定能有结果。
>
>
>

### 微软正式废弃通用 Windows 平台

![](/data/attachment/album/202110/20/130118jjnej1ukjjjkwe7f.png)

微软把以桌面为重点的 Windows App SDK 和 WinUI 3 作为 Windows 应用开发的未来。Windows App SDK 基本上采用了关键的 UWP 技术和像 WinUI 3 这样不会被向后移植到 UWP 的新技术。微软说，在未来 UWP 将只收到“错误、可靠性和安全修复”，而不是新功能，[这表明它现在已经被废弃](https://www.thurrott.com/dev/258377/microsoft-officially-deprecates-uwp)。现有的 UWP 应用开发者，当然可以继续使用 UWP。但是那些想要“最新的运行时、语言和平台功能”的人，包括 WinUI 3、WebView 2、.NET 5、与 Windows 10 1809 或更新版本的完全兼容，以及任何即将到来的新功能，得把他们的应用程序 [迁移到 Windows App SDK](https://docs.microsoft.com/en-us/windows/apps/windows-app-sdk/migrate-to-windows-app-sdk/overall-migration-strategy) 了。

>
> 老王点评：看来由商业公司支持的软件开发框架方面，没有什么常青树。
>
>
>


我推荐尝试的 5 个 Markdown 编辑器

Summary: 每个人都有自己喜欢的 Markdown 编辑器。这里有几个我已经试过的。

每个人都有自己喜欢的 Markdown 编辑器。这里有几个我已经试过的。

>
> 每个人都有自己喜欢的 Markdown 编辑器。这里有几个我已经试过的。
>
>
>

![](/data/attachment/album/202110/21/095837n8q1s3hqc1og1fsq.jpg "A pink typewriter")

你可以用 Markdown 做任何事情：给网站排版、编写书籍和撰写技术文档只是它的一些用途。我喜欢它创建富文本文档可以如此简单。每个人都有自己喜欢的 Markdown 编辑器。在我的 Markdown 之旅中，我使用了好几个。下面是我考虑过的五个 Markdown 编辑器。

### Abricotine

[Abricotine](https://abricotine.brrd.fr/) 是一个在 [GPLv](https://github.com/brrd/abricotine/blob/develop/LICENSE) 下发布的开源编辑器。你可以手动输入格式，或者使用菜单插入 [GitHub 风格的 Markdown](https://guides.github.com/features/mastering-markdown/)。Abricotine 允许你在输入时预览文本元素，如标题、图片、数学、嵌入式视频和待办事项。该编辑器只能将文件导出为 HTML。你可以在 Linux、macOS 和 Windows 上使用 Abricotine。

![Abricontine](/data/attachment/album/202110/21/095847sbx8befq5iqqc32e.png "Abricontine")

### MarkText

[MarkText](https://marktext.app/) 是一个简单的 Markdown 编辑器。它有很多功能，而且在处理 Markdown 格式的文件方面做得很好。MarkText 也支持 GitHub 风格的 Markdown，它允许你添加表格和带有语法高亮的代码块。它支持实时预览，并且有一个简单的界面。MarkText 是在 [MIT](https://github.com/marktext/marktext/blob/develop/LICENSE) 下授权的。它支持 HTML 和 PDF 格式的输出。MarkText 可以在 Linux、macOS 和 Windows 上使用。

![MarkText](/data/attachment/album/202110/21/095847kav6olyf1fja5aa4.png "MarkText")

### Ghostwriter

[Ghostwriter](https://wereturtle.github.io/ghostwriter/) 是一个用于 Linux 和 Windows 的 Markdown 编辑器。根据其网站用户的说法。“享受无干扰的写作体验，包括全屏模式和简洁的界面。有了 Markdown，你可以现在写，以后再格式化”。它有内置的默认的浅色和深色主题，或者你可以自己编写。你可以将文件实时按 HTML 预览，你可以直接复制和粘贴到博客中，或导出为其他格式。Ghostwriter 是在 [GPLv3](https://github.com/wereturtle/ghostwriter/blob/master/COPYING) 下发布的。

![Ghostwriter](/data/attachment/album/202110/21/095848b94o4qk8xqn9kcko.png "Ghostwriter")

### Atom

[Atom](https://atom.io/) 被称为 21 世纪的可自定义文本编辑器。它也可以作为一个 Markdown 编辑器使用。它可以在 Linux、Windows 和 macOS上运行，并以 [MIT](https://github.com/atom/atom/blob/master/LICENSE.md) 许可证发布。它支持 GitHub 风格的 Markdown，并且按下 `Ctrl+Shift+M` 可以打开一个预览面板，这样你就可以轻松地看到 HTML 预览。你可以通过创建一个文件并以 `.md` 文件扩展名保存来轻松入门。这告诉 Atom 它是一个 Markdown 文件。Atom 会自动应用正确的包和语法高亮。

![Atom](/data/attachment/album/202110/21/095848pa5w2fiw4fz8sh5n.png "Atom")

### VSCodium

[VSCodium](https://vscodium.com/) 是微软的 VSCode 编辑器的自由开源版本，没有内置在微软产品中的遥测技术。它以 [MIT](https://github.com/VSCodium/vscodium/blob/master/LICENSE) 许可证发布，并提供了 VSCode 的所有功能，而没有专有特性。除了其他功能外，VSCodium 还可以作为一个 Markdown 编辑器。创建一个新文件，点击 “选择一个语言”，选择 “Markdown”，然后开始写你的代码。通过按 `Ctrl-Shift+V` 轻松预览文本，然后再切换回编辑器。你也可以通过添加一个扩展来轻松地扩展 Markdown 编辑器。我最喜欢的插件是 [Markdown editor](https://github.com/zaaack/vscode-markdown-editor)，它是 [MIT](https://github.com/zaaack/vscode-markdown-editor/blob/master/LICENSE) 许可证。

![VSCodium](/data/attachment/album/202110/21/095849ur9x98vtk2kr8vv5.png "VSCodium")

你最喜欢的 Markdown 编辑器是什么？ 让我们在评论中知道。

---

via: <https://opensource.com/article/21/10/markdown-editors>

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

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


Dash to Dock 终于可以在 GNOME 40 上使用了

>
> Dash to Dock v70 增加了对 GNOME 40 的支持，并放弃了对较旧版本的 GNOME Shell 的支持。但是，你可以继续使用旧版本。
>
>
>

![](/data/attachment/album/202110/21/110240pqgbhgeb0wftoh0a.png)

Dash to Dock 是多年来最 [有用的 GNOME 扩展](https://itsfoss.com/best-gnome-extensions/) 之一。随着 [GNOME 40](https://news.itsfoss.com/gnome-40-release/) 的引入，很多人都没能让这个扩展在它上面工作起来。

当然，作为一个流行的扩展，对 GNOME 40 的支持预计很快就会被加入。终于，它来了！

如果你不知道，GNOME 40 包括一个水平工作区视图，这影响了一些人的工作流程，但 Ubuntu 即使在 GNOME 40 中也没有移动 Dock 的打算。

所以，你仍然可以使用 Dash to Dock 来从概览区得到一个水平的 Dock。

### Dash to Dock v70 放弃了对旧的 GNOME Shell 的支持

![](/data/attachment/album/202110/21/110241opnfd0tffnvyvizn.jpg)

Dash to Dock v70，对 GNOME 40 和特定的 3.34 版的 GNOME Shell 提供了支持。

然而，为了支持 GNOME 40 而对扩展所做的技术修改也意味着新版本的扩展不能再与旧版本的 GNOME Shell 一起工作。

如果你没有运行 GNOME 40，你仍然可以使用旧的 v69，它应该可以很好地工作。而且，除了增加了对 GNOME 40 的支持，在功能上也没有什么不同。

该扩展的未来发展可能很有趣，他们是否会考虑为不同的 GNOME Shell 版本而增加不同的扩展软件包，并提供新的功能？让我们拭目以待。

### 安装 Dash to Dock 的方法

![](/data/attachment/album/202110/21/110243prk7zaec954cuzau.png)

你可以从 [GNOME 扩展网站](https://extensions.gnome.org/extension/307/dash-to-dock/) 中通过简单的切换按钮来安装这个扩展。如果你是新手，我建议通过我们的 [GNOME 扩展安装指南](https://itsfoss.com/gnome-shell-extensions/) 来开始。

* [Dash to Dock GNOME 扩展](https://extensions.gnome.org/extension/307/dash-to-dock/)

值得注意的是，你需要使用一个兼容的网页浏览器来安装这个扩展。虽然它应该可以在大多数浏览器上使用（[基于 Chromium 的浏览器](https://news.itsfoss.com/chrome-like-browsers-2021/) 应该可以），但正如 [OMG! Ubuntu](https://www.omgubuntu.co.uk/2021/10/dash-to-dock-official-gnome-40-support?) 最初报道的那样，Ubuntu 21.10 中 Snap 打包的 Firefox 浏览器可能无法使用。

你试过这个扩展了吗？欢迎在下面的评论中告诉我你的想法。

---

via: <https://news.itsfoss.com/dash-to-dock-gnome-40/>

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

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


硬核观察 #431 CentOS 项目负责人宣布离任

Summary: 更多：• 微软推出可在浏览器中运行的 VS Code • 投资者利用 AI 分析 CEO 们的讲话

![](/data/attachment/album/202110/21/153657nrxov5x4g5w5yk9d.jpg)

### CentOS 项目负责人宣布离任

![](/data/attachment/album/202110/21/153707rfa57mi87yi7ivym.png)

自 2004 年以来，一直担任 CentOS 项目负责人的 Karanbir Singh，前两天已在个人官网上 [宣布离职](https://karan.org/posts/stepping-down/)。他说，“在过去 17 年里，我有机会从社区学到了很多，也希望能够给予了社区一些回馈。”在最近一次的 CentOS 董事会上 [已经接受](https://blog.centos.org/2021/10/karanbir-singh-stepping-down-from-the-centos-board/) 了他的离任，并立即生效。有媒体认为，其离职似乎与 CentOS 改为 Stream 的变化有关。CentOS Linux 8 将在今年年底结束支持。

>
> 老王点评：已经完成了自己的使命，是时候该离开了。感谢你这么多年的付出！
>
>
>

### 微软推出可在浏览器中运行的 VS Code

![](/data/attachment/album/202110/21/153734sk8acmwijm8abedb.jpg)

本周三，微软 [正式发布](https://code.visualstudio.com/blogs/2021/10/20/vscode-dev) 了可完全在浏览器中运行的轻量级 VS Code： <https://vscode.dev/> 。这意味着开发者无需安装，即可在基于浏览器的开发环境中，打开本地机器上的一个文件夹并开始工作。它可在 Chromebook 等低性能设备上轻松编程，还内置了对 GitHub 存储库和 Azure 存储库的支持。

>
> 老王点评：其实并不令人意外，VS Code 本身就是基于 V8 引擎的。不过这样做的话，还是会很方便。
>
>
>

### 投资者利用 AI 分析 CEO 们的讲话

![](/data/attachment/album/202110/21/153750qbzw0kcj4cgxzf09.jpg)

在 2020 年底，IT 行业的一些高管在讨论供应链中断的时候，淡化了半导体芯片短缺的可能性。他们说，一切都很好。然而，根据一项旨在发现隐藏在口语中的线索的 [算法分析](https://www.reuters.com/technology/ai-can-see-through-you-ceos-language-under-machine-microscope-2021-10-20/)，他们讲话的语气显示出高度不确定性。在这些言论发表后的几个月内，芯片严重短缺冲击了相关产品的产量。一些投资者认为这种自然语言处理技术是获得超越对手优势的一种新工具。

>
> 老王点评：我想 AI 技术会越来越用在你所意想不到的地方，很多线索将无所遁形。
>
>
>


在 Apache Cassandra 中定义和优化数据分区

>
> 速度和可扩展性是 Apache Cassandra 不变的追求；来学习一下如何充分发挥它的专长吧。
>
>
>

![](/data/attachment/album/202110/22/103651gse3iyiajyaagk34.jpg "Person standing in front of a giant computer screen with numbers, data")

Apache Cassandra 是一个数据库，但又不是一个简单的数据库；它是一个复制数据库，专为可扩展性、高可用性、低延迟和良好性能而设计调整。Cassandra 可以帮你的数据在区域性中断、硬件故障时，以及很多管理员认为数据量过多的情况下幸免于难。

全面掌握数据分区知识，你就能让 Cassandra 集群实现良好的设计、极高的性能和可扩展性。在本文中，我将探究如何定义分区，Cassandra 如何使用这些分区，以及一些你应该了解的最佳实践方案和已知问题。

基本概念是这样的: 供数据库关键函数（如数据分发、复制和索引化）使用的原子单元，单个这样的数据块就是一个分区。分布式数据系统通常会把传入的数据分配到这些分区中，使用简单的数学函数（例如 identity 或 hashing 函数）执行分区过程，并用得到的 “分区键” 对数据分组，进一步再形成分区。例如，假设传入数据是服务器日志，使用 “identity” 分区函数和每个日志的时间戳（四舍五入到小时值）作为分区键，我们可以对这些数据进行分区，实现每个分区各保存一小时的日志的目的。

### Cassandra 中的数据分区

Cassandra 作为分布式系统运行，并且符合前述数据分区原则。使用 Cassandra，数据分区依赖于在集群级别配置的算法和在表级别配置的分区键。

![Cassandra data partition](/data/attachment/album/202110/22/103701lce6rqfx117cxfhw.png "Cassandra data partition")

Cassandra 查询语言（CQL）使用大家很熟悉的 SQL 表、行、列等术语。在上面的示例图中，表配置的主键中包含了分区键，具体格式为：<ruby> 主键 <rt>  Primary Key </rt></ruby> = <ruby> 分区键 <rt>  Partition Key </rt></ruby> + [<ruby> 聚簇列 <rt>  Clustering Columns </rt></ruby>] 。

Cassandra 中的主键既定义了唯一的数据分区，也包含着分区内的数据排列依据信息。数据排列信息取决于聚簇列（非必需项）。每个唯一的分区键代表着服务器（包括其副本所在的服务器）中管理的若干行。

### 在 CQL 中定义主键

接下来的四个示例演示了如何使用 CQL 语法表示主键。定义主键会让数据行分到不同的集合里，通常这些集合就是分区。

#### 定义方式 1（分区键：log\_hour，聚簇列：无）

```
CREATE TABLE server_logs(
   log_hour TIMESTAMP PRIMARYKEY,
   log_level text,
   message text,
   server text
   )

```

这里，有相同 `log_hour` 的所有行都会进入同一个分区。

#### 定义方式 2（分区键：log\_hour，聚簇列：log\_level）

```
CREATE TABLE server_logs(
   log_hour TIMESTAMP,
   log_level text,
   message text,
   server text,
   PRIMARY KEY (log_hour, log_level)
   )

```

此定义方式与方式 1 使用了相同的分区键，但此方式中，每个分区的所有行都会按 `log_level` 升序排列。

#### 定义方式 3（分区键：log\_hour，server，聚簇列：无）

```
CREATE TABLE server_logs(
   log_hour TIMESTAMP,
   log_level text,
   message text,
   server text,
   PRIMARY KEY ((log_hour, server))
   )

```

在此定义中，`server` 和 `log_hour` 字段都相同的行才会进入同一个分区。

#### 定义方式 4（分区键：log\_hour，server，聚簇列：log\_level）

```
CREATE TABLE server_logs(
   log_hour TIMESTAMP,
   log_level text,
   message text,
   server text,
   PRIMARY KEY ((log_hour, server),log_level)
   )WITH CLUSTERING ORDER BY (column3 DESC);

```

此定义方式与方式 3 分区相同，但分区内的行会依照 `log_level` 降序排列。

### Cassandra 如何使用分区键

Cassandra 依靠分区键来确定在哪个节点上存储数据，以及在需要时定位数据。Cassandra 通过查看表中的分区键来执行这些读取和写入操作，并使用<ruby> 令牌 <rt>  tokens </rt></ruby>（一个 -2^{63}−263 到 +2^{63}-1+263−1 范围内的 long 类型值）来进行数据分布和索引。这些令牌通过分区器映射到分区键，分区器使用了将分区键转换为令牌的分区函数。通过这种令牌机制，Cassandra 集群的每个节点都拥有一组数据分区。然后分区键在每个节点上启用数据索引。

![Cassandra cluster with 3 nodes and token-based ownership](/data/attachment/album/202110/22/103702i80t0rnirm3100fi.png "Cassandra cluster with 3 nodes and token-based ownership")

图中显示了一个三节点的 Cassandra 集群以及相应的令牌范围分配。这只是一个简单的示意图：具体实现过程使用了 [Vnodes](https://www.instaclustr.com/cassandra-vnodes-how-many-should-i-use/)。

### 数据分区对 Cassandra 集群的影响

用心的分区键设计对于实现用例的理想分区大小至关重要。合理的分区可以实现均匀的数据分布和强大的 I/O 性能。分区大小对 Cassandra 集群有若干需要注意的影响：

* 读取性能 —— 为了在磁盘上的 SSTables 文件中找到分区，Cassandra 使用缓存、索引和索引摘要等数据结构。过大的分区会降低这些数据结构的维护效率，从而对性能产生负面影响。Cassandra 新版本在这方面取得了长足的进步：特别是 3.6 及其以上版本的 Cassandra 引擎引入了存储改进，针对大型分区，可以提供更好的性能，以及更强的应对内存问题和崩溃的弹性。
* 内存使用 —— 大分区会对 JVM 堆产生更大的压力，同时分区的增大也降低了垃圾收集机制的效率。
* Cassandra 修复 —— 大分区使 Cassandra 执行修复维护操作（通过跨副本比较数据来保持数据一致）时更加困难。
* “墓碑”删除 —— 听起来可能有点骇人，Cassandra 使用称为“<ruby> 墓碑 <rt>  tombstones </rt></ruby>”的独特标记来记录要删除的数据。如果没有合适的数据删除模式和压缩策略，大分区会使删除过程变得更加困难。

虽然这些影响可能会让人更倾向于简单地设计能产生小分区的分区键，但数据访问模式对理想的分区大小也有很大影响（有关更多信息，请阅读关于 [Cassandra 数据建模](https://www.instaclustr.com/resource/6-step-guide-to-apache-cassandra-data-modelling-white-paper/) 的深入讲解）。数据访问模式可以定义为表的查询方式，包括表的所有 `select` 查询。 理想情况下，CQL 选择查询应该在 `where` 子句中只使用一个分区键。也就是说，当查询可以从单个分区，而不是许多较小的分区获取所需数据时，Cassandra 是最有效率的。

### 分区键设计的最佳实践

遵循分区键设计的最佳实践原则，这会帮你得到理想的分区大小。根据经验，Cassandra 中的最大分区应保持在 100MB 以下。理想情况下，它应该小于 10MB。虽然 Cassandra 3.6 及其以上版本能更好地支持大分区，但也必须对每个工作负载进行仔细的测试和基准测试，以确保分区键设计能够支持所需的集群性能。

具体来说，这些最佳实践原则适用于任何分区键设计：

* 分区键的目标必须是将理想数量的数据放入每个分区，以支持其访问模式的需求。
* 分区键应禁止无界分区：那些大小可能随着时间无限增长的分区。例如，在上面的 `server_logs` 示例中，随着服务器日志数量的不断增加，使用服务器列作为分区键就会产生无界分区。相比之下，使用 `log_hour` 将每个分区限制为一个小时数据的方案会更好。
* 分区键还应避免产生分区倾斜，即分区增长不均匀，有些分区可能随着时间的推移而不受限制地增长。在 `server_logs` 示例中，在一台服务器生成的日志远多于其他服务器的情况下使用服务器列会产生分区倾斜。为了避免这种情况，可以从表中引入另一个属性来强制均匀分布，即使要创建一个虚拟列来这样做，也是值得的。
* 使用时间元素和其他属性的组合分区键，这对时间序列数据分区很有帮助。这种方式可以防止无界分区，使访问模式能够在查询特定数据时使用时间属性，而且能够对特定时间段内的数据进行删除。上面的每个示例都使用了 `log_hour` 时间属性来演示这一点。

还有一些工具可用于帮助测试、分析和监控 Cassandra 分区，以检查所选模式是否高效。通过仔细设计分区键，使解决方案的数据和需求保持一致，并遵循最佳实践原则来优化分区大小，你就可以充分利用数据分区，更好地发挥 Cassandra 的可扩展性和性能潜力。

---

via: <https://opensource.com/article/20/5/apache-cassandra>

作者：[Anil Inamdar](https://opensource.com/users/anil-inamdar) 选题：[lujun9972](https://github.com/lujun9972) 译者：[unigeorge](https://github.com/unigeorge) 校对：[wxy](https://github.com/wxy)

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