Git/GitHub 中文术语表

Summary: 我们根据 GitHub 等文档，收集整理了部分常用的 Git 和 GitHub 中的术语的中文定名及其解释。

ID=身份或标识<br />
...

clean也可译作“清理”

哈希是普通话版的音译，意译还有另外一个词“散列码”

tag没提到，可以考虑译为“（打）标记”，与label区别开

watch可译为“关注”

![](/data/attachment/album/202005/24/001727th95ra0zwl7avqql.jpg)

Git 和 GitHub 已经成为了开发者的基础工具，尤其是参与开源软件开发时经常会使用它们。但是在 Git 和 GitHub 使用过程中遇到的很多术语并没有标准的或约定俗成的中文译名，因此，我们根据 [GitHub](https://help.github.com/cn/github/getting-started-with-github/github-glossary) 、[Git](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/gitglossary.html) 等文档，并结合我们的翻译惯例，收集整理了 Git 和 GitHub 中常用术语的中文译名及其解释。

这里值得注意是术语有复刻、挂钩、议题、星标、变基、仓库等，这些术语之前要么经常中英文混杂使用，要么中文译法不确定，我们根据多年的翻译和开发经验，在 GitHub 译法的基础上进行斟酌，整理了如下的术语表供大家使用参考。此外，“复刻”这个翻译应该是我们 [LCTT 首倡](/article-7877-1.html)的；而“议题”这个对 issue 的译法也比之前的一些其它译法更为精准；“仓库”一词还有存储库、版本库等译法，但是仓库一词似乎更加合适。

##### <ruby> 受让人 <rp>  （ </rp> <rt>  assignee </rt> <rp>  ） </rp></ruby>

分配到某个议题的用户。

##### <ruby> 追溯 <rp>  （ </rp> <rt>  blame </rt> <rp>  ） </rp></ruby>

Git 中的“追溯”功能描述对文件每行的最新修改，一般会显示修订、作者和时间。这很有用，例如，可以跟踪何时添加了功能，或者哪个提交导致了特定漏洞。

##### <ruby> 分支 <rp>  （ </rp> <rt>  branch </rt> <rp>  ） </rp></ruby>

分支是仓库的平行版本。它包含在仓库中，但不影响主要或 master 分支，可让你自由工作而不中断“即时”版本。在执行所需的更改后，可以将分支合并回 master 分支以发布更改。

##### <ruby> 检出 <rp>  （ </rp> <rt>  checkout </rt> <rp>  ） </rp></ruby>

你可以在命令行上使用 `git checkout` 创建新分支，将当前的工作分支更改为不同的分支，甚至使用 `git checkout [branchname] [path to file]`从不同的分支切换到不同版本的文件。“检出”操作会使用对象数据库中的树对象或 blob 更新工作树的全部或部分，以及更新索引和 HEAD（如果整个工作树指向新分支）。

##### <ruby> 优选 <rp>  （ </rp> <rt>  cherry-picking </rt> <rp>  ） </rp></ruby>

从一系列更改（通常是提交）中选择一部分更改，并在不同的代码库上将它们记录为新的更改系列。在 Git 中，这通过 `git cherry-pick` 命令来执行，在另一个分支上解压缩现有提交引入的更改，并根据当前分支的提示将其记录为新提交。

##### <ruby> 清洁 <rp>  （ </rp> <rt>  clean </rt> <rp>  ） </rp></ruby>

工作树在对应当前头部引用的版本时是清洁的。另请参阅“脏”。

##### <ruby> 克隆 <rp>  （ </rp> <rt>  clone </rt> <rp>  ） </rp></ruby>

克隆是指存在于计算机上而非网站服务器其他位置的仓库副本，或者是复制的操作。在克隆时，可在首选编辑器中编辑文件，使用 Git 跟踪更改而无需保持在线。你克隆的仓库仍与远程版本连接，以便当你在线时将本地更改推送到远程，以保持同步。

##### <ruby> 行为准则 <rp>  （ </rp> <rt>  code of conduct </rt> <rp>  ） </rp></ruby>

为如何参与社区制定标准的文档。

##### <ruby> 代码所有者 <rp>  （ </rp> <rt>  code owner </rt> <rp>  ） </rp></ruby>

被指定为部分仓库代码所有者的个人。当有人打开对代码所有者拥有的代码进行更改的拉取请求（非草稿模式）时，会自动申请代码所有者审查。

##### <ruby> 协作者 <rp>  （ </rp> <rt>  collaborator </rt> <rp>  ） </rp></ruby>

协作者是受仓库所有者邀请参与，对仓库拥有读取和写入权限的人。

##### <ruby> 提交 <rp>  （ </rp> <rt>  commit </rt> <rp>  ） </rp></ruby>

提交或“修订”是对一个文件（或一组文件）的个别更改。在进行提交以保存工作时，Git 会创建唯一的 ID（也称为 "SHA" 或“哈希”），用于记录提交的特定更改以及提交者和提交时间。提交通常包含一条提交消息，其中简要说明所做的更改。

##### <ruby> 提交作者 <rp>  （ </rp> <rt>  commit author </rt> <rp>  ） </rp></ruby>

进行提交的用户。

##### <ruby> 提交 ID <rp>  （ </rp> <rt>  commit ID </rt> <rp>  ） </rp></ruby>

也称为 SHA。用于识别提交的 40 字符校验和的哈希。

##### <ruby> 提交消息 <rp>  （ </rp> <rt>  commit message </rt> <rp>  ） </rp></ruby>

随附于提交的简短描述性文字，用于沟通提交引入的更改。

##### <ruby> 持续集成 <rp>  （ </rp> <rt>  continuous integration </rt> <rp>  ） </rp></ruby>

也称为 CI。在个人对 GitHub 上配置的仓库提交更改后运行自动化构建和测试的过程。CI 是软件开发中一种帮助检测错误的常用最佳实践。

##### <ruby> 贡献指南 <rp>  （ </rp> <rt>  contribution guidelines </rt> <rp>  ） </rp></ruby>

说明人们应如何参与项目的文档。

##### <ruby> 贡献 <rp>  （ </rp> <rt>  contributions </rt> <rp>  ） </rp></ruby>

GitHub 上的特定活动。

##### <ruby> 贡献者 <rp>  （ </rp> <rt>  contributor </rt> <rp>  ） </rp></ruby>

贡献者是指对仓库没有协作者权限但参与过项目，并且他们打开的拉取请求已合并到仓库的人员。

##### <ruby> 默认分支 <rp>  （ </rp> <rt>  default branch </rt> <rp>  ） </rp></ruby>

仓库中的基本分支，除非你指定不同的分支，否则会自动对它完成所有拉取请求和代码提交。此分支通常称为 `master`。

##### <ruby> 游离的 HEAD <rp>  （ </rp> <rt>  detached HEAD </rt> <rp>  ） </rp></ruby>

如果你操作的是游离的 HEAD，Git 将会警告你，这意味着 Git 不指向某个分支，并且你的任何提交都不会出现在提交历史记录中。例如，在检出并非任何特定分支最新提交的任意提交时，你操作的是“游离的 HEAD”。

##### <ruby> 差异 <rp>  （ </rp> <rt>  diff </rt> <rp>  ） </rp></ruby>

差异是指两个提交之间的更改或保存的更改之间的区别，它将从视觉上描述文件自上次提交后添加或删除的内容。

##### <ruby> 脏 <rp>  （ </rp> <rt>  dirty </rt> <rp>  ） </rp></ruby>

工作树如果包含尚未提交到当前分支的更改，将被视为“脏”。

##### <ruby> 快进 <rp>  （ </rp> <rt>  fast-forward </rt> <rp>  ） </rp></ruby>

快进是一种特殊类型的合并，在其中你有修订以及“合并”另一个分支的更改作为现有分支的子系。在这种情况下，你无法进行新的合并提交，而只是更新此修订。这在远程仓库的远程跟踪分支中经常发生。

##### <ruby> 功能分支 <rp>  （ </rp> <rt>  feature branch </rt> <rp>  ） </rp></ruby>

用于试验新功能或修复未正式使用的议题的分支。也称为主题分支。

##### <ruby> 围栏代码块 <rp>  （ </rp> <rt>  fenced code block </rt> <rp>  ） </rp></ruby>

你可以在代码块前后使用三个反引号 `````，通过 GitHub Flavored Markdown 创建缩进代码块。

##### <ruby> 获取 <rp>  （ </rp> <rt>  fetch </rt> <rp>  ） </rp></ruby>

在使用 `git fetch` 时，你将从远程仓库添加更改到本地工作分支，而不提交它们。与 `git pull` 不同，提取可让你在更改提交到本地分支之前先进行审查。

##### <ruby> 跟进（用户） <rp>  （ </rp> <rt>  following (users) </rt> <rp>  ） </rp></ruby>

获取关于另一个用户的贡献和活动的通知。

##### <ruby> 强制推送 <rp>  （ </rp> <rt>  force push </rt> <rp>  ） </rp></ruby>

一种使用本地更改覆盖远程仓库的 Git 推送，不管是否冲突。

##### <ruby> 复刻 <rp>  （ </rp> <rt>  fork </rt> <rp>  ） </rp></ruby>

复刻是其他用户仓库在你的帐户上的个人副本。复刻允许你自由更改项目而不影响原始上游仓库。你也可以在上游仓库中打开拉取请求，并使复刻同步最新的更改，因为两个仓库仍然互相连接。

##### gitfile

一种普通的 `.git` 文件，始终位于工作树的根部，指向 Git 目录，包含整个 Git 仓库及其元数据。你可以在命令行上使用 `git rev-parse --git-dir` 查看仓库（实际仓库）的此文件。

##### HEAD

当前分支。

##### <ruby> 挂钩 <rp>  （ </rp> <rt>  hook </rt> <rp>  ） </rp></ruby>

在多个 Git 命令正常执行时，对可选脚本进行标注以允许开发者添加功能或检查。通常，挂钩允许预先验证和潜在中止命令，并且允许在操作完成后再发事后通知。

##### <ruby> 实例 <rp>  （ </rp> <rt>  instance </rt> <rp>  ） </rp></ruby>

组织包含在其配置和控制的虚拟机中的 GitHub 私有副本。

##### <ruby> 议题 <rp>  （ </rp> <rt>  issue </rt> <rp>  ） </rp></ruby>

议题是提议的与仓库相关的改进、任务或问题。（对于公共仓库）任何人都可创建议题，然后由仓库协作者调解。每个议题都包含自己的讨论线程。你也可以使用标签将议题归类并分配到某人。

##### <ruby> 密钥指纹 <rp>  （ </rp> <rt>  key fingerprint </rt> <rp>  ） </rp></ruby>

用于识别较长公钥的简短字节系列。

##### <ruby> 关键词 <rp>  （ </rp> <rt>  keyword </rt> <rp>  ） </rp></ruby>

用在拉取请求中时关闭议题的特定文字。

##### <ruby> 标签 <rp>  （ </rp> <rt>  label </rt> <rp>  ） </rp></ruby>

议题或拉取请求的标记。仓库随附一系列默认标签，但用户也可创建自定义标签。

##### LFS

Git Large File Storage。一种开源 Git 扩展，用于对大文件进行版本控制。

##### <ruby> 许可证 <rp>  （ </rp> <rt>  license </rt> <rp>  ） </rp></ruby>

一种可随附于项目的文档，告知们能够对你的源代码执行哪些操作，不能执行哪些操作。

##### <ruby> 行注释 <rp>  （ </rp> <rt>  line comment </rt> <rp>  ） </rp></ruby>

拉取请求内特定代码行上的评论。

##### <ruby> 主干 <rp>  （ </rp> <rt>  master </rt> <rp>  ） </rp></ruby>

默认开发分支。只要创建 Git 仓库，就会创建一个名为 `master` 的分支，并且它会变为活动的分支。大多数情况下，这包含本地开发，但纯属惯例，而非必需。

##### <ruby> 提及 <rp>  （ </rp> <rt>  mention </rt> <rp>  ） </rp></ruby>

一种通过在用户名前加上 @ 符号来发送给用户的通知。GitHub 上组织中的用户也可成为可提及的团队一部分。

##### <ruby> 合并 <rp>  （ </rp> <rt>  merge </rt> <rp>  ） </rp></ruby>

合并是从一个分支（在相同的仓库中或来自一个分叉）提取更改，然后将其应用到另一个分支。这通常是作为“拉取请求”（可视为请求合并）或通过命令行完成。如果没有冲突的更改，可通过 GitHub.com web 界面使用拉取请求完成合并，或始终通过命令行完成。

##### <ruby> 合并冲突 <rp>  （ </rp> <rt>  merge conflict </rt> <rp>  ） </rp></ruby>

合并的分支之间发生的差异。当人们对同一文件的同一行进行不同的更改时，或者一个人编辑某文件而另一个人删除该文件时，就会发生合并冲突。必须解决合并冲突后才可合并分支。

##### <ruby> 合并请求 <rp>  （ </rp> <rt>  merge request </rt> <rp>  ） </rp></ruby>

合并请求（MR）是 GitLab 上类似于 GitHub 上的拉取请求的概念。

##### <ruby> 里程碑 <rp>  （ </rp> <rt>  milestone </rt> <rp>  ） </rp></ruby>

一种跟踪仓库中议题或拉取请求组进度的方式。

##### <ruby> 镜像 <rp>  （ </rp> <rt>  mirror </rt> <rp>  ） </rp></ruby>

仓库的新副本。

##### <ruby> 非快进 <rp>  （ </rp> <rt>  non-fast-forward </rt> <rp>  ） </rp></ruby>

当仓库的本地副本未与上游仓库同步时，你在推送本地更改之前需要提取上游更改。

##### <ruby> 通知 <rp>  （ </rp> <rt>  notification </rt> <rp>  ） </rp></ruby>

web 或电子邮件（根据你的设置）传送的更新，提供你感兴趣的活动的相关信息。

##### <ruby> 外部协作者 <rp>  （ </rp> <rt>  outside collaborator </rt> <rp>  ） </rp></ruby>

已被授予访问一个或多个组织的仓库但对组织没有其他访问权限的用户，且不属于组织的成员。

##### <ruby> 开源 <rp>  （ </rp> <rt>  open source </rt> <rp>  ） </rp></ruby>

开源软件是可供任何人自由使用、修改和共享（以修改和未修改的形式）的软件。今天，“开源”的概念通常扩展到软件以外，代表一种协作原则，其中工作材料在线供任何人分叉、修改、讨论和参与。

##### <ruby> 源 <rp>  （ </rp> <rt>  origin </rt> <rp>  ） </rp></ruby>

默认上游仓库。大多数项目至少有一个它们跟踪的上游项目。默认情况下，源用于该目的。

##### <ruby> 所有者 <rp>  （ </rp> <rt>  owner </rt> <rp>  ） </rp></ruby>

对组织有完全管理权限的组织成员。

##### <ruby> 私有贡献 <rp>  （ </rp> <rt>  private contributions </rt> <rp>  ） </rp></ruby>

对私有（与公共相对）仓库的贡献。

##### <ruby> 私有仓库 <rp>  （ </rp> <rt>  private repository </rt> <rp>  ） </rp></ruby>

私有仓库仅对仓库所有者和所有者指定的协作者可见。

##### <ruby> 生产分支 <rp>  （ </rp> <rt>  production branch </rt> <rp>  ） </rp></ruby>

包含可使用或部署到应用程序或站点的最终更改的分支。

##### <ruby> 个人资料 <rp>  （ </rp> <rt>  profile </rt> <rp>  ） </rp></ruby>

显示 GitHub 上用户活动相关信息的页面。

##### <ruby> 受保护分支 <rp>  （ </rp> <rt>  protected branch </rt> <rp>  ） </rp></ruby>

受保护分支在仓库管理员选择保护的分支上禁止多项 Git 功能。必要检查未通过或必需审查未批准，不能对它们执行强制推送、删除和更改合并，或者不能从 GitHub web 界面上传文件到其中。受保护分支通常是默认分支。

##### <ruby> 公共贡献 <rp>  （ </rp> <rt>  public contributions </rt> <rp>  ） </rp></ruby>

对公共（与私有相对）仓库的贡献。

##### <ruby> 公共仓库 <rp>  （ </rp> <rt>  public repository </rt> <rp>  ） </rp></ruby>

公共仓库可供任何人查看，包括不是 GitHub 用户的人员。

##### <ruby> 拉取 <rp>  （ </rp> <rt>  pull </rt> <rp>  ） </rp></ruby>

拉取是指提取与合并更改。例如，如果有人编辑了你操作的远程文件，你要将这些更改拉取到本地副本，以使其保持最新。另请参阅“提取”。

##### <ruby> 拉取权限 <rp>  （ </rp> <rt>  pull access </rt> <rp>  ） </rp></ruby>

读取权限的同义词。

##### <ruby> 拉取请求 <rp>  （ </rp> <rt>  pull request </rt> <rp>  ） </rp></ruby>

拉取请求（PR）是提议更改用户提交的仓库，然后被仓库协作者接受或拒绝。像议题一样，每个拉取请求都有自己的论坛。

##### <ruby> 拉取请求审查 <rp>  （ </rp> <rt>  pull request review </rt> <rp>  ） </rp></ruby>

拉取请求中协作者批准更改或在拉取请求合并之前申请进一步更改的评论。

##### <ruby> 推送 <rp>  （ </rp> <rt>  push </rt> <rp>  ） </rp></ruby>

推送是指将提交的更改发送到 GitHub.com 上的远程仓库。例如，如果你在本地更改内容，便可推送这些更改，让其他人访问。

##### <ruby> 推送分支 <rp>  （ </rp> <rt>  push a branch </rt> <rp>  ） </rp></ruby>

成功将分支推送到远程仓库后，使用本地分支中的更改来更新远程分支。在你“推送分支”时，Git 将会到远程仓库中搜索分支的头部引用，并验证它是分支本地头部引用的直系原型。在验证后，Git 将拉取所有对象（从本地头部引用可获取，而远程仓库中缺失）到远程对象数据库，然后更新远程头部引用。如果远程头部不是本地头部的原型，推送将会失败。

##### <ruby> 推送权限 <rp>  （ </rp> <rt>  push access </rt> <rp>  ） </rp></ruby>

写入权限的同义词。

##### <ruby> 读取权限 <rp>  （ </rp> <rt>  read access </rt> <rp>  ） </rp></ruby>

对仓库的权限级别，允许用户拉取或者读取仓库中的信息。所有公共仓库向所有 GitHub 用户授予读取权限。拉取权限的同义词。

##### <ruby> 自述文件 <rp>  （ </rp> <rt>  README </rt> <rp>  ） </rp></ruby>

包含仓库中文件相关信息的文本文件，通常是仓库访问者看到的第一个文件。自述文件连同仓库许可证、参与指南以及行为准则，帮助你交流要求和管理项目的参与。

##### <ruby> 变基 <rp>  （ </rp> <rt>  rebase </rt> <rp>  ） </rp></ruby>

将一系列更改从一个分支重新应用到不同的基本分支，并将该分支的头部重置为结果。

##### <ruby> 发布 <rp>  （ </rp> <rt>  release </rt> <rp>  ） </rp></ruby>

GitHub 封装软件并向用户提供软件的方式。

##### <ruby> 远程 <rp>  （ </rp> <rt>  remote </rt> <rp>  ） </rp></ruby>

这是托管于服务器（很可能是 GitHub.com）上的仓库或分支版本。远程版本可以连接到本地克隆，以使更改保持同步。

##### <ruby> 远程仓库 <rp>  （ </rp> <rt>  remote repository </rt> <rp>  ） </rp></ruby>

用于跟踪同一个项目但储存在其他位置的仓库。

##### <ruby> 远程 URL <rp>  （ </rp> <rt>  remote URL </rt> <rp>  ） </rp></ruby>

存储代码的位置：GitHub、其他用户分支甚至不同服务器 上的仓库。

##### <ruby> 副本 <rp>  （ </rp> <rt>  replica </rt> <rp>  ） </rp></ruby>

为主要 GitHub Enterprise 实例提供冗余的 GitHub Enterprise 实例。

##### <ruby> 仓库 <rp>  （ </rp> <rt>  repository </rt> <rp>  ） </rp></ruby>

仓库是 GitHub 最基本的元素，最容易被想象成项目的文件夹。一个仓库包含所有项目文件（包括文档），并且存储每个文件的修订历史记录。仓库可有多个协作者，也可以是公共仓库或私有仓库。

##### <ruby> 仓库维护员 <rp>  （ </rp> <rt>  repository maintainer </rt> <rp>  ） </rp></ruby>

管理仓库的人员。此人可帮助对议题分类，以及使用标签和其他功能管理仓库的工作，也可负责更新自述文件和参与文件。

##### <ruby> 解决 <rp>  （ </rp> <rt>  resolve </rt> <rp>  ） </rp></ruby>

手动修复自动合并失败的操作。

##### <ruby> 还原 <rp>  （ </rp> <rt>  revert </rt> <rp>  ） </rp></ruby>

恢复 GitHub 上的拉取请求时，新拉取请求会自动打开，其中有一个提交用于从原始合并的拉取请求恢复合并提交。在 Git 中，你可以使用 `git revert` 恢复提交。

##### <ruby> 审查 <rp>  （ </rp> <rt>  review </rt> <rp>  ） </rp></ruby>

审查允许对仓库具有访问权限的其他人评论拉取请求中提议的更改、审批更改或在拉取请求合并之前请求进一步更改。

##### <ruby> 服务挂钩 <rp>  （ </rp> <rt>  service hook </rt> <rp>  ） </rp></ruby>

也称为“Web 挂钩”。Web 挂钩是一种通知方式，只要仓库或组织上发生特定操作，就会发送通知到外部 web 服务器。

##### <ruby> 压扁 <rp>  （ </rp> <rt>  squash </rt> <rp>  ） </rp></ruby>

将多个提交合并为一个。也是 Git 命令。

##### <ruby> 暂存实例 <rp>  （ </rp> <rt>  staging instance </rt> <rp>  ） </rp></ruby>

在修改应用到实际 GitHub Enterprise 实例之前测试修改的一种方式。

##### <ruby> 状态 <rp>  （ </rp> <rt>  status </rt> <rp>  ） </rp></ruby>

拉取请求中的可视表现形式，表示你的提交符合你参与的仓库所设定的条件。

##### <ruby> 星标 <rp>  （ </rp> <rt>  star </rt> <rp>  ） </rp></ruby>

仓库的书签或赞赏表示。星标是项目受欢迎程度排名的手动方式。

##### <ruby> 主题分支 <rp>  （ </rp> <rt>  topic branch </rt> <rp>  ） </rp></ruby>

开发者用来识别开发概念行的常规 Git 分支。由于分支很容易并且便宜，因此往往适合拥有多个小分支，每个小分支包含定义明确的概念，或者渐进但相关的更改。也可称为“特征分支”。

##### <ruby> 上游 <rp>  （ </rp> <rt>  upstream </rt> <rp>  ） </rp></ruby>

在谈论分支或分叉时，原始仓库的主要分支通常被称为“上游”，因为它是其他更改的主要来源。你操作的分支/分叉则称为“下游”。也称为“源”。

##### <ruby> 上游分支 <rp>  （ </rp> <rt>  upstream branch </rt> <rp>  ） </rp></ruby>

合并到所述分支的默认分支（或所述分支变基到的分支）。它通过 `branch.<name>.remote` 和 `branch.<name>.merge` 配置。如果 A 的上游分支是源/B，有时我们会说“A 在跟踪源/B”。

##### <ruby> 查看 <rp>  （ </rp> <rt>  watch </rt> <rp>  ） </rp></ruby>

你可以关注仓库或议题，以便在议题或拉取请求有更新时接收通知。

##### <ruby> web 挂钩 <rp>  （ </rp> <rt>  webhooks </rt> <rp>  ） </rp></ruby>

Web 挂钩可让你构建或设置订阅 GitHub.com 上特定事件的 GitHub 应用程序。Web 挂钩提供一种通知方式，只要仓库或组织中发生特定操作，就会发送通知到外部 web 服务器。也称为“服务挂钩”。

##### <ruby> 写入权限 <rp>  （ </rp> <rt>  write access </rt> <rp>  ） </rp></ruby>

对仓库的权限级别，可让用户推送或写入更改到仓库。


新闻速读 > 谷歌工程师：七成 Chrome 安全漏洞是内存安全问题

Summary: • 勒索事件追踪：4200 万美金成交！ 黑客声称特朗普“脏衣服”被买走 • 开源图形编辑器 Krita 首个测试版登陆 Play 商城

![](/data/attachment/album/202005/24/103207xjick8vwiijb8ij0.jpg)

#### 谷歌工程师：七成 Chrome 安全漏洞是内存安全问题

近日，有谷歌工程师分析了自 2015 年以来在 Chrome 稳定版分支中修复的 912 个安全错误。并发现，在这些被标记为“高”或“严重”等级的所有安全漏洞中，大约 70％ 是内存管理和安全问题。 这一数据恰巧与微软此前的研究结果相同：微软安全响应中心（MSRC）对自 2004 年以来所有报告过的微软安全漏洞进行了分类，所有微软年度补丁中约有 70% 是针对内存安全漏洞的修复程序。

来源：[开源中国](https://www.oschina.net/news/115898/chrome-70-of-all-security-bugs-are-memory-safety-issues)

>
> 硬核老王点评：内存问题是永恒的安全问题，所以， C/C++ 这种自我管理内存的编程语言，已经越来越面临更大的挑战，因此，Rust 得到青睐也是可以预期的。
>
>
>

#### 勒索事件追踪：4200 万美金成交！ 黑客声称特朗普“脏衣服”被买走

据外媒报道，此前，黑客以 2100 万美金勒索纽约 Grubman Shire Meiselas＆Sacks 事务所无果后，声称有特朗普的黑历史，并以 4200 万美金发起新一轮的勒索。近日，该黑客组织声称已经将美国总统特朗普的“黑历史”卖给了一位神秘买家。

来源：[E安全](https://mp.weixin.qq.com/s/Ge3bbLWo5El0LNO66un2vQ)

#### 开源图形编辑器 Krita 首个测试版登陆 Play 商城

该测试版基于 Krita 4.2.9 桌面版，具备和桌面版相同的完整功能。不过值得注意的是，此版软件兼容 Android 平板和 Chromebook 设备，暂不支持Android手机。此外，它并未对平板设备进行触控优化，因此还需要等待后续版本的改进。

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

>
> 硬核老王点评：桌面版要移植到手机上，需要做很多的工作，但是自从平板设备和触控操作尚属可行。
>
>
>


k9s：你没看错，这是一个加速 k8s 集群管理的工具

Summary: 看看这个很酷的 Kubernetes 管理的终端 UI。

看看这个很酷的 Kubernetes 管理的终端 UI。

>
> 看看这个很酷的 Kubernetes 管理的终端 UI。
>
>
>

![](/data/attachment/album/202005/25/104742pqjmiroc44honcs5.jpg)

通常情况下，我写的关于 Kubernetes 管理的文章中用的都是做集群管理的 `kubectl` 命令。然而最近，有人给我介绍了 [k9s](https://github.com/derailed/k9s) 项目，可以让我快速查看并解决 Kubernetes 中的日常问题。这极大地改善了我的工作流程，我会在这篇教程中告诉你如何上手它。

它可以安装在 Mac、Windows 和 Linux 中，每种操作系统的说明可以在[这里](https://github.com/derailed/k9s)找到。请先完成安装，以便能够跟上本教程。

我会使用 Linux 和 Minikube，这是一种在个人电脑上运行 Kubernetes 的轻量级方式。按照[此教程](https://opensource.com/article/18/10/getting-started-minikube)或使用[该文档](https://kubernetes.io/docs/tasks/tools/install-minikube/)来安装它。

### 设置 k9s 配置文件

安装好 `k9s` 应用后，从帮助命令开始总是很好的起点。

```
$ k9s help
```

正如你在帮助信息所看到的，我们可以用 `k9s` 来配置很多功能。我们唯一需要进行的步骤就是编写配置文件。而 `info` 命令会告诉我们该应用程序要在哪里找它的配置文件。

```
$ k9s info
 ____  __.________
|    |/ _/   __   \______
|      < \____    /  ___/
|    |  \   /    /\___ \
|____|__ \ /____//____  >
        \/            \/

Configuration:   /Users/jess/.k9s/config.yml
Logs:            /var/folders/5l/c1y1gcw97szdywgf9rk1100m0000gn/T/k9s-jess.log
Screen Dumps:    /var/folders/5l/c1y1gcw97szdywgf9rk1100m0000gn/T/k9s-screens-jess
```

如果要添加配置文件，该配置目录不存在的话就创建它，然后添加一个配置文件。

```
$ mkdir -p ~/.k9s/
$ touch ~/.k9s/config.yml
```

在这篇介绍中，我们将使用 `k9s` 版本库中推荐的默认 `config.yml`。维护者请注意，这种格式可能会有变化，可以[在这里查看](https://github.com/derailed/k9s#k9s-configuration)最新版本。

```
k9s:
  refreshRate: 2
  headless: false
  readOnly: false
  noIcons: false
  logger:
    tail: 200
    buffer: 500
    sinceSeconds: 300
    fullScreenLogs: false
    textWrap: false
    showTime: false
  currentContext: minikube
  currentCluster: minikube
  clusters:
    minikube:
      namespace:
        active: ""
        favorites:
        - all
        - kube-system
        - default
      view:
        active: dp
  thresholds:
    cpu:
      critical: 90
      warn: 70
    memory:
      critical: 90
      warn: 70
```

我们设置了 `k9s` 寻找本地的 minikube 配置，所以我要确认 minikube 已经上线可以使用了。

```
$ minikube status
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
```

### 运行 k9s 来探索一个 Kubernetes 集群

有了配置文件，并指向我们的本地集群，我们现在可以运行 `k9s` 命令了。

```
$ k9s
```

启动后，会弹出 `k9s` 的基于文本的用户界面。在没有指定命名空间标志的情况下，它会向你显示默认命名空间中的 Pod。

![K9s screenshot](/data/attachment/album/202005/25/104848zllsmdm3ql647l4r.png "K9s screenshot")

如果你运行在一个有很多 Pod 的环境中，默认视图可能会让人不知所措。或者，我们可以将注意力集中在给定的命名空间上。退出该应用程序，运行 `k9s -n <namespace>`，其中 `<namespace>` 是已存在的命名空间。在下图中，我运行了 `k9s -n minecraft`，它显示了我损坏的 Pod：

![K9s screenshot](/data/attachment/album/202005/25/104849bl11m9jlhhm4lw4h.png "K9s screenshot")

所以，一旦你有了 `k9s` 后，有很多事情你可以更快地完成。

通过快捷键来导航 `k9s`，我们可以随时使用方向键和回车键来选择列出的项目。还有不少其他的通用快捷键可以导航到不同的视图。

* `0`：显示在所有命名空间中的所有 Pod ![K9s screenshot](/data/attachment/album/202005/25/104855hnzmdbpuzq75z5l2.png "K9s screenshot")
* `d`：描述所选的 Pod ![K9s screenshot](/data/attachment/album/202005/25/104859k6cc2z2gb9wddcgd.png "K9s screenshot")
* `l`：显示所选的 Pod 的日志 ![Using k9s to show Kubernetes pod logs](/data/attachment/album/202005/25/104909zpcjjepmjm4oe499.png "Using k9s to show Kubernetes pod logs")

你可能会注意到 `k9s` 设置为使用 [Vim 命令键](https://opensource.com/article/19/3/getting-started-vim)，包括使用 `J` 和 `K` 键上下移动等。Emacs 用户们，败退吧 :)

### 快速查看不同的 Kubernetes 资源

需要去找一个不在 Pod 里的东西吗？是的，我也需要。当我们输入冒号（`:`）键时，可以使用很多快捷方式。从那里，你可以使用下面的命令来导航。

* `:svc`：跳转到服务视图 ![K9s screenshot](/data/attachment/album/202005/25/104911lzjkeeisqkkgoj42.png "K9s screenshot")
* `:deploy`：跳转到部署视图 ![K9s screenshot](/data/attachment/album/202005/25/104914bqd6vddnjt1zzqqz.png "K9s screenshot")
* `:rb`：跳转到角色绑定视图，用于 [基于角色的访问控制（RBAC）](https://kubernetes.io/docs/reference/access-authn-authz/rbac/)管理 ![K9s screenshot](/data/attachment/album/202005/25/104920po5nov990nzvz599.png "K9s screenshot")
* `:namespace`：跳转到命名空间视图 ![K9s screenshot](/data/attachment/album/202005/25/104922yvooon0ro1bn0or0.png "K9s screenshot")
* `:cj`：跳转到 cronjob 视图，查看集群中计划了哪些作业。 ![K9s screenshot](/data/attachment/album/202005/25/104924cnrggikg3x7nrbii.png "K9s screenshot")

这个应用最常用的工具是键盘；要在任何页面往上或下翻页，请使用方向键。如果你需要退出，记得使用 Vim 绑定键，键入 `:q`，然后按回车键离开。

### 用 k9s 排除 Kubernetes 的故障示例

当出现故障的时候，`k9s` 怎么帮忙？举个例子，我让几个 Pod 由于配置错误而死亡。下面你可以看到我那个可怜的 “hello” 部署死了。当我们将其高亮显示出来，可以按 `d` 运行 `describe` 命令，看看是什么原因导致了故障。

![K9s screenshot](/data/attachment/album/202005/25/104927sixjpcxs5osjx11t.png "K9s screenshot")

![K9s screenshot](/data/attachment/album/202005/25/104936lpk81mzhmu8qw1kc.png "K9s screenshot")

草草掠过那些事件并不能告诉我们故障原因。接下来，我按了 `esc` 键，然后通过高亮显示 Pod 并输入`shift-l` 来检查日志。

![K9s screenshot](/data/attachment/album/202005/25/104938uvie7qyvs9qsbvyv.png "K9s screenshot")

不幸的是，日志也没有提供任何有用的信息（可能是因为部署从未正确配置过），而且 Pod 也没有出现。

然后我使用 `esc` 退了出来，我看看删除 Pod 是否能解决这个问题。要做到这一点，我高亮显示该 Pod，然后使用 `ctrl-d`。幸好 `k9s` 在删除前会提示用户。

![K9s screenshot](/data/attachment/album/202005/25/104941vi0jsc80ckd1los1.png "K9s screenshot")

虽然我确实删除了这个 Pod，但部署资源仍然存在，所以新的 Pod 会重新出现。无论什么原因（我们还不知道），它还会继续重启并死掉。

在这里，我会重复查看日志，描述资源，甚至使用 `e` 快捷方式来编辑运行中的 Pod 以排除故障行为。在这个特殊情况下，失败的 Pod 是因为没有配置在这个环境下运行。因此，让我们删除部署来停止崩溃接着重启的循环。

我们可以通过键入 `:deploy` 并点击回车进入部署。从那里我们高亮显示并按 `ctrl-d` 来删除。

![K9s screenshot](/data/attachment/album/202005/25/104943aj9hnjzn0s111nr0.png "K9s screenshot")

![K9s screenshot](/data/attachment/album/202005/25/104946qg4jntnufntanb21.png "K9s screenshot")

这个有问题的部署被干掉了! 只用了几个按键就把这个失败的部署给清理掉了。

### k9s 是极其可定制的

这个应用有很多自定义选项、乃至于 UI 的配色方案。这里有几个可编辑的选项，你可能会感兴趣。

* 调整你放置 `config.yml` 文件的位置（这样你就可以把它存储在[版本控制](https://opensource.com/article/19/3/move-your-dotfiles-version-control)中）。
* 在 `alias.yml` 文件中添加[自定义别名](https://k9scli.io/topics/aliases/)。
* 在 `hotkey.yml` 文件中创建[自定义热键](https://k9scli.io/topics/hotkeys/)。
* 探索现有的[插件](https://github.com/derailed/k9s/tree/master/plugins)或编写自己的插件。

整个应用是在 YAML 文件中配置的，所以定制化对于任何 Kubernetes 管理员来说都会觉得很熟悉。

### 用 k9s 简化你的生活

我倾向于以一种非常手动的方式来管理我团队的系统，更多的是为了锻炼脑力，而不是别的。当我第一次听说 `k9s` 的时候，我想，“这只是懒惰的 Kubernetes 而已。”于是我否定了它，然后回到了到处进行人工干预的状态。实际上，当我在处理积压工作时就开始每天使用它，而让我震惊的是它比单独使用 `kubectl` 快得多。现在，我已经皈依了。

了解你的工具并掌握做事情的“硬道理”很重要。还有一点很重要的是要记住，就管理而言，重要的是要更聪明地工作，而不是更努力。使用 `k9s`，就是我践行这个目标的方法。我想，我们可以把它叫做懒惰的 Kubernetes 管理，也没关系。

---

via: <https://opensource.com/article/20/5/kubernetes-administration>

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


新闻速读 > Linus Torvalds 升级主力电脑，15 年来首次不用英特尔处理器

Summary: • 世界上使用量最大的数据库引擎 SQLite 3.32.0 发布 • 民间高手魔改卡西欧计算器遭版权组织警告 • OpenCV 开源许可协议拟从 BSD 变更为 Apache 2

![](/data/attachment/album/202005/25/121329bkoh0h802sq080k5.jpg)

#### Linus Torvalds 升级主力电脑，15 年来首次不用英特尔处理器

在近日发布的 Linux Kernel 5.7 rc7 帖子中，托瓦兹表示主力电脑将不再使用英特尔的 CPU 了：“事实上本周对于我来说最大的兴奋点就是我升级了主力电脑，而且这是我 15 年来首次更换到非英特尔平台。我目前还没有切换到 ARM，不过我现在使用的是 AMD 的 Threadripper 3970x。我的 allmodconfig 测试版速度要比此前快了 3 倍。在这段平静期还无法突显出来，不过相信在下个窗口合并期将会有明显的升级。”

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

>
> 硬核老王点评：Linus 作为最大的开源领袖之一，其一举一动都极引人瞩目。Linus 换了新电脑，是不是会加速 Linux 内核的开发工作呢？毕竟大神可能会花费更少的时间来等待内核编译完成~
>
>
>

#### 世界上使用量最大的数据库引擎 SQLite 3.32.0 发布

SQLite 是一个 C 实现的 SQL 数据库引擎，它的特点是小型、快速、自包含、高可靠性和功能齐全。SQLite 嵌入在所有手机和大多数计算机中，也捆绑在为数众多的其它应用中，是世界上使用量最大的数据库引擎。

来源：[开源中国](http://www.oschina.net/)

>
> 硬核老王点评：这个不起眼的小型数据库，因其体型小而得到广泛使用，就像 MINIX 是世界上使用最多的操作系统一样，让很多人吃惊。
>
>
>

#### 民间高手魔改卡西欧计算器遭版权组织警告

来自印度的 Neutrino 动手将一台卡西欧计算器（fx-ms991）的太阳能充电面板改造为显示屏，借助 esp 元件、Firebase 编程开发，可以通过这块屏幕连接互联网并收发即时消息。随后，改写代码等也被放上了 GitHub，供在家无聊但有兴趣的朋友效仿借鉴。然而，版权保护组织 REACT 本周出面，声称 Neutrino 托管的代码中并非全部是开源项目，有些是卡西欧专有的私产，不允许公开使用，虽然 Neutrino 坚称自己完全是从零写的程序。

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

>
> 硬核老王点评：应该鼓励这种黑客精神，建议卡西欧和 REACT 对这种情况高抬贵手。
>
>
>

#### OpenCV 开源许可协议拟从 BSD 变更为 Apache 2

OpenCV 开发团队目前正在讨论变更开源许可协议的详细问题，预计在 6 月 29 日进行第一次评估。BSD 许可协议比较宽松，对于采用 BSD 的开源项目，开发者使可以自由使用、修改源码，也可以将修改后的代码作为开源或者专有软件再发布，不过需要保留当前许可内容。然而 BSD 许可协议在某些情况下（例如涉及到专利）却无法保护用户。

来源：[开源中国](https://www.oschina.net/news/115902/opencv-license-apache2-changing)

>
> 硬核老王点评：宽松自由的 BSD 许可证，是不是对开源最有利，这个要全面来看待。
>
>
>


如何安装使用 Qt 5 的音频播放器 Audacious 4.0

Summary: Audacious 是一个开源音频播放器，可用于包括 Linux 在内的多个平台。继上次发布主版本将近 2 年后，Audacious 4.0 带来了一些重大变化。

[Audacious](https://audacious-media-player.org) 是一个开源音频播放器，可用于包括 Linux 在内的多个平台。继上次发布主版本将近 2 年后，Audacious 4.0 带来了一些重大变化。

最新版本的 Audacious 4.0 默认带 [Qt 5](https://doc.qt.io/qt-5/qt5-intro.html) 用户界面。你仍然可以和以前一样使用旧的 GTK2 UI，但是，新功能仅会添加到 Qt UI 中。

让我们看下发生了什么变化，以及如何在 Linux 系统上安装最新的 Audacious。

### Audacious 4.0 关键变化和功能

![](/data/attachment/album/202005/25/223338q0oaxa5ukiwdx6mr.jpg)

当然，主要的变化是默认使用 Qt 5 UI。除此之外，他们的[官方公告](https://audacious-media-player.org/news/45-audacious-4-0-released)中提到了许多改进和功能补充，它们是：

* 单击播放列表列头可对播放列表进行排序
* 拖动播放列表列头会更改列顺序
* 应用中的音量和时间步长设置
* 隐藏播放列表标签的新选项
* 按路径对播放列表排序，现在将文件夹排序在文件后面
* 实现了额外的 MPRIS 调用，以与 KDE 5.16+ 兼容
* 新的基于 OpenMPT 的跟踪器模块插件
* 新的 VU Meter 可视化插件
* 添加了使用 SOCKS 网络代理的选项
* 换歌插件现在可在 Windows 上使用
* 新的“下一张专辑”和“上一张专辑”命令
* Qt UI 中的标签编辑器现在可以一次编辑多个文件
* 为 Qt UI 实现均衡器预设窗口
* 歌词插件获得了在本地保存和加载歌词的能力
* 模糊范围和频谱分析器可视化已移植到 Qt
* MIDI 插件 “SoundFont 选择”已移植到 Qt
* JACK 输出插件获得了一些新选项
* 添加了无限循环 PSF 文件的选项

如果你以前不了解它，你可以轻松安装它，并使用均衡器和 [LADSP](https://www.ladspa.org/) 效果器来调整音乐体验。

![](/data/attachment/album/202005/25/223349ti89t8eyz3rnq3vt.jpg)

### 如何在 Ubuntu 上安装 Audacious 4.0

值得注意的是，[非官方 PPA](https://itsfoss.com/ppa-guide/) 是由 [UbuntuHandbook](http://ubuntuhandbook.org/index.php/2020/03/audacious-4-0-released-qt5-ui/) 提供的。你可以按照以下说明在 Ubuntu 16.04、18.04、19.10 和 20.04 上进行安装。

1、首先，你必须在终端中输入以下命令将 PPA 添加到系统中：

```
sudo add-apt-repository ppa:ubuntuhandbook1/apps
```

2、接下来，你需要从仓库中更新（刷新）软件包信息，然后继续安装该应用。方法如下：

```
sudo apt update
sudo apt install audacious audacious-plugins
```

就是这样。你无需执行其他任何操作。无论什么情况，如果你想[删除 PPA 和软件](https://itsfoss.com/how-to-remove-or-delete-ppas-quick-tip/)，只需按顺序输入以下命令：

```
sudo add-apt-repository --remove ppa:ubuntuhandbook1/apps
sudo apt remove --autoremove audacious audacious-plugins
```

你也可以在它的 GitHub 页面上查看有关源码的更多信息，并根据需要在其他 Linux 发行版上进行安装。

* [Audacious 源代码](https://github.com/audacious-media-player/audacious)

### 总结

新功能和 Qt 5 UI 开关对于改善用户体验和音频播放器的功能应该是一件好事。如果你是经典 Winamp 界面的粉丝，它也可以正常工作。但缺少其公告中提到的一些功能。

你可以尝试一下，并在下面的评论中让我知道你的想法！

---

via: <https://itsfoss.com/audacious-4-release/>

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


为什么 strace 在 Docker 中不起作用？

Summary: 在编辑“容器如何工作”爱好者杂志的能力页面时，我想试着解释一下为什么 strace 在 Docker 容器中无法工作。

赞，学到了

![](/data/attachment/album/202005/26/101909a5wsvedzw5svawa2.jpg)

在编辑“容器如何工作”爱好者杂志的能力页面时，我想试着解释一下为什么 `strace` 在 Docker 容器中无法工作。

这里的问题是 —— 如果我在笔记本上的 Docker 容器中运行 `strace`，就会出现这种情况：

```
$ docker run  -it ubuntu:18.04 /bin/bash
$ # ... install strace ...
[email protected]:/# strace ls
strace: ptrace(PTRACE_TRACEME, ...): Operation not permitted
```

`strace` 通过 `ptrace` 系统调用起作用，所以如果不允许使用 `ptrace`，它肯定是不能工作的! 这个问题很容易解决 —— 在我的机器上，是这样解决的：

```
docker run --cap-add=SYS_PTRACE  -it ubuntu:18.04 /bin/bash
```

但我对如何修复它不感兴趣，我想知道为什么会出现这种情况。为什么 `strace` 不能工作，为什么`--cap-add=SYS_PTRACE` 可以解决这个问题？

### 假设 1：容器进程缺少 `CAP_SYS_PTRACE` 能力。

我一直以为原因是 Docker 容器进程默认不具备 `CAP_SYS_PTRACE` 能力。这和它可以被 `--cap-add=SYS_PTRACE` 修复是一回事，是吧？

但这实际上是不合理的，原因有两个。

原因 1：在实验中，作为一个普通用户，我可以对我的用户运行的任何进程进行 `strace`。但如果我检查我的当前进程是否有 `CAP_SYS_PTRACE` 能力，则没有：

```
$ getpcaps $$
Capabilities for `11589': =
```

原因 2：`capabilities` 的手册页对 `CAP_SYS_PTRACE` 的介绍是：

```
CAP_SYS_PTRACE
       * Trace arbitrary processes using ptrace(2);
```

所以，`CAP_SYS_PTRACE` 的作用是让你像 root 一样，可以对任何用户拥有的**任意**进程进行 `ptrace`。你不需要用它来对一个只是由你的用户拥有的普通进程进行 `ptrace` 。

我用第三种方法测试了一下（LCTT 译注：此处可能原文有误） —— 我用 `docker run --cap-add=SYS_PTRACE -it ubuntu:18.04 /bin/bash` 运行了一个 Docker 容器，去掉了 `CAP_SYS_PTRACE` 能力，但我仍然可以跟踪进程，虽然我已经没有这个能力了。什么？为什么？！

### 假设 2：关于用户命名空间的事情？

我的下一个（没有那么充分的依据的）假设是“嗯，也许这个过程是在不同的用户命名空间里，而 `strace` 不能工作，因为某种原因而行不通？”这个问题其实并不相关，但这是我观察时想到的。

容器进程是否在不同的用户命名空间中？嗯，在容器中：

```
root@e27f594da870:/# ls /proc/$$/ns/user -l
... /proc/1/ns/user -> 'user:[4026531837]'
```

在宿主机：

```
bork@kiwi:~$ ls /proc/$$/ns/user -l
... /proc/12177/ns/user -> 'user:[4026531837]'
```

因为用户命名空间 ID（`4026531837`）是相同的，所以容器中的 root 用户和主机上的 root 用户是完全相同的用户。所以，绝对没有理由不能够对它创建的进程进行 `strace`!

这个假设并没有什么意义，但我（之前）没有意识到 Docker 容器中的 root 用户和主机上的 root 用户同一个，所以我觉得这很有意思。

### 假设 3：ptrace 系统的调用被 seccomp-bpf 规则阻止了

我也知道 Docker 使用 seccomp-bpf 来阻止容器进程运行许多系统调用。而 `ptrace` 在[被 Docker 默认的 seccomp 配置文件阻止的系统调用列表](https://docs.docker.com/engine/security/seccomp/)中!（实际上，允许的系统调用列表是一个白名单，所以只是`ptrace` 不在默认的白名单中。但得出的结果是一样的。）

这很容易解释为什么 `strace` 在 Docker 容器中不能工作 —— 如果 `ptrace` 系统调用完全被屏蔽了，那么你当然不能调用它，`strace` 就会失败。

让我们来验证一下这个假设 —— 如果我们禁用了所有的 seccomp 规则，`strace` 能在 Docker 容器中工作吗？

```
$ docker run --security-opt seccomp=unconfined -it ubuntu:18.04  /bin/bash
$ strace ls
execve("/bin/ls", ["ls"], 0x7ffc69a65580 /* 8 vars */) = 0
... it works fine ...
```

是的，很好用！很好。谜底解开了，除了…..

### 为什么 `--cap-add=SYS_PTRACE` 能解决问题？

我们还没有解释的是：为什么 `--cap-add=SYS_PTRACE` 可以解决这个问题？

`docker run` 的手册页是这样解释 `--cap-add` 参数的。

```
--cap-add=[]
   Add Linux capabilities
```

这跟 seccomp 规则没有任何关系! 怎么回事？

### 我们来看看 Docker 源码

当文档没有帮助的时候，唯一要做的就是去看源码。

Go 语言的好处是，因为依赖关系通常是在一个 Go 仓库里，你可以通过 `grep` 来找出做某件事的代码在哪里。所以我克隆了 `github.com/moby/moby`，然后对一些东西进行 `grep`，比如 `rg CAP_SYS_PTRACE`。

我认为是这样的。在 `containerd` 的 seccomp 实现中，在 [contrib/seccomp/seccomp/seccomp\_default.go](https://github.com/containerd/containerd/blob/4be98fa28b62e8a012491d655a4d6818ef87b080/contrib/seccomp/seccomp_default.go#L527-L537) 中，有一堆代码来确保如果一个进程有一个能力，那么它也会（通过 seccomp 规则）获得访问权限，以使用与该能力相关的系统调用。

```
case "CAP_SYS_PTRACE":
       s.Syscalls = append(s.Syscalls, specs.LinuxSyscall{
           Names: []string{
               "kcmp",
               "process_vm_readv",
               "process_vm_writev",
               "ptrace",
           },
           Action: specs.ActAllow,
           Args:   []specs.LinuxSeccompArg{},
       })
```

在 moby 中的 [profile/seccomp/seccomp.go](https://github.com/moby/moby/blob/cc0dfb6e7b22ad120c60a9ce770ea15415767cf9/profiles/seccomp/seccomp.go#L126-L132) 和 [默认的 seccomp 配置文件](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json#L723-L739)中，也有一些其他的代码似乎做了一些非常类似的事情，所以有可能就是这个代码在做这个事情。

所以我想我们有答案了!

### Docker 中的 `--cap-add` 做的事情比它说的要多

结果似乎是，`--cap-add` 并不像手册页里说的那样，它更像是 `--cap-add-and-also-whiteelist-some-extra-system-calls-if-required`。这很有意义! 如果你具有一个像 `--CAP_SYS_PTRACE` 这样的能力，可以让你使用 `process_vm_readv` 系统调用，但是该系统调用被 seccomp 配置文件阻止了，那对你没有什么帮助！

所以当你给容器 `CAP_SYS_PTRACE` 能力时，允许使用 `process_vm_readv` 和 `ptrace` 系统调用似乎是一个合理的选择。

### 就这样！

这是个有趣的小事情，我认为这是一个很好的例子，说明了容器是由许多移动的部件组成的，它们以不完全显而易见的方式一起工作。

---

via: <https://jvns.ca/blog/2020/04/29/why-strace-doesnt-work-in-docker/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


你应该（或许）没使用过的 3 种 Python 模板语言

Summary: 包括这 3 个模板语言在内，Python 积累了许多模板语言。

包括这 3 个模板语言在内，Python 积累了许多模板语言。

>
> 包括这 3 个模板语言在内，Python 积累了许多模板语言。
>
>
>

![](/data/attachment/album/202005/26/110220lxie9osmd592m5ee.jpg)

当需要使用模板语言来编写 [Python](https://opensource.com/resources/python) Web 应用时，有很多健壮的解决方案。

有 [Jinja2](https://opensource.com/article/20/2/jinja2-cheat-sheet)、[Genshi 和 Mako](https://opensource.com/resources/python/template-libraries)。甚至还有 [Chameleon](https://chameleon.readthedocs.io/en/latest/) 之类的解决方案，虽然有些陈旧，但仍被 [Pyramid](https://opensource.com/article/18/5/pyramid-framework) 框架推荐。

Python 已经存在了很长时间。此时，在系统的深处，它积累了一些几乎被遗忘的模板语言，它们都是值得一试的。

这些语言就像桉树上可爱的考拉一样，在自己的生态圈里快乐地生活着，有时也会有危险的工作，这些都是很少有人听说过的模板语言，使用过的应该更少。

### 3、string.Template

你是否曾经想过：“如何获得一种没有任何特性的模板语言，而且同时也不需要 `pip install` 安装任何东西？” Python 标准库已经为你提供了答案。虽然没有循环和条件，但 `string.Template` 类是一种最小的模板语言。

使用它很简单。

```
>>> import string
>>> greeting = string.Template("Hello, $name, good $time!")
>>> greeting.substitute(name="OpenSource.com", time="afternoon")
'Hello, OpenSource.com, good afternoon!'
```

### 2、twisted.web.template

你会给一个包罗万象的库送什么礼物？

当然，不是模板语言，因为它已经有了。twisted.web.template 中嵌套了两种模板语言。一种是基于 XML 的，并有一个[很棒的文档](https://twistedmatrix.com/documents/13.1.0/web/howto/twisted-templates.html)。

但是它还有另一种，一种基于使用 Python 作为领域特定语言（DSL）来生成 HTML 文档。

它基于两个原语：包含标签对象的 `twisted.web.template.tags` 和渲染它们的 `twisted.web.template.flattenString`。由于它是 Twisted 的一部分，因此它内置支持高效异步渲染。

此例将渲染一个小页面：

```
async def render(reactor):
    my_title = "A Fun page"
    things = ["one", "two", "red", "blue"]
    template = tags.html(
            tags.head(
                tags.title(my_title),
            ),
            tags.body(
                tags.h1(my_title),
                tags.ul(
                    [tags.li(thing) for thing in things],
                ),
                tags.p(
                    task.deferLater(reactor, 3, lambda: "Hello "),
                    task.deferLater(reactor, 3, lambda: "world!"),
                )
            )
    )
    res = await flattenString(None, template)
    res = res.decode('utf-8')
    with open("hello.html", 'w') as fpout:
        fpout.write(res)
```

该模板是使用 `tags.<TAGNAME>` 来指示层次结构的常规 Python 代码。原生支持渲染字符串，因此任何字符串都正常。

要渲染它，你需要做的是添加调用：

```
from twisted.internet import task, defer
from twisted.web.template import tags, flattenString

def main(reactor):
    return defer.ensureDeferred(render(reactor))
```

最后写上：

```
task.react(main)
```

只需 3 秒（而不是 6 秒），它将渲染一个不错的 HTML 页面。在实际中，这些 `deferLater` 可以是对 HTTP API 的调用：它们将并行发送和处理，而无需付出任何努力。我建议你阅读关于[更好地使用 Twisted](https://opensource.com/article/20/3/treq-python)。不过，这已经可以工作了。

### 1、Quixote

你会说：“但是 Python 并不是针对 HTML 领域而优化的领域特定语言。” 如果有一种语言可以[转化](https://en.wikipedia.org/wiki/Source-to-source_compiler)到 Python，但是更适合定义模板，而不是像 Python 那样按原样解决呢？如果可以的话，请使用“Python 模板语言”（PTL）。

编写自己的语言，有时被说成是一个攻击假想敌人的唐吉坷德项目。当 Quixote（可在 [PyPI](https://pypi.org/project/Quixote/) 中找到）的创造者决定这样做时，并没有受此影响。

以下将渲染与上面 Twisted 相同的模板。*警告：以下不是有效的 Python 代码*：

```
import time

def render [html] ():
    my_title = "A Fun page"
    things = ["one", "two", "red", "blue"]
    "<html><head><title>"
    my_title
    "</head></title><body><h1>"
    my_title
    "</h1>"
    "<ul>"
    for thing in things:
        "<li>"
        thing
        "</li>"
    "<p>"
    time.sleep(3)
    (lambda: "Hello ")()
    time.sleep(3)
    (lambda: "world!")()
    "</p>"
    "</body></html>"

def write():
    result = render()
    with open("hello.html", 'w') as fpout:
        fpout.write(str(result))
```

但是，如果将它放到 `template.ptl` 文件中，那么可以将其导入到 Quixote 中，并写出可以渲染模板的版本：

```
>>> from quixote import enable_ptl
>>> enable_ptl()
>>> import template
>>> template.write()
```

Quixote 安装了一个导入钩子，它会将 PTL 文件转换为 Python。请注意，此渲染需要 6 秒，而不是 3 秒。你不再获得自由的异步性。

### Python 中的模板太多

Python 库的历史悠久且曲折，其中一些库可以或多或少都能达到类似结果（例如，Python [包管理](https://opensource.com/article/19/4/managing-python-packages)）。

我希望你喜欢探索这三种*可以*用 Python 创建模板的方式。另外，我建议从[这三个库之一](https://opensource.com/resources/python/template-libraries)开始了解。

你是否有另一种深奥的模板方法？请在下面的评论中分享！

---

via: <https://opensource.com/article/20/4/python-templating-languages>

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


新闻速读 > 80％ 的 Oracle JDK 用户正在考虑其他支持选项

Summary: • 开发者将 GCC 的 JIT 库移植到 Windows

![](/data/attachment/album/202005/26/115305oew19j3b1b23u3le.jpg)

#### 80％ 的 Oracle JDK 用户正在考虑其他支持选项

在 2019 年，Oracle 决定更改许可模式，从提供免费的 Java 更新转变为要求付费订阅。据 Azul Systems 的一项新调查显示，目前有 80％ 的 Oracle JDK 用户正在考虑其他选择。Azul Systems 透露，对 Oracle JDK 的首选使用率已从 70％ 下降至 34％，大部分现有用户都选择了免费或受支持的基于 OpenJDK 的部署。不过在目前愿意支付支持费用的企业中，Oracle 仍然是赢家，占有 55 ％的市场份额。红帽（17％）、IBM（16％）和 Azul（12％）则紧随 Oracle 之后。

来源：[开源中国](https://www.oschina.net/news/115942/oracle-jdk-users-considering-alternative-support-options)

>
> 硬核老王点评：习惯了免费的开源软件，对于收费，很多企业和人还没做好准备；而另外一方面，很多免费的 JDK 看起来也完全能取代 Oracle JDK 的作用。
>
>
>

#### 开发者将 GCC 的 JIT 库移植到 Windows

libgccjit 是一个实现 GCC JIT 编译的嵌入式库，它可以动态链接到字节码解释器和其它程序中，在运行时生成本机代码。目前 GCC 开发者实验性地将 libgccjit 移植到了 Windows，并提交了补丁。GCC 代码库使用的是具有“传染性”的 GPLv3 许可，因此就算 libgccjit 移植到 Windows，那预估也不会有多少基于 Windows 的程序使用，因为有必须将新程序也开源的要求。

来源：[开源中国](https://www.oschina.net/news/115943/port-gcc-jit-libgccjit-to-windows)

>
> 硬核老王点评：GPL 的传染性在捍卫了自由的同时，也让很多软件望而生畏。另一方面，随着计算机技术的变化和互联网的发展，许可证也需要与时俱进。
>
>
>


现在你可以在 Windows 中运行 Linux 应用了

共赢的事情。Windows 推广了 Linux，越来越多的人开始接触Linux。同时也方便了Linux开发者，更多Linux开发者开始使用Windows做开发。最终，WSL成为开发主流，而服务端基本上会使用纯Linux系统，也不用担心Linux会彻底成为Windows下的桌面程序。

![](/data/attachment/album/202005/27/111439z64u19z6ct6r46kb.jpg)

微软最近的 “[Build 2020](https://news.microsoft.com/build2020/)” 开发者大会公布了一些有趣的公告。我不确定这该令人兴奋还是该令人怀疑 —— 但是微软，你现在比以往任何时候都受到我们的关注。

同时，在所有的这些公告中，能够在 WSL（Windows Subsystem for Linux）上运行 GUI 应用程序的功能备受关注。

更不要忘了 [Xamrin.Forms 更名为 MAUI 的尴尬结局](https://itsfoss.com/microsoft-maui-kde-row/)，它与 [Nitrux Linux](https://itsfoss.com/nitrux-linux/) 的 Uri Herrera 的现有开源项目（[Maui Project](https://mauikit.org/)）名字冲突。

以防你不清楚，WSL 是一种环境，可让你在 Windows 10 中获得 Linux 控制台的体验。它也是在 [Windows 中运行 Linux 命令的最佳方法](https://itsfoss.com/run-linux-commands-in-windows/)之一。

正如 [Liam Dawe](https://www.gamingonlinux.com/2020/05/microsoft-build-directx-and-linux-plus-more) 认为的那样，通过博客文章（[DirectX ❤ Linux](https://devblogs.microsoft.com/directx/directx-heart-linux/)）发布的公告可能是只是个公关诱饵。但是，仍然值得一提。

### WSL 上对 Linux GUI 应用程序的支持

![](/data/attachment/album/202005/27/110600xjhgiodn1pn1qghg.png)

最近，Microsoft 在在线开发者大会上宣布了 WSL（即 WSL 2）的一系列新功能。

[Windows 包管理器](https://devblogs.microsoft.com/commandline/windows-package-manager-preview/)、[Windows 终端 1.0](https://devblogs.microsoft.com/commandline/windows-terminal-1-0/)，以及其他一些功能的引入是其亮点。

但是， WSL 2 对 GPU 硬件加速的支持非常重要。

那么，是否意味着你可以使用 WSL 在 Windows 上运行 Linux 应用程序呢？看起来像是。

微软计划通过使用全新的 Linux 内核驱动程序 `dxgkrnl` 来实现它。为了给你一个技术性的简报, 我在这里引用他们的公告中的描述：

![](/data/attachment/album/202005/27/110701v6ctmn07w1i8mm0g.png)

>
> dxgkrnl 是一个全新的 Linux 内核驱动程序，它将 `/dev/dxg` 设备提供给用户模式的 Linux。 `/dev/dxg` 提供了一组 IOCTL，它们与 Winodws 上的原生 WDDM D3DKMT 内核服务层非常相似。Linux 内核中的 dxgkrnl 通过 VM 总线连接到 Windows 主机上，并使用此 VM 总线连接与物理 GPU 进行通讯。
>
>
>

我不是这方面的专家，但这意味着 WSL 上的 Linux 应用程序将与原生的 Windows 应用程序一样可以访问 GPU。

针对 GUI 应用程序的支持将在今年秋季的晚些时候提供（而不是 2020 年 5 月的更新） —— 所以我们要看看什么时候提供。

微软专门针对的是那些希望在 Windows 上轻松使用 Linux IDE 的开发人员。谷歌也在瞄准同样的用户群，[将 GUI Linux 应用程序引入到 Chromebook](https://itsfoss.com/linux-apps-chromebook/)。

那么，对于那些坚持使用 Windows 的用户来说，这是个好消息。但是，这是真的吗？

### 微软爱上了 Linux —— 真的吗？

![](/data/attachment/album/202005/27/110730uujjlybefey7s0ea.jpg)

他们在 Windows 上整合 Linux 环境来拥抱 Linux 及其优势的努力，绝对是一件好事。

但是，它真的能给**桌面 Linux 用户**带来什么好处呢？到目前为止，我还没有看到任何实际的好处。

在这里，你可以有不同的看法。但是，我认为 WSL 的开发对于 Linux 桌面用户来说没有真正的价值。至少，到目前为止没有。

有趣的是，[Linux Unplugged podcast](https://linuxunplugged.com/354) 上有人强调了微软的举动，认为这与他们的 EEE（<ruby> 拥抱、延伸和扑灭 <rt>  Embrace, extend, and extinguish </rt></ruby>）的思路是一致的。

可能吧，谁知道呢？当然，他们为实现这一目标而付出的努力值得赞赏 —— 同时又令人感到兴奋和神秘。

### 这是否意味着 Windows 用户将不必再转到 Linux?

微软之所以在其平台上集成 Linux，是因为他们知道 Liunx 的能力，也知道开发人员（或用户）喜欢使用它的原因。

但是，随着 WSL 2 的更新，如果这种情况持续下去，我倾向于同意 Abhishek 的看法：

>
> 最终，桌面 Linux 将被限制在 Windows 下，成为桌面应用程序……
>
>
>

好吧，当然，原生的体验暂时还是比较好的。而且，很难看到现有的 Linux 桌面用户会使用 Windows 来将其替代。但是，这仍然值得担心。

你如何看待这一切？我不认为 WSL 对于被迫使用 Windows 的用户有什么好处 —— 但是，从长远来看，你认为微软在 WSL 方面的进展本质上是敌意还是对 Linux 有帮助？

在评论中让我知道你的想法！

---

via: <https://itsfoss.com/run-linux-apps-windows-wsl/>

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

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


怎样在 Linux 下用 SSH 搭建个人文件服务器

Summary: 通过 SSH 连接远程 Linux 系统很简单。下面是教程。

用到是能用了，就是空间小了点。

通过 SSH 连接远程 Linux 系统很简单。下面是教程。

>
> 通过 SSH 连接远程 Linux 系统很简单。下面是教程。
>
>
>

![](/data/attachment/album/202005/27/120338v62cakrqnccpjckk.jpg)

树莓派是一个有用且价格低廉的家庭服务器，可用于很多事情。我的树莓派最常用来做[打印服务器](https://opensource.com/article/18/3/print-server-raspberry-pi)，可以在我的家庭网络中共享激光打印机，或作为个人文件服务器保存项目副本和其他数据。

我的文件服务器有很多用途。假设说我现在有一个项目，比如一本新书，我想把我的工作和所有相关的文件都复制一份快照。这种场景下，我只需要把 `BookProject` 文件夹复制到文件服务器的 `BookBackup` 文件夹。

或者我现在正在清理我的本地文件时，发现一些我不需要的文件，但是我不确定是否要删除，我会把它们复制到文件服务器的 `KeepForLater` 文件夹。这是我日常 Linux 系统中清除杂乱的文件，并将不常用的文件卸载到个人文件服务器上的方便方法。

用树莓派或其他 Linux 系统搭建个人文件服务器不需要配置 NFS（<ruby> 网络文件系统 <rt>  Network File System </rt></ruby>>）或 CIFS（<ruby> 通用互联网文件系统 <rt>  Common Internet File System </rt></ruby>）或改造其他的文件共享系统如 WebDAV。你可以很轻松的使用 SSH 来搭建远程文件服务器。下面是教程。

### 在远程服务器上配置 SSHD

你的 Linux 系统可能已经安装了 SSH 守护进程（`sshd`），甚至它已经默认运行了。如果没有，你可以使用你 Linux 发行版本上的任何控制面板来轻松配置 SSH。我在树莓派上运行了 [Fedora ARM](https://arm.fedoraproject.org/)，通过 Web 浏览器访问树莓派的 9090 端口，我可以远程访问控制面板。（在我的家庭网络中，树莓派的 IP 地址是 `10.0.0.11`，因此我连接的是 `10.0.0.11:9090`。）如果 SSH 守护进程没有默认运行，你可以在控制面板的“服务”里把它设置为开机启动。

![sshd in the list of system services](/data/attachment/album/202005/27/120355xh3jh8g3qz0lyozw.png "sshd in the list of system services")

你可以在系统服务列表里找到 `sshd`。

![slider to activate sshd](/data/attachment/album/202005/27/120356s0z14p1y2apc1a1n.png "slider to activate sshd")

如果 `sshd` 没有开启，点击切换按钮打开它。

### 你有账号吗？

你需要有个远程系统的账号。它可以与你本地系统的账号相同，也可以不同。

在流行的 Raspbian 发行版本上，默认的账号名是 `pi`。但是其他的 Linux 发行版本可能需要你在安装系统时就设置一个唯一的新用户。如果你不知道你的用户名，你可以用系统的控制面板创建一个。在我的树莓派上，我创建了一个 `jhall` 账号，与我日常用的 Linux 桌面机器的用户名相同。

![Set up a new account on Fedora Server](/data/attachment/album/202005/27/120357aagr4fxnetu7gaj7.png "Set up a new account on Fedora Server")

如果你用的是 Fedora 服务器，你可以点击“创建新账号”按钮。

![Set password or SSH key](/data/attachment/album/202005/27/120357tjllwx9m7tnwuexj.png "Set password or SSH key")

不要忘记设置密码或添加公钥。

### 可选：添加公钥

如果你把公钥添加到远程 Linux 系统上，你就可以不使用密码登录。这一步是可选的；如果你愿意，你仍可以用密码登录。

你可以在下面的文章中学到更多关于 SSH 密钥的信息：

* [SSH 密钥管理工具](/article-11947-1.html)
* [用 Seahorse 对 SSH 密钥进行图形化管理](/article-9451-1.html)
* [如何管理多个 SSH 密钥](https://opensource.com/article/19/4/gpg-subkeys-ssh-manage)
* [使用 GPG 密钥作为鉴权依据开启 SSH 访问](https://opensource.com/article/19/4/gpg-subkeys-ssh)

### 创建文件管理器的快捷方式

现在你已经在远程系统上启动 SSH 守护进程了，也设置了用户名和密码，最后一步就是在你本地的文件管理器中创建一个快捷方式，地址映射到远程 Linux 系统。我的桌面是 GNOME，但是在其他的 Linux 桌面上的基本操作步骤都是一样的。

#### 建立初始连接

在 GNOME 的文件管理器中，在左边导航栏找到 “+其它位置” 按钮。点击它会出现一个 “连接到服务器” 提示框。在框中输入远程 Linux 服务器的地址，地址以 SSH 连接协议开头。

![Creating a shortcut in GNOME file manager](/data/attachment/album/202005/27/120358y10ttm3dz4tbtwm0.png "Creating a shortcut in GNOME file manager")

GNOME 文件管理器支持多种连接协议。要通过 SSH 进行连接，服务器地址请以 `sftp://` 或 `ssh://` 开头。

如果你远程 Linux 系统的用户名与本地的相同，那么你只需要输入服务器的地址和文件夹路径就可以了。比如要连接到我的树莓派的 `/home/jhall` 目录，我输入：

```
sftp://10.0.0.11/home/jhall
```

![GNOME file manager Connect to Server](/data/attachment/album/202005/27/120358l37c7hqf7huym7ha.png "GNOME file manager Connect to Server")

如果你远程 Linux 系统的用户名与本地的不同，你可以在远程系统地址前加 `@` 符号来指定远程系统的用户名。要连接到远程的 Raspbian 系统，你可能要输入：

```
sftp://pi@10.0.0.11/home/pi
```

![GNOME file manager Connect to Server](/data/attachment/album/202005/27/120359mlizokui0zelopi0.png "GNOME file manager Connect to Server")

如果你没有把公钥添加到远程服务器，那么你需要输入密码。如果你已经添加，GNOME 文件管理器应该会自动打开远程系统上的文件夹来让你跳转到不同的目录。

![GNOME file manager connection](/data/attachment/album/202005/27/120400eom17cqc7zql7c1c.png "GNOME file manager connection")

#### 创建一个快捷方式，之后就可以轻松连接服务器

在 GNOME 文件管理器中，这很简单。右击导航栏中远程系统的名字，选择“添加书签”。这一步操作就创建了连接到远程路径的快捷方式。

![GNOME file manager - adding bookmark](/data/attachment/album/202005/27/120400mtldt6lzjtj1ldlt.png "GNOME file manager - adding bookmark")

如果你想把标签中的快捷方式改成一个更容易记的名字，你可以右击快捷方式选择“重命名”。

### 总结

通过 SSH 连接到远程 Linux 系统是很简单的事。你可以用相同的方式连接到家庭文件服务器以外的其他系统。我还创建了一个能让我立即访问我的提供商 Web 服务器上的文件的快捷方式，和另一个能迅速打开我的项目服务器的文件夹的快捷方式。SSH 使它成为一个安全的连接；所有的传输都是加密的。当我通过 SSH 打开远程的文件时，我可以像在本地操作一样使用 GNOME 文件管理器轻松打开远程文件。

---

via: <https://opensource.com/article/20/3/personal-file-server-ssh>

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

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


新闻速读 > Windows 纸牌已经 30 岁了，每月仍然有 3500 万玩家

Summary: • Microsoft Edge 浏览器迎来“上网冲浪”游戏 • 报告显示僵尸网络会利用 BAT 等常用服务进行管理 • Mozilla、Reddit 和 Twitter 等呼吁立法保护互联网浏览隐私

![](/data/attachment/album/202005/27/162212gsng4h4uoon0ogzm.jpg)

#### Windows 纸牌已经 30 岁了，每月仍然有 3500 万玩家

纸牌游戏是随 1990 年发布的 Windows 3.0 提供给用户的，最初是设计教用户如何使用鼠标，操作鼠标抓住虚拟纸牌拖放到一个地方，教用户基本的拖曳操作。它是史上最常用的 Windows 程序之一，被预装到数以亿计的设备上。它的开发者 Wes Cherry 是微软的实习生，他没有从游戏上获得任何版税。Cherry 最初还给游戏加入了老板模式，伪装成电子表格去愚弄老板和同事，但在正式发布前被要求移除了。如果不移除的话，也许能拯救某些因上班玩纸牌被解雇的员工。

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

>
> 硬核老王点评：有没有人第一个玩的电脑游戏就是纸牌（或扫雷）？有谁没玩过 Windows 纸牌吗？谁现在还在玩？
>
>
>

#### Microsoft Edge 浏览器迎来“上网冲浪”游戏

谷歌很早就为自家 Chrome 浏览器引入了可离线玩耍的横版跳跃“霸王龙”（T-Rex）游戏，Mozilla Firefox 和 Microsoft Edge 却迟迟没有跟进。不过最新消息是，微软今日宣布向所有用户开放了 Microsoft Edge 集成的“上网冲浪”游戏，感兴趣的朋友可在地址栏输入 edge://surf 来跳转体验。据悉，该游戏已在 Edge Canary、Dev、以及 Beta 通道上线，体验前请先将 Edge 浏览器的版本升到 83.0.478.37 及以上。

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

>
> 硬核老王点评：来，大家一起断网玩游戏！
>
>
>

#### 报告显示僵尸网络会利用 BAT 等常用服务进行管理

奇虎安全研究人员报告，双枪恶意程序的僵尸网络利用国内的常用服务进行管理。该僵尸网络的数量超过了 10 万。研究人员观察到双枪恶意程序使用百度贴吧图片来分发配置文件和恶意软件，使用了阿里云存储来托管配置文件，利用百度统计管理感染主机的活跃情况，恶意程序样本中还多次发现了腾讯微云的 URL 地址。

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

>
> 硬核老王点评：真是防不胜防，将指令和配置放在这些常用服务中是为了避免追踪。
>
>
>

#### Mozilla、Reddit 和 Twitter 等呼吁立法保护互联网浏览隐私

ZDNet 有消息称，Mozilla、Reddit、Twitter 和 Patreon 以及包括 Reform Government Surveillance、Engine 和 i2Coalition 在内的组织则在近日签署了一封联名信， 要求美国立法者明确禁止无故收集互联网搜索和浏览历史记录的行为。Mozilla 在博客中表示：“我们希望立法者修改该法案，以限制政府对没有证据的互联网浏览和搜索历史的访问。”

来源：[开源中国](https://www.oschina.net/news/115967/mozilla-reddit-twitter-protect-browser-history-privacy)


如何在 Ubuntu 中处理自动的无人值守升级

>
> 本教程教你如何处理无人值守的升级，即 Ubuntu Linux 的自动系统更新。
>
>
>

![](/data/attachment/album/202005/27/234040fxb0nkc53pk0nxvx.jpg)

有时，当你尝试[关闭 Ubuntu 系统](https://itsfoss.com/schedule-shutdown-ubuntu/)时，可能看到这个阻止你关闭的页面：

>
> 关机过程中正在进行无人值守升级，请不要关闭计算机。
>
>
>

![](/data/attachment/album/202005/27/233432nec2y0m9dj9dmvjr.png)

你可能会问这个“无人值守升级”是什么，怎么会在你不知情的情况下运行呢？

原因是 [Ubuntu](https://ubuntu.com/) 非常重视系统的安全性。默认情况下，它会每天自动检查系统更新，如果发现安全更新，它会下载这些更新并自行安装。对于正常的系统和应用更新，它会通过软件更新程序通知你。

由于所有这些都是在后台发生的，所以在你尝试关闭系统或尝试自行安装应用程序之前，你甚至不会意识到这一点。

在这些无人值守的升级过程中，尝试安装新软件，会导致著名的[无法获得锁定的错误](https://itsfoss.com/could-not-get-lock-error/)。

![](/data/attachment/album/202005/27/233701ql6nwwn7l67068ea.jpg)

如你所见，自动更新带来了一些小麻烦。你可以选择禁用自动更新，但这意味着你必须一直手动检查并[更新你的 Ubuntu 系统](https://itsfoss.com/update-ubuntu/)。

>
> **你真的需要禁用自动更新吗？**
>
>
> 请注意，这是一项安全功能。Linux 实际上允许你禁用系统中的所有功能，甚至禁用这些安全功能。
>
>
> 但是我认为，作为普通用户，**你不应该禁用自动更新**。毕竟，它可以确保你的系统安全。
>
>
> 为了确保系统的安全性，你可以忍受自动更新所带来的小麻烦。
>
>
>

现在，你已经收到警告，还是觉得承担手动更新系统的额外任务更好，那么让我们看看如何处理自动更新。

与往常一样，有两种方法可以做到：GUI 和命令行。 我将向你展示两种方法。

我在这里使用 Ubuntu 20.04，但是这些步骤对 Ubuntu 18.04 和任何其他 Ubuntu 版本均有效。

### 方法 1：以图形方式禁用 Ubuntu 中的自动更新

进入菜单并查找“软件和更新”工具。

![](/data/attachment/album/202005/27/233712v040x7l0w4o7w07r.jpg)

在此处，进入“更新”选项卡。查找“自动检查更新”。默认情况下，它设置为“每日”。

你可以将其更改为“从不”，你的系统将永远不会检查更新。如果不检查更新，它就不会找到要安装的新的更新。

![](/data/attachment/album/202005/27/233738iq83mb6bjpsq680m.jpg)

如果这样做，那么必须不时手动更新系统。但是，这是额外的工作，你可能不会一直记得。

#### 在 Ubuntu 中处理自动更新的更好方法

就个人而言，我建议让它自己检查更新。如果你不希望它自动安装更新，那么可以更改该行为，以通知有关安全更新的可用性。

保持“自动检查更新”为“每日”，然后将“有安全更新时”选项更改为“立即显示”，而不是“自动下载并安装”。

![](/data/attachment/album/202005/27/233806ibtw5pwpwnvsns5h.jpg)

这样，它会检查是否有更新，而不是在后台自动安装更新，软件更新程序会通知你有可用于系统的更新。而你的系统已经完成正常的系统和软件更新。

![](/data/attachment/album/202005/27/233849t22ab25b5b781110.png)

使用此设置，关闭系统时将不会看到“正在进行的无人值守升级”。但是，由于两个不同的进程无法同时使用 apt 包管理器，因此你仍然可能会遇到“无法锁定”错误。

我相信这是一个更好的解决方案，你不认为是么？

如我承诺的同时有 GUI 和命令行方法一样，让我向你展示如何在终端中禁用无人值守的升级。

### 如何在 Ubuntu 中使用命令行禁用自动更新

你可以在 `/etc/apt/apt.conf.d/20auto-upgrades` 中找到自动升级设置。Ubuntu 终端中的默认文本编辑器是 Nano，因此你可以使用以下命令来编辑此文件：

```
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
```

现在，如果你不希望系统自动检查更新，那么可以将 `APT::Periodic::Update-Package-Lists` 的值更改为 `"0"`。

```
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
```

如果你希望它检查更新但不自动安装无人值守的升级，那么可以选择将其设置为：

```
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "0";
```

### 最后

由于某种原因，启用了自动安全更新，建议你保持这种状态。这个小烦恼实际上并不值得冒险损害系统安全性。你怎么看？

---

via: <https://itsfoss.com/auto-updates-ubuntu/>

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


如何在 Arch Linux 上正确安装和设置 KDE Plasma？

Summary: 但现在，不是每个人都是 GNOME 的粉丝，有几个读者要求我们向他们展示如何在 Arch Linux 上配置 KDE 桌面。

kde plasma性能比gnome3好了不知道多少

我相信你是按照[这份很棒的指南安装来 Arch Linux](/article-9170-1.html) 的，这篇指南最后提到了 [GNOME 桌面](https://www.gnome.org/)的安装步骤。

但现在，不是每个人都是 GNOME 的粉丝，有几个读者要求我们向他们展示如何在 [Arch Linux](https://www.archlinux.org/) 上配置 [KDE 桌面](https://kde.org/plasma-desktop)。

因此，我创建了这个指南来演示如何在 Arch Linux 上正确安装和配置 KDE 桌面（也被称为 KDE Plasma桌面）的步骤。

### 如何在 Arch Linux 上安装和设置 KDE 桌面环境？

![](/data/attachment/album/202005/28/063618cwogppwllx4kxgow.png)

请记住，KDE 不允许直接以 root 身份登录。如果你已经安装了 Arch Linux 并以 root 身份使用，你应该创建一个新的用户，并给它以 root 身份运行命令的 sudo 权限。

如果你只是最小化安装了 Arch Linux，那么你可能是以 TTY 终端方式登录的。如果你使用的是其他桌面环境，步骤也是一样的。

让我们开始吧!

#### 步骤 1：创建一个 sudo 用户（如果你只有 root 用户）

你可以使用 [useradd 命令](https://linuxhandbook.com/useradd-command/)来创建一个新用户。我创建的用户名为 `dimitrios`（这是我的名字）。你可以使用与你的名字匹配的东西。

选项 `-m` 为新创建的用户创建一个主目录。

```
useradd -m dimitrios
```

你还应该为这个用户设置一个密码。使用此命令：

```
passwd dimitrios
```

现在你已经创建了用户，给它 sudo 权限。首先，安装 sudo 和一个像 [nano](https://www.nano-editor.org/) 这样的[命令行文本编辑器](https://itsfoss.com/command-line-text-editors-linux/)。

```
pacman -S sudo nano
```

sudo 的配置文件是 `/etc/sudoers`。该文件应该使用 `visudo` 来编辑，它会锁定 `sudoers` 文件，将编辑的内容保存到一个临时文件中，并在复制到 `/etc/sudoers` 之前检查该文件的语法。

要使用 `nano` 作为 `visudo` 编辑器，请这样设置:

```
EDITOR=nano visudo
```

像我的示例那样添加下面这一行，然后保存并退出。

```
dimitrios ALL=(ALL) ALL
```

![](/data/attachment/album/202005/28/063646lrt55gj5gkj4rggl.png)

保存你的更改，然后退出编辑器。你现在在 Arch Linux 上有了一个 sudo 用户。

#### 步骤 2 ：安装 KDE Plasma 桌面

要运行 KDE 桌面，你需要以下软件包。

* [Xorg](https://wiki.archlinux.org/index.php/Xorg) 组
* [KDE Plasma](https://kde.org/plasma-desktop) 桌面环境
* [Wayland](https://wiki.archlinux.org/index.php/Wayland) KDE Plasma 的会话
* [KDE 应用程序](https://www.archlinux.org/groups/x86_64/kde-applications/)组（包括 KDE 特有的应用程序：Dolphin 管理器和其他有用的应用程序）。

你可以用下面的命令安装上述部分。

```
pacman -S xorg plasma plasma-wayland-session kde-applications
```

安装后，启用显示管理器和网络管理器服务。

```
systemctl enable sddm.service
systemctl enable NetworkManager.service
```

快完成了。关闭你的系统。

```
shutdown now
```

重新打开系统电源，你应该会看到 KDE 的登录界面。你还记得为你的 sudo 用户设置的密码吗？用它来登录。

![](/data/attachment/album/202005/28/063714j4rxpcrr3ccpl52x.jpg)

#### 接下来？

你可能会想探索一下[基本的 pacman 命令](https://itsfoss.com/pacman-command/)，了解一下 [Arch 用户资源库](/article-12107-1.html)，了解一下 [AUR 助手](/article-12019-1.html)。

希望这篇教程对你在 Arch Linux 上安装 KDE 桌面有所帮助。如果你在安装过程中遇到任何障碍或困难，请在下面的评论中告诉我们。

你最喜欢的桌面环境或窗口管理器是什么？请告诉我们，别忘了在我们的社交媒体上订阅。

---

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

作者：[Dimitrios Savvopoulos](https://itsfoss.com/author/dimitrios/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


新闻速读 > 百度在 GitHub 上发布量子机器学习工具包

Summary: • 为了阻止学生们规避计算器的考试模式限制，德州仪器取消了对计算器编程的部分支持 • 谷歌 TAG 报告中重点提到了印度的“黑客雇佣”公司 • Qt 5.15 LTS 发布

![](/data/attachment/album/202005/28/090628ii0nnvjv07jjzk3s.jpg)

#### 百度在 GitHub 上发布量子机器学习工具包

百度日前发布了其量子机器学习平台 Paddle Quantum 的工具包，称该工具包将使开发者能够构建和训练量子神经网络模型。该工具包基于它的深度学习平台 PaddlePaddle 构建，它包括量子化学库和优化工具，以及三个量子应用：量子机器学习、量子化学模拟和量子组合优化。此外，百度还为 PaddlePaddle 推出了 7 个新工具，提供了 27 项增强功能。其中包括 Paddle.js，这是一个深度学习的 JapaScript 库，它将使开发者能够在浏览器内使用 AI 或微信等应用中的智能小程序。

来源：[zdnet](https://www.zdnet.com/article/baidu-releases-quantum-machine-learning-toolkit-on-github/)

>
> 硬核老王点评：这一点，厉害了。好好的做点有用的事情多好。
>
>
>

#### 为了阻止学生们规避计算器的考试模式限制，德州仪器取消了对计算器编程的部分支持

德州仪器公司已经取消了一些最受欢迎的计算器运行汇编或 C 语言编写的程序的能力。除了作为教育工具，德州仪器的计算器也是相对简单、便宜的可编程设备。受影响的计算器包括流行的 TI-84 Plus CE、TI-83 Plus CE-T 和 TI-83 Premium CE。可编程功能在设备的最新固件更新中消失，升级后目前还没有办法回滚。这一改变是为了阻止学生们规避计算器的考试模式限制。尽管计算器仍然支持其他编程语言，如 TI-BASIC 和 Python，但据说这些语言的程序运行效率要低得多。

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

>
> 硬核老王点评：对这些计算器的编程和研究，是一种值得鼓励的古典黑客精神，虽然不应该用在考试作弊上。另外就是，现在去买一台这些可编程计算器还来得及吗？:D
>
>
>

#### 谷歌 TAG 报告中重点提到了印度的“黑客雇佣”公司

谷歌威胁分析小组（TAG）是谷歌安全部门内部跟踪国家和高端网络犯罪团伙的部门，今天发布了其首份 TAG 季度报告。“我们看到了来自‘黑客雇佣’公司的新活动，这些公司很多总部设在印度，他们一直在创建 Gmail 账户，欺骗世卫组织，”谷歌 TAG 负责人 Shane Huntley 说，“这些账户主要针对众多国家内的金融服务、咨询和医疗卫生企业的商业领袖。”

来源：[zdnet](https://www.zdnet.com/article/google-highlights-indian-hack-for-hire-companies-in-new-tag-report/)

>
> 硬核老王点评：利用人类的共同灾难而做这些非法活动，可见其无下限。要警惕印度的国家黑客和黑客产业。顺便提一句，此处所说的黑客和和上面提及的古典黑客精神不是一回事。
>
>
>

#### Qt 5.15 LTS 发布

Qt 项目释出了 Qt 5 系列的最后一个功能版本 5.15，未来它的重心将转向下一个大版本 Qt 6，Qt 6 预计将在年底发布。Qt 5.15 是一个长期支持版本，为商业授权用户提供 3 年的支持，完全兼容 Qt 5 系列之前发布的版本，其主要工作是 bug 修正，它被认为是 Qt 5 系列最稳定的版本。Qt 5.15 的一个主要变化是为 Qt 6 打下基础。

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


出于安全原因，OpenSSH 决定弃用 SHA-1 验证算法

>
> 破坏一个 SHA-1 生成的 SSH 验证密钥，现在的成本大约为 5 万美元，使得重要的远程服务器面临着被攻击的风险。
>
>
>

![OpenSSH SSH](/data/attachment/album/202005/28/175710huryrfkqfzfbufrk.png)

最受欢迎的连接和管理远程服务器的实用工具 OpenSSH 今天宣布，计划放弃对其 SHA-1 验证方案的支持。在这个宣布当中，OpenSSH 团队列举了 SHA-1 散列算法的安全问题，该算法目前被认为是不安全的。

SHA-1 算法在 2017 年 2 月的一次实际的、真实世界的攻击中被破解，当时谷歌密码学家披露的 [SHAttered](https://shattered.it/) 技术可以使两个不同的文件拥有相同的 SHA-1 文件签名（这称之为“碰撞”）。

在当时，创建一个 SHA-1 碰撞被认为需要非常昂贵的计算成本，谷歌的专家认为 SHA-1 在实际应用中至少还能用上五年，直到成本下降。

然而，随后在 2019 年 5 月和 2020 年 1 月发布的研究报告中，详细介绍了一种更新的方法，将 SHA-1 选择-前缀碰撞攻击chosen-prefix collision attack的成本分别降低到 [11 万美元](https://www.zdnet.com/article/sha-1-collision-attacks-are-now-actually-practical-and-a-looming-danger/)和 [5 万美元](https://eprint.iacr.org/2020/014.pdf)以下。

对于高级威胁攻击者，例如国家黑客和高端网络犯罪集团，如果他们能够生成一个 SSH 认证密钥，使他们能够远程不被发现地访问关键服务器，那么 5 万美元是一个很小的代价。

### OpenSSH 关闭 ssh-rsa 模式

“由于这个原因，我们将在不久的未来版本中默认禁用 ssh-rsa 公钥签名算法。”OpenSSH 开发者今天表示。

OpenSSH 应用程序使用 ssh-rsa 模式来[生成 SSH 验证密钥](https://www.ssh.com/ssh/public-key-authentication)。这些密钥中的一个存储在用户要登录的服务器上，另一个存储在用户的本地 OpenSSH 客户端中，这样用户就可以在每次登录时不需要输入密码就可以访问服务器，而是以本地认证密钥来代替。

在默认情况下，OpenSSH ssh-rsa 模式通过使用 SHA-1 哈希函数生成这些密钥，这意味着这些密钥容易受到 SHAterred 攻击，使攻击者能够生成重复的密钥。

“遗憾的是，尽管有更好的替代方案存在，但这种算法仍然被广泛使用，它是原始的 SSH RFC 规定的唯一剩下的公钥签名算法”，OpenSSH 的开发人员今天表示。

OpenSSH 团队现在要求服务器所有者检查他们的密钥是否已经使用默认的 ssh-rsa 模式生成，并使用不同的模式生成新的密钥。

OpenSSH 团队表示，推荐的模式是 rsa-sha2-256/512（从 OpenSSH 7.2 开始支持）、ssh-ed25519（从 OpenSSH 6.5 开始支持）或 ecdsa-sha2-nistp256/384/521（从 OpenSSH 5.7 开始支持）。

>
> 这里是最近公告中的最好的消息。让我们为所有的嵌入式系统和设备永远不会看到 OpenSSH 中废弃的 ssh-rsa SHA-1 密钥的升级而默哀一分钟。
>
>
> - Julio (@juliocesarfort) 2020 年 5 月 27 日
>
>
>

OpenSSH 项目将在未来（目前还未确定）的版本中默认禁用 ssh-rsa 模式，但是在此之前，他们还计划默认启用 UpdateHostKeys 功能，让服务器所有者可以轻松自动地从旧的 ssh-rsa 模式迁移到更好的验证算法。

依赖 OpenSSH 管理远程系统的服务器管理员可以在 [OpenSSH 8.3 的变更日志](http://www.openssh.com/txt/release-8.3)中找到更多关于如何测试他们的服务器是否有基于弱 SHA-1 的密钥的详细信息。

在之前的一个版本中，在 8.2 版本中，OpenSSH 团队还增加了对[基于 FIDO/U2F 的硬件安全密钥的支持](https://www.zdnet.com/article/openssh-adds-support-for-fidou2f-security-keys/)，这也可以用来更安全地登录远程服务器。

---

via: <https://www.zdnet.com/article/openssh-to-deprecate-sha-1-logins-due-to-security-risk/>

作者：[Catalin Cimpanu](https://www.zdnet.com/meet-the-team/us/catalin.cimpanu/) 选题：[wxy](https://github.com/wxy) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


攒一台“Linus Torvalds 牌”电脑

Summary: 前两天，Linus Torvalds 透露了他更新了其主力电脑，在与 ZDNet 的对话采访中，Torvalds 介绍了他的这台最新的电脑的配置。

最好再加上至少能够提供安全关机时间的 UPS.

膜拜大佬

我给你们说一下 ，我自己去年配的amd主机共花了一万二 全套。大佬这台，我估计各位要是也想走A平台的话，3900x可以了解一下。不行的话，可以像我一样来套3800x也好呀。

![](/data/attachment/album/202005/28/225146cx0g0xuxx50dg6nz.jpg)

前两天，Linus Torvalds 说他更新了其主力电脑，[据称编译内核时快了三倍](/article-12249-1.html)。虽然 Torvalds [用来编程时喜欢用戴尔 XPS 开发者版笔记本电脑](/article-7795-1.html)，但他还有一台开发工作站，最近他将它升级为基于 AMD 锐龙 Threadripper 3970x 高速处理器。这是 Linus 15 年来第一次换用 AMD 的 CPU。

作为世界上最著名的程序员之一、Linux 操作系统之父以及 Git 的缔造者，他的一举一动都会引来开源社区的兴趣，因此大家对这台新电脑的配置也相当感兴趣。

### “Linus Torvalds 牌”电脑配置清单

Torvalds 是一个喜欢自己攒电脑的人。“我通常都是自己攒电脑。我会重新使用上一台机器的机箱或 SSD 之类的东西，但这一次是全新打造的。”

在这次攒机之前，他的机器是 i9-9900k。通常情况下，Torvalds 会直接去当地的 Fry's 商店直接购买一些比较基础的配件，但由于病毒的影响，这次都是从亚马逊买的。几周后就到货了（这年头电脑配件几天就发货了），最后两件是上周五到的。

以下列出这台电脑的具体配置，大家感兴趣的可以按图索骥。

#### CPU：AMD 锐龙 Threadripper 3970X

![](/data/attachment/album/202005/28/224628r9wvqgw399q424iw.jpg)

锐龙 Threadripper 3970X 并不便宜，而且它是目前最快的 CPU。AMD Threadripper 3970x 搭载了 32 个核心。它采用 AMD 的 7 纳米 Zen 2 核心架构，拥有 88 个 PCIe 4.0。AMD 声称它比竞争对手快了 90%。Phoronix 的独立测试发现，“[Threadripper 3970X 在性能上绝对占优势](https://www.phoronix.com/scan.php?page=article&item=amd-linux-3960x-3970x&num=1)，超过了 Core i9 10980XE。”

“最初，我其实是计划用 AM4 主板和 Ryzen 3950X，这是比较主流的升级过程。” Torvalds 说，“Ryzen 3950X 是英特尔 i9-9900K 的升级版，但只是不多的升级。”

“通常情况下，我都会选择普通的消费级 CPU，因为它们往往是性价比最高的，而对于英特尔 CPU 来说，我其实喜欢它们只是因为集成了显卡。我不太在意 GPU，所以集成式的就好了，这样可以避免了挑选相匹配的 GPU，以及风扇不好的 GPU 可能产生的噪音。”

Torvalds 为此“来回折腾了好一阵子”，正如他所说的：“Threadripper 的功率让我担心噪音问题。但我决定做一次大升级，因为与传统的英特尔 Xeon 高核数平台不同，AMD 的 Threadripper 系列仍然属于‘物美价廉’的范畴。所以我咬咬牙就上了，到目前为止，我很满意。”

#### 主板：技嘉 Aorus TRX40 Master

![](/data/attachment/album/202005/28/224630enzpjflokmkormb2.jpg)

对于顶级 CPU，你当然需要最好的主板：技嘉 Aorus RX40 Master。它使用的是 16+3 相英飞凌供电，考虑到新 CPU 恐怖的规格，技嘉还给主板的供电覆盖上了加强散热模块，模块以密集的散热鳍片热管为主。

在这里，Torvalds 主要关心的是：

“要有一块看起来不错的电源传输和风扇控制的主板。在我所攒的机器中，我希望的是最基本的东西都要可靠，没有什么比电源传输更基本的东西了。很久以前，我有几个系统因为电源断电而变得不可靠，现在我对这个问题已经变得很虔诚了。所以我就找一些适合超频的东西，然后**不超频**。”

简而言之，他要的是一台能承受高负载的 PC，但他不会把机器推到极限。话虽如此，Torvalds 很讨厌“这款主板的默认风扇设置（非常烦人的小高转速风扇，用于电压调节器模块 VRM 散热），但你可以通过 BIOS 设置调整得更好。另外请大家注意：这是一款 E-ATX 主板，所以在出现错误的情况下可能会很不方便。”

#### CPU 散热器和风扇：猫头鹰（Noctua） NF-A14 PWM、NH-U14S 和 NF-A15

![](/data/attachment/album/202005/28/224732bbxnu1b56a0ydlu1.jpg)

高性能 CPU 的发热自然很高，因此 CPU 风扇也需要一台强劲的，但是，更重要的是，需要安静，Torvalds 以前就在用猫头鹰，感觉很好，这次依然用的是它。

Torvalds 使用了两款 CPU 散热器的风扇。其中 NH-U14S 是主打的，而多出的 NF-A15 风扇则是针对该散热器的推拉式配置。

既然他这么担心噪音问题，你问为什么不选择水冷呢？“我不喜欢水冷的。可靠性让我担心，而且我不觉得 AIO 系统会比好的风冷系统好。另外，定制那些系统太费劲了，我担心水泵和潺潺的噪音。” Torvalds 说。

Torvalds 说，“额外的风扇是因为我喜欢那种推拉式的设置，140mm 大的猫头鹰风扇低速运行，我不用担心噪音问题。即使是在负载下加速运行时，我也不觉得那些风扇的噪音很烦人。它更多的是一种舒缓的‘嗖嗖’的白噪音，没有劣质风扇所带来的恼人的呜呜声或嘎嘎声。”

#### 机箱：德商必酷（Be Quiet）Dark Base 700

![](/data/attachment/album/202005/28/224632ghjohphjahj3ijcu.jpg)

显然程序员在工作时都想要安静，Torvalds 也不例外，那么德商必酷（Be Quiet）Dark Base 700 PC 机箱自然是首选。

其实 Torvalds 更喜欢猫头鹰，德商必酷只是第二选择，但是猫头鹰没有做机箱产品。

#### 附加风扇：德商必酷（Be Quiet）Silent Wings 3

![](/data/attachment/album/202005/28/224632duim94rhh4t17hlh.jpg)

高性能 PC 需要大量的电能，这又意味着它们会产生大量的热量。 自然，重视安静的 Torvalds 又选择了一块德商必酷（Be Quiet） Silent Wings 3 风扇。

为什么要多一个风扇？Torvalds 解释说：“多出一个风扇（机箱已经有两个）是因为我最初订购了这个机箱，然后在看的时候，我觉得前面的进气口看起来比后面的输出口更受限制（因为前面板的缘故），反正我在等其他配件到货，所以我决定多加一个进气口风扇会更有利于空气流通，希望能造成机箱的正压，减少灰尘的担心。”

最终，为了做一台安静强大的PC，所有的努力都是值得的。

“有了 BIOS 中正确的风扇控制设置（假设你选对了风扇头。主板的纸质手册上的图片太可怕了，而且我在第一次攒机的时候把 CPU 和系统风扇头弄错了），你的机器在空载的时候基本上是静音的，而且在满载的情况下没有任何恼人的呜呜声（但不是静音）。”

#### 电源：海韵（Seasonic）Focus GX-850

![](/data/attachment/album/202005/28/224633m1qqmekntneqpo9o.jpg)

快速的 CPU 也需要大量的电能，海韵（Seasonal）Focus GX-850 可以提供澎湃的电能。

GX-850 并不是 Torvald 的首选，但在新冠期间只能选到它，不过“它应该是可靠的”，Torvalds 说。他对基础的电源传输非常在意：“我基本上会考虑机器的最高功率使用量是多少？然后挑选一个额定功率为 2 倍的电源，然后寻找评论和有信誉的品牌。”

#### 存储：1TB 三星 EVO 970 SSD

![](/data/attachment/album/202005/28/224744gyiir2v88634xaee.jpg)

说到存储，Torvalds 说现在已经是固态硬盘（SSD）的天下：“到现在为止，我已经十几年没接触过旋转介质了，在过去的几代产品中，我尽量避免布线这些麻烦，只用 m.2 外形的固态硬盘。我用过几款三星的固态硬盘，它们一直都很好。几代以前有很多坏的固态硬盘，现在已经不是什么问题了，但我还是坚持用适合自己的东西。”

#### 内存：4 条 16GB DDR4-2666

![](/data/attachment/album/202005/28/224635dlvbkilvjixklbzz.jpg)

在理想的情况下，当然是 64GB 的纠错码（ECC）内存更好，不过这次他只是选择了高质量的通用 DDR RAM。

事实证明，内存是 Torvalds 的一个痛点：“这其实是我攒的机器里面最不喜欢的部分 —— 它是个好内存，但我真的很想要 ECC（错误校正代码）内存。我很难在亚马逊上找到任何（价格合理）的东西，所以这个我觉得是暂时的‘够用了’，实际用起来起来还不错。”

此外，他继续说道：“其实我甚至不需要 64GB 内存，因为我做的东西往往都不太需要内存，但我想把四个内存通道都填满，而且内存很便宜。”

虽然游戏和人工智能和机器学习的开发者们都很关心图形，但视频和图像处理并不在 Torvalds 的兴趣范围之内。他用的是“随便选的蓝宝石 RX580 显卡。对于我所做的工作（台式机使用，不玩游戏）来说，这已经足够了。”

#### 操作系统：Linux Fedora 32

![](/data/attachment/album/202005/28/224636pgg04wy0p4qphp3l.jpg)

这没什么说的，Torvalds 肯定是用的 Linux ，他一直很喜欢用 Red Hat 的 Fedora 进行开发。当然，用的是最新版本的 Fedora 32。

“把它拼凑在一起，确保所有的风扇设置正确，然后在上面安装 Fedora 32，你就有了一个相当不错的工作站”，Torvalds 说。

除了这台工作站之外，Torvalds 日常使用笔记本电脑进行编程，他使用的是戴尔 XPS 13。

Torvalds 说，“通常情况下，我不会说出品牌，但对 XPS 13 我破例了，我实在太喜欢它了，以至于在我女儿上大学的时候，我还为她买了一台。”

### 羡慕吗？

要不要也攒一台呢，也就 3 万来块钱 :D


新闻速读 > 8GB 容量版树莓派 4 现已上市

Summary: • 新发现 26 个 USB 漏洞：Linux 有 18 个，Windows 有 4 个 • 百度网盘已经上线深度应用商店，同样需要超级会员 • Windows 上的 cmd.exe 进入维护状态 • 现可通过微软商店直接安装 Ubuntu 20.04，支持 WSL 2 • AI 模型 GameGAN 重写《吃豆人》，目标：看视频就能学习的 AI

过段时间 收个 装Ubuntu

![](/data/attachment/album/202005/29/115954sk65h0bt5tit8tj6.jpg)

#### 8GB 容量版树莓派 4 现已上市

当树莓派基金会去年推出树莓派 4 时将其描述为“完整的台式电脑”，但事实是，即使你选择了 4GB 的型号，也无法运行许多用台式电脑可以完成的任务。有一个主要问题阻碍了它的提升，那就是在树莓派 4 上使用的 BCM2711 芯片最多可以处理 16GB 的 LPDDR4 SDRAM，因此提供更大的内存版本的真正障碍是缺乏 8GB 的 LPDDR4 封装。美光今年早些时候提供了合适的存储芯片，今天，新的 8GB 版本加入了产品行列开始发售，售价 75 美元。

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

>
> 硬核老王点评：最初只是用来做教育和实验的单板计算机，在功能和性能上越来越庞大强劲，当然，价格也更贵了。不过，最重要的是，你的树莓派还在吃灰吗？
>
>
>

#### 新发现 26 个 USB 漏洞：Linux 有 18 个，Windows 有 4 个

研究人员在 Linux、macOS、Windows 和 FreeBSD 等操作系统所使用的 USB 驱动堆栈中发现了 26 个新的漏洞。所有漏洞都是通过新工具 USBFuzz 发现的，它是多款应用程序的集合，能够帮助安全研究人员将大量无效、意外或者随机数据输入其他应用程序，然后安全研究人员分析被测试软件的行为方式，以发现新的错误，其中一些可能被恶意利用。研究人员在 FreeBSD 中发现了一个，在 MacOS 中发现了三个（两个导致计划外重启，一个导致系统冻结），在 Windows 8 和 Windows 10 中发现了四个（导致死亡蓝屏）。最严重的是针对 Linux 的，总共有 18 个，其中 16 个是针对 Linux 各个子系统的高危内存漏洞。在这 18 个 Linux 漏洞中，有 11 个自去年首次报告以来收到了补丁。

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

>
> 硬核老王点评：这些漏洞触目惊心啊，看起来 BSD 的代码管理和安全体系更可靠一些。不过好在能积极修补。
>
>
>

#### 百度网盘已经上线深度应用商店，同样需要超级会员

百度网盘为百度旗下的一款云存储产品，用户可以轻松将自己的文件上传到网盘上，并可跨终端随时随地查看和分享。从官方公布的截图来看，深度版百度网盘同样需要超级会员，才能享受云解压等特权。有网友在评论中问道：“Linux 版的下载速度能到几兆的，不用会员？”

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

>
> 硬核老王点评：我想说，不用会员你还想几兆，怕是想多了。
>
>
>

#### Windows 上的 cmd.exe 进入维护状态

微软高级项目经理 Rich Turner 说，Windows 上的旧命令行工具 cmd.exe 处于维护模式，PowerShell 7 则代表着未来。cmd.exe 源自于 Windows NT（和 OS/2）时代，接替 DOS 和 Windows 95 上的COMMAND.COM，向管理员提供一种方法运行程序和批处理文件。许多机构仍然存在大量旧的 cmd 脚本，维护模式意味着它会保持现状，只有出现非常严重问题微软工程师才会去修理。

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

>
> 硬核老王点评：cmd.exe 代表了一个时代，它的步入维护标志着一个老式 Windows 技术的时代的落幕。
>
>
>

#### 现可通过微软商店直接安装 Ubuntu 20.04，支持 WSL 2

Ubuntu 的发行商 Canonical 表示：Ubuntu 是首个支持 WSL 的 Linux 发行版本，也是很多 WSL 用户的首选。Ubuntu 20.04 LTS for WSL 已经随 Ubuntu 20.04 LTS 在今年 4 月同步发布。Ubuntu 也为 WSL 2 做好了准备，所有 Ubuntu 版本都可以升至 WSL 2。

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

>
> 硬核老王点评：Canonical 是最积极靠拢微软的 Linux 发行商，难怪有人曾在网上说，微软应该收购 Canonical，对此我不发表意见。
>
>
>

#### AI 模型 GameGAN 重写《吃豆人》，目标：看视频就能学习的 AI

英伟达称稍后会放出一个使用 AI 模型 GameGAN 复刻的《吃豆人》游戏，以致敬诞生 40 周年的街机版《吃豆人》。它不同于以往用 AI 做游戏的例子。之前的谷歌 DeepMind 和 Open AI 还是在现有游戏框架中，被用来“玩游戏”。GameGAN 则被用来“创作”游戏，是对现有游戏代码的取代。它在训练过程中摄入大量游戏剧本和键盘动作，通过观察场景和玩家的操作动作，预测下一帧游戏画面，而不访问底层游戏逻辑或引擎。据了解，GameGAN 基于 PyTorch 开发，模型研发已经进行了 8 个月，关于复刻《吃豆人》只用了 4 天。

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

>
> 硬核老王点评：可怕的 AI。
>
>
>


在 Linux 上检查 MySQL/MariaDB 数据库正常运行时间的三种方法

Summary: 每个服务都有自己的命令来检查服务的正常运行时间。但是你也可以为此使用其他命令。

每个服务都有自己的命令来检查服务的正常运行时间。但是你也可以为此使用其他命令。

![](/data/attachment/album/202005/29/211031hqb8qlyddtlrt2fl.jpg)

我们都知道在 Linux 中使用 `uptime` 命令的目的。它用于检查 [Linux 系统的正常运行时间](https://www.2daygeek.com/linux-system-server-uptime-check/)以及系统上次启动以来运行的时间。

而 Linux 管理员的工作是保持系统正常运行。

如果要检查 Linux 上的其他服务（例如 [Apache](https://www.2daygeek.com/check-find-apache-httpd-web-server-uptime-linux/)、MySQL、MariaDB、sftp 等）运行了多长时间，该怎么做？

每个服务都有自己的命令来检查服务的正常运行时间。但是你也可以为此使用其他命令。

### 方法 1：如何使用 ps 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间

[ps 命令](https://www.2daygeek.com/linux-ps-command-find-running-process-monitoring/)的意思是<ruby> 进程状态 <rt>  process status </rt></ruby>。这是最基本的命令之一，它显示了系统正在运行的进程的详细信息。

为此，你首先需要使用 [pidof 命令](https://www.2daygeek.com/check-find-parent-process-id-pid-ppid-linux/)查找 [MySQL](https://www.2daygeek.com/category/mysql/)/[MariaDB](https://www.2daygeek.com/category/mariadb/) 的 PID。

```
# pidof mysqld | cut -d" " -f1

2412
```

获取 MySQL/MariaDB 的 PID 后，请在 `ps` 命令中使用 `--etime` 选项获得正常运行时间。

* `--etime`：自进程启动以来经过的时间，形式为 `[[DD-]hh:]mm:ss`。

```
# ps -p 2412 -o etime

   ELAPSED
2-08:49:30
```

或者，在 `ps` 命令中使用 `--lstart` 选项来获取指定 PID 的正常运行时间。

```
# ps -p 2412 -o lstart

                STARTED
Sat May 2 03:02:15 2020
```

MySQL/MariaDB 进程已经运行了 2 天 03 小时 02 分 15 秒。

### 方法 2：如何使用 systemctl 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间

[systemctl 命令](https://www.2daygeek.com/sysvinit-vs-systemd-cheatsheet-systemctl-command-usage/)用于控制 systemd 系统和服务管理器。

systemd 是新的初始化系统和系统管理器，现在大多数 Linux 发行版都淘汰了传统的 SysVinit 管理器而采用了 systemd。

```
# systemctl status mariadb
或者
# systemctl status mysql

● mariadb.service - MariaDB 10.1.44 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor     preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Sat 2020-05-02 03:02:18 UTC; 2 days ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 2448 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 2388 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=/usr/bin/galera_recovery; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 2386 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 2412 (mysqld)
   Status: "Taking your SQL requests now…"
   CGroup: /system.slice/mariadb.service
           └─2412 /usr/sbin/mysqld

May 03 21:41:26 ns2.2daygeek.com mysqld[2412]: 2020-05-03 21:41:26 140328136861440 [Warning] Host name '1.1.1.1' could not be resolved: … not known
May 04 02:00:46 ns2.2daygeek.com mysqld[2412]: 2020-05-04 2:00:46 140328436418304 [Warning] IP address '1.1.1.1' has been resolved to the host name '2…ss itself.
May 04 03:01:31 ns2.2daygeek.com mysqld[2412]: 2020-05-04 3:01:31 140328436111104 [Warning] IP address '1.1.1.1' could not be resolved: Temporary fai…resolution
May 04 04:03:06 ns2.2daygeek.com mysqld[2412]: 2020-05-04 4:03:06 140328136861440 [Warning] IP address '1.1.1.1' could not be resolved: Name or ser… not known
May 04 07:23:54 ns2.2daygeek.com mysqld[2412]: 2020-05-04 7:23:54 140328435189504 [Warning] IP address '1.1.1.1' could not be resolved: Name or service not known
May 04 08:03:31 ns2.2daygeek.com mysqld[2412]: 2020-05-04 8:03:31 140328436418304 [Warning] IP address '1.1.1.1' could not be resolved: Name or service not known
May 04 08:25:56 ns2.2daygeek.com mysqld[2412]: 2020-05-04 8:25:56 140328135325440 [Warning] IP address '1.1.1.1' could not be resolved: Name or service not known
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
Hint: Some lines were ellipsized, use -l to show in full.
```

### 方法 3：如何使用 MySQLAdmin 命令在 Linux 上检查 MySQL/MariaDB 数据库的正常运行时间

[MySQLAdmin](https://www.2daygeek.com/linux-mysqladmin-command-administrate-mysql-mariadb-server/) 是安装 MySQL 软件包时安装的 MySQL 服务器命令行程序。

MySQLAdmin 客户端允许你在 MySQL 服务器上执行一些基本的管理功能。

它用于创建数据库、删除数据库、设置 root 密码、更改 root 密码、检查 MySQL 状态、验证 MySQL 功能、监视 mysql 进程以及验证服务器的配置。

```
# mysqladmin -u root -pPassword version

mysqladmin Ver 8.42 Distrib 5.7.27, for Linux on x86_64
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version 5.7.27
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 1 day 10 hours 44 min 13 sec
```

---

via: <https://www.2daygeek.com/check-mysql-mariadb-database-server-uptime-linux/>

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

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


怎样在树莓派上安装 TT-RSS

Summary: 使用 Tiny Tiny RSS 来保护你阅读新闻馈送时的隐私。

使用 Tiny Tiny RSS 来保护你阅读新闻馈送时的隐私。

>
> 使用 Tiny Tiny RSS 来保护你阅读新闻馈送时的隐私。
>
>
>

![](/data/attachment/album/202005/29/230337vmazkl65hh61l0qq.png)

[Tiny Tiny RSS](https://tt-rss.org/)（TT-RSS）是一个自由开源的基于 Web 的新闻<ruby> 馈送 <rt>  feed </rt></ruby>（RSS/Atom）阅读器和聚合工具。它非常适合那些注重隐私，并且仍然依赖 RSS 来获取日常新闻的人。TT-RSS 是自行托管的软件，因此你可以 100% 的掌控你的服务器、数据以及你的全部隐私。它还支持大量的插件、扩展和主题。你喜欢黑暗模式的界面？没问题。想基于关键词过滤发来的消息？TT-RSS 也能让你得偿所愿。

![Tiny Tiny RSS screenshot](/data/attachment/album/202005/29/230445qan6mdwmfn3fmxa5.jpg "Tiny Tiny RSS screenshot")

现在你知道 TT-RSS 是什么了，那么为什么你可能会想用它。我会讲述要把它安装到树莓派或 Debian 10 服务器上你需要了解的所有的东西。

### 安装和配置 TT-RSS

要把 TT-RSS 安装到树莓派上，你还需要安装和配置最新版本的 PHP（本文撰写时 PHP 最新版本是 7.3）、后端数据库 PostgreSQL、Nginx web 服务器、Git，最后才是 TT-RSS。

#### 1、安装 PHP 7

安装 PHP 7 是整个过程中最复杂的部分。幸运的是，它并不像看起来那样困难。从安装下面的支持包开始：

```
$ sudo apt install -y ca-certificates apt-transport-https
```

现在，添加存储库 PGP 密钥：

```
$ wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
```

下一步，把 PHP 库添加到你的 apt 源：

```
$ echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list
```

然后更新你的存储库索引：

```
$ sudo apt update
```

最后，安装 PHP 7.3（或最新版本）和一些通用组件：

```
$ sudo apt install -y php7.3 php7.3-cli php7.3-fpm php7.3-opcache php7.3-curl php7.3-mbstring php7.3-pgsql php7.3-zip php7.3-xml php7.3-gd php7.3-intl
```

上面的命令默认你使用的后端数据库是 PostgreSQL，会安装 `php7.3-pgsql`。如果你想用 MySQL 或 MariaDB，你可以把命令参数改为 `php7.3-mysql`。

下一步，确认 PHP 已安装并在你的树莓派上运行着：

```
$ php -v
```

现在是时候安装和配置 Web 服务器了。

#### 2、安装 Nginx

可以用下面的命令安装 Nginx：

```
$ sudo apt install -y nginx
```

修改默认的 Nginx 虚拟主机配置，这样 Web 服务器才能识别 PHP 文件以及知道如何处理它们。

```
$ sudo nano /etc/nginx/sites-available/default
```

你可以安全地删除原文件中的所有内容，用下面的内容替换：

```
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;
        index index.html index.htm index.php;
        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }

}
```

按 `Ctrl+O` 保存修改后的配置文件，然后按 `Ctrl+X` 退出 Nano。你可以用下面的命令测试你的新配置文件：

```
$ nginx -t
```

如果没有报错，重启 Nginx 服务：

```
$ systemctl restart nginx
```

#### 3、安装 PostgreSQL

接下来是安装数据库服务器。在树莓派上安装 PostgreSQL 超级简单：

```
$ sudo apt install -y postgresql postgresql-client postgis
```

输入下面的命令看一下数据库服务器安装是否成功：

```
$ psql --version
```

#### 4、创建 Tiny Tiny RSS 数据库

在做其他事之前，你需要创建一个数数据库，用来给 TT-RSS 软件保存数据。首先，登录 PostgreSQL 服务器：

```
sudo -u postgres psql
```

下一步，新建一个用户，设置密码：

```
CREATE USER username WITH PASSWORD 'your_password' VALID UNTIL 'infinity';
```

然后创建一个给 TT-RSS 用的数据库：

```
CREATE DATABASE tinyrss;
```

最后，给新建的用户赋最高权限：

```
GRANT ALL PRIVILEGES ON DATABASE tinyrss to user_name;
```

这是安装数据库的步骤。你可以输入 `\q` 来退出 `psql` 程序。

#### 5、安装 Git

安装 TT-RSS 需要用 Git，所以输入下面的命令安装 Git：

```
$ sudo apt install git -y
```

现在，进入到 Nginx 服务器的根目录：

```
$ cd /var/www/html
```

下载 TT-RSS 最新源码：

```
$ git clone https://git.tt-rss.org/fox/tt-rss.git tt-rss
```

注意，这一步会创建一个 `tt-rss` 文件夹。

#### 6、安装和配置Tiny Tiny RSS

现在是安装和配置你的新 TT-RSS 服务器的最后时刻了。首先，确认下你在浏览器中能打开 `http://your.site/tt-rss/install/index.php`。如果浏览器显示 `403 Forbidden`，那么就证明 `/var/www/html` 文件夹的权限没有设置正确。下面的命令通常能解决这个问题：

```
$ chmod 755 /var/www/html/ -v
```

如果一切正常，你会看到 TT-RSS 安装页面，它会让你输入一些数据的信息。你只需要输入前面你创建的数据库用户名和密码；数据库名；主机名填 `localhost`；端口填 `5432`。

点击“Test Configuration”。如果一切正常，你会看到一个标记着“Initialize Database”的红色按钮。点击它来开始安装。结束后，你会看到一个配置文件，你可以把它复制到 TT-RSS 的目录，另存为 `config.php`。

安装过程结束后，浏览器输入 `http://yoursite/tt-rss/` 打开 TT-RSS，使用默认的凭证登录（用户名：`admin`，密码：`password`）。登录后系统会提示你修改密码。我强烈建议你尽快修改密码。

### 配置 TT-RSS

如果一切正常，你现在就可以开始使用 TT-RSS 了。建议你新建一个非管理员用户，使用新用户名登录，并开始导入你的馈送、订阅，按照你的意愿来配置它。

最后，并且是超级重要的事，不要忘了阅读 TT-RSS 维基上的 [Updating Feeds](https://tt-rss.org/wiki/UpdatingFeeds) 部分。它讲述了如何创建一个简单的 systemd 服务来更新馈送。如果你跳过了这一步，你的 RSS 馈送就不会自动更新。

### 总结

呵！工作量不小，但是你做完了！你现在有自己的 RSS 聚合服务器了。想了解 TT-RSS 更多的知识？我推荐你去看官方的 [FAQ](https://tt-rss.org/wiki/FAQ)、[支持](https://community.tt-rss.org/c/tiny-tiny-rss/support)论坛，和详细的[安装](https://tt-rss.org/wiki/InstallationNotes)笔记。如果你有任何问题，尽情地在下面评论吧。

---

via: <https://opensource.com/article/20/2/ttrss-raspberry-pi>

作者：[Patrick H. Mullins](https://opensource.com/users/pmullins) 选题：[lujun9972](https://github.com/lujun9972) 译者：[lxbwolf](https://github.com/lxbwolf) 校对：[wxy](https://github.com/wxy)

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


新闻速读 > HashiCorp 产品禁止中国公司使用，引发对开源软件受限制的担忧

Summary: • 画风惊悚，南京邮电大学用开源机器人项目实现“云毕业典礼” • Docker 企业版被卖给 Mirantis 后，发布了第一个主要版本 • NSA 称俄黑客组织渗入著名邮件系统软件 Exim 已有数月时间 • NSA 称俄黑客组织渗入著名邮件系统软件 Exim 已有数月时间 • 谷歌计划根据页面“体验”调整搜索排名

"HashiCorp 产品禁止中国公司使用"，你是觉得我看不懂英文吗

![](/data/attachment/album/202005/30/130458xsmca4sv8n0ca88s.jpg)

#### HashiCorp 产品禁止中国公司使用，引发对开源软件受限制的担忧

近日国外知名 DevOps 服务商 HashiCorp 的官网相关条款页面被发现禁止中国公司使用其 Vault 企业版产品的声明。Valut 是一个用于机密管理、加密即服务和特权访问管理的工具。HashiCorp 创始人回应，其表示实际上这与开源软件无关，而是只限制 Vault 企业版产品，并且原因是 Vault 产品目前使用的加密算法，在中国不符合法规，另一方面是美国出口管制法在涉及加密相关软件上也有相应规定。因此这两项原因使得 HashCorp 不得不在声明中说明风险。

来源：[开源中国](https://www.oschina.net/news/116049/about-terms-of-evaluation-for-hashicorp-software)

>
> 硬核老王点评：值此时期，出于对开源软件的边界的敏感，这个消息引起了的很多议论。
>
>
>

#### 画风惊悚，南京邮电大学用开源机器人项目实现“云毕业典礼”

据介绍，毕业典礼上的这些机器人出自学校的机器人创新团队之手，是在以前参赛机器人的基础上改装的。这次改装主要是为机器人配置了与真人身高相仿的模型，现场由专门的同学对机器人进行远程控制，屏幕则是用 ZOOM 与参加毕业典礼的同学进行视频交互。

来源：[开源中国](https://www.oschina.net/news/116033/how-to-graduate-by-internet)

>
> 硬核老王点评：开源不开源的先不说，这种令人惊悚的机器人行为想必能给出席和不能出席毕业典礼的毕业生们留下深刻的印象。
>
>
>

#### Docker 企业版被卖给 Mirantis 后，发布了第一个主要版本

Docker 公司于 2019 年 11 月将其 Docker 企业版产品线卖给了顶级 OpenStack 和 Kubernetes 云公司Mirantis。这次发布的第一个主要版本 Docker 企业版 3.1 是一个重大的升级。在容器协调方面，它现在依赖于 Kubernetes 1.17。随之而来的是更高的稳定性和功能，如调度器的改进和对 Windows 的支持。新版本还包括 Nvidia GPU 对人工智能和机器学习应用和编程的支持。

来源：[zdnet](https://www.zdnet.com/article/first-new-docker-release-under-mirantis-appears/)

>
> 硬核老王点评：Docker 公司的经历令人唏嘘，不知道 Docker 企业版到了 Mirantis 手里，是否会有不同的局面。
>
>
>

#### NSA 称俄黑客组织渗入著名邮件系统软件 Exim 已有数月时间

Exim 是著名的用于基于 Unix/Linux 的邮件系统 MTA 软件，件默认安装在许多 Linux 发行版中。虽然这个漏洞的原始补丁早在去年已经发布，但许多在运行 Exim 的计算机仍没有安装这个补丁。该漏洞允许远程攻击者在知道该漏洞的情况下执行他们选择的命令和代码。根据 NSA 发布的文件，利用这一漏洞发起攻击的是俄罗斯军方组织 Sandworm。

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

>
> 硬核老王点评：基础设施软件中潜伏的安全漏洞带来的破坏的隐秘的、深远的。对错误理解了“懒惰的系统管理员才是好的系统管理员”的人来说，可能破坏尤其大。
>
>
>

#### GitHub 警告 Java 开发者，新的恶意软件正在毒害 NetBeans 项目

GitHub 表示，在其网站上上传的 26 个版本库中发现了含有这个被命名为 Octopus Scanner 恶意软件。该恶意软件会扫描受害者的工作站，寻找本地的 NetBeans IDE 安装，然后潜入开发者的其他 Java 项目。它可以在 Windows、macOS 和 Linux 上运行，然后会下载一个远程访问木马，从而让 Octopus Scanner 操作者在受感染的受害者电脑中翻阅，寻找敏感信息。其真正目的是在敏感项目或大型软件公司内部的开发人员的机器上放置远程访问木马，而不一定是为了毒害开源 Java 项目。

来源：[zdnet](https://www.zdnet.com/article/github-warns-java-developers-of-new-malware-poisoning-netbeans-projects/)

>
> 硬核老王点评：开源的代码，如果没有良好的管理和审计，相当于不设防的堡垒，看似坚固，实则孱弱。
>
>
>

#### 谷歌计划根据页面“体验”调整搜索排名

谷歌将赋予“体验”指标更多的权重，以决定在出现在移动端搜索中的“热门故事”的内容。具体来说，谷歌计划将<ruby> 核心网络体征 <rt>  Core Web Vitals </rt></ruby>纳入现有的搜索排名信号中。核心网络体征是谷歌在本月早些时候推出的一组指标，量化了网络用户体验的各个方面，包括加载时间、互动性和内容加载时的稳定性。谷歌现有的页面体验搜索信号包括移动友好性、安全浏览、HTTPS 安全和侵入式界面指南等方面。

来源：[zdnet](https://www.zdnet.com/article/google-plans-to-adjust-search-rankings-based-on-page-experience/)

>
> 硬核老王点评：“漂亮”的页面总是更受到欢迎。
>
>
>


如何为开源软件写作文章

Summary: 通过以下提示，成为一个更好的作者。

通过以下提示，成为一个更好的作者。

>
> 通过以下提示，成为一个更好的作者。
>
>
>

![](/data/attachment/album/202005/31/115044ecfpxc2q9z0ca8wq.jpg)

开始接触开源社区的一个方法就是写关于它的文章。你可以贡献技术文档，分享你如何使用软件，或者为我们社区写一篇文章。但是开始写作说起来容易做起来难。我听到的最常见的两个不写文章的借口是：“我没有什么新东西可写”和“我不是一个好的作者”。我在这里是为了打破这两个误区。

### 你应该写什么？

>
> “寻找那些经常被遗漏的故事。” 埃里克·拉尔森
>
>
>

对于某些人来说，写作的最大障碍是找到要写的想法或话题。很容易就落入了这样的思维陷阱：“这个话题已经写过了，何必再麻烦。”

我不是第一个写文章的人，也不会是最后一个。我带来的是我独特的视角和这些年来所学到的东西。曾经有人向我请教过一些关于写作入门的建议，或者是如何让自己的写作更上一层楼。我决定把这些建议变成一篇文章。

文如其人，没有人会以你的方式来述事，你的经验和观点可能正是别人所需要的。

这里有一些提示，可以帮助你想出一个主题：

* 你最近学到了什么东西？写出你是如何学习的，你学到了什么，或使你感到惊讶的事情。
* 你经常被问到的问题是什么？把答案写出来。
* 你最近是否在搜索一篇怎么做的文章，但在搜索结果中，你对排名靠前的文章不满意？请写出你要找的文章。
* 你是否参加过会议或研讨会？写一篇会后总结来说明你所学到的东西。
* 你开始使用新工具了吗？写一份操作指南或入门指南。

### 你写的是什么类型的文章？

有不同类型的文章，包括:

* 技术文档
* 操作指南
* 博客
* 白皮书或电子书
* 回顾性的文章

内容的类型会影响你的写作风格和语气。博客更加非正式和是对话式的。而技术文档更正式，更具有指导性。

### 你是为谁而写的？

每一篇文章都应该有一个单一的受众。受众是指你为之写作的对象是什么类型的人。在你开始写作之前，写下你的读者的一些特征是有助于写作的。重要的是要考虑到你要为谁写，以及你**不是为**谁写的 —— 确定你的目标受众将决定要包括哪些内容和不包括哪些内容。

例如，我在写这篇文章的时候，我设想的目标受众是这样的：

* 有基本的写作和语法知识
* 有兴趣提高写作能力
* 在技术领域担任开发人员、销售工程师、客户经理或类似职位的工作
* 不是经验丰富或资深的作者，可能在个人或工作博客上发表过几篇文章，想写更多的文章。
* 非虚构写作

如果你有针对多个受众的内容，可以考虑针对不同的受众将其分解成不同的内容。对你的受众要考虑的一些方面：

* 专业水平：新手、中级、高级
* 作用：管理人员、个人贡献者
* 目标：他们为什么要阅读这些？

### 言语很重要

你选择的言语会对读者产生影响。晦涩难懂的词汇会使文章更难理解，不常见的词汇会让读者觉得自己很笨，某些词汇可能会不小心冒犯读者。作为一个作者，你的目标是避免所有这些。下面是怎么做的：

#### 使用日常用语

不要把写作作为炫耀你的词汇量或你从“每日一字”台历上学到的单词的方式。写作是为了让读者能够理解。每一篇文章都有相关的阅读水平。如果你写的是技术文档，那么你的目标大约是初中的阅读水平。这并不意味着你的受众只有初中的教育水平。它意味着你的写作会更容易被人理解。你想让人们对这些言语过目不忘，还是想让他们觉得自己学到了什么？虽然你可以使用长而复杂的词汇，但并不意味着你应该这样做。使用简单的语言不一定意味着你的文章会很无聊。

使用 [Hemingway 应用](http://www.hemingwayapp.com/)等工具来检查你的作品的可读性（它不是开源的，但很优秀）。比如说，在初稿之后，这篇文章被评定为五年级的阅读水平。Hemingway 还提供了如何改进写作的建议 —— 找出难以理解的句子或需要改变选词的地方。

如果你想要找出替代的词汇，可以查看 [Plain English Campaign](http://www.plainenglish.co.uk/the-a-z-of-alternative-words.html) 的建议或 [Power Thesaurus](https://www.powerthesaurus.org/) 的众包建议。

#### 知道应该规避哪些词

>
> “每次你想写‘非常’的时候，就用‘该死的’代替；你的编辑会把它删掉，而作品就会如它应有的那样。” 马克·吐温
>
>
>

在写教程或指南的时候，这里有一些要避免的词，包括“<ruby> 简单 <rt>  simple </rt></ruby>”、“<ruby> 容易 <rt>  easy </rt></ruby>”和“<ruby> 就这样 <rt>  just </rt></ruby>”。你是你所写的主题的专家，经过多年的实践，可能会觉得事情很简单。而初学者可能会觉得事情不“简单”，也不“容易”。你的读者可能会感到沮丧，因为他们觉得过程或解释并不简单。

你是否曾经因为无法理解作者的意思而不得不反复重读一个句子或段落？你有没有因为一篇文章对你来说没有意义而放弃过？我有过。

作为一个作者，你希望你的读者感到困惑或不理解吗？我希望不会。

在你的写作中要避免的其它词语：

* <ruby> 这件事 <rt>  That </rt></ruby>
* <ruby> 真的 <rt>  Really </rt></ruby>
* <ruby> 非常 <rt>  Very </rt></ruby>
* <ruby> 所以 <rt>  So </rt></ruby>
* <ruby> 为了 <rt>  In order to </rt></ruby>

一般来说，这些词可以在不改变句子意思的情况下删除。

在我写完之后，我会在文档中搜索这些词。当我在这篇文章中搜索时，我发现了以下这句话：

>
> “这并不意味着你的受众只有初中的教育水平*这件事*，而意味着你的写作会更容易被理解*这件事*。”
>
>
>

这句话中出现了两个“<ruby> 这件事 <rt>  That </rt></ruby>”的例子。它们并没有给句子增加价值。它们可以被删除而不改变其含义。删除这些词汇可以缩短句子，并且更短的句子更容易理解。而说到短句，我还把它改写成了两句话。

>
> “这并不意味着你的受众只有初中的教育水平。它意味着你的写作会更容易被人理解。”
>
>
>

#### 使用包容性语言

词语和短语的历史背景可能会导致人们感到被排斥或冒犯。在写作时，你要让读者感到被包容。当你使用包容性的语言时，会让读者感到被理解、被尊重，感觉被包容。我参考了 Buffer 中的这篇[关于使用包容性语言的指南](https://open.buffer.com/inclusive-language-tech/)。

### 修订和编辑

>
> “几乎所有好的写作都是从糟糕的第一次努力开始的。你需要从某个地方开始。” 安妮·拉莫特
>
>
>

写作是一个迭代的过程。如果你认为作者们坐在办公桌前，在一个小时内就能完成一篇文章准备发表，那么请你再想一想。有些文章需要我花几个星期的时间来完成。以下是我的标准流程：

* 写一个粗略的初稿。我说的粗略，我的意思是*粗陋*。写的时候不用担心语法问题。目的是让文字从我的脑海中浮现出来，写在纸上。这一步可能需要一个小时到几周的时间。
* 将草稿放一段时间。这可能需要几个小时到几天的时间，这取决于出版时间线。
* 审阅草稿。进行调整和编辑。
* 征求反馈意见，可以是同事或朋友的反馈意见。在这个阶段的反馈中，我的重点是明确性。是否有意义？是否有什么令人困惑的地方？有什么缺失的部分？
* 纳入反馈意见。无论你的写作经验有多丰富，让其他作者审阅你的作品，都会让你的作品变得更好。

在这个阶段，我有了一个相当扎实的草稿。现在到了我最不喜欢的写作部分 —— 编辑。我之前提到的 Hemingway 应用不仅能告诉你阅读水平，还能提供改进写作的建议。我还使用 Grammarly 来帮助编辑语法。关于 Grammarly 的开源替代工具，请查看[语言工具网站](https://languagetool.org/)或这篇文章中的[开源写作工具](https://opensource.com/article/20/3/open-source-writing-tools)。

我的写作挑战之一就是适当地使用逗号。Grammarly 可以帮助我找出我缺失或滥用逗号的地方。Grammarly 发现了 43 个这篇文章的最终草稿的正确性问题。其中大部分是逗号错误。

![Errors identified by Grammarly](/data/attachment/album/202005/31/115127aiyzt6ma2c2r8grr.png "Errors identified by Grammarly")

除了语法错误之外，该应用程序还提供了一些建议，以帮助提高清晰度、参与度和表达能力（其中一些功能可能在免费版中没有）。这包括单词选择和使用主动语气与被动语气等。有些建议我接受，有些则拒绝。在审查了所有的警报和建议后，Grammarly 会在各个方面进行反馈。

![Grammarly results](/data/attachment/album/202005/31/115128vppm5mt7xmmzgpjz.png "Grammarly results")

不要害怕寻求写作上的帮助。每一个好的作者背后都有一个好的编辑或好的编辑应用。

### 文体指南

文体指南为改善书面交流提供了标准。它们包括标点符号、语法和用词等方面。如果是为你的公司撰写文档，请检查一下公司是否有文体指南。如果没有文体指南，或者你是为自己写的，下面是一些常用的文体指南：

* [芝加哥文体手册](https://www.chicagomanualofstyle.org/home.html)
* [谷歌开发者文档指南](https://developers.google.com/style)
* [微软写作文体指南](https://docs.microsoft.com/en-us/style-guide/welcome/)
* [美联社文体手册](https://www.apstylebook.com/)

写作是一种与社区分享自己的思想和知识的方式。开始写作的唯一方法就是开始打字。用这些建议来微调你的写作。

---

via: <https://opensource.com/article/20/5/write-about-open-source-software>

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


如何使用 VTY Shell 配置路由器

>
> FRR（free range routing）给了你实现多种协议的选择。本指南将帮助你入门。
>
>
>

![](/data/attachment/album/202005/31/122310xi9aag5iqihqgcxl.jpg)

最近，我写了一篇文章，解释了如何使用 [Quagga](/article-12199-1.html) 路由套件实现<ruby> 开放式最短路径优先 <rt>  Open Shortest Path First </rt></ruby>（OSPF）。可以使用多个软件套件代替 Quagga 来实现不同的路由协议。其中一种是 FRR（free range routing）。

### FRR

[FRR](https://en.wikipedia.org/wiki/FRRouting) 是一个路由软件套件，它衍生自 Quagga，并在 GNU GPL2 许可下分发。与 Quagga 一样，它为类 Unix 平台提供了所有主要路由协议的实现，例如 OSPF、<ruby> 路由信息协议 <rt>  Routing Information Protocol </rt></ruby>（RIP）、<ruby> 边界网关协议 <rt>  Border Gateway Protocol </rt></ruby>（BGP） 和<ruby> 中间系统到中间系统 <rt>  Intermediate system-to-intermediate system </rt></ruby> （IS-IS）。

开发了 Quagga 的一些公司，例如 Big Switch Networks、Cumulus、Open Source Routing 和 6wind，创建了 FRR 以在 Quagga 的良好基础上进行改善。

#### 体系结构

FRR 是一组守护进程，它们可以共同构建路由表。每个主协议都在其自己的守护进程中实现，并且这些守护进程与独立于协议的核心守护进程 Zebra 通信，后者提供内核路由表更新、接口查找以及不同路由协议之间路由的重新分配。每个特定协议的守护进程负责运行相关协议并根据交换的信息构建路由表。

![FRR architecture](/data/attachment/album/202005/31/122431zzgjfaulaggspiej.png "FRR architecture")

### VTY shell

[VTYSH](http://docs.frrouting.org/projects/dev-guide/en/latest/vtysh.html) 是 FRR 路由引擎的集成 shell。它将每个守护进程中定义的所有 CLI 命令合并，并在单个 shell 中将它们呈现给用户。它提供了类似于 Cisco 的命令行模式，并且许多命令与 Cisco IOS 命令相似。CLI 有不同的模式，某些命令仅在特定模式下可用。

### 设置

在本教程中，我们将使用 FRR 配置动态路由来实现路由信息协议（RIP）。我们可以通过两种方式来做到这一点：在编辑器中编辑协议守护进程配置文件或使用 VTY Shell。在此例中，我们将使用 VTY shell。我们的设置包括两个名为 Alpha 和 Beta 的 CentOS 7.7 主机。这两台主机都有两个网络接口，并共享对 192.168.122.0/24 网络的访问。我们将广播 10.12.11.0/24 和 10.10.10.0/24 网络的路由。

对于主机 Alpha：

* eth0 IP：192.168.122.100/24
* 网关：192.168.122.1
* eth1 IP：10.10.10.12/24

对于主机 Beta：

* eth0 IP：192.168.122.50/24
* 网关：192.168.122.1
* eth1 IP：10.12.11.12/24

#### 安装软件包

首先，我们需要在两台主机上都安装 FRR 软件包。可以按照[官方 FRR 文档](http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-centos7.html)中的说明进行操作。

#### 启用 IP 转发

对于路由，我们需要在两台主机上都启用 IP 转发，因为这将由 Linux 内核执行：

```
sysctl -w net.ipv4.conf.all.forwarding = 1
sysctl -w net.ipv6.conf.all.forwarding = 1
sysctl -p
```

#### 启用 RIPD 守护进程

安装后，所有配置文件将保存在 `/etc/frr` 目录中。 必须通过编辑 `/etc/frr/daemons` 文件显式启用守护进程。该文件确定启动 FRR 服务时激活哪些守护进程。要启用特定的守护进程，只需将相应的 `no` 改为 `yes`。之后的服务重启将启动守护进程。

![FRR daemon restart](/data/attachment/album/202005/31/122433stthaatu8ru3nurb.png "FRR daemon restart")

#### 防火墙配置

由于 RIP 协议使用 UDP 作为传输协议，并被分配了 520 端口，因此我们需要在 `firewalld` 配置中允许该端口。

```
firewall-cmd --add-port=520/udp –permanent
firewalld-cmd -reload
```

现在，我们可以使用以下命令启动 FRR 服务：

```
systemctl start frr
```

#### 使用 VTY 进行配置

现在，我们需要使用 VTY Shell 配置 RIP。

在主机 Alpha 上：

```
[root@alpha ~]# vtysh

Hello, this is FRRouting (version 7.2RPKI).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

alpha# configure terminal
alpha(config)# router rip
alpha(config-router)# network 192.168.122.0/24
alpha(config-router)# network 10.10.10.0/24
alpha(config-router)# route 10.10.10.5/24
alpha(config-router)# do write
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Configuration saved to /etc/frr/ripd.conf
Configuration saved to /etc/frr/staticd.conf
alpha(config-router)# do write memory
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Configuration saved to /etc/frr/ripd.conf
Configuration saved to /etc/frr/staticd.conf
alpha(config-router)# exit
```

类似地，在主机 Beta 上：

```
[root@beta ~]# vtysh

Hello, this is FRRouting (version 7.2RPKI).
Copyright 1996-2005 Kunihiro Ishiguro, et al.

beta# configure terminal
beta(config)# router rip
beta(config-router)# network 192.168.122.0/24
beta(config-router)# network 10.12.11.0/24
beta(config-router)# do write
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Configuration saved to /etc/frr/zebra.conf
Configuration saved to /etc/frr/ripd.conf
Configuration saved to /etc/frr/staticd.conf
beta(config-router)# do write memory
Note: this version of vtysh never writes vtysh.conf
Building Configuration...
Configuration saved to /etc/frr/zebra.conf
Configuration saved to /etc/frr/ripd.conf
Configuration saved to /etc/frr/staticd.conf
beta(config-router)# exit
```

完成后，像下面这样检查两台主机路由：

```
[root@alpha ~]# ip route show
default via 192.168.122.1 dev eth0 proto static metric 100
10.10.10.0/24 dev eth1 proto kernel scope link src 10.10.10.12 metric 101
10.12.11.0/24 via 192.168.122.50 dev eth0 proto 189 metric 20
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.100 metric 100
```

我们可以看到 Alpha 上的路由表通过 `192.168.122.50` 包含了 `10.12.11.0/24` 的条目，它是通过 RIP 提供的。

类似地，在 Beta 上，该表通过 `192.168.122.100` 包含了 `10.10.10.0/24` 的条目。

```
[root@beta ~]# ip route show
default via 192.168.122.1 dev eth0 proto static metric 100
10.10.10.0/24 via 192.168.122.100 dev eth0 proto 189 metric 20
10.12.11.0/24 dev eth1 proto kernel scope link src 10.12.11.12 metric 101
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.50 metric 100
```

### 总结

如你所见，设置和配置相对简单。要增加复杂性，我们可以向路由器添加更多的网络接口，以为更多的网络提供路由。可以在编辑器中编辑配置文件来进行配置，但是使用 VTY Shell 在单个组合会话中为我们提供了所有 FRR 守护进程的前端。

---

via: <https://opensource.com/article/20/5/vty-shell>

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


新闻速读 > 微软拟用 AI 取代其英国网站新闻编辑队伍

Summary: • 臭名昭著的 Trickbot 木马更新了一种新的传播方式，使其更难被发现 • 新的 Beta 版树莓派 4 固件支持 USB 引导

![](/data/attachment/album/202005/31/134321z6xdqgng6mun34x4.jpg)

#### 微软拟用 AI 取代其英国网站新闻编辑队伍

英国《卫报》30 日消息，微软决定用 AI 软件代替自己新闻网站的编辑队伍。据报道，当地时间 28 日，英国新闻协会负责在 MSN 网站及微软 Edge 浏览器上维护其新闻主页的约 27 名编辑，由于微软决定停止用人工选择、编辑和策划其主页上的新闻报道，被告知将在一个月的时间内被解雇。

来源：[界面](https://www.cnbeta.com/articles/tech/985157.htm)

>
> 硬核老王点评：AI “抢夺”人类工作的进程越来越快了，你的工作还好吗？
>
>
>

#### 臭名昭著的 Trickbot 木马更新了一种新的传播方式，使其更难被发现

Trickbot 最初是作为银行木马，于 2016 年首次出现，但在此后的几年里，它被多次被重新使用于其他手段。Trickbot 还可以作为僵尸网络来帮助传播给更多的受害者。EternalBlue，这个为 WannaCry 提供动力的 Windows 漏洞，构成了 Trickbot 传播的关键部分。Trickbot 是模块化的，它的作者可以很容易地添加或删除功能，正是这一点，使得最新的改动可以很容易地实现。现在，当 Trickbot 感染域控制器时，恶意软件会从内存中运行，确保不会在受感染的机器上留下任何人工制品，从而增加了检测难度。

来源：[zdnet](https://www.zdnet.com/article/this-new-trickbot-malware-update-makes-it-even-harder-to-detect/)

>
> 硬核老王点评：病毒和木马固然是越来越狡猾，但是最大的根源还是不修补的系统缺陷。
>
>
>

#### 新的 Beta 版树莓派 4 固件支持 USB 引导

于 2019 年 6 月推出的 树莓派 4 拥有的功能亮点之一是 USB 3.0，与以前版本的计算机相比，其可以实现更快的存储速度。不过，与先前的型号不同的是，树莓派 4 不支持 USB 大容量存储启动。此次更新将提供完整的 USB 启动支持，从而完全不需要 microSD 卡。不过由于还是测试版，尚有一些不完善，可等到正式版本发布再使用。

来源：[开源中国](https://www.oschina.net/news/116048/raspberry-pi-4-boot-from-usb-firmware-beta)

>
> 硬核老王点评：期待正式版，这样就不用依赖 microSD 卡了。
>
>
>


Linux 中软链接和硬链接的区别

Summary: 链接（Link）是一种快捷访问机制，它通过一个文件指向原始文件或目录的方式实现快捷访问，同时还记录了原始文件或目录的一些信息。

这次解释相当通俗，左右一目了然，且最后的相关命令实用性很强。

![](/data/attachment/album/202006/01/082717bilg8nmx808oxzgn.jpg)

<ruby> 链接 <rt>  Link </rt></ruby>是一种快捷访问机制，它通过一个文件指向原始文件或目录的方式实现快捷访问，同时还记录了原始文件或目录的一些信息。

链接允许多个不同文件对同一个文件进行引用。

### 什么是软链接

<ruby> 符号链接 <rt>  Symbolic Link </rt></ruby>（symlink），又称<ruby> 软链接 <rt>  Soft Link </rt></ruby>，是一种特殊的文件，它指向 Linux 系统上的另一个文件或目录。

这和 Windows 系统中的快捷方式有点类似，链接文件中记录的只是原始文件的路径，并不记录原始文件的内容。

符号链接通常用于对库文件进行链接，也常用于链接日志文件和<ruby> 网络文件系统 <rt>  Network File System </rt></ruby>（NFS）上共享的目录。

### 什么是硬链接

硬链接是原始文件的一个镜像副本。创建硬链接后，如果把原始文件删除，链接文件也不会受到影响，因为此时原始文件和链接文件互为镜像副本。

为什么要创建链接文件而不直接复制文件呢？

当你需要将同一个文件保存在多个不同位置，而且还要保持持续更新的时候，硬链接的重要性就体现出来了。

如果你只是单纯把文件复制到另一个位置，那么另一个位置的文件只会保存着复制那一刻的文件内容，后续也不会跟随着原始文件持续更新。

而使用硬链接时，各个镜像副本的文件内容都会同时更新。

### 软链接和硬链接的区别

下表列出了软链接和硬链接之间的区别。

| # | 软链接 | 硬链接 |
| --- | --- | --- |
| 1 | 软链接类似于 Windows 系统中的快捷方式 | 硬链接是原始文件的一个镜像副本 |
| 2 | 软链接又称符号链接 | 硬链接没有别名 |
| 3 | 链接中任何一个文件发生改变，都会同步到连接中的其它文件 | 和软链接一样 |
| 4 | 软链接可以跨文件系统进行创建 | 硬链接不可以跨文件系统进行创建 |
| 5 | 软链接可以指向文件或目录 | 硬链接只能指向文件 |
| 6 | 链接文件和原始文件之间的 inode 和文件权限不完全一致 | 链接文件和原始文件的 inode 和文件权限完全一致 |
| 7 | 链接文件只记录原始文件的路径，不记录原始文件的内容 | 链接文件记录了原始文件的内容 |
| 8 | 如果原始文件被移除，软链接就会因为指向不存在的文件而失效。这被称为“<ruby> 挂起链接 <rt>  hanging link </rt></ruby>” | 即使原始文件被移除，链接文件也不受影响。 |
| 9 | 通过 `ln -s <原始文件> <链接文件>` 命令创建软链接 | 通过 `ln <原始文件> <链接文件>` 命令创建硬链接 |
| 10 | 软链接文件的文件权限中有一个特殊标记 `l` | 硬链接文件没有特殊标记 |
| 11 | 通过 `find / -type l` 命令可以查找软链接文件 | 通过 `find / -samefile <原始文件>` 命令可以查找硬链接文件 |
| 12 | 通过 `symlinks <目录>` 命令可以查找失效的软链接 | 硬链接不存在失效链接 |

---

via: <https://www.2daygeek.com/difference-between-soft-link-vs-hard-link-linux/>

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

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