diff --git a/published/202110/20200228 How to process real-time data with Apache.md b/published/202110/20200228 How to process real-time data with Apache.md
new file mode 100644
index 0000000000..7d4b4189b2
--- /dev/null
+++ b/published/202110/20200228 How to process real-time data with Apache.md
@@ -0,0 +1,82 @@
+[#]: collector: (lujun9972)
+[#]: translator: (unigeorge)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13891-1.html)
+[#]: subject: (How to process real-time data with Apache)
+[#]: via: (https://opensource.com/article/20/2/real-time-data-processing)
+[#]: author: (Simon Crosby https://opensource.com/users/simon-crosby)
+
+如何使用 Apache 软件处理实时数据
+======
+
+> 开源以丰富的项目画布引领着处理实时事件的方向。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/17/105502opl53qrmj950j3mv.jpg)
+
+在“永不下线”的未来,入网设备规模可能会达到数十亿。存储原始数据,日后再进行分析的方案将不再能满足需求,因为用户需要实时且准确的响应。要对故障等对环境敏感的状况进行预测,实时处理数据也必不可少 —— 数据到达数据库后再处理肯定是来不及的。
+
+有人可能会说,“云可扩展性”能够满足实时处理流数据的需求,但一些简单的例子就能表明它永远无法满足对无界数据流进行实时响应的需求。从移动设备到物联网,都需要一种新的范式来满足需求。尽管云计算依赖于对大数据“先存储后分析”的方案,但也迫切需要一种能够处理持续、杂乱和海量数据流的软件框架,并在数据流到达时立即对其进行处理,以保证实时的响应、预测和对数据的洞悉。
+
+例如,在加利福尼亚州的帕洛阿尔托市,每天从基础交通设施产生的流数据比 Twitter Firehose 还要多。这是很大的数据量。为 Uber、Lyft 和 FedEx 等消费者预测城市交通需要实时的分析、学习和预测。云处理不可避免地导致每个事件大约会有半秒的延迟。
+
+我们需要一个简单而强大的编程范式,让应用程序在类似下面的情况时能够动态处理无界数据流:
+
+ * 数据量巨大,或原始数据的移动成本很高。
+ * 数据由广泛分布的资产(例如移动设备)生成。
+ * 数据具有转瞬即逝的价值,即时分析迫在眉睫。
+ * 需要始终洞悉最新数据情况,外推法行不通。
+
+### 发布和订阅
+
+事件驱动系统领域中有一个关键架构模式:发布/订阅 消息传递模式。这是一种异步通信方法,其中消息会从 _发布者_(数据产生方)传递到 _订阅者_(处理数据的应用程序)。发布/订阅模式可以将消息发送者与消费者分离开来。
+
+在发布/订阅模式中,消息源会 _发布_ 针对某个 主题 的 事件 至 服务端,后者按接收顺序存储它们。应用程序可以 _订阅_ 一个或多个 _主题_,然后 _服务端_ 会转发匹配的事件。 Apache Kafka 和 Pulsar 以及 CNCF NATS 是发布/订阅系统。 发布/订阅的云服务包括 Google Pub/Sub、AWS Kinesis、Azure Service Bus、Confluent Cloud 等。(LCTT 译注:本段部分术语英文名称更为泛用,针对这些术语,采用了中英文标注。)
+
+发布/订阅系统不会 _运行_ 订阅者应用程序,它们只是 _传递_ 数据给相应主题的订阅者。
+
+流数据通常包含应用程序或基础架构状态更新的事件。在选择架构来处理数据时,发布/订阅框架等数据分发系统的作用是有限的。消费者应用程序的“处理方式”超出了发布/订阅系统的范围。这让开发人员的管理变得极具复杂性。所谓的流处理器是一种特殊的订阅者,可以动态分析数据并将结果返回给同一个服务端。
+
+### Apache Spark
+
+[Apache Spark][2] 是用于大规模数据处理的统一分析引擎。通常将 Apache Spark Streaming 用作流处理器,例如给机器学习模型提供新数据。Spark Streaming 将数据分成小批量,每个小批量都由 Spark 模型或其他系统独立分析。事件流可以被分组成小批量以进行分析,但流处理器本身必须具有弹性:
+
+ * 流处理器必须能够根据数据速率进行扩展,甚至要能够跨越服务器和云,并且还可以跨实例实现负载均衡,以确保弹性和其他应用层的需求。
+ * 它必须能够分析来自不同来源的数据,这些数据源的报告速率可能相差很大。这意味着它必须是有状态的,或者将状态存储在数据库中。当使用 Spark Streaming 作为流处理器时,通常会使用后一种方法,这种方法在需要超低延迟响应时可能会存在性能问题。
+
+相关项目 [Apache Samza][3] 也提供了一种处理实时事件流的方法,并使用 [Hadoop Yarn][4] 或 [Apache Mesos][5] 来管理计算资源,以便进行弹性扩展。
+
+### 解决数据扩展问题
+
+需要注意的是,即使是 Samza 也不能完全减轻开发人员的数据处理需求。扩展数据规模意味着处理事件的任务需要跨多个实例进行负载均衡,而使用数据库是实例间共享结果应用层状态的唯一方法。然而,当应用程序任务之间的状态协调转移到数据库时,对性能会产生不可避免的连锁反应。此外,数据库的选择也至关重要。随着系统的扩展,数据库的集群管理会成为下一个潜在的瓶颈。
+
+这个问题可以通过有状态、有弹性的替代方案来解决,并且这样的解决方案可以用来代替流处理器。在应用程序级别(容器或实例内),这些解决方案依据流的更新,动态构建并发、互连的“web 代理”的有状态模型。代理是并发的“微服务”,它们消费单一来源的原始数据并维护它们的状态。基于数据中发现的源之间的真实关系(如包含和临近),代理实现互连以共享状态。代理也因此形成了一个并发服务图,可以分析它们自己的状态和链接到的代理的状态。数据源将原始数据转换为状态,并根据自身及其链接子图的变化进行分析、学习和预测,每个代理都为单个这样的数据源提供微服务。
+
+这些解决方案允许大量的代理(真实数据源的数字类比)分布,甚至还有在应用层使代理互连的分布式图,从而简化了应用架构。这是因为代理之间互连的本质,是映射到解决方案的当前运行时执行实例和代理本身的 URL。通过这种方式,应用程序可以跨实例无缝扩展,而无需担心 DevOps 问题。代理消费数据并维护状态,还会计算自己和其他代理的状态。由于代理是有状态的,因此不需要数据库,并且数据洞察是以内存速度计算的。
+
+### 使用开源阅读数据世界
+
+我们查看数据的方式正在发生翻天覆地的变化:不再将数据库用作记录系统,取而代之的是现实世界,现实世界事物的数字类比可以不断地传输它们的状态。幸运的是,开源社区在处理实时事件的项目丰富度方面处于领先地位。从发布/订阅模式(其中最活跃的社区是 Apache Kafka、Pulsar 和 CNCF NATS)到持续处理流数据的分析框架,包括 Apache Spark、[Flink][6]、[Beam][7]、Samza,以及 Apache 许可的 [SwimOS][8] 和 [Hazelcast][9],对开发人员来说,可选择项目非常之多。可以说,没有什么地方比开源社区的专有软件框架更多了。试看软件的未来,必是开源的天下。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/20/2/real-time-data-processing
+
+作者:[Simon Crosby][a]
+选题:[lujun9972][b]
+译者:[unigeorge](https://github.com/unigeorge)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/simon-crosby
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/clocks_time.png?itok=_ID09GDk (Alarm clocks with different time)
+[2]: https://spark.apache.org/
+[3]: https://samza.apache.org/
+[4]: https://hadoop.apache.org/
+[5]: http://mesos.apache.org/
+[6]: https://flink.apache.org/
+[7]: https://beam.apache.org
+[8]: https://github.com/swimos/swim
+[9]: https://hazelcast.com/
diff --git a/published/202110/20200504 Define and optimize data partitions in Apache Cassandra.md b/published/202110/20200504 Define and optimize data partitions in Apache Cassandra.md
new file mode 100644
index 0000000000..2d5c833852
--- /dev/null
+++ b/published/202110/20200504 Define and optimize data partitions in Apache Cassandra.md
@@ -0,0 +1,141 @@
+[#]: collector: (lujun9972)
+[#]: translator: (unigeorge)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13908-1.html)
+[#]: subject: (Define and optimize data partitions in Apache Cassandra)
+[#]: via: (https://opensource.com/article/20/5/apache-cassandra)
+[#]: author: (Anil Inamdar https://opensource.com/users/anil-inamdar)
+
+在 Apache Cassandra 中定义和优化数据分区
+======
+
+> 速度和可扩展性是 Apache Cassandra 不变的追求;来学习一下如何充分发挥它的专长吧。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/22/103651gse3iyiajyaagk34.jpg)
+
+Apache Cassandra 是一个数据库,但又不是一个简单的数据库;它是一个复制数据库,专为可扩展性、高可用性、低延迟和良好性能而设计调整。Cassandra 可以帮你的数据在区域性中断、硬件故障时,以及很多管理员认为数据量过多的情况下幸免于难。
+
+全面掌握数据分区知识,你就能让 Cassandra 集群实现良好的设计、极高的性能和可扩展性。在本文中,我将探究如何定义分区,Cassandra 如何使用这些分区,以及一些你应该了解的最佳实践方案和已知问题。
+
+基本概念是这样的: 供数据库关键函数(如数据分发、复制和索引化)使用的原子单元,单个这样的数据块就是一个分区。分布式数据系统通常会把传入的数据分配到这些分区中,使用简单的数学函数(例如 identity 或 hashing 函数)执行分区过程,并用得到的 “分区键” 对数据分组,进一步再形成分区。例如,假设传入数据是服务器日志,使用 “identity” 分区函数和每个日志的时间戳(四舍五入到小时值)作为分区键,我们可以对这些数据进行分区,实现每个分区各保存一小时的日志的目的。
+
+### Cassandra 中的数据分区
+
+Cassandra 作为分布式系统运行,并且符合前述数据分区原则。使用 Cassandra,数据分区依赖于在集群级别配置的算法和在表级别配置的分区键。
+
+![Cassandra data partition][2]
+
+Cassandra 查询语言(CQL)使用大家很熟悉的 SQL 表、行、列等术语。在上面的示例图中,表配置的主键中包含了分区键,具体格式为:主键 = 分区键 + [聚簇列] 。
+
+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 通过查看表中的分区键来执行这些读取和写入操作,并使用令牌(一个 $-2^{63}$ 到 $+2^{63}-1$ 范围内的 long 类型值)来进行数据分布和索引。这些令牌通过分区器映射到分区键,分区器使用了将分区键转换为令牌的分区函数。通过这种令牌机制,Cassandra 集群的每个节点都拥有一组数据分区。然后分区键在每个节点上启用数据索引。
+
+![Cassandra cluster with 3 nodes and token-based ownership][3]
+
+图中显示了一个三节点的 Cassandra 集群以及相应的令牌范围分配。这只是一个简单的示意图:具体实现过程使用了 [Vnodes][4]。
+
+### 数据分区对 Cassandra 集群的影响
+
+用心的分区键设计对于实现用例的理想分区大小至关重要。合理的分区可以实现均匀的数据分布和强大的 I/O 性能。分区大小对 Cassandra 集群有若干需要注意的影响:
+
+ * 读取性能 —— 为了在磁盘上的 SSTables 文件中找到分区,Cassandra 使用缓存、索引和索引摘要等数据结构。过大的分区会降低这些数据结构的维护效率,从而对性能产生负面影响。Cassandra 新版本在这方面取得了长足的进步:特别是 3.6 及其以上版本的 Cassandra 引擎引入了存储改进,针对大型分区,可以提供更好的性能,以及更强的应对内存问题和崩溃的弹性。
+ * 内存使用 —— 大分区会对 JVM 堆产生更大的压力,同时分区的增大也降低了垃圾收集机制的效率。
+ * Cassandra 修复 —— 大分区使 Cassandra 执行修复维护操作(通过跨副本比较数据来保持数据一致)时更加困难。
+ * “墓碑”删除 —— 听起来可能有点骇人,Cassandra 使用称为“墓碑”的独特标记来记录要删除的数据。如果没有合适的数据删除模式和压缩策略,大分区会使删除过程变得更加困难。
+
+虽然这些影响可能会让人更倾向于简单地设计能产生小分区的分区键,但数据访问模式对理想的分区大小也有很大影响(有关更多信息,请阅读关于 [Cassandra 数据建模][5] 的深入讲解)。数据访问模式可以定义为表的查询方式,包括表的所有 `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][a]
+选题:[lujun9972][b]
+译者:[unigeorge](https://github.com/unigeorge)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/anil-inamdar
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/data_metrics_analytics_desktop_laptop.png?itok=9QXd7AUr (Person standing in front of a giant computer screen with numbers, data)
+[2]: https://opensource.com/sites/default/files/uploads/apache_cassandra_1_0.png (Cassandra data partition)
+[3]: https://opensource.com/sites/default/files/uploads/apache_cassandra_2_0.png (Cassandra cluster with 3 nodes and token-based ownership)
+[4]: https://www.instaclustr.com/cassandra-vnodes-how-many-should-i-use/
+[5]: https://www.instaclustr.com/resource/6-step-guide-to-apache-cassandra-data-modelling-white-paper/
diff --git a/published/202110/20201029 Managing resources with cgroups in systemd.md b/published/202110/20201029 Managing resources with cgroups in systemd.md
new file mode 100644
index 0000000000..b897c6cd6a
--- /dev/null
+++ b/published/202110/20201029 Managing resources with cgroups in systemd.md
@@ -0,0 +1,363 @@
+[#]: collector: (lujun9972)
+[#]: translator: (YungeG)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13881-1.html)
+[#]: subject: (Managing resources with cgroups in systemd)
+[#]: via: (https://opensource.com/article/20/10/cgroups)
+[#]: author: (David Both https://opensource.com/users/dboth)
+
+在 systemd 中使用控制组管理资源
+======
+
+> 控制组可以按照应用管理资源,而不是按照组成应用的单个进程。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/14/114622by5jdu87u4vng272.jpg)
+
+作为一个系统管理员,没有事情比意外地耗尽计算资源让我更觉得沮丧。我曾不止一次填满了一个分区的所有可用磁盘空间、耗尽内存、以及没有足够的 CPU 时间在合理的时间内处理我的任务。资源管理是系统管理员最重要的工作之一。
+
+资源管理的关键是保证所有的进程能够相对公平的访问需要的系统资源。资源管理还包括确保在需要时添加内存、硬盘驱动器空间、还有 CPU 处理能力;或者在无法添加时限制资源的使用。此外,应该阻止独占系统资源的用户,无论其是否有意。
+
+系统管理员可以通过一些工具监控和管理不同的系统资源。例如,[top][2] 和类似的工具允许你监控内存、I/O、存储(磁盘、SSD 等)、网络、交换空间、CPU 的用量等。这些工具,尤其是那些以 CPU 为中心的工具,大部分基于以运行的进程为基本单位进行控制的模型。它们最多只是提供了一种方式来调整 `nice` 数字,从而修改优先级,或者杀死一个运行的进程。(要了解 `nice` 数字的信息,查看 [使用 Glances 监控 Linux 和 Windows 主机][3])。
+
+SystemV 环境中基于传统的资源管理的其他工具,由 `/etc/security/limits.conf` 文件和 `/etc/security/limits.d` 中的本地配置文件控制。资源可以按照用户或组以一种相对粗糙但实用的方式限制。可以管理的资源包括内存的各个方面、每日的总 CPU 时间、数据总量、优先级、`nice` 数字、并发登录的数量、进程数、文件大小的最大值等。
+
+### 使用控制组管理进程
+
+[systemd 和 SystemV][4] 之间的一个主要差异是管理进程的方式。SystemV 将每个进程视作一个独立的实体。systemd 将相关的进程集中到一个控制组,简写做 [cgroup][5],并将控制组作为一个整体管理系统资源。这意味着资源能够基于应用管理,而不是由组成应用的各个进程来管理。
+
+控制组的控制单元称作切片单元。切片是允许 systemd 以树状格式控制程序次序,从而简化管理的概念化。
+
+### 查看控制组
+
+我将从一些允许你查看不同类型控制组信息的命令开始。 `systemctl status ` 命令显示一个特定服务的切片信息,包括服务的切片。这个例子展示了 `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][11] 的程序。在主机运行 `systemd-cgls` 命令,留意整体的层次结构和范围单元。
+
+`systemd-cgls` 命令提供的控制组层次结构表示(以及组成控制组单元的细节),比我见过的其他任何指令都要完整。和 `ps` 命令提供的输出相比,我喜欢 `systemd-cgls` 命令更简洁的树形表示。
+
+### 来自朋友们的一点帮助
+
+介绍完这些基础知识后,我曾计划过深入研究控制组的更多细节,以及如何使用,但是我在 Opensource.com 的姐妹网站 [Enable Sysadmin][13] 上发现了一系列四篇优秀文章,由 Red Hat 公司的 [Steve Ovens][12] 所作。与其从头重写 Steve 的文章,我觉得倒不如通过链接到这些文章,利用他的控制组专业知识:
+
+ 1. [一个 Linux 系统管理员对控制组的介绍][14]
+ 2. [如何用 CPUShares 管理控制组][15]
+ 3. [用更难的方式,手动管理控制组][16]
+ 4. [用 systemd 管理控制组][17]
+
+像我一样享受这些文章并从中汲取知识吧。
+
+### 其他资源
+
+互联网上充斥着大量关于 systemd 的信息,但大部分都简短生硬、愚钝、甚至令人误解。除了本文提到的资源,下面的网页提供了关于 systemd 启动更详细可靠的信息。自从我开始这一系列的文章来反映我所做的研究以来,这个的列表已经变长了。
+
+ * Fedora 项目有一个优质实用的 [systemd 指南][18],几乎有你使用 systemd 配置、管理、维护一个 Fedora 计算机需要知道的一切。
+ * Fedora 项目还有一个好用的 [速查表][19],交叉引用了古老的 SystemV 命令和对应的 systemd 命令。
+ * [systemd.unit(5) 手册页][20] 包含了一个不错的单元文件中各个节的列表,以及这些节的配置选项和简洁的描述。
+ * Red Hat 文档包含了一个 [单元文件结构][21] 的有用描述,还有一些其他的重要信息。
+ * 要获取 systemd 的详细技术信息和创立的原因,查看 Freedesktop.org 的 [systemd 描
+述][22]。这个使我发现过的最棒页面之一,因为其中包含了许多指向其他重要准确文档的链接。
+ * Linux.com 上 “systemd 的更多乐趣” 提供了更高级的 systemd [信息和提示][23]。
+ * 查看 [systemd.resource-control(5)][24] 的手册页
+ * 查看 [_Linux 内核用户和管理员指南_][25] 中的 [控制组 v2 条目][26]。
+
+还有一系列针对系统管理员的深度技术文章,由 systemd 的设计者和主要开发者 Lennart
+Poettering 所作。这些文章写于 2010 年 4 月到 2011 年 9 月之间,但在当下仍然像当时一样有
+价值。关于 systemd 及其生态的许多其他优秀的作品都是基于这些文章的。
+
+ * [Rethinking PID 1][27]
+ * [systemd for Administrators, Part I][28]
+ * [systemd for Administrators, Part II][29]
+ * [systemd for Administrators, Part III][30]
+ * [systemd for Administrators, Part IV][31]
+ * [systemd for Administrators, Part V][32]
+ * [systemd for Administrators, Part VI][33]
+ * [systemd for Administrators, Part VII][34]
+ * [systemd for Administrators, Part VIII][35]
+ * [systemd for Administrators, Part IX][36]
+ * [systemd for Administrators, Part X][37]
+ * [systemd for Administrators, Part XI][38]
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/20/10/cgroups
+
+作者:[David Both][a]
+选题:[lujun9972][b]
+译者:[YungeG](https://github.com/YungeG)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/dboth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-concentration-focus-windows-office.png?itok=-8E2ihcF (Woman using laptop concentrating)
+[2]: https://en.wikipedia.org/wiki/Top_(software)
+[3]: https://opensource.com/article/19/11/monitoring-linux-glances
+[4]: https://opensource.com/article/20/4/systemd
+[5]: https://en.wikipedia.org/wiki/Cgroups
+[6]: mailto:user@0.service
+[7]: mailto:user@1000.service
+[8]: mailto:1.2-org.xfce.Xfconf@0.service
+[9]: mailto:1.2-ca.desrt.dconf@0.service
+[10]: mailto:1.10-org.freedesktop.problems@0.service
+[11]: https://midnight-commander.org/
+[12]: https://www.redhat.com/sysadmin/users/steve-ovens
+[13]: https://www.redhat.com/sysadmin/
+[14]: https://www.redhat.com/sysadmin/cgroups-part-one
+[15]: https://www.redhat.com/sysadmin/cgroups-part-two
+[16]: https://www.redhat.com/sysadmin/cgroups-part-three
+[17]: https://www.redhat.com/sysadmin/cgroups-part-four
+[18]: https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html
+[19]: https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet
+[20]: https://man7.org/linux/man-pages/man5/systemd.unit.5.html
+[21]: 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
+[22]: https://www.freedesktop.org/wiki/Software/systemd/
+[23]: https://www.linux.com/training-tutorials/more-systemd-fun-blame-game-and-stopping-services-prejudice/
+[24]: https://man7.org/linux/man-pages/man5/systemd.resource-control.5.html
+[25]: https://www.kernel.org/doc/html/latest/admin-guide/index.html
+[26]: https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html
+[27]: http://0pointer.de/blog/projects/systemd.html
+[28]: http://0pointer.de/blog/projects/systemd-for-admins-1.html
+[29]: http://0pointer.de/blog/projects/systemd-for-admins-2.html
+[30]: http://0pointer.de/blog/projects/systemd-for-admins-3.html
+[31]: http://0pointer.de/blog/projects/systemd-for-admins-4.html
+[32]: http://0pointer.de/blog/projects/three-levels-of-off.html
+[33]: http://0pointer.de/blog/projects/changing-roots
+[34]: http://0pointer.de/blog/projects/blame-game.html
+[35]: http://0pointer.de/blog/projects/the-new-configuration-files.html
+[36]: http://0pointer.de/blog/projects/on-etc-sysinit.html
+[37]: http://0pointer.de/blog/projects/instances.html
+[38]: http://0pointer.de/blog/projects/inetd.html
diff --git a/published/20210104 Learn Fortran by writing a -guess the number- game.md b/published/202110/20210104 Learn Fortran by writing a -guess the number- game.md
similarity index 100%
rename from published/20210104 Learn Fortran by writing a -guess the number- game.md
rename to published/202110/20210104 Learn Fortran by writing a -guess the number- game.md
diff --git a/published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md b/published/202110/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md
similarity index 100%
rename from published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md
rename to published/202110/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md
diff --git a/published/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md b/published/202110/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md
similarity index 100%
rename from published/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md
rename to published/202110/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md
diff --git a/published/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md b/published/202110/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md
similarity index 100%
rename from published/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md
rename to published/202110/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md
diff --git a/published/20210721 Run GitHub Actions on Fedora CoreOS.md b/published/202110/20210721 Run GitHub Actions on Fedora CoreOS.md
similarity index 100%
rename from published/20210721 Run GitHub Actions on Fedora CoreOS.md
rename to published/202110/20210721 Run GitHub Actions on Fedora CoreOS.md
diff --git a/published/20210728 Kernel tracing with trace-cmd.md b/published/202110/20210728 Kernel tracing with trace-cmd.md
similarity index 100%
rename from published/20210728 Kernel tracing with trace-cmd.md
rename to published/202110/20210728 Kernel tracing with trace-cmd.md
diff --git a/published/20210809 NMState- A declarative networking config tool.md b/published/202110/20210809 NMState- A declarative networking config tool.md
similarity index 100%
rename from published/20210809 NMState- A declarative networking config tool.md
rename to published/202110/20210809 NMState- A declarative networking config tool.md
diff --git a/published/20210813 Code memory safety and efficiency by example.md b/published/202110/20210813 Code memory safety and efficiency by example.md
similarity index 100%
rename from published/20210813 Code memory safety and efficiency by example.md
rename to published/202110/20210813 Code memory safety and efficiency by example.md
diff --git a/published/20210818 below- a time traveling resource monitor.md b/published/202110/20210818 below- a time traveling resource monitor.md
similarity index 100%
rename from published/20210818 below- a time traveling resource monitor.md
rename to published/202110/20210818 below- a time traveling resource monitor.md
diff --git a/published/20210907 How to use BusyBox on Linux.md b/published/202110/20210907 How to use BusyBox on Linux.md
similarity index 100%
rename from published/20210907 How to use BusyBox on Linux.md
rename to published/202110/20210907 How to use BusyBox on Linux.md
diff --git a/published/202110/20210911 Play with model trains in OpenTTD.md b/published/202110/20210911 Play with model trains in OpenTTD.md
new file mode 100644
index 0000000000..d07f1699f9
--- /dev/null
+++ b/published/202110/20210911 Play with model trains in OpenTTD.md
@@ -0,0 +1,200 @@
+[#]: subject: "Play with model trains in OpenTTD"
+[#]: via: "https://opensource.com/article/21/9/model-trains-openttd"
+[#]: author: "Seth Kenlon https://opensource.com/users/seth"
+[#]: collector: "lujun9972"
+[#]: translator: "unigeorge"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13924-1.html"
+
+在 OpenTTD 中玩模型火车
+======
+
+> 想玩实体模型火车,却没有足够大的空间?试试 OpenTTD 中的虚拟火车吧。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/27/100255emc3x33icci0cacc.jpg)
+
+我父亲一直很喜欢火车模型,我记得我小时候,曾看着他在圣诞树周围建了一整条轨道。当 [乐高][2] 火车套装发布时,因其便利性和固有可扩展性,我们转而投向了乐高火车的怀抱。多年来,我们热衷于建造和改装乐高火车及单轨轨道。我经常想象,未来我会有一个车库或地下室,专门用于微型景观和电动汽笛火车。强调一下,我沉迷于另一个爱好的可能性非常低,所以当发现 _虚拟_ 模型铁路可以为我提供相同的满足感时,我很开心。我的虚拟爱好引擎是 [OpenTTD][3],这是一款基于名为 **Transport Tycoon Deluxe** 的 90 年代老游戏的开源模拟游戏。
+
+### 安装 OpenTTD
+
+你可以在 [openttd.org/downloads][4] 下载适用于 Linux、macOS 和 Windows 的 OpenTTD。
+
+如果你正使用 Debian Linux 或其衍生产品,甚至是[在使用 Chromebook][5],你可以下载 `.deb` 包。使用 `apt` 命令安装它:
+
+```
+$ sudo apt install ./openttd*deb
+```
+
+如果你在使用其他 Linux 发行版,请下载通用安装程序,并使用 [tar 命令][6]解压缩包:
+
+```
+$ tar xvf openttd-x.yy.z-linux*.tar.xz
+```
+
+OpenTTD 已经在 Linux、macOS 和 Windows 的 [Steam][7] 中上架(Steam 是一个非开源的,但是很常见的跨平台游戏客户端)。
+
+### 启动 OpenTTD
+
+如果你安装了 OpenTTD,可以从应用程序菜单启动它。
+
+如果你是下载了通用包,可以切换到游戏目录,使用本地的 `openttd` 命令启动游戏:
+
+```
+$ cd openttd*
+$ ./openttd &
+```
+
+首次启动 OpenTTD 时,游戏会提示必须下载图像集,在 Steam 版中会自动安装,但在独立应用程序中需要单击一下鼠标。无论如何,因为 OpenTTD 是开源的,经过了很好的改进,所以在默认图像之外,你最终还会下载的还有很多其他图像。
+
+下载图像集后,你会看到一个古色古香的小型界面。我觉得 640x480 的界面有点小,虽然旧图像界面确实更有年代感(那时计算能力还比较弱),但一些适配现代屏幕的轻度升级还是很好用的。因此,你的第一步操作就是点击“检查在线内容”按钮。
+
+### 加载模组
+
+“内容下载”界面是一个查看已通过审查的 OpenTTD 模组的窗口,可以提供个性化的改进图像界面、全新音乐、火车模型和地图名称。我使用了新西兰全套配置,所以对我来说,生成的所有城市都很熟悉,尽管 2020 年我转而开始使用“辐射 3”套装了。模组 _非常多_,可以使用右上角的搜索栏来缩小选择范围。
+
+下面是一些个人认为必备的模组:
+
+ * **abase** - 高分辨率图像。将近 300 MB,这可能是你玩此游戏需要的最大一次下载(游戏本身只有 50 MB)。
+ * **OpenSFX** - 一个声音合集。让你能听到城市中的交通声、船运的喇叭声以及很棒的火车汽笛声。
+ * **Town names** - 城镇名称。默认的城市名称很有趣,但我认为记一些本地化的名称更容易。
+ * **Trains** - 火车模组。OpenTTD 有一组运行良好的默认火车模型,但如果你已经是一名火车观察员,那你可能会喜欢下载一些额外的火车模型。我使用的是 NZR 火车合集,但还有很多火车也是可用的,包括来自英国、美国、奥地利、比利时、捷克共和国的车,以及按字母表顺序排列的许多其他火车。
+ * **Beginner tutorial** - 新手教程。是一个帮你学习游戏及界面的引导场景。
+
+### 游戏引擎默认值
+
+下载新素材后,你需要将它们设置为默认值。有两个设置的地方:游戏引擎默认值、游戏内脚本与素材。
+
+![OpenTTD main menu][8]
+
+*OpenTTD 菜单(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+单击“游戏选项”按钮。 在游戏选项屏幕中,调整以下设置:
+
+ * 将屏幕分辨率设置为你喜欢的界面尺寸。
+ * 将基础图像集 设置为 **abase**。
+ * 将基础声音设置设置为 **OpenSFX**。
+
+关闭游戏选项屏幕。你的改动会自动保存。
+
+### 游戏选项
+
+在主菜单界面,单击“NewGRF 设置”按钮。
+
+![NewGRF settings window][10]
+
+*NewGRF 设置菜单(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+未活动的模组显示在 NewGRF 设置窗口的下半部分。要激活一个未活动的模组,请选择它并单击左下角的“添加”按钮。选择要激活的模组后,再单击“应用”按钮。
+
+### 教程
+
+如果你下载了“初学者教程”场景,可以通过它来学习 OpenTTD。开始教程请单击主菜单屏幕顶部附近的“播放场景” 按钮,然后选择该教程并开始。
+
+初学者教程有着游戏界面的完整浏览流程,全部完成需要花费一些时间。
+
+### 快速开始
+
+现在我们快速介绍一下,此处你要了解以下内容:车辆出自仓库,一切活动都需要时间表。记住这两条规则,你可以立即开始建造火车(以及道路、海港和机场)。
+
+#### 建造车站
+
+要在两个城市之间建立一条简单的铁路线,请单击顶部图标栏中的铁路轨道图标。
+
+![New icon bar - railway option][11]
+
+*新建图标栏——铁路选项(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+铁路以车站开始和结束,所以我通常在预定线路的两端各放置一个车站。单击火车站图标(将鼠标悬停在其上方可查看其标签)。一个火车站要服务于一个地区,其作用范围必须与该地区尽量多地重叠。要查看车站的覆盖范围,请通过单击车站对话框底部的“开启”按钮以启用覆盖区域高亮功能。
+
+![Station coverage window][12]
+
+*车站覆盖信息窗口(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+黑色网格表示覆盖范围,而白色网格显示车站的物理占据范围。当你将鼠标悬停在一个区域上时,车站的覆盖范围所需耗材会在弹出窗口中列出。从简单的开始,创建一个单轨 4 辆车的站台。在地图上的两个城市之间重复执行此操作两次。
+
+![create station menu][13]
+
+*创建车站菜单(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+### 铺设铁轨
+
+接下来,用铁轨连接车站。 OpenTTD 的等距视图需要一些时间来适应,但是在单击铁路图标并在地图上单击拖动之后,你就开始大概有所了解了。X-rail 图标提供了“自动轨道”模式,该模式会根据用户单击的方块位置对齐轨道。
+
+铺设导轨时要细心。OpenTTD 是不可撤回的,所以一旦点击一个正方形,轨道就会被构造出来。你必须使用炸药图标来移除导轨。和现实生活中一样,没有撤消按钮。
+
+### 火车车库
+
+火车来自车库。因此,要在铁路上添加火车,必须在沿线的某处添加一个车库。单击车库图标并在现有铁路附近放置。将车库连接到现有轨道,以确保你的火车可以从车库到达适当线路的(在此简单示例中,线路是唯一的)。
+
+![create depot menu][14]
+
+*建造车库菜单(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+### 模型火车
+
+终于,你可以将虚拟模型火车添加到虚拟铁路中了。要创建火车,请单击车库。
+
+单击站点窗口底部的“新建车辆”按钮,会列出可用的火车引擎和汽车。列表会部分取决于你从可下载内容中添加的模型。一般来说,发动机分为三种:蒸汽发动机、柴油发动机和电动发动机。游戏内时间从 1950 年开始,所以早期你只有蒸汽可选。随着时间推进,你会获得可用于升级的创新型新模型。
+
+![create train menu][15]
+
+*创建火车菜单(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+现在创建一个简单的火车,其中包括一节引擎、一节客车和一节邮车。如果想添加其他类型的车厢,请单击站点以确认它们的可提供车型(由其覆盖区域决定)
+
+### 创建火车时刻表
+
+现在有了铁路和火车,还需要创建一个火车时刻表。时间表与车辆关联,因此无论何时添加新车,都要记得添加时间表,以让新车投入使用。
+
+要为火车添加时刻表,请单击其车库列表中列车左侧的编号。这样可以打开火车视口,窗口右侧会有按钮。单击箭头图标即可查看该列车的时刻表。
+
+![create schedule menu][16]
+
+*创建时刻表菜单(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+要创建时间表,请单击时间表窗口底部的“前往”按钮,然后单击要设置成第一个目的地的车站。然后点击下一站。你可以在时间表中选择一个停靠点,浏览“满载”和“卸载”下拉菜单中的选项,以此调整装卸要求,并且可以在“无停靠”下拉菜单中调整路线(如果开发了新路线)。选项有很多,随着城市发展和地图完善,你可能需要随时调整策略。
+
+但是现在,单击火车视口底部的红色“已停止”按钮,让火车投入使用吧!
+
+![train moving from station to station][17]
+
+*在役中的火车(Seth Kenlon, [CC BY-SA 4.0][9])*
+
+### 试试 OpenTTD 吧
+
+OpenTTD 是一个模拟器,同时也是一个游戏,所以确实会有一些限制,比如你可能想要优化的预算和参数。例如,你可以单击一个城市、农场或工厂,了解其可接受的进出口类型。你可以通过单击 OpenTTD 窗口右下角的预算按钮来借钱。它不仅仅是一个虚拟的火车集合游戏。你还可以建造道路、机场、海港等。记得所有车辆都需要车库和时间表,你就在实现虚拟企业的路上成功了一半。
+
+OpenTTD 有着活跃而热情的社区,以及[详细的维基][18],并且有大量的资源和教程在线可用。下载游戏并试试吧!
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/9/model-trains-openttd
+
+作者:[Seth Kenlon][a]
+选题:[lujun9972][b]
+译者:[unigeorge](https://github.com/unigeorge)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/train-plane-speed-big-machine.png?itok=f377dXKs (Old train)
+[2]: https://opensource.com/article/20/6/open-source-virtual-lego
+[3]: http://openttd.org
+[4]: https://www.openttd.org/downloads/openttd-releases/latest.html
+[5]: https://opensource.com/article/21/2/chromebook-linux
+[6]: https://opensource.com/article/17/7/how-unzip-targz-file
+[7]: https://store.steampowered.com/app/1536610/OpenTTD/
+[8]: https://opensource.com/sites/default/files/openttd-menu.jpg (OpenTTD menu)
+[9]: https://creativecommons.org/licenses/by-sa/4.0/
+[10]: https://opensource.com/sites/default/files/openttd-newgrf.jpg (The NewGRF settings menu)
+[11]: https://opensource.com/sites/default/files/openttd-iconbar-railway.jpg (The new icon bar - railway option)
+[12]: https://opensource.com/sites/default/files/openttd-window-station.jpg (Station coverage information window)
+[13]: https://opensource.com/sites/default/files/openttd-create-station.jpg (The create station menu)
+[14]: https://opensource.com/sites/default/files/openttd-create-depot.jpg (Create depot menu)
+[15]: https://opensource.com/sites/default/files/openttd-create-train.jpg (The create train menu)
+[16]: https://opensource.com/sites/default/files/openttd-create-schedule.png (The create schedule menu)
+[17]: https://opensource.com/sites/default/files/openttd-train.jpg (Train in service)
+[18]: https://wiki.openttd.org/en/
diff --git a/published/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md b/published/202110/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md
similarity index 100%
rename from published/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md
rename to published/202110/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md
diff --git a/translated/tech/20210923 Build your website with Jekyll.md b/published/202110/20210923 Build your website with Jekyll.md
similarity index 51%
rename from translated/tech/20210923 Build your website with Jekyll.md
rename to published/202110/20210923 Build your website with Jekyll.md
index b46e6f1a6f..b0b5ccd10d 100644
--- a/translated/tech/20210923 Build your website with Jekyll.md
+++ b/published/202110/20210923 Build your website with Jekyll.md
@@ -3,44 +3,45 @@
[#]: author: "Ayush Sharma https://opensource.com/users/ayushsharma"
[#]: collector: "lujun9972"
[#]: translator: "perfiffer"
-[#]: reviewer: " "
-[#]: publisher: " "
-[#]: url: " "
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13875-1.html"
使用 Jekyll 构建你的网站
======
-Jekyll 是一个开源的静态的网站生成器。你可以使用 Markdown 编写内容,使用 HTML/CSS 来构建和展示,Jekyll 会将其编译为静态的 HTML。
-![Person using a laptop][1]
-静态网站生成器和 JAMStack 近年来开始流行。而且理由很充分。不需要复杂的后端,只需要静态的 HTML、CSS 和 Javascript。没有后端意味着更好的安全性、更低的运营开销和更便宜的托管。双赢!
+> Jekyll 是一个开源的静态网站生成器。你可以使用 Markdown 编写内容,使用 HTML/CSS 来构建和展示,Jekyll 会将其编译为静态的 HTML。
-在本文中,我将讨论 Jekyll。在撰写本文时,[我的个人网站使用 Jekyll][2]。Jekyll 使用 Ruby 引擎将用 Markdown 编写的文章转换成 HTML。[Sass][3] 可以将复杂的 CSS 规则应用到平面文件中。[Liquid][4] 允许对静态内容进行编程控制。
+![](https://img.linux.net.cn/data/attachment/album/202110/12/145349rblj459naj74j5nr.jpg)
+
+近年来开始流行静态网站生成器和 JAMStack,而且理由很充分,它们不需要复杂的后端,只需要静态的 HTML、CSS 和 Javascript。没有后端意味着更好的安全性、更低的运营开销和更便宜的托管。双赢!
+
+在本文中,我将讨论 Jekyll。在撰写本文时,[我的个人网站使用的是 Jekyll][2]。Jekyll 使用 Ruby 引擎将用 Markdown 编写的文章转换成 HTML。[Sass][3] 可以将复杂的 CSS 规则应用到普通文本文件中。[Liquid][4] 允许对静态内容进行编程控制。
### 安装 Jekyll
-[Jekyll 网站][5] 提供 Linux、MacOS 和 Windows 安装说明。安装完成之后,[快速引导][6] 将会安装一个基础的 Hello-World 项目。
+[Jekyll 网站][5] 提供了 Linux、MacOS 和 Windows 安装说明。安装完成之后,[快速引导][6] 将会安装一个基础的 Hello-World 项目。
-现在在你的浏览器访问 `http://localhost:4000`。你可以看到一个默认的很棒的博客。
+现在在你的浏览器访问 `http://localhost:4000`,你可以看到你的默认“真棒”博客。
![Default "awesome" blog][7]
### 目录结构
-站点默认包含以下的文件和文件夹:
+这个默认站点包含以下的文件和文件夹:
- * `_posts`: 你的博客条目。
- * `_site`: 最终编译的静态网站文件。
- * `about.markdown`: 关于页面内容。
- * `index.markdown`: 主页页面内容。
- * `404.html`: 404 页面内容。
+ * `_posts`: 你的博客文章。
+ * `_site`: 最终编译成的静态网站文件。
+ * `about.markdown`: “关于页”的内容。
+ * `index.markdown`: “主页”的内容。
+ * `404.html`: “404 页”的内容。
* `_config.yml`: Jekyll 的全站配置文件。
-
-### 创建新的博客条目
+### 创建新的博客帖子
创建帖子很简单。你需要做的就是在 `_post` 目录下使用正确的格式和扩展名创建一个新文件,这样就完成了。
-有效的文件名像 `2021-08-29-welcome-to-jekyll.markdown`这样。一个博客文件必须包含 Jekyll 所称的 YAML 前置。它是包含元数据的文件开头的一个特殊部分。如果你看到默认的帖子,你可以看到以下内容:
+有效的文件名像 `2021-08-29-welcome-to-jekyll.markdown` 这样。一个博客文件必须包含 Jekyll 所谓的 YAML 卷首块。它是文件开头的一个包含元数据的特殊部分。如果你查看默认的帖子,你可以看到以下内容:
```
---
@@ -51,7 +52,7 @@ categories: jekyll update
---
```
-Jekyll 使用上面的元数据,你可以自定义 `key: value` 键值对。如果你需要一些灵感,[请查看我的网站前置内容][9]。除了前面的问题,你还可以[使用内置的 Jekyll 变量][10] 来自定义你的网站。
+Jekyll 会使用上面的元数据,你也可以自定义 `key: value` 键值对。如果你需要一些提示,[请查看我的网站的卷首][9]。除了前面的问题,你还可以 [使用内置的 Jekyll 变量][10] 来自定义你的网站。
让我们创建一个新的帖子。在 `_posts` 文件夹下创建 `2021-08-29-ayushsharma.markdown`。内容如下:
@@ -73,11 +74,11 @@ This is a [link]()
This is my category:
```
-如果 `jekyll serve` 命令仍在运行,刷新页面,你将看到下面的新条目。
+如果 `jekyll serve` 命令仍在运行,刷新页面,你将看到下面的新帖子。
![New blog entry][11]
-恭喜你创建了你的第一篇文章!这个过程看起来很简单,但是你可以通过 Jekyll 做很多事情。使用简单的 Markdown,你可以归档博客、代码片段的高亮显示以及帖子的分类管理。
+恭喜你创建了你的第一篇帖子!这个过程看起来很简单,但是你可以通过 Jekyll 做很多事情。使用简单的 Markdown,你可以归档博客、高亮显示代码片段以及分类管理帖子。
### 草稿
@@ -85,17 +86,17 @@ This is my category:
### 布局和包含
-请注意 `_post` 文件夹中两篇文章的前面内容,你将在前置内容中看到 `layout: post`。`_layout` 文件夹中包含所有布局。你不会在源代码中找到它们,因为 Jekyll 默认加载它们。Jekyll 使用的默认源代码在[这里][12]。如果你点击链接,你可以看到博客布局使用默认布局。默认布局包含 `{{ content }}` 注入内容的代码。布局文件还将包含 `include` 指令。它们从[包含文件夹][14]加载文件并允许使用不同的组件组成页面。
+请注意 `_post` 文件夹中两篇文章的卷首块,你将在其中看到 `layout: post`。`_layout` 文件夹中包含所有布局。你不会在源代码中找到它们,因为 Jekyll 默认加载它们。Jekyll 使用的默认源代码在 [这里][12]。如果你点击该链接,你可以看到 `post` 的布局使用了默认(`default`)布局。默认布局包含的代码 `{{ content }}` 是注入内容的地方。布局文件还将包含 `include` 指令。它们从 [`include` 文件夹][14] 加载文件,并使用不同的组件组成页面。
-总的来说,这就是布局的工作方式-你在最前面定义它们并将你的内容注入其中。Includes 提供页面的其它部分以组成整个页面。这是一种标准的网页设计技术--定义页眉、页脚、旁白和内容元素,然后在其中注入内容。这就是静态站点生成器的真正威力--完全以编程的方式控制将你的网站组装起来并最终编译成静态的 HTML。
+总的来说,这就是布局的工作方式:你在卷首块定义它们并将你的内容注入其中。而包含则提供了页面的其它部分以组成整个页面。这是一种标准的网页设计技术:定义页眉、页脚、旁白和内容元素,然后在其中注入内容。这就是静态站点生成器的真正威力,完全以编程的方式控制,将你的网站组装起来并最终编译成静态的 HTML。
### 页面
-你网站上的所有内容并不都是文章或博客。你将需要关于页面、联系页面、项目页面或投资组合页面。这就是 Pages 的用武之地。它们的工作方式与 Posts 完全一样,这意味着它们是带有前置块的 Markdown 文件。但它们不会进入 `_posts` 目录。它们要么保留在你的项目根目录中,要么保留在它们自己的文件夹中。对于布局和包含,你可以使用与帖子相同的布局或创建新帖子。 Jekyll 非常灵活,你可以随心所欲地发挥你的创意!你的默认博客已经有 `index.markdown` 和 `about.markdown`。随意自定义它们。
+你网站上的所有内容并不都是文章或博客。你需要“关于”页面、“联系”页面、“项目”页面或“作品”页面。这就是“页面”的用武之地。它们的工作方式与“帖子”完全一样,这意味着它们是带有卷首块的 Markdown 文件。但它们不会放到 `_posts` 目录。它们要么保留在你的项目根目录中,要么保留在它们自己的文件夹中。对于布局和包含,你可以使用与帖子相同的布局或创建新帖子。 Jekyll 非常灵活,你可以随心所欲地发挥你的创意!你的默认博客已经有 `index.markdown` 和 `about.markdown`。请随意自定义它们。
### 数据文件
-数据文件位于 `_data` 目录中,可以是 `.yml`,`.json`,`.csv` 格式文件。例如,一个 `_data/members.yml` 文件可能包含:
+数据文件位于 `_data` 目录中,可以是 `.yml`、`.json`、`.csv` 等格式的文件。例如,一个 `_data/members.yml` 文件可能包含:
```
- name: A
@@ -110,7 +111,6 @@ This is my category:
Jekyll 在网站生成的时候读取这些内容。你可以通过 `site.data.members` 访问它们。
-
```
{ % for member in site.data.members % }
@@ -129,19 +129,15 @@ Jekyll 在网站生成的时候读取这些内容。你可以通过 `site.data.m
### 构建你最终的网站
-命令 `jekyll serve` 非常适合本地测试。但是一旦你完成了本地测试,你将需要构建要发布的最终工作。命令 `jekyll build --source source_dir --destination destination_dir` 将你的网站构建到 `_site` 文件夹中。请注意,此文件夹在每次构建之前都会被清理,所以不要将重要的东西放在那里。获得内容后,你可以将其托管在你的静态托管服务上。
+命令 `jekyll serve` 非常适合本地测试。但是一旦你完成了本地测试,你将需要构建要发布的最终工作。命令 `jekyll build --source source_dir --destination destination_dir` 将你的网站构建到 `_site` 文件夹中。请注意,此文件夹在每次构建之前都会被清理,所以不要将重要的东西放在那里。生成内容后,你可以将其托管在你的静态托管服务上。
你现在应该对 Jekyll 的功能以及主要部分的功能有一个全面的了解。如果你正在寻找灵感,官方 [JAMStack 网站上有一些很棒的例子][17]。
![Example Jekyll sites from JAMStack][18]
-快乐编码 :)
+编码快乐。
-* * *
-
-本文首发于[作者个人博客][19],经授权改编。
-
-了解 Jekyll,一个静态 HTML 文件的开源生成器,如何让运行博客变得像...
+本文首发于 [作者个人博客][19],经授权改编。
--------------------------------------------------------------------------------
@@ -150,7 +146,7 @@ via: https://opensource.com/article/21/9/build-website-jekyll
作者:[Ayush Sharma][a]
选题:[lujun9972][b]
译者:[perfiffer](https://github.com/perfiffer)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/published/20210927 Install Java from your Linux distribution-s repositories.md b/published/202110/20210927 Install Java from your Linux distribution-s repositories.md
similarity index 100%
rename from published/20210927 Install Java from your Linux distribution-s repositories.md
rename to published/202110/20210927 Install Java from your Linux distribution-s repositories.md
diff --git a/published/20210929 Dialect- An Open-Source Translation App for Linux.md b/published/202110/20210929 Dialect- An Open-Source Translation App for Linux.md
similarity index 100%
rename from published/20210929 Dialect- An Open-Source Translation App for Linux.md
rename to published/202110/20210929 Dialect- An Open-Source Translation App for Linux.md
diff --git a/published/20210929 Install Java manually on Linux.md b/published/202110/20210929 Install Java manually on Linux.md
similarity index 100%
rename from published/20210929 Install Java manually on Linux.md
rename to published/202110/20210929 Install Java manually on Linux.md
diff --git a/published/202110/20210930 How I use Ansible and anacron for automation.md b/published/202110/20210930 How I use Ansible and anacron for automation.md
new file mode 100644
index 0000000000..bde30f2bb5
--- /dev/null
+++ b/published/202110/20210930 How I use Ansible and anacron for automation.md
@@ -0,0 +1,129 @@
+[#]: subject: "How I use Ansible and anacron for automation"
+[#]: via: "https://opensource.com/article/21/9/ansible-anacron-automation"
+[#]: author: "Seth Kenlon https://opensource.com/users/seth"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13879-1.html"
+
+我如何使用 Ansible 和 anacron 实现自动化
+======
+
+> 有了 anacron,我可以把脚本和 Ansible 剧本放到合适的地方,以完成各种琐碎的任务。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/13/155036tc0c7th906cc96mm.jpg)
+
+自动化是伟大的 IT 和 DevOps 理想,但根据我的经验,可能根本不存在什么不方便的东西。有很多次,我为某些任务想出了一个很好的解决方案,我甚至会编写脚本,但我没有让它真正实现自动化,因为在我工作的机器上不存在易于自动化的基础设施。
+
+我最喜欢的简易自动化工具曾经是 cron 系统,它古老、可靠、面向用户,而且简单(除了一个我永远无法记住的调度语法之外)。然而,cron 的问题是,它假定一台电脑每天 24 小时都在工作。在错过了太多预定的备份之后,我发现了 [anacron][2],一个基于时间戳而非预定时间的 cron 系统。如果你的电脑在通常情况下运行时处于关闭状态,anacron 会确保它在电脑重新开启时运行。创建一个作业只需要简单地把一个 shell 脚本放到三个目录中:`cron.day`、`cron.weekly` 或者 `cron.monthly` (如果你想的话,你可以定义更多)。有了 anacron,我发现自己把脚本和 Ansible 剧本用在了各种琐碎的任务中,包括弹出到期和事件提醒。
+
+这是一个现代问题的简单而明显的解决方案,但如果 anacron 没有安装在电脑上,那它对我就没有用。
+
+### 用 Ansible 进行软件设置
+
+任何时候我设置一台新的计算机,无论是笔记本电脑、工作站还是服务器,我都会安装 anacron。这很简单,但是 anacron 的安装只提供了 `anacron` 命令。它并没有设置 anacron 的用户环境。所以我创建了一个 Ansible 剧本来设置用户需要什么来使用 anacron 并安装 `anacron` 命令。
+
+首先,标准的 Ansible 模板:
+
+```
+---
+- hosts: localhost
+ tasks:
+```
+
+### 用 Ansible 创建目录
+
+接下来,我创建了用于 Anacron 的目录树。你可以把它看成是一种透明的 crontab。
+
+```
+ - name: create directory tree
+ ansible.builtin.file:
+ path: "{{ item }}"
+ state: directory
+ with_items:
+ - '~/.local/etc/cron.daily'
+ - '~/.local/etc/cron.weekly'
+ - '~/.local/etc/cron.monthly'
+ - '~/.var/spool/anacron'
+```
+
+这个语法可能看起来有点奇怪,但它实际上是一个循环。`with_items:` 指令定义了四个要创建的目录,Ansible 在 `ansible.buildin.file:` 指令中为每个目录迭代一次(目录名填充了 `{{ item }}` 变量)。与 Ansible 中的一切一样,如果目录已经存在,不会有错误或冲突。
+
+### 用 Ansible 复制文件
+
+`ansible.buildin.copy` 模块将文件从一个地方复制到另一个地方。为了让它工作,我需要创建一个叫做 `anacrontab` 的文件。它不是 Ansible 剧本,所以我把它放在我的 `~/Ansible/data` 目录下,那里是我的剧本的支持文件。
+
+```
+ - name: copy anacrontab into place
+ ansible.builtin.copy:
+ src: ~/Ansible/data/anacrontab
+ dest: ~/.local/etc/anacrontab
+ mode: '0755'
+```
+
+我的 `anacrontab` 文件很简单,模仿了一些发行版默认安装在 `/etc/anacron` 中的文件:
+
+```
+SHELL=/bin/sh
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+1 0 cron.day run-parts $HOME/.local/etc/cron.daily/
+7 0 cron.wek run-parts $HOME/.local/etc/cron.weekly/
+30 0 cron.mon run-parts $HOME/.local/etc/cron.monthly/
+```
+
+### 登录时运行 anacron
+
+大多数 Linux 发行版将 anacron 配置为从 `/etc/anacron` 读取作业。我主要是作为一个普通用户使用 anacron,所以我从我的登录账号 `~/.profile` 启动 anacron。我不想让自己记住这些配置,所以我让 Ansible 来做。我使用 `ansible.buildin.lineinfile` 模块,它会在 `~/.profile` 不存在时创建它,并插入 anacron 的启动行。
+
+```
+ - name: add local anacrontab to .profile
+ ansible.builtin.lineinfile:
+ path: ~/.profile
+ regexp: '^/usr/sbin/anacron'
+ line: '/usr/sbin/anacron -t ~/.local/etc/anacrontab'
+ create: true
+```
+
+### 用 Ansible 安装 anacron
+
+对于我的大多数系统来说,`dnf` 模块可以用来安装软件包,但我的工作站运行的是 Slackware(使用 `slackpkg`),有时不同的 Linux 发行版也会进入我的收藏。`ansible.buildin.package` 模块提供了一个安装软件包的通用接口,所以我把它用在这个剧本上。幸运的是,我还没有遇到一个名为 `anacron` 的仓库不是 `anacron`,所以现在,我不必考虑软件包名称的潜在差异。
+
+这实际上是一个单独的剧本,因为软件包的安装需要权限升级,它由 `becomes: true` 指令提供。
+
+```
+- hosts: localhost
+ become: true
+ tasks:
+ - name: install anacron
+ ansible.builtin.package:
+ name: anacron
+ state: present
+```
+
+### 使用 anacron 和 Ansible 实现轻松自动化
+
+为了用 Ansible 安装 anacron,我运行该剧本:
+
+```
+$ ansible-playbook ~/Ansible/setup-anacron.yaml
+```
+
+从此,我就可以编写 shell 脚本来执行一些琐碎但重复的任务,然后把它复制到 `~/.local/etc/cron.daily`,让它每天自动运行一次(或者大约如此)。我还为诸如 [清理下载文件夹][3] 之类的任务编写了 Ansible 剧本。我把我的剧本放在 `~/Ansible` 里,这是我保存 Ansible 剧本的地方,然后在 `~/.local/etc/cron.daily` 里创建一个 shell 脚本来执行这个剧本。这很简单,不费吹灰之力,而且很快成为习惯。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/9/ansible-anacron-automation
+
+作者:[Seth Kenlon][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/seth
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/programming-code-keyboard-laptop-music-headphones.png?itok=EQZ2WKzy (Woman programming)
+[2]: https://opensource.com/article/21/2/linux-automation
+[3]: https://opensource.com/article/21/9/keep-folders-tidy-ansible
diff --git a/published/20210930 Make YAML as easy as it looks.md b/published/202110/20210930 Make YAML as easy as it looks.md
similarity index 100%
rename from published/20210930 Make YAML as easy as it looks.md
rename to published/202110/20210930 Make YAML as easy as it looks.md
diff --git a/published/202110/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md b/published/202110/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md
new file mode 100644
index 0000000000..6234cfe8b9
--- /dev/null
+++ b/published/202110/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md
@@ -0,0 +1,77 @@
+[#]: subject: "/e/ cloud is a deGoogled Alternative to Google Drive"
+[#]: via: "https://news.itsfoss.com/e-cloud/"
+[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13874-1.html"
+
+/e/ 云:一个去谷歌化的 Google Drive 替代方案
+======
+
+![](https://img.linux.net.cn/data/attachment/album/202110/12/122933awf0z9vnqdzslv1q.jpg)
+
+> /e/ 云是 e.foundation 使用 Nextcloud 等开源工具创立的,以作为 Google Drive 和 Gmail 的替代品。
+
+![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ecloud-ft.png?w=1200&ssl=1)
+
+Google Drive 是一种流行的云存储服务,在大多数情况下效果很好。
+
+然而,它可能不是最关注隐私的选择。因此,要完全控制你的数据,最好的办法是启动一个 [Nextcloud][1] 实例,存储你的基本数据,并可以访问其他协作工具。
+
+虽然这听起来不错,但不是每个人都能投入精力来创建和维护他们的实例。这就是 /e/ 云上场的时候了,它是由 [去谷歌化的安卓操作系统 /e/ 操作系统][2] 背后的同一个团队建立的。
+
+/e/ 云主要将自己定位为一个新的 Google Drive 私人替代品,并提供一个取代 Gmail 的邮箱。
+
+### /e/ 云:带有邮箱的 Nextcloud 及 OnlyOffice
+
+![][3]
+
+当你创建一个 /e/ 账户时,它会给你一个私人电子邮件地址 [xyz@e.email][4]。
+
+而且,同邮箱地址一起,你会得到 1GB 的免费 /e/ 云存储空间和一个由 Nextcloud 和 OnlyOffice 为核心的协作平台。
+
+因此,如果你想利用 Nextcloud 和 OnlyOffice 来取代谷歌的工具套件,而不需要自己全部设置,/e/ 云可以成为一个引人注目的以隐私为中心的选择。
+
+![][5]
+
+除了 OnlyOffice 的文件存储和文档支持外,你还可以使用日历,存储笔记,并添加任务。
+
+因此,它也可以成为一个正式的以隐私为中心的协作平台,你可以免费使用。
+
+如果你想要更多的存储空间,你可以将你的订阅升级到付费计划,你可以根据需要选择 20 到 1TB 的存储空间,并按月/年计费。定价计划起价低至 3 美元/月。
+
+毫无疑问,如果你在手机上使用 /e/ 操作系统或使用一个 /e/ 智能电话,这应该是一种无缝体验。
+
+但是,你也可以使用第三方邮件客户端和 Nextcloud 移动应用在任何设备上使用它。
+
+- [注册 /e/ 云][6]
+
+### 总结
+
+考虑到它相对较新,正计划增加几个功能,包括端到端加密,从 Google Drive 迁移等。
+
+你可以注册一个帐户并免费试用。
+
+对于像 /e/ 云这样以 Nextcloud 为核心的主流解决方案,除了电子邮件和协作服务外,还能帮助你安全地管理/存储文件,你觉得怎么样?
+
+--------------------------------------------------------------------------------
+
+via: https://news.itsfoss.com/e-cloud/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://news.itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/nextcloud/
+[2]: https://itsfoss.com/e-os-review/
+[3]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ecloud.png?resize=1568%2C772&ssl=1
+[4]: mailto:xyz@e.email
+[5]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ecloud-files.png?resize=1568%2C787&ssl=1
+[6]: https://e.foundation/e-email-invite/
diff --git a/published/20211001 8 reasons why I learned Core Java.md b/published/202110/20211001 8 reasons why I learned Core Java.md
similarity index 100%
rename from published/20211001 8 reasons why I learned Core Java.md
rename to published/202110/20211001 8 reasons why I learned Core Java.md
diff --git a/published/202110/20211001 How to Install Google Chrome on Debian and Kali Linux.md b/published/202110/20211001 How to Install Google Chrome on Debian and Kali Linux.md
new file mode 100644
index 0000000000..8e49872ca7
--- /dev/null
+++ b/published/202110/20211001 How to Install Google Chrome on Debian and Kali Linux.md
@@ -0,0 +1,160 @@
+[#]: subject: "How to Install Google Chrome on Debian and Kali Linux"
+[#]: via: "https://itsfoss.com/install-chrome-debian-kali-linux/"
+[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13895-1.html"
+
+如何在 Debian 和 Kali Linux 上安装 Chrome 浏览器
+======
+
+> Debian 和基于 Debian 的 Kali Linux 将 Firefox 作为默认的网页浏览器。但这并不意味着你不能在其中安装其他网页浏览器。
+
+![](https://img.linux.net.cn/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][1]
+
+你会看到下载 Chrome 的选项。
+
+![Click on the Download Chrome button][2]
+
+当你点击下载按钮时,它会给你两个下载安装文件的选项。选择写着 Debian/Ubuntu 的那个。
+
+![Download the Chrome installer file for Debian][3]
+
+**请注意,Chrome 浏览器不适用于 32 位系统。**
+
+接下来,你应该选择将文件保存到电脑中,而不是在软件中心打开进行安装。这样一来,下载的文件将被保存在下载文件夹中,而不是临时目录中。
+
+![Save the downloaded DEB file for Google Chrome][4]
+
+进入下载文件夹,右击下载的 DEB 文件,选择用 “Software Install” 打开它。
+
+![Right click on the downloaded DEB file and open with Software Install][5]
+
+它将打开软件中心,你应该看到现在安装 Chrome 浏览器的选项。点击安装按钮。
+
+![Click on the install button][6]
+
+你会被要求输入账户的密码。这是你用来登录系统的同一密码。
+
+![Enter your account’s password][7]
+
+在不到一分钟的时间里,Chrome 就会安装完毕。你现在应该看到一个删除选项,这表明软件已经安装完毕。
+
+![Chrome is now installed][8]
+
+当 Chrome 在 Debian 上安装完毕,在系统菜单中搜索它并启动它。
+
+![Start Google Chrome][9]
+
+它将要求成为你的默认浏览器,并将崩溃报告发送给谷歌。你可以取消勾选这两个选项。然后你就可以看到谷歌浏览器的窗口。
+
+![][10]
+
+如果你登录了你的谷歌账户,你应该可以在这里同步你的密码、书签和其他浏览数据。好好体验吧!
+
+还有一点,安装完 Chrome 后,你可以从系统中删除下载的 DEB 文件。不再需要它了,甚至在卸载 Chrome 时也不需要。
+
+### 方法 2:在 Debian 上从终端安装 Chrome
+
+你刚才看到的内容可以在终端中轻松实现。
+
+首先,确保你的软件包缓存已经刷新,并且你已经安装了 `wget`,用于 [在终端中从网上下载文件][11]。
+
+```
+sudo apt update && sudo apt install wget
+```
+
+接下来是下载 Chrome 的 .deb 文件。
+
+```
+wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
+```
+
+下载后,你可以用 `apt` 命令 [在终端安装 deb 文件][12],像这样:
+
+```
+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][13] 或 Debian 系统么?只要使用这个命令:
+
+```
+sudo apt update && sudo apt upgrade -y
+```
+
+### 从你的系统中卸载 Chrome
+
+即使你选择用 GUI 方法在 Debian 上安装 Chrome,你也必须使用终端来删除它。
+
+不要担心。这其实只是一个命令:
+
+```
+sudo apt purge google-chrome-stable
+```
+
+根据要求输入你的账户密码。当你输入密码时,屏幕上没有任何显示。这没关系。输入它并按回车键,确认删除。
+
+![][14]
+
+好了,就这些了。我希望你觉得这个教程有帮助。
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-chrome-debian-kali-linux/
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://www.google.com/chrome/
+[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/download-chrome-on-debian.webp?resize=800%2C344&ssl=1
+[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/downloading-google-chrome.webp?resize=800%2C512&ssl=1
+[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/save-downloaded-chrome-installer-file-debian.webp?resize=800%2C430&ssl=1
+[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/open-deb-file-with-software-install.webp?resize=800%2C419&ssl=1
+[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/installing-chrome-debian.webp?resize=800%2C408&ssl=1
+[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/enter-account-password-while-installing-deb-file.webp?resize=800%2C420&ssl=1
+[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/chrome-installed-debian.webp?resize=800%2C384&ssl=1
+[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/start-chrome-debian.webp?resize=800%2C276&ssl=1
+[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/Chrom-in-Debian.webp?resize=800%2C450&ssl=1
+[11]: https://itsfoss.com/download-files-from-linux-terminal/
+[12]: https://itsfoss.com/install-deb-files-ubuntu/
+[13]: https://linuxhandbook.com/update-kali-linux/
+[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/remove-google-chrome-ubuntu.webp?resize=800%2C450&ssl=1
diff --git a/published/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md b/published/202110/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md
similarity index 100%
rename from published/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md
rename to published/202110/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md
diff --git a/published/20211002 Monitor your Java on Linux with jconsole.md b/published/202110/20211002 Monitor your Java on Linux with jconsole.md
similarity index 100%
rename from published/20211002 Monitor your Java on Linux with jconsole.md
rename to published/202110/20211002 Monitor your Java on Linux with jconsole.md
diff --git a/published/202110/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md b/published/202110/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md
new file mode 100644
index 0000000000..792706a9e8
--- /dev/null
+++ b/published/202110/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md
@@ -0,0 +1,57 @@
+[#]: subject: "Open Source Changed Linux Otherwise It Was Done: Linus Torvalds"
+[#]: via: "https://news.itsfoss.com/open-source-changed-linux-torvalds/"
+[#]: author: "Abhishek https://news.itsfoss.com/author/root/"
+[#]: collector: "lujun9972"
+[#]: translator: "zd200572"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13890-1.html"
+
+Linus Torvalds :开源改变了 Linux, 否则它就完了
+======
+
+> Linux 本来会像其他业余项目一样被抛在后面,但开源改变了这一点。
+
+![](https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/torvalds-linux-kernel.png?w=1200&ssl=1)
+
+你可能已经知道这个故事,30 年前,芬兰学生 Linus Torvalds 开发了一个业余项目,创建了一个类 UNIX 操作系统。
+
+你不知道的是,Torvalds 认为这个业余项目已经完成了,他本想把它抛在脑后,做一些新的、有趣的项目。
+
+那么,是什么让他在这个“业余项目”上工作了 30 年呢?答案是开源。
+
+### 开源改变了 Linux
+
+在最近结束的 [北美开源峰会][1] 上,Linus Torvalds 分享了一些关于 Linux 项目过去、现在和未来的见解。
+
+当回忆起这个项目的最初情况时,[Torvalds 说][2] 他本以为会以“已完成的状态”抛下 Linux 这个项目,而去做些新的、有趣的事情。
+
+> 显然是开源改变了这一切。这个项目,如果是由我来决定,我可能会把它抛在一边,但是突然间,我开始收到各种问题,最后还有人们提交的补丁,这使得我的动力不断持续。现在 30 年过去了,这仍然是动力所在。
+
+Torvalds 还补充说,就他而言,Linux 在过去 29 年里已经完成了。以后添加的每一个其他的功能,都是其他人需要、想要或感兴趣的。
+
+许多开发人员都会遇到这种情况。你在一个项目上工作,认为它已经达到“完成”的状态了,如果这个项目没有足够的吸引力,你就会对它失去兴趣,转而去做一些“新的、有趣的”事情。实际上继续这个项目的真正动力来自用户和认可。
+
+当被问及 Linux 50 周年要做些什么时,Torvalds 说,他不认为自己在 70 岁的时候还能继续做内核编程。然后他还补充说,他也没想过自己在 50 岁还在做内核编程,但他现在却在做这个事情。
+
+> “不知何故,我不认为我 70 岁还能做内核编程。但是另一方面,几年前,我也没想到自己 50 岁还在做内核编程,所以……我们拭目以待。”
+
+我们总是愿意听 Torvalds 谈论 Linux,作为一个热心的 Linux 用户,我们还有如此多需要学习和交流的东西!
+
+来源:[The News Stack][2]
+
+--------------------------------------------------------------------------------
+
+via: https://news.itsfoss.com/open-source-changed-linux-torvalds/
+
+作者:[Abhishek][a]
+选题:[lujun9972][b]
+译者:[zd200572](https://github.com/zd200572)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://news.itsfoss.com/author/root/
+[b]: https://github.com/lujun9972
+[1]: https://events.linuxfoundation.org/open-source-summit-north-america/
+[2]: https://thenewstack.io/linus-torvalds-on-community-rust-and-linuxs-longevity/
diff --git a/published/20211005 Tools to explore BGP.md b/published/202110/20211005 Tools to explore BGP.md
similarity index 100%
rename from published/20211005 Tools to explore BGP.md
rename to published/202110/20211005 Tools to explore BGP.md
diff --git a/published/20211006 Check Java processes on Linux with the jps command.md b/published/202110/20211006 Check Java processes on Linux with the jps command.md
similarity index 100%
rename from published/20211006 Check Java processes on Linux with the jps command.md
rename to published/202110/20211006 Check Java processes on Linux with the jps command.md
diff --git a/published/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md b/published/202110/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md
similarity index 100%
rename from published/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md
rename to published/202110/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md
diff --git a/sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md b/published/202110/20211007 Rotate and archive logs with the Linux logrotate command.md
similarity index 53%
rename from sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md
rename to published/202110/20211007 Rotate and archive logs with the Linux logrotate command.md
index 007e41cd22..54fed8f9b4 100644
--- a/sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md
+++ b/published/202110/20211007 Rotate and archive logs with the Linux logrotate command.md
@@ -2,29 +2,29 @@
[#]: via: "https://opensource.com/article/21/10/linux-logrotate"
[#]: author: "Ayush Sharma https://opensource.com/users/ayushsharma"
[#]: collector: "lujun9972"
-[#]: translator: " "
-[#]: reviewer: " "
-[#]: publisher: " "
-[#]: url: " "
+[#]: translator: "perfiffer"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13909-1.html"
-Rotate and archive logs with the Linux logrotate command
+使用 logrotate 命令轮转和归档日志
======
-Keep log files fresh with this Linux command. Download the new logrotate
-cheat sheet.
-![Logs stacked up and to the right in front of a green tree forest][1]
-Logs are great for finding out what an application is doing or troubleshooting a possible problem. Almost every application we deal with generates logs, and we want the applications we develop ourselves to generate them too. The more verbose the logs, the more information we have. But left to themselves, logs can grow to an unmanageable size, and they can, in turn, become a problem of their own. So it's a good idea to keep them trimmed down, keep the ones we're going to need, and archive the rest.
+> 使用此 Linux 命令保持日志文件更新。
-### Basics
+![](https://img.linux.net.cn/data/attachment/album/202110/22/113833i6ikk4dzdm3y3hkk.jpg)
-The `logrotate` utility is excellent at managing logs. It can rotate them, compress them, email them, delete them, archive them, and start fresh ones when you need them.
+日志非常适合找出应用程序在做什么或对可能的问题进行故障排除。几乎我们处理的每个应用程序都会生成日志,我们希望我们自己开发的应用程序也生成日志。日志越详细,我们拥有的信息就越多。但放任不管,日志可能会增长到无法管理的大小,反过来,它们可能会成为它们自己的问题。因此,最好将它们进行裁剪,保留我们需要的那些,并将其余的归档。
-Running `logrotate` is pretty simple—just run `logrotate -vs state-file config-file`. In the above command, the `v` option enables verbose mode, `s` specifies a state file, and the final `config-file` mentions the configuration file, where you specify what you need done.
+### 基本功能
-### Hands-on
+`logrotate` 实用程序在管理日志方面非常出色。它可以轮转日志、压缩日志、通过电子邮件发送日志、删除日志、归档日志,并在你需要时开始记录最新的。
-Let's check out a `logrotate` configuration that is running silently on our system, managing the wealth of logs we find in the `/var/log` directory. Check out the current files in that directory. Do you see a lot of `*.[number].gz` files? That’s what `logrotate` is doing. You can find the configuration file for this under `/etc/logrotate.d/rsyslog`. Mine looks like this:
+运行 `logrotate` 非常简单——只需要运行 `logrotate -vs state-file config-file`。在上面的命令中,`v` 选项开启详细模式,`s` 指定一个状态文件,最后的 `config-file` 是配置文件,你可以指定需要做什么。
+### 实战演练
+
+让我们看看在我们的系统上静默运行的 `logrotate` 配置,它管理我们在 `/var/log` 目录中找到的大量日志。查看该目录中的当前文件。你是否看到很多 `*.[number].gz` 文件?这就是 `logrotate` 正在做的。你可以在 `/etc/logrotate.d/rsyslog` 下找到此配置文件。我的配置文件如下:
```
/var/log/syslog
@@ -36,7 +36,7 @@ Let's check out a `logrotate` configuration that is running silently on our sy
delaycompress
compress
postrotate
- reload rsyslog >/dev/null 2>&1 || true
+ reload rsyslog > /dev/null 2>&1 || true
endscript
}
@@ -62,29 +62,26 @@ Let's check out a `logrotate` configuration that is running silently on our sy
delaycompress
sharedscripts
postrotate
- reload rsyslog >/dev/null 2>&1 || true
+ reload rsyslog > /dev/null 2>&1 || true
endscript
}
```
-The file starts with defining the instructions for rotating the `/var/log/syslog` file and the instructions are contained within the curly braces that follow. Here’s what they mean:
+该文件首先定义了轮转 `/var/log/syslog` 文件的说明,这些说明包含在后面的花括号中。以下是它们的含义:
- * `rotate 7`: Keep logs from the last seven rotations. Then start deleting them.
- * `daily`: Rotate the log daily. Along with `rotate 7`, this would mean that logs would be kept for the last seven days. Other options are `weekly`, `monthly`, `yearly`. There is also a `size` parameter that will rotate log files if their size increases beyond a specified limit—for example, `size 10k`, `size 10M`, `size 10G`, etc. If nothing is specified, logs will be rotated whenever `logrotate` runs. You can even run `logrotate` in a `cron` to use it at more specific time intervals.
- * `missingok`: It’s okay if the log file is missing. Don’t Panic.
- * `notifempty`: Don’t rotate if the log file is empty.
- * `delaycompress`: If compression is on, delay compression until the next rotation. This allows at least one rotated but uncompressed file to be present. Useful if you want yesterday’s logs to stay uncompressed for troubleshooting. It is also helpful if some program might still write to the old file until it is restarted/reloaded, like Apache.
- * `compress`: Compression is on. Use `nocompress` to turn it off.
- * `postrotate/endscript`: Run the script within this section after rotation. Helpful in doing cleanup stuff. There is also a `prerotate/endscript` for doing things before rotation begins.
+ * `rotate 7`: 保留最近 7 次轮转的日志。然后开始删除超出的。
+ * `daily`: 每天轮转日志,与 `rotate 7` 一起使用,这意味着日志将保留过去 7 天。其它选项是每周、每月、每年。还有一个大小参数,如果日志文件的大小增加超过指定的限制(例如,大小 10k、大小 10M、大小 10G 等),则将轮转日志文件。如果未指定任何内容,日志将在运行 `logrotate` 时轮转。你甚至可以在 cron 中运行 `logrotate` 以便在更具体的时间间隔内使用它。
+ * `missingok`: 如果日志文件缺失也没关系。不要惊慌。
+ * `notifempty`: 日志文件为空时不轮转。
+ * `compress`: 开启压缩,使用 `nocompress` 关闭它。
+ * `delaycompress`: 如果压缩已打开,则将压缩延迟到下一次轮转。这允许至少存在一个轮转但未压缩的文件。如果你希望昨天的日志保持未压缩以便进行故障排除,那么此配置会很有用。如果某些程序在重新启动/重新加载之前可能仍然写入旧文件,这也很有帮助,例如 Apache。
+ * `postrotate/endscript`: 轮转后运行此部分中的脚本。有助于做清理工作。还有一个 `prerotate/endscript` 用于在轮转开始之前执行操作。
+你能弄清楚下一节对上面配置中提到的所有文件做了什么吗?第二节中唯一多出的参数是 `sharedscripts`,它告诉 `logrotate` 在所有日志轮转完成之前不要运行 `postrotate/endscript` 中的部分。它可以防止脚本在每一次轮转时执行,只在最后一次轮转完成时执行。
+### 看点新的东西
-Can you figure out what the next section does for all those files mentioned in the configuration above? The only additional parameter in the second section is `sharedscripts`, which tells `logrotate` to not run the section within `postrotate/endscript` until all log rotation is complete. It prevents the script from being executed for every log rotated and runs once at the end.
-
-### Something New
-
-I’m using the following configuration for dealing with Nginx access and error logs on my system.
-
+我使用下面的配置来处理我系统上的 `Nginx` 的访问和错误日志。
```
/var/log/nginx/access.log
@@ -106,15 +103,13 @@ I’m using the following configuration for dealing with Nginx access and error
}
```
-The above script can be run using:
-
+上面的脚本可以使用如下命令运行:
```
logrotate -vs state-file /tmp/logrotate
```
-Running the command for the first time gives this output:
-
+第一次运行该命令会给出以下输出:
```
reading config file /tmp/logrotate
@@ -141,8 +136,7 @@ running postrotate script
* Reloading nginx configuration nginx
```
-And running it a second time:
-
+第二次运行它:
```
reading config file /tmp/logrotate
@@ -168,8 +162,7 @@ running postrotate script
* Reloading nginx configuration nginx
```
-And running it a third time:
-
+第三次运行它:
```
reading config file /tmp/logrotate
@@ -195,8 +188,7 @@ running postrotate script
* Reloading nginx configuration nginx
```
-The contents of the state file look like this:
-
+状态文件的内容如下所示:
```
logrotate state -- version 2
@@ -204,11 +196,9 @@ logrotate state -- version 2
"/var/log/nginx/access.log" 2021-08-27-9:11:56
```
-[**Download the Linux logrotate cheat sheet.**][2]
+- [下载 Linux logrotate 备忘单][2]
-* * *
-
-_This article was originally published on the [author's personal blog][3] and has been adapted with permission._
+本文首发于[作者个人博客][3],经授权改编。
--------------------------------------------------------------------------------
@@ -216,8 +206,8 @@ via: https://opensource.com/article/21/10/linux-logrotate
作者:[Ayush Sharma][a]
选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
+译者:[perfiffer](https://github.com/perfiffer)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/translated/tech/20211008 3 new features of the latest OpenPGP.js version.md b/published/202110/20211008 3 new features of the latest OpenPGP.js version.md
similarity index 56%
rename from translated/tech/20211008 3 new features of the latest OpenPGP.js version.md
rename to published/202110/20211008 3 new features of the latest OpenPGP.js version.md
index 0fc380ce85..6f0e1851a8 100644
--- a/translated/tech/20211008 3 new features of the latest OpenPGP.js version.md
+++ b/published/202110/20211008 3 new features of the latest OpenPGP.js version.md
@@ -3,44 +3,46 @@
[#]: author: "Daniel Huigens https://opensource.com/users/twiss"
[#]: collector: "lujun9972"
[#]: translator: "geekpi"
-[#]: reviewer: " "
-[#]: publisher: " "
-[#]: url: " "
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13888-1.html"
最新 OpenPGP.js 版本的 3 个新功能
======
-OpenPGP.js 是一个实现了 OpenPGP 标准的密码学库,最常用于电子邮件加密。
-![email or newsletters via inbox and browser][1]
-[OpenPGP.js][2]是一个实现了 [OpenPGP 标准][3]的密码学库,最常用于电子邮件加密。ProtonMail、Mailvelope 和 FlowCrypt 都使用 OpenPGP.js,这仅仅是其中一些。这意味着 OpenPGP.js 库对数百万用户的信息进行了加密。
+> OpenPGP.js 是一个实现了 OpenPGP 标准的密码学库,最常用于电子邮件加密。
-OpenPGP 标准首次发布于 20 世纪 90 年代,像几乎任何东西一样,需要维护和更新,以保证安全和可用性。该标准的“加密刷新”[正在进行中][4],它增加了现代的加密算法并废除了过时的算法。为了提高可用性,各种电子邮件应用程序现在允许用户无缝加密他们的通信,用户无需管理他们的密钥或他们的联系人的密钥。
+![](https://img.linux.net.cn/data/attachment/album/202110/16/115721k1vi1ekzip1kpqkg.jpg)
-OpenPGP.js 于 2014 年首次发布,开始基于一个名为 GPG4Browsers 的早期原型,该原型基于 Herbert Hanewinkel(以及其他贡献者)的几个脚本。OpenPGP.js 的第二个版本于 2016 年发布,完全重新设计,使用 Uint8Arrays 而不是字符串(这大大增加了其性能),并在内部使用现代 ES6 模块而不是 CommonJS 模块。第 3 和第 4 版都是在 2018 年发布的,分别增加了对椭圆曲线加密法(ECC)和流媒体的支持。
+[OpenPGP.js][2] 是一个实现了 [OpenPGP 标准][3] 的密码学库,最常用于电子邮件加密。ProtonMail、Mailvelope 和 FlowCrypt 都使用 OpenPGP.js,这还仅仅是其中一些。也就是说 OpenPGP.js 库对数百万用户的信息进行了加密。
+
+OpenPGP 标准首次发布于 20 世纪 90 年代,像几乎任何东西一样,需要维护和更新,以保证安全和可用性。该标准的“加密刷新” [正在进行中][4],它增加了现代的加密算法并废除了过时的算法。为了提高可用性,各种电子邮件应用程序现在允许用户无缝加密他们的通信,用户无需管理他们的密钥或他们的联系人的密钥。
+
+OpenPGP.js 于 2014 年首次发布,开始基于一个名为 GPG4Browsers 的早期原型,该原型基于 Herbert Hanewinkel(以及其他贡献者)的几个脚本。OpenPGP.js 的第二个版本于 2016 年发布,完全重新设计,使用 Uint8Arrays 而不是字符串(这大大增加了其性能),并在内部使用现代 ES6 模块而不是 CommonJS 模块。第 3 和第 4 版都是在 2018 年发布的,分别增加了对椭圆曲线加密法(ECC)和流的支持。
我和我的团队继续在 OpenPGP.js 上工作,以确保其发展为一个易于使用的强加密库。
-### 1\. 默认的椭圆曲线加密
+### 1、默认的椭圆曲线加密
在 OpenPGP.js 第 4 版中,生成新密钥时默认使用 RSA。虽然 ECC 更快、更安全,但 Curve25519 还没有在 OpenPGP 规范中得到标准化。加密刷新草案包括了 Curve25519,并且预计它将“按原样”包含在下一版本的 OpenPGP 规范中,因此 OpenPGP.js 第 5 版现在默认使用 ECC 生成密钥。
-### 2\. 只导入你需要的模块
+### 2、只导入你需要的模块
-同样,虽然 OpenPGP.js 内部使用 ES6 模块多年,但第 4 版仍然没有发布一个合适的 ES6 模块。相反,它只发布了一个通用模块定义(UMD)模块,可以在浏览器和 Node.js 上运行。在第 5 版中,这种情况有所改变,为浏览器和 Node.js 发布了单独的模块(包括 ES6 和非 ES6),使库用户更容易在所有平台上导入 OpenPGP.js ,且(当使用 ES6 模块时)只导入他们需要的部分。这在很大程度上是通过将构建系统切换到 [rollup][5] 来实现的。
+同样,虽然 OpenPGP.js 内部使用 ES6 模块多年,但第 4 版仍然没有发布一个合适的 ES6 模块。相反,它只发布了一个通用模块定义(UMD)模块,可以在浏览器和 Node.js 上运行。在第 5 版中,这种情况有所改变,为浏览器和 Node.js 发布了单独的模块(包括 ES6 和非 ES6),使库用户更容易在所有平台上导入 OpenPGP.js ,且(当使用 ES6 模块时)只导入他们需要的部分。这在很大程度上是通过将构建系统切换到 [rollup][5] 来实现的。
-### 3\. 拒绝弱加密技术
+### 3、拒绝弱加密技术
还有许多其他的安全改进。例如,1024 位 RSA 密钥、ElGamal 和 DSA 密钥被认为是不安全的,并被默认拒绝。此外,第 4 版已经默认使用 AES 加密,第 5 版现在完全默认拒绝使用较弱的算法进行加密,即使公钥声称只支持较弱的算法。相反,它假定所有的 OpenPGP 实现都支持 AES(这种情况已经存在很长时间了)。
### OpenPGP.js 的下一步是什么?
-展望未来,有一些安全方面的改进要做。用于识别公钥的密钥指纹仍然使用 SHA-1,尽管在加密技术更新中计划对此进行修复。同时,建议使用不同的方法来确定用于加密的任何公钥的真实性,例如使用提议的[网络密钥目录 (WKD)][6]标准直接从收件人的域中获取整个密钥,这已经由各种[电子邮件提供商][7]实现。WKD 支持内置于 OpenPGP.js 第 4 版,但在第 5 版中是一个单独的模块,以保持主库的精简。
+展望未来,有一些安全方面的改进要做。用于识别公钥的密钥指纹仍然使用 SHA-1,尽管在加密技术更新中计划对此进行修复。同时,建议使用不同的方法来确定用于加密的任何公钥的真实性,例如使用提议的 [网络密钥目录][6](WKD)标准直接从收件人的域中获取整个密钥,这已经由各种 [电子邮件提供商][7] 实现。WKD 支持内置于 OpenPGP.js 第 4 版,但在第 5 版中是一个单独的模块,以保持主库的精简。
-同样,当用密码而不是公钥加密信息或文件时(例如:在使用 OpenPGP 进行电子邮件加密时不常见,但在用于加密备份时更常见),密码会使用相对较弱的密钥衍生函数(KDF)转换为对称密钥。因此,建议应用在将用户的密码传递给 OpenPGP.js 之前,先通过一个强大的 KDF,如 [Argon2][8] 或 [scrypt][9]。希望加密技术的刷新会包括这些算法中的一种,以便在未来的 OpenPGP.js 版本中实现。
+同样,当用密码而不是公钥加密信息或文件时(例如:在使用 OpenPGP 进行电子邮件加密时不常见,但在用于加密备份时更常见),密码会使用相对较弱的密钥衍生函数(KDF)转换为对称密钥。因此,建议应用在将用户的密码传递给 OpenPGP.js 之前,先通过一个强大的 KDF,如 [Argon2][8] 或 [scrypt][9]。希望加密刷新草案会包括这些算法中的一种,以便在未来的 OpenPGP.js 版本中实现。
### 如何使用 OpenPGP.js 第 5 版
-不过现在,OpenPGP.js 第 5 版已经[发布][10]到 npm 仓库。如果你喜欢,可以随时试用!欢迎在 GitHub 的[讨论标签][11]中进行反馈。然而,请注意,虽然 OpenPGP.js 是一个通用的加密库,但它的主要使用情况是在需要与 OpenPGP 规范兼容的情况下(例如,在发送或接收 PGP 加密的电子邮件时)。对于其他的使用情况,不同的库可能是一个更合适或性能更好的选择。当然,总的来说,在推广任何加密技术时都要小心。
+不过现在,OpenPGP.js 第 5 版已经 [发布][10] 到 npm 仓库。如果你喜欢,可以随时试用!欢迎在 GitHub 的 [讨论版][11] 中进行反馈。然而,请注意,虽然 OpenPGP.js 是一个通用的加密库,但它的主要使用情况是在需要与 OpenPGP 规范兼容的情况下(例如,在发送或接收 PGP 加密的电子邮件时)。对于其他的使用情况,不同的库可能是一个更合适或性能更好的选择。当然,总的来说,在尝试使用任何加密技术时都要小心。
感谢阅读,这里是保护电子邮件的未来!
@@ -51,7 +53,7 @@ via: https://opensource.com/article/21/10/openpgpjs
作者:[Daniel Huigens][a]
选题:[lujun9972][b]
译者:[geekpi](https://github.com/geekpi)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/translated/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md b/published/202110/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md
similarity index 77%
rename from translated/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md
rename to published/202110/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md
index 31dd4d01c2..315ab7790f 100644
--- a/translated/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md
+++ b/published/202110/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md
@@ -3,36 +3,38 @@
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lujun9972"
[#]: translator: "imgradeone"
-[#]: reviewer: " "
-[#]: publisher: " "
-[#]: url: " "
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13877-1.html"
-如何在 Ubuntu 和其他 Linux 发行版中安装 Vivaldi 浏览器
+[初级] 如何在 Ubuntu 中安装 Vivaldi 浏览器
======
-> 您将在本篇新手教程中学习如何在 Ubuntu、Debian 及其他 Linux 发行版中安装 Vivaldi 网页浏览器,同时本教程也将介绍如何更新和卸载该软件。
+![](https://img.linux.net.cn/data/attachment/album/202110/13/142545reotvtqgqpfvmmvp.jpg)
-[Vivaldi][1] 是一款关注度逐步上升的网页浏览器。它基于 Chromium 内核,因此它拥有和 Chrome 类似的功能,但它也新增了一些其他特色功能,让这款浏览器与众不同、更为直观。
+> 你将在本篇新手教程中学习如何在 Ubuntu、Debian 及其他 Linux 发行版中安装 Vivaldi 网页浏览器,同时本教程也将介绍如何更新和卸载该软件。
-它内置了标签组、广告拦截、鼠标手势、笔记管理,甚至还有命令连锁。你甚至可以借助页面平铺来一次性浏览多个页面。当然,相比于 Chrome,Vivaldi 更加尊重你的隐私。
+[Vivaldi][1] 是一款日益流行的网页浏览器。它基于 Chromium 内核,因此它拥有和 Chrome 类似的功能,但它也新增了一些其他特色功能,让这款浏览器与众不同、更为直观。
-![页面平铺,一次性浏览多个页面][2]
+它内置了标签组、广告拦截、鼠标手势、笔记管理,甚至还有命令连锁。你甚至可以借助切分视图来一次性浏览多个页面。当然,相比于 Chrome,Vivaldi 更加尊重你的隐私。
-你可以从 [Manjaro Linux 近期使用 Vivaldi 取代 Firefox 作为部分分支的默认浏览器][3] 这件事来了解 Vivaldi 浏览器的受欢迎程度。
+![标签平铺,一次性分割浏览多个页面][2]
+
+[Manjaro Linux 近期使用 Vivaldi 取代 Firefox 作为其部分变体的默认浏览器][3],你可以从这件事来了解 Vivaldi 浏览器的受欢迎程度。
如果你想尝试一下这款浏览器的话,接下来让我告诉你,如何在 Linux 上安装 Vivaldi。你将了解到:
* 安装 Vivaldi 的 GUI 和命令行方式
- * 将 Vivaldi 更新到最新版本的提示
+ * 将 Vivaldi 更新到最新版本的技巧
* 在 Ubuntu 中卸载 Vivaldi 的方式
-> 非自由软件(Non-FOSS)警告!
+> **非自由软件警告!**
>
> Vivaldi 并非完全的开源软件。它的 UI 界面是闭源的。之所以在这里介绍这款浏览器,是因为 Vivaldi 团队正努力让该软件在 Linux 平台上可用。
-### 在 Ubuntu 中安装 Vivaldi [GUI 方式]
+### 方式 1:在 Ubuntu 中安装 Vivaldi [GUI 方式]
-好消息是,Vivaldi 提供了预先构建好的安装包,包括 Ubuntu/Debian 的 DEB 文件,以及 Fedora、Red Hat、SUSE 的 RPM 文件、
+好消息是,Vivaldi 提供了预先构建好的安装包,包括 Ubuntu/Debian 的 DEB 文件,以及 Fedora、Red Hat、SUSE 的 RPM 文件。
它支持 32 位和 64 位平台,也支持 [像树莓派之类的 ARM 设备][4]。
@@ -46,7 +48,7 @@
前往 Vivaldi 的下载页面,下载支持 Ubuntu 的 DEB 格式安装包。
-[下载 Vivaldi][6]
+- [下载 Vivaldi][6]
![下载支持 Ubuntu/Debian 的 DEB 安装包][7]
@@ -60,11 +62,11 @@
![点击安装按钮][10]
-您将需要输入系统账户的密码,输入密码授权后,Vivaldi 很快就能完成安装,随后安装按钮也变成了移除按钮。这表明 Vivaldi 已经安装完成了。
+你将需要输入系统账户的密码,输入密码授权后,Vivaldi 很快就能完成安装,随后安装按钮也变成了移除按钮。这表明 Vivaldi 已经安装完成了。
#### 第 3 步:使用 Vivaldi
-按下 Super(Windows)键打开系统菜单,搜索 Vivaldi,然后单击 Vivaldi 的图标。
+按下 `Super`(`Windows`)键打开系统菜单,搜索 Vivaldi,然后单击 Vivaldi 的图标。
![在系统菜单中搜索 Vivaldi][11]
@@ -76,7 +78,7 @@
### 方式 2:借助终端,在 Ubuntu/Debian 上安装 Vivaldi
-打开终端,确认你已经安装了用于 [在命令行下下载文件][13] 的 wget。
+打开终端,确认你已经安装了用于 [在命令行下下载文件][13] 的 `wget`。
```
sudo apt install wget
@@ -116,13 +118,13 @@ GUI 和命令行这两种方式都会在系统里添加 Vivaldi 的仓库。这
如果你不喜欢 Vivaldi 或者不再使用,你可以直接卸载。现在,如果你想 [在 Ubuntu 中卸载软件][17],你可能会想到软件中心,但软件中心不会查找到外部和第三方的软件包。
-目前你必须使用终端卸载 Vivaldi,即便你使用 GUI 方式安装。其实这也很简单,打开终端,输入以下命令:
+目前你必须使用终端卸载 Vivaldi,即便你是使用 GUI 方式安装的。其实这也很简单,打开终端,输入以下命令:
```
sudo apt remove vivaldi-stable
```
-sudo 会 [在 Ubuntu 中给予你 root 权限][18]。你需要输入当前账户的密码。输入密码时,你可能不会在屏幕上看见输入密码的痕迹。这是正常现象,直接输入密码即可,随后 Vivaldi 将被卸载。
+`sudo` 会 [在 Ubuntu 中给予你 root 权限][18]。你需要输入当前账户的密码。输入密码时,你可能不会在屏幕上看见输入密码的痕迹。这是正常现象,直接输入密码即可,随后 Vivaldi 将被卸载。
希望这篇关于如何在 Linux 安装 Vivaldi 的教程对你有用。
@@ -132,8 +134,8 @@ via: https://itsfoss.com/install-vivaldi-ubuntu-linux/
作者:[Abhishek Prakash][a]
选题:[lujun9972][b]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
+译者:[imgradeone](https://github.com/imgradeone)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/published/20211010 Best Linux Distributions Based on KDE.md b/published/202110/20211010 Best Linux Distributions Based on KDE.md
similarity index 100%
rename from published/20211010 Best Linux Distributions Based on KDE.md
rename to published/202110/20211010 Best Linux Distributions Based on KDE.md
diff --git a/published/202110/20211011 What is a hostname.md b/published/202110/20211011 What is a hostname.md
new file mode 100644
index 0000000000..7088418f1d
--- /dev/null
+++ b/published/202110/20211011 What is a hostname.md
@@ -0,0 +1,113 @@
+[#]: subject: "What is a hostname?"
+[#]: via: "https://opensource.com/article/21/10/what-hostname"
+[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13897-1.html"
+
+浅谈主机名
+======
+
+> 主机名是人类用来指代特定计算机的标签。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/19/134329lwni9tlq9h3u4f4o.jpg)
+
+计算机有网络地址,但人类通常很难记住它们。主机名是帮助人类参考特定计算机的标签。例如,你可能不会导航到 `192.168.1.4`,而是导航到 `linuxlaptop` 或 `linuxlaptop.local`。
+
+### 地址和名称
+
+所有联网的计算机(也被称为主机)都需要一个地址:一个与之相关的唯一数字,以使数据报文能够在它们之间进行正确的数据通信。这就是所谓的互联网协议(IP)地址。数字 `54.204.39.132` 是一个互联网协议第四版(IPv4)地址。较新的 IPv6 地址要长得多,像这样:`2001:0db6:3c4d:0017:0000:0000:2a2f:1a2b`。 哇!这将是很难记住的!
+
+```
+$ ip addr show
+```
+
+计算机也可以被赋予标签。被称为主机名,这些是友好的名称,便于参考。我可以把我的计算机的主机名设置为 `copperhead`。只要这个名字在网络上是唯一的,所有其他用户和计算机都可以把 `copperhead` 作为地址,而不是 IP 地址。
+
+```
+$ hostname -s
+```
+
+你可以更新你的计算机的主机名。
+
+阅读 Seth Kenlon 的文章 [如何在 Linux 上更改主机名][2],了解如何在 Linux 上这样做。
+
+#### 完全限定域名
+
+从技术上讲,主机名包括一个域名。如果我的域名是 `mycompany.com`,那么我的计算机的主机名是 `copperhead.mycompany.com`,以句点分隔。这就形成了一个完全限定域名(FQDN)。这很重要,因为 IP 地址可以解析为 FQDN。
+
+```
+host.domain.topleveldomain
+```
+
+例如:`www.example.com` 是一个完全限定域名。
+
+你的域名一般已经确定了,所以你只负责提供主机部分。本文的重点是主机。
+
+#### 名称解析
+
+将 IP 地址转换为相应的主机名的过程被称为名称解析。这个过程首先发生在本地主机表中。Linux 使用文件 `/etc/hosts` 来存储这个表。
+
+```
+cat /etc/hosts
+```
+
+还有一个分层的、去中心化的基于网络的系统提供解析,称为域名系统(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`。因此,虽然这些名字看起来不长,但在这个项目上工作的人可以很容易地识别它们的目的和位置,而且这个名字甚至可以对潜在的恶意者混淆它们的用途。换句话说,业主可以选择只对内部人员有意义的命名方式
+
+### 互联网标准
+
+有几个标准管理着主机名。你可以在互联网工程任务组(IETF)维护的意见征求(RFC)中找到这些标准。由此,请遵守以下规定:
+
+ * 主机名的长度应该在 1 到 63 个 ASCII 字符之间
+ * 一个 FQDN 的最大长度为 253 个 ASCII 字符
+ * 不区分大小写
+ * 允许的字符:`a` 到 `z`,`0` 到 `9`,`-`(连字符),和 `_`(下划线)。
+
+我希望这篇文章能帮助你澄清主机名。玩得开心,发挥创意。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/10/what-hostname
+
+作者:[Alan Formy-Duval][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/alanfdoss
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_screen_windows_files.png?itok=kLTeQUbY (Computer screen with files or windows open)
+[2]: https://opensource.com/article/21/10/how-change-hostname-linux
diff --git a/published/202110/20211012 Seahorse- Manage Your Passwords - Encryption Keys in Linux.md b/published/202110/20211012 Seahorse- Manage Your Passwords - Encryption Keys in Linux.md
new file mode 100644
index 0000000000..744568a383
--- /dev/null
+++ b/published/202110/20211012 Seahorse- Manage Your Passwords - Encryption Keys in Linux.md
@@ -0,0 +1,92 @@
+[#]: subject: "Seahorse: Manage Your Passwords & Encryption Keys in Linux"
+[#]: via: "https://itsfoss.com/seahorse/"
+[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13884-1.html"
+
+Seahorse:在 Linux 中管理你的密码和加密密钥
+======
+
+![](https://img.linux.net.cn/data/attachment/album/202110/15/120409ltfmw33c5xpw5bcx.jpg)
+
+> Seahorse 是一个简洁的开源密码和加密密钥管理器,让我们来探讨一下它的功能和如何安装它。
+
+我们经常倾向于忽视许多默认/预装的应用,尤其是在内置了大量工具和实用程序时。
+
+你可以在各种 Linux 发行版上使用的这样一个有用的工具是 **GNOME 的 Seahorse**。
+
+### Seahorse:GNOME 的密码及加密密钥管理器
+
+![][1]
+
+主要来说,Seahorse 是一个预装在 GNOME 桌面的应用,并为其量身定做。
+
+然而,你可以在你选择的任何 Linux 发行版上使用它。它是一个简单而有效的工具,可以在本地管理你的密码和加密密钥/钥匙环。
+
+如果你是第一次使用,你可能想读一下 [Linux 中钥匙环的概念][2]。
+
+如果你不喜欢基于云的密码管理器,Seahorse 可以很好地解决你的要求。尽管它看起来很简单,但有几个基本功能你可能会觉得很有用。
+
+当然,如果你的不太涉及管理加密密钥(或本地存储),你也应该探索一些 [可用于 Linux 的最佳密码管理器][3] 。
+
+### Seahorse 的特点
+
+虽然你可以很容易地把它作为一个本地(离线)密码管理器,但在处理加密密钥时,你也可以用 Seahorse 做一些事情来加强你的安全管理。
+
+![][4]
+
+一些关键的亮点是:
+
+ * 能够存储 SSH 密钥(用于访问远程计算机/服务器)
+ * 存储用于保护电子邮件和文件的 GPG 密钥
+ * 支持为应用和网络添加密码钥匙环
+ * 安全地存储证书的私钥
+ * 存储一个密码/密语
+ * 能够导入文件并快速存储它们
+ * 查找远程密钥
+ * 同步和发布密钥
+ * 能够查找/复制 VPN 密码
+
+![][5]
+
+### 在 Linux 中安装 Seahorse
+
+如果你使用的是基于 GNOME 的发行版,你应该已经安装了它。你可以搜索 “Seahorse” 或者 “Passwords” 来找到它。
+
+在其他情况下,你可以在软件中心搜索到它。根据我的快速测试,它在 KDE、LXQt 和不同的桌面环境下应该可以正常工作。
+
+![][6]
+
+此外,你可以找到它的 [Flatpak 包][7]。所以,无论你使用的是哪种 Linux 发行版,都可以安装 Seahorse。
+
+如果你使用的是 Arch Linux,你也应该在 [AUR][8] 中找到它。
+
+- [Seahorse][9]
+
+你对使用 Seahorse 来取代其他密码管理器有何看法?你是否已经用它来管理加密密钥?请在下面的评论中告诉我你的想法。
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/seahorse/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/seahorse-password-keys.png?resize=800%2C613&ssl=1
+[2]: https://itsfoss.com/ubuntu-keyring/
+[3]: https://itsfoss.com/password-managers-linux/
+[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/seahorse-login.png?resize=800%2C583&ssl=1
+[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/seahorse-keys.png?resize=800%2C579&ssl=1
+[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/seahorse-software.png?resize=800%2C508&ssl=1
+[7]: https://www.flathub.org/apps/details/org.gnome.seahorse.Application
+[8]: https://itsfoss.com/aur-arch-linux/
+[9]: https://wiki.gnome.org/Apps/Seahorse/
diff --git a/published/202110/20211013 5 markdown editors I recommend trying.md b/published/202110/20211013 5 markdown editors I recommend trying.md
new file mode 100644
index 0000000000..d107ec755a
--- /dev/null
+++ b/published/202110/20211013 5 markdown editors I recommend trying.md
@@ -0,0 +1,83 @@
+[#]: subject: "5 markdown editors I recommend trying"
+[#]: via: "https://opensource.com/article/21/10/markdown-editors"
+[#]: author: "Don Watkins https://opensource.com/users/don-watkins"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13904-1.html"
+
+我推荐尝试的 5 个 Markdown 编辑器
+======
+
+> 每个人都有自己喜欢的 Markdown 编辑器。这里有几个我已经试过的。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/21/095837n8q1s3hqc1og1fsq.jpg)
+
+你可以用 Markdown 做任何事情:给网站排版、编写书籍和撰写技术文档只是它的一些用途。我喜欢它创建富文本文档可以如此简单。每个人都有自己喜欢的 Markdown 编辑器。在我的 Markdown 之旅中,我使用了好几个。下面是我考虑过的五个 Markdown 编辑器。
+
+### Abricotine
+
+[Abricotine][2] 是一个在 [GPLv][3] 下发布的开源编辑器。你可以手动输入格式,或者使用菜单插入 [GitHub 风格的 Markdown][4]。Abricotine 允许你在输入时预览文本元素,如标题、图片、数学、嵌入式视频和待办事项。该编辑器只能将文件导出为 HTML。你可以在 Linux、macOS 和 Windows 上使用 Abricotine。
+
+![Abricontine][5]
+
+### MarkText
+
+[MarkText][7] 是一个简单的 Markdown 编辑器。它有很多功能,而且在处理 Markdown 格式的文件方面做得很好。MarkText 也支持 GitHub 风格的 Markdown,它允许你添加表格和带有语法高亮的代码块。它支持实时预览,并且有一个简单的界面。MarkText 是在 [MIT][8] 下授权的。它支持 HTML 和 PDF 格式的输出。MarkText 可以在 Linux、macOS 和 Windows 上使用。
+
+![MarkText][9]
+
+### Ghostwriter
+
+[Ghostwriter][10] 是一个用于 Linux 和 Windows 的 Markdown 编辑器。根据其网站用户的说法。“享受无干扰的写作体验,包括全屏模式和简洁的界面。有了 Markdown,你可以现在写,以后再格式化”。它有内置的默认的浅色和深色主题,或者你可以自己编写。你可以将文件实时按 HTML 预览,你可以直接复制和粘贴到博客中,或导出为其他格式。Ghostwriter 是在 [GPLv3][11] 下发布的。
+
+![Ghostwriter][12]
+
+### Atom
+
+[Atom][13] 被称为 21 世纪的可自定义文本编辑器。它也可以作为一个 Markdown 编辑器使用。它可以在 Linux、Windows 和 macOS上运行,并以 [MIT][14] 许可证发布。它支持 GitHub 风格的 Markdown,并且按下 `Ctrl+Shift+M` 可以打开一个预览面板,这样你就可以轻松地看到 HTML 预览。你可以通过创建一个文件并以 `.md` 文件扩展名保存来轻松入门。这告诉 Atom 它是一个 Markdown 文件。Atom 会自动应用正确的包和语法高亮。
+
+![Atom][15]
+
+### VSCodium
+
+[VSCodium][16] 是微软的 VSCode 编辑器的自由开源版本,没有内置在微软产品中的遥测技术。它以 [MIT][17] 许可证发布,并提供了 VSCode 的所有功能,而没有专有特性。除了其他功能外,VSCodium 还可以作为一个 Markdown 编辑器。创建一个新文件,点击 “选择一个语言”,选择 “Markdown”,然后开始写你的代码。通过按 `Ctrl-Shift+V` 轻松预览文本,然后再切换回编辑器。你也可以通过添加一个扩展来轻松地扩展 Markdown 编辑器。我最喜欢的插件是 [Markdown editor][18],它是 [MIT][19] 许可证。
+
+![VSCodium][20]
+
+你最喜欢的 Markdown 编辑器是什么? 让我们在评论中知道。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/10/markdown-editors
+
+作者:[Don Watkins][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/don-watkins
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/osdc-docdish-typewriter-pink.png?itok=OXJBtyYf (A pink typewriter)
+[2]: https://abricotine.brrd.fr/
+[3]: https://github.com/brrd/abricotine/blob/develop/LICENSE
+[4]: https://guides.github.com/features/mastering-markdown/
+[5]: https://opensource.com/sites/default/files/uploads/1_abricontine.png (Abricontine)
+[6]: https://creativecommons.org/licenses/by-sa/4.0/
+[7]: https://marktext.app/
+[8]: https://github.com/marktext/marktext/blob/develop/LICENSE
+[9]: https://opensource.com/sites/default/files/uploads/2_marktext.png (MarkText)
+[10]: https://wereturtle.github.io/ghostwriter/
+[11]: https://github.com/wereturtle/ghostwriter/blob/master/COPYING
+[12]: https://opensource.com/sites/default/files/uploads/3_ghostwriter.png (Ghostwriter)
+[13]: https://atom.io/
+[14]: https://github.com/atom/atom/blob/master/LICENSE.md
+[15]: https://opensource.com/sites/default/files/uploads/4_atom.png (Atom)
+[16]: https://vscodium.com/
+[17]: https://github.com/VSCodium/vscodium/blob/master/LICENSE
+[18]: https://github.com/zaaack/vscode-markdown-editor
+[19]: https://github.com/zaaack/vscode-markdown-editor/blob/master/LICENSE
+[20]: https://opensource.com/sites/default/files/uploads/5_vscodium.png (VSCodium)
diff --git a/published/202110/20211014 5 common bugs in C programming and how to fix them.md b/published/202110/20211014 5 common bugs in C programming and how to fix them.md
new file mode 100644
index 0000000000..e7023e39e7
--- /dev/null
+++ b/published/202110/20211014 5 common bugs in C programming and how to fix them.md
@@ -0,0 +1,405 @@
+[#]: subject: "5 common bugs in C programming and how to fix them"
+[#]: via: "https://opensource.com/article/21/10/programming-bugs"
+[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
+[#]: collector: "lujun9972"
+[#]: translator: "unigeorge"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13894-1.html"
+
+C 语言编程中的 5 个常见错误及对应解决方案
+======
+
+> 增强 C 语言程序的弹性和可靠性的五种方法。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/18/174123p4cz99skp9zz4nf4.jpg)
+
+即使是最好的程序员也无法完全避免错误。这些错误可能会引入安全漏洞、导致程序崩溃或产生意外操作,具体影响要取决于程序的运行逻辑。
+
+C 语言有时名声不太好,因为它不像近期的编程语言(比如 Rust)那样具有内存安全性。但是通过额外的代码,一些最常见和严重的 C 语言错误是可以避免的。下文讲解了可能影响应用程序的五个错误以及避免它们的方法:
+
+### 1、未初始化的变量
+
+程序启动时,系统会为其分配一块内存以供存储数据。这意味着程序启动时,变量将获得内存中的一个随机值。
+
+有些编程环境会在程序启动时特意将内存“清零”,因此每个变量都得以有初始的零值。程序中的变量都以零值作为初始值,听上去是很不错的。但是在 C 编程规范中,系统并不会初始化变量。
+
+看一下这个使用了若干变量和两个数组的示例程序:
+
+```
+#include
+#include
+
+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 开始引用数组,产生了“大小差一”错误。在长度为 5 的数组中,程序员在索引“5”处使用的值,实际上并不是数组的第 5 个元素。相反,它是内存中的一些其他值,根本与此数组无关。
+
+这是一个数组越界的示例程序。该程序使用了一个只含有 5 个元素的数组,但却引用了该范围之外的数组元素:
+
+```
+#include
+#include
+
+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
+```
+
+引用数组时,始终要记得追踪数组大小。将数组大小存储在变量中;不要对数组大小进行硬编码。否则,如果后期该标识符指向另一个不同大小的数组,却忘记更改硬编码的数组长度时,程序就可能会发生数组越界。
+
+### 3、字符串溢出
+
+字符串只是特定类型的数组。在 C 语言中,字符串是一个由 `char` 类型值组成的数组,其中用一个零字符表示字符串的结尾。
+
+因此,与数组一样,要注意避免超出字符串的范围。有时也称之为 _字符串溢出_。
+
+使用 `gets` 函数读取数据是一种很容易发生字符串溢出的行为方式。`gets` 函数非常危险,因为它不知道在一个字符串中可以存储多少数据,只会机械地从用户那里读取数据。如果用户输入像 `foo` 这样的短字符串,不会发生意外;但是当用户输入的值超过字符串长度时,后果可能是灾难性的。
+
+下面是一个使用 `gets` 函数读取城市名称的示例程序。在这个程序中,我还添加了一些未使用的变量,来展示字符串溢出对其他数据的影响:
+
+```
+#include
+#include
+
+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
+ is length 7
+var1 = 1; var2 = 2
+Ok
+```
+
+威尔士的小镇 `Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch` 有着世界上最长的名字之一。这个字符串有 58 个字符,远远超出了 `name` 变量中保留的 10 个字符。结果,程序将值存储在内存的其他区域,覆盖了 `var1` 和 `var2` 的值:
+
+```
+var1 = 1; var2 = 2
+Where do you live?
+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
+#include
+
+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
+
+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][a]
+选题:[lujun9972][b]
+译者:[unigeorge](https://github.com/unigeorge)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/jim-hall
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bug_software_issue_tracking_computer_screen.jpg?itok=6qfIHR5y (Bug tracking magnifying glass on computer screen)
+[2]: http://www.opengroup.org/onlinepubs/009695399/functions/puts.html
+[3]: http://www.opengroup.org/onlinepubs/009695399/functions/printf.html
+[4]: http://www.opengroup.org/onlinepubs/009695399/functions/malloc.html
+[5]: http://www.opengroup.org/onlinepubs/009695399/functions/free.html
+[6]: http://www.opengroup.org/onlinepubs/009695399/functions/gets.html
+[7]: http://www.opengroup.org/onlinepubs/009695399/functions/strlen.html
+[8]: http://www.opengroup.org/onlinepubs/009695399/functions/fopen.html
+[9]: http://www.opengroup.org/onlinepubs/009695399/functions/fgetc.html
+[10]: http://www.opengroup.org/onlinepubs/009695399/functions/fclose.html
diff --git a/published/202110/20211014 KDE Plasma 5.23 Release Marks its 25th Anniversary With Exciting Improvements.md b/published/202110/20211014 KDE Plasma 5.23 Release Marks its 25th Anniversary With Exciting Improvements.md
new file mode 100644
index 0000000000..d8df723097
--- /dev/null
+++ b/published/202110/20211014 KDE Plasma 5.23 Release Marks its 25th Anniversary With Exciting Improvements.md
@@ -0,0 +1,126 @@
+[#]: subject: "KDE Plasma 5.23 Release Marks its 25th Anniversary With Exciting Improvements"
+[#]: via: "https://news.itsfoss.com/kde-plasma-5-23-release/"
+[#]: author: "Jacob Crume https://news.itsfoss.com/author/jacob/"
+[#]: collector: "lujun9972"
+[#]: translator: "wxy"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13885-1.html"
+
+纪念 25 周年:KDE Plasma 5.23 发布
+======
+
+![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/kde-plasma-5-23-ft.png?w=1200&ssl=1)
+
+多年来,KDE Plasma 一直是最常用的桌面环境之一。这是因为它似乎有无穷无尽的定制选项、华丽的外观和有料的更新。
+
+随着 KDE Plasma 5.23 的发布,这个桌面环境已经工作了 25 年。因此,这个版本也被称为 “Plasma 25 周年版”。
+
+让我们回想一下,1996 年 10 月 14 日,KDE 的创始人 Matthias Ettrich [向一个新闻组][1] 发出了呼唤,为他的 “Kool 桌面环境(KDE)” 项目寻求其他程序员的帮助。
+
+而你看,KDE 现在呢?
+
+在这次更新中,我们可以看到包括 Plasma 内部和第三方应用程序在内的一些重大 UI 改进。
+
+### KDE Plasma 5.23: 有什么新东西?
+
+这次更新带来了许多改进,包括:
+
+ * 桌面重点颜色
+ * 新的 Breeze 主题
+ * 新的电源管理快速控制
+ * 应用程序启动器有更多的自定义选项
+ * 数以百计的错误修复
+
+在这里,我们将看到所有这些新的改进:
+
+![视频](https://youtu.be/RMXViPlehAo)
+
+#### 桌面重点颜色
+
+![][3]
+
+在系统设置中,你会发现有一个可以改变你的桌面重点颜色的选项,你可以选择一个你喜欢的自定义颜色或与默认应用的主题相融合的颜色。
+
+#### 新的 Breeze 主题
+
+![][4]
+
+这次更新带来了全新的 Breeze 主题:Breeze - Blue Ocean。默认主题经过多年的改进,这一次,它侧重于使视觉效果更加清晰和易于识别。
+
+总的来说,新的主题提供了顺滑的外观。除了主题之外,图标也变得更加突出;增加了一个加载齿轮图标。而且,许许多多这样的细微变化已经进入了 KDE Plasma 5.23,以增强桌面的外观和感觉。
+
+正如开发者 Nate Graham 在测试版发布时所说:
+
+> 还有很多时间可以根据需要调整最终的外观,但总的来说,我认为它真的很棒了,我希望你和我一样喜欢它。
+
+#### 系统设置中增强的搜索功能
+
+为了更容易找到你要找的东西,KDE Plasma 5.23 增加了更多的关键词组合,以使你使用搜索栏寻找时可以快速提示你相关设置。
+
+#### 系统托盘的改进
+
+![][5]
+
+虽然系统托盘已经提供了许多控制,但现在监控你连接的网络以及访问剪贴板有了更精细的选项。
+
+系统托盘也改进了显示正在播放的活动媒体时的整体外观。
+
+#### 新的电源管理快速控制
+
+随着 Linux 5.12 的发布,增加了一个电源管理功能。现在,KDE 引入了一种简单的调整方式,它出现在新的快速控制中。
+
+它有三个选项:节电、平衡和性能。只需要一次点击就可以节省电池电力并根据需要调整性能。
+
+#### 应用程序启动器的改进
+
+![][6]
+
+在 Plasma 5.21 中,KDE 引入了一个新的应用程序启动器,叫做 Kickoff。虽然它受到了普遍欢迎,但一些用户也抱怨与旧的启动器相比,自定义选项较少。
+
+好在 Plasma 5.23 解决了这个问题,为 Kickoff 引入了一些全新的自定义选项。这些选项包括以下能力:
+
+ * 图标化电源和用户控件
+ * 所有项目都采用选择列表或网格视图,而不仅仅是收藏夹菜单
+ * 新的键盘快捷键 `CTRL+F` 可以快速聚焦到搜索栏
+ * 在右上角添加了一个新的按针状按钮,以保持应用程序启动器处于活动状态
+
+总的来说,我预计用户会相当受欢迎这些新选项,特别是那些因为它有如此之多的定制选项而使用 KDE 的用户。
+
+### 其他改进措施
+
+其他的常规改进包括:
+
+ * 优化了 Wayland 会话
+ * 通过“反馈”程序提高了数据透明度
+ * 改进了 KDE 的 Discover(应用中心)的性能
+
+要探索更多关于该版本的信息,你可以查看 [官方公告][7] 及其 [更新日志][8]。
+
+### 总结
+
+虽然不是有史以来最大的版本,但这是一个重要的版本,具有纪念其 25 周年的宝贵补充。像往常一样,你应该在未来几个月内的某个时候收到更新,这取决于你的发行版。
+
+你对 KDE Plasma 5.23 的改进有什么看法?请在下面的评论中告诉我。
+
+--------------------------------------------------------------------------------
+
+via: https://news.itsfoss.com/kde-plasma-5-23-release/
+
+作者:[Jacob Crume][a]
+选题:[lujun9972][b]
+译者:[wxy](https://github.com/wxy)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://news.itsfoss.com/author/jacob/
+[b]: https://github.com/lujun9972
+[1]: https://groups.google.com/g/de.comp.os.linux.misc/c/SDbiV3Iat_s/m/zv_D_2ctS8sJ?pli=1
+[2]: https://i0.wp.com/i.ytimg.com/vi/RMXViPlehAo/hqdefault.jpg?w=780&ssl=1
+[3]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/system-settings-accent-colour.png?w=743&ssl=1
+[4]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/breeze-application-style.png?w=368&ssl=1
+[5]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/plasma-nm.png?w=466&ssl=1
+[6]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/kickoff.png?w=699&ssl=1
+[7]: https://kde.org/announcements/plasma/5/5.23.0/
+[8]: https://kde.org/announcements/changelogs/plasma/5/5.22.5-5.23.0/
diff --git a/published/202110/20211014 Ubuntu 21.10 is Available Now- Finally Brings the Much Awaited GNOME 40 With Ubuntu Twist.md b/published/202110/20211014 Ubuntu 21.10 is Available Now- Finally Brings the Much Awaited GNOME 40 With Ubuntu Twist.md
new file mode 100644
index 0000000000..e211dcafa9
--- /dev/null
+++ b/published/202110/20211014 Ubuntu 21.10 is Available Now- Finally Brings the Much Awaited GNOME 40 With Ubuntu Twist.md
@@ -0,0 +1,135 @@
+[#]: subject: "Ubuntu 21.10 is Available Now! Finally Brings the Much Awaited GNOME 40 With Ubuntu Twist"
+[#]: via: "https://news.itsfoss.com/ubuntu-21-10-release/"
+[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
+[#]: collector: "lujun9972"
+[#]: translator: "wxy"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13887-1.html"
+
+Ubuntu 21.10 版现已发布!终于带来了 Ubuntu 特色的 GNOME 40
+======
+
+![](https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ubuntu-21-10-release-date.png?w=1200&ssl=1)
+
+> 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” 有何新变化?
+
+![][1]
+
+Ubuntu 21.10 出炉时有几个重大变化。一些最有影响的改进包括:
+
+ * 新的安装程序
+ * 增加了 GNOME 40
+ * 抛弃了混合主题,选择了浅色/深色主题
+ * 包括 Linux 内核 5.13
+ * 加入了支持蓝牙 LDAC 的 PulseAudio 15
+ * 带有 Nvidia 专有驱动程序的 Wayland 会话
+
+GNOME 40 可以说是 Ubuntu 中令人耳目一新的变化,但你只有在体验之后才能知道。为了让你快速感受一下,下面是这个版本中你可以期待的所有变化。
+
+#### 粉饰一新的安装程序
+
+![][2]
+
+虽然 Ubuntu 的安装程序很容易使用,对新手也很友好,但 Canonical 希望通过对安装程序进行视觉和技术上的改造,使其更上一层楼。
+
+开发团队利用 Flutter 使安装程序在所有其他 Ubuntu 口味和系统配置中保持一致。
+
+![][3]
+
+#### GNOME 40
+
+![][5]
+
+Ubuntu 的桌面体验与 GNOME 40 融为一体,没有提供任何混乱的布局。停靠区依然存在,水平活动概览也与之无缝衔接。
+
+当然,[GNOME 40][4] 中的所有改进,如核心应用程序的更新、工作区的改变等等,都会延续到 Ubuntu 21.10 中,只是 Canonical 做了一些改动。
+
+就我个人而言,我并不喜欢 GNOME 40 的工作流程,但你可能会想体验一下。
+
+#### 主题的变化
+
+![][9]
+
+我喜欢改进后的颜色方案,其目的是为了更好地与 Canonical 的 Ubuntu 品牌相融合。
+
+然而,当涉及到与应用程序和整体主题选择的一致性时,混合(标准)主题是有点问题的。
+
+在 Ubuntu 21.10 中,你会看到深色和浅色主题,而浅色是开箱即用的默认选择。如果你想进一步了解,你可以阅读我们的 [过去的报道以更多了解这一变化][6]。
+
+#### Linux 内核 5.13
+
+Linux 内核 5.13 的加入增加了对未来的英特尔和 AMD 芯片的支持,以及对苹果 M1 的初步支持。
+
+你可以就一步了解 [Linux 内核 5.13][7] 的信息,但总的来说,它应该给你更好的硬件兼容性。
+
+#### PulseAudio 15 支持蓝牙 LDAC
+
+考虑到现在有更多的蓝牙耳机支持 LDAC,当你在桌面上使用 Ubuntu 21.10 时,你可以利用这一功能。
+
+别担心,如果你不想尝试非 LTS 版本,Ubuntu 22.04 LTS 将包括同样的改进。所以,你必须耐心等待,直到明年才能利用这一点。
+
+除此之外,PulseAudio 15 还带来了一系列的改进,你可以参考它的 [官方更新日志以了解更多信息][8] 。
+
+#### Wayland 会话与 NVIDIA 专有驱动程序
+
+现在,即使你使用 NVIDIA 专有的驱动程序,如果你需要也可以切换到 Wayland 会话。
+
+#### Ubuntu 21.10 中的其他变化
+
+![][14]
+
+Ubuntu 21.10 版本为其云镜像、树莓派支持和安全性带来了一系列高质量的变化。
+
+其中一些值得注意的变化包括:
+
+ * [Firefox 默认采用 Snap][10]
+ * LibreOffice、Thunderbird 更新
+ * Ubuntu Sever 的改进
+ * 新的 PHP 默认为 8.0.8
+
+如果你想探索所有的技术细节,你可能想参考一下 [官方发布说明][11]。
+
+### 下载并升级到 Ubuntu 21.10
+
+你可以选择全新安装或使用软件升级器 [从 Ubuntu 21.04 升级][12] 到 Ubuntu 21.10。
+
+请注意,如果你正在使用 Ubuntu 20.04 LTS,建议等待下一个 LTS 版本,除非你知道自己在做什么。
+
+- [下载Ubuntu 21.10][13]
+
+--------------------------------------------------------------------------------
+
+via: https://news.itsfoss.com/ubuntu-21-10-release/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[wxy](https://github.com/wxy)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://news.itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ubuntu-21-10-full.png?w=1200&ssl=1
+[2]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/02/new-ubuntu-installer.png?w=1012&ssl=1
+[3]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ubuntu-new-installer.png?w=960&ssl=1
+[4]: https://news.itsfoss.com/gnome-40-release/
+[5]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ubuntu-21-10-new-gnome-40.png?resize=1568%2C776&ssl=1
+[6]: https://news.itsfoss.com/ubuntu-21-10-theme-change/
+[7]: https://news.itsfoss.com/linux-kernel-5-13-release/
+[8]: https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/15.0/
+[9]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ubuntu-21-10-appearance.png?w=1062&ssl=1
+[10]: https://news.itsfoss.com/ubuntu-firefox-snap-default/
+[11]: https://discourse.ubuntu.com/t/impish-indri-release-notes/21951
+[12]: https://itsfoss.com/upgrade-ubuntu-to-newer-version/
+[13]: https://releases.ubuntu.com/21.10/
+[14]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ubuntu-21-10-about.png?w=1054&ssl=1
\ No newline at end of file
diff --git a/published/202110/20211015 How to Find and Kill Zombie Process in Linux.md b/published/202110/20211015 How to Find and Kill Zombie Process in Linux.md
new file mode 100644
index 0000000000..a3a8dd3f29
--- /dev/null
+++ b/published/202110/20211015 How to Find and Kill Zombie Process in Linux.md
@@ -0,0 +1,123 @@
+[#]: subject: "How to Find and Kill Zombie Process in Linux"
+[#]: via: "https://itsfoss.com/kill-zombie-process-linux/"
+[#]: author: "Marco Carmona https://itsfoss.com/author/marco/"
+[#]: collector: "lujun9972"
+[#]: translator: "zengyi1001"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13919-1.html"
+
+如何找到并杀掉 Linux 系统中的僵尸进程
+======
+
+![][5]
+
+> 这是一个关于如何寻找 Linux 系统僵尸进程并杀死它们的小知识。你也可以从中了解到关于进程和僵尸进程的一些知识。
+
+在了解僵尸进程之前,让我们来复习一下什么是 Linux 进程。
+
+简而言之,[进程][1] 是一个程序的运行实例。它可能运行在前端(比如有交互的进程),也可能运行在后端(比如无交互或自动运行的进程)。它可能是一个父进程(运行期间创建了其他进程),也可能是一个子进程(由其他进程所创建)。
+
+在 Linux 系统中,除 PID 为 0 的第一个 `init` 进程(或 `systemd`)外,其余进程都有父进程。进程也可以拥有自己的子进程。
+
+不相信?可以试试在终端中使用 `pstree` 命令查看进程的树型结构,你能看到系统各个进程的“家族树”。
+
+### Linux系统里的僵尸进程是什么?
+
+子进程死亡后,它的父进程会接收到通知去执行一些清理操作,如释放内存之类。然而,若父进程并未察觉到子进程死亡,子进程就会进入到“僵尸”状态。从父进程角度看,子进程仍然存在,即使子进程实际上已经死亡。这就是“僵尸进程”(也被称为“已消失进程”)是如何产生并存在于系统中的。
+
+这里有一个来自 [Turnoff.us](https://turnoff.us/geek/zombie-processes/) 的关于僵尸进程的非常有趣的看法:
+
+![Image credit: Turnoff.us][2]
+
+### 你真的需要关心僵尸进程吗?
+
+重点要说的是,僵尸进程并没有像它的名称那样看起来可怕。
+
+但如果系统的内存已经所剩不多或者有太多的僵尸进程在吃掉内存,问题会变得糟糕。同样,大部分 Linux 系统进程最大 PID 设置为 32768,如果过多僵尸进程导致其他重要任务没有 PID 可用,你的系统会发生崩溃。
+
+这是真实可能发生的,它有一定的概率,特别当存在一个编码糟糕的程序开始大量产生僵尸进程的时候。
+
+在这种情况下,找到并杀死僵尸进程是一个明智的做法。
+
+### 如何找到僵尸进程
+
+Linux 系统中的进程可能处于如下状态中的一种:
+
+ * `D` = 不可中断的休眠
+ * `I` = 空闲
+ * `R` = 运行中
+ * `S` = 休眠
+ * `T` = 被调度信号终止
+ * `t` = 被调试器终止
+ * `Z` = 僵尸状态
+
+那如何查看进程和它的当前状态呢?一个简单的方法是在终端中使用 [top 命令][3]。
+
+![Top command show processes and their status][4]
+
+正如你在上面截图中看到的,截图中共有 250 个任务(进程),其中 1 个处在 “运行中” 状态,248 个进程处于 “休眠” 状态,还有一个处于 “僵尸” 状态。
+
+现在问题进入下一步,如何杀死 “僵尸” 进程?
+
+### 如何找到并杀死一个僵尸进程?僵尸进程能被杀死吗?
+
+僵尸进程已经死了,要如何才能杀死一个已经死亡的进程呢?
+
+在僵尸电影中,你可以射击僵尸的头部或烧掉它们,但在这里是行不通的。你可以一把火烧了系统来杀死僵尸进程,但这并不是一个可行的方案。
+
+一些人建议发送 `SIGCHLD` 给父进程,但这个信号很可能会被忽略。还有一个方法是杀死父进程来杀死僵尸进程,这听起来很野蛮,但它却是唯一能确保杀死僵尸进程的方法。
+
+首先,通过在终端中 [使用 ps 命令][6] 我们列举僵尸进程,得到它们的进程 ID:
+
+```
+ps ux | awk '{if($8=="Z+") print}'
+```
+
+`ps ux` 命令输出的第 8 列显示了进程状态。上述命令只会打印所有处在 Z+ 状态(表示僵尸状态)的进程。
+
+确认了进程 ID 后,我们可以得到它的父进程 ID:
+
+```
+ps -o ppid= -p
+```
+
+你也可以将上述两个命令结合在一起,直接得到僵尸进程的 PID 及其父进程的 PID:
+
+```
+ps -A -ostat,pid,ppid | grep -e '[zZ]'
+```
+
+现在你得到了父进程 ID,使用命令行和得到的 ID 号 [终于可以杀死进程了][7]:
+
+```
+kill -9
+```
+
+![Killing parent process][8]
+
+再次运行 `ps` 命令或 `top` 命令,你可以验证僵尸进程是否已经被杀死。
+
+恭喜!现在你知道怎么清理僵尸进程了。
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/kill-zombie-process-linux/
+
+作者:[Marco Carmona][a]
+选题:[lujun9972][b]
+译者:[zengyi1001](https://github.com/zengyi1001)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/marco/
+[b]: https://github.com/lujun9972
+[1]: https://tldp.org/LDP/tlk/kernel/processes.html
+[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/zombies-turnoff.webp?resize=800%2C467&ssl=1
+[3]: https://linuxhandbook.com/top-command/
+[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/top-command-view.png?resize=800%2C474&ssl=1
+[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/kill-zombie-process-linux.jpg?resize=800%2C450&ssl=1
+[6]: https://linuxhandbook.com/ps-command/
+[7]: https://itsfoss.com/how-to-find-the-process-id-of-a-program-and-kill-it-quick-tip/
+[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/killing-parent-process.png?resize=800%2C180&ssl=1
diff --git a/published/202110/20211015 How to Upgrade to Ubuntu 21.10 Right Now.md b/published/202110/20211015 How to Upgrade to Ubuntu 21.10 Right Now.md
new file mode 100644
index 0000000000..dd8a75ea34
--- /dev/null
+++ b/published/202110/20211015 How to Upgrade to Ubuntu 21.10 Right Now.md
@@ -0,0 +1,67 @@
+[#]: subject: "How to Upgrade to Ubuntu 21.10 Right Now"
+[#]: via: "https://itsfoss.com/upgrade-ubuntu-to-newer-version/"
+[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13902-1.html"
+
+如何现在就升级到 Ubuntu 21.10
+======
+
+[Ubuntu 21.10 “Impish Indri” 刚刚发布][1]。如果你正在使用 Ubuntu 21.04,你应该有升级到 Ubuntu 21.10 的选项。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/20/105035l6ig4lkjnk5cipuw.jpg)
+
+然而,这种推出将是逐步的。这意味着不是每个人都会立即得到新版本可用的通知。在你看到升级选项之前,可能需要几周的时间。
+
+但是,如果你迫不及待地想获得带有 GNOME 40 和其他新功能的 Ubuntu 21.10 呢?你真的需要等待吗?不用。
+
+### 现在就从 Ubuntu 21.04 升级到 Ubuntu 21.10
+
+以下是你要做的。打开“软件和更新”应用:
+
+![Start the Software & Updates application][3]
+
+并确保你在“更新”标签下将“通知我新的 Ubuntu 版本”设置为“任何新版本”。
+
+![Make sure that settings are right for new Ubuntu version notification][4]
+
+现在打开终端,输入以下命令,以确保你的系统已经更新:
+
+```
+sudo apt update && sudo apt upgrade
+```
+
+当你的 Ubuntu 21.04 系统安装了所有的更新,运行更新管理器来寻找开发版本(本例中为 Ubuntu 21.10)。
+
+```
+update-manager -d
+```
+
+它将打开寻找更新的“更新管理器”。由于你已经更新了系统,它不会找到新的更新来安装。然而,它将看到 Ubuntu 21.10 现在已经可用。
+
+![Hit the upgrade button][2]
+
+你可以点击“升级”按钮,按照屏幕上的选项开始升级程序。你需要有良好的网络速度来下载 2GB 的更新。确保你的系统在升级过程中保持与电源的连接。
+
+享受 Ubuntu 21.10!
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/upgrade-ubuntu-to-newer-version/
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://linux.cn/article-13887-1.html
+[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/upgrade-to-Ubuntu-21-10.webp?resize=797%2C287&ssl=1
+[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/software-and-updates.webp?resize=800%2C166&ssl=1
+[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/ubuntu-upgrade-settings.webp?resize=800%2C338&ssl=1
diff --git a/published/202110/20211016 helloSystem, the Mac-like FreeBSD OS, Takes Another Step Towards Full Release.md b/published/202110/20211016 helloSystem, the Mac-like FreeBSD OS, Takes Another Step Towards Full Release.md
new file mode 100644
index 0000000000..7aecb41222
--- /dev/null
+++ b/published/202110/20211016 helloSystem, the Mac-like FreeBSD OS, Takes Another Step Towards Full Release.md
@@ -0,0 +1,111 @@
+[#]: subject: "helloSystem, the Mac-like FreeBSD OS, Takes Another Step Towards Full Release"
+[#]: via: "https://news.itsfoss.com/hellosystem-towards-first-release/"
+[#]: author: "John Paul Wohlscheid https://news.itsfoss.com/author/john/"
+[#]: collector: "lujun9972"
+[#]: translator: "wxy"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13915-1.html"
+
+helloSystem:一款类似 Mac 的 FreeBSD 系统
+======
+
+![](https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/hello-system-bsd.jpg?w=1200&ssl=1)
+
+最近,helloSystem 的开发者发布了他们操作系统的最新版本。helloSystem 是一个较新的项目,希望以 FreeBSD 为基础创建一个简单易用的操作系统。让我们来看看这对你我意味着什么。
+
+### helloSystem 简介
+
+![helloSystem 的关于屏幕][1]
+
+你们中的大多数人可能以前从未听说过 [helloSystem][2]。该项目是由 [AppImage 的创建者][3] [Simon Peter][4] 在去年年初启动的。Simon 的目标是创建一个“友好的 [自由桌面][5] 操作系统,重点是简单、简约优雅和可用性。”
+
+Simon 从上世纪 80 、90 年代更为简单的操作系统中获得了灵感,特别是 **早期的 MacOS**,比如 [System 1][6]。如果你只是看一下系统运行的截图,你可能会想说,“我不明白这有什么好大惊小怪的。有一堆 Linux 发行版或主题,看起来就像 MacOS。”
+
+该项目不仅仅是看起来像 MacOS,它想回归到更简单、更容易使用的设计。据 [其网站][7] 上讲,“helloSystem 是一个面向创作者的桌面系统,注重简单、优雅和实用性。它的设计遵循 ‘少而精’ 的理念。它的目的是为 ‘普通人’ 提供一个系统,欢迎从 Mac 切换过来的人”。你可以通过观看 Simon 在 [FOSDEM 21][8] 上的演讲,了解更多关于他对 helloSystem 计划的想法。
+
+就像 [Suckless 项目][9] 一样,Simon 创建了一个 “[欢迎和不欢迎的技术][10]” 列表。被批准的技术清单包括:
+
+ * Qt
+ * mDNSResponder
+ * Python
+ * Go
+
+![helloSystem 的欢迎屏幕][12]
+
+“不受欢迎的技术”清单包括 Simon 认为“太复杂或被认为不美观”的东西。这些技术包括:
+
+ * 触摸
+ * btrfs
+ * Gnome
+ * GTK
+ * 客户端窗口装饰
+ * Wayland
+ * Pipewire
+ * XDG 桌面规范
+ * 与原始字体在度量上兼容的字体,但不试图在视觉上与原始字体相似
+ * 最终用户应用程序的包管理器
+ * 配置文件、IP 地址
+ * D-Bus
+ * 通过限制用户或应用程序可以做的事情而提供的安全性
+ * Polkit
+ * 大写锁定键
+ * 本地文件的 URI
+
+![在 helloSystem 上安装 Inkscape][13]
+
+### helloSystem 如何工作
+
+我最好解释一下 helloSystem 的工作方式。就像 MacOS 一样,桌面在屏幕顶部有一个全局菜单,底部有一个 Dock。与 MacOS 的 Finder 一样,helloSystem 也有一个文件管理器(名为 Filer),它也负责窗口管理。
+
+在左上方,你会发现一个 “系统” 菜单,你可以用它来访问应用程序。(你也可以在左上角的搜索框中输入应用程序的名称。)helloSystem 只安装了几个开箱即用的基本应用程序。如果你点击一个未安装的应用程序,helloSystem 会下载并安装该应用程序的 AppImage。
+
+helloSystem 基于 FreeBSD 12.2。它默认启用了 ZFS。它没有密码或用户账户系统,但这并不意味着他们无视安全。据 [其网站][10] 讲,“这并不是说一般的安全问题不重要。而是说它需要以一种不会限制设备的合法用户(所有者)真正 ‘拥有’ 该设备的方式来实现。”
+
+### 最新版本中的新功能
+
+![helloSystem 的实用程序窗口][14]
+
+最新版本的 helloSystem 包括不少图形方面的更新和小的变化,包括:
+
+ * 从 Openbox 切换到 KWin 窗口管理器
+ * 合理的窗口标题居中
+ * 当窗口被拖到屏幕边缘时,会缩放到一定大小,类似于 “Aero Snap”。
+ * 简化了 “桌面设置” 的用户界面;现在更改会立即应用
+ * 移除文件管理器中的标签以简化用户界面
+ * 为菜单添加新的电池小程序,以显示电池充电量
+ * 桌面上的垃圾箱图标不再有 “移动到垃圾箱” 的上下文菜单项
+ * 最小化窗口和取消最小化窗口时的动画
+ * 窗口大小调整时的动画
+ * 调整内核配置以优化声音
+ * 简化了文件管理器中的 “获取信息” 对话框
+
+你可以在 [这里][11] 看到其余的变化。你也可以从同一个链接下载最新的 .iso 文件。试一试,让我们知道你的想法。
+
+--------------------------------------------------------------------------------
+
+via: https://news.itsfoss.com/hellosystem-towards-first-release/
+
+作者:[John Paul Wohlscheid][a]
+选题:[lujun9972][b]
+译者:[wxy](https://github.com/wxy)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://news.itsfoss.com/author/john/
+[b]: https://github.com/lujun9972
+[1]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/hello-about.jpg?w=850&ssl=1
+[2]: https://github.com/helloSystem/hello
+[3]: https://itsfoss.com/appimage-interview/
+[4]: https://github.com/probonopd
+[5]: https://medium.com/@probonopd/bring-back-the-ease-of-80s-and-90s-personal-computing-393738c5e2a1
+[6]: https://github.com/helloSystem/hello/wiki#design-principles
+[7]: https://hellosystem.github.io/docs/
+[8]: https://fosdem.org/2021/schedule/event/hello_bsd/
+[9]: https://suckless.org/sucks/
+[10]: https://github.com/helloSystem/hello/wiki/Welcome-and-unwelcome-technologies
+[11]: https://github.com/helloSystem/ISO/releases/tag/r0.6.0
+[12]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/hello-welcome.jpg?w=850&ssl=1
+[13]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/hello-install.jpg?w=850&ssl=1
+[14]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/hello-utillities.jpg?w=850&ssl=1
\ No newline at end of file
diff --git a/published/202110/20211018 4 Linux tools to erase your data.md b/published/202110/20211018 4 Linux tools to erase your data.md
new file mode 100644
index 0000000000..2d6147082a
--- /dev/null
+++ b/published/202110/20211018 4 Linux tools to erase your data.md
@@ -0,0 +1,116 @@
+[#]: subject: "4 Linux tools to erase your data"
+[#]: via: "https://opensource.com/article/21/10/linux-tools-erase-data"
+[#]: author: "Don Watkins https://opensource.com/users/don-watkins"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13913-1.html"
+
+4 个用来擦除数据的 Linux 工具
+======
+
+> 用这些开源工具从你的硬盘驱动器中擦除数据。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/23/113918sdojp6sj0odgis16.jpg)
+
+保持数据安全的最好方法之一是只向加密的硬盘驱动器写入数据。在一个标准的硬盘上,只要把硬盘挂载就可以查看数据,就像 U 盘一样,甚至可以用 [Scalpel][2] 和 [Testdisk][3] 等工具显示和恢复已删除的数据。但是在一个加密的驱动器上,如果没有解密密钥(通常是你在挂载驱动器时输入的密码),数据是无法被读取的。
+
+加密可以在你安装操作系统时建立,有些操作系统甚至可以在安装后的任何时候激活加密功能。
+
+但是,当你卖掉一台电脑或更换一个一开始就没有被加密的驱动器时,你该怎么办呢?
+
+与从一开始就加密你的数据相比,最好的办法是在你用完硬盘后删除数据。
+
+### 负责任的看管者
+
+我经常被要求帮助客户升级一台旧电脑。无一例外,他们更愿意帮助我回收它们,使它们能被别人使用。我很乐意翻新这些旧电脑,用较新的固态驱动器来改装它们,极大地提高性能。
+
+然而,把一个旧驱动器扔进垃圾桶并不是一个好主意。它需要被擦除,然后被妥善处理。我没有把硬盘留在原来的电脑里,而是把它们取出来,放在一个硬盘盒里,然后把它们连接到我的 Linux 电脑上。有几个 Linux 工具可以很容易地完成这个任务。其中一个是 **Gnu Shred**。
+
+### GNU Shred
+
+```
+$ sudo shred -vfz /dev/sdX
+```
+
+Shred 有许多选项:
+
+ * `-n` - 覆盖的次数。默认是三次。
+ * `-u` - 覆盖并删除。
+ * `-s` - 要粉碎的字节数。
+ * `-v` - 显示扩展信息。
+ * `-f` - 必要时强制改变权限以允许写入。
+ * `-z` - 最后用 0 覆盖来隐藏粉碎。
+
+使用 `shred --help` 获取更多信息
+
+### ShredOS
+
+ShredOS 是一个即用 Linux 发行版,它的唯一目的是清除驱动器的全部内容。它是在一个名为 DBAN 的类似发行版停止维护后开发的。它使用 `nwipe` 应用,它是 DBAN 的 `dwipe` 的一个分叉。你可以通过下载 32 位或 64 位镜像,并在 Linux 和 macOS 上使用 `dd` 命令将其写入驱动器来制作一个可启动的 USB 驱动器:
+
+```
+$ sudo dd if=shredos.img of=/dev/sdX bs=4M status=progress
+```
+
+另外,你可以在 Linux、macOS 和 Windows 上使用 [Etcher][4] 工具烧录。
+
+### dd 命令
+
+清除驱动器的一个常见方法是使用 Linux 的 `dd` 命令。几乎所有的 Linux 安装都安装了 `dd` 工具。确保该驱动器没有被挂载。
+
+```
+$ sudo umount /dev/sdXY -l
+```
+
+如果你想在整个目标磁盘上写零,执行以下命令。这可能需要一个整个通宵。
+
+```
+$ sudo dd if=/dev/urandom of=/dev/sdX bs=10M
+```
+
+**警告**:请确保你知道你在系统中的位置,并以正确的驱动器为目标,这样你就不会意外地删除自己的数据。
+
+### Nvme-cli
+
+如果你的计算机包含一个较新的 NVMe 驱动器,你可以安装 [nvme-cli][5] 程序,并使用 `sanitize` 选项来清除你的驱动器。
+
+`nvme sanitize help` 命令提供了选项列表:
+
+ * `--no-dealloc`、`-d` - 净化后不解除分配。
+ * `--oipbp`、`-i` - 每次覆写后反转模式。
+ * `--owpass=`、`-n` - 覆写次数。
+ * `--ause`、`-u` - 允许无限制净化退出。
+ * `--sanact=`、`-a` - 净化动作。
+ * `--ovrpat=`、`-p` - 覆写模式。
+
+下面是我使用的命令:
+
+```
+$ sudo nvme sanitize /dev/nvme0nX
+```
+
+这里的警告与格式化过程相同:首先备份重要的数据,因为这个命令会擦除这些数据!
+
+### 信息管理
+
+你保存在计算机上的信息是很重要的。它属于你,也属于其他任何人。当你卖掉一台电脑或处理一个硬盘时,确保你已经用这些很棒的工具之一清除了你的数据。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/10/linux-tools-erase-data
+
+作者:[Don Watkins][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/don-watkins
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/cloud_tools_hardware.png?itok=PGjJenqT (Tools in a cloud)
+[2]: https://www.redhat.com/sysadmin/find-lost-files-scalpel
+[3]: https://www.redhat.com/sysadmin/recover-partition-files-testdisk
+[4]: https://opensource.com/article/18/7/getting-started-etcherio
+[5]: https://opensource.com/article/21/9/nvme-cli
diff --git a/published/202110/20211018 Get memory use statistics with this Linux command-line tool.md b/published/202110/20211018 Get memory use statistics with this Linux command-line tool.md
new file mode 100644
index 0000000000..be81b26066
--- /dev/null
+++ b/published/202110/20211018 Get memory use statistics with this Linux command-line tool.md
@@ -0,0 +1,113 @@
+[#]: subject: "Get memory use statistics with this Linux command-line tool"
+[#]: via: "https://opensource.com/article/21/10/memory-stats-linux-smem"
+[#]: author: "Tomasz Waraksa https://opensource.com/users/tomasz"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13918-1.html"
+
+用 smem 命令获取内存使用统计信息
+======
+
+> smem 命令允许你快速查看你的网页应用的内存使用情况。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/25/101843emjjkmvk88gvyqgv.jpg)
+
+在我的编程工作中,我经常需要了解网页应用的内存使用情况。在深入研究细节和浏览器剖析工具之前,一个粗略的估计通常就足够了。
+
+为了了解 Linux 或 macOS 上的内存使用情况,人们通常使用 [top][2] 或 [htop][3]。我很想看到一个单一的数字:一个进程占用了多少内存。但这些工具所显示的统计数据可能很难理解。对于网页浏览器来说,它甚至更加复杂,因为它们经常运行许多独立的进程。它们在 `top` 输出中显示为一个长长的列表,每一个都有自己的单独指标。
+
+![Memory usage using htop][4]
+
+### smem 命令
+
+幸运的是有 [smem][6],另一个用于查看内存使用统计的命令行工具。用你选择的包管理器安装它,例如:
+
+```
+sudo apt install smem
+```
+
+要获得 [Firefox][7] 的总内存使用量,请执行:
+
+```
+smem -c pss -P firefox -k -t | tail -n 1
+```
+
+这些开关做了什么?
+
+ * `-c` 开关指定要显示的列。我只对 `pss` 列感兴趣,它显示一个进程分配的内存。
+ * `-P` 开关过滤进程,只包括那些名字里有 `firefox` 的进程。
+ * `-k` 开关显示以 MB/GB 为单位的内存使用情况,而不是单纯的字节数。
+ * `-t` 开关显示总数。
+ * `tail -n 1` 过滤器只输出最后一行,也就是总数的地方。
+
+输出是非常简单的:
+
+```
+$ smem -t -k -c pss -P firefox | tail -n 1
+4.9G
+```
+
+开门见山!而且,经过又一天忙碌的工作,打开了 50 多个选项卡,Firefox 仍然只使用 5 GB。看看吧,Google Chrome。
+
+#### 用一个脚本更容易
+
+为了方便起见,我创建一个名为 `memory-use` 的小脚本,它将进程名称作为参数。我把所有的脚本都放在 `~/bin` 里,所以:
+
+```
+echo 'smem -c pss -P "$1" -k -t | tail -n 1' > ~/bin/memory-use && chmod +x ~/bin/memory-use
+```
+
+现在我可以很容易地测量任何应用的内存使用:
+
+```
+memory-use firefox
+memory-use chrome
+memory-use slack
+```
+
+#### 还有更多!
+
+该工具不仅可以显示总的内存使用情况。它甚至可以生成图形输出。
+
+比如:
+
+```
+smem --pie name -c pss
+```
+
+显示类似这样的内容:
+
+![Pie chart output from smem][8]
+
+关于更多的细节,我建议查看 [smem 手册页][6]。
+
+你可以在 上找到另一个很棒的教程。
+
+希望你喜欢!
+
+本文最初发表在[作者的博客][9]上,并经许可转载。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/10/memory-stats-linux-smem
+
+作者:[Tomasz Waraksa][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/tomasz
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/programming_code_keyboard_orange_hands.png?itok=G6tJ_64Y (Programming at a browser, orange hands)
+[2]: https://linux.die.net/man/1/top
+[3]: https://linux.die.net/man/1/htop
+[4]: https://opensource.com/sites/default/files/uploads/1_htop.png (Memory usage using htop)
+[5]: https://creativecommons.org/licenses/by-sa/4.0/
+[6]: https://linux.die.net/man/8/smem
+[7]: https://www.mozilla.org/en-US/firefox/
+[8]: https://opensource.com/sites/default/files/uploads/2_smem-pie-chart.png (Pie chart output from smem)
+[9]: https://letsdebug.it/post/26-measure-application-memory-use-on-linux/
diff --git a/published/202110/20211018 PinePhone Pro is an Affordable Linux Flagship Smartphone That Could Replace Your Android.md b/published/202110/20211018 PinePhone Pro is an Affordable Linux Flagship Smartphone That Could Replace Your Android.md
new file mode 100644
index 0000000000..ab6426afea
--- /dev/null
+++ b/published/202110/20211018 PinePhone Pro is an Affordable Linux Flagship Smartphone That Could Replace Your Android.md
@@ -0,0 +1,114 @@
+[#]: subject: "PinePhone Pro is an Affordable Linux Flagship Smartphone That Could Replace Your Android"
+[#]: via: "https://news.itsfoss.com/pinephone-pro-introduced/"
+[#]: author: "Jacob Crume https://news.itsfoss.com/author/jacob/"
+[#]: collector: "lujun9972"
+[#]: translator: "wxy"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13901-1.html"
+
+PinePhone Pro:一款价位适中的 Linux 旗舰智能手机
+======
+
+> 售价 399 美元的 PinePhone Pro 是一款 Linux 智能手机,或许有潜力取代一些预算相当的 Android 设备。但作为消费者,还需要等待几个月。
+
+![](https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/PinePhone-Pro-ft.png?w=1200&ssl=1)
+
+早在 2019 年,当 Pine64 宣布推出 PinePhone 时,没有人想到它会变得如此受欢迎。在短短两年间,Pine64 已经成功建立了一个由数万名开发者和用户组成的社区,大家一起努力使 Linux 完美地跑在了手机上。
+
+现在,随着 PinePhone Pro 的宣布,Pine64 正在扩大 Linux 手机的受众范围。这个设备有许多令人难以置信的新功能,所有这些都使它可以与许多中档 Android 手机相提并论。
+
+- [视频](https://img.linux.net.cn/static/video/Meet%20the%20PinePhone%20Pro%20_%20PINE64-wP2-6Z74W44.mp4)
+
+### PinePhone Pro 功能
+
+![][1]
+
+与原来的 PinePhone 相比,PinePhone Pro 带来了巨大的升级。这些升级中最值得注意的是使用了 Rockchip 的六核 RK3399S SoC 芯片,这应该能显著地提升性能。其他一些值得注意的功能和升级还有:
+
+ * 4GB LPDDR4 内存
+ * 128GB 存储 + microSD 卡插槽
+ * 6 英寸 IPS 显示屏,采用 **大猩猩 4 号玻璃**。
+ * 1300 万像素(后置)+ 500 万像素(前置)的摄像头
+
+让我们来探讨一下这方面的更多细节。
+
+#### 性能更好
+
+![][2]
+
+到目前为止,最重要的升级是 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 的闪存,这对任何人来说都足够了。
+
+#### 显示屏改进
+
+![][4]
+
+虽然这并不是原版 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][6]
+
+关于 PinePhone Pro 的可用性和规格的更多细节,你应该去他们的 [官方网站][5] 看看。
+
+你要买 PinePhone Pro 吗?请在下面的评论中告诉我!
+
+--------------------------------------------------------------------------------
+
+via: https://news.itsfoss.com/pinephone-pro-introduced/
+
+作者:[Jacob Crume][a]
+选题:[lujun9972][b]
+译者:[wxy](https://github.com/wxy)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://news.itsfoss.com/author/jacob/
+[b]: https://github.com/lujun9972
+[1]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/pinephone-pro.png?w=1024&ssl=1
+[2]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/pinephoneProMainBoard.jpg?w=1024&ssl=1
+[3]: https://i0.wp.com/i.ytimg.com/vi/pCxDcMdr_fo/hqdefault.jpg?w=780&ssl=1
+[4]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/PinePhonePro.png?w=465&ssl=1
+[5]: https://www.pine64.org/pinephonepro/
+[6]: https://preorder.pine64.org/
diff --git a/published/202110/20211019 Dash to Dock is Finally Available for GNOME 40.md b/published/202110/20211019 Dash to Dock is Finally Available for GNOME 40.md
new file mode 100644
index 0000000000..a4a68bb887
--- /dev/null
+++ b/published/202110/20211019 Dash to Dock is Finally Available for GNOME 40.md
@@ -0,0 +1,69 @@
+[#]: subject: "Dash to Dock is Finally Available for GNOME 40"
+[#]: via: "https://news.itsfoss.com/dash-to-dock-gnome-40/"
+[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
+[#]: collector: "lujun9972"
+[#]: translator: "wxy"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13905-1.html"
+
+Dash to Dock 终于可以在 GNOME 40 上使用了
+======
+
+> Dash to Dock v70 增加了对 GNOME 40 的支持,并放弃了对较旧版本的 GNOME Shell 的支持。但是,你可以继续使用旧版本。
+
+![](https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/ubuntu-dock.png?w=1200&ssl=1)
+
+Dash to Dock 是多年来最 [有用的 GNOME 扩展][1] 之一。随着 [GNOME 40][2] 的引入,很多人都没能让这个扩展在它上面工作起来。
+
+当然,作为一个流行的扩展,对 GNOME 40 的支持预计很快就会被加入。终于,它来了!
+
+如果你不知道,GNOME 40 包括一个水平工作区视图,这影响了一些人的工作流程,但 Ubuntu 即使在 GNOME 40 中也没有移动 Dock 的打算。
+
+所以,你仍然可以使用 Dash to Dock 来从概览区得到一个水平的 Dock。
+
+### Dash to Dock v70 放弃了对旧的 GNOME Shell 的支持
+
+![][3]
+
+Dash to Dock v70,对 GNOME 40 和特定的 3.34 版的 GNOME Shell 提供了支持。
+
+然而,为了支持 GNOME 40 而对扩展所做的技术修改也意味着新版本的扩展不能再与旧版本的 GNOME Shell 一起工作。
+
+如果你没有运行 GNOME 40,你仍然可以使用旧的 v69,它应该可以很好地工作。而且,除了增加了对 GNOME 40 的支持,在功能上也没有什么不同。
+
+该扩展的未来发展可能很有趣,他们是否会考虑为不同的 GNOME Shell 版本而增加不同的扩展软件包,并提供新的功能?让我们拭目以待。
+
+### 安装 Dash to Dock 的方法
+
+![][4]
+
+你可以从 [GNOME 扩展网站][5] 中通过简单的切换按钮来安装这个扩展。如果你是新手,我建议通过我们的 [GNOME 扩展安装指南][6] 来开始。
+
+- [Dash to Dock GNOME 扩展][5]
+
+值得注意的是,你需要使用一个兼容的网页浏览器来安装这个扩展。虽然它应该可以在大多数浏览器上使用([基于 Chromium 的浏览器][7] 应该可以),但正如 [OMG! Ubuntu][8] 最初报道的那样,Ubuntu 21.10 中 Snap 打包的 Firefox 浏览器可能无法使用。
+
+你试过这个扩展了吗?欢迎在下面的评论中告诉我你的想法。
+
+--------------------------------------------------------------------------------
+
+via: https://news.itsfoss.com/dash-to-dock-gnome-40/
+
+作者:[Ankush Das][a]
+选题:[lujun9972][b]
+译者:[wxy](https://github.com/wxy)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://news.itsfoss.com/author/ankush/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/best-gnome-extensions/
+[2]: https://news.itsfoss.com/gnome-40-release/
+[3]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/dash-to-dock.jpeg?w=1366&ssl=1
+[4]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/gnome-dash-dock-extension.png?w=1259&ssl=1
+[5]: https://extensions.gnome.org/extension/307/dash-to-dock/
+[6]: https://itsfoss.com/gnome-shell-extensions/
+[7]: https://news.itsfoss.com/chrome-like-browsers-2021/
+[8]: https://www.omgubuntu.co.uk/2021/10/dash-to-dock-official-gnome-40-support?
diff --git a/published/202110/20211019 Linux Tablets- What are Your Options.md b/published/202110/20211019 Linux Tablets- What are Your Options.md
new file mode 100644
index 0000000000..1c4f39b903
--- /dev/null
+++ b/published/202110/20211019 Linux Tablets- What are Your Options.md
@@ -0,0 +1,114 @@
+[#]: subject: "Linux Tablets: What are Your Options?"
+[#]: via: "https://itsfoss.com/linux-tablets/"
+[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
+[#]: collector: "lujun9972"
+[#]: translator: "wxy"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13929-1.html"
+
+有哪些 Linux 平板电脑可供选择
+======
+
+![](https://img.linux.net.cn/data/attachment/album/202110/28/180114mism33m44sibmsc9.jpg)
+
+有很多 [基于 Linux 的笔记本电脑][1],也有 [预装了 Linux 的迷你 PC][2],而市场上还有一些 [基于 Linux 的智能手机][3]。
+
+那平板电脑呢?有没有一些不错的基于 Linux 的平板电脑?这可能不能用一句话说清楚。
+
+许多仅使用 Linux 的系统制造商专注于制造台式电脑。这主要是由于触摸设备上的 Linux 体验与安卓和 iOS 提供的体验相距甚远。
+
+但这是否意味着你不能在平板电脑上使用 Linux?并非如此。对于早期尝试用户和 DIY 爱好者来说,还有一些选择的。让我们来看看在这些 Linux 平板电脑中,你有哪些选择。
+
+### Ubuntu Touch
+
+![BQ 平板电脑上的 Ubuntu Touch 操作系统][4]
+
+好吧!这不是一个平板电脑,而是一个操作系统。但它确实让你可以在一些旧的安卓平板电脑上安装一个适合触摸操作的 Ubuntu 版本。
+
+注意“一些”这个词。Ubuntu Touch 官方 [支持][5] Nexus 7、联想 M10、Xperia Z4 和 BQ Aquaris 平板。你甚至可以尝试在你的其他平板电脑上安装 Ubuntu Touch。它可能无法 100% 工作,但仍然非常有用。
+
+[Ubuntu Touch][8] 是 Ubuntu 团队的一个项目,但是他们 [在 2017 年中止了它][6]。[UBports][7] 承担了继续这个项目的责任,他们在有限的资源下做的很棒。
+
+总而言之,如果你喜欢各种实验,想让你的旧安卓平板电脑获得新生,Ubuntu Touch 可能是你的周末项目。
+
+### PineTab
+
+![PineTab][9]
+
+Pine64 始于其单板计算机 Pine A64,以作为 [树莓派的替代品][10]。随着时间的推移,它推出了几个 Pine 品牌的产品。这份名单里包括低调的 [PineTime 智能手表][11]、PineBook 笔记本电脑、PinePhone 智能手机和 PineTab 平板电脑。
+
+这些 Pine 设备通常价格低廉,并允许用户对这些小设备进行完全控制。这种可魔改的特性帮助它聚集了一大批开源 DIY 爱好者的粉丝。
+
+[PineTab][12] 基本上使用了与带有触摸屏和键盘的 Pine64 单板计算机相同的组件。它不是看起来最漂亮的平板电脑,也不打算成为这样的。
+
+它的规格很一般,有一个高清 IPS 电容式触摸屏、全志 A64 芯片组、四核 CPU 和 2GB 内存。
+
+它无法与 iPad 或 Galaxy Tab 竞争,但它允许你安装你选择的发行版,并按你的要求进行配置。
+
+请记住,Pine 的库存有限,所以如果你能看到这个设备可以购买,那你很幸运。
+
+### PineNote
+
+![PineNote][13]
+
+另一个 Pine 设备,与你在上一节看到的 PineTab 略有不同。
+
+PineTab 是一款用于浏览互联网、使用应用程序和玩游戏的 Linux 平板电脑,而 [PineNote][14] 是用来做笔记和阅读书籍和文件的。
+
+它有一个电子墨水显示屏,你可能在 Kindle 等电子书阅读器上见过。除了电子书阅读器之外,PineNote 还可以你用 Wacom 笔做笔记。
+
+PineNote 拥有四核 Rockchip、多点触控电子墨水面板、4GB 内存和 128GB eMMC 存储。它也是为数不多的价格高于通常的 399 美元的平板点之一。
+
+请记住,PineNote 正处于早期开发阶段,只接受开发者的订单。
+
+### RasPad
+
+![RasPad][18]
+
+[RasPad][19] 是一个用于树莓派设备的套件,可以把它变成一个基于触摸功能的设备。与普通的平板不同,这不是一个扁平的设备,而是有一个楔形的身体。这使得它更容易在办公桌上使用。
+
+RasPad 是专门为树莓派设备创建的,你可以轻松使用它的大部分端口。它有一个专门的 RasPad 操作系统,但你可以自由使用常规的树莓派操作系统或 Ubuntu 或任何其他适合树莓派的操作系统。在选择操作系统时请考虑触控友好性。
+
+请记住,树莓派设备不包括在套件中。你必须要单独购买。
+
+### 你的选择是什么?
+
+我知道我们离一个优秀的 Linux 平板电脑还很远,但它们至少可以和市场上的安卓平板电脑竞争。至少我们有一些可用的选择,这也是一线希望。
+
+你是否已经拥有以上列出的设备之一了?你的体验如何?
+
+如果你只能选择其中之一,那么你选择哪一款 Linux 平板电脑?
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/linux-tablets/
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[wxy](https://github.com/wxy)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://linux.cn/article-13672-1.html
+[2]: https://itsfoss.com/linux-based-mini-pc/
+[3]: https://linux.cn/article-13711-1.html
+[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/ubuntu-touch.jpg?resize=755%2C537&ssl=1
+[5]: https://devices.ubuntu-touch.io/
+[6]: https://itsfoss.com/ubuntu-unity-shutdown/
+[7]: https://ubports.com/
+[8]: https://ubuntu-touch.io/
+[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/PineTab.jpg?resize=800%2C742&ssl=1
+[10]: https://itsfoss.com/raspberry-pi-alternatives/
+[11]: https://itsfoss.com/pinetime-linux-smartwatch/
+[12]: https://pine64.com/product/pinetab-10-1-linux-tablet-with-detached-backlit-keyboard/?v=0446c16e2e66
+[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/PineNote-tab.jpg?resize=800%2C615&ssl=1
+[14]: https://www.pine64.org/pinenote/
+[15]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingpad-keyboard-angle.webp?resize=800%2C600&ssl=1
+[16]: https://itsfoss.com/jingpad-a1-review/
+[17]: https://en.jingos.com/jingpad-a1/
+[18]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/raspad.webp?resize=800%2C614&ssl=1
+[19]: https://raspad.com/products/raspadv3
diff --git a/published/202110/20211019 Why Mark Text is my favorite markdown editor.md b/published/202110/20211019 Why Mark Text is my favorite markdown editor.md
new file mode 100644
index 0000000000..847c4ceb2c
--- /dev/null
+++ b/published/202110/20211019 Why Mark Text is my favorite markdown editor.md
@@ -0,0 +1,92 @@
+[#]: subject: "Why Mark Text is my favorite markdown editor"
+[#]: via: "https://opensource.com/article/21/10/mark-text-markdown-editor"
+[#]: author: "Don Watkins https://opensource.com/users/don-watkins"
+[#]: collector: "lujun9972"
+[#]: translator: "wxy"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13926-1.html"
+
+Mark Text:我最喜欢的 Markdown 编辑器
+======
+
+> Mark Text 拥有的工具使得撰写 Markdown 变得容易,同时又提供了一个不会打扰我的简单的界面。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/27/141244m9os557ss7au6oas.jpg)
+
+几年前,当我开始使用 Jupyter 笔记本时,我接触到了 Markdown 格式。许多作者都知道 Markdown,但这是我不熟悉的一种技能。
+
+Markdown 是一种标准的文本写作方式,在这种方式中,你可以用精简的符号来标记你想要的文本样式。例如,你不用点击一个按钮来使一个词变粗体,而是用两个星号(`**word**`)包围这个词。这有两种效果:
+
+ * 当作为纯文本查看时,视觉上显示出强调的文本
+ * 如果有一个好的文本转换器或渲染器(如 Pandoc 或一个好的 Markdown 文本编辑器),就会显示为加粗。
+
+Markdown 最大的优点之一是它的大部分符号都是直观的,并且来自我们大多数人已有的习惯。它使得用星号强调单词,用字符标记标题以区分它们等等变得很自然。
+
+每个人都对它评价很高,但我不确定为什么我需要学习和使用 Markdown。然而,我是一个好奇的人,我开始探索 Markdown,以及它如何在我的写作中发挥作用。
+
+### 学习 Markdown
+
+我很喜欢在学习时使用 [Markdown 速查表][2]。我发现 Markdown 是一个很好的工具,可以写任何内容,而且我很喜欢甚至不需要一个专门的 Markdown 编辑器这一点。任何文本编辑器都可以写 Markdown,因为 Markdown 使用标准文本来表示样式。我开始使用简单的编辑器,如 Vim 或 gedit(或任何其他编辑器),并查阅这个速查表以记住简单的格式化规则。
+
+今年我一直在写日记,作为组织我的想法和学习更多关于 Markdown 的方法。我最近尝试了 [Ghostwriter][3] 文本编辑器,这是一个优秀的编辑器,有一些额外的 Markdown 特定功能。Markdown 现在已经变得非常流行了,许多编辑器都加入了语法高亮、提示和其他使 Markdown 编写变得容易的功能,或者将其作为重点。它们不是必须的功能,但当你拥有它们时,还是很好的。
+
+### 尝试 Mark Text
+
+在阅读一个博客时,我发现了 [Mark Text][4]。Mark Text 使写 Markdown 变得很容易,同时提供了一个简单的界面,而且又不影响我。Mark Text 有六个主题,三个浅色和三个深色主题。深色主题对我来说更容易使用。它的 [用户文档][5] 非常好,而且也提供了 Markdown 的 [语法帮助][6]。
+
+### Markdown 的实时预览
+
+Mark Text 以简洁的界面提供了实时预览功能。它支持 [Commonmark][7] 规范、Github 风格的 Markdown 规范,以及 Pandoc Markdown。据其网站说,Mark Text 还支持 KaTex、front matter 和 emoji 等 Markdown 扩展。它还可以输出 HTML 和 PDF 文件。
+
+Mark Text 有各种编辑模式,如打字模式、源代码模式和专注模式。添加图片是一件很容易的事,因为你可以简单地从剪贴板上复制和粘贴它们。
+
+在 Mark Text 窗口的左上方有一个弹出窗口,显示迄今为止输入的字符和段落数量。作为一个作家,这真的很有帮助。
+
+从 Mark Text 窗口左上方的菜单或使用 `Ctrl+S` 保存文件很容易。事实上,Mark Text 的菜单对任何习惯于基本文本编辑器或文字处理器的人来说都是友好和熟悉的。
+
+![Mark Text 文件菜单][8]
+
+我喜欢 Mark Text 用简单的快捷键支持各种格式,包括表格块、图表、行内格式、数学公式块和其他代码块。
+
+你可以从以下链接中为你的操作系统下载 Mark Text:
+
+ * [Linux][10]
+ * [macOS][11]
+ * [Windows][12]
+
+Mark Text 以 [MIT][13] 许可证开源。你可以随时 [下载][14] 最新的版本。
+
+另外,你可以用 `brew install --cask mark-text` 在 macOS 上安装 Mark Text,在 Windows 上用 [Chocolatey][15] 输入 `choco install marktext` 来安装它。
+
+Mark Text 一直在寻找赞助商和开发者。该项目有一个给贡献者的 [指南][16]。此外,你可以在 Patreon 和 Open Collective 上支持该项目。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/10/mark-text-markdown-editor
+
+作者:[Don Watkins][a]
+选题:[lujun9972][b]
+译者:[wxy](https://github.com/wxy)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/don-watkins
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/osdc-docdish-typewriterkeys-3.png?itok=NyBwMdK_ (Typewriter keys in multicolor)
+[2]: https://opensource.com/downloads/cheat-sheet-markdown
+[3]: https://wereturtle.github.io/ghostwriter/
+[4]: https://marktext.app/
+[5]: https://github.com/marktext/marktext/blob/master/docs/README.md
+[6]: https://github.com/marktext/marktext/blob/master/docs/MARKDOWN_SYNTAX.md
+[7]: https://commonmark.org/
+[8]: https://opensource.com/sites/default/files/uploads/mark-test-file-menu.png (Mark Text file menu)
+[9]: https://creativecommons.org/licenses/by-sa/4.0/
+[10]: https://github.com/marktext/marktext/releases/latest/download/marktext-x86_64.AppImage
+[11]: https://github.com/marktext/marktext/releases/latest/download/marktext.dmg
+[12]: https://github.com/marktext/marktext/releases/latest/download/marktext-setup.exe
+[13]: https://github.com/marktext/marktext/blob/develop/LICENSE
+[14]: https://github.com/marktext/marktext/releases
+[15]: https://chocolatey.org/
+[16]: https://github.com/marktext/marktext/blob/develop/CONTRIBUTING.md
diff --git a/published/202110/20211020 GitUI- A Blazing Fast Terminal Client for Git Written in Rust.md b/published/202110/20211020 GitUI- A Blazing Fast Terminal Client for Git Written in Rust.md
new file mode 100644
index 0000000000..51e442a5d6
--- /dev/null
+++ b/published/202110/20211020 GitUI- A Blazing Fast Terminal Client for Git Written in Rust.md
@@ -0,0 +1,102 @@
+[#]: subject: "GitUI: A Blazing Fast Terminal Client for Git Written in Rust"
+[#]: via: "https://itsfoss.com/gitui/"
+[#]: author: "Marco Carmona https://itsfoss.com/author/marco/"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13922-1.html"
+
+GitUI: 用 Rust 编写的 Git 的快速命令行客户端
+======
+
+![](https://img.linux.net.cn/data/attachment/album/202110/26/111605achvngqr6ix6vv0p.jpg)
+
+[基本的 Git 命令][1] 对于通常的克隆、添加、提交推送已经足够好了。
+
+但如果你在一个有多个贡献者的大型项目上工作,你可能需要将事情可视化。GUI 工具可以让你更好地了解 `diff`、`stash` 和 `blame` 的情况。
+
+但是,如果你常用终端,又想要 Git 的舒适性,我为你准备了一个好工具。
+
+它叫 GitUI,它提供了类似于 Git GUI 的用户体验和舒适度,但就在你的终端中。它是可移植的、快速的、自由而开源的。
+
+### GitUI:一个基于终端的 Git 工具
+
+[GitUI][2] 并不是第一个用于 Linux 终端的 Git 客户端。那么,是什么让 GitUI 与其他类似项目如 [lazygit][3] 或 [tig][4] 不同?
+
+GitUI 的开发者在项目的 README 文件中分享了一些基准数据。
+
+名称 | 时间 |内存(GB)| 二进制(MB)| 冻结 | 崩溃
+---|---|---|---|---|---
+gitui | 24 s | 0.17 | 1.4 | 否 | 否
+lazygit | 57 s | 2.6 | 16 | 是 | 有时
+tig | 4 m 20 s | 1.3 | 0.6 | 有时 | 否
+
+*GitUI、LazyGit 和 Tig 之间的比较。*
+
+这种优化大部分来自于 Rust 语言的使用。
+
+**注意:该程序处于早期开发阶段,还没有为生产做好准备。**
+
+### 在 Linux 上安装 GitUI
+
+不用说,你应该已经 [在你的系统上安装了 Git][5]。
+
+要使用 GitUI,首先需要 [为你的 Linux 发行版安装 Rust 支持][6]。
+
+在终端中,使用以下命令:
+
+```
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+```
+
+![Installing Rust on Linux][7]
+
+当你被要求选择时,请选择选项 1。当脚本完成安装后,用这个命令正确设置配置:
+
+```
+source $HOME/.cargo/env
+```
+
+现在你已经安装了 Rust 和它的包管理器 Cargo,使用 Cargo 命令来安装 GitUI:
+
+```
+cargo install gitui
+```
+
+然后你就可以使用 GitUI了,只需在终端输入 `gitui` 就可以运行了。我做了一些示例文件来测试 Git 和 GitUI。
+
+![Starting gitui on terminal][8]
+
+值得一提的是,这个界面有一个快速而直观的纯键盘控制。一切都很简单,只需输入正确的字母即可将文件暂存、提交、分支或推送到 git 仓库中。
+
+真正让我兴奋的是,你不仅可以做之前的四个动作,还可以**编辑**每个文件,**拉取**它,**追溯** 它,在其中**导航**等等,这一切都无需退出界面。 很棒,不是吗?
+
+![More functions inside the interface][9]
+
+祝贺你! 现在你知道了如何安装 GitUI 以及它在你的终端中的样子。
+
+如果你喜欢这个项目,请在 [GitHub][2] 上点赞它的仓库。如果你使用其他工具来管理 Git,请在评论区提出你的建议。
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/gitui/
+
+作者:[Marco Carmona][a]
+选题:[lujun9972][b]
+译者:[geekpi](https://github.com/geekpi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/marco/
+[b]: https://github.com/lujun9972
+[1]: https://itsfoss.com/basic-git-commands-cheat-sheet/
+[2]: https://github.com/Extrawurst/gitui
+[3]: https://github.com/jesseduffield/lazygit
+[4]: https://jonas.github.io/tig/
+[5]: https://itsfoss.com/install-git-ubuntu/
+[6]: https://itsfoss.com/install-rust-cargo-ubuntu-linux/
+[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/Installing-Rust-step-1.png?resize=800%2C471&ssl=1
+[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/Starting-GitUI-on-terminal.png?resize=800%2C471&ssl=1
+[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/More-functions-inside-the-interface.png?resize=800%2C471&ssl=1
diff --git a/published/202110/20211020 How to Install Rust and Cargo on Ubuntu and Other Linux Distributions.md b/published/202110/20211020 How to Install Rust and Cargo on Ubuntu and Other Linux Distributions.md
new file mode 100644
index 0000000000..a202318931
--- /dev/null
+++ b/published/202110/20211020 How to Install Rust and Cargo on Ubuntu and Other Linux Distributions.md
@@ -0,0 +1,174 @@
+[#]: subject: "How to Install Rust and Cargo on Ubuntu and Other Linux Distributions"
+[#]: via: "https://itsfoss.com/install-rust-cargo-ubuntu-linux/"
+[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
+[#]: collector: "lujun9972"
+[#]: translator: "perfiffer"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13938-1.html"
+
+如何在 Ubuntu 和其它的 Linux 发行版安装 Rust 和 Cargo
+======
+
+> 了解在 Linux 上安装 Rust 编程语言及其包管理器 Cargo 的各种方法。
+
+![](https://img.linux.net.cn/data/attachment/album/202110/31/150031j9e0xgeg9jpxeip0.jpg)
+
+自从 Mozilla 贡献了 [Rust][1] 语言之后,它就获得了更加突出和受欢迎的地位。口说无凭。[Rust 将被使用在 Linux 内核中][2],它是继 C 语言之后的第二种编程语言。
+
+许多开发人员也开始使用 Rust 语言制作很棒的基于命令行的工具。这些工具通常可以通过 [Cargo 包管理器][3] 获得。
+
+这就是为什么在 Linux 中安装 Rust 支持对程序员和最终用户都很重要的原因。
+
+官方 Rust 文档建议通过以下这种方式下载并执行安装程序脚本在 Linux 中安装 Rust:
+
+```
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+```
+
+这是可行的。但是,你的发行版可能已经打包了 Rust。使用你的发行版的 [包管理器][4] 也是一种选择。
+
+让我向你介绍官方 Rust 方式和包管理器方式的 Rust 安装步骤。
+
+### 方法1:使用官方方法在任意的 Linux 上安装 Rust
+
+这种方法有几个优点:
+
+ * 你可以获取最新的 Rust 和 Cargo 版本
+ * Rust 仅仅是为当前的用户安装,并不是所有用户
+ * 你并不需要 root 用户或者 `sudo` 权限就可以为自己安装 Rust
+
+一些人不喜欢从互联网下载并 [运行 shell][5] 脚本,即使它来自官方。但是,由于它不需要 root 访问权限并且脚本来自官方,因此以这种方式安装它应该是安全的。
+
+首先,确保你已经安装了 `curl`。如果没安装,使用你的发行版的包管理器安装它。你可以使用 `apt` 命令在 [Ubuntu 和 Debian 上安装 Curl][6]。
+
+```
+sudo apt install curl
+```
+
+接下来,使用这条命令下载脚本并运行它:
+
+```
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+```
+
+![][7]
+
+它会询问你输入所需的安装类型。选择选项 `1`:
+
+![][8]
+
+脚本完成安装后,你需要获取配置文件的来源,以使更改应用于你的 shell。
+
+![][9]
+
+应用文件:
+
+```
+source $HOME/.cargo/env
+```
+
+完成后,通过检查已安装的版本来验证 Rust 是否可用:
+
+```
+rustc --version
+```
+
+![Verifying Rust installation][10]
+
+太酷了。如果 Rust 发布了新版本,你可以使用如下命令更新已安装的版本:
+
+```
+rustup update
+```
+
+在你看到其它安装方法之前,让我快速展示如何移除以这种方式安装的 Rust。
+
+#### 删除以官方方式安装的 Rust
+
+在终端中,使用如下的命令从系统中移除 Rust:
+
+```
+rustup self uninstall
+```
+
+询问时按 `Y`,你将从系统中删除 Rust。
+
+![Removing Rust from Linux][11]
+
+官方方式安装已经完成。让我们看看如何使用 `apt` 命令在 Ubuntu 上安装 Rust。
+
+### 方法2:使用 apt 命令在 Ubuntu 上安装 Rust
+
+为什么要使用包管理器?
+
+ * 它在整个系统范围内安装 Rust,可供系统上的所有用户使用
+ * 它与其它系统更新一起集中更新(如果你的发行版添加了新版本的 Rust)
+
+Ubuntu 中有两个主要的 Rust 包:
+
+ * `rustc`:用于 Rust 编程语言的 Rust 编译器
+ * `cargo`:Cargo 是 Rust 的包管理器,它会自动安装 `rustc`
+
+作为一个普通用户,你将使用 Cargo 来安装基于 Rust 的应用程序。作为程序员,你需要 Cargo 来获取其它 Rust 包或创建自己的包。
+
+由于 `cargo` 包含 `rustc`,所以我建议安装它,以便一次性安装所有必需的软件包。
+
+```
+sudo apt install cargo
+```
+
+系统会要求你输入账号密码。
+
+![][12]
+
+当然,你可以自由使用 `apt install rustc`,只安装 Rust。这取决于你的选择。
+
+你可以验证是否为你和所有其他用户安装了 Rust(如果你愿意):
+
+![][13]
+
+很好。让我也快速展示卸载步骤。
+
+#### 使用 apt remove 移除 Rust
+
+要移除 Rust,你可以先移除 Cargo,然后使用 `autoremove` 命令移除随它安装的依赖项。
+
+```
+sudo apt remove cargo
+```
+
+现在运行 `autoremove`:
+
+```
+sudo apt autoremove
+```
+
+就是这样。你现在了解了在 Ubuntu 和其它 Linux 发行版上安装 Rust 的所有基本知识。随时欢迎提出问题和建议。
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/install-rust-cargo-ubuntu-linux/
+
+作者:[Abhishek Prakash][a]
+选题:[lujun9972][b]
+译者:[perfiffer](https://github.com/perfiffer)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://itsfoss.com/author/abhishek/
+[b]: https://github.com/lujun9972
+[1]: https://www.rust-lang.org/
+[2]: https://www.zdnet.com/article/rust-in-the-linux-kernel-why-it-matters-and-whats-happening-next/
+[3]: https://crates.io/
+[4]: https://itsfoss.com/package-manager/
+[5]: https://itsfoss.com/run-shell-script-linux/
+[6]: https://itsfoss.com/install-curl-ubuntu/
+[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/installing-rust-linux-1.png?resize=800%2C448&ssl=1
+[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/installing-rust-linux-2.png?resize=800%2C448&ssl=1
+[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/installing-rust-linux-3.png?resize=800%2C448&ssl=1
+[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/verify-rust-version.png?resize=800%2C236&ssl=1
+[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/remove-rust-linux.png?resize=800%2C378&ssl=1
+[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/install-rust-using-apt-ubuntu.png?resize=759%2C481&ssl=1
+[13]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/verify-rust-install-ubuntu.png?resize=741%2C329&ssl=1
diff --git a/published/202110/20211021 How to Convert a Webpage to PDF in Linux.md b/published/202110/20211021 How to Convert a Webpage to PDF in Linux.md
new file mode 100644
index 0000000000..aa2a32d884
--- /dev/null
+++ b/published/202110/20211021 How to Convert a Webpage to PDF in Linux.md
@@ -0,0 +1,133 @@
+[#]: subject: "How to Convert a Webpage to PDF in Linux"
+[#]: via: "https://itsfoss.com/convert-webpage-pdf-linux/"
+[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
+[#]: collector: "lujun9972"
+[#]: translator: "geekpi"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13928-1.html"
+
+如何在 Linux 下将网页转换为 PDF 文件
+======
+
+![](https://img.linux.net.cn/data/attachment/album/202110/28/111738tncncbml6jwcz6s8.jpg)
+
+当你将某些资源存档或用于教育目的时,将网页保存为 PDF 是很方便的。
+
+但是,你如何在 Linux 中把一个网页转换成 PDF?
+
+你可以选择使用每个 Linux 发行版上的网页浏览器(GUI),或者使用终端将网页变成 PDF 文件。
+
+在这里,我将提到这两种方法来帮助你完成工作。
+
+### 方法 1:使用网页浏览器将网页转换为 PDF 文件
+
+尽管我在本教程中使用的是 Mozilla Firefox,但你也可以用任何 [可用于 Linux 的最佳浏览器][1] 做同样的事情。
+
+![][2]
+
+1、加载你想转换的网页。
+
+2、在浏览器菜单中找到“**打印**”选项,或使用键盘快捷键 `Ctrl + P`。
+
+3、默认情况下,它应该让你把它保存为 PDF。你需要点击“保存”,然后选择目的地并保存网页。
+
+![Save webpage as PDF in Mozilla Firefox][3]
+
+这种简单方法的一个主要问题是,它包括页面上的所有元素。这可能包括评论、页脚等。你可以用一个 PDF 编辑器来删除部分内容,但这是一个额外的任务。
+
+更好的选择是利用一个浏览器扩展,如 [Print Friendly][4]。它允许你在下载 PDF 之前编辑和删除网页的部分内容。
+
+### 方法 2:使用终端将网页转换为 PDF 或图片
+
+你可能已经知道,你可以 [在 Linux 终端浏览互联网][5],甚至 [使用命令行下载文件][6]。这并不奇怪,因为你可以在终端中做更多的事情,包括将网页下载为 PDF。
+
+一个灵巧的开源命令行工具 `wkhtmltopdf` 和 `wkhtmltoimage` 可以帮到你,让你把任何 HTML 网页转换成 PDF 或图像文件。
+
+它使用 Qt WebKit 渲染引擎来完成这个任务。你可以浏览它的 [GitHub页面][7] 了解更多信息。
+
+你应该能够从你的 Linux 发行版的默认仓库中安装它。对于基于 Ubuntu 的发行版,你可以输入以下命令:
+
+```
+sudo apt install wkhtmltopdf
+```
+
+无论你想把它转换为 PDF 还是图像文件,它的使用都是非常直接的:
+
+![][8]
+
+要将一个网页转换成 PDF,请输入:
+
+```
+wkhtmltopdf URL/domain filename.pdf
+```
+
+比如,类似于这样:
+
+```
+wkhtmltopdf linuxmint.com mint.pdf
+```
+
+你可以选择使用 `https://linuxmint.com` 这样完整的 URL 或使用域名,如上面的例子所示。
+
+默认情况下,生成的文件将保存在主目录下。
+
+在转换网页时,你还可以得到一些好玩的选项。
+
+例如,你可以**对 PDF 文件应用灰度过滤器**,在同一文件中**制作多个页面副本**,以及在转换过程中**排除**图像。
+
+灰度过滤器不一定对每个网页都有效,但你可以用命令试试:
+
+```
+wkhtmltopdf -g google.com googlepage.pdf
+```
+
+要在同一个 PDF 文件中复制多个页面,命令是:
+
+```
+wkhtmltopdf --copies 2 linuxmint.com mint.pdf
+```
+
+而且,如果你想排除网页中的图像,只需输入:
+
+```
+wkhtmltopdf --no-images linuxmint.com mint.pdf
+```
+
+此外,如果你想把一个网页转换为图像,命令是这样的:
+
+```
+wkhtmltoimage linuxmint.com mint.png
+```
+
+注意,与使用浏览器的 GUI 方法不同,通过终端使用这些工具有其局限性。它似乎不能成功转换利用任何 `