From 677214f939d57a1f8a28a1dc19e6aef9396bccd4 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 28 Sep 2021 11:58:54 +0800 Subject: [PATCH 001/143] PRF @geekpi --- ... scripts on different operating systems.md | 102 +++++++++--------- 1 file changed, 48 insertions(+), 54 deletions(-) diff --git a/translated/tech/20210920 Use Vagrant to test your scripts on different operating systems.md b/translated/tech/20210920 Use Vagrant to test your scripts on different operating systems.md index 6d034b1ace..376e4351a5 100644 --- a/translated/tech/20210920 Use Vagrant to test your scripts on different operating systems.md +++ b/translated/tech/20210920 Use Vagrant to test your scripts on different operating systems.md @@ -3,29 +3,29 @@ [#]: author: "Ayush Sharma https://opensource.com/users/ayushsharma" [#]: collector: "lujun9972" [#]: translator: "geekpi" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " 使用 Vagrant 在不同的操作系统上测试你的脚本 ====== -Vagrant 可以帮助你在你的电脑上运行其他操作系统,这意味着你可以构建、测试、做古怪的事情而不毁坏你的系统。 -![Business woman on laptop sitting in front of window][1] -我使用 Vagrant 已经很长时间了。我使用几种 DevOps 工具,在一个系统上安装它们可能会变得很复杂。Vagrant 让你在不破坏系统的情况下做一些很酷的事情,因为你根本不需要在生产系统上做实验。 +> Vagrant 可以帮助你在你的电脑上运行其他操作系统,这意味着你可以构建、测试、疯狂折腾而不毁坏你的系统。 -如果你熟悉 [VirtualBox][2] 或 [GNOME Boxes][3],那么学习 Vagrant 很容易。Vagrant 有一个简单而干净的界面用于处理虚拟机。一个名为 `Vagrantfile` 的配置文件,允许你定制你的虚拟机(称为 _Vagrant boxes_)。一个简单的命令行界面让你启动、停止、暂停或销毁你的 box。 +![](https://img.linux.net.cn/data/attachment/album/202109/28/115827gv75kkrhnnhvkhcf.jpg) + +我使用 Vagrant 已经很长时间了。我使用几种 DevOps 工具,把它们全安装在一个系统上会搞得很乱。Vagrant 可以让你在不破坏系统的情况下随意折腾,因为你根本不需要在生产系统上做实验。 + +如果你熟悉 [VirtualBox][2] 或 [GNOME Boxes][3],那么学习 Vagrant 很容易。Vagrant 有一个简单而干净的界面用于管理虚拟机。一个名为 `Vagrantfile` 的配置文件,允许你定制你的虚拟机(称为 “Vagrant 盒子box”)。一个简单的命令行界面让你启动、停止、暂停或销毁你的“盒子”。 考虑一下这个简单的例子。 -假设你想写 Ansible 或 shell 脚本,在一个新的服务器上安装 Nginx。你不能在自己的系统上这样做,因为你可能没有运行想测试的操作系统,或者可能没有你想做的所有依赖项。启动新的云服务器进行测试可能会很费时和昂贵。这就是 Vagrant 派上用处的地方。你可以用它来启动一个虚拟机,用你的脚本来配置它,并证明一切按预期工作。然后,你可以删除这个 box,重新配置它,并重新运行你的脚本来验证它。你可以多次重复这个过程,直到你确信你的脚本在所有条件下都能工作。你可以将你的 Vagrant 文件提交给 Git,以确保你的团队正在测试完全相同的环境(因为他们将使用完全相同的测试机)。不再有“但它在我的机器上运行良好!”这事了。 +假设你想写 Ansible 或 shell 脚本,在一个新的服务器上安装 Nginx。你不能在你自己的系统上这样做,因为你运行的可能不是你想测试的操作系统,或者没有所有的依赖项。启动新的云服务器进行测试可能会很费时和昂贵。这就是 Vagrant 派上用处的地方。你可以用它来启动一个虚拟机,用你的脚本来配备provision它,并证明一切按预期工作。然后,你可以删除这个“盒子”,重新配备它,并重新运行你的脚本来验证它。你可以多次重复这个过程,直到你确信你的脚本在所有条件下都能工作。你可以将你的 Vagrantfile 提交给 Git,以确保你的团队正在测试完全相同的环境(因为他们将使用完全相同的测试机)。不会再有“但它在我的机器上运行良好!”这事了。 ### 开始使用 -First,[install Vagrant on your system][4]and then create a new folder to experiment in. In this new folder, create a new file namedwith these contents: 首先,[在你的系统上安装 Vagrant][4],然后创建一个新的文件夹进行实验。在这个新文件夹中,创建一个名为 `Vagrantfile` 的新文件,内容如下: - ``` Vagrant.configure("2") do |config| @@ -36,39 +36,37 @@ end 你也可以运行 `vagrant init ubuntu/hirsute64`,它将为你生成一个新的 Vagrant 文件。现在运行 `vagrant up`。这个命令将从 Vagrant 仓库中下载 `ubuntu/hirsuite64` 镜像。 - ``` Bringing machine 'default' up with 'virtualbox' provider... -==> default: Importing base box 'ubuntu/hirsute64'... -==> default: Matching MAC address for NAT networking... -==> default: Checking if box 'ubuntu/hirsute64' version '20210820.0.0' is up to date... -==> default: Setting the name of the VM: a_default_1630204214778_76885 -==> default: Clearing any previously set network interfaces... -==> default: Preparing network interfaces based on configuration... - default: Adapter 1: nat - default: Adapter 2: hostonly -==> default: Forwarding ports... - default: 22 (guest) => 2222 (host) (adapter 1) -==> default: Running 'pre-boot' VM customizations... -==> default: Booting VM... -==> default: Waiting for machine to boot. This may take a few minutes... - default: SSH address: 127.0.0.1:2222 - default: SSH username: vagrant - default: SSH auth method: private key - default: Warning: Remote connection disconnect. Retrying... - default: Warning: Connection reset. Retrying... - default: - default: Vagrant insecure key detected. Vagrant will automatically replace - default: this with a newly generated keypair for better security. - default: - default: Inserting generated public key within guest... - default: Removing insecure key from the guest if it's present... - default: Key inserted! Disconnecting and reconnecting using new SSH key... -==> default: Machine booted and ready! +==> default: Importing base box 'ubuntu/hirsute64'... +==> default: Matching MAC address for NAT networking... +==> default: Checking if box 'ubuntu/hirsute64' version '20210820.0.0' is up to date... +==> default: Setting the name of the VM: a_default_1630204214778_76885 +==> default: Clearing any previously set network interfaces... +==> default: Preparing network interfaces based on configuration... + default: Adapter 1: nat + default: Adapter 2: hostonly +==> default: Forwarding ports... + default: 22 (guest) => 2222 (host) (adapter 1) +==> default: Running 'pre-boot' VM customizations... +==> default: Booting VM... +==> default: Waiting for machine to boot. This may take a few minutes... + default: SSH address: 127.0.0.1:2222 + default: SSH username: vagrant + default: SSH auth method: private key + default: Warning: Remote connection disconnect. Retrying... + default: Warning: Connection reset. Retrying... + default: + default: Vagrant insecure key detected. Vagrant will automatically replace + default: this with a newly generated keypair for better security. + default: + default: Inserting generated public key within guest... + default: Removing insecure key from the guest if it's present... + default: Key inserted! Disconnecting and reconnecting using new SSH key... +==> default: Machine booted and ready! ``` -此时,如果你打开你的 Vagrant 后端(如 VirtualBox 或 virt-manager),你会看到你的 box 在那里。接下来,运行 `vagrant ssh` 登录到 box。如果你能看到 Vagrant 的提示,那么你就进入了! - +此时,如果你打开你的 Vagrant 后端(如 VirtualBox 或 virt-manager),你会看到你的“盒子”已经有了。接下来,运行 `vagrant ssh` 登录到“盒子”。如果你能看到 Vagrant 的提示符,那么你就进入了! ``` ~ vagrant ssh @@ -90,35 +88,31 @@ Welcome to Ubuntu 21.04 (GNU/Linux 5.11.0-31-generic x86_64) vagrant@ubuntu-hirsute:~$ ``` -Vagrant 使用“基础 box” 来启动你的本地机器。在我们的例子中,Vagrant 从 [Hashicorp 的 Vagrant 目录][5]下载 `ubuntu/hirsuite64` 镜像,并插入 VirtualBox 来创建实际的 box。 +Vagrant 使用“基础盒子”来建立你的本地机器。在我们的例子中,Vagrant 从 [Hashicorp 的 Vagrant 目录][5]下载 `ubuntu/hirsuite64` 镜像,并插入 VirtualBox 来创建实际的“盒子”。 ### 共享文件夹 -Vagrant 将你的当前文件夹映射到 Vagrant box 中的 `/vagrant`。这允许你在你的系统和 box 里保持文件同步。这对于测试 Nginx 网站是很好的,通过将你的文件根目录指向 `/vagrant`。你可以使用 IDE 进行修改,box 里的 Nginx 会提供这些修改。 +Vagrant 将你的当前文件夹映射到 Vagrant “盒子”中的 `/vagrant`。这允许你在你的系统和“盒子”里保持文件同步。这很适合测试 Nginx 网站,通过将你的文件根目录指向 `/vagrant`。你可以使用 IDE 进行修改,“盒子”里的 Nginx 会提供这些修改。 ### Vagrant 命令 -有几个 Vagrant 命令,你可以用它们来控制你的 box。 +有几个 Vagrant 命令,你可以用它们来控制你的“盒子”。 其中一些重要的命令是: - * `vagrant up`:启动一个 box。 - * `vagrant status`:显示当前 box 的状态。 - * `vagrant suspend`:暂停当前的 box。 - * `vagrant resume`:恢复当前的 box。 - * `vagrant halt`:关闭当前的 box。 - * `vagrant destroy`:销毁当前的 box。通过运行此命令,你将失去存储在 box 上的任何数据。 - * `vagrant snapshot`:对当前的 box 进行快照。 - - + * `vagrant up`:启动一个“盒子”。 + * `vagrant status`:显示当前“盒子”的状态。 + * `vagrant suspend`:暂停当前的“盒子”。 + * `vagrant resume`:恢复当前的“盒子”。 + * `vagrant halt`:关闭当前的“盒子”。 + * `vagrant destroy`:销毁当前的“盒子”。通过运行此命令,你将失去存储在“盒子”上的任何数据。 + * `vagrant snapshot`:对当前的“盒子”进行快照。 ### 试试 Vagrant -Vagrant 是一个使用 DevOps 原则进行虚拟机管理的经过时间考验的工具。配置你的测试机,与你的团队分享配置,并在一个可预测和可重复的环境中测试你的项目。如果你正在开发软件,那么通过使用 Vagrant 进行测试,你将为你的用户提供良好的服务。如果你不开发软件,但你喜欢尝试新版本的操作系统,那么没有比这更简单的方法了。今天就试试 Vagrant 吧! +Vagrant 是一个使用 DevOps 原则进行虚拟机管理的工具,久经时间考验。配置你的测试机,与你的团队分享配置,并在一个可预测和可重复的环境中测试你的项目。如果你正在开发软件,那么通过使用 Vagrant 进行测试,你将为你的用户提供良好的服务。如果你不开发软件,但你喜欢尝试新版本的操作系统,那么没有比这更简单的方法了。今天就试试 Vagrant 吧! -* * * - -_这篇文章最初发表在[作者的个人博客][6]上,经许可后被改编。_ +这篇文章最初发表在 [作者的个人博客][6] 上,经许可后被改编。 -------------------------------------------------------------------------------- @@ -127,7 +121,7 @@ via: https://opensource.com/article/21/9/test-vagrant 作者:[Ayush Sharma][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/) 荣誉推出 From b9112e94c49e1c7d995578b4fec6342ed9b1b788 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 28 Sep 2021 11:59:37 +0800 Subject: [PATCH 002/143] PUB @geekpi https://linux.cn/article-13829-1.html --- ...ant to test your scripts on different operating systems.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210920 Use Vagrant to test your scripts on different operating systems.md (99%) diff --git a/translated/tech/20210920 Use Vagrant to test your scripts on different operating systems.md b/published/20210920 Use Vagrant to test your scripts on different operating systems.md similarity index 99% rename from translated/tech/20210920 Use Vagrant to test your scripts on different operating systems.md rename to published/20210920 Use Vagrant to test your scripts on different operating systems.md index 376e4351a5..b105bb5413 100644 --- a/translated/tech/20210920 Use Vagrant to test your scripts on different operating systems.md +++ b/published/20210920 Use Vagrant to test your scripts on different operating systems.md @@ -4,8 +4,8 @@ [#]: collector: "lujun9972" [#]: translator: "geekpi" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13829-1.html" 使用 Vagrant 在不同的操作系统上测试你的脚本 ====== From 467856233549fbf5934c44709f7fe7c36b955fb1 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 28 Sep 2021 15:49:04 +0800 Subject: [PATCH 003/143] PRF @wxy --- ...inux- Shrine is ‘God-s Operating System.md | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/translated/tech/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md b/translated/tech/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md index 2fdc0afe51..f4f92efd9d 100644 --- a/translated/tech/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md +++ b/translated/tech/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md @@ -3,13 +3,15 @@ [#]: author: "John Paul https://itsfoss.com/author/john/" [#]: collector: "lujun9972" [#]: translator: "wxy" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " 不是 Windows,也不是 Linux,Shrine 才是 “神之操作系统” ====== +![](https://img.linux.net.cn/data/attachment/album/202109/28/154516dcc5u1a50zfn4abw.jpg) + 在生活中,我们都曾使用过多种操作系统。有些好,有些坏。但你能说你使用过由“神”设计的操作系统吗?今天,我想向你介绍 Shrine(圣殿)。 ### 什么是 Shrine? @@ -18,21 +20,21 @@ 从介绍里,你可能想知道这到底是怎么回事。嗯,这一切都始于一个叫 Terry Davis 的人。在我们进一步介绍之前,我最好提醒你,Terry 在生前患有精神分裂症,而且经常不吃药。正因为如此,他在生活中说过或做过一些不被社会接受的事情。 -总之,让我们回到故事的主线。在 21 世纪初,Terry 发布了一个简单的操作系统。多年来,它不停地换了几个名字,有 J Operating System、LoseThos 和 SparrowOS 等等。他最终确定了 [TempleOS][2] 这个名字。他选择这个名字(神庙系统)是因为这个操作系统将成为神的圣殿。因此,神给 Terry 的操作系统规定了以下 [规格][3]: +总之,让我们回到故事的主线。在 21 世纪初,Terry 发布了一个简单的操作系统。多年来,它不停地换了几个名字,有 J Operating System、LoseThos 和 SparrowOS 等等。他最终确定了 [TempleOS][2](神庙系统)这个名字。他选择这个名字是因为这个操作系统将成为“神的圣殿”。因此,“神”给 Terry 的操作系统规定了以下 [规格][3]: ![video](https://youtu.be/LtlyeDAJR7A) - * 它将有 640×480 的 16 色图形 - * 它将使用“单声道 8 位带符号的类似 MIDI 的声音采样” + * 它将有 640×480 的 16 色图形显示 + * 它将使用 “单声道 8 位带符号的类似 MIDI 的声音采样” * 它将追随 Commodore 64,即“一个非网络化的简单机器,编程是目标,而不仅仅是达到目的的手段” - * 它将只支持一个文件系统(名为 “Red Sea”)。 - * 它将被限制在 10 万行代码内,以使它 “整体易于学习”。 - * “只支持 Ring-0 级,一切都在内核模式下运行,包括用户应用程序 + * 它将只支持一个文件系统(名为 “Red Sea”) + * 它将被限制在 10 万行代码内,以使它 “整体易于学习” + * “只支持 Ring-0 级,一切都在内核模式下运行,包括用户应用程序” * 字体将被限制为 “一种 8×8 等宽字体” * “对一切都可以完全访问。所有的内存、I/O 端口、指令和类似的东西都绝无限制。所有的函数、变量和类成员都是可访问的” * 它将只支持一个平台,即 64 位 PC -Terry 用一种他称之为 HolyC(神圣 C 语言)的编程语言编写了这个操作系统。TechRepublic 称其为一种 “C++ 的修改版(‘比 C 多,比 C++ 少’)”。如果你有兴趣了解 HolyC,我推荐,[这篇文章][4] 和 [RosettaCode][5] 上的 HolyC 条目。 +Terry 用一种他称之为 HolyC(神圣 C 语言)的编程语言编写了这个操作系统。TechRepublic 称其为一种 “C++ 的修改版(‘比 C 多,比 C++ 少’)”。如果你有兴趣了解 HolyC,我推荐 [这篇文章][4] 和 [RosettaCode][5] 上的 HolyC 条目。 2013 年,Terry 在他的网站上宣布,TempleOS 已经完成。不幸的是,几年后的 2018 年 8 月,Terry 被火车撞死了。当时他无家可归。多年来,许多人通过他在该操作系统上的工作关注着他。大多数人对他在如此小的体积中编写操作系统的能力印象深刻。 @@ -45,6 +47,8 @@ Terry 用一种他称之为 HolyC(神圣 C 语言)的编程语言编写了 minexew 正计划在未来增加更多的功能,但还没有宣布具体会包括什么。他有计划为 Linux 制作一个完整的 TempleOS 环境。 +![video](https://youtu.be/UCgoxQCf5Jg) + ### 体验 让 Shrine 在虚拟机中运行是相当容易的。你所需要做的就是安装你选择的虚拟化软件。(我的是 VirtualBox)当你为 Shrine 创建一个虚拟机时,确保它是 64 位的,并且至少有 512MB 的内存。 @@ -62,7 +66,7 @@ via: https://itsfoss.com/shrine-os/ 作者:[John Paul][a] 选题:[lujun9972][b] 译者:[wxy](https://github.com/wxy) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 82f33618cb1d050fb215d92a1b8767979f6b1ba2 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 28 Sep 2021 15:50:28 +0800 Subject: [PATCH 004/143] PUB @wxy https://linux.cn/article-13831-1.html --- ...r Windows, nor Linux- Shrine is ‘God-s Operating System.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md (98%) diff --git a/translated/tech/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md b/published/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md similarity index 98% rename from translated/tech/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md rename to published/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md index f4f92efd9d..aac67eb493 100644 --- a/translated/tech/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md +++ b/published/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md @@ -4,8 +4,8 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13831-1.html" 不是 Windows,也不是 Linux,Shrine 才是 “神之操作系统” ====== From b4d5b2ea924ee6abd09fa70e2510507ededd5622 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 29 Sep 2021 05:02:50 +0800 Subject: [PATCH 005/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210929=20?= =?UTF-8?q?Troubleshooting=20=E2=80=9CBash:=20Command=20Not=20Found?= =?UTF-8?q?=E2=80=9D=20Error=20in=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210929 Troubleshooting -Bash- Command Not Found- Error in Linux.md --- ...Bash- Command Not Found- Error in Linux.md | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 sources/tech/20210929 Troubleshooting -Bash- Command Not Found- Error in Linux.md diff --git a/sources/tech/20210929 Troubleshooting -Bash- Command Not Found- Error in Linux.md b/sources/tech/20210929 Troubleshooting -Bash- Command Not Found- Error in Linux.md new file mode 100644 index 0000000000..3fd4ae17bb --- /dev/null +++ b/sources/tech/20210929 Troubleshooting -Bash- Command Not Found- Error in Linux.md @@ -0,0 +1,151 @@ +[#]: subject: "Troubleshooting “Bash: Command Not Found” Error in Linux" +[#]: via: "https://itsfoss.com/bash-command-not-found/" +[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Troubleshooting “Bash: Command Not Found” Error in Linux +====== + +_**This beginner tutorial shows how to go about fixing the Bash: command not found error on Debian, Ubuntu and other Linux distributions.**_ + +When you use commands in Linux, you expect to see an output. But sometimes, you’ll encounter issues where the terminal shows ‘command not found’ error. + +![][1] + +There is no straightforward, single solution to this error. You have to do a little bit of troubleshooting on your own. + +It’s not too difficult, honestly. The error gives some hint already when it says “bash: command not found”. Your shell (or Linux system) cannot find the command you entered. + +There could be three possible reasons why it cannot find the command: + + * It’s a typo and the command name is misspelled + * The command is not even installed + * The command is basically an executable script and its location is not known + + + +Let’s go in detail on each possible root cause. + +### Fixing “bash: command not found” error + +![][2] + +#### Method 1: Double check the command name (no, seriously) + +It is human to make mistakes, specially while typing. It is possible that the command you entered has a typo (spelling mistake). + +You should specially pay attention to: + + * The correct command name + * The spaces between the command and its options + * The use of 1 (numeral one), I (capital i) and l (lowercase L) + * Use of uppercase and lowercase characters + + + +Take a look at the example below, where I have misspelled the common ls command. + +![][3] + +So, make double sure what you are typing. + +#### Method 2: Ensure that the command is installed on your system + +This is another common reason behind the command not found error. You cannot run a command if it is not installed already. + +While your Linux distribution comes with a huge number of commands installed by default, it is not possible to pre-install all the command line tools in a system. If the command you are trying to run is not a popular, common command, you’ll have to install it first. + +You can use your distribution’s package manager to install it. + +![You may have to install the missing command][4] + +In some cases, popular commands may get discontinued and you may not even install it anymore. You’ll have to find an alternative command to achieve the result. + +Take the example of ipconfig command. This deprecated command was used for [getting Ip address][5] and other network interface information. Older tutorials on the web still mention using this command but you cannot use it anymore in newer Linux versions. It has been replaced by the ifconfig tool. + +![Some popular commands get discontinued over the time][1] + +Occasionally, your system won’t find even the extremely common commands. This is often the case when you are running a Linux distribution in Docker containers. To cut down on the size of the operating system image, the containers often do not include even the most common Linux commands. + +This is why Docker user stumble across things like [ping command not found error][6] etc. + +![Docker containers often have only a few commands installed][7] + +So, the solution is to either install the missing command or find a tool that could do the same thing you were trying to do with the missing command. + +#### Method 3: Check if it is an executable script with correct path + +This is a common mistake Linux rookies make while [running a shell script][8]. + +Even if you are in the same directory and try to run an executable script just by its name, it will show an error. + +``` +[email protected]:~/scripts# sample +-bash: sample: command not found +``` + +You need to either specify the shell interpreter explicitly or its absolute path. + +![][9] + +If you are in some other directory and try to execute the shell script without giving the correct path to the file, it will complain about not finding the file. + +![][10] + +##### Adding it to the PATH + +In some cases, you download the entire software in a tar file, extract it and find an executable file along with other program files. To run the program, you need to run the executable file. + +But for that, you need to be in the same directory or specify the entire path to the executable file. This is tiresome. + +Here, you can use the PATH variable. This variable has a collection of directories and these directories have the binary (executable) files of various Linux commands. When you run a command, your Linux system checks the mentioned directories in the PATH variable to look for the executable file of that command. + +You can check the location of the binary of a command by using the `which` command: + +![][11] + +If you want to run an executable file or script from anywhere on the system, you need to add the location of the file to this PATH variable. + +![][12] + +The PATH variable then needs to be added to the rc file of the shell so that the changes made to PATH variable is permanent. + +You get the gist here. It is important that your Linux system has the knowledge about the location of the executable script. Either you give the path while running it or you add its location to the PATH variable. + +### Did it help you? + +I understand that when you are new to Linux, things could be overwhelming. But when you understand the root cause of the problem, it gradually improved your knowledge. + +Here, there is no straightforward solution possible for the ‘command not found error’. I gave you some hints and pointers and that should help you in troubleshooting. + +If you still have doubt or need help, please let me know in the comment section. + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/bash-command-not-found/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/bash-command-not-found-error.png?resize=741%2C291&ssl=1 +[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/bash-command-not-found-error-1.png?resize=800%2C450&ssl=1 +[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/command-not-found-error.png?resize=723%2C234&ssl=1 +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/command-not-found-debian.png?resize=741%2C348&ssl=1 +[5]: https://itsfoss.com/check-ip-address-ubuntu/ +[6]: https://linuxhandbook.com/ping-command-ubuntu/ +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/ping-command-not-found-ubuntu.png?resize=786%2C367&ssl=1 +[8]: https://itsfoss.com/run-shell-script-linux/ +[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/bash-script-command-not-found-error-800x331.png?resize=800%2C331&ssl=1 +[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/script-file-not-found-error-800x259.png?resize=800%2C259&ssl=1 +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/path-location.png?resize=800%2C241&ssl=1 +[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/adding-executable-to-PATH-variable-linux.png?resize=800%2C313&ssl=1 From 1519d9a84be5940ba1a3bb334464120269be1593 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 29 Sep 2021 05:03:09 +0800 Subject: [PATCH 006/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210929=20?= =?UTF-8?q?How=20to=20Install=20and=20Setup=20Flutter=20Development=20on?= =?UTF-8?q?=20Ubuntu=20and=20Other=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210929 How to Install and Setup Flutter Development on Ubuntu and Other Linux.md --- ...r Development on Ubuntu and Other Linux.md | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 sources/tech/20210929 How to Install and Setup Flutter Development on Ubuntu and Other Linux.md diff --git a/sources/tech/20210929 How to Install and Setup Flutter Development on Ubuntu and Other Linux.md b/sources/tech/20210929 How to Install and Setup Flutter Development on Ubuntu and Other Linux.md new file mode 100644 index 0000000000..11263c6eab --- /dev/null +++ b/sources/tech/20210929 How to Install and Setup Flutter Development on Ubuntu and Other Linux.md @@ -0,0 +1,191 @@ +[#]: subject: "How to Install and Setup Flutter Development on Ubuntu and Other Linux" +[#]: via: "https://itsfoss.com/install-flutter-linux/" +[#]: author: "Community https://itsfoss.com/author/itsfoss/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How to Install and Setup Flutter Development on Ubuntu and Other Linux +====== + +Google’s UI toolkit Flutter is getting increasingly popular for creating cross-platform applications for the mobile, web and desktop. + +[Flutter][1] is not a programming language but a software development kit. [Dart][2] is the programming language used underneath the Flutter SDK. + +Flutter is the main framework behind Google’s open source Fuchsia OS, Google STADIA and many other software and mobile apps. + +If you want to start developing with Flutter, this tutorial will help you to get your set-up ready on Ubuntu and hopefully other Linux distributions. + +### Installing Flutter on Ubuntu and other Linux with Snap + +The easiest way to install Flutter on Linux is by using Snap. If you are using Ubuntu, you already have got Snap. _**For other distributions, please make sure to [enable Snap support][3].**_ + +[Open a terminal][4] and use the following command in a terminal to install Flutter: + +``` +sudo snap install flutter --classic +``` + +You’ll see something like this on your terminal: + +![][5] + +Once the installation completes, it is time to verify it. Not just Flutter installation but also verify every dependency that needs to be satisfied for Flutter to function properly. + +#### Verify Flutter dependencies + +To verify that every dependency, for the correct work of Flutter, is installed, Flutter has a built-in option: + +``` +flutter doctor +``` + +The process will start, looking like this: + +![][6] + +And it will be finishing like this: + +![][7] + +As you can see, we need Android Studio for working. So let’s install it. How do we do that? [Installing Android Studio on Linux][8] is also effortless with Snap. + +#### Install and set up Android Studio + +In a terminal, use the following command to get Android Studio installed: + +``` +sudo snap install android-studio --classic +``` + +![][9] + +Once installed, open Android Studio from our operating system menu. + +![][10] + +You are almost done. It’s time for configuring Android Studio. + +![][11] + +Click next and select standard if you don’t want to complicate things. + +![][12] + +Select your preferred theme (I like the Dark one). + +![][13] + +Verify that everything is OK and click on Next. + +![][14] + +Finally, hit the Finish button. + +![][15] + +And wait until the download is finished. + +![][16] + +### Creating a sample Hello World Flutter app + +In Android Studio, go to Projects and select New Flutter Project. Flutter SDK path will be set by default. + +![][17] + +And here is where the magic starts to appear because this is where you set your project name, which in this case it will be called hello_world. + +Let’s select the three available platforms: **Android, iOS, and Web**. And finally, click on Finish. + +![][18] + +The principal file in the projects is located in `lib/main.dart`, as is shown in the next image. + +![][19] + +Once selected, erase everything contained inside the file and change it for this sample code: + +``` +// Copyright 2018 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +void main() => runApp(MyApp()); + +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Welcome to Flutter', + home: Scaffold( + appBar: AppBar( + title: const Text('Welcome to Flutter'), + ), + body: const Center( + child: Text('Hello World'), + ), + ), + ); + } +} +``` + +It’s important to say that this is only for showing you how Flutter works, in case you’re convinced about learning this beautiful and incredible language, here is the [Documentation][20] to see more about it. **Try** it! + +Finally, select **Chome Web** device and do click on the **Run** button, as is shown below; and see the magic! + +![][21] + +It’s incredible how fast you can create a Flutter project. Say hello to your Hello World project. + +![][22] + +### In the end… + +Flutter and Dart are perfect if you want to contribute with beautiful mobile and Web interfaces in a short time. + +Now you know how to install Flutter on Ubuntu Linux and how to create your first app with it. I really enjoyed writing this post for you, hoping this helps you and if you have any questions, please let me know by leaving a comment or sending me an email to [[email protected]][23] Good luck! + +_**Tutorial contributed by Marco Antonio Carmona Galván, a student of physics and data science.**_ + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-flutter-linux/ + +作者:[Community][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/itsfoss/ +[b]: https://github.com/lujun9972 +[1]: https://flutter.dev/ +[2]: https://dart.dev/ +[3]: https://itsfoss.com/install-snap-linux/ +[4]: https://itsfoss.com/open-terminal-ubuntu/ +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/installing-flutter-ubuntu.png?resize=786%2C195&ssl=1 +[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/verify-flutter-install.png?resize=786%2C533&ssl=1 +[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/Flutter-verification-completes.png?resize=786%2C533&ssl=1 +[8]: https://itsfoss.com/install-android-studio-ubuntu-linux/ +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/install-android-studio-linux-snap.png?resize=786%2C187&ssl=1 +[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/Open_Android_Studio.webp?resize=800%2C450&ssl=1 +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/Setting-Up-Android-Studio-1.png?resize=800%2C603&ssl=1 +[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/Setting-Up-Android-Studio-2.png?resize=800%2C603&ssl=1 +[13]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/Setting-Up-Android-Studio-3.png?resize=800%2C603&ssl=1 +[14]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/Setting-Up-Android-Studio-4.png?resize=800%2C603&ssl=1 +[15]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/Setting-Up-Android-Studio-5.png?resize=800%2C603&ssl=1 +[16]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/Setting-Up-Android-Studio-6.png?resize=800%2C603&ssl=1 +[17]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/New_flutter_project.png?resize=800%2C639&ssl=1 +[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/sample-flutter-project.png?resize=800%2C751&ssl=1 +[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/sample-flutter-project-1.png?resize=800%2C435&ssl=1 +[20]: https://flutter.dev/docs +[21]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/sample-flutter-project-2.png?resize=800%2C450&ssl=1 +[22]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/sample-flutter-project-3.png?resize=800%2C549&ssl=1 +[23]: https://itsfoss.com/cdn-cgi/l/email-protection From 529a4947978f07c39929bd86f48df01c3f3d0d1c Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 29 Sep 2021 05:03:27 +0800 Subject: [PATCH 007/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210929=20?= =?UTF-8?q?Dialect:=20An=20Open-Source=20Translation=20App=20for=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md --- ...n Open-Source Translation App for Linux.md | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md diff --git a/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md b/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md new file mode 100644 index 0000000000..816f82b4be --- /dev/null +++ b/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md @@ -0,0 +1,102 @@ +[#]: subject: "Dialect: An Open-Source Translation App for Linux" +[#]: via: "https://itsfoss.com/dialect/" +[#]: author: "Ankush Das https://itsfoss.com/author/ankush/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Dialect: An Open-Source Translation App for Linux +====== + +_**Brief:** Dialect is a straightforward app that lets you translate between languages using web services. To explore more, let us take a closer look._ + +While you can launch the web browser and directly use any translation service to get the job done, a desktop app can sometimes come in handy. + +Dialect is a simple translation app that utilizes web services to translate while giving you some extra abilities. + +### Open-Source Translation App with Google Translate & LibreTranslate + +![][1] + +Dialect is primarily an app tailored for GNOME desktops, but it should work fine with other desktop environments. + +It lets you quickly translate languages along with a few extra options. + +At its core, it lets you choose between Google Translate or LibreTranslate as the translation service. + +Even though LibreTranslate cannot come close to Google Translate’s accuracy, featuring it as an option to switch is an excellent addition. At least, for some basic usage, if a user does not want to utilize Google’s services, you have an alternative ready on your desktop. + +### Features of Dialect + +![][2] + +Along with the ability to switch translation services, you get a few more tweaks: + + * Pronunciation + * Text to Speech functionality (Google) + * Dark mode + * Translation shortcut + * Live Translation + * Clipboard buttons to quickly copy/paste + * Translation history (undo/redo) + + + +As you can notice in the screenshot, the live translation feature may get your IP addressed banned from using the service because of API abuse. + +![][3] + +I tried using LibreTranslate (as shown in the image above) and Google Translate with the live translation feature enabled, and it worked fine. + +Maybe if you rely on translations quite often, you may want to avoid the feature. But, for my quick usage, the services didn’t ban by IP address for quite a few test runs. + +It is important to note that you can specify a custom LibreTranslate instance if you want. By default, it uses “translate.astian.org” as the instance. + +You may not find a separate translation history section, but the arrow buttons in the top-left corner of the window will let you see your previous translations and the translation settings as well. + +So, it works as a redo/undo feature as well. + +### Installing Dialect in Linux + +Dialect is available as a [Flatpak][4]. So, you should be able to install it on any Linux distro of your choice. If you are new to this, you might want to check out our [Flatpak guide][5] for help. + +First, add Flathub repo: + +``` +flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +``` + +And then install the application: + +``` +flatpak install flathub com.github.gi_lom.dialect +``` + +Once installed, look for it in the system menu and start it from there. + +You can also explore its [GitHub page][6] for more information. + +[Dialect][7] + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/dialect/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-screenshot.png?resize=800%2C331&ssl=1 +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-app-options.png?resize=800%2C470&ssl=1 +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-libretranslate.png?resize=800%2C326&ssl=1 +[4]: https://itsfoss.com/what-is-flatpak/ +[5]: https://itsfoss.com/flatpak-guide/ +[6]: https://github.com/dialect-app/dialect/ +[7]: https://flathub.org/apps/details/com.github.gi_lom.dialect From ef2cb99e7cb80dc2ab42d91636984e20c65ffff1 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 29 Sep 2021 05:04:06 +0800 Subject: [PATCH 008/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210928=20?= =?UTF-8?q?Convert=20your=20Raspberry=20Pi=20into=20a=20trading=20bot=20wi?= =?UTF-8?q?th=20Pythonic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210928 Convert your Raspberry Pi into a trading bot with Pythonic.md --- ...rry Pi into a trading bot with Pythonic.md | 509 ++++++++++++++++++ 1 file changed, 509 insertions(+) create mode 100644 sources/tech/20210928 Convert your Raspberry Pi into a trading bot with Pythonic.md diff --git a/sources/tech/20210928 Convert your Raspberry Pi into a trading bot with Pythonic.md b/sources/tech/20210928 Convert your Raspberry Pi into a trading bot with Pythonic.md new file mode 100644 index 0000000000..c8d236dce4 --- /dev/null +++ b/sources/tech/20210928 Convert your Raspberry Pi into a trading bot with Pythonic.md @@ -0,0 +1,509 @@ +[#]: subject: "Convert your Raspberry Pi into a trading bot with Pythonic" +[#]: via: "https://opensource.com/article/21/9/raspberry-pi-trading-bot" +[#]: author: "Stephan Avenwedde https://opensource.com/users/hansic99" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Convert your Raspberry Pi into a trading bot with Pythonic +====== +Reduce your power consumption by setting up your cryptocurrency trading +bot on a Raspberry Pi. +![A dollar sign in a network][1] + +The current popularity of cryptocurrencies also includes trading in them. Last year, I wrote an article *[How to automate your cryptocurrency trades with Python][2] *which covered the setup of a trading bot based on the graphical programming framework [Pythonic][3], which I developed in my leisure. At that time, you still needed a desktop system based on x86 to run Pythonic. In the meantime, I have reconsidered the concept (web-based GUI). Today, it is possible to run Pythonic on a Raspberry Pi, which mainly benefits the power consumption because such a trading bot has to be constantly switched on. + +That previous article is still valid. If you want to create a trading bot based on the old version of Pythonic (0._x_), you can install it with `pip3 install Pythonic==0.19`. + +This article covers the setup of a trading bot running on a Raspberry Pi and executing a trading algorithm based on the [EMA crossover strategy][4]. + +### Install Pythonic on your Raspberry Pi + +Here, I only briefly touch on the subject of installation because you can find detailed installation instructions for Pythonic in my last article [_Control your Raspberry Pi remotely with your smartphone_][5]. In a nutshell: Download the Raspberry Pi image from [sourceforge.net][6] and flash it on the SD card. + +The PythonicRPI image has no preinstalled graphical desktop, so to proceed, you should be able to access the programming web GUI (http : //PythonicRPI:7000/): + +![Pythonic GUI overview][7] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +#### Example code + +Download the example code for the trading bot from [GitHub][9] (direct download link) and unzip the archive. The archive contains three different file types: + + * `\*.py-files`: Contains the actual implementation of certain functionality + * `current_config.json`: This file describes the configured elements, the links between the elements, and the variable configuration of elements + * `jupyter/backtest.ipynb`: A [Jupyter][10] notebook for backtesting + * `jupyter/ADAUSD_5m.df`: A minimal OHLCV dataset which I use in this example + + + +With the green outlined button, upload the `current_config.json` to the Raspberry Pi. You can upload only valid configuration files. With the yellow outlined button, upload all the `\*.py `files.  + +![Upload toolbar buttons][11] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +The `\*.py `files are uploaded to `/home/pythonic/Pythonic/executables` whereas the `current_config.json` is uploaded to `/home/pythonic/Pythonic/current_config.json`. After uploading the `current_config.json`, you should see a screen like this: + +![Pythonic screen after upload of config.json][12] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +Now I'll go step-by-step through each part of the trading bot. + +### Data acquisition + +Like in the last article, I begin with the data acquisition: + +![Pythonic area 2 data acquisition ][13] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +The data acquisition can be found on the **Area 2** tab and runs independently from the rest of the bot. It implements the following functionality: + + * **AcqusitionScheduler**: Trigger subsequent elements every five minutes + * **OHLCV_Query**: Prepares the OHLCV query method + * **KrakenConnector**: Establishes a connection with the Kraken cryptocurrency exchange + * **DataCollector**: Collect and process the new OHLCV data + + + +The _DataCollector_ gets a Python list of OHLCV data with a prefixed timestamp and converts it into a [Pandas DataFrame][14]. Pandas is a popular library for data analysis and manipulation. A _DataFrame_ is the base type for data of any kind to which arithmetic operation can be applied. + +The task of the DataCollector (`generic_pipe_3e059017.py`) is to load an existing DataFrame from file, append the latest OHLCV data, and save it back to file.  + + +``` +import time, queue +import pandas as pd +from pathlib import Path + +try: +    from element_types import Record, Function, ProcCMD, GuiCMD +except ImportError: +    from Pythonic.element_types import Record, Function, ProcCMD, GuiCMD + +class Element(Function): + +    def __init__(self, id, config, inputData, return_queue, cmd_queue): +        super().__init__(id, config, inputData, return_queue, cmd_queue) +         +    def execute(self): +        df_in = pd.DataFrame(self.inputData, columns=['close_time', 'open', 'high', 'low', 'close', 'volume']) +        df_in['close_time'] = df_in['close_time'].floordiv(1000) # remove milliseconds from timestamp + +        file_path = Path.home() / 'Pythonic' / 'executables' / 'ADAUSD_5m.df' + +        try: +            # load existing dataframe +            df = pd.read_pickle(file_path) +            # count existing rows +            n_row_cnt = df.shape[0] +            # concat latest OHLCV data +            df = pd.concat([df,df_in], ignore_index=True).drop_duplicates(['close_time']) +            # reset the index +            df.reset_index(drop=True, inplace=True) +            # calculate number of new rows +            n_new_rows = df.shape[0] - n_row_cnt +            log_txt = '{}: {} new rows written'.format(file_path, n_new_rows) + +        except Exception as e: +            log_txt = 'File error - writing new one' +            df = df_in  +             +        # save dataframe to file +        df.to_pickle(file_path) + +        logInfo = Record(None, log_txt) +        self.return_queue.put(logInfo) +``` + +This code is executed every full five minutes as the OHLCV data is also in 5-minute intervals. + +By default, the _OHLCV_Query_ element only downloads the dataset for the latest period. To have some data for developing the trading algorithm, right-click the **OHLCV_Query** element to open the configuration, set the _Limit_ to 500, and trigger the **AcquisitionScheduler**. This causes the download of 500 OHLCV values: + +![OHLCV_Query configuration][15] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +### Trading strategy + +Our trading strategy will be the popular [EMA crossover strategy][4]. The EMA indicator is a weighted moving average over the last _n_ close prices that gives more weight to recent price data. You calculate two EMA series, one for a longer period (for example, _n_ = 21, blue line) and one for a shorter period (for example, _n_ = 10, yellow line).  + +![Pythonic trading data graph][16] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +The bot should place a buy order (green circle) when the shorter-term EMA crosses above the longer-term EMA. The bot should place a sell order when the shorter-term EMA crosses below the longer-term EMA (orange circle). + +### Backtesting with Jupyter + +The example code on [GitHub][9] (direct download link) also contains a [Jupyter Notebook][10] file (`backtesting.ipynb`)  which you use to test and develop the trading algorithm. + +**Note:** Jupyter is not preinstalled on the Pythonic Raspberry Pi image. You can either install it also on the Raspberry Pi or install it on your regular PC. I  recommend the latter, as you will do some number crunching that is much faster on an ordinary x86 CPU. + +Start Jupyter and open the notebook. Make sure to have a DataFrame, downloaded by the _DataCollector_, available. With **Shift**+**Enter**, you can execute each cell individually. After executing the first three cells, you should get an output like this: + +![Output after executing the first three cells][17] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +Now calculate the EMA-10 and EMA-21 values. Luckily, pandas offers you the `ewm` function, which does exactly what is needed. The EMA values are added as separate columns to the DataFrame: + +![EMA values added as separate columns to dataframe][18] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +To determine if a buy or sell condition is met, you have to consider these four variables: + + * **emaLong0**: Current long-term (_ema-21_) EMA value + * **emaLong1**: Last long-term (_ema-21_) EMA value (the value before emaLong0) + * **emaShort0**: Current short-term (_ema-10_) EMA value + * **emaShort1**: Last short-term (_ema-10_) EMA value (the value before emaShort0) + + + +When the following situation comes into effect, a buy condition is met: + +![Buy condition met][19] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +In Python code: + + +``` +`emaLong1 > emaShort1 and emaShort0 > emaLong0` +``` + +A sell condition is met in the following situation: + +![Sell condition met][20] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +In Python code: + + +``` +`emaShort1 > emaLong1 and emaLong0 > emaShort0` +``` + +To test the DataFrame and evaluate the possible profit you could make, you could either iterate over each row and test for these conditions or, with a smarter approach, filter the dataset to only the relevant rows with built-in methods from Pandas. + +Under the hood, Pandas uses [NumPy][21], which is the method of choice for fast and efficient data operation on arrays. This is, of course, convenient because the later use is to take place on a Raspberry Pi with an ARM CPU. + +For the sake of clarity, the DataFrame from the example (`ADAUSD_5m.df`) with only 20 entries is used in the following examples. The following code appends a column of boolean values dependent on the condition `emaShort0 > emaLong0`: + +![Dataframe with 20 entries][22] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +The place of interest is when a _False_ switches to _True_ (buy) or when _True_ switches to _False_. To filter them apply a `diff` operation to the _condition_ column. The `diff `operation calculates the difference between the current and the previous line. In terms of boolean values, it results in: + + * _False_ `diff` _False_ = _False_ + * _False_ `diff` _True_ = _True_ + * _True_ `diff` _True_ = _False_ + * _True_ `diff` _False_ = _True_ + + + +With the following code, you apply the `diff` operation as a filter to the *condition *column without modifying it: + +![Applying the diff operation][23] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +As a result, you get the desired data: The first row (index 2) signalizes a buy condition and the second row (index 8) signalizes a sell condition. As you now have an efficient way of extracting relevant data, you can calculate possible profit. + +To do so, you have to iterate through the rows and calculate the possible profit based on simulated trades. The variable `bBought` saves the state if you already bought, and `buyPrice` stores the price you bought between the iterations. You also skip the first sell indicator as it doesn't make sense to sell before you've even bought. + + +``` +profit   = 0.0 +buyPrice = 0.0 +bBought  = False + +for index, row, in trades.iterrows(): +     +    # skip first sell-indicator +    if not row['condition'] and not bBought: +        continue +     +    # buy-indication +    if row['condition'] and not bBought: +        bBought = True +        buyPrice = row['close'] +         +         +    # sell-indication +    if not row['condition'] and bBought: +        bBought = False +        sellPrice = row['close'] + +        orderProfit = (sellPrice * 100) / buyPrice - 100 +         +        profit += orderProfit +``` + +Your one-trade mini dataset would provide you the following profit: + +![One-trade mini dataset profit][24] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +**Note:** As you can see, the strategy would have given a terrible result as you would have bought at $2.5204 and sold at  $2.5065, causing a loss of 0.55% (order fees not included). However, this is a real-world scenario: One strategy does not work for each scenario. It is on you to find the most promising parameters (for example, using OHLCV on an hourly basis would make more sense in general). + +### Implementation + +You can find the implementation of the decision on the **Area 1** tab.  + +![Decision-making implementation on area 1][25] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +It implements the following functionality: + + * **BotScheduler**: Same as the AcqusitionScheduler: Trigger subsequent elements every five minutes + * **Delay**: Delay the execution for 30 seconds to make sure that the latest OHLCV data was written to file + * **Evaluation**: Make the trading decision based on the EMA crossover strategy + + + +You now know how the decision makings work, so you can take a look at the actual implementation. Open the file `generic_pipe_29dfc189.py`. It corresponds to the **Evaluation** element on the screen: + + +``` +@dataclass +class OrderRecord: +    orderType:          bool  # True = Buy, False = Sell +    price:              float # close price +    profit:             float # profit in percent +    profitCumulative:   float # cumulative profit in percent + +class OrderType(Enum):  +    Buy  = True +    Sell = False + +class Element(Function): + +    def __init__(self, id, config, inputData, return_queue, cmd_queue): +        super().__init__(id, config, inputData, return_queue, cmd_queue) + +    def execute(self): + +        ### Load data ### + +        file_path = Path.home() / 'Pythonic' / 'executables' / 'ADAUSD_5m.df' + +        # only the last 21 columsn are considered +        self.ohlcv = pd.read_pickle(file_path)[-21:] + +        self.bBought             = False +        self.lastPrice           = 0.0 +        self.profit              = 0.0 +        self.profitCumulative    = 0.0    +        self.price               = self.ohlcv['close'].iloc[-1] +         +        # switches for simulation + +        self.bForceBuy  = False +        self.bForceSell = False + +        # load trade history from file +        self.trackRecord = ListPersist('track_record') + +        try: +            lastOrder = self.trackRecord[-1] + +            self.bBought          = lastOrder.orderType +            self.lastPrice        = lastOrder.price +            self.profitCumulative = lastOrder.profitCumulative + +        except IndexError: +            pass +         +        ### Calculate indicators ### + +        self.ohlcv['ema-10'] = self.ohlcv['close'].ewm(span = 10, adjust=False).mean() +        self.ohlcv['ema-21'] = self.ohlcv['close'].ewm(span = 21, adjust=False).mean() +        self.ohlcv['condition'] = self.ohlcv['ema-10'] > self.ohlcv['ema-21'] +         +        ### Check for Buy- / Sell-condition ### +        tradeCondition = self.ohlcv['condition'].iloc[-1] != self.ohlcv['condition'].iloc[-2] + +        if tradeCondition or self.bForceBuy or self.bForceSell: + +            orderType = self.ohlcv['condition'].iloc[-1] # True = BUY, False = SELL + +            if orderType and not self.bBought or self.bForceBuy: # place a buy order +                 +                msg         = 'Placing a  Buy-order' +                newOrder    = self.createOrder(True) + +            elif not orderType and self.bBought or self.bForceSell: # place a sell order + +                msg = 'Placing a  Sell-order' + +                sellPrice   = self.price +                buyPrice    = self.lastPrice + +                self.profit = (sellPrice * 100) / buyPrice - 100 +                self.profitCumulative += self.profit + +                newOrder = self.createOrder(False) + +            else: # Something went wrong +                msg = 'Warning: Condition for {}-order met but bBought is {}'.format(OrderType(orderType).name, self.bBought) +                newOrder = None +             + +            recordDone = Record(newOrder, msg)      +            self.return_queue.put(recordDone) + +    def createOrder(self, orderType: bool) -> OrderRecord: +         +        newOrder = OrderRecord( +                orderType=orderType, +                price=self.price, +                profit=self.profit, +                profitCumulative=self.profitCumulative +            ) +         +        self.trackRecord.append(newOrder) + +        return newOrder +``` + +As the general process is not that complicated, I want to highlight some of the peculiarities: + +##### Input data + +The trading bot only processes the last 21 elements as this is the range you consider when calculating the exponential moving average: + + +``` +`   self.ohlcv = pd.read_pickle(file_path)[-21:]` +``` + +##### Track record + +The type _ListPersist_ is an extended Python list object that writes itself to the file system when modified (when elements get added or removed). It creates the file `track_record.obj` under `~/Pythonic/executables/` once you run it the first time. + + +``` +`  self.trackRecord = ListPersist('track_record')` +``` + +Maintaining a track record helps to keep the state of recent bot activity. + +##### Plausibility + +The algorithm outputs an object of the type _OrderRecord_ in case conditions for a trade are met. It also keeps track of the overall situation: For example, if a buy signal was received, but `bBought` indicates that you already bought before, something must've gone wrong: + + +``` +else: # Something went wrong +    msg = 'Warning: Condition for {}-order met but bBought is {}'.format(OrderType(orderType).name, self.bBought) +    newOrder = None +``` + +In this scenario, _None_ is returned with a corresponding log message. + +### Simulation + +The Evaluation element (`generic_pipe_29dfc189.py`) contains these switches which enable you to force the execution of a buy or sell order: + + +``` +self.bForceBuy  = False +self.bForceSell = False +``` + +Open the code server IDE (http : //PythonicRPI:8000/), load `generic_pipe_29dfc189.py `and set one of the switches to _True_. Attach with the debugger and add a breakpoint where the execution path enters the _inner if_ conditions. + +![Add breakpoint for inner if conditions][26] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +Now open the programming GUI, add a **ManualScheduler **element (configured to _single fire_) and connect it directly to the **Evaluation** element to trigger it manually: + +![Add manual scheduler element][27] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +Click the play button. The **Evaluation **element is triggered directly, and the debugger stops at the previously set breakpoint. You are now able to add, remove, or modify orders from the track record manually to simulate certain scenarios: + +![Manually simulate scenarios ][28] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +Open the log message window (green outlined button) and the output data window (orange outlined button): + +![Pythonic trading output buttons][29] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +You will see the log messages and output of the **Evaluation** element and thus the behavior of the decision-making algorithm based on your input: + +### + +[19_pythonic_trading_simulate_orders_2.png][30] + +![Log messages and output of evaluation element][31] + +(Stephan Avenwedde, [CC BY-SA 4.0][8]) + +Summary + +The example stops here. The final implementation could notify the user about a trade indication, place an order on an exchange, or query the account balance in advance. At this point, you should feel that everything connects and be able to proceed on your own.  + +Using Pythonic as a base for your trading bot is a good choice because it runs on a Raspberry Pi, is entirely accessible by a web browser, and already has logging features. It is even possible to stop on a breakpoint without disturbing the execution of other tasks using Pythonic's multiprocessing capabilities. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/raspberry-pi-trading-bot + +作者:[Stephan Avenwedde][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hansic99 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/osdc_whitehurst_money.png?itok=ls-SOzM0 (A dollar sign in a network) +[2]: https://opensource.com/article/20/4/python-crypto-trading-bot +[3]: https://github.com/hANSIc99/Pythonic +[4]: https://www.investopedia.com/articles/active-trading/052014/how-use-moving-average-buy-stocks.asp +[5]: https://opensource.com/article/21/9/raspberry-pi-remote-control +[6]: https://sourceforge.net/projects/pythonicrpi/ +[7]: https://opensource.com/sites/default/files/uploads/1_pythonic_trading_clear_2.png (Pythonic GUI overview) +[8]: https://creativecommons.org/licenses/by-sa/4.0/ +[9]: https://github.com/hANSIc99/Pythonic/raw/master/examples/trading_bot_crossing_ema/trading_bot_crossing_ema.zip +[10]: https://jupyter.org/ +[11]: https://opensource.com/sites/default/files/uploads/2_pythonic_trading_upload_buttons.png (Upload toolbar buttons) +[12]: https://opensource.com/sites/default/files/uploads/3_pythonic_trading_sample_loaded_2.png (Pythonic screen after upload of config.json) +[13]: https://opensource.com/sites/default/files/uploads/4_pythonic_trading_data_acquisition.png (Pythonic area 2 data acquisition) +[14]: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html +[15]: https://opensource.com/sites/default/files/uploads/5_pythonic_trading_ohlcv_limit.png (OHLCV_Query configuration) +[16]: https://opensource.com/sites/default/files/uploads/6_pythonic_trading_ohlcv_data.png (Pythonic trading data graph) +[17]: https://opensource.com/sites/default/files/uploads/7_pythonic_trading_jupyter_a.png (Output after executing the first three cells) +[18]: https://opensource.com/sites/default/files/uploads/8_pythonic_trading_jupyter_calc_ema.png (EMA values added as separate columns to dataframe) +[19]: https://opensource.com/sites/default/files/uploads/9_pythonic_trading_buy_condition.png (Buy condition met) +[20]: https://opensource.com/sites/default/files/uploads/10_pythonic_trading_sell_condition.png (Sell condition met) +[21]: https://numpy.org/ +[22]: https://opensource.com/sites/default/files/uploads/11_pythonic_trading_jupyter_condition.png (Dataframe with 20 entries) +[23]: https://opensource.com/sites/default/files/uploads/12_pythonic_trading_jupyter_filter.png (Applying the diff operation) +[24]: https://opensource.com/sites/default/files/uploads/13_pythonic_trading_backtest_trades.png (One-trade mini dataset profit) +[25]: https://opensource.com/sites/default/files/uploads/14_pythonic_trading_implementation.png (Decision-making implementation on area 1) +[26]: https://opensource.com/sites/default/files/uploads/15_pythonic_trading_breakpoint_2.png (Add breakpoint for inner if conditions) +[27]: https://opensource.com/sites/default/files/uploads/16_pythonic_trading_manual_trigger.png (Add manual scheduler element) +[28]: https://opensource.com/sites/default/files/uploads/17_pythonic_trading_debugger_stop.png (Manually simulate scenarios) +[29]: https://opensource.com/sites/default/files/uploads/18_pythonic_trading_output_buttons.png (Pythonic trading output buttons) +[30]: https://opensource.com/file/512111 +[31]: https://opensource.com/sites/default/files/uploads/19_pythonic_trading_simulate_orders_2.png (Log messages and output of evaluation element) From 1aaf3d5038d2e264543e1d6e73f6c8d07b47d4d8 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 29 Sep 2021 05:04:24 +0800 Subject: [PATCH 009/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210928=20?= =?UTF-8?q?What=20is=20port=20forwarding=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210928 What is port forwarding.md --- .../tech/20210928 What is port forwarding.md | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 sources/tech/20210928 What is port forwarding.md diff --git a/sources/tech/20210928 What is port forwarding.md b/sources/tech/20210928 What is port forwarding.md new file mode 100644 index 0000000000..0cccbb2063 --- /dev/null +++ b/sources/tech/20210928 What is port forwarding.md @@ -0,0 +1,98 @@ +[#]: subject: "What is port forwarding?" +[#]: via: "https://opensource.com/article/21/9/what-port-forwarding" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +What is port forwarding? +====== +This article demonstrates the most common scenarios for port forwarding. +![Multi-colored and directional network computer cables][1] + +Port forwarding transfers network traffic from one network listener (called a "port") to another, either on the same computer or a different computer. Ports, in this context, are not physical objects but a software routine listening for network activity. + +When traffic directed at a specific port arrives at a router or a firewall, or other networked application, the response it receives can be defined according to the port it's trying to communicate with. When you use port forwarding, you can catch communication coming in on port 8080, for instance, and forward it on to port 80 instead. The new destination port may be on the same device as the one receiving the signal or on a different device. There are many ways to forward ports, and there are different reasons for doing it. This article demonstrates the most common scenarios. + +### Port forwarding with your router + +You usually need to forward ports when you host a server at home. Your home router (usually the WiFi appliance you get from your ISP) has a built-in firewall designed to prevent the outside world from getting onto your home network. You can use port forwarding to allow traffic on a specific port through your router's firewall, sending it to a specific IP address on your network. + +For instance, say you're hosting a [Minetest server][2] and want to invite friends. For them to get through your router and into your Minetest server, you must forward a port from the router to the computer hosting Minetest. By default, a Minetest server runs on port 30000. You can port forward 30000 on your router to port 30000 on your Minetest server, or you could arbitrarily invent a simpler port for your players to remember and then forward that instead. I find that people inevitably miscount the zeroes in 30000 (especially without the benefit of a comma to help), so I use port 1234 and forward it to my internal 30000 port. + +Router interfaces differ from manufacturer to manufacturer, but the idea is the same regardless of what brand of router you have in your home. First, log in to your router. +Its IP address and login information is often printed on the router itself or in its documentation. I own a TP-Link GX90 router, and I log in to it by pointing my web browser to 10.0.1.1, but your router might be 192.168.0.1 or some other address. + +My GX90 router calls port forwarding "Virtual servers," which is a category found in the router's **NAT forwarding** tab. NAT stands for _Network Address Translation_. Other routers may just call it **Port forwarding** or **Firewall** or **Services**. It may take a little clicking around to find the right category, or you may need to spend some time studying your router's documentation. + +When you find the port forwarding setting, add a new rule that names an external port (1234, in my example) and an internal one (30000). Forward the external port to the internal port on the IP address of the computer you want people to be able to access. If you need help finding your IP address, read Archit Modi's _[How to find your IP address on Linux][3]_ article. + +![A sample port forwarding rule][4] + +A sample port forwarding rule +(Seth Kenlon, [CC BY-SA 4.0][5]) + +In this example, I'm forwarding traffic that reaches my home network at port 1234 to port 30000 of my home server located at 10.0.1.2. + +Save the rule to proceed. + +Next, you need to know your home network's public IP address. You can obtain this from websites like [ifconfig.me][6] or [icanhazip.com][7]. Either open a browser to one of those sites or get the IP using the [curl][8] command: + + +``` +$ curl ifconfig.me +93.184.216.34 +``` + +Your friends can now join your Minetest server by entering the `169.169.23.49:1234` into their Minetest client. + +### Port forwarding with a firewall + +Sysadmins sometimes need to forward ports for traffic reaching a server. For example, you may want to accept traffic to port 80 but present the user with a service running on port 8065. Without port forwarding, your users would have to remember to append a specific port at the end of the URL they enter into their browser, such as `example.com:8065`.  Most users aren't used to thinking about ports, so intercepting a call to the common web port 80 and redirecting it to the obscure one your web app runs on is a big convenience for your users. + +You can forward traffic on a server using [firewall-cmd][9], the front-end command to the `firewalld` daemon. + +First, set the ports and protocols you want to forward: + + +``` +$ sudo firewall-cmd \ +\--add-forward-port \ +port=80:proto=tcp:toport=8065 +``` + +To make the change permanent, use the `--runtime-to-permanent` option: + + +``` +`$ sudo firewall-cmd --runtime-to-permanent` +``` + +### Network forwarding + +In networking, there are other kinds of forwarding aside from port forwarding. For instance, both IP forwarding and proxying are forms of forwarding. As you get familiar with how network information is processed as it's routed, you can try different kinds of forwarding (and watch it with `tcpdump` or similar) to see what works best for your setup. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/what-port-forwarding + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/connections_wires_sysadmin_cable.png?itok=d5WqHmnJ (Multi-colored and directional network computer cables) +[2]: https://opensource.com/alternatives/minecraft#minetest +[3]: https://opensource.com/article/18/5/how-find-ip-address-linux +[4]: https://opensource.com/sites/default/files/uploads/router-port-forward.jpg (A sample port forwarding rule) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: http://ifconfig.me +[7]: http://icanhazip.com +[8]: https://opensource.com/article/20/5/curl-cheat-sheet +[9]: https://www.redhat.com/sysadmin/secure-linux-network-firewall-cmd From 004671dbd987565c484825d47a83a372a8064320 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 29 Sep 2021 05:04:41 +0800 Subject: [PATCH 010/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210928=20?= =?UTF-8?q?Modeling=20open=20management=20practices?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210928 Modeling open management practices.md --- ...0928 Modeling open management practices.md | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 sources/tech/20210928 Modeling open management practices.md diff --git a/sources/tech/20210928 Modeling open management practices.md b/sources/tech/20210928 Modeling open management practices.md new file mode 100644 index 0000000000..d896968e50 --- /dev/null +++ b/sources/tech/20210928 Modeling open management practices.md @@ -0,0 +1,101 @@ +[#]: subject: "Modeling open management practices" +[#]: via: "https://opensource.com/open-organization/21/9/modeling-open-management" +[#]: author: "Heidi Hess von Ludewig https://opensource.com/users/heidi-hess-von-ludewig" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Modeling open management practices +====== +How can managers know if other leaders are cultivating an open culture? +Ask the people they impact every day. +![Women talking][1] + +In the [first part of my interview with Sam Knuth][2], a fellow [Open Organization Ambassador][3], we discussed how leaders need to make time to be open. Openness isn't effortless. + +In this second part, Sam and I discuss how executive leaders support their managers and teams in [leading with open values][4]. Because of the confidentiality of some of the answers (we're colleagues at Red Hat, after all), I am summarizing the interview in a series of articles that highlight and share some of Sam's most memorable observations and practices. + +### Managing managers + +Executive and senior leaders manage groups of managers, which means they may have little (or no) direct, routine contact with individual contributors in their organizations. So if they're interested in promoting open cultures throughout their organizations, they'll need to continuously model the open management practices they expect to see from all the managers in their team. + +Executive and senior leaders, however, don't only _promote_ open culture; they're also members of the organizational communities they want to see thrive, and like other members they shoulder some accountability for the health and vitality of that culture. Like all other members of an open organization community, managers are accountable for being _stewards_ (even protectors) of the values of the community as well. Senior leaders are responsible—as is any community member—for challenging behaviors that are unsupportive of open values. + +But this work is even more critical in the case of managers, especially because managers can enjoy enhanced decision-making power in many open organizations, and they influence more and more people the higher their role in an organization's hierarchy they sit. + +So how can executive leaders promote and protect open values in their organizations? Sam described a multi-factor approach to gathering and understanding associates' perspectives of their managers' leadership competencies. + +#### Meeting one-on-one + +As Sam's organization grew and more layers of management formed, Sam found he didn't have ongoing conversations with associates who weren't directly reporting to him, and was losing touch with how employees were feeling. Those _feelings_ are integral to any understanding of the organizational culture individual contributors experience every day. + +The bottom line? However you connect with associates, cultivating psychological safety is important for generating candid discussions. + +So Sam set up [one-on-one meetings][5] to connect with associates throughout the organization, choosing as randomly as he could. This helped create a safe space and develop trust in a confidential environment. Sam did this across his 250-associate organization by scheduling two to three meetings every week, because he felt it was the best way to get a sense of everyone's perspectives. It also gave him opportunities to share what he was learning with the managers in his organization and to coach them on becoming open leaders and champions of open values among their peers. + +During these discussions, he listened actively and asked many questions. Red Hatters can be quite forthcoming in their feedback, but asking questions helped Sam pick up on subtle cues when necessary. This way, he could ferret out an accurate sense of the situation, asking himself, "Does what the associates' say line up with what I think the leaders are intending? Where does it seem like alignment is not occurring? Why?" + +It's an individualized approach that's both time-consuming and candid, and Sam found it to be well worth the effort. + +It's also the opposite of a process I recalled from my past life in a conventional organization. As Sam and I chatted, I remembered "round tables," where an executive would set up team discussions to (allegedly) understand associates' perspectives. It was supposed to be a venue for collecting feedback and constructive criticism—but, in practice, no one said anything to the visiting executive that they hadn’t shared with team or department leaders, so there was no candid discussion _about_ those team or department leaders. I didn't feel any [sense of psychological safety][6], which is required in order for associates to share their thoughts. In my case, the round tables were completely ineffective. + +The bottom line? However you connect with associates—individually or in groups—cultivating psychological safety is important for generating candid discussions. + +Travelling to meet associates was ideal for these kinds of individual meetings to occur face-to-face, but the pandemic changed this tactic. On the other hand, workplaces across the world were already becoming more distributed before the pandemic; in fact, Sam struggled to meet associates in the United States because of the distribution of sites and even associates working remotely! To overcome this, leaders can set up one-on-one teleconferences with associates. In cases where associates seem to be less forthcoming or fearful of sharing their opinions, leaders can ask probing (but not direct) questions of the associates to get feedback as best as they can. For instance, leaders can glean a great deal of information from how associates answer questions such as: + + * How are you feeling about your work? + * What kinds of challenges do you encounter in your work? + * Do you feel like you get the support you need to do your work? + * How well do you feel you connect with your manager? Colleagues? + + + +#### On (not) using surveys + +Finally, Sam and I discussed surveys. After all, couldn't someone achieve the same results using a survey—without all that extra legwork? + +Surveys have their place in tracking the health of an open culture, Sam told me, but on their own they're rarely sufficient for doing this. For starters, Sam said, using surveys requires skill in both asking quantifiable questions and analyzing data, and that kind of skill isn't as common as we tend to think it is. Without proper expertise in using survey instruments, we may be letting data mislead us (for instance, when we gloss over problems because we see a high average score on another, similar question). So Sam finds surveys most useful for capturing a _broad perspective_ on team- or department-level experience of a culture and a manager's role in creating and maintaining it. + +Getting an accurate sense of specific details or issues is difficult when using surveys, which tend to ask for more generic feedback. Painting a more complete picture really requires sitting down with people and talking to them. + +Getting an accurate sense of specific details or issues is difficult when using surveys, which tend to ask for more generic feedback. Painting a more complete picture really requires sitting down with people and talking to them, Sam insisted. + +That's why it's important to investigate and spend time learning about the work culture in your organization from the associates themselves. Use a combination of techniques, and open multiple channels to facilitate feedback in as many forms as possible, as different people feel comfortable with different media. + +### When managers aren't open + +Like any role, managers learn skills and behaviors that help them succeed in particular organizations. When they get hired into an open organization (like Red Hat), they might experience some "abrasion" (my term), because there can be a genuine belief that a manager is managing with open values even though that person's _vision_ of open values doesn't match that of the organization. + +I recalled personal experience with this, where I had a manager who probably _thought_ they were being open, but really wasn't. + +"Exactly," Sam said, "and it's very painful." + +_Listen to Sam Knuth describe difficulties helping managers become more open._ + +When managers really aren't sufficiently "open," it's an issue that has to be addressed—because it can be damaging to teams. Sometimes managers can unlearn their conventional skills and behaviors. And sometimes they can't. Sometimes the change has to happen quickly so that the team doesn’t suffer. Ultimately, the organization's executive leader must embody that organization's culture. + +So "open management" then becomes a question of "open by whose standards?" and the organization must make those standards explicit in some way. That means deliberately codifying what the organization _means_ by "openness." Some organizations might draw up a simple social contract to accomplish this—a description of open principles and practices that all agree to let guide them. Other organizations might go so far as to formalize certain managerial competencies that align with the open culture an organization seeks to maintain. Regardless of the approach, however, it's important that an open organization fosters transparent discussions about behaviors it _does_ and _doesn't_ want to see its managers reflecting and encouraging. In this way, executive leaders can be those stewards for an organization's open culture. + +In the final part of my interview with Sam, I'll describe another important open management tactic I learned during our conversation: daring to be vulnerable. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/open-organization/21/9/modeling-open-management + +作者:[Heidi Hess von Ludewig][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/heidi-hess-von-ludewig +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/conversation-interview-mentor.png?itok=HjoOPcrB (Women talking) +[2]: https://opensource.com/open-organization/21/3/open-practices-executive-leaders +[3]: https://github.com/open-organization/governance/blob/master/community-roster.md +[4]: https://opensource.com/open-organization/managing-with-open-values +[5]: https://opensource.com/open-organization/21/8/one-on-one-meeting-tips +[6]: https://opensource.com/open-organization/19/3/introduction-psychological-safety From d3a30f0e1748654ea074d0c70327ef8a740e2d1a Mon Sep 17 00:00:00 2001 From: geekpi Date: Wed, 29 Sep 2021 08:43:50 +0800 Subject: [PATCH 011/143] translated --- ... Ubuntu Linux -GUI and Terminal Methods.md | 149 ------------------ ... Ubuntu Linux -GUI and Terminal Methods.md | 149 ++++++++++++++++++ 2 files changed, 149 insertions(+), 149 deletions(-) delete mode 100644 sources/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md create mode 100644 translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md diff --git a/sources/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md b/sources/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md deleted file mode 100644 index 598d522f8d..0000000000 --- a/sources/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md +++ /dev/null @@ -1,149 +0,0 @@ -[#]: subject: "Install AnyDesk on Ubuntu Linux [GUI and Terminal Methods]" -[#]: via: "https://itsfoss.com/install-anydesk-ubuntu/" -[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" -[#]: collector: "lujun9972" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Install AnyDesk on Ubuntu Linux [GUI and Terminal Methods] -====== - -_**Brief: This beginner’s tutorial discusses both GUI and terminal methods of installing AnyDesk on Ubuntu-based Linux distributions.**_ - -[AnyDesk][1] is a popular remote desktop software available for Linux, Windows, BSD, macOS and mobile platforms. - -With this tool, you can remotely access other computer using AnyDesk or let someone else remotely access your system. Not everyone can access it just because two devices use AnyDesk. You have to accept the incoming connection and/or provide a password for secure connection. - -This is helpful in providing tech support to friend, family, colleagues or even to the customers. - -In this tutorial, I’ll show you both graphical and command line ways of installing AnyDesk on Ubuntu. You can use either method based on your preference. Both methods will install the same AnyDesk version on your Ubuntu system. - -The same method should be applicable to Debian and other Debian and Ubuntu based distributions such as Linux Mint, Linux Lite etc. - -Non-FOSS alert! - -AnyDesk is not open source software. It is covered here because it is available on Linux and the article’s focus is on Linux. - -### Method 1: Install AnyDesk on Ubuntu using terminal - -[Open the terminal application][2] on your system. You’ll need a tool like wget to [download files in the terminal. For th][3]at, use the following command: - -``` -sudo apt update -sudo apt install wget -``` - -The next step now is to download the GPG key of AnyDesk repository and add it to your system’s trusted keys. This way, your system will trust the software coming from this [external repository][4]. - -``` -wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | sudo apt-key add - -``` - -You may ignore the deprecated warning about apt-key command for now. The next step is to add the AnyDesk repository to your system’s repository sources: - -``` -echo "deb http://deb.anydesk.com/ all main" | sudo tee /etc/apt/sources.list.d/anydesk-stable.list -``` - -Update the package cache so that your system learns about the availability of new applications through the newly added repository. - -``` -sudo apt update -``` - -And now, you can install AnyDesk: - -``` -sudo apt install anydesk -``` - -Once that is done, you can start AnyDesk from the system menu or from the terminal itself: - -``` -anydesk -``` - -You can enjoy AnyDesk now. - -![AnyDesk running in Ubuntu][5] - -### Method 2: Install AnyDesk on Ubuntu graphically - -If you are not comfortable with the command line, no worries. You can also install AnyDesk without going into the terminal. - -You can download AnyDesk for Ubuntu from the official AnyDesk website: - -[Download AnyDesk for Linux][6] - -You’ll see a Download Now button. Click on it. - -![Download AnyDesk][7] - -When you click on the download button, it gives you options for various Linux distributions. Select the one for Ubuntu: - -![Download the appropriate file][8] - -It will download the DEB file of AnyDesk application. [Installing deb file][9] is easy. Either double click on it or right click and open with Software Install. - -![Right click on deb file and open with software center][10] - -Software Center application will be opened and you can install it from there. - -![Installing AnyDesk in Ubuntu software center][11] - -Once installed, search for it in the system menu and start from there. - -![AnyDesk installed in Ubuntu][12] - -That’s it. Not too hard, is it? - -I am not going to show the steps for using AnyDesk. I think you already have some idea about that. If not, refer to [this article][13], please. - -#### Troubleshooting tip - -When I tried to run AnyDesk from the system menu, it didn’t start. So, I started it from the terminal and it showed me this error: - -``` -[email protected]:~$ anydesk -anydesk: error while loading shared libraries: libpangox-1.0.so.0: cannot open shared object file: No such file or directory -``` - -If you see the [error while loading shared libraries][14] message, you install the package it is complaining about. Here’s what I did in my case: - -``` -sudo apt install libpangox-1.0-0 -``` - -That solved the issue for me and I hope it fixes for you as well. - -If you have any questions related to this topic, please let me know in the comment section. - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/install-anydesk-ubuntu/ - -作者:[Abhishek Prakash][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/abhishek/ -[b]: https://github.com/lujun9972 -[1]: https://anydesk.com/en -[2]: https://itsfoss.com/open-terminal-ubuntu/ -[3]: https://itsfoss.com/download-files-from-linux-terminal/ -[4]: https://itsfoss.com/adding-external-repositories-ubuntu/ -[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/anydesk-running-in-ubuntu.png?resize=800%2C418&ssl=1 -[6]: https://anydesk.com/en/downloads/linux -[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/any-desk-ubuntu-download.webp?resize=800%2C312&ssl=1 -[8]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/any-desk-ubuntu-download-1.webp?resize=800%2C427&ssl=1 -[9]: https://itsfoss.com/install-deb-files-ubuntu/ -[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/install-anaydesk-ubuntu.png?resize=800%2C403&ssl=1 -[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/installing-anydesk-in-ubuntu-software-center.png?resize=781%2C405&ssl=1 -[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/anydesk-installed-in-ubuntu.png?resize=759%2C196&ssl=1 -[13]: https://support.anydesk.com/Access -[14]: https://itsfoss.com/solve-open-shared-object-file-quick-tip/ diff --git a/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md b/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md new file mode 100644 index 0000000000..88f4504331 --- /dev/null +++ b/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md @@ -0,0 +1,149 @@ +[#]: subject: "Install AnyDesk on Ubuntu Linux [GUI and Terminal Methods]" +[#]: via: "https://itsfoss.com/install-anydesk-ubuntu/" +[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" +[#]: collector: "lujun9972" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +在 Ubuntu Linux 上安装 AnyDesk(GUI 和终端方法) +====== + +_**简介:这个初学者的教程讨论了在基于 Ubuntu 的 Linux 发行版上安装 AnyDesk 的 GUI 和终端方法**_。 + +[AnyDesk][1] 是一个流行的远程桌面软件,可用于 Linux、Windows、BSD、macOS 和移动平台。 + +有了这个工具,你可以用 AnyDesk 远程访问其他电脑,或者让别人远程访问你的系统。不是每个人都可以访问它,因为有两台设备使用 AnyDesk。你必须接受传入的连接和/或提供一个安全连接的密码。 + +这对于向朋友、家人、同事甚至客户提供技术支持很有帮助。 + +在本教程中,我将向你展示在 Ubuntu 上安装 AnyDesk 的图形和命令行两种方法。你可以根据自己的喜好使用这两种方法。这两种方法都会在你的 Ubuntu 系统上安装相同的 AnyDesk 版本。 + +同样的方法应该适用于 Debian 和其他基于 Debian 和 Ubuntu 的发行版,如 Linux Mint,Linux Lite 等。 + +非 FOSS 警告! + +AnyDesk 不是开源软件。这里涉及它是因为它在 Linux 上可用,而文章的重点是 Linux。 + +### 方法 1:使用终端在 Ubuntu 上安装 AnyDesk + +在你的系统上[打开终端程序][2]。你需要一个像 wget 这样的工具来[在终端下载文件][3],对于这个使用以下命令: + +``` +sudo apt update +sudo apt install wget +``` + +下一步是下载 AnyDesk 仓库的 GPG 密钥,并将其添加到你的系统的可信密钥中。这样,你的系统就会信任来自这个[外部仓库][4]的软件。 + +``` +wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | sudo apt-key add - +``` + +你可以暂时忽略关于 apt-key 命令的废弃警告。下一步是将 AnyDesk 仓库添加到系统的仓库源中: + +``` +echo "deb http://deb.anydesk.com/ all main" | sudo tee /etc/apt/sources.list.d/anydesk-stable.list +``` + +更新包缓存,这样你的系统就能通过新添加的仓库了解到新应用的可用性。 + +``` +sudo apt update +``` + +现在,你可以安装 AnyDesk 了: + +``` +sudo apt install anydesk +``` + +完成后,你可以从系统菜单或从终端本身启动 AnyDesk: + +``` +anydesk +``` + +你现在可以享受 AnyDesk 了。 + +![AnyDesk running in Ubuntu][5] + +### 方法 2:在 Ubuntu 上以图形方式安装 AnyDesk + +如果你不习惯使用命令行,不用担心。你也可以不进入终端安装 AnyDesk。 + +你可以从 AnyDesk 官网下载 Ubuntu 上的 AnyDesk: + +[下载 Linux 上的 Anydesk][6] + +你会看到一个立即下载的按钮。点击它。 + +![Download AnyDesk][7] + +当你点击下载按钮时,它会给你提供各种 Linux 发行版的选项。选择 Ubuntu 的那个: + +![Download the appropriate file][8] + +它将下载 AnyDesk 的 DEB 文件。[安装 DEB 文件][9]很简单。要么双击它,要么右击并使用软件安装打开。 + +![Right click on deb file and open with software center][10] + +软件中心应用将被打开,你可以在那里安装它。 + +![Installing AnyDesk in Ubuntu software center][11] + +安装后,在系统菜单中搜索它并从那里开始。 + +![AnyDesk installed in Ubuntu][12] + +这就好了。不是太难,是吗? + +我不打算展示使用 AnyDesk 的步骤。我想你已经对这个问题有了一些了解。如果没有,请参考[这篇文章][13],谢谢。 + +#### 故障排除提示 + +当我试图从系统菜单中运行 AnyDesk 时,它没有启动。于是,我从终端启动它,它显示了这个错误: + +``` +[email protected]:~$ anydesk +anydesk: error while loading shared libraries: libpangox-1.0.so.0: cannot open shared object file: No such file or directory +``` + +如果你看到 [error while loading shared libraries][14] 信息,你要安装它所报错的软件包。在我的例子中,我是这样做的: + +``` +sudo apt install libpangox-1.0-0 +``` + +这解决了我的问题,我希望它也能为你解决。 + +如果你有任何与此主题相关的问题,请在评论区告诉我。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-anydesk-ubuntu/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://anydesk.com/en +[2]: https://itsfoss.com/open-terminal-ubuntu/ +[3]: https://itsfoss.com/download-files-from-linux-terminal/ +[4]: https://itsfoss.com/adding-external-repositories-ubuntu/ +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/anydesk-running-in-ubuntu.png?resize=800%2C418&ssl=1 +[6]: https://anydesk.com/en/downloads/linux +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/any-desk-ubuntu-download.webp?resize=800%2C312&ssl=1 +[8]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/any-desk-ubuntu-download-1.webp?resize=800%2C427&ssl=1 +[9]: https://itsfoss.com/install-deb-files-ubuntu/ +[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/install-anaydesk-ubuntu.png?resize=800%2C403&ssl=1 +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/installing-anydesk-in-ubuntu-software-center.png?resize=781%2C405&ssl=1 +[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/anydesk-installed-in-ubuntu.png?resize=759%2C196&ssl=1 +[13]: https://support.anydesk.com/Access +[14]: https://itsfoss.com/solve-open-shared-object-file-quick-tip/ From 71e51171792a6e226218404545d1d54e93146da7 Mon Sep 17 00:00:00 2001 From: geekpi Date: Wed, 29 Sep 2021 08:46:59 +0800 Subject: [PATCH 012/143] translated --- ... Install Java from your Linux distribution-s repositories.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210927 Install Java from your Linux distribution-s repositories.md b/sources/tech/20210927 Install Java from your Linux distribution-s repositories.md index 0a172b8529..2a763b96f2 100644 --- a/sources/tech/20210927 Install Java from your Linux distribution-s repositories.md +++ b/sources/tech/20210927 Install Java from your Linux distribution-s repositories.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/9/install-java-linux-repositories" [#]: author: "Chris Hermansen https://opensource.com/users/clhermansen" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 53e92e3404068001aee46bffd24cf9e5610a24f7 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Wed, 29 Sep 2021 09:33:14 +0800 Subject: [PATCH 013/143] Rename sources/tech/20210928 Modeling open management practices.md to sources/talk/20210928 Modeling open management practices.md --- .../{tech => talk}/20210928 Modeling open management practices.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sources/{tech => talk}/20210928 Modeling open management practices.md (100%) diff --git a/sources/tech/20210928 Modeling open management practices.md b/sources/talk/20210928 Modeling open management practices.md similarity index 100% rename from sources/tech/20210928 Modeling open management practices.md rename to sources/talk/20210928 Modeling open management practices.md From 69ada1cddc164ec72f517e5cc2e2c52010623c8d Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 29 Sep 2021 13:51:10 +0800 Subject: [PATCH 014/143] PRF&PUB @unigeorge https://linux.cn/article-13832-1.html --- .../20210622 What is a config file.md | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) rename {translated/tech => published}/20210622 What is a config file.md (76%) diff --git a/translated/tech/20210622 What is a config file.md b/published/20210622 What is a config file.md similarity index 76% rename from translated/tech/20210622 What is a config file.md rename to published/20210622 What is a config file.md index b29393e4f9..704240b003 100644 --- a/translated/tech/20210622 What is a config file.md +++ b/published/20210622 What is a config file.md @@ -3,25 +3,26 @@ [#]: author: (Seth Kenlon https://opensource.com/users/seth) [#]: collector: (lujun9972) [#]: translator: (unigeorge) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13832-1.html) -什么是配置文件? +浅谈配置文件格式 ====== -流行的配置文件格式有若干种,每种都有其独特优势。从中找到最适合你的格式吧! -![Computer screen with files or windows open][1] +> 流行的配置文件格式有若干种,每种都有其自身优势。从中找到最适合你的格式吧! + +![](https://img.linux.net.cn/data/attachment/album/202109/29/134955py5ypl58dgplyx4x.jpg) 计算机上有数以千计的配置文件。你可能永远不会直接与其中的大部分文件打交道,但它们确实散落在你的 `/etc` 以及 `~/.config`、`~/.local`、`/usr` 文件夹中。还有一些可能在 `/var`,甚至 `/opt` 文件夹中。如果无意中打开过或更改过它们,你就可能会有疑问:为什么有些配置文件看起来是某一种格式,而另一些则是看起来完全不同的格式? -存储配置是一项很灵活的任务,因为只要开发人员知道他们的代码如何将数据存入文件,他们就可以轻松编写代码来根据需要提取数据。然而,科技行业非常青睐有详细文档的标准化事物,因此多年来出现了几种比较普遍的格式用来简化配置任务。 +存储配置是一项很灵活的任务,因为只要开发人员知道他们的代码是如何将数据存入文件的,他们就可以轻松编写代码来根据需要提取数据。然而,科技行业非常青睐有详细文档的标准化事物,因此多年来出现了几种比较普遍的格式用来简化配置任务。 ### 为什么我们需要配置文件 配置文件对于现代计算来说很重要。它们使你能够自定义与应用程序交互的方式,或自定义应用程序与系统内其他程序的交互方式。有了配置文件,每当你启动某个应用程序时,它都会有“记忆”,记录了你喜欢如何去使用该程序。 -配置文件的结构可以很简单,而且通常确实也很简单。例如,如果你要编写一个应用程序,程序唯一需要知道的是其用户的偏好名称,那么它的唯一配置文件就可以只包含一个词:用户名。就像下面这样: +配置文件的结构可以很简单,而且通常确实也很简单。例如,如果你要编写一个应用程序,程序唯一需要知道的是其用户的偏好名字,那么它的唯一配置文件就可以只包含一个词:用户名。就像下面这样: ``` Tux @@ -34,7 +35,7 @@ NAME='Tux' SPECIES='Penguin' ``` -即使没有编程经验,你也可以想象出代码如何解析这些数据。这里有两个简单的例子,一个使用 [`awk` 命令][2],另一个使用 [grep 命令][3]。两个例子都是只关注包含 `NAME`“键”的行,并返回出现在等号 (`=`) 之后的“值”: +即使没有编程经验,你也可以想象出代码如何解析这些数据。这里有两个简单的例子,一个使用 [awk 命令][2],另一个使用 [grep 命令][3]。两个例子都是只关注包含 `NAME` “键”的行,并返回出现在等号 (`=`) 之后的“值”: ``` $ awk -F'=' '/NAME/ { print $2; }' myconfig.ini @@ -47,7 +48,7 @@ $ grep NAME fake.txt | cut -d'=' -f2 ### 选择格式 -为了保证普遍有效性,配置文件最重要的一点是它们是一致的和可预测的。你绝对不会想做这样的事:以保存用户首选项的名义,将信息随意存储到文件中,然后就得花好几天时间来编写代码,以对整个文件中的随机信息实现读取操作。 +为了保证普遍有效性,配置文件最重要的一点是它们是一致的和可预测的。你绝对不会想做这样的事:以保存用户首选项的名义,将信息随意存储到文件中,然后花好几天时间逆向工程,来找到最终出现在文件中的随机信息。 流行的配置文件格式有若干种,每种格式都有自己的优势。 @@ -64,7 +65,7 @@ enabled=1 这种简单的配置风格很直观,只要你别选择使用糟糕的键名(比如用 `unampref` 这样的神秘键名来代替 `name`)就好。这些键值对很容易解析和编辑。 -除了键和值之外,INI 格式还可以分 section。在下列示例代码中,`[example]` 和 `[demo]` 就是配置文件中的两节: +除了键和值之外,INI 格式还可以分 section。在下列示例代码中,`[example]` 和 `[demo]` 就是配置文件中的两个节: ``` [example] @@ -77,14 +78,14 @@ name=Beastie fullscreen=1 ``` -这几个配置语句解析起来有点复杂,因为有 _两个_ `name` 键。想象一下,一个粗心的程序员在这个配置文件中查询 `name`,结果总是返回 `Beastie`,因为这是文件中对 name 的最后一个定义值。在解析这样的文件时,开发人员必须加倍小心地在各节中搜索键,这可能会很棘手,具体取决于用来解析该文件的语言。然而,它仍然是一种很流行的格式,大多数语言都会有一个现成的库来帮助程序员解析 INI 文件。 +这几个配置语句解析起来有点复杂,因为有两个 `name` 键。想象一下,一个粗心的程序员在这个配置文件中查询 `name`,结果总是返回 `Beastie`,因为这是文件中对 `name` 的最后一个定义值。在解析这样的文件时,开发人员必须加倍小心地在各节中搜索键,这可能会很棘手,具体取决于用来解析该文件的语言。然而,它仍然是一种很流行的格式,大多数语言都会有一个现成的库来帮助程序员解析 INI 文件。 #### YAML [YAML 文件][4] 是结构化列表,可以包含值或者键值对: ``` -\--- +--- Example:   Name: 'Tux'   Style: @@ -93,13 +94,13 @@ Example:   Enabled: 1 ``` -YAML 格式很流行,部分原因是它看起来很整洁。数据要放置到相对其上层数据的特定位置,除此之外没有太多其他语法。然而,对于某些人来说的特色,在其他人眼中可能就是一个 bug。许多开发人员不愿使用 YAML,正是因为它很看重本质上 _不存在_ 的东西。如果你在 YAML 中缩进错误,YAML 解析器可能会将你的文件视为无效文件,即使不视为无效,返回的数据也可能是错误的。 +YAML 格式很流行,部分原因是它看起来很整洁。数据要放置到相对其上层数据的特定位置,除此之外没有太多其他语法。然而,对于某些人来说的这种特色,在其他人眼中可能就是一个问题。许多开发人员不愿使用 YAML,正是因为它很看重本质上 _不存在_ 的东西。如果你在 YAML 中缩进错误,YAML 解析器可能会将你的文件视为无效文件,即使不视为无效,返回的数据也可能是错误的。 大多数语言都有 YAML 解析器,并且有很好的开源 YAML linters(验证语法的应用程序)来帮你确保 YAML 文件的完整性。 #### JSON -JSON 文件在技术上来说是 YAML 的子类,因此其数据结构是相同的,尽管其语法完全不同: +JSON 文件在技术上来说是 YAML 的子集,因此其数据结构是相同的,尽管其语法完全不同: ``` { @@ -116,7 +117,7 @@ JSON 文件在技术上来说是 YAML 的子类,因此其数据结构是相同 } ``` -JSON 在 JavaScript 程序员中很流行,这并不奇怪,因为 JSON 全称为 JavaScript Object Notation 即 JavaScript 对象符号。由于与 Web 开发密切相关,JSON 是 Web API 的常见输出格式。大多数编程语言都有解析 JSON 的库。 +JSON 在 JavaScript 程序员中很流行,这并不奇怪,因为 JSON 全称为JavaScript 对象符号JavaScript Object Notation。由于与 Web 开发密切相关,JSON 是 Web API 的常见输出格式。大多数编程语言都有解析 JSON 的库。 #### XML @@ -158,7 +159,7 @@ via: https://opensource.com/article/21/6/what-config-files 作者:[Seth Kenlon][a] 选题:[lujun9972][b] 译者:[unigeorge](https://github.com/unigeorge) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 4328c289f108db0b630ba4ba019963f043032aae Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 29 Sep 2021 14:14:57 +0800 Subject: [PATCH 015/143] PRF&PUB @geekpi https://linux.cn/article-13833-1.html --- ...ource alternative to Microsoft Exchange.md | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) rename {translated/tech => published}/20210924 An open source alternative to Microsoft Exchange.md (68%) diff --git a/translated/tech/20210924 An open source alternative to Microsoft Exchange.md b/published/20210924 An open source alternative to Microsoft Exchange.md similarity index 68% rename from translated/tech/20210924 An open source alternative to Microsoft Exchange.md rename to published/20210924 An open source alternative to Microsoft Exchange.md index 9903696e39..31cd9853e0 100644 --- a/translated/tech/20210924 An open source alternative to Microsoft Exchange.md +++ b/published/20210924 An open source alternative to Microsoft Exchange.md @@ -3,24 +3,26 @@ [#]: author: "Markus Feilner https://opensource.com/users/mfeilner" [#]: collector: "lujun9972" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13833-1.html" -Microsoft Exchange 的一个开源替代方案 +微软 Exchange 的一个开源替代方案 ====== -开源用户现在有了一个强大的、功能齐全的群件选择。 -![Working on a team, busy worklife][1] -多年来,Microsoft Exchange 作为群件环境的平台几乎是不可避免的。然而,在 2020 年末,一个奥地利的开源软件开发商推出了[grommunio][2],一个群件服务器和客户端,其外观和感觉对 Exchange 和 Outlook 用户所熟悉。 +> 开源用户现在有了一个强大的、功能齐全的群件选择。 + +![](https://img.linux.net.cn/data/attachment/album/202109/29/141404pesw8xgh8oohwhjh.jpg) + +多年来,微软 Exchange 作为一个平台牢牢统治着群件环境。然而,在 2020 年末,一个奥地利的开源软件开发商推出了 [grommunio][2],这是一个群件服务器和客户端,其外观和感觉让 Exchange 和 Outlook 用户感到很熟悉。 grmmunio 项目可以很好地替代 Exchange。开发者以与微软相同的方式将组件连接到平台上,它们支持 RPC (远程过程调用)与 HTTP 协议。据开发者介绍,grommunio 还包括许多常见的群件接口,如 IMAP、POP3、SMTP、EAS(Exchange ActiveSync)、EWS(Exchange Web Services)、CalDAV 和 CardDAV。有了这样广泛的支持,grommunio 可以顺利地整合到现有的基础设施中。 -用户会注意到 Outlook、Android 和 iOS 客户端之间几乎没有区别。当然,作为开源软件,它也支持其他客户端。由于集成了本地 Exchange 协议,Outlook 和智能手机与 grommunio 的通信就像与 Microsoft Exchange 服务器一样。日常的企业用户可以继续使用他们现有的客户端,而 grommunio 服务器则在后台安静地运行。 +用户会注意到对 Outlook、Android 和 iOS 客户端来说几乎没有区别。当然,作为开源软件,它也支持其他客户端。由于集成了原生的 Exchange 协议,Outlook 和智能手机与 grommunio 的通信就像与微软 Exchange 服务器一样。日常的企业用户可以继续使用他们现有的客户端,而 grommunio 服务器则在后台安静地运行。 ### 不仅仅是邮件 -除了邮件功能外,grommunio 界面还提供了日历系统。可以直接在日历显示中或在一个新标签中点击创建约会。这很直观,正是你对现代工具的期望。用户可以创建、管理和分享日历以及地址簿。私人联系人或普通联系人都是可能的,而且你可以与同事分享一切。 +除了邮件功能外,grommunio 界面还提供了日历系统。可以直接在日历显示中或在一个新标签中点击创建约会。这很直观,正如你对现代工具的期望。用户可以创建、管理和分享日历以及地址簿。私人联系人或普通联系人都支持,而且你可以与同事分享一切。 任务管理在左边的下拉菜单中显示任务列表,它们可以有一个所有者和多个合作者。你可以为每个任务指定截止日期、类别、附件和其他属性。笔记可以以同样的方式被管理并与其他团队成员共享。 @@ -30,25 +32,25 @@ grmmunio 项目可以很好地替代 Exchange。开发者以与微软相同的 ![Screenshot of grommunio meeting space][3] -用于高级视频会议的 Jitsi 集成(Markus Feilner, [CC BY-SA 4.0][4]) +*用于高级视频会议的 Jitsi 集成(Markus Feilner, [CC BY-SA 4.0][4])* 在 grommunio 会议功能的背后是 [Jitsi][5],它以熟悉的用户界面顺利地集成到 grommunio 的用户界面中。完全集成和集中管理的聊天功能是基于 [Mattermost][6]。 ![Screenshot of grommunio's town square for chat][7] -用于聊天的 Mattermost(Markus Feilner,[CC BY-SA 4.0][4]) +*用于聊天的 Mattermost(Markus Feilner,[CC BY-SA 4.0][4])* -用于文件同步和交换的 ownCloud(Markus Feilner,[CC BY-SA 4.0][4]) +[ownCloud][8] 承诺提供企业级的文件共享和同步,在点击“文件”按钮后开始。 ![Screenshot of grommunio file sharing space][9] -用于文件同步和交换的 ownCloud(Markus Feilner,[CC BY-SA 4.0][4]) +*用于文件同步和交换的 ownCloud(Markus Feilner,[CC BY-SA 4.0][4])* -grommunio 项目有一个强大的管理界面,包括角色、域和组织管理、预测性监测和自助服务门户。基于 shell 的向导指导管理员完成安装和从 Microsoft Exchange 迁移数据。开发团队正在不断努力,以实现更好的整合和更集中的管理,并随之为管理员提供更好的工作流程。 +grommunio 项目有一个强大的管理界面,包括角色、域和组织管理、预测性监测和自助服务门户。基于 shell 的向导指导管理员完成安装和从微软 Exchange 迁移数据。开发团队正在不断努力,以实现更好的整合和更集中的管理,并随之为管理员提供更好的工作流程。 ![Screenshot of grommunio dashboards][10] -grommunio 的管理界面(Markus Feilner, [CC BY-SA 4.0][4]) +*grommunio 的管理界面(Markus Feilner, [CC BY-SA 4.0][4])* ### 探索 grommunio @@ -61,7 +63,7 @@ via: https://opensource.com/article/21/9/open-source-groupware-grommunio 作者:[Markus Feilner][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/) 荣誉推出 From 8ea86ffb3a8b58aebf21d261057fbae23ce2f294 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 30 Sep 2021 05:03:12 +0800 Subject: [PATCH 016/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210929=20?= =?UTF-8?q?How=20I=20keep=20my=20file=20folders=20tidy=20with=20Ansible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210929 How I keep my file folders tidy with Ansible.md --- ... keep my file folders tidy with Ansible.md | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 sources/tech/20210929 How I keep my file folders tidy with Ansible.md diff --git a/sources/tech/20210929 How I keep my file folders tidy with Ansible.md b/sources/tech/20210929 How I keep my file folders tidy with Ansible.md new file mode 100644 index 0000000000..aacc2f33b1 --- /dev/null +++ b/sources/tech/20210929 How I keep my file folders tidy with Ansible.md @@ -0,0 +1,183 @@ +[#]: subject: "How I keep my file folders tidy with Ansible" +[#]: via: "https://opensource.com/article/21/9/keep-folders-tidy-ansible" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How I keep my file folders tidy with Ansible +====== +I try to use Ansible often, even for tasks that I know how to do with a +shell script because I know that Ansible is easy to scale. +![Filing cabinet for organization][1] + +I try to use Ansible often, even for tasks that I know how to do with a shell script because I know that Ansible is easy to scale. Even though I might develop an Ansible playbook just for my personal workstation, sometimes it ends up being a lot more useful than intended, and it's easy to apply that same playbook to all the computers on my network. And besides, sometimes the greatest enemy of getting really good at something is the impression that it's only meant for serious professionals, or big projects, or whatever you feel that you're not. I use Ansible because it's a great open source tool, but I benefit from it the most because it scales. + +One of the tasks I recently assigned to Ansible was the monumental one of keeping my Downloads folder tidy. If you're like me, you end up downloading many files from the Internet throughout the day and then forget that the files exist. On the one hand, I don't mind this habit. There have been times when I realize I still need a file in my Downloads folder, so forgetting about a file rather than promptly removing it can be helpful. However, there are other files that I download expressly to use once and then ought to remove. + +I decided to use a highly specific Ansible task to find files I know I don't need and then remove them. + +### Ansible boilerplate + +Ansible playbooks generally start in exactly the same way: Define your hosts and announce a task: + + +``` +\--- +\- hosts: localhost +  tasks: +``` + +Commit those three lines to memory. They're the "shebang" (`#!`) of Ansible playbooks. Once you have those lines in a text file, you can start defining the steps in your task. + +### Finding files with Ansible + +You can locate files on a system using the [`find` Ansible module][2]. If an Ansible module is a command, its parameters are its [command options][3]. In this example playbook, I want to find files explicitly located in the `~/Downloads` folder and I can define that using the `paths` parameter. + +This is my process when I start writing a playbook: I find a module in the Ansible module index that seems likely to do what I need, and then I read through its parameters to find out what kind of control I have over the module. + +In my case, the files I accidentally collect in my Downloads folder are CSV files. They get downloaded weekly, processed, and then ought to disappear. But they hang around for weeks until I get overwhelmed and delete them. Here's how to find CSV files in Downloads with Ansible: + + +``` +\--- +\- hosts: localhost +  tasks: +    - name: Find CSV in Downloads +      find: +        paths: ~/Downloads +        recurse: false +        patterns: '*.csv,*.CSV' +      register: result +``` + +The `paths` parameter tells Ansible where to search for files. + +The `recurse: false` parameter forbids Ansible from searching in subdirectories of Downloads. This gives me the ability to retain CSV files that I've downloaded and saved into a subdirectory. Ansible only targets the CSV files I save straight to Downloads (which is my habit). + +The `patterns` parameter tells Ansible what to count as a match. All of the CSV files I download end in .csv, but I'm confident that I'm willing to remove .CSV (in all capital letters) as well. + +The finishing touch to this step is to invoke the `register` module, which saves the results of the `find` process into a variable called `result`. + +This is important because I want Ansible to perform a second action on the results of `find`, so those results need to be stored somewhere for the next step. + +### Removing files with Ansible + +The next step in the task is to remove the files that `find` has uncovered. The module used to remove files is the [`file` module][4]. + +This step relies entirely on the `find` step, so it uses several variables: + + +``` +    - name: Remove CSV files +      file: +        path: "{{ item.path }}" +        state: absent +      with_items: "{{ result.files }}" +``` + +The `path` parameter uses the built-in `"{{ item.path }}"` variable, which confusingly isn't actually defined yet. The variable has no information on the path until the `file` module is used in a loop by the `with_items` keyword. The `with_items` step uses the contents of the `result` variable to extract one filename at a time, which becomes the `item` for the `path` parameter. Once the current item's path is extracted, Ansible uses the `state: absent` rule to ensure that the file located at that path is _not_ left on the system (in other words, it's deleted.) + +This is a _very_ dangerous step, especially during testing. If you get this step wrong, you can easily remove files you don't intend to delete. + +### Verify the playbook  + +Ansible playbooks are written in [YAML][5], which has a strict syntax. Verify that your YAML is correct using the `yamllint` command: + + +``` +$ yamllint cleanup.yaml +$ +``` + +No results means no errors. This playbook must have been written by someone who really [knows and loves YAML][6]! + +### Testing Ansible plays safely + +To avoid deleting my entire home directory by accident, I ran my first attempt with the `--check` option. This ensures that Ansible doesn't actually make changes to your system. + + +``` +$ ansible-playbook --check example.yaml +[WARNING]: provided hosts list is empty, only localhost is available. +'all' + +PLAY [localhost] **************************************************** + +TASK [Gathering Facts] ********************************************** +ok: [localhost] + +TASK [Find CSV files in Downloads] ********************************** +ok: [localhost] + +TASK [Remove CSV files] ********************************************* +changed: [localhost] => (item={'path': '/home/tux/Downloads/foo.csv', [...] +changed: [localhost] => (item={'path': '/home/tux/Downloads/bar.csv', [...] +changed: [localhost] => (item={'path': '/home/tux/Downloads/baz.csv', [...] + +PLAY RECAP ********************************************************** +localhost                  : ok=3    changed=1    unreachable=0 [...] +``` + +The output is very verbose, but it shows that my playbook is correct: Only CSV files within Downloads have been marked for removal. + +### Running Ansible playbooks + +To run an Ansible playbook, you use the `ansible-playbook` command: + + +``` +`$ ansible-playbook example.yaml` +``` + +Confirm the results: + + +``` +$ ls *.csv  ~/Downloads/ +ls: cannot access '*.csv': No such file or directory +/home/tux/Downloads/: +file.txt +``` + +### Schedule the Ansible playbook + +The Ansible playbook has been confirmed, but I want it to run at least every week. I use [Anacron][7] rather than Cron, so I created an Anacron job to run weekly: + + +``` +$ cat << EOF >> ~/.local/etc/cron.weekly/cleanup +#!/bin/sh +ansible-playbook $HOME/Ansible/cleanup.yaml +EOF +$ chmod +x ~/.local/etc/cron.daily/cleanup +``` + +### What can you do with Ansible? + +Generally, Ansible is meant as a system maintenance tool. It's finely tuned to bootstrap complex systems to help with course correction when something's gone wrong and to keep a system in a specific state. I've used it for simple but repetitive tasks, like setting up a complex directory tree that would typically require several commands or clicks. I've also used it for tasks I don't want to do wrong, like removing old files from directories. I've also used it for tasks that are just too complex for me to bother trying to remember, like synchronizing several changes made to a production system with its redundant backup system. + +I don't use this cleanup script on my servers because I don't download CSV files every week on my servers, but I do use a variation of it. Ansible isn't a replacement for shell or Python scripting, but for some tasks, it's a very precise method to perform some set of tasks that you might want to run on many more systems. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/keep-folders-tidy-ansible + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/files_documents_organize_letter.png?itok=GTtiiabr (Filing cabinet for organization) +[2]: https://docs.ansible.com/ansible/2.8/modules/find_module.html#find-module +[3]: https://opensource.com/article/21/8/linux-terminal#options +[4]: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/file_module.html +[5]: https://www.redhat.com/sysadmin/yaml-beginners +[6]: https://www.redhat.com/sysadmin/yaml-tips +[7]: https://opensource.com/article/21/2/linux-automation From 20e49dfe04dba3e18d9d2272b5ccd7650f97e6be Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 30 Sep 2021 05:03:29 +0800 Subject: [PATCH 017/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210929=20?= =?UTF-8?q?Manage=20CentOS=20Stream=20with=20Foreman?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210929 Manage CentOS Stream with Foreman.md --- ...10929 Manage CentOS Stream with Foreman.md | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 sources/tech/20210929 Manage CentOS Stream with Foreman.md diff --git a/sources/tech/20210929 Manage CentOS Stream with Foreman.md b/sources/tech/20210929 Manage CentOS Stream with Foreman.md new file mode 100644 index 0000000000..72b6b3b007 --- /dev/null +++ b/sources/tech/20210929 Manage CentOS Stream with Foreman.md @@ -0,0 +1,171 @@ +[#]: subject: "Manage CentOS Stream with Foreman" +[#]: via: "https://opensource.com/article/21/9/centos-stream-foreman" +[#]: author: "Melanie Corr https://opensource.com/users/melanie-corr" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Manage CentOS Stream with Foreman +====== +This example provides a glimpse into the many options you have to manage +and provision CentOS Stream content in Foreman. +![Puzzle pieces coming together to form a computer screen][1] + +In December 2021, CentOS 8 will reach end of life and be replaced by CentOS Stream. One of the major changes between previous iterations of CentOS and CentOS Stream is the lack of minor versions. Centos Stream has adopted a continuous release cycle. From the beginning of this year, developers in the Foreman community started to see the benefits of earlier bug detection and patching that CentOS Stream offers as a result of the continuous releases. We no longer have to wait for the next release to take advantage of the latest changes and bugfixes. [A veteran Linux community enthusiast][2] noted that this move also brings RHEL developers closer than ever to the FOSS community. + +However, if you are an administrator of hundreds or thousands of servers, you might want to exercise control over when new packages are added to particular servers. If you are looking for a free open source tool that helps you ensure stability of production servers, while at the same time allowing you to safely pull in the latest changes from Centos Stream for development and testing, this is where Foreman can help. With Foreman, you can manage your Centos Stream content at all stages of the lifecycle environment. + +### What is Foreman? + +Foreman is a complete lifecycle management tool for physical and virtual servers. With Foreman, system administrators have the power to easily automate repetitive tasks, quickly deploy applications, and proactively manage servers on-premise or in the cloud. Foreman provides enterprise-level solutions for provisioning management, configuration management, and monitoring. Thanks to its plugin architecture, Foreman can be extended in a myriad of ways. Using the Katello plugin, you can use Foreman as a complete content management tool to manage CentOS Stream, among many other content types. + +With Foreman and Katello, you can define exactly which packages you want each environment to contain. For example, a Production environment might use packages that have been verified as stable, while a Developer environment might require the latest and greatest package versions available. You can also promote the content views across lifecycle environments. Let's take a look at how Foreman accomplishes this. + +We reference the web UI in this article, but Foreman also has a robust CLI and API. The Katello plugin provides a workflow and web UI for the Pulp project, which you can read about more in [this article][3]. We also supply a simple workflow here, but Foreman and the Katello project offer many different configuration options to suit your specific needs. + +This article assumes that Foreman and Katello are already installed. For more information about how to do that, see the [Katello installation manual][4]. + +### Create a Product + +The first step is to create a product in Foreman. The product functions as an internal label to store the CentOS Stream repositories. + + 1. In the Foreman web UI, navigate to **Content** >**Products**, and click **Create Product**. + 2. In the **Name** field, enter a name for the product. Foreman automatically completes the **Label** field based on what you have entered for **Name, **and this can't be changed later. + + + +### Add the CentOS Stream repositories to the Product + +Now that you have a product, you can use the URLs for the AppStream and BaseOS repositories and add them to your new product. + + 1. In the Foreman web UI, navigate to **Content** > **Products**, select the product you want to use, and then click **New Repository**. + 2. In the **Name** field, enter a name for the repository; for example, **Centos8StreamBaseOS**. Foreman automatically completes the **Label** field based on what you have entered for **Name**. + 3. From the **Type** list, select the type of repository, and then select **Yum**. + 4. In the **URL** field, enter the URL of the CentOS Stream Baseos repository to use as a source: + 5. Select the **Download Policy** list. The default is **On Demand** \- this means that Katello will only download metadata. If you want to download all the packages, change to **Immediate**, which downloads all the packages, which might run into 20-30 GB. + 6. Ensure that the **Mirror on Sync** check box is selected. This option ensures that content that is no longer part of the upstream repository is removed during synchronization. + 7. Click **Save**. + + + +Repeat these steps to add the AppStream repositories with URLs, for example, . Ensure that you use the closest official CentOS mirror instead. + +To perform an immediate synchronization, in your product window, click **Sync Now**. The initial synchronization can take some time. You can watch the synchronization status from **Content > Sync Status.** + +After the synchronization completes, you can view the new CentOS Stream operating system in **Hosts > Operating System**. Feel free to edit the name and description to suit your requirements. + +If you plan to use configuration management software like Ansible or Puppet, Foreman automatically creates an operating system report. You can turn this option off in **Administe > Settings > Ignore facts for operating system**. It is a good idea to rename the operating system to match the name in the configuration management software. For example, for Puppet, this would be _CentOS 8_. + +### Define your infrastructure's Lifecycle Environment + +The application life cycle is a concept central to Foreman's content management functions. The application life cycle defines how a particular system and its software look at a specific stage. For example, an application life cycle might be simple; you might only have a _development_ stage and _production_ stage. Foreman provides methods to customize each application life cycle stage in a controlled manner to suit your specifications. + +At this point, you must create your lifecycle environment paths: + + 1. In the Foreman web UI, navigate to **Content** >**Lifecycle Environments**. + 2. Click **New Environment Path** to start a new application life cycle. + 3. In the **Name** field, enter a name for your environment. + 4. In the **Description** field, enter a description for your environment. + 5. Click **Save**. + 6. Add as many environment paths as you need. For example, you can create _dev_, _test,_ _stage,_ and _production_ environments. To add these environments, click **Add New Environment**, complete the **Name** and **Description** fields, and select the prior environment from the **Prior Environment** list so that you chain them together in the sequence you expect to use. + + + +### Create and publish a Content View + +In Foreman, a Content View is a snapshot of your repositories at a particular point in time. Content Views provide the mechanism for isolating package versions in a state that you want to preserve. Content Views have a lot of configurable features that you can use for further refinement. For the purposes of this tutorial, let's keep things simple. + + 1. In the Foreman web UI, navigate to **Content** > **Content Views** and click **Create New View**. + 2. In the **Name** field, enter a name for the view. Foreman automatically completes the **Label** field from the name you enter. + 3. In the **Description** field, enter a description of the view. + 4. Click **Save** to create the Content View. + 5. In your new Content View, click **Yum Content > Add Repositories** in the **Repository Selection** area, click **Add.** For both the BaseOS and Appstream repositories, select packages you want to include, then click **Add Repositories**. + 6. Click **Publish New Version** and in the **Description** field, enter information about the version to log changes. + 7. Click **Save**. + + + +When you click **Publish New Version**, you create a snapshot of all the content that you have synchronized. This means that every server you subscribe to this Content View will have access only to the package versions in the Content View associated with this lifecycle environment. + +Every new Content View and subsequent versions are published first to the Library environment, where you can then promote to additional environments. + +### Promote content across lifecycle environments + +If you have tested new packages and are satisfied that everything is stable, you can promote your Content View to another lifecycle environment. + + 1. Navigate to **Content** > **Content Views** and select the Content View that you want to promote. + 2. Click the **Versions** tab for the Content View. + 3. Select the version you want to promote, and in the **Actions** column, click **Promote**. + 4. Select the environment where you want to promote the Content View and click **Promote Version**. + 5. Click the **Promote** button again. This time select the lifecycle environment, for example, **Test**, and click **Promote Version**. + 6. Finally, click on the **Promote** button again. For example, select the **Production** environment and click **Promote Version**. + + + +The servers that are assigned to that particular environment can now pull from an updated set of packages. + +### Create an Activation Key + +To register a CentOS Stream server to the content you have defined in a particular lifecycle, you must create an activation key. The activation key is a secure method of sharing credentials with a server. This uses a tool called **subscription-manager** to subscribe the CentOS Stream server to the content. + +When you have created the activation key, add the CentOS Stream subscription to the activation key. + + 1. In the Foreman web UI, navigate to **Content > Activation keys** and click **Create Activation Key**. + 2. In the **Name** field, enter the name of the activation key. + 3. In the **Description** field, enter a description for the activation key. + 4. From the **Environment** list, select the environment to use. + 5. From the **Content View** list, select the Content View you created just now. + 6. Click **Save**. + + + +### Create a CentOS Stream Host from Foreman managed content + +Everything is now set up. With the content you have created contained in a content view, and promoted across lifecycles, you can now provision hosts with exactly the content you want to use and subscribe to the updates you want them to receive. + +To create a host in Foreman, navigate to **Hosts > Create Host**. + + 1. In the **Name** field, enter a name for the host. + 2. Click the **Organization** and **Location** tabs to ensure that the provisioning context is automatically set to the current context. + 3. From the **Deploy On** list, select **Bare Metal**. + 4. Click the **Operating System** tab. + 5. From the **Architectures** list, select **x86_64**. + 6. From the **Operating System** list, select **CentOS_Stream 8.** + 7. Check the **Build Mode** box. + 8. For **Media Selection**, select **Synced Content** to use the CentOS Stream content you synced previously. + 9. From the **Synced** **Content** list, ensure that CentOS Stream is selected. + 10. From the **Partition Table** list, for this demo, select **Kickstart** default, but there are many available options. + 11. In the **Root Password** field, enter a root password for your new host. + 12. Click the **Interface** tab, and click **Edit,** and add a **Mac address.** + 13. Click the **Parameters** tab, and ensure that a parameter exists that provides an activation key. If not, add an activation key. + 14. Click **Submit** to save the host entry. + + + +Now the new host is in build mode, which means when you turn it on, it will begin installing the operating system. + +If you navigate to **Hosts > Content Hosts,** you can see the full details of the subscriptions, lifecycle environment, and content view that your host is subscribed to. + +This example is only a small glimpse into the many options you have to manage and provision CentOS Stream content in Foreman. If you want more detailed information about how you can manage CentOS Stream versions, control the content that your servers have access to, and control and protect the stability of your infrastructure, check out the [Foreman Content Management][5] documentation. With all CentOS Stream content under your control, you can create and register Centos Streams that consume only the content that you specify. For more detailed information on provisioning, see the [Foreman Provisioning][6] documentation. If you have any questions, feedback, or suggestions, you can find the Foreman community at + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/centos-stream-foreman + +作者:[Melanie Corr][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/melanie-corr +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) +[2]: https://twitter.com/Det_Conan_Kudo/status/1337366036023218177?s=20 +[3]: https://opensource.com/article/20/8/manage-repositories-pulp +[4]: https://docs.theforeman.org/3.0/Installing_Server_on_Red_Hat/index-katello.html +[5]: https://docs.theforeman.org/master/Content_Management_Guide/index-foreman.html +[6]: https://docs.theforeman.org/master/Provisioning_Guide/index-foreman.html From b22633523483e3b3d10c018acc4b95a8a80c4b9a Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 30 Sep 2021 05:03:45 +0800 Subject: [PATCH 018/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210929=20?= =?UTF-8?q?Install=20Java=20manually=20on=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210929 Install Java manually on Linux.md --- ...20210929 Install Java manually on Linux.md | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 sources/tech/20210929 Install Java manually on Linux.md diff --git a/sources/tech/20210929 Install Java manually on Linux.md b/sources/tech/20210929 Install Java manually on Linux.md new file mode 100644 index 0000000000..62f170cd7e --- /dev/null +++ b/sources/tech/20210929 Install Java manually on Linux.md @@ -0,0 +1,123 @@ +[#]: subject: "Install Java manually on Linux" +[#]: via: "https://opensource.com/article/21/9/install-java-manually-linux" +[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Install Java manually on Linux +====== +Manual installation provides the user with the highest level of control +over the Java runtime environment. +![Penguin driving a car with a yellow background][1] + +It is easy to use your Linux distribution's package management tool to install the Java software packages. However, sometimes you need to do a manual installation of Java. This is of particular importance to administrators of Java-based application servers such as Tomcat or JBoss. Many open source and proprietary software products rely on these services. + +### Developer or Runtime kit? + +The Java Virtual Machine (JVM) is provided in two different forms: The Java Development Kit (JDK) or the Java Runtime Environment (JRE). + +Software developers usually need the JDK. It contains the binaries necessary for compiling, running, and testing the source code. To deploy a pre-built Java application generally only requires the JRE. It doesn't include the compilers and other development tools. The JRE is typically installed in production environments due to increased security and space limitations. + +### Get Java + +You can download open source Java software from the internet. You can find downloads of OpenJDK tarballs at [Red Hat Developer][2], [Adoptium.net][3], or the [Zulu Community edition][4] from Azul. + +### Install Java + +Set up a directory to hold the Java files. I like to create one simply called `java` so I can download and extract the tarball in a dedicated directory. + + +``` +`$ mkdir -p java/jdk` +``` + +Let's use the JDK in this example. Save the downloaded file to the `jdk` directory. Then change into that directory: + + +``` +$ cd java/jdk +$ ls +OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz +``` + +Extract the tarball. Note that `tar` will create a new directory: + + +``` +$ tar xvzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz +$ ls +jdk-11.0.12+7 OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz +``` + +Confirm the version of the new JVM using the `-version` option: + + +``` +$ cd jdk-11.0.12+7/bin +$ ./java -version +``` + +The version output of the JVM looks similar to this: + + +``` +openjdk version "11.0.12" 2021-07-20 +OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7) +OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode) +``` + +#### Environment variables + +To ensure that a given application works correctly, it needs to know exactly how to locate the JVM. Two main variables should be set: **JAVA_HOME** and **PATH**: + + +``` +$ echo $JAVA_HOME +$ echo $PATH +``` + +These can be set in the user's `.bashrc` file. Make sure that the variables come after [any existing code that sets **PATH**][5]: + + +``` +#Set the JAVA_HOME +export JAVA_HOME=~/java/jdk/jdk-11.0.12+7 +#Add the JAVA_HOME to the PATH +export PATH="$JAVA_HOME/bin:$PATH" +``` + +### Manual install situations + +Different situations require a manual installation of Java. Consider the following three scenarios. + +One situation could be a requirement for a different, perhaps older, version of Java that is not available in your Linux distribution's software repositories. + +Another example could be a security-driven decision that Java will not be installed on an operating system by default or at the "root level." + +A third situation could be the need for several different versions of Java, usually because multiple instances of a J2EE web application are running on the same server. This OS sharing is less common today due to the increased usage of virtual machines and containers to isolate processes. However, the need to maintain varying container images continues to make the understanding of manual installation vital. + +### Wrap up + +I demonstrated how I like to install the Java runtime environment but feel free to make up a convention that works best for your needs. Ultimately, manual installation provides the user with the highest level of control over the Java runtime environment. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/install-java-manually-linux + +作者:[Alan Formy-Duval][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/car-penguin-drive-linux-yellow.png?itok=twWGlYAc (Penguin driving a car with a yellow background) +[2]: https://developers.redhat.com/products/openjdk/download +[3]: https://adoptium.net/%20%22https://Adoptium.net%22 +[4]: https://www.azul.com/downloads/zulu-community%20%22https://www.azul.com/downloads/zulu-community%22 +[5]: https://opensource.com/article/17/6/set-path-linux From 8237527b4896fb7fbfd0e0e69a50f2532a5c1bb1 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 30 Sep 2021 05:05:05 +0800 Subject: [PATCH 019/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020210929=20?= =?UTF-8?q?SuperTuxKart=201.3=20Release:=20Open=20Source=20Game=20for=20Li?= =?UTF-8?q?nux=20Adds=20Switch=20Support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20210929 SuperTuxKart 1.3 Release- Open Source Game for Linux Adds Switch Support.md --- ...urce Game for Linux Adds Switch Support.md | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 sources/news/20210929 SuperTuxKart 1.3 Release- Open Source Game for Linux Adds Switch Support.md diff --git a/sources/news/20210929 SuperTuxKart 1.3 Release- Open Source Game for Linux Adds Switch Support.md b/sources/news/20210929 SuperTuxKart 1.3 Release- Open Source Game for Linux Adds Switch Support.md new file mode 100644 index 0000000000..a953f29b63 --- /dev/null +++ b/sources/news/20210929 SuperTuxKart 1.3 Release- Open Source Game for Linux Adds Switch Support.md @@ -0,0 +1,88 @@ +[#]: subject: "SuperTuxKart 1.3 Release: Open Source Game for Linux Adds Switch Support" +[#]: via: "https://news.itsfoss.com/supertuxkart-1-3-release/" +[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +SuperTuxKart 1.3 Release: Open Source Game for Linux Adds Switch Support +====== + +One of the most popular open-source games, SuperTuxKart, has finally received a significant update after a gap of almost a year. It is a free and cross-platform 3D kart-racing game available for Linux, macOS, Windows, and Android. + +Just like Mario Kart, you can choose from a vast catalog of characters (based on mascots of open-source projects) racing in unique karts using special items to win races in various arenas. The game also features various racing modes, including a story Mode and an online Mode, to keep you engaged. + +Let us see what’s new with the latest release. + +### Nintendo Switch Port + +![Source: blog.supertuxkart.net][1] + +SuperTuxKart is now (unofficially) playable on the Switch. This has been possible due to the SDL2 implementation that was already used in the previous 1.2 release. To play the game, you will need to have **Homebrew** installed on your console. + +Moreover, the game also supports force feedback for the Joy-Cons and other controllers. This will undoubtedly make the game more lively whenever there are effects on-screen. + +### New Arenas + +Two new arenas — Ancient Colosseum Labyrinth and Alien Signal — have been introduced. + +![Source: blog.supertuxkart.net][2] + +The Ancient Colosseum Labyrinth is based on the Roman Colosseum with a dark setting and a secret tunnel. On the other hand, the Alien Signal is another arena inspired by a SETI-styled location with strange markings on the ground. + +The Las Dunas Soccer Stadium has also been updated and now houses a symmetrical soccer field. + +Lastly, lap line extensions have been added to various tracks. This means the lap will be counted even if you drive slightly off the main road. + +### GUI Improvements + +A major feature that will improve the gameplay experience is the introduction of **render resolution**. Using the slider, you can sacrifice the resolution for better frame rates on low-end systems. + +The high score selection screen now has its independent menu and displays the best times for normal races, egg hunts, and time trials. + +You can also open links in the game. Specifically, the links in a text/instruction that pops up in the game. This is possible, thanks to the SDL2 SDL_OpenURL. + +Blender 2.8 was officially used by artists to create tracks, maps, and more. + +### Redesigned Karts + +![Source: blog.supertuxkart.net][3] + +Your favorite characters like GNU, Adiumy and Emule have undergone visual changes. Sara the Racer is now replaced by Pepper, the mascot of Pepper&Carrot. + +You can refer to the [official release notes][4] for detailed information about the update. + +[Download SuperTuxKart 1.3][5] + +### Wrapping Up + +Overall, SuperTuxKart 1.3 has brought in exciting changes and fixes. Nintendo Switch users will now have something fresh to try out and play! + +What do you think about this release? Will you be willing to try it out on your Switch? Do share your thoughts below. + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/supertuxkart-1-3-release/ + +作者:[Rishabh Moharir][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/rishabh/ +[b]: https://github.com/lujun9972 +[1]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjczMiIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[2]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM2NSIgd2lkdGg9IjY0OSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[3]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI2NCIgd2lkdGg9IjI0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[4]: https://blog.supertuxkart.net/2021/09/supertuxkart-13-release.html +[5]: https://github.com/supertuxkart/stk-code/releases/tag/1.3 From 4ce2cdcd083c9d40e0ab2c16adf6467989c3256d Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 30 Sep 2021 05:05:14 +0800 Subject: [PATCH 020/143] add done: 20210929 SuperTuxKart 1.3 Release- Open Source Game for Linux Adds Switch Support.md --- sources/tech/20210930 .md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sources/tech/20210930 .md diff --git a/sources/tech/20210930 .md b/sources/tech/20210930 .md new file mode 100644 index 0000000000..76787246cd --- /dev/null +++ b/sources/tech/20210930 .md @@ -0,0 +1,16 @@ +[#]: subject: "" +[#]: via: "https://www.debugpoint.com/2021/09/fedora-35-beta-release/" +[#]: author: "[Arindam] + +Posted by Arindam + +Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + + +====== + From 5afd0e2a823fe6ef0e6b22e36bed41800eb232c8 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Thu, 30 Sep 2021 08:19:13 +0800 Subject: [PATCH 021/143] Delete 20210930 .md --- sources/tech/20210930 .md | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 sources/tech/20210930 .md diff --git a/sources/tech/20210930 .md b/sources/tech/20210930 .md deleted file mode 100644 index 76787246cd..0000000000 --- a/sources/tech/20210930 .md +++ /dev/null @@ -1,16 +0,0 @@ -[#]: subject: "" -[#]: via: "https://www.debugpoint.com/2021/09/fedora-35-beta-release/" -[#]: author: "[Arindam] - -Posted by Arindam - -Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - - -====== - From 89f4e17fc8b77ea2d7327b61fef7840e553a38b6 Mon Sep 17 00:00:00 2001 From: geekpi Date: Thu, 30 Sep 2021 08:43:28 +0800 Subject: [PATCH 022/143] translated --- ...0927 5 open source alternatives to Zoom.md | 71 ------------------- ...0927 5 open source alternatives to Zoom.md | 71 +++++++++++++++++++ 2 files changed, 71 insertions(+), 71 deletions(-) delete mode 100644 sources/tech/20210927 5 open source alternatives to Zoom.md create mode 100644 translated/tech/20210927 5 open source alternatives to Zoom.md diff --git a/sources/tech/20210927 5 open source alternatives to Zoom.md b/sources/tech/20210927 5 open source alternatives to Zoom.md deleted file mode 100644 index 4121a4acc2..0000000000 --- a/sources/tech/20210927 5 open source alternatives to Zoom.md +++ /dev/null @@ -1,71 +0,0 @@ -[#]: subject: "5 open source alternatives to Zoom" -[#]: via: "https://opensource.com/article/21/9/alternatives-zoom" -[#]: author: "Seth Kenlon https://opensource.com/users/seth" -[#]: collector: "lujun9972" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -5 open source alternatives to Zoom -====== -Try one of these open source video conferencing services. -![Two people chatting via a video conference app][1] - -I recently attended the [Practical Open Source Information POSI][2] conference, which was held on a free and open source video conferencing platform. As I attended a series of excellent talks about practical uses of open source software, I realized how commonplace video conferencing had become over the past few years. - -If open source does anything, it provides choice, and now that more and more workers have the freedom of working remotely, having an option in the way you connect makes a lot of sense. - -Sometimes, you need a full-featured video conferencing application with moderation, a presentation mode, and breakout rooms, while other times, all you want to do is make a quick call to a friend so that you can see each other's faces. - -### Jitsi - -[Jitsi][3] is an easy, casual, but robust video calling platform. You can self host it or use it on the public instance at [meet.jit.si][4]. It's got customizable URLs that make it easy to share links with friends you want to meet with, in-call chat, administrative controls, and call recording. It's very actively developed and has a whole collection of new features being tested and released each year. It's the platform Opensource.com uses for our weekly meetings. - -### Signal - -[Signal][5] is already a popular security-focused chat application, and it recently added [group video calls][6] to its features. The video calls are great for simple meetings, and because you can only meet with other people in your Signal contact list, there's no concern over unwanted guests at your video call party. There's also no back and forth "phone tag" as you try to locate the virtual room you're supposed to be meeting in. It all happens in Signal, so there's no guesswork required. - -Signal itself is pretty intuitive, and the video feature fits neatly into its existing conventions. In short, as long as your contacts are using Signal, this is a no-effort video calling platform. This is the application I use for personal contacts, and I regularly use its video calling feature to connect to friends and family. - -### P2p.chat - -[P2p.chat][7] is the easiest of them all, in both design and implementation. Working through Web Real-Time Communication (WebRTC), p2p.chat is a web application that allows you to connect directly to the person you're calling, with no host server required. There's not much to the p2p.chat interface, but that's another part of its appeal. There's no administrative control or presentation mode because p2p.chat is very much the "vidphone" promised in sci-fi: A casual, no-effort person-to-person (or people-to-people) video call with somebody far away. - -You use custom URLs to create a meeting space dynamically, so they're relatively easy to remember (aside from the small randomized part) and type. I use p2p.chat with friends who aren't on Signal, and it's never let me down. - -### BigBlueButton - -Designed for classrooms, conferences, and presentations, [BigBlueButton][8] is the solution you're looking for if you need strict admin controls and extreme flexibility. With BigBlueButton, you can mute all participants, block and kick a participant, create breakout rooms, create a collaborative whiteboard, share screens, give presentations, and record sessions. Participants can raise a digital hand for attention and set their status as a non-verbal method of communication. It's easy to use, but it's a serious platform for focused and very large groups. I've attended a few technical conferences using BigBlueButton, including the [Practical Open Source Information (POSI)][2] conference. - -### Wire - -[Wire][9] is an excellent choice for corporate customers looking for a hosted video chat and groupware client. Licensed under the [AGPL][10], this open source project is available for desktop and server, Android, and iOS. It features video calling, messaging, and file sharing, so even a remote meeting essentially has all the conveniences of meeting in person. You can try Wire for free for a limited time and then purchase a support contract for your company. Alternately, you can host it yourself. - -### Open source video chat - -There's no reason to settle for proprietary video calling hosted by companies you may not fully trust. The open source options available today are great for keeping in touch with all the people in your professional and personal life. Try one of these solutions the next time you want to meet with friends. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/9/alternatives-zoom - -作者:[Seth Kenlon][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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/chat_video_conference_talk_team.png?itok=t2_7fEH0 (Two people chatting via a video conference app) -[2]: https://opensource.org/posicfp -[3]: http://jitsi.org -[4]: http://meet.jit.si -[5]: https://signal.org -[6]: https://support.signal.org/hc/en-us/articles/360052977792-Group-Calling-Voice-or-Video-with-Screen-Sharing -[7]: https://p2p.chat/ -[8]: https://bigbluebutton.org/ -[9]: https://wire.com/en/ -[10]: https://opensource.org/licenses/AGPL-3.0 diff --git a/translated/tech/20210927 5 open source alternatives to Zoom.md b/translated/tech/20210927 5 open source alternatives to Zoom.md new file mode 100644 index 0000000000..aaeb19c752 --- /dev/null +++ b/translated/tech/20210927 5 open source alternatives to Zoom.md @@ -0,0 +1,71 @@ +[#]: subject: "5 open source alternatives to Zoom" +[#]: via: "https://opensource.com/article/21/9/alternatives-zoom" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +5 个替代 Zoom 的开源软件 +====== +试试这些开源视频会议服务之一。 +![Two people chatting via a video conference app][1] + +我最近参加了[实用开源信息 POSI][2] 会议,它是在一个免费的开源视频会议平台上举行的。当我参加了一系列关于开源软件的实际用途的精彩讲座时,我意识到视频会议在过去几年里已经变得非常普遍。 + +如果说开源做了什么,那就是提供了选择,现在越来越多的工人有了远程工作的自由,在你的连接方式上有一个选择是非常有意义的。 + +有时,你需要一个全功能的视频会议应用,其中包括审核、演示模式和分组讨论室,而其他时候,你想做的只是给朋友打一个快速电话,以便看到对方的脸。 + +### Jitsi + +[Jitsi][3] 是一个简单、随意、但强大的视频通话平台。你可以自己托管它,也可以在 [meet.jit.si][4] 的公共实例上使用它。它有可定制的 URL,可以很容易地与你想见面的朋友分享链接、通话中的聊天、管理控制和通话录音。它的开发非常活跃,每年都有一大批新功能被测试和发布。它是 Opensource.com 用于我们每周会议的平台。 + +### Signal + +[Signal][5] 已经是一个流行的以安全为重点的聊天应用,最近它又增加了[团体视频通话][6]的功能。视频通话非常适合简单的会议,而且因为你只能与你的 Signal 联系人列表中的其他人见面,所以不用担心你的视频通话聚会上有不速之客。当你尝试定位你应该开会的虚拟房间时,也没有来回的“电话标签”。这一切都发生在 Signal 中,因此无需猜测。 + +Signal 本身是非常直观的,视频功能非常适合其现有惯例。简而言之,只要你的联系人在使用 Signal,这就是一个不费力的视频通话平台。这是我用于个人联系的应用,我经常使用其视频通话功能与朋友和家人联系。 + +### P2p.chat + +[P2p.chat][7] 是其中最简单的一个,无论是设计还是实现。通过网络实时通信(WebRTC)工作,p2p.chat 是一个网络应用,允许你直接连接到你正在呼叫的人,而不需要主机服务器。p2p.chat 的界面并不多,但这也是其吸引力的另一部分。没有管理控制或演示模式,因为 p2p.chat 在很大程度上是科幻片中承诺的“视频电话”:与远方的人进行轻松的人对人(或人们对人们)视频通话。 + +你使用自定义的 URL 来动态地创建一个会议空间,所以它们相对容易记忆(除了小的随机部分)和输入。我和不在 Signal 上的朋友使用 p2p.chat,它从未让我失望过。 + +### BigBlueButton + +如果你需要严格的管理控制和极端的灵活性,[BigBlueButton][8] 是你正在寻找的解决方案,它专为教室、会议和演讲而设计。有了 BigBlueButton,你可以让所有与会者静音,阻止和踢走一个与会者,创建分组讨论室,创建协作式白板,共享屏幕,进行演讲,以及记录会议。与会者可以举起数字手表示注意,并将他们的状态设定为非语言交流方式。它很容易使用,但它是一个严肃的平台,适用于重点和非常大的群体。我参加过一些使用 BigBlueButton 的技术会议,包括[实用开源信息(POSI)][2]会议。 + +### Wire + +[Wire][9] 是寻找托管视频聊天和群件客户端的企业客户的绝佳选择。它是 [AGPL][10] 许可,这个开源项目可用于桌面和服务器、安卓和 iOS。它具有视频通话、发信和文件共享的功能,因此,即使是远程会议,基本上也有亲自开会的所有便利。你可以在有限的时间内免费试用 Wire,然后为你的公司购买一份支持合同。另外,你也可以自己托管它。 + +### 开源视频聊天 + +没有理由满足于由你可能不完全信任的公司托管的专有视频通话。今天可用的开源选项对于与你的职业和个人生活中的所有人保持联系是非常好的。下次你想和朋友见面时,不妨试试这些解决方案之一 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/alternatives-zoom + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/chat_video_conference_talk_team.png?itok=t2_7fEH0 (Two people chatting via a video conference app) +[2]: https://opensource.org/posicfp +[3]: http://jitsi.org +[4]: http://meet.jit.si +[5]: https://signal.org +[6]: https://support.signal.org/hc/en-us/articles/360052977792-Group-Calling-Voice-or-Video-with-Screen-Sharing +[7]: https://p2p.chat/ +[8]: https://bigbluebutton.org/ +[9]: https://wire.com/en/ +[10]: https://opensource.org/licenses/AGPL-3.0 From f982c59dbbb852b96a6ff0eee27209d58b9e5a36 Mon Sep 17 00:00:00 2001 From: geekpi Date: Thu, 30 Sep 2021 08:47:03 +0800 Subject: [PATCH 023/143] translating --- ...0210929 Dialect- An Open-Source Translation App for Linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md b/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md index 816f82b4be..f2d8192562 100644 --- a/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md +++ b/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md @@ -2,7 +2,7 @@ [#]: via: "https://itsfoss.com/dialect/" [#]: author: "Ankush Das https://itsfoss.com/author/ankush/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From e88cf7de0239a07155d164796395740fd489806a Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 30 Sep 2021 08:55:38 +0800 Subject: [PATCH 024/143] =?UTF-8?q?=E6=B8=85=E9=99=A4=E8=BF=87=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...le on Steam for Windows and Linux Users.md | 103 -------- ...Now Converts Firefox to Snap by Default.md | 86 ------- ... Has a Much Needed Minty Fresh New Look.md | 65 ----- ...for New Devices With Multiple Bug Fixes.md | 80 ------ ...te Attempt to Push Brave Advertisements.md | 86 ------- ...out Linux (And I am Happy He Was Wrong).md | 67 ----- ...w- A Real Linux Tab for True Linux Fans.md | 233 ------------------ 7 files changed, 720 deletions(-) delete mode 100644 sources/news/20210915 Open-Source Frontend for Emulators -RetroArch- Now Available on Steam for Windows and Linux Users.md delete mode 100644 sources/news/20210917 After Chromium, Ubuntu Now Converts Firefox to Snap by Default.md delete mode 100644 sources/news/20210917 Linux Mint-s Website Has a Much Needed Minty Fresh New Look.md delete mode 100644 sources/news/20210922 Ubuntu Touch OTA-19 Brings in Support for New Devices With Multiple Bug Fixes.md delete mode 100644 sources/news/20210927 Brave Launches Privacy-Focused -Brave Talk- as a Desperate Attempt to Push Brave Advertisements.md delete mode 100644 sources/talk/20210825 When Linus Torvalds Was Wrong About Linux (And I am Happy He Was Wrong).md delete mode 100644 sources/tech/20210923 JingPad Review- A Real Linux Tab for True Linux Fans.md diff --git a/sources/news/20210915 Open-Source Frontend for Emulators -RetroArch- Now Available on Steam for Windows and Linux Users.md b/sources/news/20210915 Open-Source Frontend for Emulators -RetroArch- Now Available on Steam for Windows and Linux Users.md deleted file mode 100644 index 2c34c768a2..0000000000 --- a/sources/news/20210915 Open-Source Frontend for Emulators -RetroArch- Now Available on Steam for Windows and Linux Users.md +++ /dev/null @@ -1,103 +0,0 @@ -[#]: subject: "Open-Source Frontend for Emulators “RetroArch” Now Available on Steam for Windows and Linux Users" -[#]: via: "https://news.itsfoss.com/retroarch-steam/" -[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Open-Source Frontend for Emulators “RetroArch” Now Available on Steam for Windows and Linux Users -====== - -Since its release way back in 2010, [RetroArch][1] has been one of the most popular game emulator interfaces. Over the years, it has received numerous upgrades and lets you play classic games from various retro consoles ranging from the Atari 2600 to the PlayStation 2. - -While the RetroArch team has been planning to launch this on Steam for more than a year, it is finally available to the masses! - -This means you can now emulate and play your favorite retro games without having to leave Steam. - -Sure, you can download it from their official website, but launching it directly from your Steam collection proves to be a hassle-free way for most users. - -Not to forget, RetroArch’s presence on Steam will put this on a lot of people’s radars. So, this should give RetroArch’s popularity a boost on both Windows and Linux platforms. - -![RetroArch on Steam][2] - -Keep in mind that the RetroArch version available on Steam lacks certain features and most cores compared to the official one. Let us take a look at them. - -### Key Highlights - -#### Emulator Cores - -Unlike the standard way of using the _Core Downloader_, Cores (Emulators) can be installed as **DLCs** from Steam. This can be easily done by navigating to **“Manage DLC”** on Steam’s Retroarch browser page. - -Only 10 cores are available at launch. Here’s the list of cores – - - * Mupen64 Plus Next – Nintendo N64 - * Kronos – Sega Saturn - * PCSX ReARMed – PlayStation 1 - * Stella – Atari 2600 - * SameBoy – Game Boy & Game Boy Colour - * mGBA – Game Boy Advance - * Mesen – Nintendo Entertainment System - * Mesen S – Super Nintendo Entertainment System - * Genesis Plus GX – Sega SG-1000, Master System, Game Gear, Genesis and Mega CD - * Final Burn Neo – Arcade - - - -Additional cores will certainly be released in the future. According to the developer: - -> More cores will be coming as DLC soon. We have no ETA on when these will arrive, but it will likely be a dripfeed of new cores on a periodic basis as it takes a lot of time preparing the pages, descriptions, logos, previews and whatnot that a Steam page requires. - -RetroArch Blog - -![Retroarch Main Menu \(Source: Retroarch\)][3] - -#### Other Highlights - -RetroArch UI stays the same. This may be overwhelming for users who will be using RetroArch for the first time. The developers have plans to revamp its UI soon enough. - -Remote Play and Steam Cloud sync should also work. - -Do note that RetroArch will only be available for 64-bit Linux or Windows PCs. As of now, there are no plans for macOS yet. - -You can learn more about RetroArch’s availability on Steam on their [official blog post][4]. - -### Wrapping Up - -The addition of RetroArch to Steam will certainly increase their userbase. Initial reviews seem to be very positive, which is a good thing! - -They should get better financial support from new users on [Patreon][5] as well. You might as well start helping them out if interested. - -If you want to try it out, head to your Steam client and search for it. Or, click on the link below to explore it on Steam store along with its system requirements. - -[RetroArch on Steam][6] - -**Via**: [GamingOnLinux][7] - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/retroarch-steam/ - -作者:[Rishabh Moharir][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/rishabh/ -[b]: https://github.com/lujun9972 -[1]: https://www.retroarch.com/ -[2]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM3NSIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[3]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQyOSIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[4]: https://www.libretro.com/index.php/retroarch-finally-released-on-steam/ -[5]: https://www.patreon.com/libretro -[6]: https://store.steampowered.com/app/1118310/RetroArch/ -[7]: https://www.gamingonlinux.com/2021/09/retroarch-gets-a-steam-release-bringing-emulation-to-even-more-gamers diff --git a/sources/news/20210917 After Chromium, Ubuntu Now Converts Firefox to Snap by Default.md b/sources/news/20210917 After Chromium, Ubuntu Now Converts Firefox to Snap by Default.md deleted file mode 100644 index afd9c82492..0000000000 --- a/sources/news/20210917 After Chromium, Ubuntu Now Converts Firefox to Snap by Default.md +++ /dev/null @@ -1,86 +0,0 @@ -[#]: subject: "After Chromium, Ubuntu Now Converts Firefox to Snap by Default" -[#]: via: "https://news.itsfoss.com/ubuntu-firefox-snap-default/" -[#]: author: "Abhishek https://news.itsfoss.com/author/root/" -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -After Chromium, Ubuntu Now Converts Firefox to Snap by Default -====== - -One of the major and controversial [changes in the upcoming Ubuntu 21.10][1] is the conversion of Firefox from deb to snap. - -Yes, you heard it right. The default Firefox will be a Snap application, not the regular DEB version. - -As [spotted by OMG! Ubuntu][2], this is done as per an agreement between Mozilla and Canonical (Ubuntu’s parent company). - -The [feature freeze exception (FFE)][3] mentions it clearly: - -> Per Canonical’s distribution agreement with Mozilla, we’re making the snap the default installation of Firefox on desktop ISOs starting with Ubuntu 21.10. - -With this change, the Firefox deb package will be converted to Firefox snap package. - -This means that going forward, Firefox will be available as Snap. I think this change also means that even if you use apt command to install it, you’ll be getting the Snap package. - -### Deja vu? - -If you feel that this has been done in the past, you have got the right feeling. In the past, Ubuntu converted the Chromium browser to Snap. - -Today, if you use apt install chromium-browser, you still get the Snap version. There is no DEB package for Chromium in Ubuntu anymore. - -When Ubuntu made this sudden change on its own, there was an uproar. The conversion of Firefox to Snap will also create controversy. But this time, Ubuntu shares the blame with Mozilla. - -### Mozilla wants Snap - -![][4] - -Interestingly, it was [Mozilla that approached Canonical for this change][5]. Mozilla will maintain the Snap version of Firefox and the end users will get quick updates directly from the source. - -After all, it takes a few days before a new Firefox release lands in Ubuntu. With the Snap move, your Firefox will be updated to the new version the same day. - -### Concerns? - -A few for sure. I know there are a few people completely averted to Snap, I am not one of them. - -I have three major complaints with Snap packages: slow start up speed, poor system integration and high disk space. - -Over the time, Snaps have improved on the disk space front. But despite all the improvements, Snap packages still take longer to start. This could be tolerable with an IDE but it may ruin the browsing experience. - -This slow startup speed makes me wonder why it is called ‘Snap’ because surely, it doesn’t start in a snap. - -Another thing that bothers me is the Snap auto-refresh. Snap apps are updated automatically. If Mozilla starts pushing updates more frequently, this [Firefox restart annoyance][6] in the middle of work will be more frequently as well. - -![][7] - -The change will impact you when you install or upgrade to Ubuntu 21.10. The change will eventually propagate to Ubuntu 22.04 LTS. - -What do you think of this change? Yeah or neah? - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/ubuntu-firefox-snap-default/ - -作者:[Abhishek][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/root/ -[b]: https://github.com/lujun9972 -[1]: https://news.itsfoss.com/ubuntu-21-10-release-schedule/ -[2]: https://www.omgubuntu.co.uk/2021/09/ubuntu-makes-firefox-snap-default -[3]: https://bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+bug/1943840 -[4]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjI1NCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[5]: https://discourse.ubuntu.com/t/feature-freeze-exception-seeding-the-official-firefox-snap-in-ubuntu-desktop/24210 -[6]: https://news.itsfoss.com/mozilla-annoying-new-tab/ -[7]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMwOCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= diff --git a/sources/news/20210917 Linux Mint-s Website Has a Much Needed Minty Fresh New Look.md b/sources/news/20210917 Linux Mint-s Website Has a Much Needed Minty Fresh New Look.md deleted file mode 100644 index 8458af1ffe..0000000000 --- a/sources/news/20210917 Linux Mint-s Website Has a Much Needed Minty Fresh New Look.md +++ /dev/null @@ -1,65 +0,0 @@ -[#]: subject: "Linux Mint’s Website Has a Much Needed Minty Fresh New Look" -[#]: via: "https://news.itsfoss.com/linux-mint-new-website-design/" -[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Linux Mint’s Website Has a Much Needed Minty Fresh New Look -====== - -Linux Mint is one of the [best Linux distributions][1] available while offering a modern user experience. - -However, Linux Mint’s original website looked dated and potentially unattractive to new-age computer users. - -Many suggested a visual makeover to reflect Linux Mint’s taste through a modern website design. And, only recently the developers started working on a redesign in collaboration with the community members, asking for feedback and getting insights on proposed designs. - -Finally, a design was finalized and applied to [Linux M][2][i][2][nt’s official website][2]. - -The website looks clean and informative, great on desktop, and perfectly fits mobile phone browsers! - -![][3] - -Every new Linux user should be able to evaluate their requirements by looking at the features offered easily. - -The information is well-presented to convince users why they should try out Linux Mint on their desktop system. - -![][4] - -The key highlights of the website would be the homepage, download page, and donation page. - -Of course, you can choose to explore more about Linux Mint and how everything works through individual resources (like our articles), but the official website should be the essential starting point, which it is now. - -The accent color and the theme combination feels just like what Linux Mint needed! Navigating through various web pages and the menu is a breeze. I don’t think there is any unnecessary element on the website; everything fits perfectly in the first look. The page load time is faster as well. - -The blog/monthly news section continues to use the same design. And, I’m not certain if they intend to refresh that by applying the same design anytime soon. But, I think that should happen to ensure consistency between their web pages. - -_What do you think about Linux Mint’s new website design? Do you like it? Do you think this would help them get more attention from new-age users?_ - -_You are welcome to share your thoughts in the comments down below._ - -### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/linux-mint-new-website-design/ - -作者:[Ankush Das][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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-linux-distributions/ -[2]: https://linuxmint.com -[3]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUzOSIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[4]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUzMSIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= diff --git a/sources/news/20210922 Ubuntu Touch OTA-19 Brings in Support for New Devices With Multiple Bug Fixes.md b/sources/news/20210922 Ubuntu Touch OTA-19 Brings in Support for New Devices With Multiple Bug Fixes.md deleted file mode 100644 index ee950086fa..0000000000 --- a/sources/news/20210922 Ubuntu Touch OTA-19 Brings in Support for New Devices With Multiple Bug Fixes.md +++ /dev/null @@ -1,80 +0,0 @@ -[#]: subject: "Ubuntu Touch OTA-19 Brings in Support for New Devices With Multiple Bug Fixes" -[#]: via: "https://news.itsfoss.com/ubuntu-touch-ota-19/" -[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Ubuntu Touch OTA-19 Brings in Support for New Devices With Multiple Bug Fixes -====== - -Ubuntu Touch is an open-source OS for mobile devices that respects user privacy, unlike Google’s Android for privacy-focused users. The UBports community has released yet another update of Ubuntu Touch that is based on Ubuntu 16.04. - -This release supports many new devices and contains significant updates on certain phones, along with numerous bug fixes. - -Let’s take a look at them. - -![Source: UBports][1] - -### What’s New? - -#### Framework and Packages - -The 16.04.7 Qt framework and packages like qml-module-qtwebview and libqt5webview5-dev have been added to the App framework. This improves application compatibility with other platforms. - -#### Imrpovements to Halium devices - -The gyroscope and magnetic field sensors can now be accessed on the Halium 5.1 and 7.1 devices. Do note that the functionality of the compass is still under development. The same applies to the magnetic field sensor for the Halium 9 and 10 devices that now use sensorfw, thus replacing the legacy platform-API. - -#### Pixel 3a - -You can completely shut down the device as intended. It no longer hangs in the process of the shutdown, so you should have better battery life. Additionally, the freezing of the camera app while capturing sounds when recording videos has also been fixed. - -#### Messaging App Fix - -The messaging app has also received a minor update. When messages arrive, the keyboard will no longer appear automatically but when needed. This is useful if the user doesn’t want to reply or access the keyboard on demand. - -#### Media Hub - -A bug that prevented the device from sleep when audio sounds were played in successions has been fixed. Another major bug that reduced battery life drastically, because of uncleared requested wake locks, has also been taken care of. - -### Other Improvements - -There are several new devices added to support Ubuntu Touch, along with fixes for the Wi-Fi, audio, and camera. - -You can look at the [official release notes][2] to check the list of devices added and explore more technical details. - -### Update or Installation - -Ubuntu Touch users should automatically receive an update or head to the updates in the System Settings to check for available updates. - -Those willing to try out Ubuntu Touch for the first time can explore the [official website][3] and check if their device is supported correctly before installation. - -I am particularly looking forward to the Ubuntu Touch OS update with Ubuntu 18.04 or newer as its base after several minor updates. - -_What do you think about this new update? Have you tried it yet?_ - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/ubuntu-touch-ota-19/ - -作者:[Rishabh Moharir][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/rishabh/ -[b]: https://github.com/lujun9972 -[1]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQyMiIgd2lkdGg9IjM0MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[2]: https://ubports.com/blog/ubports-news-1/post/ubuntu-touch-ota-19-release-3779 -[3]: https://ubuntu-touch.io/get-ubuntu-touch diff --git a/sources/news/20210927 Brave Launches Privacy-Focused -Brave Talk- as a Desperate Attempt to Push Brave Advertisements.md b/sources/news/20210927 Brave Launches Privacy-Focused -Brave Talk- as a Desperate Attempt to Push Brave Advertisements.md deleted file mode 100644 index 338aff0972..0000000000 --- a/sources/news/20210927 Brave Launches Privacy-Focused -Brave Talk- as a Desperate Attempt to Push Brave Advertisements.md +++ /dev/null @@ -1,86 +0,0 @@ -[#]: subject: "Brave Launches Privacy-Focused “Brave Talk” as a Desperate Attempt to Push Brave Advertisements" -[#]: via: "https://news.itsfoss.com/brave-talk/" -[#]: author: "Jacob Crume https://news.itsfoss.com/author/jacob/" -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Brave Launches Privacy-Focused “Brave Talk” as a Desperate Attempt to Push Brave Advertisements -====== - -Ever since the initial Covid-19 outbreak in 2020, the world has seen an explosion in the popularity of online meeting services. Unfortunately, many of these are not very privacy-friendly, especially as many of these are offered by notoriously data-hungry advertising companies. - -However, the company behind the wildly successful Brave browser has developed a privacy-friendly solution, “Brave Talk.” - -### Brave Talk: Open-Source Based Video Conferencing - -![][1] - -Unlike Zoom and Google Meet, Brave Talk is a piece of new video conferencing software that aims to provide better privacy than its competitors. - -It is based on an open-source video conferencing solution i.e., [Jitsi][2], and claims to track no user data. - -As a Brave service, alongside Brave News and Search, Brave Talk is integrated directly into the browser. While this makes it more convenient to start calls, it could be a push to promote the web browser more than ever. - -Like Apple’s FaceTime, Brave Talk calls can only be started from a specific browser, which is Brave. This is in contrast to many other [open-source video conferencing services][3]. - -### The Push for Brave Advertising Network - -![][4] - -Another thing that many people may point out is that it requires the use of Brave tokens. These are kind of like frequent flyer points, except for use digitally by viewing ads. - -For me, this wasn’t very clear, as Brave Talk never seemed to actually do anything with these tokens. - -So, the users need to opt for Brave rewards if they want to use the service for free. - -**Editor’s Thoughts:** Doesn’t it sound like an aggressive push to promote Brave’s advertising network? - -Considering that it utilizes an open-source technology, it not only restricts to a particular web browser, the requirement of enabling “Brave Rewards” may seem to be a bit extreme just because it promises total privacy? - -Of course, it is just a thought here. If the user (you) do not have any problem turning on “Brave Rewards,” Brave’s privacy-focused advertising network, and switching to Brave web browser, you may find Brave Talk an exciting option. - -![][5] - -### Final Thoughts - -I believe that as a privacy-centric offering, Brave Talk sounds good on paper. - -It may even offer a decent call quality and an engaging UI, among other things. Also, it should be mentioned that there are two tiers: a free tier and a premium option of **$7/month** with more features. - -If you are already using Brave Rewards and have no issues with their private advertising service, it could be a good option for you. It may not be a convenient option for users who do not use the Brave web browser or do not prefer the Brave Rewards system. - -If you want to try Brave Talk out for yourself, you will need the Brave browser. For more details, you can refer to the [official announcement][6]. - -[Brave Talk][7] - -_What do you think about Brave Talk? Let me know in the comments below!_ - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/brave-talk/ - -作者:[Jacob Crume][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/jacob/ -[b]: https://github.com/lujun9972 -[1]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxOCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[2]: https://itsfoss.com/jitsi-meet/ -[3]: https://itsfoss.com/open-source-video-conferencing-tools/ -[4]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUxOCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[5]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ3OCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[6]: https://brave.com/brave-talk-launch/ -[7]: https://talk.brave.com diff --git a/sources/talk/20210825 When Linus Torvalds Was Wrong About Linux (And I am Happy He Was Wrong).md b/sources/talk/20210825 When Linus Torvalds Was Wrong About Linux (And I am Happy He Was Wrong).md deleted file mode 100644 index 08548e553e..0000000000 --- a/sources/talk/20210825 When Linus Torvalds Was Wrong About Linux (And I am Happy He Was Wrong).md +++ /dev/null @@ -1,67 +0,0 @@ -[#]: subject: "When Linus Torvalds Was Wrong About Linux (And I am Happy He Was Wrong)" -[#]: via: "https://news.itsfoss.com/trovalds-linux-announcement/" -[#]: author: "Abhishek https://news.itsfoss.com/author/root/" -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -When Linus Torvalds Was Wrong About Linux (And I am Happy He Was Wrong) -====== - -Linus Torvalds, the creator of Linux kernel and Git, needs no introduction. - -A shy geek who does not talk much in public but prefers mailing lists. Loves codes and gadgets more than other things. Prefers working from home than spending time in shiny offices. - -Torvalds expresses his opinion on Linux related things quite vocally. We can’t forget the ‘finger to Nvidia’ moment that forced Nvidia to improve Linux support (it was way worse back in 2012). - -Generally, I agree with his opinion and most often his views have turned out to be correct. Except in this one case (and that’s a good thing). - -### Torvalds’ “incorrect prediction” on Linux - -30 years ago, Torvalds announced the Linux project. He was a university student at that time and wanted to create a UNIX-like operating system because UNIX itself was too costly. - -While announcing the project, Torvalds mentioned that the project was just a hobby and it won’t be big and professional like GNU. - -> I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones. - -Linus Torvalds while announcing the Linux project - -Little did Torvalds knew that his ‘hobby’ will become the backbone of today’s IT world and the face of a successful open source project. - -Here’s the complete message he sent: - -Hello everybody out there using minix – - -I’ve currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I’ll get something practical within a few months, and I’d like to know what features most people would want. Any suggestions are welcome, but I won’t promise I’ll implement them 🙂 - -Linus ([torv…@kruuna.helsinki.fi][1]) - -PS. Yes – it’s free of any minix code, and it has a multi-threaded fs. It is NOT protable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that’s all I have :-(. - -That was on 25th August 1991. Torvalds announced the Linux project and then on 5th October 1991, he released the first Linux kernel. The [interesting fact about Linux][2] is that it was not open source initially. It was released under GPL license a year later. - -The Linux Kernel is 30 years old today. Happy 30th to this amazing open source project. - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/trovalds-linux-announcement/ - -作者:[Abhishek][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/root/ -[b]: https://github.com/lujun9972 -[1]: https://groups.google.com/ -[2]: https://itsfoss.com/facts-linux-kernel/ diff --git a/sources/tech/20210923 JingPad Review- A Real Linux Tab for True Linux Fans.md b/sources/tech/20210923 JingPad Review- A Real Linux Tab for True Linux Fans.md deleted file mode 100644 index 34a368bebd..0000000000 --- a/sources/tech/20210923 JingPad Review- A Real Linux Tab for True Linux Fans.md +++ /dev/null @@ -1,233 +0,0 @@ -[#]: subject: "JingPad Review: A Real Linux Tab for True Linux Fans" -[#]: via: "https://itsfoss.com/jingpad-a1-review/" -[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -JingPad Review: A Real Linux Tab for True Linux Fans -====== - -If you follow Linux news enthusiastically, you might have come across a new name recently: [JingOS][1]. - -It is a new Linux distribution designed for touch devices. It can also be used as a regular desktop operating system on non-touch devices. - -![JingOS][2] - -JingOS is not the primary product for Beijing based JingLing tech. They have created this OS for their flagship product, JingPad, an ARM-based Linux tablet. - -This review focuses on two aspects: - - * The hardware side of JingPad tablet - * The software side of JingOS - - - -So that you know - -People at Jing sent me the JingPad for free to review the device. I can keep the device forever. However, this does not mean that review is biased in their favor to show only the positives. I am sharing my experience with the device and its operating system. - -### JingPad: The first impression - -![JingPad A1][3] - -To be frank with you, I was expecting a mediocre, generic tablet preinstalled with a Linux OS. I was wrong. - -The moment I unboxed the device and hold it in my hands, I got a feeling that I am looking at a premium device. The black colored tablet has a smooth finish. The back has a glossy finish and though I prefer matte usually, I liked the shiny body. I learned later that they used Corning Gorilla Glass for the back. - -The hardware specification of the gadget is more than just decent. Take a look: - - * 11 inches AMOLED screen with 4:3 aspect ratio - * 2K screen with 266PPI and 350nit - * Unisoc Tiger T7510 ARM Chip - * 8000mAh battery - * Weighs around 550g so not too heavy - * Around 7 mm in thickness - * 16 MP back camera and 8 MP front camera - * Dual band WiFi and Bluetooth 5.0 - * 8 GB RAM - * 256 GB UMCP storage which can be expanded by MicroSD of 512 GB in size - - - -JingPad also has companion stylus and keyboard. The review unit did not have the stylus but I did get the detachable keyboard. More on the keyboard later. - -Note - -JingOS is in alpha stage of development. A lot of things do not work as expected or promised at this moment. It should eventually get better in the later stages of development. - -### JingOS: Experience the user interface - -The JingOS will immediately remind you of iOS or Deepin OS, whichever you prefer. The interface is clean and the 2K display makes things look pretty. - -There are row of application icons and a dock at the bottom. Swiping up from the bottom brings an activity area displaying all the running applications. From here, you can drag an application upward to close it. Touching the trash will close all the running applications. To minimize an application, you have to swipe from right to left. - -![JingOS interface][4] - -Swiping down from the top left brings the notification center. Doing the same on the top right corner lets you access the Settings menu. - -The theming option is limited to light and dark themes but hey, you are getting the dark theme at least. Changing the theme requires a restart, which is an annoyance. - -![JingOS provides a dark mode][5] - -From what I see and experience, JingOS uses Ubuntu as base. For the interface, it is using KDE Plasma and probably some parts of GNOME underneath. The footprints of KDE Plasma are visible at places. For example, look at this screenshot notification. - -![JingOS is built on top of KDE Plasma][6] - -Since it is based on Ubuntu, you can use the apt-get commands in the terminal. The terminal (KDE’s Konsole) can be used with both keyboard and on-screen keyboard. You also have the option to split the terminal window. - -![Terminal][7] - -Something that bothered me with JingOS is that it only works in the landscape mode. I could not find a way to use it in the portrait mode. This creates an issue if you are trying to log into a website in the browser because the on-screen keyboard takes half of the screen and you cannot see the form fields properly. - -![Works only in landscape mode][8] - -There is also no tap to wake feature. Face unlock is also missing. There is a fingerprint reader on the power button but it does not work for now. JingOS will add this feature in the [next couple of months through software update][9]. - -Overall, JingOS is pretty to look at, pretty to use for most part of it. - -### Keyboard - -The review device I got came with the companion keyboard. The keyboard is made for JingPad. It is magnetic and the tab sticks to it. It is detected automatically, no wonder there. It doubles up as cover to give the device front and back protection. - -![JingPad with keyboard][10] - -You can tilt the device at certain angles to use it comfortably as a laptop. - -![JingPad with keyboard placed at angle][11] - -**At the time of writing this review, the keyboard support is in initial stages for JingOS. This is why it does not work as it should.** - -There are several function keys on the keyboard for controlling the volume, brightness, media playback, screen lock etc. - -Most function keys work, except the one for showing the desktop. The super key, which has JingPad logo, does not work as well. I was expecting it to bring the home screen from running applications but that did not work. - -The worst part is that when the keyboard is attached, it does not show the mouse pointer on the screen. That means going into a hybrid use mode where you touch the applications icon to open them and then use the keyboard for typing. This must be improved in the future. - -Coming to the typing, the keys are a bit tiny but not miniscule. I think that’s expected from the keyboard that has to match the 11 inches screen. The keys - -The added weight of the keyboard makes the device heavier than usual but I guess you’ll have to make a compromise with the ease of use and the increased weight. - -Another thing I noticed that when you put the lid down in the keyboard mode, the screen is not locked automatically. I expected a similar behavior to closing the lid of laptop. - -### Battery life, charging and performance - -JingPad comes with a 8000 mAh and claims to have up to 10 hours of battery life. They also claim that their 18W fast charger will charge the device completely in 3 hours. - -My review device did not come with the fast charger because it was still under manufacturing when they shipped the device. I got a travel adapter instead and it took slightly more than 5 hours to charge the device. - -I tested and found that if you keep the device on standby, the battery lasts around 42 hours. If you start using it continuously, it goes for 6 hours max. Now, this depends on what kind of work you are doing on the system. A few tweaks like reducing screen brightness, refresh rate, disabling connectivity could give it some extra battery life. - -### Camera and sound - -![][12] - -There are two cameras here. 16 MP back camera for taking pictures (well, why not) and 8 MP front camera for video calls and online meetings. - -Camera performance is okay. The default camera does not come with AI features like the smartphones but that’s fine. You are not going to use it primarily as a camera, after all. - -The front camera is good enough for the video calls. The placement of front camera is on the top so when you are using it in the landscape mode, it may seem that you are not looking directly into the camera. But people could still see and hear you well so that should not be an issue. - -Speaking of hearing, JingPad has 4 speakers, two on each side. They provide decent sound for causal YouTube and watching streaming content for a single person. No complaints in this department. - -### Applications - -JingPad comes pre-installed with some of its own applications. These applications include a file manager, camera app, voice recorder, camera app, gallery app, music and video applications. Many of these applications are open source and you can find the code on [their GitHub repository][13]. - -![The music app from JingOS][14] - -JingOS has an app store of its own where it provides a handful of applications that work on the touch devices. - -![JingOS App Store][15] - -The app store does not offer many applications at the moment but _**you can use the apt package manager**_ to get additional software (from JingOS’s repositories). - -My biggest complaint is not about the lack of applications. It’s about the versions of some of the offered applications. I downloaded Mozilla Firefox from the app store and it installed version 82. The current Firefox version is 92 at the time of writing the review. I tried updating the system, even in command line, to see if it gets updates but there were none. - -Because of this outdated version, I could not [play Netflix on Firefox][16]. There is no dedicated Netflix app so this was the only way to test it. - -![Issue with outdated Firefox][17] - -There are plans to add Android apps support as well. I cannot say how well it will work but something is better than nothing. - -### Using JingPad for coding - -I am not a programmer, not anymore at least. But since JingPad’s targeted customer include young coders who are frequently on the move, I tried using it for some simple coding. - -There is no IDE available from the App Store but VS Code was available to install from the APT repository as well as in DEB file format. I installed it and opened it but it never ran like it was supposed to be. - -So, I installed Gedit and wrote some sample bash scripts. Not much of coding but with the attached keyboard, it was not too bad. - -It would have been a lot better if the copy-paste worked but unfortunately, I was not able to select and copy the code from random websites like a true programmer of the 21st century. I hope this gets fixed in the future updates. - -### Android compatibility and other operating systems - -I know what you are thinking. The tab looks good hardware wise. It is designed to run a Linux distribution based on Ubuntu. So can I use Ubuntu or some other distributions? - -JingOS team says that you are free to install any other operating system on it. It uses ARM architecture so that is something to keep in mind while replacing the OS. - -You will also be able to install JingOS back. I am yet to experiment with this part. I’ll update the review when I do that. - -As per the [roadmap of JingOS][18], there are plans for adding Android compatibility. This means you should be able to install Android or Android based ROM/distributions. As per the JingOS team, they will be developing the solution in house instead of using tools like Anbox. That will be interesting to see. - -Here’s a demo video of an Android app running on JingPad under JingOS: - -### Conclusion - -JingOS is in alpha stage of development at the moment. Most of the issues I have encountered in this review should be addressed in the future OTA updates, as their roadmap suggests. The final stable version of JingPad should be available by March 2022. - -JingPad as a device comes on the pricey side but it also gives you a high-end gadget. 2K AMOLED display with Gorilla Glass, 8 GB RAM, 256 GB UMCP storage and other stuff you get only in high-end devices. The sound from the speakers is decent. - -The magnetic tab cover and the detachable keyboards are also of premium quality. These things matter because you are paying a good amount of money for it. - -The [JingPad with the Pencil][19] (stylus) and the keyboard costs $899. It comes with free international shipping and 1-year warranty. In many countries, there will also be additional custom duty levied on top of this price. - -That seems like a lot of money, right? If you compare it to the price of iPad Air with same specifications (256 GB storage, WiFi+Cellular), keyboard and Pencil, the Apple device price reaches $1300 in the USA. - -It is natural to compare JingPad with PineTab, another ARM-based Linux tablet. But PineTab is not a high-end gadget. It has modest specification and geared towards DIY tinkerers. JingPad, on the other hand, targets regular users, not just the DIY geeks. - -Altogether, JingPad is aiming to give you a true Linux tablet but in the premium range. You get what you are paying for. A premium device for a premium pricing, with the freedom to run Linux on it. - -_**But at this stage, JingOS has a lot of pending work to make JingPad a consumer level Linux tablet.**_ You should wait for the final device unless you really want your hands on it right away. - -I plan to make a video review of the device where you can see it in action. I am not very good at doing video reviews, so this will take some time. You may leave your comments on what you would like to see in the video review and I’ll try to cover it. - -_Meanwhile, you can follow the updates on JingPad and JingOS development on their [Telegram channel][20] or [Discord][21]. You may also watch the demos on [their YouTube channel][22]._ - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/jingpad-a1-review/ - -作者:[Abhishek Prakash][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/abhishek/ -[b]: https://github.com/lujun9972 -[1]: https://en.jingos.com/ -[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/jing-os-interaface.webp?resize=768%2C512&ssl=1 -[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingpad.jpeg?resize=800%2C529&ssl=1 -[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingos-interface.webp?resize=800%2C584&ssl=1 -[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingos-theme-change.webp?resize=800%2C584&ssl=1 -[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingos-plasma-notification.webp?resize=800%2C584&ssl=1 -[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingpad-terminal.webp?resize=800%2C584&ssl=1 -[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingpad-landscape.webp?resize=800%2C584&ssl=1 -[9]: https://forum-cdn.jingos.com/uploads/default/original/1X/4c6ef800ef62f0315852fde4f2c32958b32d93a9.png -[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingpad-with-keyboard.webp?resize=800%2C600&ssl=1 -[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingpad-keyboard-angle.webp?resize=800%2C600&ssl=1 -[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingpad-camera.png?resize=787%2C552&ssl=1 -[13]: https://github.com/JingOS-team/JingOS -[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingos-music-app.webp?resize=800%2C584&ssl=1 -[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/jingos-app-store.webp?resize=800%2C584&ssl=1 -[16]: https://itsfoss.com/netflix-firefox-linux/ -[17]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/JingPad-Netflix-Issue.webp?resize=800%2C584&ssl=1 -[18]: https://forum.jingos.com/t/feature-roadmap-of-jingos-arm-on-the-jingpad-a1/1708 -[19]: https://www.indiegogo.com/projects/jingpad-world-s-first-consumer-level-linux-tablet#/ -[20]: https://t.me/JingOS_Linux -[21]: https://discord.gg/uuWc8qKM -[22]: https://www.youtube.com/channel/UCRbaVa2v845SEtRadSlhWmA From ed438c23f86b78aad4afb134546ffeeea0afc34f Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 30 Sep 2021 11:44:44 +0800 Subject: [PATCH 025/143] PRF @geekpi --- ...0927 5 open source alternatives to Zoom.md | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/translated/tech/20210927 5 open source alternatives to Zoom.md b/translated/tech/20210927 5 open source alternatives to Zoom.md index aaeb19c752..bdea93af02 100644 --- a/translated/tech/20210927 5 open source alternatives to Zoom.md +++ b/translated/tech/20210927 5 open source alternatives to Zoom.md @@ -3,16 +3,18 @@ [#]: author: "Seth Kenlon https://opensource.com/users/seth" [#]: collector: "lujun9972" [#]: translator: "geekpi" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " 5 个替代 Zoom 的开源软件 ====== -试试这些开源视频会议服务之一。 -![Two people chatting via a video conference app][1] -我最近参加了[实用开源信息 POSI][2] 会议,它是在一个免费的开源视频会议平台上举行的。当我参加了一系列关于开源软件的实际用途的精彩讲座时,我意识到视频会议在过去几年里已经变得非常普遍。 +> 试试这些开源视频会议服务之一。 + +![](https://img.linux.net.cn/data/attachment/album/202109/30/114413ylalu7dcl5au575v.jpg) + +我最近参加了 [实用开源信息(POSI)][2] 会议,它是在一个自由开源的视频会议平台上举行的。当我参加了一系列关于开源软件的实际用途的精彩讲座时,我意识到视频会议在过去几年里已经变得非常普遍。 如果说开源做了什么,那就是提供了选择,现在越来越多的工人有了远程工作的自由,在你的连接方式上有一个选择是非常有意义的。 @@ -20,23 +22,23 @@ ### Jitsi -[Jitsi][3] 是一个简单、随意、但强大的视频通话平台。你可以自己托管它,也可以在 [meet.jit.si][4] 的公共实例上使用它。它有可定制的 URL,可以很容易地与你想见面的朋友分享链接、通话中的聊天、管理控制和通话录音。它的开发非常活跃,每年都有一大批新功能被测试和发布。它是 Opensource.com 用于我们每周会议的平台。 +[Jitsi][3] 是一个简单、随意、但强大的视频通话平台。你可以自己托管它,也可以在 [meet.jit.si][4] 的公共实例上使用它。它有可定制的 URL,可以很容易地与你想见面的朋友分享链接、通话中的聊天、管理控制,和通话录音。它的开发非常活跃,每年都会测试和发布一大批新功能。它是 Opensource.com 用于我们每周会议的平台。 ### Signal -[Signal][5] 已经是一个流行的以安全为重点的聊天应用,最近它又增加了[团体视频通话][6]的功能。视频通话非常适合简单的会议,而且因为你只能与你的 Signal 联系人列表中的其他人见面,所以不用担心你的视频通话聚会上有不速之客。当你尝试定位你应该开会的虚拟房间时,也没有来回的“电话标签”。这一切都发生在 Signal 中,因此无需猜测。 +[Signal][5] 已经是一个流行的以安全为重点的聊天应用,最近它又增加了 [团体视频通话][6] 的功能。视频通话非常适合简单的会议,而且因为你只能与你的 Signal 联系人列表中的其他人见面,所以不用担心你的视频通话会议上有不速之客。当你尝试定位你应该参与开会的虚拟房间时,也没有来回的“电话标签”。这一切都发生在 Signal 中,因此无需猜测。 Signal 本身是非常直观的,视频功能非常适合其现有惯例。简而言之,只要你的联系人在使用 Signal,这就是一个不费力的视频通话平台。这是我用于个人联系的应用,我经常使用其视频通话功能与朋友和家人联系。 ### P2p.chat -[P2p.chat][7] 是其中最简单的一个,无论是设计还是实现。通过网络实时通信(WebRTC)工作,p2p.chat 是一个网络应用,允许你直接连接到你正在呼叫的人,而不需要主机服务器。p2p.chat 的界面并不多,但这也是其吸引力的另一部分。没有管理控制或演示模式,因为 p2p.chat 在很大程度上是科幻片中承诺的“视频电话”:与远方的人进行轻松的人对人(或人们对人们)视频通话。 +[P2p.chat][7] 是这些中最简单的一个,无论是设计还是实现。通过 WebRTC 工作,p2p.chat 是一个 Web 应用,允许你直接连接到你正在呼叫的人,而不需要托管服务器。p2p.chat 的界面并不多,但这也是其吸引力的另一部分。没有管理控制或演示模式,因为 p2p.chat 在很大程度上是科幻片中承诺的“视频电话”:与远方的人进行轻松的人对人(或人们对人们)视频通话。 -你使用自定义的 URL 来动态地创建一个会议空间,所以它们相对容易记忆(除了小的随机部分)和输入。我和不在 Signal 上的朋友使用 p2p.chat,它从未让我失望过。 +你可以使用自定义的 URL 来动态地创建一个会议空间,所以它们相对容易记忆(除了小的随机部分)和输入。我和不在 Signal 上的朋友使用 p2p.chat,它从未让我失望过。 ### BigBlueButton -如果你需要严格的管理控制和极端的灵活性,[BigBlueButton][8] 是你正在寻找的解决方案,它专为教室、会议和演讲而设计。有了 BigBlueButton,你可以让所有与会者静音,阻止和踢走一个与会者,创建分组讨论室,创建协作式白板,共享屏幕,进行演讲,以及记录会议。与会者可以举起数字手表示注意,并将他们的状态设定为非语言交流方式。它很容易使用,但它是一个严肃的平台,适用于重点和非常大的群体。我参加过一些使用 BigBlueButton 的技术会议,包括[实用开源信息(POSI)][2]会议。 +如果你需要严格的管理控制和极端的灵活性,[BigBlueButton][8] 是你正在寻找的解决方案,它专为教室、会议和演讲而设计。有了 BigBlueButton,你可以让所有与会者静音,阻止和踢走一个与会者,创建分组讨论室,创建协作式白板,共享屏幕,进行演讲,以及记录会议。与会者可以“举起手”表示注意,并将他们的状态设定为非语言交流方式。它很容易使用,但它是一个严肃的平台,适用于重点和非常大的群体。我参加过一些使用 BigBlueButton 的技术会议,包括 [实用开源信息(POSI)][2]会议。 ### Wire @@ -44,7 +46,7 @@ Signal 本身是非常直观的,视频功能非常适合其现有惯例。简 ### 开源视频聊天 -没有理由满足于由你可能不完全信任的公司托管的专有视频通话。今天可用的开源选项对于与你的职业和个人生活中的所有人保持联系是非常好的。下次你想和朋友见面时,不妨试试这些解决方案之一 +没有理由满足于由你可能不完全信任的公司托管的专有视频通话。今天可用的开源选项对于与你的职业和个人生活中的所有人保持联系是非常好的。下次你想和朋友见面时,不妨试试这些解决方案之一。 -------------------------------------------------------------------------------- @@ -53,7 +55,7 @@ via: https://opensource.com/article/21/9/alternatives-zoom 作者:[Seth Kenlon][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/) 荣誉推出 From 2418f9f4c58aa9a6089d71455cbace808f9844de Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 30 Sep 2021 11:45:18 +0800 Subject: [PATCH 026/143] PUB @geekpi https://linux.cn/article-13836-1.html --- .../20210927 5 open source alternatives to Zoom.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210927 5 open source alternatives to Zoom.md (98%) diff --git a/translated/tech/20210927 5 open source alternatives to Zoom.md b/published/20210927 5 open source alternatives to Zoom.md similarity index 98% rename from translated/tech/20210927 5 open source alternatives to Zoom.md rename to published/20210927 5 open source alternatives to Zoom.md index bdea93af02..64e4bd65c2 100644 --- a/translated/tech/20210927 5 open source alternatives to Zoom.md +++ b/published/20210927 5 open source alternatives to Zoom.md @@ -4,8 +4,8 @@ [#]: collector: "lujun9972" [#]: translator: "geekpi" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13836-1.html" 5 个替代 Zoom 的开源软件 ====== From 7cc33dad14c9f061620965764967d9ece4655a19 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 30 Sep 2021 11:51:48 +0800 Subject: [PATCH 027/143] APL --- sources/tech/20210929 Manage CentOS Stream with Foreman.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210929 Manage CentOS Stream with Foreman.md b/sources/tech/20210929 Manage CentOS Stream with Foreman.md index 72b6b3b007..e1c8b045eb 100644 --- a/sources/tech/20210929 Manage CentOS Stream with Foreman.md +++ b/sources/tech/20210929 Manage CentOS Stream with Foreman.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/9/centos-stream-foreman" [#]: author: "Melanie Corr https://opensource.com/users/melanie-corr" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 8021f2ff7dfe483e5ade848ba75edc1267bf3497 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 30 Sep 2021 13:33:05 +0800 Subject: [PATCH 028/143] TSL&PRF --- ...10929 Manage CentOS Stream with Foreman.md | 171 ------------------ ...10929 Manage CentOS Stream with Foreman.md | 164 +++++++++++++++++ 2 files changed, 164 insertions(+), 171 deletions(-) delete mode 100644 sources/tech/20210929 Manage CentOS Stream with Foreman.md create mode 100644 translated/tech/20210929 Manage CentOS Stream with Foreman.md diff --git a/sources/tech/20210929 Manage CentOS Stream with Foreman.md b/sources/tech/20210929 Manage CentOS Stream with Foreman.md deleted file mode 100644 index e1c8b045eb..0000000000 --- a/sources/tech/20210929 Manage CentOS Stream with Foreman.md +++ /dev/null @@ -1,171 +0,0 @@ -[#]: subject: "Manage CentOS Stream with Foreman" -[#]: via: "https://opensource.com/article/21/9/centos-stream-foreman" -[#]: author: "Melanie Corr https://opensource.com/users/melanie-corr" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Manage CentOS Stream with Foreman -====== -This example provides a glimpse into the many options you have to manage -and provision CentOS Stream content in Foreman. -![Puzzle pieces coming together to form a computer screen][1] - -In December 2021, CentOS 8 will reach end of life and be replaced by CentOS Stream. One of the major changes between previous iterations of CentOS and CentOS Stream is the lack of minor versions. Centos Stream has adopted a continuous release cycle. From the beginning of this year, developers in the Foreman community started to see the benefits of earlier bug detection and patching that CentOS Stream offers as a result of the continuous releases. We no longer have to wait for the next release to take advantage of the latest changes and bugfixes. [A veteran Linux community enthusiast][2] noted that this move also brings RHEL developers closer than ever to the FOSS community. - -However, if you are an administrator of hundreds or thousands of servers, you might want to exercise control over when new packages are added to particular servers. If you are looking for a free open source tool that helps you ensure stability of production servers, while at the same time allowing you to safely pull in the latest changes from Centos Stream for development and testing, this is where Foreman can help. With Foreman, you can manage your Centos Stream content at all stages of the lifecycle environment. - -### What is Foreman? - -Foreman is a complete lifecycle management tool for physical and virtual servers. With Foreman, system administrators have the power to easily automate repetitive tasks, quickly deploy applications, and proactively manage servers on-premise or in the cloud. Foreman provides enterprise-level solutions for provisioning management, configuration management, and monitoring. Thanks to its plugin architecture, Foreman can be extended in a myriad of ways. Using the Katello plugin, you can use Foreman as a complete content management tool to manage CentOS Stream, among many other content types. - -With Foreman and Katello, you can define exactly which packages you want each environment to contain. For example, a Production environment might use packages that have been verified as stable, while a Developer environment might require the latest and greatest package versions available. You can also promote the content views across lifecycle environments. Let's take a look at how Foreman accomplishes this. - -We reference the web UI in this article, but Foreman also has a robust CLI and API. The Katello plugin provides a workflow and web UI for the Pulp project, which you can read about more in [this article][3]. We also supply a simple workflow here, but Foreman and the Katello project offer many different configuration options to suit your specific needs. - -This article assumes that Foreman and Katello are already installed. For more information about how to do that, see the [Katello installation manual][4]. - -### Create a Product - -The first step is to create a product in Foreman. The product functions as an internal label to store the CentOS Stream repositories. - - 1. In the Foreman web UI, navigate to **Content** >**Products**, and click **Create Product**. - 2. In the **Name** field, enter a name for the product. Foreman automatically completes the **Label** field based on what you have entered for **Name, **and this can't be changed later. - - - -### Add the CentOS Stream repositories to the Product - -Now that you have a product, you can use the URLs for the AppStream and BaseOS repositories and add them to your new product. - - 1. In the Foreman web UI, navigate to **Content** > **Products**, select the product you want to use, and then click **New Repository**. - 2. In the **Name** field, enter a name for the repository; for example, **Centos8StreamBaseOS**. Foreman automatically completes the **Label** field based on what you have entered for **Name**. - 3. From the **Type** list, select the type of repository, and then select **Yum**. - 4. In the **URL** field, enter the URL of the CentOS Stream Baseos repository to use as a source: - 5. Select the **Download Policy** list. The default is **On Demand** \- this means that Katello will only download metadata. If you want to download all the packages, change to **Immediate**, which downloads all the packages, which might run into 20-30 GB. - 6. Ensure that the **Mirror on Sync** check box is selected. This option ensures that content that is no longer part of the upstream repository is removed during synchronization. - 7. Click **Save**. - - - -Repeat these steps to add the AppStream repositories with URLs, for example, . Ensure that you use the closest official CentOS mirror instead. - -To perform an immediate synchronization, in your product window, click **Sync Now**. The initial synchronization can take some time. You can watch the synchronization status from **Content > Sync Status.** - -After the synchronization completes, you can view the new CentOS Stream operating system in **Hosts > Operating System**. Feel free to edit the name and description to suit your requirements. - -If you plan to use configuration management software like Ansible or Puppet, Foreman automatically creates an operating system report. You can turn this option off in **Administe > Settings > Ignore facts for operating system**. It is a good idea to rename the operating system to match the name in the configuration management software. For example, for Puppet, this would be _CentOS 8_. - -### Define your infrastructure's Lifecycle Environment - -The application life cycle is a concept central to Foreman's content management functions. The application life cycle defines how a particular system and its software look at a specific stage. For example, an application life cycle might be simple; you might only have a _development_ stage and _production_ stage. Foreman provides methods to customize each application life cycle stage in a controlled manner to suit your specifications. - -At this point, you must create your lifecycle environment paths: - - 1. In the Foreman web UI, navigate to **Content** >**Lifecycle Environments**. - 2. Click **New Environment Path** to start a new application life cycle. - 3. In the **Name** field, enter a name for your environment. - 4. In the **Description** field, enter a description for your environment. - 5. Click **Save**. - 6. Add as many environment paths as you need. For example, you can create _dev_, _test,_ _stage,_ and _production_ environments. To add these environments, click **Add New Environment**, complete the **Name** and **Description** fields, and select the prior environment from the **Prior Environment** list so that you chain them together in the sequence you expect to use. - - - -### Create and publish a Content View - -In Foreman, a Content View is a snapshot of your repositories at a particular point in time. Content Views provide the mechanism for isolating package versions in a state that you want to preserve. Content Views have a lot of configurable features that you can use for further refinement. For the purposes of this tutorial, let's keep things simple. - - 1. In the Foreman web UI, navigate to **Content** > **Content Views** and click **Create New View**. - 2. In the **Name** field, enter a name for the view. Foreman automatically completes the **Label** field from the name you enter. - 3. In the **Description** field, enter a description of the view. - 4. Click **Save** to create the Content View. - 5. In your new Content View, click **Yum Content > Add Repositories** in the **Repository Selection** area, click **Add.** For both the BaseOS and Appstream repositories, select packages you want to include, then click **Add Repositories**. - 6. Click **Publish New Version** and in the **Description** field, enter information about the version to log changes. - 7. Click **Save**. - - - -When you click **Publish New Version**, you create a snapshot of all the content that you have synchronized. This means that every server you subscribe to this Content View will have access only to the package versions in the Content View associated with this lifecycle environment. - -Every new Content View and subsequent versions are published first to the Library environment, where you can then promote to additional environments. - -### Promote content across lifecycle environments - -If you have tested new packages and are satisfied that everything is stable, you can promote your Content View to another lifecycle environment. - - 1. Navigate to **Content** > **Content Views** and select the Content View that you want to promote. - 2. Click the **Versions** tab for the Content View. - 3. Select the version you want to promote, and in the **Actions** column, click **Promote**. - 4. Select the environment where you want to promote the Content View and click **Promote Version**. - 5. Click the **Promote** button again. This time select the lifecycle environment, for example, **Test**, and click **Promote Version**. - 6. Finally, click on the **Promote** button again. For example, select the **Production** environment and click **Promote Version**. - - - -The servers that are assigned to that particular environment can now pull from an updated set of packages. - -### Create an Activation Key - -To register a CentOS Stream server to the content you have defined in a particular lifecycle, you must create an activation key. The activation key is a secure method of sharing credentials with a server. This uses a tool called **subscription-manager** to subscribe the CentOS Stream server to the content. - -When you have created the activation key, add the CentOS Stream subscription to the activation key. - - 1. In the Foreman web UI, navigate to **Content > Activation keys** and click **Create Activation Key**. - 2. In the **Name** field, enter the name of the activation key. - 3. In the **Description** field, enter a description for the activation key. - 4. From the **Environment** list, select the environment to use. - 5. From the **Content View** list, select the Content View you created just now. - 6. Click **Save**. - - - -### Create a CentOS Stream Host from Foreman managed content - -Everything is now set up. With the content you have created contained in a content view, and promoted across lifecycles, you can now provision hosts with exactly the content you want to use and subscribe to the updates you want them to receive. - -To create a host in Foreman, navigate to **Hosts > Create Host**. - - 1. In the **Name** field, enter a name for the host. - 2. Click the **Organization** and **Location** tabs to ensure that the provisioning context is automatically set to the current context. - 3. From the **Deploy On** list, select **Bare Metal**. - 4. Click the **Operating System** tab. - 5. From the **Architectures** list, select **x86_64**. - 6. From the **Operating System** list, select **CentOS_Stream 8.** - 7. Check the **Build Mode** box. - 8. For **Media Selection**, select **Synced Content** to use the CentOS Stream content you synced previously. - 9. From the **Synced** **Content** list, ensure that CentOS Stream is selected. - 10. From the **Partition Table** list, for this demo, select **Kickstart** default, but there are many available options. - 11. In the **Root Password** field, enter a root password for your new host. - 12. Click the **Interface** tab, and click **Edit,** and add a **Mac address.** - 13. Click the **Parameters** tab, and ensure that a parameter exists that provides an activation key. If not, add an activation key. - 14. Click **Submit** to save the host entry. - - - -Now the new host is in build mode, which means when you turn it on, it will begin installing the operating system. - -If you navigate to **Hosts > Content Hosts,** you can see the full details of the subscriptions, lifecycle environment, and content view that your host is subscribed to. - -This example is only a small glimpse into the many options you have to manage and provision CentOS Stream content in Foreman. If you want more detailed information about how you can manage CentOS Stream versions, control the content that your servers have access to, and control and protect the stability of your infrastructure, check out the [Foreman Content Management][5] documentation. With all CentOS Stream content under your control, you can create and register Centos Streams that consume only the content that you specify. For more detailed information on provisioning, see the [Foreman Provisioning][6] documentation. If you have any questions, feedback, or suggestions, you can find the Foreman community at - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/9/centos-stream-foreman - -作者:[Melanie Corr][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/melanie-corr -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) -[2]: https://twitter.com/Det_Conan_Kudo/status/1337366036023218177?s=20 -[3]: https://opensource.com/article/20/8/manage-repositories-pulp -[4]: https://docs.theforeman.org/3.0/Installing_Server_on_Red_Hat/index-katello.html -[5]: https://docs.theforeman.org/master/Content_Management_Guide/index-foreman.html -[6]: https://docs.theforeman.org/master/Provisioning_Guide/index-foreman.html diff --git a/translated/tech/20210929 Manage CentOS Stream with Foreman.md b/translated/tech/20210929 Manage CentOS Stream with Foreman.md new file mode 100644 index 0000000000..4b4e3f0e0a --- /dev/null +++ b/translated/tech/20210929 Manage CentOS Stream with Foreman.md @@ -0,0 +1,164 @@ +[#]: subject: "Manage CentOS Stream with Foreman" +[#]: via: "https://opensource.com/article/21/9/centos-stream-foreman" +[#]: author: "Melanie Corr https://opensource.com/users/melanie-corr" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +用 Foreman 管理 CentOS Stream +====== + +> 这个例子让我们看到了在 Foreman 中管理和配置 CentOS Stream 内容的许多选项。 + +![拼图拼成的电脑屏幕][1] + +2021 年 12 月,CentOS 8 将达到生命终点,被 CentOS Stream 取代。CentOS Stream 和 CentOS 之前的迭代之间的主要变化之一是没有小版本。Centos Stream 采用了一个连续的发布周期。从今年年初开始,Foreman 社区的开发者开始看到 CentOS Stream 由于持续发布而提供的更早的错误检测和补丁的好处。我们不再需要等待下一个版本来利用最新的变化和错误修复。[一位资深的 Linux 社区爱好者][2] 指出,此举也使 RHEL 开发者比以往更接近 FOSS 社区。 + +然而,如果你是一个拥有数百或数千台服务器的管理员,你可能想控制新的软件包何时被添加到特定的服务器。如果你正在寻找一个免费的开源工具,帮助你确保生产服务器的稳定性,同时允许你安全地从 Centos Stream 中拉入最新的变化用于开发和测试,这就是 Foreman 可以帮助你的地方。有了 Foreman,你可以在生命周期环境的各个阶段管理你的 Centos Stream 内容。 + +### Foreman 介绍 + +Foreman 是一个完整的物理和虚拟服务器的生命周期管理工具。有了 Foreman,系统管理员有能力轻松实现重复性任务的自动化,快速部署应用程序,并主动管理内部或云中的服务器。Foreman 为配备provisioning管理、配置管理和监控提供了企业级解决方案。由于其插件架构,Foreman 可以以无数种方式进行扩展。使用 Katello 插件,你可以把 Foreman 作为一个完整的内容管理content management工具来管理 CentOS Stream,以及其他许多内容类型。 + +通过 Foreman 和 Katello,你可以准确地定义你希望每个环境包含哪些软件包。例如,生产环境可能使用已被验证为稳定的软件包,而开发环境可能需要最新、最先进的软件包版本。你还可以跨生命周期环境推广内容视图content view。让我们来看看 Foreman 是如何完成这个任务的。 + +我们在这篇文章中使用了网页用户界面,但 Foreman 也有一个强大的 CLI 和 API。Katello 插件为 Pulp 项目提供了一个工作流和网页用户界面,你可以在 [这篇文章][3] 中了解更多。我们在这里也提供了一个简单的工作流程,但是 Foreman 和 Katello 项目提供了许多不同的配置选项来满足你的具体需求。 + +本文假设 Foreman 和 Katello 已经安装完毕。关于如何安装的更多信息,请参阅 [Katello 安装手册][4]。 + +### 创建一个产品 + +第一步是在 Foreman 中创建一个产品product。该产品的功能是作为一个内部标签来存储 CentOS Stream 存储库。 + + 1. 在 Foreman 网页用户界面,导航到“内容Content > 产品Products”,并点击“创建产品Create Product”。 + 2. 在“名称Name”字段中,为产品输入一个名称。Foreman会根据你输入的“名称Name”自动完成“标签Label”字段,以后不能再更改。 + +### 将 CentOS Stream 存储库添加到产品中 + +现在你有了一个产品,你可以使用 AppStream 和 BaseOS 存储库的 URL,并将它们添加到你的新产品中。 + + 1. 在 Foreman 网页用户界面中,导航到 “内容Content > 产品Products”,选择你要使用的产品,然后点击 “新存储库New Repository”。 + 2. 在“名称Name”字段中,为存储库输入一个名称;例如,“Centos8StreamBaseOS”。Foreman 会根据你输入的“名称Name”,自动完成“标签Label”字段。 + 3. 从“类型Type”列表中,选择存储库的类型,然后选择“Yum”。 + 4. 在 “URL” 字段中,输入 CentOS Stream Baseos 存储库的 URL,作为源: `http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/`。 + 5. 选择“下载规则Download Policy”列表。默认的是“按需On Demand”,这意味着 Katello 将只下载元数据。如果你想下载所有的软件包,请改成“即时Immediate”,它可以下载所有的软件包,可能会达到 20-30GB。 + 6. 确保“与镜像同步Mirror on Sync”复选框被选中。这个选项确保在同步过程中,不再是上游存储库的一部分的内容被删除。 + 7. 点击“保存Save”。 + + + +重复这些步骤,添加 AppStream 存储库及其 URL,例如,`http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/`。确保你使用最近的官方 CentOS 镜像来代替它。 + +要执行立即同步,在你的产品窗口,点击“立即同步Sync Now”。最初的同步可能需要一些时间。你可以从“内容Content > 同步状态Sync Status”查看同步状态。 + +同步完成后,你可以在“主机 Hosts > 操作系统Operating System”中查看新的 CentOS Stream 操作系统。请随意编辑名称和描述以满足你的要求。 + +如果你打算使用 Ansible 或 Puppet 等配置管理软件,Foreman 会自动创建一个操作系统报告。你可以在“管理Administe > 设置Settings > 忽略操作系统状况Ignore facts for operating system”中关闭这个选项。重命名操作系统以匹配配置管理软件中的名称是一个好主意。例如,对于 Puppet,这将是“CentOS 8”。 + +### 定义你的基础设施的生命周期环境 + +应用程序生命周期是 Foreman 的内容管理功能的一个核心概念。应用程序的生命周期定义了一个特定的系统和它的软件在特定阶段的状况。例如,一个应用程序的生命周期可能很简单,你可能只有一个“开发”阶段和“生产”阶段。Foreman 提供了一些方法来以可控的方式定制每个应用生命周期阶段,以适应你的规范。 + +在这一点上,你必须创建你的生命周期环境路径。 + + 1. 在 Foreman 网页用户界面中,导航到“内容Content > 生命周期环境Lifecycle Environments”。 + 2. 点击“新环境路径New Environment Path”,开始一个新的应用生命周期。 + 3. 在“名称Name”字段中,为你的环境输入一个名称。 + 4. 在“描述Description”字段中,为你的环境输入一个描述。 + 5. 点击“保存Save”。 + 6. 根据你的需要添加尽可能多的环境路径。例如,你可以创建“dev”、“test”、“stage” 和 “production” 环境。要添加这些环境,点击“添加新环境”,完成“名称Name”和“描述Description”字段,并从“优先环境Prior Environment*”列表中选择先前的环境,这样你就可以按照你预期使用的顺序将它们串联起来。 + + + +### 创建和发布一个内容视图 + +在 Foreman 中,“内容视图Content View”是你的存储库在某个特定时间点的快照。内容视图提供了隔离软件包版本到你想保留的状态的机制。内容视图有很多可配置的功能,你可以用它来进一步细化。为了本教程的目的,让我们保持简单。 + + 1. 在 Foreman 网页用户界面中,导航到“内容Content > 内容视图Content View”,并点击“创建新视图Create New View”。 + 2. 在“名称Name”字段中,为视图输入一个名称。Foreman 会根据你输入的名称自动完成“标签Label”字段。 + 3. 在“描述Description”字段中,输入视图的描述。 + 4. 单击“保存Save”以创建内容视图。 + 5. 在新的内容视图中,点击“Yum 内容Yum Contents > 添加存储库Add Repositories”,在“存储库选择Repository Selection”区域,点击“添加Add”。对于 BaseOS 和 Appstream 存储库,选择你想包括的软件包,然后点击“添加存储库Add Repositories”。 + 6. 点击“发布新版本Publish New Version”,在“描述Description”区域,输入关于版本的信息以记录变化。 + 7. 单击“保存Save”。 + +当你点击“发布新版本Publish New Version”时,你创建了一个你已同步的所有内容的快照。这意味着你订阅此内容视图的每台服务器将只能访问与此生命周期环境相关的内容视图中的软件包版本。 + +每一个新的内容视图和后续版本都会首先发布到库环境,然后你可以在那里推广到其他环境。 + +### 跨生命周期环境推广内容 + +如果你已经测试了新的软件包,并且确信一切都很稳定,你可以把你的内容视图推广到另一个生命周期环境中。 + + 1. 导航到“内容Content > 内容视图Content Views”,选择你想推广的内容视图。 + 2. 点击内容视图的“版本Versions”标签。 + 3. 选择你想推广的版本,并在“操作Action”栏中,点击“推广Promote”。 + 4. 选择你要推广内容视图的环境,并点击“推广版本Promote Version”。 + 5. 再次点击“推广Promote”按钮。这次选择生命周期环境,例如,“Test”,然后单击“推广版本Promote Version”。 + 6. 最后,再次点击“推广Promote”按钮。例如,选择“Production”环境并点击“推广版本Promote Version”。 + +被分配到该特定环境的服务器现在可以从一套更新的软件包中提取。 + +### 创建一个激活密钥 + +为了将 CentOS Stream 服务器注册到你在特定生命周期中定义的内容,你必须创建一个激活密钥。激活密钥是一种与服务器共享凭证的安全方法。这使用了一个叫做“订阅管理器subscription-manager的工具来订阅 CentOS Stream 服务器的内容。 + +当你创建了激活密钥后,将 CentOS Stream 订阅添加到激活密钥中。 + + 1. 在 Foreman 网页用户界面中,导航到“内容Content > 激活密钥Activation keys”,并点击“创建激活密钥Create Activation Key”。 + 2. 在“名称Name”栏中,输入激活密钥的名称。 + 3. 在“描述Description”栏中,输入激活密钥的描述。 + 4. 从“环境Environment”列表中,选择要使用的环境。 + 5. 从“内容视图Content View”列表中,选择你刚才创建的内容视图。 + 6. 点击“保存Save”。 + +###从 Foreman 管理的内容中创建一个 CentOS Stream 主机 + +现在一切都准备好了。随着你创建的内容包含在内容视图中,并在整个生命周期中推广,你现在可以准确地用你想使用的内容来配置主机,并订阅你想让它们接收的更新。 + +要在 Foreman 中创建一个主机,请导航到“主机 > 创建主机”。 + + 1. 在“名称Name”字段中,为主机输入一个名称。 + 2. 单击“组织Organization”和“位置Location”选项卡,以确保配置环境自动设置为当前环境。 + 3. 从“部署在Deploy On”列表中,选择“裸金属Bare Metal”。 + 4. 单击“操作系统Operating System”选项卡。 + 5. 从“架构Architectures”列表中,选择“x86_64”。 + 6. 从“操作系统Operating System”列表中,选择“CentOS_Stream 8”。 + 7. 勾选“构建模式Build Mode”框。 + 8. 对于“媒体选择Media Selection”,选择“同步的内容Synced Content”来使用你之前同步的 CentOS Stream 内容。 + 9. 从“同步的内容Synced Content”列表中,确保选择 “CentOS Stream”。 + 10. 从“分区表Partition Table”列表中,对于这个演示,选择默认的 “Kickstart”,但有许多可用的选项。 + 11. 在“Root 密码Root Password”栏中,为你的新主机输入一个 root 密码。 + 12. 点击“接口Interface”标签,并点击“编辑Edit”,并添加一个 “Mac 地址Mac address”。 + 13. 点击“参数Parameters”标签,并确保存在一个提供激活密钥的参数。如果没有,添加一个激活密钥。 + 14. 点击“提交Submit”以保存主机条目。 + + + +现在,新的主机处于构建模式,这意味着当你打开它时,它将开始安装操作系统。 + +如果你导航到“主机Hosts > 内容主机Content Hosts”,你可以看到你的主机所订阅的订阅、生命周期环境和内容视图的全部细节。 + +这个例子只是对你在 Foreman 中管理和配置 CentOS Stream 内容的众多选项的一个小窥视。如果你想了解更多关于如何管理 CentOS Stream 版本,控制你的服务器可以访问的内容,以及控制和保护你的基础设施的稳定性的详细信息,请查看 [Foreman 内容管理][5] 文档。当所有 CentOS Stream 内容在你的控制之下时,你可以创建和注册 Centos Stream,只使用你指定的内容。有关配备的更多详细信息,请参见 [Foreman 配备][6] 文档。如果你有任何问题、反馈或建议,你可以在 找到 Foreman 社区。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/centos-stream-foreman + +作者:[Melanie Corr][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/melanie-corr +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) +[2]: https://twitter.com/Det_Conan_Kudo/status/1337366036023218177?s=20 +[3]: https://opensource.com/article/20/8/manage-repositories-pulp +[4]: https://docs.theforeman.org/3.0/Installing_Server_on_Red_Hat/index-katello.html +[5]: https://docs.theforeman.org/master/Content_Management_Guide/index-foreman.html +[6]: https://docs.theforeman.org/master/Provisioning_Guide/index-foreman.html From e33c04592d6645a57be691eb7e4584f1184a2c72 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 30 Sep 2021 13:42:56 +0800 Subject: [PATCH 029/143] PUB @wxy https://linux.cn/article-13837-1.html --- .../20210929 Manage CentOS Stream with Foreman.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename {translated/tech => published}/20210929 Manage CentOS Stream with Foreman.md (99%) diff --git a/translated/tech/20210929 Manage CentOS Stream with Foreman.md b/published/20210929 Manage CentOS Stream with Foreman.md similarity index 99% rename from translated/tech/20210929 Manage CentOS Stream with Foreman.md rename to published/20210929 Manage CentOS Stream with Foreman.md index 4b4e3f0e0a..52d66d056a 100644 --- a/translated/tech/20210929 Manage CentOS Stream with Foreman.md +++ b/published/20210929 Manage CentOS Stream with Foreman.md @@ -4,15 +4,15 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13837-1.html" 用 Foreman 管理 CentOS Stream ====== > 这个例子让我们看到了在 Foreman 中管理和配置 CentOS Stream 内容的许多选项。 -![拼图拼成的电脑屏幕][1] +![](https://img.linux.net.cn/data/attachment/album/202109/30/133541s3e3s31yzmnugl1s.jpg) 2021 年 12 月,CentOS 8 将达到生命终点,被 CentOS Stream 取代。CentOS Stream 和 CentOS 之前的迭代之间的主要变化之一是没有小版本。Centos Stream 采用了一个连续的发布周期。从今年年初开始,Foreman 社区的开发者开始看到 CentOS Stream 由于持续发布而提供的更早的错误检测和补丁的好处。我们不再需要等待下一个版本来利用最新的变化和错误修复。[一位资深的 Linux 社区爱好者][2] 指出,此举也使 RHEL 开发者比以往更接近 FOSS 社区。 From 093fd2ec4d92c252fcb54f9f7b60cc6a443a9b02 Mon Sep 17 00:00:00 2001 From: ShirlyYang Date: Thu, 30 Sep 2021 15:36:52 +0800 Subject: [PATCH 030/143] Update 20200519 How to use Windows Subsystem for Linux to open Linux on Windows 10 machines.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 已认领 --- ... Subsystem for Linux to open Linux on Windows 10 machines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20200519 How to use Windows Subsystem for Linux to open Linux on Windows 10 machines.md b/sources/tech/20200519 How to use Windows Subsystem for Linux to open Linux on Windows 10 machines.md index e610f7eb2f..9daaab2ddd 100644 --- a/sources/tech/20200519 How to use Windows Subsystem for Linux to open Linux on Windows 10 machines.md +++ b/sources/tech/20200519 How to use Windows Subsystem for Linux to open Linux on Windows 10 machines.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (Pinkerr) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From c983a3682d46c84b8e1f3f7085c795b047d0c1bc Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 1 Oct 2021 05:02:33 +0800 Subject: [PATCH 031/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211001=20?= =?UTF-8?q?The=20Official=20Raspberry=20Pi=204=20Case=20Sucks!=20Here?= =?UTF-8?q?=E2=80=99s=20What=20You=20Can=20do=20to=20Reduce=20the=20Overhe?= =?UTF-8?q?ating?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md --- ...at You Can do to Reduce the Overheating.md | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md diff --git a/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md b/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md new file mode 100644 index 0000000000..bc8c45ad85 --- /dev/null +++ b/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md @@ -0,0 +1,140 @@ +[#]: subject: "The Official Raspberry Pi 4 Case Sucks! Here’s What You Can do to Reduce the Overheating" +[#]: via: "https://itsfoss.com/raspberry-pi-case-overheating/" +[#]: author: "Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +The Official Raspberry Pi 4 Case Sucks! Here’s What You Can do to Reduce the Overheating +====== + +The [Raspberry Pi 4][1] is an absolute favorite among millions of people, especially in the nerd community, and I’m no exception. But did you know that the Pi throttles without proper cooling? + +Here, I’m going to describe some serious drawbacks in the [Official Raspberry Pi 4 Case][2] and also share some ways to mitigate them. + +![Raspberry Pi 4 official case][3] + +After the first boot, my Raspberry Pi 4 (8 GB RAM version) mounted inside the [Official Raspberry Pi 4 case][2], would shoot to 80 °C when the unattended upgrades kicked in. I was on Ubuntu with all [firmware updates][4] that are apparently supposed to [fix heating issues][5]. + +On idle, this hot vanilla and strawberry cake would never go less than 75°C. + +I could hardly use it until I removed the top white cover of the case. The temperature dropped to only around 67 °C on idle — Can you believe that? Even after I double-checked after a while with a reboot. This, obviously, still isn’t also quite acceptable. If I got the case and plan to use it for long-term purpose, why would I want to keep the case lid open all the time? + +And why is something like this happening? It’s all because of a very poor design of the official Raspberry Pi case. + +### The Official Raspberry Pi 4 Case is a Heat Monster! + +[Thermal throttling][6] in simple terms, is a reduction in the performance of your Pi processor (CPU) so that the temperature does not exceed extremely high temperatures (such as 80 °C) and [cause damage][7]. + +The case is built out of plastic — a poor conductor of heat (simple [old school physics][8]), and hence is unable to dissipate it effectively throughout the case and out of the Pi board. Therefore, the processor on the Pi board heats up and gets throttled down to an extremely inferior level of performance, once it literally reaches a temperature of an alarming degree. I noticed a 100% CPU usage during _**unattended upgrades**_ right after first boot with the CPU’s temperature at 80 °C. + +Beautiful though it may look, the official case delivers a big blow to the Pi’s performance. + +If you really want to get the most out of your Pi’s performance, you must take care of its cooling too. These heating issues cannot simply be ignored: + +#### Heat gets trapped + +Once you set up the Pi inside this case there is not even a single vent for that excess heat to escape. So it keeps getting accumulated inside until it reaches those crazy temps and triggers the throttle. + +#### No fan outlet (badly needed) + +The top white cover could have had a circular vent on top of the case for at least the [Official Raspberry Pi 4 Fan][9]. + +#### No passive cooling + +If the case had been of metal, it could have doubled up as heat-sink and dissipate the heat efficiently out of the processor residing on the Pi board. + +#### Other drawbacks apart from heating issues + +The official Pi 4 case has a few more drawbacks: + + 1. Inconvenient SD Card Management: It is not very convenient to assemble the Pi board inside the case and get the SD card port in the correct orientation to be able to switch cards later on. + 2. No Screwing System: No screws are provided, maybe because it could break the dummy holders on the base of the case that almost look like you could use four screws to fix the board securely onto the base. + + + +### What can you do to control the overheating in Raspberry Pi 4? + +After doing some intense research, I found some of the best cooling solutions available in the market – all thanks to our amazing modding community! + +#### Use an ice tower cooler + +I first found [an in-depth performance review of various Pi coolers at Jeff Geerling’s][10], who is known online as **[geerlingguy][11]**. I straightaway went for the ICE tower cooler after going through the temperature stats and assembled it: + +![Raspberry Pi 4 ice tower cooler][12] + +Preview | Product | Price | +---|---|---|--- +![GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi Heatsink for Raspberry Pi 4 Model B & Raspberry Pi 3B+ & Raspberry Pi 3 Model B][13] ![GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi Heatsink for Raspberry Pi 4 Model B & Raspberry Pi 3B+ & Raspberry Pi 3 Model B][13] | [GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi...][14] | $19.99[][15] | [Buy on Amazon][16] + +Temperatures dropped to 30 °C on idle and under load, it now stays at around 45 °C. I’m yet to mod a proper case for it. There are ready to purchase cases with enough space for the cooler. You may find such cases on Amazon or other online stores. + +No products found. + +#### Use an aluminum heat sink for passive cooling + +There is also a remarkable video online on [passive cooling][17], reviewing an aluminum heat-sink-as-a-case. + +A thermal pad is provided, which is equivalent to the thermal paste used on Desktop processors. On placing it in the manner shown in the video, the heat is dissipated out of the processor on the Pi board throughout the whole case. A wonderful magic of science! + +Preview | Product | Price | +---|---|---|--- +![Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive Cooling Case Compatible with Raspberry Pi 4 Model B Only][18] ![Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive Cooling Case Compatible with Raspberry Pi 4 Model B Only][18] | [Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive...][19] | $12.99[][15] | [Buy on Amazon][20] + +#### Modding the official Pi case + +If you still want to get the official case, it is advisable to at-least go for a fan mod: + +### Potential Manufacturing Solutions + +Here are some solutions that can make the whole process of manufacturing easier, by applying [DevOps][21] inspired improvements: + + * Think about it, that circular piece of plastic cut out from the top of the cover could be recycled to manufacture so many more Pi 4 cases in production. Isn’t it? It would clearly be a win-win scenario and also lowers costs as well! + + + * Aluminium is the most abundant metal on earth, but [global supply disruptions][22] can be challenging. Even then, there are other [conductivity solutions][23] to explore materials used for the designing the case. + + + +**Personal Notes** + +Hope this write-up helps you in getting the most out of your Raspberry Pi 4. It’s been a quite a while since I used to write here on _**It’s FOSS**_. Feels good to be back. I’d love to know your thoughts, suggestions, and experiences down in the comments below. Please do not hesitate to share. + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/raspberry-pi-case-overheating/ + +作者:[Avimanyu Bandyopadhyay][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/avimanyu/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/raspberry-pi-4/ +[2]: https://www.raspberrypi.org/products/raspberry-pi-4-case/ +[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/raspberry-pi-4-official-case.webp?resize=800%2C533&ssl=1 +[4]: https://www.einfochips.com/blog/understanding-firmware-updates-the-whats-whys-and-hows/ +[5]: https://www.seeedstudio.com/blog/2019/11/29/raspberry-pi-4-firmware-update-pi-4-now-runs-cooler-than-ever/ +[6]: https://www.pcmag.com/encyclopedia/term/thermal-throttling +[7]: https://www.pcgamer.com/cpu-temperature-overheat/ +[8]: https://thermtest.com/stay-colder-for-longer-in-a-container-made-of-plastic-or-metal +[9]: https://www.raspberrypi.org/products/raspberry-pi-4-case-fan/ +[10]: https://www.jeffgeerling.com/blog/2019/best-way-keep-your-cool-running-raspberry-pi-4 +[11]: https://www.jeffgeerling.com/about +[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/raspberry-pi-4-ice-tower-cooler.webp?resize=480%2C360&ssl=1 +[13]: https://i0.wp.com/m.media-amazon.com/images/I/51g9gQC9k7L._SL160_.jpg?ssl=1 +[14]: https://www.amazon.com/dp/B07V35SXMC?tag=chmod7mediate-20&linkCode=ogi&th=1&psc=1 (GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi Heatsink for Raspberry Pi 4 Model B & Raspberry Pi 3B+ & Raspberry Pi 3 Model B) +[15]: https://www.amazon.com/gp/prime/?tag=chmod7mediate-20 (Amazon Prime) +[16]: https://www.amazon.com/dp/B07V35SXMC?tag=chmod7mediate-20&linkCode=ogi&th=1&psc=1 (Buy on Amazon) +[17]: https://buildabroad.org/2016/11/05/passive-cooling/ +[18]: https://i2.wp.com/m.media-amazon.com/images/I/41XGLQONCVS._SL160_.jpg?ssl=1 +[19]: https://www.amazon.com/dp/B07VD568FB?tag=chmod7mediate-20&linkCode=osi&th=1&psc=1 (Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive Cooling Case Compatible with Raspberry Pi 4 Model B Only) +[20]: https://www.amazon.com/dp/B07VD568FB?tag=chmod7mediate-20&linkCode=osi&th=1&psc=1 (Buy on Amazon) +[21]: https://linuxhandbook.com/what-is-devops/ +[22]: https://www.reuters.com/article/global-metals-idUSL1N2Q90GA +[23]: https://news.mit.edu/2018/engineers-turn-plastic-insulator-heat-conductor-0330 From 796b80a5164f5eba9b35d16f9d8aeae26672b362 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 1 Oct 2021 05:02:53 +0800 Subject: [PATCH 032/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211001=20?= =?UTF-8?q?How=20to=20Install=20Google=20Chrome=20on=20Debian=20and=20Kali?= =?UTF-8?q?=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211001 How to Install Google Chrome on Debian and Kali Linux.md --- ... Google Chrome on Debian and Kali Linux.md | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 sources/tech/20211001 How to Install Google Chrome on Debian and Kali Linux.md diff --git a/sources/tech/20211001 How to Install Google Chrome on Debian and Kali Linux.md b/sources/tech/20211001 How to Install Google Chrome on Debian and Kali Linux.md new file mode 100644 index 0000000000..253966335e --- /dev/null +++ b/sources/tech/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: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How to Install Google Chrome on Debian and Kali Linux +====== + +Debian and Debian-based Kali Linux come with Firefox as the default web browser. But this does not mean that you cannot install other web browsers in it. + +Google Chrome is hugely popular and you probably already use it on other systems. If you want to install Chrome on Debian, you can surely do so. + +You won’t find Google Chrome in the repositories of Debian because it is not open source software but you can download and install it from Chrome website. + +In this tutorial, I’ll show you two methods of installing Chrome on Debian: + + * GUI method + * Command line method + + + +Let’s start with the GUI method first. + +_**Note: I am using Debian in the examples here but since Kali Linux is based on Debian, the same methods are also applicable to Kali Linux.**_ + +### Method 1: Installing Chrome on Debian Graphically + +This is a no-brainer. You go to the Google Chrome website, download the deb file and double lick on it to install it. I am going to show the steps in detail so that it is easy for you to follow it. + +Go to Google Chrome’s website. + +[Get Google Chrome][1] + +You’ll see the option to download Google Chrome. + +![Click on the Download Chrome button][2] + +When you click on the download button, it gives you two options for downloading the installer file. Go with the one that says Debian/Ubuntu. + +![Download the Chrome installer file for Debian][3] + +**Please note that Google Chrome is NOT available for 32-bit systems.** + +In the next screen, you should opt for saving the file to the computer instead of opening it in software center for installation. This way, the downloaded file will be saved in the Downloads folder instead of the temp directory. + +![Save the downloaded DEB file for Google Chrome][4] + +Go to the Download folders and right click on the downloaded deb file and choose to open it with Software Install. + +![Right click on the downloaded DEB file and open with Software Install][5] + +It will then open the software center and you should see the option to install Chrome now. Click on the install button. + +![Click on the install button][6] + +You’ll be asked to enter your account’s password. This is the same password you use to log into your system. + +![Enter your account’s password][7] + +In less than a minute, Google Chrome will be installed. You should see a remove option now which indicates that the software is installed. + +![Chrome is now installed][8] + +Once Chrome is installed on Debian, search for it in the system menu and start it. + +![Start Google Chrome][9] + +It will ask to be your default browser and send the crash reports to Google. You can uncheck either or both options. And then you can see Google Chrome browser window. + +![][10] + +If you log into your Google account, you should be able to sync your passwords, bookmarks and other browsing data here. Enjoy it! + +Another thing, after installing Chrome, you can delete the downloaded DEB file from your system. It is not needed anymore, not even for uninstalling Chrome. + +### Method 2: Install Google Chrome on Debian from the terminal + +What you just saw above can be easily achieved in the terminal. + +First, make sure that your package cache is refreshed and you have wget installed for [downloading files from the web in the terminal][11]. + +``` +sudo apt update && sudo apt install wget +``` + +The next option is to download the .deb file of Google Chrome: + +``` +wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb +``` + +Once downloaded, you can [install the deb file in the terminal][12] with apt command like this: + +``` +sudo apt install ./google-chrome-stable_current_amd64.deb +``` + +Once the installation completes, you can start using Chrome. + +### Bonus tip: Updating Google Chrome + +Both methods add Google’s repository to your system. You can see it in your sources.lis.d directory: + +``` +cat /etc/apt/sources.list.d/google-chrome.list +``` + +This means that Google Chrome will be updated with other system updates in Debian and Kali Linux. You know [how to update your Kali Linux][13] or Debian system in command line? Just use this command: + +``` +sudo apt update && sudo apt upgrade -y +``` + +### Uninstall Google Chrome from your system + +Even if you chose to install Chrome on Debian using the GUI method, you’ll have to use the terminal to remove it. + +Don’t worry. It’s really just one command: + +``` +sudo apt purge google-chrome-stable +``` + +Enter your account password when asked. Nothing is displayed on the screen when you type the password. That’s okay. Type it and press enter and confirm the deletion. + +![][14] + +Well, that’s about it. I hope you find this tutorial helpful. + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-chrome-debian-kali-linux/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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 From 94fca4192280cbbd1a8a162620b9c5e1547c1825 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 1 Oct 2021 05:03:16 +0800 Subject: [PATCH 033/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210930=20?= =?UTF-8?q?Make=20YAML=20as=20easy=20as=20it=20looks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210930 Make YAML as easy as it looks.md --- .../20210930 Make YAML as easy as it looks.md | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 sources/tech/20210930 Make YAML as easy as it looks.md diff --git a/sources/tech/20210930 Make YAML as easy as it looks.md b/sources/tech/20210930 Make YAML as easy as it looks.md new file mode 100644 index 0000000000..511963cc0f --- /dev/null +++ b/sources/tech/20210930 Make YAML as easy as it looks.md @@ -0,0 +1,160 @@ +[#]: subject: "Make YAML as easy as it looks" +[#]: via: "https://opensource.com/article/21/9/yaml-cheat-sheet" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Make YAML as easy as it looks +====== +YAML looks simple so why is it so hard to write? Learn the two secrets +to YAML success. +![Person using a laptop][1] + +If you've ever tried writing YAML, you may have been initially pleased with how apparently easy it looks. At first glance, the YAML that's often used for configuration files, Ansible playbooks, and flat-file databases looks more or less as intuitive as a shopping list. However, there's a lot of nuance in YAML's structure, and it conceals a dangerous secret: YAML is actually a highly precise, structured, and surprisingly strict language. The good news is that you only need to understand two things to know how YAML works. + +The truth about YAML is that there are only two data structures in YAML: sequences and mappings. Those are two fancy names to represent what you'll discover are very familiar concepts. This article explains them both, and more importantly, how they work together to make YAML a powerful way to represent the data you care about. + +### What's a YAML sequence? + +A YAML sequence is a list. In its simplest form, there's one item per line, with each line beginning in a dash and a space. + +Here's an example: + + +``` +\--- +\- Linux +\- BSD +\- Illumos +``` + +Different languages have different ways of representing this kind of data. In Python, for example, the same list can be written as `['Linux', 'BSD', 'Illumos']`. When you write a list in real life, for instance before you go shopping for groceries, you probably approximate a YAML sequence. + +### What's a YAML mapping? + +A YAML mapping is a key term combined with a definition for that term. A mapping in other languages is called a _key and value pair_ or a _dictionary_. + +Here's an example: + + +``` +\--- +Kernel: Linux +CPU: AMD +RAM: '16 GB' +``` + +Different languages have different ways of representing this kind of data. [In Python][2], for example, the same data can be written as `{"Kernel": "Linux", "CPU": "AMD", "RAM": "16 GB"}`. In real life, you might use this kind of structure to plan, for instance, a game night with friends. One friend signs up to bring snacks, another signs up to bring a deck of cards, another a board game, and so on. + +### Combing sequences and mappings + +You now know the syntax of YAML. Sequences and mappings are the only two kinds of building blocks available in YAML, and anything you want to represent in YAML can be placed into either a sequence or a mapping. + +Or both! + +Yes, sequences and mappings can be combined and nested, which is one reason YAML often looks intuitive and yet feels complex all at once. There are only four possible combinations, though, and once you learn to see them, YAML starts to feel as easy as it looks. + +### Mapping sequences + +When you want one key term to have many values, you use a mapping of sequences. That is, you start with a mapping (keys), but you insert a list for the values: + + +``` +\--- +Linux: + - Fedora +  - Slackware +BSD: + - FreeBSD +  - NetBSD +``` + +In this sample code, **Linux** is the first key, and its value is a sequence, which contains **Fedora** and **Slackware**. The second key is **BSD**, which has a value of a sequence containing **FreeBSD** and **NetBSD**. + +### Mapping of mappings + +When you want one key term to have values that themselves have both keys and values, you use a mapping of mappings. That is, you start with a mapping (keys), but you insert another mapping for the values. + +This one can be deceptive, but it reveals why special terminology is used in YAML: just because you create a list of mappings doesn't mean you've created a _sequence_. Here's a mapping of mappings: + + +``` +\--- +Desktop: +  CPU: RISC-V +  RAM: '32 GB' +Laptop: +  CPU: AMD +  RAM: '16 GB' +``` + +To most people, that looks like a list. And technically, it is a list. But it's important to recognize that it is _not_ a YAML sequence. It's a mapping, which contains mappings. Being a near-expert in YAML, you can spot the difference from the distinct lack of dashes. + +Of all the constructs in Ansible playbooks, I find that this one tricks people the most. As humans, we like lists, and when we see a data structure that _is literally_ a list, most people are compelled to translate that into a YAML sequence. But in YAML, although a sequence is a list, a list is not always a sequence. + +### Sequence of sequences + +Just as you can nest mappings, you can nest a sequence into a sequence: + + +``` +\--- +\- [Linux, FreeBSD, Illumos] +\- [YAML, XML, JSON] +``` + +This is probably the least common data structure I encounter in real-world uses of YAML, but sometimes you need a list of lists. + +### Sequence of mappings + +You can also create a sequence that contains mappings. This isn't terribly common for the way humans sort data, but for computers it can be an important construct. + +Here's an example: + + +``` +\--- +- +  CPU: AMD +  RAM: '16 GB' +- +  CPU: Intel +  RAM: '16 GB' +``` + +As YAML, this is possibly the least intuitive syntax. I find it clearer when rendered in Python: + + +``` +`[{"CPU": "AMD", "RAM": "16 GB"}, {"CPU": "Intel", "RAM": "16 GB"}]` +``` + +The square brackets represent a list structure, and the list contains two dictionaries. Each dictionary contains key and value pairs. + +### Build better YAML + +Now you know the two components of YAML, and how they can be combined to represent complex  data structures. The question is: what will you build with YAML? + +I use YAML, as many people do, for Ansible playbooks. I've also used it as an easy configuration format, as a character sheet for D&D, as a representation of a directory structure required for project organization, and much more. As long as you get comfortable with the concepts of sequences and mappings, you might find YAML an easy format to write, read, and (provided the right library) to parse. + +If you're finding yourself working with YAML often, download our **[YAML cheat sheet][3]** to help you visualize the basic data structures and their combinations and to help you remember some of the extra syntactical conventions available to you. With a little bit of practice, you'll find YAML really is as easy as it looks! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/yaml-cheat-sheet + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/laptop_screen_desk_work_chat_text.png?itok=UXqIDRDD (Person using a laptop) +[2]: https://opensource.com/article/21/3/dictionary-values-python +[3]: https://opensource.com/downloads/yaml-cheat-sheet From 3ea55f315321065fe5fb10856c25d4724b40038d Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 1 Oct 2021 05:03:33 +0800 Subject: [PATCH 034/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210930=20?= =?UTF-8?q?How=20I=20use=20Ansible=20and=20anacron=20for=20automation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210930 How I use Ansible and anacron for automation.md --- ... use Ansible and anacron for automation.md | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 sources/tech/20210930 How I use Ansible and anacron for automation.md diff --git a/sources/tech/20210930 How I use Ansible and anacron for automation.md b/sources/tech/20210930 How I use Ansible and anacron for automation.md new file mode 100644 index 0000000000..78de59d790 --- /dev/null +++ b/sources/tech/20210930 How I use Ansible and anacron for automation.md @@ -0,0 +1,135 @@ +[#]: 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: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How I use Ansible and anacron for automation +====== +With anacron, I can drop scripts and Ansible playbooks into place for +all manner of trivial tasks. +![Woman programming][1] + +Automation is the great IT and DevOps ideal, but in my experience, anything that's not immediately convenient may as well not exist at all. There have been many times when I've come up with a pretty good solution for some task, and I'll even script it, but I stop short of making it literally automated because the infrastructure for easy automation doesn't exist on the machine I'm working on. + +My favorite easy automation tool used to be the cron system—old, reliable, user-facing, and (aside from a scheduling syntax I can never commit to memory) simple. However, the problem with cron is that it assumes a computer is on 24 hours a day, every day. After missing one too many scheduled backups, I discovered [anacron][2], the cron system based on timestamps rather than scheduled times. If your computer is off when a job would typically have run, anacron ensures that it's run when the computer is back on. Creating a job is as easy as dropping a shell script into one of three directories: `cron.daily`, `cron.weekly`, or `cron.monthly` (you can define more if you want). With anacron, I find myself dropping scripts and Ansible playbooks into place for all manner of trivial tasks, including pop-up reminders of upcoming due dates or events. + +It's a simple and obvious solution to a modern problem, but it does me no good if anacron isn't installed on the computer. + +### Software setup with Ansible + +Any time I set up a new computer, whether it's a laptop, workstation, or server, I install anacron. That's easy, but an anacron install only provides the anacron command. It doesn't set up the anacron user environment. So I created an Ansible playbook to set up what the user needs to use anacron and install the anacron command. + +First, the standard Ansible boilerplate: + + +``` +\--- +\- hosts: localhost +  tasks: +``` + +### Creating directories with Ansible + +Next, I create the directory tree I use for anacron. You can think of this as a sort of transparent 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' +``` + +The syntax of this might seem a little strange, but it's actually a loop. The `with_items:` directive defines four directories to create, and Ansible iterates over the `ansible.builtin.file:` directive once for each directory (the directory name populates the `{{ item }}` variable). As with everything in Ansible, there's no error or conflict if the directory already exists. + +### Copying files with Ansible + +The `ansible.builtin.copy` module copies files from one location to another. For this to work, I needed to create a file called `anacrontab`. It's not an Ansible playbook, so I keep it in my `~/Ansible/data` directory, where I keep support files for my playbooks. + + +``` +    - name: copy anacrontab into place +      ansible.builtin.copy: +        src: ~/Ansible/data/anacrontab +        dest: ~/.local/etc/anacrontab +        mode: '0755' +``` + +My `anacrontab` file is simple and mimics the one some distributions install by default into `/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/ +``` + +### Running anacron on login + +Most Linux distributions configure anacron to read jobs from `/etc/anacron`. I mostly use anacron as a regular user, so I launch anacron from my login `~/.profile`. I don't want to have to remember to configure that myself, so I have Ansible do it. I use the `ansible.builtin.lineinfile` module, which creates `~/.profile` if it doesn't already exist and inserts the anacron launch line. + + +``` +    - 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 +``` + +### Installing anacron with Ansible + +For most of my systems, the `dnf` module would work for package installation, but my workstation runs Slackware (which uses `slackpkg`), and sometimes a different Linux distro makes its way into my collection. The `ansible.builtin.package` module provides a generic interface to package installation, so I use it for this playbook. Luckily, I haven't come across a repo that names `anacron` anything but `anacron`, so for now, I don't have to account for potential differences in package names. + +This is actually a separate play because package installation requires privilege escalation, provided by the `becomes: true` directive. + + +``` +\- hosts: localhost +  become: true +  tasks: +    - name: install anacron +      ansible.builtin.package: +        name: anacron +        state: present +``` + +### Using anacron and Ansible for easy automation + +To install anacron with Ansible, I run the playbook: + + +``` +`$ ansible-playbook ~/Ansible/setup-anacron.yaml` +``` + +From then on, I can write shell scripts to perform some trivial but repetitive task and copy it into `~/.local/etc/cron.daily` to have it automatically run once a day (or thereabouts). I also write Ansible playbooks for tasks such as [cleaning out my downloads folder][3]. I place my playbooks in `~/Ansible`, which is where I keep my Ansible plays, and then create a shell script in `~/.local/etc/cron.daily` to execute the play. It's easy, painless, and quickly becomes second nature. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/ansible-anacron-automation + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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 From 3ee76f124b27e7b14a64a3c42b7da9059e08d545 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 1 Oct 2021 05:03:48 +0800 Subject: [PATCH 035/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020210930=20?= =?UTF-8?q?Using=20Ansible=20with=20REST=20APIs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20210930 Using Ansible with REST APIs.md --- .../20210930 Using Ansible with REST APIs.md | 212 ++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 sources/tech/20210930 Using Ansible with REST APIs.md diff --git a/sources/tech/20210930 Using Ansible with REST APIs.md b/sources/tech/20210930 Using Ansible with REST APIs.md new file mode 100644 index 0000000000..4d05c8375b --- /dev/null +++ b/sources/tech/20210930 Using Ansible with REST APIs.md @@ -0,0 +1,212 @@ +[#]: subject: "Using Ansible with REST APIs" +[#]: via: "https://opensource.com/article/21/9/ansible-rest-apis" +[#]: author: "Vince Power https://opensource.com/users/vincepower" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Using Ansible with REST APIs +====== +You may have queried APIs with a web browser or curl, but one of the +overlooked capabilities of Ansible is how well it can leverage APIs as +part of any playbook. +![Looking at a map][1] + +Ansible is a top open source project which, on the surface, looks to provide a simple way to standardize your existing automation and allow it to run in parallel across multiple hosts, and it does this very successfully. Yet, in reality, Ansible has the capabilities to extend what your existing automation does to incorporate other systems and really simplify tasks across all aspects of your daily routine. + +This capability starts with the [collections][2] and [roles][3] that are included with Ansible and all the third-party utilities distributed through [Ansible Galaxy][4]. You may have queried APIs with a web browser or [curl][5], but one of the overlooked capabilities of Ansible is how well it can leverage APIs as part of any playbook. This is extremely useful because the number of REST APIs being built and deployed both internally and across the global internet is increasing exponentially. There's even a [public-apis GitHub repo][6] listing hundreds of free APIs across over a dozen categories just for a sense of scale. + +### A basic API playbook + +Well, it really comes down to a few key core capabilities within Ansible, which are exposed nicely with one specific built-in task, _uri_. In this post, I'll go through a fairly simple example of how to call a REST API and use the data from that call to decide what to do next. This works with Ansible 2.9 and higher. In later versions (specifically v4), the modules we use need to be prepended with _ansible.builtin_ like _ansible.builtin.set_fact_ instead of just _set_fact_. + +To get started, you need a basic playbook to build on. In this case, you're only using local calls, so you don't need to be a superuser. + +First, create this YAML file to establish a working baseline: + + +``` +\--- +\- name: Using a REST API +  become: false +  hosts: localhost +  gather_facts: false +  tasks: +    - debug: +        msg: “Let’s call an API” +``` + +Here's the output after running it: + + +``` +% ansible-playbook using-a-rest-api.yml + +PLAY [Using a REST API] ********************************************************************************************* + +TASK [debug] ******************************************************************************************************** +ok: [localhost] => { +    "msg": "“Let’s call an API”" +} + +PLAY RECAP ********************************************************************************************************** +localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   +``` + +### Calling an API + +To call an actual API, you can use the _uri_ module. Here are two examples. The first is just a GET and the second is a POST with parameters to show the different available options. + + +``` +\--- +\- name: Everyone loves a good Chuck Norris joke +  uri: +    url: +    method: GET + +\- name: Login to an API +  uri: +    url: +    method: POST +    body_format: json +    body: +      name: your_username +      password: your_password +      client_id: YOUR_CLIENT_ID +      access_token: ACCESS_TOKEN +      connection: CONNECTION +      scope: SCOPE +``` + +I use the first API for the rest of this article to show how the returned data can be used. The question is, how do you collect the data being returned, and what does it look like? + +To collect the output from any task running in Ansible, you use the _register_ attribute, and then you can use the _debug_ task to display the raw data. In the case of APIs called using _uri_, all the output is put under the .json. Subsection of the result. The _uri_ commands and other its output are also at that top level. These can be useful to make sure the API call works by looking at other data fields like status. + +These are the two tasks you must add to the original playbook to add the API call to the mix to later do something with. + + +``` +  - name: Getting the definition of awesome +      uri: +        url: +        method: GET +      register: results + +    - debug: +        var: results +``` + +Run it to see the output generated by debug: + + +``` +TASK [debug] ******************************************************************************************************** +ok: [localhost] => { +    "results": { +        "alt_svc": "h3=\":443\"; ma=86400, h3-29=\":443\"; ma=86400, h3-28=\":443\"; ma=86400, h3-27=\":443\"; ma=86400", +        "cf_cache_status": "DYNAMIC", +        "cf_ray": "694f7d791aeb19e7-EWR", +        "changed": false, +        "connection": "close", +        "content_type": "application/json;charset=UTF-8", +        "cookies": {}, +        "cookies_string": "", +        "date": "Sun, 26 Sep 2021 21:12:23 GMT", +        "elapsed": 0, +        "expect_ct": "max-age=604800, report-uri=\""", +        "failed": false, +        "json": { +            "categories": [], +            "created_at": "2020-01-05 13:42:26.991637", +            "icon_url": "", +            "id": "IjqNNWKvSDeVKaI82PaT1g", +            "updated_at": "2020-01-05 13:42:26.991637", +            "url": "", +            "value": "One person stated that Chuck Norris has forgotten more about killing than anyone will ever know. That is not true -- Chuck Norris never forgets. Ever." +        }, +        "msg": "OK (unknown bytes)", +        "nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}", +        "redirected": false, +        "report_to": "{\"endpoints\":[{\"url\":\"https:\\\/\\\/a.nel.cloudflare.com\\\/report\\\/v3?s=HVPJYMVr%2B3wB1HSlgxv6GThBMjkBJgfdu0DPw%2BunjQzQ9YfXZqifggIJ%2FxOIKgOu6JP1SrPsx1jCCp3GQ9hZAp7NO0pmlTZ0y3ufbASGwLmCOV1zyaecUkSwQD%2Fv3RYYgZTkaSQ%3D\"}],\"group\":\"cf-nel\",\"max_age\":604800}", +        "server": "cloudflare", +        "status": 200, +        "transfer_encoding": "chunked", +        "url": "", +        "via": "1.1 vegur" +    } +} +``` + +Now that you can see all the output make a custom message listing the value returned by the API. Here is the completed playbook: + + +``` +\--- +\- name: Using a REST API +  become: false +  hosts: localhost +  gather_facts: false +  tasks: +    - debug: +        msg: “Let’s call an API” + +    - name: Everyone loves a good Chuck Norris joke +      uri: +        url: +        method: GET +      register: results + +    - debug: +        var: results.json.value +``` + +And now the complete output: + + +``` +PLAY [Using a REST API] ********************************************************************************************* + +TASK [debug] ******************************************************************************************************** +ok: [localhost] => { +    "msg": "“Let’s call an API”" +} + +TASK [Everyone loves a good Chuck Norris joke] ********************************************************************** +ok: [localhost] + +TASK [debug] ******************************************************************************************************** +ok: [localhost] => { +    "results.json.value": "Chuck Norris is the only computer system that beats a Mac or a PC. Too bad all it does is round house kicks the user." +} + +PLAY RECAP ********************************************************************************************************** +localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   +``` + +### Next steps + +Things can get much more complicated than I've shown here. To get more details, head over to Ansible's [documentation][7]. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/ansible-rest-apis + +作者:[Vince Power][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/vincepower +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/tips_map_guide_ebook_help_troubleshooting_lightbulb_520.png?itok=L0BQHgjr (Looking at a map) +[2]: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html +[3]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html +[4]: https://galaxy.ansible.com/ +[5]: https://www.redhat.com/sysadmin/use-curl-api +[6]: https://github.com/public-apis/public-apis +[7]: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/uri_module.html From e4db2fbcbedc029b8678a91db592bc7ca09b5d9b Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 1 Oct 2021 16:58:58 +0800 Subject: [PATCH 036/143] PRF&PUB @geekpi https://linux.cn/article-13839-1.html --- ... Ubuntu Linux -GUI and Terminal Methods.md | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md b/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md index 88f4504331..2820edd9a1 100644 --- a/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md +++ b/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md @@ -3,18 +3,20 @@ [#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" [#]: collector: "lujun9972" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13839-1.html" -在 Ubuntu Linux 上安装 AnyDesk(GUI 和终端方法) +在 Ubuntu Linux 上安装 AnyDesk ====== -_**简介:这个初学者的教程讨论了在基于 Ubuntu 的 Linux 发行版上安装 AnyDesk 的 GUI 和终端方法**_。 +> 这个初学者的教程讨论了在基于 Ubuntu 的 Linux 发行版上安装 AnyDesk 的 GUI 和终端方法。 + +![](https://img.linux.net.cn/data/attachment/album/202110/01/165758y9aaiix7yu88ayui.jpg) [AnyDesk][1] 是一个流行的远程桌面软件,可用于 Linux、Windows、BSD、macOS 和移动平台。 -有了这个工具,你可以用 AnyDesk 远程访问其他电脑,或者让别人远程访问你的系统。不是每个人都可以访问它,因为有两台设备使用 AnyDesk。你必须接受传入的连接和/或提供一个安全连接的密码。 +有了 AnyDesk,你可以用它远程访问其他电脑,或者让别人远程访问你的系统。不是每个人都可以访问它,因为需要两台设备都使用 AnyDesk。你必须接受传入的连接和/或提供一个安全连接的密码。 这对于向朋友、家人、同事甚至客户提供技术支持很有帮助。 @@ -22,13 +24,13 @@ _**简介:这个初学者的教程讨论了在基于 Ubuntu 的 Linux 发行 同样的方法应该适用于 Debian 和其他基于 Debian 和 Ubuntu 的发行版,如 Linux Mint,Linux Lite 等。 -非 FOSS 警告! - -AnyDesk 不是开源软件。这里涉及它是因为它在 Linux 上可用,而文章的重点是 Linux。 +> **非 FOSS 警告!** +> +> AnyDesk 不是开源软件。这里涉及它是因为它在 Linux 上可用,而文章的重点是 Linux。 ### 方法 1:使用终端在 Ubuntu 上安装 AnyDesk -在你的系统上[打开终端程序][2]。你需要一个像 wget 这样的工具来[在终端下载文件][3],对于这个使用以下命令: +在你的系统上 [打开终端程序][2]。你需要一个像 `wget` 这样的工具来 [在终端下载文件][3],使用以下命令: ``` sudo apt update @@ -41,7 +43,7 @@ sudo apt install wget wget -qO - https://keys.anydesk.com/repos/DEB-GPG-KEY | sudo apt-key add - ``` -你可以暂时忽略关于 apt-key 命令的废弃警告。下一步是将 AnyDesk 仓库添加到系统的仓库源中: +你可以暂时忽略关于 `apt-key` 命令的废弃警告。下一步是将 AnyDesk 仓库添加到系统的仓库源中: ``` echo "deb http://deb.anydesk.com/ all main" | sudo tee /etc/apt/sources.list.d/anydesk-stable.list @@ -75,9 +77,9 @@ anydesk 你可以从 AnyDesk 官网下载 Ubuntu 上的 AnyDesk: -[下载 Linux 上的 Anydesk][6] +- [下载 Linux 上的 Anydesk][6] -你会看到一个立即下载的按钮。点击它。 +你会看到一个“Download Now”的按钮。点击它。 ![Download AnyDesk][7] @@ -99,7 +101,7 @@ anydesk 这就好了。不是太难,是吗? -我不打算展示使用 AnyDesk 的步骤。我想你已经对这个问题有了一些了解。如果没有,请参考[这篇文章][13],谢谢。 +我不打算展示使用 AnyDesk 的步骤。我想你已经对这个问题有了一些了解。如果没有,请参考 [这篇文章][13]。 #### 故障排除提示 @@ -110,7 +112,7 @@ anydesk anydesk: error while loading shared libraries: libpangox-1.0.so.0: cannot open shared object file: No such file or directory ``` -如果你看到 [error while loading shared libraries][14] 信息,你要安装它所报错的软件包。在我的例子中,我是这样做的: +如果你看到 “[error while loading shared libraries][14]” 信息,你要安装它所报错的软件包。在我的例子中,我是这样做的: ``` sudo apt install libpangox-1.0-0 @@ -127,7 +129,7 @@ via: https://itsfoss.com/install-anydesk-ubuntu/ 作者:[Abhishek Prakash][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/) 荣誉推出 From 3b2ae798c46372100790c014bd0cbb33ede2e7e4 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 1 Oct 2021 17:03:41 +0800 Subject: [PATCH 037/143] =?UTF-8?q?=E5=BD=92=E6=A1=A3=20202109?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20200121 13 of the best React JavaScript frameworks.md | 0 .../{ => 202109}/20200211 Using external libraries in Java.md | 0 .../20200908 Deploy a deep learning model on Kubernetes.md | 0 published/{ => 202109}/20210228 What is GNU-Linux Copypasta.md | 0 .../20210424 Can We Recommend Linux for Gaming in 2021.md | 0 published/{ => 202109}/20210622 What is a config file.md | 0 .../20210719 Apps for daily needs part 2- office suites.md | 0 .../{ => 202109}/20210727 Analyze the Linux kernel with ftrace.md | 0 .../20210804 Apps for daily needs part 3- image editors.md | 0 ...uide to understanding your team-s implicit values and needs.md | 0 ... vs Ubuntu- What-s the Difference- Which One Should You Use.md | 0 .../20210820 Check file status on Linux with the stat command.md | 0 .../20210820 How to Download Audio Only Using youtube-dl.md | 0 ...0821 10 Things to Do After Installing elementary OS 6 -Odin.md | 0 .../{ => 202109}/20210821 How to set up your printer on Linux.md | 0 .../20210823 Apps for daily needs part 4- audio editors.md | 0 ...24 Ulauncher- A Super Useful Application Launcher for Linux.md | 0 ... Elementary OS 6 Odin Review - Late Arrival but a Solid One.md | 0 .../{ => 202109}/20210827 How to Easily Install Debian Linux.md | 0 .../20210827 Linux kernel modules we can-t live without.md | 0 ...20210829 Position text on your screen in Linux with ncurses.md | 0 ...nux Jargon Buster- What is sudo rm -rf- Why is it Dangerous.md | 0 .../20210830 Write a guessing game in ncurses on Linux.md | 0 published/{ => 202109}/20210831 What is a container image.md | 0 ...0831 Zulip- An Interesting Open-Source Alternative to Slack.md | 0 .../20210901 20 essential Linux commands for every user.md | 0 published/{ => 202109}/20210901 What are container runtimes.md | 0 .../20210902 4 Linux technologies fundamental to containers.md | 0 .../20210904 How to Install Dropbox on Ubuntu Linux.md | 0 ...ither Windows, nor Linux- Shrine is ‘God-s Operating System.md | 0 .../20210906 Getting the Top Indicator Panel Back in GNOME.md | 0 .../20210906 Resize an image from the Linux terminal.md | 0 .../20210907 How to Stop a Program in Linux Terminal.md | 0 ... OpenWrt 21.02 Arrives With Linux Kernel 5.4 - WPA3 Support.md | 0 ...0210907 Run Web Applications in Linux Using Tangram Browser.md | 0 .../20210907 Use lspci on Linux to see your hardware.md | 0 .../20210908 Apps for daily needs part 5- video editors.md | 0 .../20210908 Debug a web page error from the command line.md | 0 .../{ => 202109}/20210908 How to Run Java Programs in Ubuntu.md | 0 ...ve USB Drive in Linux Terminal -For Experts and Adventurers.md | 0 ...ls Brackets Code Editor - Suggests Using Visual Studio Code.md | 0 ...Building an open source community health analytics platform.md | 0 ...10910 Quadratic algorithms are slow (and hashmaps are fast).md | 0 ...hy Firefox is Seeing a Continuous Decline for Last 12 Years.md | 0 .../20210913 Replace smart quotes with the Linux sed command.md | 0 ... to check for update info and changelogs with rpm-ostree db.md | 0 ...20210915 Raspberry Pi Zero vs Zero W- What-s the Difference.md | 0 .../20210915 Screen Recording in Linux With OBS and Wayland.md | 0 ... in Kali Live VM Support, New Tools, and Other Improvements.md | 0 ...10916 Watch commands and tasks with the Linux watch command.md | 0 .../{ => 202109}/20210917 How to Install Kali Linux in VMware.md | 0 published/{ => 202109}/20210917 Start using YAML now.md | 0 .../20210918 How to Install Ubuntu Desktop on Raspberry Pi 4.md | 0 ...Vagrant to test your scripts on different operating systems.md | 0 ...inux command-line tool to learn more about your NVMe drives.md | 0 .../{ => 202109}/20210921 Run containers on your Mac with Lima.md | 0 ...sed- The Most Popular Linux Desktop Environment Gets Better.md | 0 .../20210924 An open source alternative to Microsoft Exchange.md | 0 ...e Apex Legends, Fortnite, Thanks to Easy Anti-Cheat Support.md | 0 .../{ => 202109}/20210927 5 open source alternatives to Zoom.md | 0 .../{ => 202109}/20210929 Manage CentOS Stream with Foreman.md | 0 61 files changed, 0 insertions(+), 0 deletions(-) rename published/{ => 202109}/20200121 13 of the best React JavaScript frameworks.md (100%) rename published/{ => 202109}/20200211 Using external libraries in Java.md (100%) rename published/{ => 202109}/20200908 Deploy a deep learning model on Kubernetes.md (100%) rename published/{ => 202109}/20210228 What is GNU-Linux Copypasta.md (100%) rename published/{ => 202109}/20210424 Can We Recommend Linux for Gaming in 2021.md (100%) rename published/{ => 202109}/20210622 What is a config file.md (100%) rename published/{ => 202109}/20210719 Apps for daily needs part 2- office suites.md (100%) rename published/{ => 202109}/20210727 Analyze the Linux kernel with ftrace.md (100%) rename published/{ => 202109}/20210804 Apps for daily needs part 3- image editors.md (100%) rename published/{ => 202109}/20210819 A guide to understanding your team-s implicit values and needs.md (100%) rename published/{ => 202109}/20210819 Debian vs Ubuntu- What-s the Difference- Which One Should You Use.md (100%) rename published/{ => 202109}/20210820 Check file status on Linux with the stat command.md (100%) rename published/{ => 202109}/20210820 How to Download Audio Only Using youtube-dl.md (100%) rename published/{ => 202109}/20210821 10 Things to Do After Installing elementary OS 6 -Odin.md (100%) rename published/{ => 202109}/20210821 How to set up your printer on Linux.md (100%) rename published/{ => 202109}/20210823 Apps for daily needs part 4- audio editors.md (100%) rename published/{ => 202109}/20210824 Ulauncher- A Super Useful Application Launcher for Linux.md (100%) rename published/{ => 202109}/20210826 Elementary OS 6 Odin Review - Late Arrival but a Solid One.md (100%) rename published/{ => 202109}/20210827 How to Easily Install Debian Linux.md (100%) rename published/{ => 202109}/20210827 Linux kernel modules we can-t live without.md (100%) rename published/{ => 202109}/20210829 Position text on your screen in Linux with ncurses.md (100%) rename published/{ => 202109}/20210830 Linux Jargon Buster- What is sudo rm -rf- Why is it Dangerous.md (100%) rename published/{ => 202109}/20210830 Write a guessing game in ncurses on Linux.md (100%) rename published/{ => 202109}/20210831 What is a container image.md (100%) rename published/{ => 202109}/20210831 Zulip- An Interesting Open-Source Alternative to Slack.md (100%) rename published/{ => 202109}/20210901 20 essential Linux commands for every user.md (100%) rename published/{ => 202109}/20210901 What are container runtimes.md (100%) rename published/{ => 202109}/20210902 4 Linux technologies fundamental to containers.md (100%) rename published/{ => 202109}/20210904 How to Install Dropbox on Ubuntu Linux.md (100%) rename published/{ => 202109}/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md (100%) rename published/{ => 202109}/20210906 Getting the Top Indicator Panel Back in GNOME.md (100%) rename published/{ => 202109}/20210906 Resize an image from the Linux terminal.md (100%) rename published/{ => 202109}/20210907 How to Stop a Program in Linux Terminal.md (100%) rename published/{ => 202109}/20210907 OpenWrt 21.02 Arrives With Linux Kernel 5.4 - WPA3 Support.md (100%) rename published/{ => 202109}/20210907 Run Web Applications in Linux Using Tangram Browser.md (100%) rename published/{ => 202109}/20210907 Use lspci on Linux to see your hardware.md (100%) rename published/{ => 202109}/20210908 Apps for daily needs part 5- video editors.md (100%) rename published/{ => 202109}/20210908 Debug a web page error from the command line.md (100%) rename published/{ => 202109}/20210908 How to Run Java Programs in Ubuntu.md (100%) rename published/{ => 202109}/20210908 How to Use the dd Command to Create a Live USB Drive in Linux Terminal -For Experts and Adventurers.md (100%) rename published/{ => 202109}/20210909 Adobe Kills Brackets Code Editor - Suggests Using Visual Studio Code.md (100%) rename published/{ => 202109}/20210910 Building an open source community health analytics platform.md (100%) rename published/{ => 202109}/20210910 Quadratic algorithms are slow (and hashmaps are fast).md (100%) rename published/{ => 202109}/20210911 Here-s Why Firefox is Seeing a Continuous Decline for Last 12 Years.md (100%) rename published/{ => 202109}/20210913 Replace smart quotes with the Linux sed command.md (100%) rename published/{ => 202109}/20210915 How to check for update info and changelogs with rpm-ostree db.md (100%) rename published/{ => 202109}/20210915 Raspberry Pi Zero vs Zero W- What-s the Difference.md (100%) rename published/{ => 202109}/20210915 Screen Recording in Linux With OBS and Wayland.md (100%) rename published/{ => 202109}/20210916 Kali Linux 2021.3 Brings in Kali Live VM Support, New Tools, and Other Improvements.md (100%) rename published/{ => 202109}/20210916 Watch commands and tasks with the Linux watch command.md (100%) rename published/{ => 202109}/20210917 How to Install Kali Linux in VMware.md (100%) rename published/{ => 202109}/20210917 Start using YAML now.md (100%) rename published/{ => 202109}/20210918 How to Install Ubuntu Desktop on Raspberry Pi 4.md (100%) rename published/{ => 202109}/20210920 Use Vagrant to test your scripts on different operating systems.md (100%) rename published/{ => 202109}/20210920 Use this Linux command-line tool to learn more about your NVMe drives.md (100%) rename published/{ => 202109}/20210921 Run containers on your Mac with Lima.md (100%) rename published/{ => 202109}/20210923 GNOME 41 Released- The Most Popular Linux Desktop Environment Gets Better.md (100%) rename published/{ => 202109}/20210924 An open source alternative to Microsoft Exchange.md (100%) rename published/{ => 202109}/20210924 Linux Gamers Can Finally Play Games like Apex Legends, Fortnite, Thanks to Easy Anti-Cheat Support.md (100%) rename published/{ => 202109}/20210927 5 open source alternatives to Zoom.md (100%) rename published/{ => 202109}/20210929 Manage CentOS Stream with Foreman.md (100%) diff --git a/published/20200121 13 of the best React JavaScript frameworks.md b/published/202109/20200121 13 of the best React JavaScript frameworks.md similarity index 100% rename from published/20200121 13 of the best React JavaScript frameworks.md rename to published/202109/20200121 13 of the best React JavaScript frameworks.md diff --git a/published/20200211 Using external libraries in Java.md b/published/202109/20200211 Using external libraries in Java.md similarity index 100% rename from published/20200211 Using external libraries in Java.md rename to published/202109/20200211 Using external libraries in Java.md diff --git a/published/20200908 Deploy a deep learning model on Kubernetes.md b/published/202109/20200908 Deploy a deep learning model on Kubernetes.md similarity index 100% rename from published/20200908 Deploy a deep learning model on Kubernetes.md rename to published/202109/20200908 Deploy a deep learning model on Kubernetes.md diff --git a/published/20210228 What is GNU-Linux Copypasta.md b/published/202109/20210228 What is GNU-Linux Copypasta.md similarity index 100% rename from published/20210228 What is GNU-Linux Copypasta.md rename to published/202109/20210228 What is GNU-Linux Copypasta.md diff --git a/published/20210424 Can We Recommend Linux for Gaming in 2021.md b/published/202109/20210424 Can We Recommend Linux for Gaming in 2021.md similarity index 100% rename from published/20210424 Can We Recommend Linux for Gaming in 2021.md rename to published/202109/20210424 Can We Recommend Linux for Gaming in 2021.md diff --git a/published/20210622 What is a config file.md b/published/202109/20210622 What is a config file.md similarity index 100% rename from published/20210622 What is a config file.md rename to published/202109/20210622 What is a config file.md diff --git a/published/20210719 Apps for daily needs part 2- office suites.md b/published/202109/20210719 Apps for daily needs part 2- office suites.md similarity index 100% rename from published/20210719 Apps for daily needs part 2- office suites.md rename to published/202109/20210719 Apps for daily needs part 2- office suites.md diff --git a/published/20210727 Analyze the Linux kernel with ftrace.md b/published/202109/20210727 Analyze the Linux kernel with ftrace.md similarity index 100% rename from published/20210727 Analyze the Linux kernel with ftrace.md rename to published/202109/20210727 Analyze the Linux kernel with ftrace.md diff --git a/published/20210804 Apps for daily needs part 3- image editors.md b/published/202109/20210804 Apps for daily needs part 3- image editors.md similarity index 100% rename from published/20210804 Apps for daily needs part 3- image editors.md rename to published/202109/20210804 Apps for daily needs part 3- image editors.md diff --git a/published/20210819 A guide to understanding your team-s implicit values and needs.md b/published/202109/20210819 A guide to understanding your team-s implicit values and needs.md similarity index 100% rename from published/20210819 A guide to understanding your team-s implicit values and needs.md rename to published/202109/20210819 A guide to understanding your team-s implicit values and needs.md diff --git a/published/20210819 Debian vs Ubuntu- What-s the Difference- Which One Should You Use.md b/published/202109/20210819 Debian vs Ubuntu- What-s the Difference- Which One Should You Use.md similarity index 100% rename from published/20210819 Debian vs Ubuntu- What-s the Difference- Which One Should You Use.md rename to published/202109/20210819 Debian vs Ubuntu- What-s the Difference- Which One Should You Use.md diff --git a/published/20210820 Check file status on Linux with the stat command.md b/published/202109/20210820 Check file status on Linux with the stat command.md similarity index 100% rename from published/20210820 Check file status on Linux with the stat command.md rename to published/202109/20210820 Check file status on Linux with the stat command.md diff --git a/published/20210820 How to Download Audio Only Using youtube-dl.md b/published/202109/20210820 How to Download Audio Only Using youtube-dl.md similarity index 100% rename from published/20210820 How to Download Audio Only Using youtube-dl.md rename to published/202109/20210820 How to Download Audio Only Using youtube-dl.md diff --git a/published/20210821 10 Things to Do After Installing elementary OS 6 -Odin.md b/published/202109/20210821 10 Things to Do After Installing elementary OS 6 -Odin.md similarity index 100% rename from published/20210821 10 Things to Do After Installing elementary OS 6 -Odin.md rename to published/202109/20210821 10 Things to Do After Installing elementary OS 6 -Odin.md diff --git a/published/20210821 How to set up your printer on Linux.md b/published/202109/20210821 How to set up your printer on Linux.md similarity index 100% rename from published/20210821 How to set up your printer on Linux.md rename to published/202109/20210821 How to set up your printer on Linux.md diff --git a/published/20210823 Apps for daily needs part 4- audio editors.md b/published/202109/20210823 Apps for daily needs part 4- audio editors.md similarity index 100% rename from published/20210823 Apps for daily needs part 4- audio editors.md rename to published/202109/20210823 Apps for daily needs part 4- audio editors.md diff --git a/published/20210824 Ulauncher- A Super Useful Application Launcher for Linux.md b/published/202109/20210824 Ulauncher- A Super Useful Application Launcher for Linux.md similarity index 100% rename from published/20210824 Ulauncher- A Super Useful Application Launcher for Linux.md rename to published/202109/20210824 Ulauncher- A Super Useful Application Launcher for Linux.md diff --git a/published/20210826 Elementary OS 6 Odin Review - Late Arrival but a Solid One.md b/published/202109/20210826 Elementary OS 6 Odin Review - Late Arrival but a Solid One.md similarity index 100% rename from published/20210826 Elementary OS 6 Odin Review - Late Arrival but a Solid One.md rename to published/202109/20210826 Elementary OS 6 Odin Review - Late Arrival but a Solid One.md diff --git a/published/20210827 How to Easily Install Debian Linux.md b/published/202109/20210827 How to Easily Install Debian Linux.md similarity index 100% rename from published/20210827 How to Easily Install Debian Linux.md rename to published/202109/20210827 How to Easily Install Debian Linux.md diff --git a/published/20210827 Linux kernel modules we can-t live without.md b/published/202109/20210827 Linux kernel modules we can-t live without.md similarity index 100% rename from published/20210827 Linux kernel modules we can-t live without.md rename to published/202109/20210827 Linux kernel modules we can-t live without.md diff --git a/published/20210829 Position text on your screen in Linux with ncurses.md b/published/202109/20210829 Position text on your screen in Linux with ncurses.md similarity index 100% rename from published/20210829 Position text on your screen in Linux with ncurses.md rename to published/202109/20210829 Position text on your screen in Linux with ncurses.md diff --git a/published/20210830 Linux Jargon Buster- What is sudo rm -rf- Why is it Dangerous.md b/published/202109/20210830 Linux Jargon Buster- What is sudo rm -rf- Why is it Dangerous.md similarity index 100% rename from published/20210830 Linux Jargon Buster- What is sudo rm -rf- Why is it Dangerous.md rename to published/202109/20210830 Linux Jargon Buster- What is sudo rm -rf- Why is it Dangerous.md diff --git a/published/20210830 Write a guessing game in ncurses on Linux.md b/published/202109/20210830 Write a guessing game in ncurses on Linux.md similarity index 100% rename from published/20210830 Write a guessing game in ncurses on Linux.md rename to published/202109/20210830 Write a guessing game in ncurses on Linux.md diff --git a/published/20210831 What is a container image.md b/published/202109/20210831 What is a container image.md similarity index 100% rename from published/20210831 What is a container image.md rename to published/202109/20210831 What is a container image.md diff --git a/published/20210831 Zulip- An Interesting Open-Source Alternative to Slack.md b/published/202109/20210831 Zulip- An Interesting Open-Source Alternative to Slack.md similarity index 100% rename from published/20210831 Zulip- An Interesting Open-Source Alternative to Slack.md rename to published/202109/20210831 Zulip- An Interesting Open-Source Alternative to Slack.md diff --git a/published/20210901 20 essential Linux commands for every user.md b/published/202109/20210901 20 essential Linux commands for every user.md similarity index 100% rename from published/20210901 20 essential Linux commands for every user.md rename to published/202109/20210901 20 essential Linux commands for every user.md diff --git a/published/20210901 What are container runtimes.md b/published/202109/20210901 What are container runtimes.md similarity index 100% rename from published/20210901 What are container runtimes.md rename to published/202109/20210901 What are container runtimes.md diff --git a/published/20210902 4 Linux technologies fundamental to containers.md b/published/202109/20210902 4 Linux technologies fundamental to containers.md similarity index 100% rename from published/20210902 4 Linux technologies fundamental to containers.md rename to published/202109/20210902 4 Linux technologies fundamental to containers.md diff --git a/published/20210904 How to Install Dropbox on Ubuntu Linux.md b/published/202109/20210904 How to Install Dropbox on Ubuntu Linux.md similarity index 100% rename from published/20210904 How to Install Dropbox on Ubuntu Linux.md rename to published/202109/20210904 How to Install Dropbox on Ubuntu Linux.md diff --git a/published/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md b/published/202109/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md similarity index 100% rename from published/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md rename to published/202109/20210905 Neither Windows, nor Linux- Shrine is ‘God-s Operating System.md diff --git a/published/20210906 Getting the Top Indicator Panel Back in GNOME.md b/published/202109/20210906 Getting the Top Indicator Panel Back in GNOME.md similarity index 100% rename from published/20210906 Getting the Top Indicator Panel Back in GNOME.md rename to published/202109/20210906 Getting the Top Indicator Panel Back in GNOME.md diff --git a/published/20210906 Resize an image from the Linux terminal.md b/published/202109/20210906 Resize an image from the Linux terminal.md similarity index 100% rename from published/20210906 Resize an image from the Linux terminal.md rename to published/202109/20210906 Resize an image from the Linux terminal.md diff --git a/published/20210907 How to Stop a Program in Linux Terminal.md b/published/202109/20210907 How to Stop a Program in Linux Terminal.md similarity index 100% rename from published/20210907 How to Stop a Program in Linux Terminal.md rename to published/202109/20210907 How to Stop a Program in Linux Terminal.md diff --git a/published/20210907 OpenWrt 21.02 Arrives With Linux Kernel 5.4 - WPA3 Support.md b/published/202109/20210907 OpenWrt 21.02 Arrives With Linux Kernel 5.4 - WPA3 Support.md similarity index 100% rename from published/20210907 OpenWrt 21.02 Arrives With Linux Kernel 5.4 - WPA3 Support.md rename to published/202109/20210907 OpenWrt 21.02 Arrives With Linux Kernel 5.4 - WPA3 Support.md diff --git a/published/20210907 Run Web Applications in Linux Using Tangram Browser.md b/published/202109/20210907 Run Web Applications in Linux Using Tangram Browser.md similarity index 100% rename from published/20210907 Run Web Applications in Linux Using Tangram Browser.md rename to published/202109/20210907 Run Web Applications in Linux Using Tangram Browser.md diff --git a/published/20210907 Use lspci on Linux to see your hardware.md b/published/202109/20210907 Use lspci on Linux to see your hardware.md similarity index 100% rename from published/20210907 Use lspci on Linux to see your hardware.md rename to published/202109/20210907 Use lspci on Linux to see your hardware.md diff --git a/published/20210908 Apps for daily needs part 5- video editors.md b/published/202109/20210908 Apps for daily needs part 5- video editors.md similarity index 100% rename from published/20210908 Apps for daily needs part 5- video editors.md rename to published/202109/20210908 Apps for daily needs part 5- video editors.md diff --git a/published/20210908 Debug a web page error from the command line.md b/published/202109/20210908 Debug a web page error from the command line.md similarity index 100% rename from published/20210908 Debug a web page error from the command line.md rename to published/202109/20210908 Debug a web page error from the command line.md diff --git a/published/20210908 How to Run Java Programs in Ubuntu.md b/published/202109/20210908 How to Run Java Programs in Ubuntu.md similarity index 100% rename from published/20210908 How to Run Java Programs in Ubuntu.md rename to published/202109/20210908 How to Run Java Programs in Ubuntu.md diff --git a/published/20210908 How to Use the dd Command to Create a Live USB Drive in Linux Terminal -For Experts and Adventurers.md b/published/202109/20210908 How to Use the dd Command to Create a Live USB Drive in Linux Terminal -For Experts and Adventurers.md similarity index 100% rename from published/20210908 How to Use the dd Command to Create a Live USB Drive in Linux Terminal -For Experts and Adventurers.md rename to published/202109/20210908 How to Use the dd Command to Create a Live USB Drive in Linux Terminal -For Experts and Adventurers.md diff --git a/published/20210909 Adobe Kills Brackets Code Editor - Suggests Using Visual Studio Code.md b/published/202109/20210909 Adobe Kills Brackets Code Editor - Suggests Using Visual Studio Code.md similarity index 100% rename from published/20210909 Adobe Kills Brackets Code Editor - Suggests Using Visual Studio Code.md rename to published/202109/20210909 Adobe Kills Brackets Code Editor - Suggests Using Visual Studio Code.md diff --git a/published/20210910 Building an open source community health analytics platform.md b/published/202109/20210910 Building an open source community health analytics platform.md similarity index 100% rename from published/20210910 Building an open source community health analytics platform.md rename to published/202109/20210910 Building an open source community health analytics platform.md diff --git a/published/20210910 Quadratic algorithms are slow (and hashmaps are fast).md b/published/202109/20210910 Quadratic algorithms are slow (and hashmaps are fast).md similarity index 100% rename from published/20210910 Quadratic algorithms are slow (and hashmaps are fast).md rename to published/202109/20210910 Quadratic algorithms are slow (and hashmaps are fast).md diff --git a/published/20210911 Here-s Why Firefox is Seeing a Continuous Decline for Last 12 Years.md b/published/202109/20210911 Here-s Why Firefox is Seeing a Continuous Decline for Last 12 Years.md similarity index 100% rename from published/20210911 Here-s Why Firefox is Seeing a Continuous Decline for Last 12 Years.md rename to published/202109/20210911 Here-s Why Firefox is Seeing a Continuous Decline for Last 12 Years.md diff --git a/published/20210913 Replace smart quotes with the Linux sed command.md b/published/202109/20210913 Replace smart quotes with the Linux sed command.md similarity index 100% rename from published/20210913 Replace smart quotes with the Linux sed command.md rename to published/202109/20210913 Replace smart quotes with the Linux sed command.md diff --git a/published/20210915 How to check for update info and changelogs with rpm-ostree db.md b/published/202109/20210915 How to check for update info and changelogs with rpm-ostree db.md similarity index 100% rename from published/20210915 How to check for update info and changelogs with rpm-ostree db.md rename to published/202109/20210915 How to check for update info and changelogs with rpm-ostree db.md diff --git a/published/20210915 Raspberry Pi Zero vs Zero W- What-s the Difference.md b/published/202109/20210915 Raspberry Pi Zero vs Zero W- What-s the Difference.md similarity index 100% rename from published/20210915 Raspberry Pi Zero vs Zero W- What-s the Difference.md rename to published/202109/20210915 Raspberry Pi Zero vs Zero W- What-s the Difference.md diff --git a/published/20210915 Screen Recording in Linux With OBS and Wayland.md b/published/202109/20210915 Screen Recording in Linux With OBS and Wayland.md similarity index 100% rename from published/20210915 Screen Recording in Linux With OBS and Wayland.md rename to published/202109/20210915 Screen Recording in Linux With OBS and Wayland.md diff --git a/published/20210916 Kali Linux 2021.3 Brings in Kali Live VM Support, New Tools, and Other Improvements.md b/published/202109/20210916 Kali Linux 2021.3 Brings in Kali Live VM Support, New Tools, and Other Improvements.md similarity index 100% rename from published/20210916 Kali Linux 2021.3 Brings in Kali Live VM Support, New Tools, and Other Improvements.md rename to published/202109/20210916 Kali Linux 2021.3 Brings in Kali Live VM Support, New Tools, and Other Improvements.md diff --git a/published/20210916 Watch commands and tasks with the Linux watch command.md b/published/202109/20210916 Watch commands and tasks with the Linux watch command.md similarity index 100% rename from published/20210916 Watch commands and tasks with the Linux watch command.md rename to published/202109/20210916 Watch commands and tasks with the Linux watch command.md diff --git a/published/20210917 How to Install Kali Linux in VMware.md b/published/202109/20210917 How to Install Kali Linux in VMware.md similarity index 100% rename from published/20210917 How to Install Kali Linux in VMware.md rename to published/202109/20210917 How to Install Kali Linux in VMware.md diff --git a/published/20210917 Start using YAML now.md b/published/202109/20210917 Start using YAML now.md similarity index 100% rename from published/20210917 Start using YAML now.md rename to published/202109/20210917 Start using YAML now.md diff --git a/published/20210918 How to Install Ubuntu Desktop on Raspberry Pi 4.md b/published/202109/20210918 How to Install Ubuntu Desktop on Raspberry Pi 4.md similarity index 100% rename from published/20210918 How to Install Ubuntu Desktop on Raspberry Pi 4.md rename to published/202109/20210918 How to Install Ubuntu Desktop on Raspberry Pi 4.md diff --git a/published/20210920 Use Vagrant to test your scripts on different operating systems.md b/published/202109/20210920 Use Vagrant to test your scripts on different operating systems.md similarity index 100% rename from published/20210920 Use Vagrant to test your scripts on different operating systems.md rename to published/202109/20210920 Use Vagrant to test your scripts on different operating systems.md diff --git a/published/20210920 Use this Linux command-line tool to learn more about your NVMe drives.md b/published/202109/20210920 Use this Linux command-line tool to learn more about your NVMe drives.md similarity index 100% rename from published/20210920 Use this Linux command-line tool to learn more about your NVMe drives.md rename to published/202109/20210920 Use this Linux command-line tool to learn more about your NVMe drives.md diff --git a/published/20210921 Run containers on your Mac with Lima.md b/published/202109/20210921 Run containers on your Mac with Lima.md similarity index 100% rename from published/20210921 Run containers on your Mac with Lima.md rename to published/202109/20210921 Run containers on your Mac with Lima.md diff --git a/published/20210923 GNOME 41 Released- The Most Popular Linux Desktop Environment Gets Better.md b/published/202109/20210923 GNOME 41 Released- The Most Popular Linux Desktop Environment Gets Better.md similarity index 100% rename from published/20210923 GNOME 41 Released- The Most Popular Linux Desktop Environment Gets Better.md rename to published/202109/20210923 GNOME 41 Released- The Most Popular Linux Desktop Environment Gets Better.md diff --git a/published/20210924 An open source alternative to Microsoft Exchange.md b/published/202109/20210924 An open source alternative to Microsoft Exchange.md similarity index 100% rename from published/20210924 An open source alternative to Microsoft Exchange.md rename to published/202109/20210924 An open source alternative to Microsoft Exchange.md diff --git a/published/20210924 Linux Gamers Can Finally Play Games like Apex Legends, Fortnite, Thanks to Easy Anti-Cheat Support.md b/published/202109/20210924 Linux Gamers Can Finally Play Games like Apex Legends, Fortnite, Thanks to Easy Anti-Cheat Support.md similarity index 100% rename from published/20210924 Linux Gamers Can Finally Play Games like Apex Legends, Fortnite, Thanks to Easy Anti-Cheat Support.md rename to published/202109/20210924 Linux Gamers Can Finally Play Games like Apex Legends, Fortnite, Thanks to Easy Anti-Cheat Support.md diff --git a/published/20210927 5 open source alternatives to Zoom.md b/published/202109/20210927 5 open source alternatives to Zoom.md similarity index 100% rename from published/20210927 5 open source alternatives to Zoom.md rename to published/202109/20210927 5 open source alternatives to Zoom.md diff --git a/published/20210929 Manage CentOS Stream with Foreman.md b/published/202109/20210929 Manage CentOS Stream with Foreman.md similarity index 100% rename from published/20210929 Manage CentOS Stream with Foreman.md rename to published/202109/20210929 Manage CentOS Stream with Foreman.md From 38b49a64d09792e2c4673c75411a9f497b949bd3 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 1 Oct 2021 17:21:36 +0800 Subject: [PATCH 038/143] PUB:20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods --- ...2 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {translated/tech => published}/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md (100%) diff --git a/translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md b/published/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md similarity index 100% rename from translated/tech/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md rename to published/20210922 Install AnyDesk on Ubuntu Linux -GUI and Terminal Methods.md From 5575ab9e595459bd926aef1563dab27d7ae19060 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 1 Oct 2021 17:36:16 +0800 Subject: [PATCH 039/143] APL --- sources/tech/20210907 How to use BusyBox on Linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210907 How to use BusyBox on Linux.md b/sources/tech/20210907 How to use BusyBox on Linux.md index dfcc7dbd6d..609412f9c4 100644 --- a/sources/tech/20210907 How to use BusyBox on Linux.md +++ b/sources/tech/20210907 How to use BusyBox on Linux.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/8/what-busybox" [#]: author: "Seth Kenlon https://opensource.com/users/seth" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From eb015a3e60132c50e3e4edb1131c0e8a159fdfca Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 1 Oct 2021 18:38:56 +0800 Subject: [PATCH 040/143] TSL&PRF --- .../20210907 How to use BusyBox on Linux.md | 189 ------------------ .../20210907 How to use BusyBox on Linux.md | 181 +++++++++++++++++ 2 files changed, 181 insertions(+), 189 deletions(-) delete mode 100644 sources/tech/20210907 How to use BusyBox on Linux.md create mode 100644 translated/tech/20210907 How to use BusyBox on Linux.md diff --git a/sources/tech/20210907 How to use BusyBox on Linux.md b/sources/tech/20210907 How to use BusyBox on Linux.md deleted file mode 100644 index 609412f9c4..0000000000 --- a/sources/tech/20210907 How to use BusyBox on Linux.md +++ /dev/null @@ -1,189 +0,0 @@ -[#]: subject: "How to use BusyBox on Linux" -[#]: via: "https://opensource.com/article/21/8/what-busybox" -[#]: author: "Seth Kenlon https://opensource.com/users/seth" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -How to use BusyBox on Linux -====== -BusyBox is an open source (GPL) project providing simple implementations -of nearly 400 common commands. -![bash logo on green background][1] - -It's easy to take Linux commands for granted. They come bundled with the system when you install Linux, and we often don't question why they're there. Some of the basic commands, such as [`cd`][2], [`kill`][3], and `echo` aren't always independent applications but are actually built into your shell. Others, such as [`ls`][4], [`mv`][5], and [`cat`][6] are part of a core utility package (often GNU `coreutils` specifically). But there are always alternatives in the world of open source, and one of the most interesting is [BusyBox][7]. - -### What is BusyBox in Linux? - -BusyBox is an open source (GPL) project providing simple implementations of nearly 400 common commands, including `ls`, `mv`, `ln`, `mkdir`, `more`, `ps`, `gzip`, `bzip2`, `tar`, and `grep`. It also contains a version of the programming language `awk`, the stream editor `sed`, the filesystem checker `fsck`, the `rpm` and `dpkg` package managers, and of course, a shell (`sh`) that provides easy access to all of these commands. In short, it contains all the essential commands required for a POSIX system to perform common system maintenance tasks as well as many user and administrative tasks. - -In fact, it even contains an `init` command which can be launched as PID 1 to serve as the parent process for all other system services. In other words, BusyBox can be used as an alternative to [systemd][8], OpenRC, sinit, init, and other launch daemons. - -BusyBox is very small. As an executable, it's under 1 MB, so it has gained much of its popularity in the [embedded][9], [Edge][10], and [IoT][11] space, where drive space is at a premium. In the world of containers and cloud computing, it's also popular as a foundation for minimal Linux container images. - -### Minimalism - -Part of the appeal of BusyBox is its minimalism. All of its commands are compiled into a single binary (`busybox`), and its man page is a mere 81 pages (by my calculation of piping `man` to `pr`) but covers nearly 400 commands. - -As an example comparison, here's the output of the `shadow` version of `useradd --help`: - - -``` - -b, --base-dir BASE_DIR       base directory for home - -c, --comment COMMENT         GECOS field of the new account - -d, --home-dir HOME_DIR       home directory of the new account - -D, --defaults                print or change the default config - -e, --expiredate EXPIRE_DATE  expiration date of the new account - -f, --inactive INACTIVE       password inactivity - -g, --gid GROUP               name or ID of the primary group - -G, --groups GROUPS           list of supplementary groups - -h, --help                    display this help message and exit - -k, --skel SKEL_DIR           alternative skeleton dir - -K, --key KEY=VALUE           override /etc/login.defs - -l, --no-log-init             do not add the user to the lastlog - -m, --create-home             create the user's home directory - -M, --no-create-home          do not create the user's home directory - -N, --no-user-group           do not create a group with the user's name - -o, --non-unique              allow users with non-unique UIDs - -p, --password PASSWORD       encrypted password of the new account - -r, --system                  create a system account - -R, --root CHROOT_DIR         directory to chroot into - -s, --shell SHELL             login shell of the new account - -u, --uid UID                 user ID of the new account - -U, --user-group              create a group with the same name as a user -``` - -And here's the BusyBox version of the same command: - - -``` - -h DIR    Home directory - -g GECOS  GECOS field - -s SHELL  Login shell - -G GRP    Group - -S            Create a system user - -D            Don't assign a password - -H            Don't create home directory - -u UID    User id - -k SKEL   Skeleton directory (/etc/skel) -``` - -Whether or not this difference is a feature or a limitation depends on whether you prefer to have 20 options or ten options in your commands. For some users and use-cases, BusyBox's minimalism provides just enough for what needs to be done. For others, it's a good minimal environment to have as a fallback or as a foundation for installing more robust tools like [Bash][12], [Zsh][13], GNU [Awk][14], and so on. - -### Installing BusyBox - -On Linux, you can install BusyBox using your package manager. For example, on Fedora and similar: - - -``` -`$ sudo dnf install busybox` -``` - -On Debian and derivatives: - - -``` -`$ sudo apt install busybox` -``` - -On macOS, use [MacPorts][15] or [Homebrew][16]. On Windows, use [Chocolatey][17]. - -You can set BusyBox as your shell using the `chsh --shell` command, followed by the path to the BusyBox `sh` application. I keep BusyBox in `/lib64`, but its location depends on where your distribution installed it. - - -``` -$ which busybox -/lib64/busybox/busybox -$ chsh --shell /lib64/busybox/sh -``` - -Replacing all common commands wholesale with BusyBox is a little more complex, because most distributions are "hard-wired" to look to specific packages for specific commands. In other words, while it's technically possible to replace `init` with BusyBox's `init`, your package manager may refuse to allow you to remove the package containing `init` for fear of you causing your system to become non-bootable. There are some distributions built upon BusyBox, so starting fresh is probably the easiest way to experience a system built around BusyBox. - -### Try BusyBox - -You don't have to change your shell to BusyBox permanently just to try it. You can launch a BusyBox shell from your current shell: - - -``` -$ busybox sh -~ $ -``` - -Your system still has the non-BusyBox versions of commands installed, though, so to experience BusyBox's tools, you must issue commands as arguments to the `busybox` executable: - - -``` -~ $ busybox echo $0 -sh -~ $ busybox ls --help -BusyBox vX.YY.Z (2021-08-25 07:31:48 NZST) multi-call binary. - -Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]... - -List directory contents - - -1  One column output - -a  Include entries that start with . - -A  Like -a, but exclude . and .. - -x  List by lines -[...] -``` - -For the "full" BusyBox experience, you can create symlinks to `busybox` for each command. This is easier than it sounds, as long as you use a [for-loop][18]: - - -``` -$ mkdir bbx -$ for i in $(bbx --list); do \ -ln -s /path/to/busybox bbx/$i \ -done -``` - -Add your directory of symlinks at the _start_ of your [path][19], and launch BusyBox: - - -``` -`$ PATH=$(pwd)/bbx:$PATH bbx/sh` -``` - -### Get busy - -BusyBox is a fun project and an example of just how _minimal_ computing can be. Whether you use BusyBox as a lightweight environment for an [ancient computer][20] [you've rescued][21], as the userland for an [embedded device][22], to trial a new init system, or just as a curiosity, it can be fun reacquainting yourself with old familiar, yet somehow new, commands. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/8/what-busybox - -作者:[Seth Kenlon][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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/bash_command_line.png?itok=k4z94W2U (bash logo on green background) -[2]: https://opensource.com/article/21/8/navigate-linux-directories -[3]: https://opensource.com/article/18/5/how-kill-process-stop-program-linux -[4]: https://opensource.com/article/19/7/master-ls-command -[5]: https://opensource.com/article/19/8/moving-files-linux-depth -[6]: https://opensource.com/article/19/2/getting-started-cat-command -[7]: https://www.busybox.net -[8]: https://opensource.com/article/20/4/systemd -[9]: https://opensource.com/article/21/3/rtos-embedded-development -[10]: https://opensource.com/article/17/9/what-edge-computing -[11]: https://opensource.com/article/21/3/iot-measure-raspberry-pi -[12]: https://opensource.com/article/20/4/bash-sysadmins-ebook -[13]: https://opensource.com/article/19/9/getting-started-zsh -[14]: https://opensource.com/article/20/9/awk-ebook -[15]: https://opensource.com/article/20/11/macports -[16]: https://opensource.com/article/20/6/homebrew-mac -[17]: https://opensource.com/article/20/3/chocolatey -[18]: https://opensource.com/article/19/10/programming-bash-loops -[19]: https://opensource.com/article/17/6/set-path-linux -[20]: https://opensource.com/article/20/2/restore-old-computer-linux -[21]: https://opensource.com/article/19/7/how-make-old-computer-useful-again -[22]: https://opensource.com/article/20/6/open-source-rtos diff --git a/translated/tech/20210907 How to use BusyBox on Linux.md b/translated/tech/20210907 How to use BusyBox on Linux.md new file mode 100644 index 0000000000..3d32336fdd --- /dev/null +++ b/translated/tech/20210907 How to use BusyBox on Linux.md @@ -0,0 +1,181 @@ +[#]: subject: "How to use BusyBox on Linux" +[#]: via: "https://opensource.com/article/21/8/what-busybox" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +如何在 Linux 上使用 BusyBox +====== + +> BusyBox 是一个开源(GPL)项目,提供了近 400 个常用命令的简单实现。 + +![绿色背景上的bash标志][1] + +我们很容易认为 Linux 的命令是理所当然的。当你安装 Linux 时,它们与系统捆绑在一起,而我们常常不问为什么它们会在那里。一些基本的命令,如 [cd][2]、[kill][3] 和 echo,并不总是独立的应用程序,而是实际上内置于你的 shell 中。其他如 [ls][4]、[mv][5] 和 [cat][6] 是核心工具包(通常是 GNU `coreutils`)的一部分。但在开源的世界里,总是有一些替代品,其中最有趣的是 [BusyBox][7]。 + +### Linux 中的 BusyBox 简介 + +BusyBox 是一个开源(GPL)项目,提供近 400 个常用命令的简单实现,包括 `ls`、`mv`、`ln`、`mkdir`、`more`、`ps`、`gzip`、`bzip2`、`tar` 和 `grep`。它还包含了编程语言 `awk`、流编辑器 `sed`、文件系统检查工具 `fsck`、`rpm` 和 `dpkg` 软件包管理器,当然还有一个可以方便的访问所有这些命令的 shell(`sh`)。简而言之,它包含了所有 POSIX 系统需要的基本命令,以执行常见的系统维护任务以及许多用户和管理任务。 + +事实上,它甚至包含一个 `init` 命令,可以作为 PID 1 启动,以作为所有其它系统服务的父进程。换句话说,BusyBox 可以作为 [systemd][8]、OpenRC、sinit、init 和其他初始化系统的替代品。 + +BusyBox 非常小。作为一个可执行文件,它不到 1MB,所以它在 [嵌入式][9]、[边缘计算][10] 和 [物联网][11] 领域很受欢迎,因为这些场景的存储空间是很宝贵的。在容器和云计算的世界里,它作为精简的 Linux 容器镜像的基础镜像也很受欢迎。 + +### 极简主义 + +BusyBox 的部分魅力在于它的极简主义。它的所有命令都被编译到一个二进制文件里(`busybox'),它的手册只有 81 页(根据我对 `man` 送到 `pr` 管道的计算),但它涵盖了近 400 条命令。 + +作为一个例子的比较,这是 “原版” 的 `useradd —help` 的输出: + +``` + -b, --base-dir BASE_DIR       base directory for home + -c, --comment COMMENT         GECOS field of the new account + -d, --home-dir HOME_DIR       home directory of the new account + -D, --defaults                print or change the default config + -e, --expiredate EXPIRE_DATE  expiration date of the new account + -f, --inactive INACTIVE       password inactivity + -g, --gid GROUP               name or ID of the primary group + -G, --groups GROUPS           list of supplementary groups + -h, --help                    display this help message and exit + -k, --skel SKEL_DIR           alternative skeleton dir + -K, --key KEY=VALUE           override /etc/login.defs + -l, --no-log-init             do not add the user to the lastlog + -m, --create-home             create the user's home directory + -M, --no-create-home          do not create the user's home directory + -N, --no-user-group           do not create a group with the user's name + -o, --non-unique              allow users with non-unique UIDs + -p, --password PASSWORD       encrypted password of the new account + -r, --system                  create a system account + -R, --root CHROOT_DIR         directory to chroot into + -s, --shell SHELL             login shell of the new account + -u, --uid UID                 user ID of the new account + -U, --user-group              create a group with the same name as a user +``` + +而这是是同一命令的 BusyBox 版本: + +``` + -h DIR    Home directory + -g GECOS  GECOS field + -s SHELL  Login shell + -G GRP    Group + -S            Create a system user + -D            Don't assign a password + -H            Don't create home directory + -u UID    User id + -k SKEL   Skeleton directory (/etc/skel) +``` + +这种差异是一种特性还是一种限制,取决于你是喜欢你的命令拥有 20 个选项还是 10 个选项。对于一些用户和某些用例来说,BusyBox 的极简主义刚刚满足所需。对于其他人来说,它是一个很好的最小化环境,可以作为一个后备工具,或者作为安装更强大的工具的基础,比如 [Bash][12]、[Zsh][13]、GNU [Awk][14] 等等。 + +### 安装 BusyBox + +在 Linux 上,你可以使用你的软件包管理器安装 BusyBox。例如,在 Fedora 及类似发行版: + +``` +$ sudo dnf install busybox +``` + +在 Debian 及其衍生版: + +``` +$ sudo apt install busybox +``` + +在 MacOS 上,可以使用 [MacPorts][15] 或 [Homebrew][16]。在 Windows 上,可以使用 [Chocolatey][17]。 + +你可以将 BusyBox 设置为你的 shell,使用 `chsh —shell` 命令,然后再加上 BusyBox `sh` 应用程序的路径。我把 BusyBox 放在 `/lib64` 中,但它的位置取决于你的发行版的安装位置。 + +``` +$ which busybox +/lib64/busybox/busybox +$ chsh --shell /lib64/busybox/sh +``` + +用 BusyBox 全盘替换所有常见的命令要复杂一些,因为大多数发行版都是“硬接线”,会在特定的软件包寻找特定的命令。换句话说,虽然技术上可以用 BusyBox 的 `init` 替换系统的 `init`,但你的软件包管理器可能会拒绝让你删除包含 `init` 的软件包,以免你担心删除会导致系统无法启动。有一些发行版是建立在 BusyBox 之上的,所以从新环境开始可能是体验 BusyBox 系统的最简单方法。 + +### 试试 BusyBox + +你不必为了尝试 BusyBox 而将你的 shell 永久改为 BusyBox。你可以从你当前的 shell 中启动一个 BusyBox shell。 + +``` +$ busybox sh +~ $ +``` + +不过你的系统仍然有安装的非 BusyBox 版本的命令,所以要体验 BusyBox 的工具,你必须把命令作为参数发给 `busybox` 可执行文件: + +``` +~ $ busybox echo $0 +sh +~ $ busybox ls --help +BusyBox vX.YY.Z (2021-08-25 07:31:48 NZST) multi-call binary. + +Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]... + +List directory contents + + -1  One column output + -a  Include entries that start with . + -A  Like -a, but exclude . and .. + -x  List by lines +[...] +``` + +为了获得“完整”的 BusyBox 体验,你可以为每个命令创建一个 `busybox` 的符号链接。这很容易,只要你使用 [for 循环][18] 就行: + +``` +$ mkdir bbx +$ for i in $(bbx --list); do \ + ln -s /path/to/busybox bbx/$i \ +done +``` + +在你的 [路径][19] 的 _开头_ 添加这个符号链接目录,并启动 BusyBox: + +``` +$ PATH=$(pwd)/bbx:$PATH bbx/sh +``` + +### 用起来 + +BusyBox 是一个有趣的项目,也是一个可以实现 _极简_ 计算的例子。无论你是把 BusyBox 作为 [你唤醒的][21] [古老的计算机][20] 的轻量级环境,还是作为 [嵌入式设备][22] 的用户界面,抑或试用一个新的初始化系统,就算是为了好奇,让自己重新认识那些熟悉而又陌生的命令,都会很有意思。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/8/what-busybox + +作者:[Seth Kenlon][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/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bash_command_line.png?itok=k4z94W2U (bash logo on green background) +[2]: https://opensource.com/article/21/8/navigate-linux-directories +[3]: https://opensource.com/article/18/5/how-kill-process-stop-program-linux +[4]: https://opensource.com/article/19/7/master-ls-command +[5]: https://opensource.com/article/19/8/moving-files-linux-depth +[6]: https://opensource.com/article/19/2/getting-started-cat-command +[7]: https://www.busybox.net +[8]: https://opensource.com/article/20/4/systemd +[9]: https://opensource.com/article/21/3/rtos-embedded-development +[10]: https://opensource.com/article/17/9/what-edge-computing +[11]: https://opensource.com/article/21/3/iot-measure-raspberry-pi +[12]: https://opensource.com/article/20/4/bash-sysadmins-ebook +[13]: https://opensource.com/article/19/9/getting-started-zsh +[14]: https://opensource.com/article/20/9/awk-ebook +[15]: https://opensource.com/article/20/11/macports +[16]: https://opensource.com/article/20/6/homebrew-mac +[17]: https://opensource.com/article/20/3/chocolatey +[18]: https://opensource.com/article/19/10/programming-bash-loops +[19]: https://opensource.com/article/17/6/set-path-linux +[20]: https://opensource.com/article/20/2/restore-old-computer-linux +[21]: https://opensource.com/article/19/7/how-make-old-computer-useful-again +[22]: https://opensource.com/article/20/6/open-source-rtos From c4b67e0c2587a37765dbf1c39c4da3d066d4c1c4 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 1 Oct 2021 18:53:24 +0800 Subject: [PATCH 041/143] PUB @wxy https://linux.cn/article-13840-1.html --- .../20210907 How to use BusyBox on Linux.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename {translated/tech => published}/20210907 How to use BusyBox on Linux.md (98%) diff --git a/translated/tech/20210907 How to use BusyBox on Linux.md b/published/20210907 How to use BusyBox on Linux.md similarity index 98% rename from translated/tech/20210907 How to use BusyBox on Linux.md rename to published/20210907 How to use BusyBox on Linux.md index 3d32336fdd..66a536bca9 100644 --- a/translated/tech/20210907 How to use BusyBox on Linux.md +++ b/published/20210907 How to use BusyBox on Linux.md @@ -4,15 +4,15 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13840-1.html" 如何在 Linux 上使用 BusyBox ====== > BusyBox 是一个开源(GPL)项目,提供了近 400 个常用命令的简单实现。 -![绿色背景上的bash标志][1] +![](https://img.linux.net.cn/data/attachment/album/202110/01/185208x6ckkmvi0silk3vk.jpg) 我们很容易认为 Linux 的命令是理所当然的。当你安装 Linux 时,它们与系统捆绑在一起,而我们常常不问为什么它们会在那里。一些基本的命令,如 [cd][2]、[kill][3] 和 echo,并不总是独立的应用程序,而是实际上内置于你的 shell 中。其他如 [ls][4]、[mv][5] 和 [cat][6] 是核心工具包(通常是 GNU `coreutils`)的一部分。但在开源的世界里,总是有一些替代品,其中最有趣的是 [BusyBox][7]。 From 60fe8262ce3fa1f4dfca84cb5864d90285f8a32a Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 1 Oct 2021 18:58:17 +0800 Subject: [PATCH 042/143] PRF --- published/20210907 How to use BusyBox on Linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/published/20210907 How to use BusyBox on Linux.md b/published/20210907 How to use BusyBox on Linux.md index 66a536bca9..3b2744163a 100644 --- a/published/20210907 How to use BusyBox on Linux.md +++ b/published/20210907 How to use BusyBox on Linux.md @@ -26,7 +26,7 @@ BusyBox 非常小。作为一个可执行文件,它不到 1MB,所以它在 [ ### 极简主义 -BusyBox 的部分魅力在于它的极简主义。它的所有命令都被编译到一个二进制文件里(`busybox'),它的手册只有 81 页(根据我对 `man` 送到 `pr` 管道的计算),但它涵盖了近 400 条命令。 +BusyBox 的部分魅力在于它的极简主义。它的所有命令都被编译到一个二进制文件里(`busybox`),它的手册只有 81 页(根据我对 `man` 送到 `pr` 管道的计算),但它涵盖了近 400 条命令。 作为一个例子的比较,这是 “原版” 的 `useradd —help` 的输出: From aefccfd5c919479359c97e46d9fe833d1aecad75 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sat, 2 Oct 2021 05:02:47 +0800 Subject: [PATCH 043/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211001=20?= =?UTF-8?q?8=20reasons=20why=20I=20learned=20Core=20Java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211001 8 reasons why I learned Core Java.md --- ...11001 8 reasons why I learned Core Java.md | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 sources/tech/20211001 8 reasons why I learned Core Java.md diff --git a/sources/tech/20211001 8 reasons why I learned Core Java.md b/sources/tech/20211001 8 reasons why I learned Core Java.md new file mode 100644 index 0000000000..d42e020c30 --- /dev/null +++ b/sources/tech/20211001 8 reasons why I learned Core Java.md @@ -0,0 +1,99 @@ +[#]: subject: "8 reasons why I learned Core Java" +[#]: via: "https://opensource.com/article/21/10/why-i-learned-core-java" +[#]: author: "Shantam Sahai https://opensource.com/users/shantam-sahai" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +8 reasons why I learned Core Java +====== +Understanding Core Java gives you a significant advantage when learning +all of the related tools built on top of it. +![Learning and studying technology is the key to success][1] + +Computer programming, also known as *coding *for short, is not about which language you use. It's about developing programming logic and learning to think like a programmer. The language you start with should be the one that helps you the most in this endeavor. So you have to ask yourself the question: "What do you want to do as a programmer?" + +For example, if you want to work on Android app development, video game development, desktop GUI applications, or just general software development, I think learning Java is an excellent option. It's the language I chose, and it has made a whole world of programming available to me. In India, where I live, the average salary of a Java programmer is around 5.9 Lakhs per Annum (LPA) (it can be as high as 10 LPA, depending on your experience.) + +Java is a vast language, though, with lots of frameworks and variants to choose from. _Core Java_ is the term the tech industry has developed to refer to the central components of the Java language—the thing that people use to write the frameworks and has developed the cottage industry around Java. I believe that Core Java is one of the most powerful skills you can acquire because understanding the basics of Java gives you a significant advantage when learning all of the related tools built on top of it. + +Here are the top eight reasons I chose Core Java, and I think you should too: + +### 1\. Java is an evolving programming language + +Java has significant corporate backing, but the most important component in Java development is [OpenJDK][2]—the open source Java Development Kit. With a mission statement to promote and maintain open source, open innovation, and open standards, the OpenJDK community is committed to improving and maintaining an open source implementation of Java and its toolchain. + +Innovations and conveniences get added with every release, making Java easier for developers and users alike. For instance, it was just in Java 11 that they added the ability to run .java files. Now, all it takes to run a single-file Java application is the `java` command, no compilation required: + + +``` +$ java ./hello.java + +Hello world +``` + +You can use Java to program applications for the web, mobile, or desktop. It's a highly versatile language. It has many interesting features such as dynamic coding, multiple security features, platform-independent characteristics, and network-centric design. + +### 2\. Java anchors android app development + +You can use Java to create Android apps. The Android market is enormous, and the demand for mobile programmers is only growing. Even if you're not interested in becoming a professional app developer, the ability to customize your mobile experience is a powerful one, and Java makes it possible. + +And it's easier than you might think! Learning Core Java makes it easy for you to pick up Android development kits or frameworks that export to mobile platforms, like [Processing][3]. + +### 3\. Rich APIs make Java easy to use + +Java's API (Application Programming Interface) includes classes, packages, interfaces, and more. Java has mainly three types of APIs:  + + * Official Java Core APIs + * Optimal official Java APIs + * Unofficial APIs + + + +An API makes programming easier because you can construct applications without knowing their inside implementations. In my experience, many companies prefer Java over other options because of the strength of the Java API. + +### 4\. Open source libraries + +There are nearly endless open source libraries for Java, including Maven, Guava, Apache Commons, Jhipster, and much more. You can copy, study, and share resources from these libraries. They make programming more accessible, faster, cheaper, and more educational. + +### 5\. Java has reliable development tools + +Java has some of my favorite IDEs (Integrated Development Environments), including [Eclipse][4], [NetBeans][5], [BlueJ][6], and IntelliJ IDEA. They provide debugging, syntax highlighting, code completion, language support, automated refactoring, and more. In short, IDEs play an essential role in Java's success and in your success as you learn it! + +### 6\. Demand for Java developers in India + +Giants like Google, Netflix, and Instagram use Java for backend development. Indian companies are actively looking to hire Java programmers to develop Android apps, new APIs, and microservices on the cloud. This demand translates to more job opportunities. + +### 7\. The Java programming community is huge + +The community of Java programmers is vast. It ranges from groups of beginners to experts. I have found the community to be welcoming and helpful when you ask for support. Most importantly, I've learned tons of new tricks by involving myself in online discussions. Being a part of the community has been a vital way for me to keep up with the latest trends, learn more about the language, and keep up with development. + +### 8\. Java is platform-independent + +The fact that Java is platform-independent makes it highly valuable. Java source code is compiled down to bitcode, which runs on the Java Virtual Machine (JVM). Any platform running a JVM (and all the major platforms do) can run your Java application. You write once and run everywhere! And this isn't just a theoretical position: Java has actually achieved this. You can write Java on whatever platform you develop on and deliver it to all your target platforms. + +There are many resources online to learn Java, including a [cheat sheet][7] here on Opensource.com. There's also a great [online Java course][8] available in Hindi for free. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/why-i-learned-core-java + +作者:[Shantam Sahai][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/shantam-sahai +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/studying-books-java-couch-education.png?itok=C9gasCXr (Learning and studying technology is the key to success) +[2]: https://developer.ibm.com/components/open-jdk/ +[3]: http://processing.org/ +[4]: https://opensource.com/article/20/12/eclipse +[5]: https://opensource.com/article/20/12/netbeans +[6]: https://opensource.com/article/20/7/ide-java#bluej +[7]: https://opensource.com/downloads/java-cheat-sheet +[8]: https://www.learnvern.com/course/core-java-programming-tutorial From 978f7180dde4bf10a0d2b7ea44537d7ea2934511 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sat, 2 Oct 2021 05:03:19 +0800 Subject: [PATCH 044/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020211001=20?= =?UTF-8?q?/e/=20cloud=20is=20a=20deGoogled=20Alternative=20to=20Google=20?= =?UTF-8?q?Drive?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md --- ...a deGoogled Alternative to Google Drive.md | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 sources/news/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md diff --git a/sources/news/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md b/sources/news/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md new file mode 100644 index 0000000000..5d83613107 --- /dev/null +++ b/sources/news/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: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +/e/ cloud is a deGoogled Alternative to Google Drive +====== + +Google Drive is a popular cloud storage service that works great for the most part. + +However, it may not be the most private option out there. So, to take total control of your data, the best way is to spin up a [Nextcloud][1] instance and store your essential data while getting access to other collaboration tools. + +While that sounds good to hear, not everyone can put the effort to create and maintain their instance. This is where ecloud comes in—built by the same team behind [**/e/ OS**, the de-googled Android operating system][2]. + +ecloud pitches itself primarily as a new private alternative to Google Drive and offers a mailbox to replace Gmail. + +### /e/ cloud: Nextcloud & OnlyOffice With Mailbox + +![][3] + +When you create an /e/ account, it gives you a private email address **[xyz@e.email][4]** + +And, along with the email address, you get **1 GB** free ecloud storage space and a collaboration platform powered by Nextcloud and OnlyOffice at its core. + +So, if you want to utilize Nextcloud and OnlyOffice to replace Google’s suite of tools without setting it up all yourself, /e/ cloud can be a compelling privacy-centric choice. + +![][5] + +In addition to the file storage and document support with OnlyOffice, you can also use a calendar, store notes, and add tasks. + +Hence, it can also be a decent privacy-focused collaboration platform that you can use for free. + +If you want more storage, you can upgrade your subscription to a paid plan where you opt for 20 to 1 TB of storage as required with monthly/yearly billing options. The pricing plans start as low as **$3/month**. + +Undoubtedly, it should be a seamless experience if you are using /e/ OS on your phone or a /e/ smartphone. + +But, you can also use it on any device using third-party mail clients and the Nextcloud mobile app. + +[Sign Up for /e/ cloud][6] + +### Wrapping Up + +Considering it is relatively new, several features are planned to be added that include end-to-end encryption, migration from Google Drive, and more. + +You can sign up for an account and try it out free. + +_What do you think about a mainstream solution like /e/ cloud that uses Nextcloud at its core to help you manage/store files securely in addition to email and collaboration services?_ + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/e-cloud/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4NCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[4]: mailto:xyz@e.email +[5]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM5MiIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[6]: https://e.foundation/e-email-invite/ From 52b0483a4c2780eb75b584815806b8da9fd27a11 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Sat, 2 Oct 2021 08:21:11 +0800 Subject: [PATCH 045/143] Rename sources/news/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md to sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md --- ...211001 -e- cloud is a deGoogled Alternative to Google Drive.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sources/{news => tech}/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md (100%) diff --git a/sources/news/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md b/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md similarity index 100% rename from sources/news/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md rename to sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md From 90fe9d83ac52b38fc69919e5c35189863eada15a Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 08:27:39 +0800 Subject: [PATCH 046/143] APL --- sources/tech/20210930 Make YAML as easy as it looks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210930 Make YAML as easy as it looks.md b/sources/tech/20210930 Make YAML as easy as it looks.md index 511963cc0f..dda8b4d1a5 100644 --- a/sources/tech/20210930 Make YAML as easy as it looks.md +++ b/sources/tech/20210930 Make YAML as easy as it looks.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/9/yaml-cheat-sheet" [#]: author: "Seth Kenlon https://opensource.com/users/seth" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 9c9a16f1b6ccf3156a1a73443e5c503de40f993d Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 10:00:29 +0800 Subject: [PATCH 047/143] TSL&PRF --- .../20210930 Make YAML as easy as it looks.md | 160 ------------------ .../20210930 Make YAML as easy as it looks.md | 154 +++++++++++++++++ 2 files changed, 154 insertions(+), 160 deletions(-) delete mode 100644 sources/tech/20210930 Make YAML as easy as it looks.md create mode 100644 translated/tech/20210930 Make YAML as easy as it looks.md diff --git a/sources/tech/20210930 Make YAML as easy as it looks.md b/sources/tech/20210930 Make YAML as easy as it looks.md deleted file mode 100644 index dda8b4d1a5..0000000000 --- a/sources/tech/20210930 Make YAML as easy as it looks.md +++ /dev/null @@ -1,160 +0,0 @@ -[#]: subject: "Make YAML as easy as it looks" -[#]: via: "https://opensource.com/article/21/9/yaml-cheat-sheet" -[#]: author: "Seth Kenlon https://opensource.com/users/seth" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Make YAML as easy as it looks -====== -YAML looks simple so why is it so hard to write? Learn the two secrets -to YAML success. -![Person using a laptop][1] - -If you've ever tried writing YAML, you may have been initially pleased with how apparently easy it looks. At first glance, the YAML that's often used for configuration files, Ansible playbooks, and flat-file databases looks more or less as intuitive as a shopping list. However, there's a lot of nuance in YAML's structure, and it conceals a dangerous secret: YAML is actually a highly precise, structured, and surprisingly strict language. The good news is that you only need to understand two things to know how YAML works. - -The truth about YAML is that there are only two data structures in YAML: sequences and mappings. Those are two fancy names to represent what you'll discover are very familiar concepts. This article explains them both, and more importantly, how they work together to make YAML a powerful way to represent the data you care about. - -### What's a YAML sequence? - -A YAML sequence is a list. In its simplest form, there's one item per line, with each line beginning in a dash and a space. - -Here's an example: - - -``` -\--- -\- Linux -\- BSD -\- Illumos -``` - -Different languages have different ways of representing this kind of data. In Python, for example, the same list can be written as `['Linux', 'BSD', 'Illumos']`. When you write a list in real life, for instance before you go shopping for groceries, you probably approximate a YAML sequence. - -### What's a YAML mapping? - -A YAML mapping is a key term combined with a definition for that term. A mapping in other languages is called a _key and value pair_ or a _dictionary_. - -Here's an example: - - -``` -\--- -Kernel: Linux -CPU: AMD -RAM: '16 GB' -``` - -Different languages have different ways of representing this kind of data. [In Python][2], for example, the same data can be written as `{"Kernel": "Linux", "CPU": "AMD", "RAM": "16 GB"}`. In real life, you might use this kind of structure to plan, for instance, a game night with friends. One friend signs up to bring snacks, another signs up to bring a deck of cards, another a board game, and so on. - -### Combing sequences and mappings - -You now know the syntax of YAML. Sequences and mappings are the only two kinds of building blocks available in YAML, and anything you want to represent in YAML can be placed into either a sequence or a mapping. - -Or both! - -Yes, sequences and mappings can be combined and nested, which is one reason YAML often looks intuitive and yet feels complex all at once. There are only four possible combinations, though, and once you learn to see them, YAML starts to feel as easy as it looks. - -### Mapping sequences - -When you want one key term to have many values, you use a mapping of sequences. That is, you start with a mapping (keys), but you insert a list for the values: - - -``` -\--- -Linux: - - Fedora -  - Slackware -BSD: - - FreeBSD -  - NetBSD -``` - -In this sample code, **Linux** is the first key, and its value is a sequence, which contains **Fedora** and **Slackware**. The second key is **BSD**, which has a value of a sequence containing **FreeBSD** and **NetBSD**. - -### Mapping of mappings - -When you want one key term to have values that themselves have both keys and values, you use a mapping of mappings. That is, you start with a mapping (keys), but you insert another mapping for the values. - -This one can be deceptive, but it reveals why special terminology is used in YAML: just because you create a list of mappings doesn't mean you've created a _sequence_. Here's a mapping of mappings: - - -``` -\--- -Desktop: -  CPU: RISC-V -  RAM: '32 GB' -Laptop: -  CPU: AMD -  RAM: '16 GB' -``` - -To most people, that looks like a list. And technically, it is a list. But it's important to recognize that it is _not_ a YAML sequence. It's a mapping, which contains mappings. Being a near-expert in YAML, you can spot the difference from the distinct lack of dashes. - -Of all the constructs in Ansible playbooks, I find that this one tricks people the most. As humans, we like lists, and when we see a data structure that _is literally_ a list, most people are compelled to translate that into a YAML sequence. But in YAML, although a sequence is a list, a list is not always a sequence. - -### Sequence of sequences - -Just as you can nest mappings, you can nest a sequence into a sequence: - - -``` -\--- -\- [Linux, FreeBSD, Illumos] -\- [YAML, XML, JSON] -``` - -This is probably the least common data structure I encounter in real-world uses of YAML, but sometimes you need a list of lists. - -### Sequence of mappings - -You can also create a sequence that contains mappings. This isn't terribly common for the way humans sort data, but for computers it can be an important construct. - -Here's an example: - - -``` -\--- -- -  CPU: AMD -  RAM: '16 GB' -- -  CPU: Intel -  RAM: '16 GB' -``` - -As YAML, this is possibly the least intuitive syntax. I find it clearer when rendered in Python: - - -``` -`[{"CPU": "AMD", "RAM": "16 GB"}, {"CPU": "Intel", "RAM": "16 GB"}]` -``` - -The square brackets represent a list structure, and the list contains two dictionaries. Each dictionary contains key and value pairs. - -### Build better YAML - -Now you know the two components of YAML, and how they can be combined to represent complex  data structures. The question is: what will you build with YAML? - -I use YAML, as many people do, for Ansible playbooks. I've also used it as an easy configuration format, as a character sheet for D&D, as a representation of a directory structure required for project organization, and much more. As long as you get comfortable with the concepts of sequences and mappings, you might find YAML an easy format to write, read, and (provided the right library) to parse. - -If you're finding yourself working with YAML often, download our **[YAML cheat sheet][3]** to help you visualize the basic data structures and their combinations and to help you remember some of the extra syntactical conventions available to you. With a little bit of practice, you'll find YAML really is as easy as it looks! - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/9/yaml-cheat-sheet - -作者:[Seth Kenlon][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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/laptop_screen_desk_work_chat_text.png?itok=UXqIDRDD (Person using a laptop) -[2]: https://opensource.com/article/21/3/dictionary-values-python -[3]: https://opensource.com/downloads/yaml-cheat-sheet diff --git a/translated/tech/20210930 Make YAML as easy as it looks.md b/translated/tech/20210930 Make YAML as easy as it looks.md new file mode 100644 index 0000000000..2025fb1b7c --- /dev/null +++ b/translated/tech/20210930 Make YAML as easy as it looks.md @@ -0,0 +1,154 @@ +[#]: subject: "Make YAML as easy as it looks" +[#]: via: "https://opensource.com/article/21/9/yaml-cheat-sheet" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +让 YAML 变得像它看起来一样简单 +====== + +> YAML 看起来很简单,为什么它这么难写呢?了解成功使用 YAML 的两个秘诀。 + +![使用笔记本电脑的人][1] + +如果你曾经尝试过写 YAML,你可能一开始会对它看起来很容易感到高兴。乍一看,经常用于配置文件、Ansible 剧本和普通文件数据库的 YAML 看起来就像购物清单一样直观。然而,YAML 的结构中有很多细微的差别,它隐藏着一个危险的秘密:YAML 实际上是一种高度精确、结构化和令人惊讶的严格语言。好消息是,你只需要了解两件事就可以知道 YAML 的工作原理。 + +关于 YAML 的真相是,YAML 中只有两种数据结构:序列sequence映射mapping。这是两个花哨的名字,你会发现它代表了你非常熟悉的概念。这篇文章解释了这两种结构,更重要的是,介绍了它们是如何协同工作,使 YAML 成为表示你所关心的数据的强大方式。 + +### YAML 序列 + +YAML 序列是一个列表。在其最简单的形式中,每行有一个项目,每行以破折号和空格开始。 + +下面是一个例子: + +``` +--- +- Linux +- BSD +- Illumos +``` + +不同的语言有不同的方式来表示这种数据。例如,在 Python 中,同一个列表可以写成 `['Linux', 'BSD', 'Illumos']`。当你在现实生活中写一个列表时,例如在你去买菜之前,你写的可能近似于 YAML 序列。 + +### YAML 映射 + +YAML 映射是一个关键术语与该术语的定义相结合。在其他语言中,映射被称为“键值对”或“词典”。 + +这里有一个例子: + +``` +--- +Kernel: Linux +CPU: AMD +RAM: '16 GB' +``` + +不同的语言有不同的方式来表示这种数据。[在 Python 中][2],例如,同样的数据可以写成 `{"Kernel": "Linux", "CPU": "AMD", "RAM": "16 GB"}`。在现实生活中,你可能会使用这种结构来计划,例如,与朋友的游戏之夜。一个朋友报名带零食,另一个报名带一副牌,另一个报名带一个棋盘游戏,等等。 + +### 组合序列和映射 + +你现在知道 YAML 的语法了。序列和映射是 YAML 中仅有的两种构件,你想在 YAML 中表示的任何东西都可以放在序列或映射中。 + +或者同时使用这二者! + +是的,序列和映射可以被组合和嵌套,这就是 YAML 看起来很直观,但同时又感觉很复杂的原因之一。不过,只有四种可能的组合,一旦你学会如何看它们,YAML 就会觉得像它看起来一样简单。 + +### 序列的映射 + +当你想让一个键项有许多值时,你可以使用一个序列的映射。也就是说,你从一个映射(键)开始,但是给值一个列表: + +``` +--- +Linux: +  - Fedora +  - Slackware +BSD: +  - FreeBSD +  - NetBSD +``` + +在这个示例代码中,`Linux` 是第一个键,它的值是一个序列,其中包含 `Fedora` 和 `Slackware`。第二个键是 `BSD`,它的值是一个序列,包含 `FreeBSD` 和 `NetBSD`。 + +### 映射的映射 + +当你想让一个键项的值中既有键又有值时,你可以使用映射的映射。也就是说,你从一个映射(键)开始,但是给值另一个映射。 + +这可能有点欺骗性,但它揭示了 YAML 中使用特定术语的原因:因为你只不过是创建了一个映射的列表,并不意味着你创建了一个序列。这里是一个映射的映射: + +``` +--- +Desktop: +  CPU: RISC-V +  RAM: '32 GB' +Laptop: +  CPU: AMD +  RAM: '16 GB' +``` + +对大多数人来说,这看起来像一个列表。而且从技术上讲,它是一个列表。但重要的是要认识到,它不是 YAML 序列。它是一个映射,其中包含映射。作为半个 YAML 专家,你可以从明显缺少破折号的地方看出区别。 + +在 Ansible 剧本的所有结构中,我发现这个结构最容易欺骗人。作为人类,我们喜欢列表,当我们看到一个数据结构 _在字面上_ 是列表时,大多数人会把它当成 YAML 序列。但是在 YAML 中,虽然序列是列表,但是列表并不总是序列。 + +### 序列的序列 + +就像你可以嵌套映射一样,你可以将一个序列嵌套到一个序列中: + +``` +--- +- [Linux, FreeBSD, Illumos] +- [YAML, XML, JSON] +``` + +这可能是我在 YAML 的实际使用中遇到的最不常见的数据结构,但有时你需要一个列表的列表。 + +### 映射的序列 + +你也可以创建一个包含映射的序列。对于人类排序数据的方式来说,这并不太常见,但对于计算机来说,这可能是一个重要的结构。 + +这里有一个例子: + +``` +--- +- +  CPU: AMD +  RAM: '16 GB' +- +  CPU: Intel +  RAM: '16 GB' +``` + +对于 YAML,这可能是最不直观的语法。我发现它在 Python 中呈现时更清晰: + +``` +[{"CPU": "AMD", "RAM": "16 GB"}, {"CPU": "Intel", "RAM": "16 GB"}] +``` + +方括号代表一个列表结构,这个列表包含两个字典。每个字典都包含键值对。 + +### 构建更好的 YAML + +现在你知道了 YAML 的两个组成部分,以及它们如何被组合起来以表示复杂的数据结构。问题是:你要用 YAML 构建什么? + +和很多人一样,我也使用 YAML 来编写 Ansible 剧本。我还用它作为一种简单的配置格式、作为 D&D 的角色表、表示项目组织所需的目录结构,等等。只要你能适应序列和映射的概念,你会发现 YAML 是一种很容易编写、阅读和(如果有合适的库)解析的格式。 + +如果你发现自己经常使用 YAML,请下载我们的 [YAML 速查表][3],以帮助你直观地了解基本数据结构及其组合,并帮助你记住一些额外的语法约定。通过一点点的练习,你会发现 YAML 真的和它看起来一样简单! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/yaml-cheat-sheet + +作者:[Seth Kenlon][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/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/laptop_screen_desk_work_chat_text.png?itok=UXqIDRDD (Person using a laptop) +[2]: https://opensource.com/article/21/3/dictionary-values-python +[3]: https://opensource.com/downloads/yaml-cheat-sheet From aab4d9a268d2713249baca1ad95798f96a25c80b Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 10:19:24 +0800 Subject: [PATCH 048/143] PUB @wxy https://linux.cn/article-13842-1.html --- .../20210930 Make YAML as easy as it looks.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename {translated/tech => published}/20210930 Make YAML as easy as it looks.md (97%) diff --git a/translated/tech/20210930 Make YAML as easy as it looks.md b/published/20210930 Make YAML as easy as it looks.md similarity index 97% rename from translated/tech/20210930 Make YAML as easy as it looks.md rename to published/20210930 Make YAML as easy as it looks.md index 2025fb1b7c..88330932b8 100644 --- a/translated/tech/20210930 Make YAML as easy as it looks.md +++ b/published/20210930 Make YAML as easy as it looks.md @@ -4,15 +4,15 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13842-1.html" 让 YAML 变得像它看起来一样简单 ====== > YAML 看起来很简单,为什么它这么难写呢?了解成功使用 YAML 的两个秘诀。 -![使用笔记本电脑的人][1] +![](https://img.linux.net.cn/data/attachment/album/202110/02/101824shamurmpvldpu29a.jpg) 如果你曾经尝试过写 YAML,你可能一开始会对它看起来很容易感到高兴。乍一看,经常用于配置文件、Ansible 剧本和普通文件数据库的 YAML 看起来就像购物清单一样直观。然而,YAML 的结构中有很多细微的差别,它隐藏着一个危险的秘密:YAML 实际上是一种高度精确、结构化和令人惊讶的严格语言。好消息是,你只需要了解两件事就可以知道 YAML 的工作原理。 From 163196cb1d78757e99425fd15d2a720fbabc9bbe Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 10:30:25 +0800 Subject: [PATCH 049/143] APL --- sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md b/sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md index c4b80e2b99..cecb9a1fda 100644 --- a/sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md +++ b/sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md @@ -2,7 +2,7 @@ [#]: via: (https://fedoramagazine.org/run-github-actions-on-fedora-coreos/) [#]: author: (Clément Verna https://fedoramagazine.org/author/cverna/) [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (wxy) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From 21406713afd59db5c4413a51d4dfb008106996f4 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 10:49:53 +0800 Subject: [PATCH 050/143] TSL --- ...721 Run GitHub Actions on Fedora CoreOS.md | 52 +++++++++---------- 1 file changed, 24 insertions(+), 28 deletions(-) rename {sources => translated}/tech/20210721 Run GitHub Actions on Fedora CoreOS.md (58%) diff --git a/sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md b/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md similarity index 58% rename from sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md rename to translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md index cecb9a1fda..9badd6a20e 100644 --- a/sources/tech/20210721 Run GitHub Actions on Fedora CoreOS.md +++ b/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md @@ -7,26 +7,24 @@ [#]: publisher: ( ) [#]: url: ( ) -Run GitHub Actions on Fedora CoreOS +在 Fedora CoreOS 上运行 GitHub Actions ====== ![][1] -[United Artists][2], Public domain, via Wikimedia Commons +[GitHub Actions][3] 是一项为快速建立持续集成和交付(CI/CD)工作流程而提供的服务。这些工作流程在被称为“运行器runner”的主机上运行。GitHub 提供的 [托管运行器][4] 的操作系统的选择是有限的(Windows Server、Ubuntu、MacOS)。 -[GitHub Actions][3] is a service provided to quickly setup continuous integration and delivery (CI/CD) workflows . These workflows run on hosts called _runners_. GitHub provides [hosted runners][4] with a limited set of operating system choice (Windows Server, Ubuntu, MacOS). +另一个选择是使用 [自我托管][5] 运行器,这让仓库管理员对运行器有更多控制。自我托管的运行程序是专门为某个版本库或组织服务的。下面的文章介绍了使用 Fedora CoreOS 配置自我托管运行程序的步骤。 -Another option is to use [self-hosted][5] runners which gives the repository administrator more control on the runners. Self-hosted runners are dedicated to a repository or organization. The following article goes through the steps of configuring self-hosted runners using Fedora CoreOS. +### 入门 -### Getting Started +Fedora CoreOS 是一个精简的操作系统,旨在便于大规模的部署和维护。该操作系统会自动更新,并默认提供运行容器所需的工具。由于这些原因,Fedora CoreOS 是运行 CI/CD 工作流程的一个极佳选择。 -Fedora CoreOS is a minimalist operating system designed to be easy to deploy and maintain at scale. The operating system will automaticaly update and provide, by default, the tools needed to run containers. For all of these reasons, Fedora CoreOS is a great choice to consider for running CI/CD workflows. +配置和配备 Fedora CoreOS 机器的第一步是生成一个 [Ignition][6] 文件。[Butane][7] 允许你使用更友好的格式(YAML)生成 Ignition 文件。 -The first step to configure and provision a Fedora CoreOS machine is to generate an [Ignition][6] file. [Butane][7] allows you to generate Ignition’s file using a friendlier format (YAML). +#### 配置一个 Fedora CoreOS 运行器 -#### Configure a Fedora CoreOS runner - -To execute GitHub actions on Fedora CoreOS, the host needs the binaries and scripts used to register and run the runner. Download the binaries and scripts from the [actions runner project][8] and deploy under _/usr/local/sbin/actions-runner_. +要在 Fedora CoreOS 上执行 GitHub Actions,托管主机需要用于注册和运行该运行器的二进制文件和脚本。从 [Actions 运行器项目][8] 下载二进制文件和脚本,并部署在 `/usr/local/sbin/actions-runner` 下。 ``` version: "1.3.0" @@ -51,13 +49,13 @@ storage: name: core ``` -#### Registration and Removal token +#### 注册和删除令牌 -Configuring runners for a project requires a “token”. This prevents registering or removing self-hosted runners from projects without the correct permissions. Tokens provided by Github have a one hour expiration time. If the runner restarts after this time it will require a new registration token. +为一个项目配置运行程序需要一个“令牌token”。这可以防止在没有正确权限的情况下从项目中注册或删除自我托管的运行器。GitHub 提供的令牌有一个小时的过期时间。如果运行器在这个时间之后重新启动,它将需要一个新的注册令牌。 -The token can be problematic, in particular with Fedora CoreOS automatic updates. The update process expects that the host will restart at least once every couple weeks after receiving new data. +该令牌可能有问题,特别是在 Fedora CoreOS 自动更新时。更新过程希望托管主机在收到新数据后至少每隔几周重启一次。 -Luckily, it is possible to use GitHub REST API to obtain these tokens and automatically configure the runner every time the host restarts. The following _manage-runner.sh_ script uses the APIs to retrieve a token, remove any runner already configured and register the runner with a new token. +幸运的是,可以使用 GitHub REST API 来获取这些令牌,并在主机每次重启时自动配置运行器。下面的 `manage-runner.sh` 脚本使用 API 来获取令牌,删除任何已经配置好的运行器,并用新的令牌注册运行器。 ``` #!/bin/bash @@ -75,7 +73,7 @@ REGISTRATION_TOKEN=$(curl -u ${GITHUB_USER}:${GITHUB_TOKEN} -X POST -H "Accept: /usr/local/sbin/actions-runner/config.sh --url https://github.com/cverna/fcos-actions-runner --token ${REGISTRATION_TOKEN} --labels fcos --unattended ``` -The script above uses a few environment variables that contain a GitHub username and a [Personal Access Token][9] used to authenticate the REST API requests. The Personal Access Token requires the repo permissions in order to successfully retrieve the runner registration and removal tokens. The token is security sensitive so it is better to store it in a different file with stricter permissions. In this example that file is _actions-runner_. +上面的脚本使用了一些环境变量,包含 GitHub 用户名和用于验证 REST API 请求的 [个人访问令牌][9]Personal Access Token。个人访问令牌需要存储库权限,以便成功检索运行者注册和移除令牌。该令牌是安全敏感的,所以最好将其存储在一个具有更严格权限的不同文件中。在这个例子中,这个文件是 `actions-runner`。 ``` GITHUB_USER= @@ -83,7 +81,7 @@ GITHUB_REPO= GITHUB_TOKEN= ``` -Following is the Butane snippet that creates these two files – _manage-runner.sh_ and _actions-runner_. +以下是创建这两个文件 `manage-runner.sh` 和 `actions-runner` 的 Butane 片段。 ``` - path: /usr/local/sbin/actions-runner/manage-runner.sh @@ -104,9 +102,9 @@ Following is the Butane snippet that creates these two files – _manage-runner. name: core ``` -### Running Actions on Fedora CoreOS +### 在 Fedora CoreOS 上运行 Actions -Finally, create the systemd services that will configure and start the runner. Define the services in the Butane configuration file. +最后,创建用于配置和启动运行器的 systemd 服务。在 Butane 配置文件中定义这些服务。 ``` systemd: @@ -142,21 +140,19 @@ systemd: WantedBy=multi-user.target ``` -This creates two services, _github-runner-configure.service_ (running once when the host has finished booting) and _github-runner.service_ (running the Actions runner binaries and waiting for new CI/CD jobs). +这将创建两个服务:`github-runner-configure.service`(在主机启动完成后运行一次)和 `github-runner.service`(运行 Actions 运行器二进制文件并等待新的 CI/CD 作业)。 -Now that the Butane configuration is complete, generate an Ignition file out of it and provision a Fedora CoreOS Actions runner. +现在 Butane 配置已经完成,从中生成一个 Ignition 文件并配备一个Fedora CoreOS Actions 运行器。 ``` $ podman run -i --rm -v $PWD:/code:z --workdir /code quay.io/coreos/butane:release --pretty --strict --files-dir /code config.yaml -o config.ignition ``` -Once the Ignition file is generated, it can be used to provision a runner on the platforms where Fedora CoreOS is [available][10]. +一旦 Ignition 文件生成,它就可以用来在 [支持][10] Fedora CoreOS 的平台上配备一个运行器。 -> [Getting started with Fedora CoreOS][11] +### 配置一个 Action 来使用一个自我托管的运行器 -### Configure an Action to use a self-hosted runner - -The following test Action workflow will test the FCOS self-hosted worker. Create the following file in your git repository _.github/workflows/main.yml_ +下面的测试 Action 工作流程将测试 FCOS 的自我托管的工作者。在你的 git 存储库中创建以下文件 `.github/workflows/main.yml`。 ``` # This is a basic workflow to help you get started with Actions @@ -188,9 +184,9 @@ jobs: run: podman run --rm fedora-minimal:34 echo Hello World ! ``` -Note that the _runs-on_ configuration is set up to use a runner with the label _fcos_. +请注意,`runs-on` 的配置被设置为使用标签为 `fcos` 的运行器。 -The code presented in this article is available [here][12]. +本文介绍的代码可以在 [这里][12] 中找到。 -------------------------------------------------------------------------------- @@ -198,7 +194,7 @@ via: https://fedoramagazine.org/run-github-actions-on-fedora-coreos/ 作者:[Clément Verna][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[wxy](https://github.com/wxy) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 69b9f405a9cafddf06823146be45253291e1bd7a Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 12:08:29 +0800 Subject: [PATCH 051/143] APL --- ...10702 Creating a PKGBUILD to Make Packages for Arch Linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md b/sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md index c3078135ca..d54af819ff 100644 --- a/sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md +++ b/sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md @@ -2,7 +2,7 @@ [#]: via: (https://itsfoss.com/create-pkgbuild/) [#]: author: (Hunter Wittenborn https://itsfoss.com/author/hunter/) [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (wxy) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From c62d8c9363538061639eb572402db85d81135bd1 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 13:00:57 +0800 Subject: [PATCH 052/143] TSL&PRF --- ...KGBUILD to Make Packages for Arch Linux.md | 271 ------------------ ...KGBUILD to Make Packages for Arch Linux.md | 261 +++++++++++++++++ 2 files changed, 261 insertions(+), 271 deletions(-) delete mode 100644 sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md create mode 100644 translated/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md diff --git a/sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md b/sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md deleted file mode 100644 index d54af819ff..0000000000 --- a/sources/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md +++ /dev/null @@ -1,271 +0,0 @@ -[#]: subject: (Creating a PKGBUILD to Make Packages for Arch Linux) -[#]: via: (https://itsfoss.com/create-pkgbuild/) -[#]: author: (Hunter Wittenborn https://itsfoss.com/author/hunter/) -[#]: collector: (lujun9972) -[#]: translator: (wxy) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) - -Creating a PKGBUILD to Make Packages for Arch Linux -====== - -PKGBUILD files are how packages are built and created for Arch Linux and its derivatives such as Manjaro. - -You may have even come across them a bit yourself if you’ve ever used the [AUR][1], Arch Linux’s user-curated repository of PKGBUILDs. - -But how exactly do you go from a PKGBUILD to an installable package? What exactly is going on between the two, and how can you make them for your own packages? You’ll learn them in this article. - -### PKGBUILD basics - -For those who are familiar with Bash or other shells, you’ll be delighted to know, if you didn’t already, that a PKGBUILD is pretty much just a shell script with some variables. - -PKGBUILD files consist of variables and functions, all of which are used to define the package itself, and how to build it. - -To create a package from a PKGBUILD, the makepkg command line utility is used. After obtaining a PKGBUILD, you simply run `makepkg` inside the directory containing the PKGBUILD, and voila, you have an installable package! - -![][2] - -In this tutorial, you’ll be going over the package I just made, which prints “Hello World!” when run: - -![][3] - -### Getting set up - -To follow along with this tutorial, you need to create a couple of files. - -First, you need to make a file called **PKGBUILD**. If it wasn’t already made clear, this will serve as the “recipe” for building your package. - -The other file you’ll need to make is a file called **hello-world.sh**. I’ll explain its purpose a bit later. - -You can create both of these files with a single command as well. - -``` -touch PKGBUILD hello-world.sh -``` - -You can check that the files were created with the ls command: - -![][4] - -And you’re ready to go! - -### Setting up your PKGBUILD file - -**Instead of having you copy paste the whole file, I’ll be going over entering every line with you, so you can better understand the purpose of everything that’s happening. If you don’t prefer to learn this way, I’d highly recommend the** [Arch Wiki article][5] _**on creating packages for Arch Linux.**_ - -_**This article also doesn’t go over every single option you can set in a PKGBUILD, but rather some commonly used ones so you can get going as quickly as possible.**_ - -With that out of the way, open up your text editor, and let’s get straight into it! - -#### pkgname - -First things first, the pkgname variable. This is what defines the name of your package when installing, and how [Arch Linux’s package manager pacman][6] keeps track of the package. - -The format of this variable (and some others) takes the form of variable=value, with the variable name on the left, the value of the variable on the right, separated by an equals sign. - -To set the package name, enter the following into the PKGBUILD: - -``` -pkgname="hello-world" -``` - - * To set a different package name, replace `hello-world` with the name of the package. - * This doesn’t set the command used to run the program. That’s handled a bit below in the `package()` section. - - - -#### pkgver - -As is stated in the variable name itself, this sets the version of your package (i.e. 1.0.0). This is useful when a user updates their system, as setting a higher version will result in the user being prompted for an upgrade. - -To set, enter the following into the PKGBUILD (after the previous line): - -``` -pkgver="1.0.0" -``` - -#### pkgrel - -This is related to the pkgver variable, and isn’t normally important to know about. Like the pkgver variable though, it will notify users for upgrades if it’s moved to a higher number. - -It serves for any changes that require the pkgver to remain the same, such as any changes to the PKGBUILD itself. This would be useful if you’ve created a PKGBUILD for a program you use (and want to keep the version the same as the package’s), and you need to fix a bug in the PKGBUILD itself. - -To set the variable, enter the following in the PKGBUILD: - -``` -pkgver="1" -``` - -This variable should **always** start at 1, and then move up one at a time. When the **pkgver** itself moves up, this can (and should) be reset to 1, as the pkgver itself will notify users that upgrades are available. - -#### pkgdesc - -This will set the description of the package, which is used to help better identify the package. - -To set it, just put the description inside of quotation marks: - -``` -pkgdesc="Hello world in your terminal!" -``` - -#### arch - -This variable sets the [architecture][7] the package is compatible with. It’s fine if you don’t understand what an architecture is, as it’s pretty much useless in most cases. - -Regardless, makepkg still needs it to be set so it knows the package is compatible with our system. - -This variable supports setting multiple values, so makepkg requires a different syntax as shown below. - -To set it, enter the following in the PKGBUILD: - -``` -arch=("x86_64") -``` - -If you were to set multiple values for this, you would separate each value with a space and quotation marks like so: **arch=(“x86_x64” “arm”)** - -#### depends - -This lists all of the packages that our package needs to function. Like **arch**, it can also contain multiple values, and thus must use the parenthesis syntax. - -Since our package won’t have any dependencies, we don’t have to enter this field in the PKGBUILD. If our package did have dependencies however, we’d just use the same syntax as **arch**. - -#### optdepends - -This lists packages that aren’t required to function, but that are needed for extra functionality. - -This follows the same syntax as **depends**. - -#### conflicts - -This tells pacman what packages would cause our package to act up or behave in a way we wouldn’t want. - -Any package listed here would be uninstalled before ours is installed. - -This follows the same syntax as **depends** as well. - -#### license - -This defines the [software license][8] that your program is licensed under. The [Arch Wiki][9] has some info if you need help choosing a license. Setting this to `custom` will work if you don’t know what to set this to. - -This takes the same syntax as **arch** and **depends**: - -``` -license=("custom") -``` - -#### source - -This is how makepkg knows what files to use to build our package. This can contain a variety of different kinds of sources, including local files and URLs. - -When adding local files, enter the file’s name relative to the PKGBUILD i.e. consider the following directory layout: - -``` -PKGBUILD -file.txt -src/file.sh -``` - -If you wanted to include **file.sh** in our PKGBUILD, you would enter **src/file.sh** as its name. - -When entering URLs, you simply enter the full URL, i.e. . - -Your package only needs the hello-world.sh file, and since it’s in the same directory as the PKGBUILD, you just type its name as the value for **source**. - -This variable also uses the same syntax as **arch** and **depends**: - -``` -source=("hello-world.sh") -``` - -#### sha512sums - -This is used to verify that the files in **source** haven’t been modified or downloaded incorrectly. Information on obtaining the values for this can be found in the [Arch Wiki article on PKGBUILDs][10]. - -If you’d rather just not set this (or you just don’t need to, i.e. for local files), you can just enter SKIP for every file in the **source** variable: - -``` -sha512sums=("SKIP") -``` - -#### package() - -This is the last, and most important part to actually making our package. It’s important to know two variables when working with this: - - * **${srcdir}**: This is where makepkg puts the files in the **source** variable. This is the directory where you can interact with the files, and do any other needed modification to the files. - - - * ${pkgdir}: This is where we place the files that will be installed on our system. -The folder structure for ${pkgdir} is set up as if it was on an actual system (i.e. ${pkgdir}/usr/bin/hello-world would create the file /usr/bin/hello-world when installing with pacman. - - - -package() contains a list of commands used create a package. - -So, if (hypothetically) you needed to have a file that reads Linux is superior to Windows at /usr/share/motto.txt, you would run something like this: - -``` -package() { - mkdir -p "${pkgdir}/usr/share" - echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share/motto.txt" -} -``` - -A few notes on the above command: - - * ${pkgdir} contains **no** directories inside it at first. If you skipped the [mkdir command][11], tee would output an error saying the directory doesn’t exist. - - - * When specifying directories, **always** prepend them with the **${pkgdir}** or **${srcdir}** variable. Entering something like /usr/share/motto.txt without such would point to the literal directory /usr/share/motto.txt on your currently running system. - - - -For your PKGBUILD, you’re going to place the file hello-world.sh at /usr/bin/hello-world on your target system. You’ll also be making the file say “Hello to you!” when ran. - -To do so, enter the following into your PKGBUILD: - -``` -package() { - echo 'Hello to you!' > "${srcdir}/hello-world.sh" - mkdir -p "${pkgdir}/usr/bin" - cp "${srcdir}/hello-world.sh" "${pkgdir}/usr/bin/hello-world" - chmod +x "${pkgdir}/usr/bin/hello-world" -} -``` - -And you’re done! **Build and install the package with makepkg -si**, and then run hello-world in your terminal to see its output. - -![][12] - -### Wrapping Up - -And just like that, you have made your first PKGBUILD! You’re on your way to making actual packages for yourself, and maybe even the AUR. - -Got any questions, or something just not working right? Feel free to post it in the comment section below. - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/create-pkgbuild/ - -作者:[Hunter Wittenborn][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/hunter/ -[b]: https://github.com/lujun9972 -[1]: https://itsfoss.com/aur-arch-linux/ -[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/image.png?resize=748%2C689&ssl=1 -[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/image-2.png?resize=682%2C260&ssl=1 -[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/image-3.png?resize=682%2C265&ssl=1 -[5]: https://wiki.archlinux.org/title/Creating_packages -[6]: https://itsfoss.com/pacman-command/ -[7]: https://www.quora.com/What-is-CPU-architecture -[8]: https://en.wikipedia.org/wiki/Software_license -[9]: https://wiki.archlinux.org/title/PKGBUILD#license -[10]: https://wiki.archlinux.org/title/PKGBUILD#Integrity -[11]: https://linuxhandbook.com/mkdir-command/ -[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/06/image-1.png?resize=561%2C281&ssl=1 diff --git a/translated/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md b/translated/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md new file mode 100644 index 0000000000..ae8fb9ccb0 --- /dev/null +++ b/translated/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md @@ -0,0 +1,261 @@ +[#]: subject: (Creating a PKGBUILD to Make Packages for Arch Linux) +[#]: via: (https://itsfoss.com/create-pkgbuild/) +[#]: author: (Hunter Wittenborn https://itsfoss.com/author/hunter/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: ( ) +[#]: url: ( ) + +Arch Linux 软件包制作入门 +====== + +`PKGBUILD` 文件是为 Arch Linux 及其衍生版(如 Manjaro)构建和创建软件包的方式。 + +如果你曾经使用过 [AUR][1](即 Arch Linux 的用户维护的 `PKGBUILD` 存储库),你甚至可能也遇到过它们。 + +但是,到底是如何从 `PKGBUILD` 到可安装软件包的呢?这两者之间到底发生了什么,如何把自己的软件制作成软件包呢?你将在这篇文章中了解这些。 + +### PKGBUILD 基础知识 + +对于那些熟悉 Bash 或其他 shell 的人来说,你可能知道,`PKGBUILD` 就是一个带有一些变量的 shell 脚本。 + +`PKGBUILD` 文件由变量和函数组成,所有这些都是用来定义软件包本身,以及如何构建它。 + +为了从 `PKGBUILD` 中创建一个软件包,需要使用 `makepkg` 命令行工具。在获得 `PKGBUILD` 文件后,你只需在包含 `PKGBUILD` 的目录中运行 `makepkg',就可以得到一个可安装的软件包了。 + +![][2] + +在本教程中,你将会看到我刚刚制作的软件包,它在运行时打印出 “Hello World!”。 + +![][3] + +### 准备 + +为了继续学习本教程,你需要创建几个文件。 + +首先,你需要创建一个名为 `PKGBUILD` 的文件,它将作为构建你的软件包的“配方”。 + +你需要做的另一个文件是一个叫 `hello-world.sh` 的文件。我稍后会解释它的用途。 + +你也可以用一个命令来创建这两个文件: + +``` +touch PKGBUILD hello-world.sh +``` + +你可以用 `ls` 命令检查这些文件是否被创建。 + +![][4] + +然后你就可以开始了! + +### 设置你的 PKGBUILD 文件 + +我不会让你复制粘贴整个文件,而是和你一起键入每一行,这样你就能更好地理解每一行的目的。如果你不喜欢这种学习方式,我强烈推荐 [Arch 维基][5] 中为 Arch Linux 创建软件包的文章。 + +这篇文章也没有介绍 `PKGBUILD` 中可以设置的每一个选项,只是介绍了一些常用的选项,以便你能尽快上手。 + +说完了这些,打开你的文本编辑器,让我们直接进入正题吧。 + +#### pkgname + +首先是 `pkgname` 变量。这是安装时定义软件包名称的东西,也是 [Arch Linux 的软件包管理器 pacman][6] 跟踪软件包的方式。 + +这个变量(以及其他一些变量)的格式是 `variable=value`,变量名在左边,变量的值在右边,用等号隔开。 + +要设置包的名称,请在 `PKGBUILD` 中输入以下内容: + +``` +pkgname="hello-world" +``` + + * 要设置一个不同的软件包名称,用你的软件包的名称替换 `hello-world`。 + * 这并不设置用于运行程序的命令,这将在下面的 `package()` 部分中处理。 + +#### pkgver + +正如变量名称本身所述,它设置了你的软件包的版本(即 `1.0.0`)。这在用户更新他们的系统时很有用,因为设置更高的版本会提示用户升级。 + +要设置版本号,请在 `PKGBUILD` 中输入以下内容(在前一行之后): + +``` +pkgver="1.0.0" +``` + +#### pkgrel + +这与 `pkgver` 变量有关,通常不需要知道。不过和 `pkgver` 变量一样,如果它被换到一个更高的数字,就将通知用户进行升级。 + +它适用于任何需要保持 `pkgver` 不变的情况下,例如 `PKGBUILD` 本身发生了变化。如果你为一个你使用的程序创建了一个 `PKGBUILD`(并希望保持软件包的版本相同),而你需要修复 `PKGBUILD` 本身的一个错误,这将是非常有用的。 + +要设置这个变量,请在 `PKGBUILD` 中输入以下内容: + +``` +pkgver="1" +``` + +这个变量应该 **总是** 从 `1` 开始,然后一次一次地向上移动。当 `pkgver` 本身向上移动时,这个变量可以(也应该)重置为 `1`,因为 `pkgver` 本身会通知用户升级。 + +#### pkgdesc + +这将设置软件包的描述,用于帮助更好地识别该软件包。 + +要设置它,只需将描述放在引号内: + +``` +pkgdesc="Hello world in your terminal!" +``` + +#### arch + +这个变量设置软件包所兼容的 [硬件架构][7]。如果你不明白什么是架构,那也没关系,因为在大多数情况下,这个变量几乎是无用的。 + +无论如何,`makepkg` 仍然需要设置它,这样它就知道这个软件包与我们的系统是兼容的。 + +这个变量支持设置多个值,所以 `makepkg` 需要一个不同的语法,如下所示。 + +要设置它,请在 `PKGBUILD` 中输入以下内容: + +``` +arch=("x86_64") +``` + +如果你要设置多个值,需要用空格和引号分隔每个值,像这样。`arch=(“x86_x64" "arm")`。 + +#### depends + +这列出了提供了我们的软件包所需功能的所有软件包。与 `arch` 一样,它也可以包含多个值,因此必须使用括号语法。 + +由于我们的软件包没有任何依赖关系,所以我们不需要在 `PKGBUILD` 中输入这个字段。然而,如果我们的软件包有依赖关系,我们就会使用与 `arch` 相同的语法。 + +#### optdepends + +这里列出了那些并不是提供所需功能而是额外功能的软件包。 + +这与 `depends` 的语法相同。 + +#### conflicts + +这告诉 `pacman` 哪些软件包会导致我们的软件包出现问题,或者以我们不希望的方式行事。 + +这里列出的任何软件包都会在我们的软件包被安装之前被卸载。 + +这与 `depends` 的语法相同。 + +#### license + +这定义了你的程序所采用的 [软件许可证][8]。如果你需要帮助你选择一个许可证,[Arch 维基][9] 提供了一些信息。如果你不知道该怎么设置,将其设置为 `custom` 也可以。 + +这与 `arch` 和 `depends` 的语法相同: + +``` +license=("custom") +``` + +#### source + +这就是 `makepkg` 如何知道要用什么文件来构建我们的软件包。它可以包含各种不同类型的源,包括本地文件和 URL。 + +在添加本地文件时,要输入相对于 `PKGBUILD` 文件的文件路径,比如以下目录布局: + +``` +PKGBUILD +file.txt +src/file.sh +``` + +如果你想在我们的 `PKGBUILD` 中包括 `file.sh`,你需要输入 `src/file.sh` 作为其名称。 + +当输入 URL 时,你只需输入完整的 URL,即 `https://mirrors.creativecommons.org/presskit/logos/cc.logo.large.png`。 + +你的这个软件包只需要 `hello-world.sh` 文件,由于它和 `PKGBUILD` 在同一个目录中,你只需输入它的名字作为 `source` 的值。 + +这个变量也使用与 `arch` 和 `depends` 相同的语法: + +``` +source=("hello-world.sh") +``` + +#### sha512sums + +这是用来验证 `source` 中的文件没有被修改或下载错误。如何获得这个值的信息可以在 [Arch 维基关于 PKGBUILD 的文章][10] 中找到。 + +如果你宁愿不设置这个(或者你只是不需要,例如对于本地文件),你可以为 `source` 变量中的每个文件输入 `SKIP`: + +``` +sha512sums=("SKIP") +``` + +#### package() + +这是最后一个,也是实际制作我们的包的最重要的部分。在处理这个问题时,知道两个变量很重要。 + + * `${srcdir}`:这是 `makepkg` 放置 `source` 变量中文件的地方。在这个目录中,你可以与这些文件进行交互,并对文件进行任何其他需要的修改。 + * `${pkgdir}`:这是我们放置将被安装在系统中的文件的地方。 +`${pkgdir}` 的文件夹结构是按照实际系统中的情况设置的(例如,使用 `pacman` 安装时,`${pkgdir}/usr/bin/hello-world` 会创建文件 `/usr/bin/hello-world`)。 + +`package()` 包含一个用于创建软件包的命令列表。 + +因此,如果(假设)你需要有个在 `/usr/share/motto.txt` 写着 “Linux is superior to Windows ”的文件,你会运行这样的东西: + +``` +package() { + mkdir -p "${pkgdir}/usr/share" + echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share/motto.txt" +} +``` + +关于上述命令的一些说明: + + * `${pkgdir}` 里面最初是 **不包含** 目录的。如果你跳过了 [mkdir 命令][11],`tee` 会输出一个错误,说这个目录不存在。 + * 在指定目录时,**总是** 在它们前面加上 `${pkgdir}` 或 `${srcdir}` 变量。如果输入 `/usr/share/motto.txt`,就会按照字面意义指向你当前运行的系统中的 `/usr/share/motto.txt`。 + +对于你的 `PKGBUILD`,你将把 `hello-world.sh` 文件放在目标系统的 `/usr/bin/hello-world` 中。你还将使该文件在运行时说 “Hello to you!”。 + +要做到这一点,请在 `PKGBUILD` 中输入以下内容: + +``` +package() { + echo 'Hello to you!' > "${srcdir}/hello-world.sh" + mkdir -p "${pkgdir}/usr/bin" + cp "${srcdir}/hello-world.sh" "${pkgdir}/usr/bin/hello-world" + chmod +x "${pkgdir}/usr/bin/hello-world" +} +``` + +然后就完成了!用 `makepkg -si` 构建和安装软件包,然后在终端运行 `hello-world`,查看其输出。 + +![][12] + +### 总结 + +就这样,你已经制作了你的第一个 `PKGBUILD`!你走在了为自己甚至是为 AUR 制作实际的软件包的路上。 + +有什么问题,或者有什么地方不对吗?请随时在下面的评论区发表。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/create-pkgbuild/ + +作者:[Hunter Wittenborn][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/hunter/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/aur-arch-linux/ +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/image.png?resize=748%2C689&ssl=1 +[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/image-2.png?resize=682%2C260&ssl=1 +[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/image-3.png?resize=682%2C265&ssl=1 +[5]: https://wiki.archlinux.org/title/Creating_packages +[6]: https://itsfoss.com/pacman-command/ +[7]: https://www.quora.com/What-is-CPU-architecture +[8]: https://en.wikipedia.org/wiki/Software_license +[9]: https://wiki.archlinux.org/title/PKGBUILD#license +[10]: https://wiki.archlinux.org/title/PKGBUILD#Integrity +[11]: https://linuxhandbook.com/mkdir-command/ +[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/06/image-1.png?resize=561%2C281&ssl=1 From d0e0df3b09f33498a976f03c07ae31a36ab4a9d8 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 2 Oct 2021 13:09:49 +0800 Subject: [PATCH 053/143] PUB @wxy https://linux.cn/article-13843-1.html --- ...2 Creating a PKGBUILD to Make Packages for Arch Linux.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md (98%) diff --git a/translated/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md b/published/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md similarity index 98% rename from translated/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md rename to published/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md index ae8fb9ccb0..1303a2a5ee 100644 --- a/translated/tech/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md +++ b/published/20210702 Creating a PKGBUILD to Make Packages for Arch Linux.md @@ -4,12 +4,14 @@ [#]: collector: (lujun9972) [#]: translator: (wxy) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13843-1.html) Arch Linux 软件包制作入门 ====== +![](https://img.linux.net.cn/data/attachment/album/202110/02/130702ybexb5tsvkx1xbs1.jpg) + `PKGBUILD` 文件是为 Arch Linux 及其衍生版(如 Manjaro)构建和创建软件包的方式。 如果你曾经使用过 [AUR][1](即 Arch Linux 的用户维护的 `PKGBUILD` 存储库),你甚至可能也遇到过它们。 From f206a892b67bee502baf9c9f4f49d8ba4c7c6fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E6=96=B0=E9=98=BF=E5=B2=A9?= <31788564+mengxinayan@users.noreply.github.com> Date: Sat, 2 Oct 2021 19:28:13 +0800 Subject: [PATCH 054/143] Finish translation 20210728 Kernel tracing with trace-cmd.md --- .../20210728 Kernel tracing with trace-cmd.md | 376 ------------------ .../20210728 Kernel tracing with trace-cmd.md | 348 ++++++++++++++++ 2 files changed, 348 insertions(+), 376 deletions(-) delete mode 100644 sources/tech/20210728 Kernel tracing with trace-cmd.md create mode 100644 translated/tech/20210728 Kernel tracing with trace-cmd.md diff --git a/sources/tech/20210728 Kernel tracing with trace-cmd.md b/sources/tech/20210728 Kernel tracing with trace-cmd.md deleted file mode 100644 index cd5b549e40..0000000000 --- a/sources/tech/20210728 Kernel tracing with trace-cmd.md +++ /dev/null @@ -1,376 +0,0 @@ -[#]: subject: (Kernel tracing with trace-cmd) -[#]: via: (https://opensource.com/article/21/7/linux-kernel-trace-cmd) -[#]: author: (Gaurav Kamathe https://opensource.com/users/gkamathe) -[#]: collector: (lujun9972) -[#]: translator: (mengxinayan) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) - -Kernel tracing with trace-cmd -====== -trace-cmd is an easy-to-use, feature-rich utility for tracing Linux -kernel functions. -![Puzzle pieces coming together to form a computer screen][1] - -In my [previous article][2], I explained how to use `ftrace` to trace kernel functions. Using `ftrace` by writing and reading from files can get tedious, so I used a wrapper around it to run commands with options to enable and disable tracing, set filters, view output, clear output, and more. - -The [trace-cmd][3] command is a utility that helps you do just this. In this article, I use `trace-cmd` to perform the same tasks I did in my `ftrace` article. Since I refer back to that article frequently, I recommend you read it before you read this one. - -### Install trace-cmd - -I run the commands in this article as the root user. - -The `ftrace` mechanism is built into the kernel, and you can verify it is enabled with: - - -``` -# mount | grep tracefs -none on /sys/kernel/tracing type tracefs (rw,relatime,seclabel) -``` - -However, you need to install the `trace-cmd` utility manually. - - -``` -`# dnf install trace-cmd -y` -``` - -### List available tracers - -When using `ftrace`, you must view a file's contents to see what tracers are available. But with `trace-cmd`, you can get this information with: - - -``` -# trace-cmd list -t -hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop -``` - -### Enable the function tracer - -In my [earlier article][2], I used two tracers, and I'll do the same here. Enable your first tracer, `function`, with: - - -``` -$ trace-cmd start -p function -  plugin 'function' -``` - -### View the trace output - -Once the tracer is enabled, you can view the output by using the `show` arguments. This shows only the first 20 lines to keep the example short (see my earlier article for an explanation of the output): - - -``` -# trace-cmd show | head -20 -## tracer: function -# -# entries-in-buffer/entries-written: 410142/3380032   #P:8 -# -#                                _-----=> irqs-off -#                               / _----=> need-resched -#                              | / _---=> hardirq/softirq -#                              || / _--=> preempt-depth -#                              ||| /     delay -#           TASK-PID     CPU#  ||||   TIMESTAMP  FUNCTION -#              | |         |   ||||      |         | -           gdbus-2606    [004] ..s. 10520.538759: __msecs_to_jiffies <-rebalance_domains -           gdbus-2606    [004] ..s. 10520.538760: load_balance <-rebalance_domains -           gdbus-2606    [004] ..s. 10520.538761: idle_cpu <-load_balance -           gdbus-2606    [004] ..s. 10520.538762: group_balance_cpu <-load_balance -           gdbus-2606    [004] ..s. 10520.538762: find_busiest_group <-load_balance -           gdbus-2606    [004] ..s. 10520.538763: update_group_capacity <-update_sd_lb_stats.constprop.0 -           gdbus-2606    [004] ..s. 10520.538763: __msecs_to_jiffies <-update_group_capacity -           gdbus-2606    [004] ..s. 10520.538765: idle_cpu <-update_sd_lb_stats.constprop.0 -           gdbus-2606    [004] ..s. 10520.538766: __msecs_to_jiffies <-rebalance_domains -``` - -### Stop tracing and clear the buffer - -Tracing continues to run in the background, and you can keep viewing the output using `show`. - -To stop tracing, run `trace-cmd` with the `stop` argument: - - -``` -`# trace-cmd stop` -``` - -To clear the buffer, run it with the `clear` argument: - - -``` -`# trace-cmd clear` -``` - -### Enable the function_graph tracer - -Enable the second tracer, `function_graph`, by running: - - -``` -# trace-cmd start -p function_graph -  plugin 'function_graph' -``` - -Once again, view the output using the `show` argument. As expected, the output is slightly different from the first trace output. This time it includes a `function calls` chain: - - -``` -# trace-cmd show | head -20 -## tracer: function_graph -# -# CPU  DURATION                  FUNCTION CALLS -# |     |   |                     |   |   |   | - 4)   0.079 us    |        } /* rcu_all_qs */ - 4)   0.327 us    |      } /* __cond_resched */ - 4)   0.081 us    |      rcu_read_unlock_strict(); - 4)               |      __cond_resched() { - 4)   0.078 us    |        rcu_all_qs(); - 4)   0.243 us    |      } - 4)   0.080 us    |      rcu_read_unlock_strict(); - 4)               |      __cond_resched() { - 4)   0.078 us    |        rcu_all_qs(); - 4)   0.241 us    |      } - 4)   0.080 us    |      rcu_read_unlock_strict(); - 4)               |      __cond_resched() { - 4)   0.079 us    |        rcu_all_qs(); - 4)   0.235 us    |      } - 4)   0.095 us    |      rcu_read_unlock_strict(); - 4)               |      __cond_resched() { -``` - -Use the `stop` and `clear` commands to stop tracing and clear the buffer: - - -``` -# trace-cmd stop -# trace-cmd clear -``` - -### Tweak tracing to increase depth - -If you want to see more depth in the function calls, you can tweak the tracer: - - -``` -# trace-cmd start -p function_graph --max-graph-depth 5 -  plugin 'function_graph' -``` - -Now when you compare this output with what you saw before, you should see more nested function calls: - - -``` -# trace-cmd show | head -20 -## tracer: function_graph -# -# CPU  DURATION                  FUNCTION CALLS -# |     |   |                     |   |   |   | - 6)               |        __fget_light() { - 6)   0.804 us    |          __fget_files(); - 6)   2.708 us    |        } - 6)   3.650 us    |      } /* __fdget */ - 6)   0.547 us    |      eventfd_poll(); - 6)   0.535 us    |      fput(); - 6)               |      __fdget() { - 6)               |        __fget_light() { - 6)   0.946 us    |          __fget_files(); - 6)   1.895 us    |        } - 6)   2.849 us    |      } - 6)               |      sock_poll() { - 6)   0.651 us    |        unix_poll(); - 6)   1.905 us    |      } - 6)   0.475 us    |      fput(); - 6)               |      __fdget() { -``` - -### Learn available functions to trace - -If you want to trace only certain functions and ignore the rest, you need to know the exact function names. You can get them with the `list` argument followed by `-f`. This example searches for the common kernel function `kmalloc`, which is used to allocate memory in the kernel: - - -``` -# trace-cmd list -f | grep kmalloc -bpf_map_kmalloc_node -mempool_kmalloc -__traceiter_kmalloc -__traceiter_kmalloc_node -kmalloc_slab -kmalloc_order -kmalloc_order_trace -kmalloc_large_node -__kmalloc -__kmalloc_track_caller -__kmalloc_node -__kmalloc_node_track_caller -[...] -``` - -Here's the total count of functions available on my test system: - - -``` -# trace-cmd list -f | wc -l -63165 -``` - -### Trace kernel module-related functions - -You can also trace functions related to a specific kernel module. Imagine you want to trace `kvm` kernel module-related functions. Ensure the module is loaded: - - -``` -# lsmod  | grep kvm_intel -kvm_intel             335872  0 -kvm                   987136  1 kvm_intel -``` - -Run `trace-cmd` again with the `list` argument, and from the output, `grep` for lines that end in `]`. This will filter out the kernel modules. Then `grep` the kernel module `kvm_intel`, and you should see all the functions related to that kernel module: - - -``` -# trace-cmd list -f | grep ]$  | grep kvm_intel -vmx_can_emulate_instruction [kvm_intel] -vmx_update_emulated_instruction [kvm_intel] -vmx_setup_uret_msr [kvm_intel] -vmx_set_identity_map_addr [kvm_intel] -handle_machine_check [kvm_intel] -handle_triple_fault [kvm_intel] -vmx_patch_hypercall [kvm_intel] - -[...] - -vmx_dump_dtsel [kvm_intel] -vmx_dump_sel [kvm_intel] -``` - -### Trace specific functions - -Now that you know how to find functions of interest, put that knowledge to work with an example. As in the earlier article, try to trace filesystem-related functions. The filesystem I had on my test system was `ext4`. - -This procedure is slightly different; instead of `start`, you run the command with the `record` argument followed by the "pattern" of the functions you want to trace. You also need to specify the tracer you want; in this case, that's `function_graph`. The command continues recording the trace until you stop it with **Ctrl+C**. So after a few seconds, hit **Ctrl+C** to stop tracing: - - -``` -# trace-cmd list -f | grep ^ext4_ - -# trace-cmd record -l ext4_* -p function_graph -  plugin 'function_graph' -Hit Ctrl^C to stop recording -^C -CPU0 data recorded at offset=0x856000 -    8192 bytes in size -[...] -``` - -### View the recorded trace - -To view the trace you recorded earlier, run the command with the `report` argument. From the output, it's clear that the filter worked, and you see only the ext4-related function trace: - - -``` -# trace-cmd report | head -20 -[...] -cpus=8 -       trace-cmd-12697 [000] 11303.928103: funcgraph_entry:                   |  ext4_show_options() { -       trace-cmd-12697 [000] 11303.928104: funcgraph_entry:        0.187 us   |    ext4_get_dummy_policy(); -       trace-cmd-12697 [000] 11303.928105: funcgraph_exit:         1.583 us   |  } -       trace-cmd-12697 [000] 11303.928122: funcgraph_entry:                   |  ext4_create() { -       trace-cmd-12697 [000] 11303.928122: funcgraph_entry:                   |    ext4_alloc_inode() { -       trace-cmd-12697 [000] 11303.928123: funcgraph_entry:        0.101 us   |      ext4_es_init_tree(); -       trace-cmd-12697 [000] 11303.928123: funcgraph_entry:        0.083 us   |      ext4_init_pending_tree(); -       trace-cmd-12697 [000] 11303.928123: funcgraph_entry:        0.141 us   |      ext4_fc_init_inode(); -       trace-cmd-12697 [000] 11303.928123: funcgraph_exit:         0.931 us   |    } -       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.081 us   |    ext4_get_dummy_policy(); -       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.133 us   |    ext4_get_group_desc(); -       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.115 us   |    ext4_free_inodes_count(); -       trace-cmd-12697 [000] 11303.928124: funcgraph_entry:        0.114 us   |    ext4_get_group_desc(); -``` - -### Trace a specific PID - -Say you want to trace functions related to a specific persistent identifier (PID). Open another terminal and note the PID of the running shell: - - -``` -# echo $$ -10885 -``` - -Run the `record` command again and pass the PID using the `-P` option. This time, let the terminal run (i.e., do not press **Ctrl+C** yet): - - -``` -# trace-cmd record -P 10885 -p function_graph -  plugin 'function_graph' -Hit Ctrl^C to stop recording -``` - -### Run some activity on the shell - -Move back to the other terminal where you had a shell running with a specific PID and run any command, e.g., `ls` to list files: - - -``` -# ls -Temp-9b61f280-fdc1-4512-9211-5c60f764d702 -tracker-extract-3-files.1000 -v8-compile-cache-1000 -[...] -``` - -Move back to the terminal where you enabled tracing and hit **Ctrl+C** to stop tracing: - - -``` -# trace-cmd record -P 10885 -p function_graph -  plugin 'function_graph' -Hit Ctrl^C to stop recording -^C -CPU1 data recorded at offset=0x856000 -    618496 bytes in size -[...] -``` - -In the trace's output, you can see the PID and the Bash shell on the left and the function calls related to it on the right. This can be pretty handy to narrow down your tracing: - - -``` -# trace-cmd report  | head -20 - -cpus=8 -          <idle>-0     [001] 11555.380581: funcgraph_entry:                   |  switch_mm_irqs_off() { -          <idle>-0     [001] 11555.380583: funcgraph_entry:        1.703 us   |    load_new_mm_cr3(); -          <idle>-0     [001] 11555.380586: funcgraph_entry:        0.493 us   |    switch_ldt(); -          <idle>-0     [001] 11555.380587: funcgraph_exit:         7.235 us   |  } -            bash-10885 [001] 11555.380589: funcgraph_entry:        1.046 us   |  finish_task_switch.isra.0(); -            bash-10885 [001] 11555.380591: funcgraph_entry:                   |  __fdget() { -            bash-10885 [001] 11555.380592: funcgraph_entry:        2.036 us   |    __fget_light(); -            bash-10885 [001] 11555.380594: funcgraph_exit:         3.256 us   |  } -            bash-10885 [001] 11555.380595: funcgraph_entry:                   |  tty_poll() { -            bash-10885 [001] 11555.380597: funcgraph_entry:                   |    tty_ldisc_ref_wait() { -            bash-10885 [001] 11555.380598: funcgraph_entry:                   |      ldsem_down_read() { -            bash-10885 [001] 11555.380598: funcgraph_entry:                   |        __cond_resched() { -``` - -### Give it a try - -These brief examples show how using `trace-cmd` instead of the underlying `ftrace` mechanism is both easy to use and rich in features, including many I didn't cover here. To learn more and get better at it, consult its man page and try out its other useful commands. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/7/linux-kernel-trace-cmd - -作者:[Gaurav Kamathe][a] -选题:[lujun9972][b] -译者:[萌新阿岩](https://github.com/mengxinayan) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/gkamathe -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) -[2]: https://opensource.com/article/21/7/analyze-linux-kernel-ftrace -[3]: https://lwn.net/Articles/410200/ diff --git a/translated/tech/20210728 Kernel tracing with trace-cmd.md b/translated/tech/20210728 Kernel tracing with trace-cmd.md new file mode 100644 index 0000000000..f2f2633110 --- /dev/null +++ b/translated/tech/20210728 Kernel tracing with trace-cmd.md @@ -0,0 +1,348 @@ +[#]: subject: (Kernel tracing with trace-cmd) +[#]: via: (https://opensource.com/article/21/7/linux-kernel-trace-cmd) +[#]: author: (Gaurav Kamathe https://opensource.com/users/gkamathe) +[#]: collector: (lujun9972) +[#]: translator: (mengxinayan) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) + +使用 trace-cmd 追踪内核 +====== +trace-cmd 是一个容易使用且特性众多的,可用来追踪内核函数的命令。 +![Puzzle pieces coming together to form a computer screen][1] + +在 [之前的文章][2] 里,我介绍了如何利用 `ftrace` 来追踪内核函数。通过写入和读出文件来使用 `ftrace` 会变得很枯燥,所以在它周围使用了一个包装器来运行带有选项的命令,以启用和禁用追踪,设置过滤器,查看输出,清除输出等等。 + +[trace-cmd][3] 命令是一个可以帮助你做到这一点的工具。在这篇文章中,我使用 `trace-cmd` 来执行我在 `ftrace` 文章中所做的相同任务。由于会经常参考那篇文章,建议在阅读这篇文章之前先阅读它。 + +### 安装 trace-cmd + +本文中所有的命令都运行在 root 用户下。 + +因为 `ftrace` 机制被内置于内核中,因此你可以使用下面的命令进行验证它是否启用: + +``` +# mount | grep tracefs +none on /sys/kernel/tracing type tracefs (rw,relatime,seclabel) +``` + +然而,你需要手动尝试安装 `trace-cmd` 命令: + +``` +# dnf install trace-cmd -y +``` + +### 列出可用的追踪器 + +当使用 `ftrace` 时,你必须查看文件的内容以了解有哪些追踪器可用。但使用 `trace-cmd`,你可以通过以下方式获得这些信息。 + +``` +# trace-cmd list -t +hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop +``` + +### 启用函数(function)追踪器 + +在我之前的文章中,我使用了两个追踪器,在这里我也会这么做。用 `function` 启用你的第一个追踪器。 + +``` +$ trace-cmd start -p function +  plugin 'function' +``` + +### 查看追踪输出 + +一旦追踪器被启用,你可以通过使用 `show` 参数来查看输出。这只显示了前20行,以保持例子的简短(见我之前的文章对输出的解释)。 + +``` +# trace-cmd show | head -20 +## tracer: function +# +# entries-in-buffer/entries-written: 410142/3380032 #P:8 +# +# _-----=> irqs-off +# / _----=> need-resched +# | / _---=> hardirq/softirq +# || / _--=> preempt-depth +# ||| / delay +# TASK-PID CPU# |||| TIMESTAMP FUNCTION +# | | | |||| | | + gdbus-2606 [004] ..s. 10520.538759: __msecs_to_jiffies <-rebalance_domains + gdbus-2606 [004] ..s. 10520.538760: load_balance <-rebalance_domains + gdbus-2606 [004] ..s. 10520.538761: idle_cpu <-load_balance + gdbus-2606 [004] ..s. 10520.538762: group_balance_cpu <-load_balance + gdbus-2606 [004] ..s. 10520.538762: find_busiest_group <-load_balance + gdbus-2606 [004] ..s. 10520.538763: update_group_capacity <-update_sd_lb_stats.constprop.0 + gdbus-2606 [004] ..s. 10520.538763: __msecs_to_jiffies <-update_group_capacity + gdbus-2606 [004] ..s. 10520.538765: idle_cpu <-update_sd_lb_stats.constprop.0 + gdbus-2606 [004] ..s. 10520.538766: __msecs_to_jiffies <-rebalance_domains +``` + +### 停止追踪并清除缓冲区 + +追踪将会在后台继续运行,你可以继续用 `show` 查看输出。 + +要停止追踪,请运行带有 `stop` 参数的 `trace-cmd` 命令。 +``` +# trace-cmd stop +``` +要清除缓冲区,用 `clear` 参数运行它。 +``` +# trace-cmd clear +``` + +### 启用 函数调用图(function_graph) 追踪器 + +运行第二个追踪器,通过 `function_graph` 参数来启用它。 +``` +# trace-cmd start -p function_graph + Plugin 'function_graph' +``` + +再次使用 `show` 参数查看输出。正如预期的那样,输出与第一次追踪输出略有不同。这一次,它包括一个**函数调用**链。 + +``` +# trace-cmd show | head -20 +## tracer: function_graph +# +# CPU DURATION FUNCTION CALLS +# | | | | | | | + 4) 0.079 us | } /* rcu_all_qs */ + 4) 0.327 us | } /* __cond_resched */ + 4) 0.081 us | rcu_read_unlock_strict(); + 4) | __cond_resched() { + 4) 0.078 us | rcu_all_qs(); + 4) 0.243 us | } + 4) 0.080 us | rcu_read_unlock_strict(); + 4) | __cond_resched() { + 4) 0.078 us | rcu_all_qs(); + 4) 0.241 us | } + 4) 0.080 us | rcu_read_unlock_strict(); + 4) | __cond_resched() { + 4) 0.079 us | rcu_all_qs(); + 4) 0.235 us | } + 4) 0.095 us | rcu_read_unlock_strict(); + 4) | __cond_resched() { +``` + +使用 `stop` 和 `clear` 命令来停止追踪和清楚缓存区。 + +``` +# trace-cmd stop +# trace-cmd clear +``` + +### 调整追踪以增加深度 + +如果你想在函数调用中看到更多的深度,你可以对追踪器进行调整。 + +``` +# trace-cmd start -p function_graph --max-graph-depth 5 + plugin 'function_graph' +``` + +现在,当你将这个输出与你之前看到的进行比较时,你应该看到更多的嵌套函数调用。 + +``` +# trace-cmd show | head -20 +## tracer: function_graph +# +# CPU DURATION FUNCTION CALLS +# | | | | | | | + 6) | __fget_light() { + 6) 0.804 us | __fget_files(); + 6) 2.708 us | } + 6) 3.650 us | } /* __fdget */ + 6) 0.547 us | eventfd_poll(); + 6) 0.535 us | fput(); + 6) | __fdget() { + 6) | __fget_light() { + 6) 0.946 us | __fget_files(); + 6) 1.895 us | } + 6) 2.849 us | } + 6) | sock_poll() { + 6) 0.651 us | unix_poll(); + 6) 1.905 us | } + 6) 0.475 us | fput(); + 6) | __fdget() { +``` + +### 了解可被追踪的函数 + +如果你想只追踪某些函数而忽略其他的,你需要知道确切的函数名称。你可以用 `list -f` 参数来得到它们。例如搜索常见的内核函数 `kmalloc`,它被用来在内核中分配内存。 + +``` +# trace-cmd list -f | grep kmalloc +bpf_map_kmalloc_node +mempool_kmalloc +__traceiter_kmalloc +__traceiter_kmalloc_node +kmalloc_slab +kmalloc_order +kmalloc_order_trace +kmalloc_large_node +__kmalloc +__kmalloc_track_caller +__kmalloc_node +__kmalloc_node_track_caller +[...] +``` + +下面是我的测试系统中可被追踪的函数总数: + +``` +# trace-cmd list -f | wc -l +63165 +``` + +### 追踪内核模块相关的函数 + +你也可以追踪与特定内核模块相关的函数。假设你想追踪 `kvm` 内核模块相关的功能,你可以通过以下方式来实现。确保该模块已经加载。 + +``` +# lsmod | grep kvm_intel +kvm_intel 335872 0 +kvm 987136 1 kvm_intel +``` + +再次运行 `trace-cmd`,使用 `list` 参数,并从输出结果中,`grep` 查找以 `]` 结尾的行。这将过滤掉内核模块。然后 `grep` 内核模块 `kvm_intel` ,你应该看到所有与该内核模块有关的函数。 + +``` +# trace-cmd list -f | grep ]$ | grep kvm_intel +vmx_can_emulate_instruction [kvm_intel] +vmx_update_emulated_instruction [kvm_intel] +vmx_setup_uret_msr [kvm_intel] +vmx_set_identity_map_addr [kvm_intel] +handle_machine_check [kvm_intel] +handle_triple_fault [kvm_intel] +vmx_patch_hypercall [kvm_intel] + +[...] + +vmx_dump_dtsel [kvm_intel] +vmx_dump_sel [kvm_intel] +``` + +### 追踪特定函数 + +现在你知道了如何找到感兴趣的函数,请用一个例子把这些内容用于时间。就像前面的文章一样,试着追踪与文件系统相关的函数。我的测试系统上的文件系统是 `ext4`。 + +这个过程略有不同;你在运行命令时,不需要**启动**,而是在**记录**参数后面加上你想追踪的函数的 "模式"。你还需要指定你想要的追踪器;在这种情况下,就是 `function_graph`。该命令会继续记录追踪,直到你用 `Ctrl+C` 停止它。所以几秒钟后,按 `Ctrl+C` 停止追踪。 + +``` +# trace-cmd list -f | grep ^ext4_ + +# trace-cmd record -l ext4_* -p function_graph + plugin 'function_graph' +Hit Ctrl^C to stop recording +^C +CPU0 data recorded at offset=0x856000 + 8192 bytes in size +[...] +``` + +### 查看追踪记录 + +要查看你之前的追踪记录,运行带有 `report` 参数的命令。从输出结果来看,很明显过滤器起作用了,你只看到 `ext4` 相关的函数追踪。 + +``` +# trace-cmd report | head -20 +[...] +cpus=8 + trace-cmd-12697 [000] 11303.928103: funcgraph_entry: | ext4_show_options() { + trace-cmd-12697 [000] 11303.928104: funcgraph_entry: 0.187 us | ext4_get_dummy_policy(); + trace-cmd-12697 [000] 11303.928105: funcgraph_exit: 1.583 us | } + trace-cmd-12697 [000] 11303.928122: funcgraph_entry: | ext4_create() { + trace-cmd-12697 [000] 11303.928122: funcgraph_entry: | ext4_alloc_inode() { + trace-cmd-12697 [000] 11303.928123: funcgraph_entry: 0.101 us | ext4_es_init_tree(); + trace-cmd-12697 [000] 11303.928123: funcgraph_entry: 0.083 us | ext4_init_pending_tree(); + trace-cmd-12697 [000] 11303.928123: funcgraph_entry: 0.141 us | ext4_fc_init_inode(); + trace-cmd-12697 [000] 11303.928123: funcgraph_exit: 0.931 us | } + trace-cmd-12697 [000] 11303.928124: funcgraph_entry: 0.081 us | ext4_get_dummy_policy(); + trace-cmd-12697 [000] 11303.928124: funcgraph_entry: 0.133 us | ext4_get_group_desc(); + trace-cmd-12697 [000] 11303.928124: funcgraph_entry: 0.115 us | ext4_free_inodes_count(); + trace-cmd-12697 [000] 11303.928124: funcgraph_entry: 0.114 us | ext4_get_group_desc(); +``` + +### 追踪一个特定的 PID + +假设你想追踪与一个进程(PID)有关的函数。打开另一个终端,注意运行中的 shell 的PID。 + +``` +# echo $$ +10885 +``` + +再次运行 `record` 命令,用 `-P` 选项传递PID。这一次,让终端运行(也就是说,先不要按 `Ctrl+C` )。 + +``` +# trace-cmd record -P 10885 -p function_graph + Plugin 'function_graph' +Hit Ctrl^C to stop recording +``` + +### 在 shell 上运行一些命令 + +移动到另一个终端,在那里你有一个以特定PID运行的shell,并运行任何命令,例如,`ls` 命令用来列出文件。 + +``` +# ls +Temp-9b61f280-fdc1-4512-9211-5c60f764d702 +tracker-extract-3-files.1000 +v8-compile-cache-1000 +[...] +``` + +移动到你启用追踪的终端,按 `Ctrl+C` 停止追踪。 + +``` +# trace-cmd record -P 10885 -p function_graph + plugin 'function_graph' +Hit Ctrl^C to stop recording +^C +CPU1 data recorded at offset=0x856000 + 618496 bytes in size +[...] +``` + +在追踪的输出中,你可以看到左边是 PID 和 Bash shell,右边是与之相关的函数调用。这对于缩小你的追踪范围是非常方便的。 + +``` +# trace-cmd report | head -20 + +cpus=8 + -0 [001] 11555.380581: funcgraph_entry: | switch_mm_irqs_off() { + -0 [001] 11555.380583: funcgraph_entry: 1.703 us | load_new_mm_cr3(); + -0 [001] 11555.380586: funcgraph_entry: 0.493 us | switch_ldt(); + -0 [001] 11555.380587: funcgraph_exit: 7.235 us | } + bash-10885 [001] 11555.380589: funcgraph_entry: 1.046 us | finish_task_switch.isra.0(); + bash-10885 [001] 11555.380591: funcgraph_entry: | __fdget() { + bash-10885 [001] 11555.380592: funcgraph_entry: 2.036 us | __fget_light(); + bash-10885 [001] 11555.380594: funcgraph_exit: 3.256 us | } + bash-10885 [001] 11555.380595: funcgraph_entry: | tty_poll() { + bash-10885 [001] 11555.380597: funcgraph_entry: | tty_ldisc_ref_wait() { + bash-10885 [001] 11555.380598: funcgraph_entry: | ldsem_down_read() { + bash-10885 [001] 11555.380598: funcgraph_entry: | __cond_resched() { +``` + +### 试一试 + +这些简短的例子显示了使用 `trace-cmd` 命令而不是底层的 `ftrace` 机制,是如何实现既容易使用又拥有丰富的功能,许多内容本文并没有涉及。要想了解更多信息并更好地使用它,请查阅它的手册,并尝试使用其他有用的命令。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/7/linux-kernel-trace-cmd + +作者:[Gaurav Kamathe][a] +选题:[lujun9972][b] +译者:[萌新阿岩](https://github.com/mengxinayan) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/gkamathe +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) +[2]: https://opensource.com/article/21/7/analyze-linux-kernel-ftrace +[3]: https://lwn.net/Articles/410200/ From 9aad53d28c027e26fa5aebf13eb9b8d898f5918d Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sun, 3 Oct 2021 05:03:45 +0800 Subject: [PATCH 055/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211002=20?= =?UTF-8?q?Monitor=20your=20Java=20on=20Linux=20with=20jconsole?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211002 Monitor your Java on Linux with jconsole.md --- ...onitor your Java on Linux with jconsole.md | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 sources/tech/20211002 Monitor your Java on Linux with jconsole.md diff --git a/sources/tech/20211002 Monitor your Java on Linux with jconsole.md b/sources/tech/20211002 Monitor your Java on Linux with jconsole.md new file mode 100644 index 0000000000..3d75ccd24b --- /dev/null +++ b/sources/tech/20211002 Monitor your Java on Linux with jconsole.md @@ -0,0 +1,122 @@ +[#]: subject: "Monitor your Java on Linux with jconsole" +[#]: via: "https://opensource.com/article/21/10/monitor-java-linux-jconsole" +[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Monitor your Java on Linux with jconsole +====== +How to use the Java monitoring and management console included in the +Java Development Kit. +![Puzzle pieces coming together to form a computer screen][1] + +The Java Development Kit (JDK) provides binaries, tools, and compilers for the development of Java applications. One helpful tool included is jconsole. + +To demonstrate, I will use the WildFly J2EE application server, which is part of the JBOSS open source application server project. First, I start up a standalone instance. + + +``` +~/wildfly/24.0.1/bin$ ./standalone.sh +========================================================================= + +  JBoss Bootstrap Environment + +  JBOSS_HOME: /home/alan/wildfly/24.0.1 + +  JAVA: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-5.fc34.x86_64/bin/java +``` + +Now, in another terminal, I type `jconsole`. + + +``` +$ jconsole +``` + +Upon launching, jconsole lists local instances. Select Local Process, then select the name of the process and click Connect. That is all it takes to connect and begin using jconsole with a running Java Virtual Machine (JVM). + +![jconsole new connection screen with local processes][2] + +(Alan Formy-Duvall, [CC BY-SA 4.0][3]) + +### Overview + +The Java Monitoring and Management Console shows the process identifier (PID) at the top of the dashboard. The Overview tab has four graphs to show the vitals for Heap Memory Usage, Threads, Classes, and CPU Usage. + +![jconsole dashboard showing heap memory usage, threads, classes, and CPU usage][4] + +(Alan Formy-Duvall, [CC BY-SA 4.0][3]) + +The tabs along the top provide more detailed views of each area. + +### Memory + +The Memory tab displays graphs of various aspects of the memory being used by the JVM. The amount of the server system memory allocated to the JVM is called the heap. This screen also provides details about usage by the internal components of the heap, such as the Eden Space, Old Gen, and the Survivor Space. You can manually request a garbage collection action as well. + +![jconsole memory tab][5] + +(Alan Formy-Duvall, [CC BY-SA 4.0][3]) + +### Threads + +The Threads tab shows how many threads are running. You can also manually check for deadlocks. + +![jconsole thread dashboard showing number of threads over time and a scrolling list of threads][6] + +(Alan Formy-Duvall, [CC BY-SA 4.0][3]) + +### Classes + +The classes tab tells you how many classes are loaded and how many have been unloaded. + +![jconsole classes tab showing number of loaded classes over time][7] + +(Alan Formy-Duvall, [CC BY-SA 4.0][3]) + +### VM Summary + +The VM Summary tab provides many details about the application and the host system. You can learn which operating system and architecture you are on, the total amount of system memory, the number of CPUs, and even swap space. + +![jconsole VMsummary tab ][8] + +(Alan Formy-Duvall, [CC BY-SA 4.0][3]) + +Further details about the JVM shown in the summary include current and maximum heap size and information about the garbage collectors in use. The bottom pane lists all of the arguments passed to the JVM. + +### MBeans + +The last tab, MBeans, lets you drill down through all of the MBeans to view attributes and values for each. + +![MBeans tab][9] + +(Alan Formy-Duvall, [CC BY-SA 4.0][3]) + +### Conclusion + +Java has been around a long time, and it continues to power millions of systems worldwide. Plenty of development environments and monitoring systems are available, but having a tool like jconsole included in the base kit can be highly valuable. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/monitor-java-linux-jconsole + +作者:[Alan Formy-Duval][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) +[2]: https://opensource.com/sites/default/files/uploads/jconsole_new_connection_local.png (new connection) +[3]: https://creativecommons.org/licenses/by-sa/4.0/deed.ast +[4]: https://opensource.com/sites/default/files/uploads/jconsole_tab_overview.png (tab overview) +[5]: https://opensource.com/sites/default/files/uploads/jconsole_tab_memory.png (memory tab) +[6]: https://opensource.com/sites/default/files/uploads/jconsole_tab_threads.png (threads tab) +[7]: https://opensource.com/sites/default/files/uploads/jconsole_tab_classes.png (classes tab) +[8]: https://opensource.com/sites/default/files/uploads/jconsole_tab_vm-summary.png (VMsummary tab ) +[9]: https://opensource.com/sites/default/files/uploads/jconsole_tab_mbeans.png (MBeans tab) From 06300017bf79feb8e41cf90aa5fc98a2b2a154b4 Mon Sep 17 00:00:00 2001 From: unigeorge <40418272+unigeorge@users.noreply.github.com> Date: Sun, 3 Oct 2021 09:51:48 +0800 Subject: [PATCH 056/143] translating --- ...0104 Learn Fortran by writing a -guess the number- game.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md b/sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md index f4e8f0d2fe..89292005f8 100644 --- a/sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md +++ b/sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (unigeorge) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) @@ -123,7 +123,7 @@ via: https://opensource.com/article/21/1/fortran 作者:[Jim Hall][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[unigeorge](https://github.com/unigeorge) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 9163ed9434acbb1f8f0aa5a37935b0d4a70aebd0 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 3 Oct 2021 10:13:48 +0800 Subject: [PATCH 057/143] RPF MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @unigeorge 恭喜!达成三星任务!https://linux.cn/lctt/unigeorge --- ...memory safety and efficiency by example.md | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/translated/tech/20210813 Code memory safety and efficiency by example.md b/translated/tech/20210813 Code memory safety and efficiency by example.md index 314853622a..37b2d9985b 100644 --- a/translated/tech/20210813 Code memory safety and efficiency by example.md +++ b/translated/tech/20210813 Code memory safety and efficiency by example.md @@ -3,17 +3,18 @@ [#]: author: "Marty Kalin https://opensource.com/users/mkalindepauledu" [#]: collector: "lujun9972" [#]: translator: "unigeorge" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " 实例讲解代码之内存安全与效率 ====== -了解有关内存安全和效率的更多信息。 -![Code going into a computer.][1] +> 了解有关内存安全和效率的更多信息。 -C 是一种高级语言,同时具有“接近金属”(LCTT 译注:即“接近人类思维方式”的反义词)的特性,这使得它有时看起来更像是一种可移植的汇编语言,而不是 Java 或 Python 的兄弟语言。内存管理作为上述特性之一,涵盖了正在执行的程序对内存的安全和高效使用。本文通过 C 语言代码示例,以及现代 C 语言编译器生成的汇编语言代码段,详细介绍了内存安全性和效率。 +![](https://img.linux.net.cn/data/attachment/album/202110/03/101238cd0hgdrhamzab7hj.jpg) + +C 是一种高级语言,同时具有“接近金属close-to-the-metal”(LCTT 译注:即“接近人类思维方式”的反义词)的特性,这使得它有时看起来更像是一种可移植的汇编语言,而不像 Java 或 Python 这样的兄弟语言。内存管理作为上述特性之一,涵盖了正在执行的程序对内存的安全和高效使用。本文通过 C 语言代码示例,以及现代 C 语言编译器生成的汇编语言代码段,详细介绍了内存安全性和效率。 尽管代码示例是用 C 语言编写的,但安全高效的内存管理指南对于 C++ 是同样适用的。这两种语言在很多细节上有所不同(例如,C++ 具有 C 所缺乏的面向对象特性和泛型),但在内存管理方面面临的挑战是一样的。 @@ -30,36 +31,35 @@ void some_func(int a, int b) { } ``` -通过 **a** 和 **b** 传递的参数以及局部变量 **n** 的存储会在栈中,除非编译器可以找到通用寄存器。编译器倾向于优先将通用寄存器用作暂存器,因为 CPU 对这些寄存器的访问速度很快(一个时钟周期)。然而,这些寄存器在台式机、笔记本电脑和手持机器的标准架构上很少(大约 16 个)。 +通过 `a` 和 `b` 传递的参数以及局部变量 `n` 的存储会在栈中,除非编译器可以找到通用寄存器。编译器倾向于优先将通用寄存器用作暂存器,因为 CPU 对这些寄存器的访问速度很快(一个时钟周期)。然而,这些寄存器在台式机、笔记本电脑和手持机器的标准架构上很少(大约 16 个)。 -在只有汇编语言程序员才能看到的实施层面,栈被组织为具有 **push**(插入)和 **pop**(删除)操作的 LIFO(后进先出)列表。 **top** 指针可以作为偏移的基地址;这样,除了 **top** 之外的栈位置也变得可访问了。例如,表达式 **top+16** 指向堆栈的 **top** 指针上方 16 个字节的位置,表达式 **top-16** 指向 **top** 指针下方 16 个字节的位置。因此,可以通过 **top** 指针访问实现了暂存器存储的栈的位置。在标准的 ARM 或 Intel 架构中,栈从高内存地址增长到低内存地址;因此,减小某进程的 **top** 就是增大其栈规模。 +在只有汇编语言程序员才能看到的实施层面,栈被组织为具有 `push`(插入)和 `pop`(删除)操作的 LIFO(后进先出)列表。 `top` 指针可以作为偏移的基地址;这样,除了 `top` 之外的栈位置也变得可访问了。例如,表达式 `top+16` 指向堆栈的 `top` 指针上方 16 个字节的位置,表达式 `top-16` 指向 `top` 指针下方 16 个字节的位置。因此,可以通过 `top` 指针访问实现了暂存器存储的栈的位置。在标准的 ARM 或 Intel 架构中,栈从高内存地址增长到低内存地址;因此,减小某进程的 `top` 就是增大其栈规模。 使用栈结构就意味着轻松高效地使用内存。编译器(而非程序员)会编写管理栈的代码,管理过程通过分配和释放所需的暂存器存储来实现;程序员声明函数参数和局部变量,将实现过程交给编译器。此外,完全相同的栈存储可以在连续的函数调用和代码块(如循环)中重复使用。精心设计的模块化代码会将栈存储作为暂存器的首选内存选项,同时优化编译器要尽可能使用通用寄存器而不是栈。 -**堆** 提供的存储是通过程序员代码显式分配的,堆分配的语法因语言而异。在 C 中,成功调用库函数 **malloc**(或其变体 **calloc** 等)会分配指定数量的字节(在 C++ 和 Java 等语言中,**new** 运算符具有相同的用途)。编程语言在如何释放堆分配的存储方面有着巨大的差异: +**堆** 提供的存储是通过程序员代码显式分配的,堆分配的语法因语言而异。在 C 中,成功调用库函数 `malloc`(或其变体 `calloc` 等)会分配指定数量的字节(在 C++ 和 Java 等语言中,`new` 运算符具有相同的用途)。编程语言在如何释放堆分配的存储方面有着巨大的差异: * 在 Java、Go、Lisp 和 Python 等语言中,程序员不会显式释放动态分配的堆存储。 -例如,下面这个 Java 语句为一个字符串分配了堆存储,并将这个堆存储的地址存储在变量 **greeting** 中: + 例如,下面这个 Java 语句为一个字符串分配了堆存储,并将这个堆存储的地址存储在变量 `greeting` 中: + ``` + String greeting = new String("Hello, world!"); + ``` -``` -String greeting = new String("Hello, world!"); -``` - -Java 有一个垃圾回收器,它是一个运行时实用程序,如果进程无法再访问自己分配的堆存储,回收器可以使其自动释放。因此,Java 堆释放是通过垃圾收集器自动进行的。在上面的示例中,垃圾收集器将在变量 **greeting** 超出作用域后,释放字符串的堆存储。 + Java 有一个垃圾回收器,它是一个运行时实用程序,如果进程无法再访问自己分配的堆存储,回收器可以使其自动释放。因此,Java 堆释放是通过垃圾收集器自动进行的。在上面的示例中,垃圾收集器将在变量 `greeting` 超出作用域后,释放字符串的堆存储。 * Rust 编译器会编写堆释放代码。这是 Rust 在不依赖垃圾回收器的情况下,使堆释放实现自动化的开创性努力,但这也会带来运行时复杂性和开销。向 Rust 的努力致敬! - * 在 C(和 C++)中,堆释放是程序员的任务。程序员调用 **malloc** 分配堆存储,然后负责相应地调用库函数 **free** 来释放该存储空间(在 C++ 中,**new** 运算符分配堆存储,而 **delete** 和 **delete[]** 运算符释放此类存储)。下面是一个 C 语言代码示例: + * 在 C(和 C++)中,堆释放是程序员的任务。程序员调用 `malloc` 分配堆存储,然后负责相应地调用库函数 `free` 来释放该存储空间(在 C++ 中,`new` 运算符分配堆存储,而 `delete` 和 `delete[]` 运算符释放此类存储)。下面是一个 C 语言代码示例: -``` -char* greeting = malloc(14);       /* 14 heap bytes */ -strcpy(greeting, "Hello, world!"); /* copy greeting into bytes */ -puts(greeting);                    /* print greeting */ -free(greeting);                    /* free malloced bytes */ -``` + ``` + char* greeting = malloc(14);       /* 14 heap bytes */ + strcpy(greeting, "Hello, world!"); /* copy greeting into bytes */ + puts(greeting);                    /* print greeting */ + free(greeting);                    /* free malloced bytes */ + ``` -C 语言避免了垃圾回收器的成本和复杂性,但也不过是让程序员承担了堆释放的任务。 + C 语言避免了垃圾回收器的成本和复杂性,但也不过是让程序员承担了堆释放的任务。 内存的 **静态区** 为可执行代码(例如 C 语言函数)、字符串文字(例如“Hello, world!”)和全局变量提供存储空间: @@ -77,7 +77,7 @@ int main() {                 /* function */ ### 栈存储 -想象一个有各种连续执行的任务的程序,任务包括了处理每隔几分钟通过网络下载并存储在本地文件中的数字数据。下面的 **stack** 程序简化了处理流程(仅是将奇数整数值转换为偶数),而将重点放在栈存储的好处上。 +想象一个有各种连续执行的任务的程序,任务包括了处理每隔几分钟通过网络下载并存储在本地文件中的数字数据。下面的 `stack` 程序简化了处理流程(仅是将奇数整数值转换为偶数),而将重点放在栈存储的好处上。 ``` @@ -126,11 +126,11 @@ int main() { } ``` -底部的 **main** 函数首先调用 **process_data** 函数,该函数会创建一个基于栈的数组,其大小由参数 **n** 给定(当前示例中为 128,000)。因此,该数组占用 128,000 x **sizeof(int)** 个字节,在标准设备上达到了 512,000 字节(**int** 在这些设备上是四个字节)。然后数据会被读入数组(使用库函数 **fread**),循环处理,并保存到本地文件 **outgoing.dat**(使用库函数**fwrite**)。 +底部的 `main` 函数首先调用 `process_data` 函数,该函数会创建一个基于栈的数组,其大小由参数 `n` 给定(当前示例中为 128,000)。因此,该数组占用 `128000 * sizeof(int)` 个字节,在标准设备上达到了 512,000 字节(`int` 在这些设备上是四个字节)。然后数据会被读入数组(使用库函数 `fread`),循环处理,并保存到本地文件 `outgoing.dat`(使用库函数 `fwrite`)。 -当 **process_data** 函数返回到其调用者 **main** 函数时,**process_data** 函数的大约 500MB 栈暂存器可供 **stack** 程序中的其他函数用作暂存器。在此示例中,**main** 函数接下来调用存根函数 **other_task1** 和 **other_task2**。这三个函数在 **main** 中依次调用,这意味着所有三个函数都可以使用相同的堆栈存储作为暂存器。因为编写栈管理代码的是编译器而不是程序员,所以这种方法对程序员来说既高效又容易。 +当 `process_data` 函数返回到其调用者 `main` 函数时,`process_data` 函数的大约 500MB 栈暂存器可供 `stack` 程序中的其他函数用作暂存器。在此示例中,`main` 函数接下来调用存根函数 `other_task1` 和 `other_task2`。这三个函数在 `main` 中依次调用,这意味着所有三个函数都可以使用相同的堆栈存储作为暂存器。因为编写栈管理代码的是编译器而不是程序员,所以这种方法对程序员来说既高效又容易。 -在 C 语言中,在块(例如函数或循环体)内定义的任何变量默认都有一个 **auto** 存储类,这意味着该变量是基于栈的。存储类 **register** 现在已经过时了,因为 C 编译器会主动尝试尽可能使用 CPU 寄存器。只有在块内定义的变量可能是 **register**,如果没有可用的 CPU 寄存器,编译器会将其更改为 **auto**。基于栈的编程可能是不错的首选方式,但这种风格确实有一些挑战性。下面的 **badStack** 程序说明了这点。 +在 C 语言中,在块(例如函数或循环体)内定义的任何变量默认都有一个 `auto` 存储类,这意味着该变量是基于栈的。存储类 `register` 现在已经过时了,因为 C 编译器会主动尝试尽可能使用 CPU 寄存器。只有在块内定义的变量可能是 `register`,如果没有可用的 CPU 寄存器,编译器会将其更改为 `auto`。基于栈的编程可能是不错的首选方式,但这种风格确实有一些挑战性。下面的 `badStack` 程序说明了这点。 ``` #include ; @@ -155,9 +155,9 @@ int main() { } ``` -**badStack** 程序中的控制流程很简单。**main** 函数使用 16(LCTT译注:原文为 128,应为作者笔误)作为参数调用函数 **get_array**,然后被调用函数会使用传入参数来创建对应大小的本地数组。**get_array** 函数会初始化数组并返回给 **main** 中的数组标识符 **arr**。 **arr** 是一个指针常量,保存数组的第一个 **int** 元素的地址。 +`badStack` 程序中的控制流程很简单。`main` 函数使用 16(LCTT 译注:原文为 128,应为作者笔误)作为参数调用函数 `get_array`,然后被调用函数会使用传入参数来创建对应大小的本地数组。`get_array` 函数会初始化数组并返回给 `main` 中的数组标识符 `arr`。 `arr` 是一个指针常量,保存数组的第一个 `int` 元素的地址。 -当然,本地数组 **arr** 可以在 **get_array** 函数中访问,但是一旦 **get_array** 返回,就不能合法访问该数组。尽管如此,**main** 函数会尝试使用函数 **get_array** 返回的堆栈地址 **arr** 来打印基于栈的数组。现代编译器会警告错误。例如,下面是来自 GNU 编译器的警告: +当然,本地数组 `arr` 可以在 `get_array` 函数中访问,但是一旦 `get_array` 返回,就不能合法访问该数组。尽管如此,`main` 函数会尝试使用函数 `get_array` 返回的堆栈地址 `arr` 来打印基于栈的数组。现代编译器会警告错误。例如,下面是来自 GNU 编译器的警告: ``` badStack.c: In function 'get_array': @@ -165,7 +165,7 @@ badStack.c:9:10: warning: function returns address of local variable [-Wreturn-l return arr;  /** ERROR **/ ``` -一般规则是,如果使用栈存储实现局部变量,应该仅在该变量所在的代码块内,访问这块基于栈的存储(在本例中,数组指针 **arr** 和循环计数器 **i** 均为这样的局部变量)。因此,函数永远不应该返回指向基于栈存储的指针。 +一般规则是,如果使用栈存储实现局部变量,应该仅在该变量所在的代码块内,访问这块基于栈的存储(在本例中,数组指针 `arr` 和循环计数器 `i` 均为这样的局部变量)。因此,函数永远不应该返回指向基于栈存储的指针。 ### 堆存储 @@ -201,17 +201,17 @@ int main() { } ``` -上面的 **heap** 程序有两个函数: **main** 函数使用参数(示例中为 100)调用 **get_heap_array** 函数,参数用来指定数组应该有多少个 **int** 元素。因为堆分配可能会失败,**main** 函数会检查 **get_heap_array** 是否返回了 **NULL**;如果是,则表示失败。如果分配成功,**main** 将打印数组中的 **int** 值,然后立即调用库函数 **free** 来对堆存储解除分配。这就是最优的方案。 +上面的 `heap` 程序有两个函数: `main` 函数使用参数(示例中为 100)调用 `get_heap_array` 函数,参数用来指定数组应该有多少个 `int` 元素。因为堆分配可能会失败,`main` 函数会检查 `get_heap_array` 是否返回了 `NULL`;如果是,则表示失败。如果分配成功,`main` 将打印数组中的 `int` 值,然后立即调用库函数 `free` 来对堆存储解除分配。这就是最优的方案。 -**get_heap_array** 函数以下列语句开头,该语句值得仔细研究一下: +`get_heap_array` 函数以下列语句开头,该语句值得仔细研究一下: ``` int* heap_nums = malloc(sizeof(int) * n); /* heap allocation */ ``` -**malloc** 库函数及其变体函数针对字节进行操作;因此,**malloc** 的参数是 **n** 个 **int** 类型元素所需的字节数(**sizeof(int)** 在标准现代设备上是四个字节)。**malloc** 函数返回所分配字节段的首地址,如果失败则返回 **NULL** . +`malloc` 库函数及其变体函数针对字节进行操作;因此,`malloc` 的参数是 `n` 个 `int` 类型元素所需的字节数(`sizeof(int)` 在标准现代设备上是四个字节)。`malloc` 函数返回所分配字节段的首地址,如果失败则返回 `NULL` . -如果成功调用 **malloc**,在现代台式机上其返回的地址大小为 64 位。在手持设备和早些时候的台式机上,该地址的大小可能是 32 位,或者甚至更小,具体取决于其年代。堆分配数组中的元素是 **int** 类型,这是一个四字节的有符号整数。这些堆分配的 **int** 的地址存储在基于栈的局部变量 **heap_nums** 中。可以参考下图: +如果成功调用 `malloc`,在现代台式机上其返回的地址大小为 64 位。在手持设备和早些时候的台式机上,该地址的大小可能是 32 位,或者甚至更小,具体取决于其年代。堆分配数组中的元素是 `int` 类型,这是一个四字节的有符号整数。这些堆分配的 `int` 的地址存储在基于栈的局部变量 `heap_nums` 中。可以参考下图: ```                  heap-based @@ -221,29 +221,29 @@ int* heap_nums = malloc(sizeof(int) * n); /* heap allocation */               +----+----+   +----+ ``` -一旦 **get_heap_array** 函数返回,指针变量 **heap_nums** 的栈存储将自动回收——但动态 **int** 数组的堆存储仍然存在,这就是 **get_heap_array** 函数返回这个地址(的副本)给 **main** 函数的原因:它现在负责在打印数组的整数后,通过调用库函数 **free** 显式释放堆存储: +一旦 `get_heap_array` 函数返回,指针变量 `heap_nums` 的栈存储将自动回收——但动态 `int` 数组的堆存储仍然存在,这就是 `get_heap_array` 函数返回这个地址(的副本)给 `main` 函数的原因:它现在负责在打印数组的整数后,通过调用库函数 `free` 显式释放堆存储: ``` free(heap_nums); /* free the heap storage */ ``` -**malloc** 函数不会初始化堆分配的存储空间,因此里面是随机值。相比之下,其变体函数 **calloc** 会将分配的存储初始化为零。这两个函数都返回 **NULL** 来表示分配失败。 +`malloc` 函数不会初始化堆分配的存储空间,因此里面是随机值。相比之下,其变体函数 `calloc` 会将分配的存储初始化为零。这两个函数都返回 `NULL` 来表示分配失败。 -在 **heap** 示例中,**main** 函数在调用 **free** 后会立即返回,正在执行的程序会终止,这会让系统回收所有已分配的堆存储。尽管如此,程序员应该养成在不再需要时立即显式释放堆存储的习惯。 +在 `heap` 示例中,`main` 函数在调用 `free` 后会立即返回,正在执行的程序会终止,这会让系统回收所有已分配的堆存储。尽管如此,程序员应该养成在不再需要时立即显式释放堆存储的习惯。 ### 嵌套堆分配 下一个代码示例会更棘手一些。C 语言有很多返回指向堆存储的指针的库函数。下面是一个常见的使用情景: -1\. C 程序调用一个库函数,该函数返回一个指向基于堆的存储的指针,而指向的存储通常是一个聚合体,如数组或结构体: +1、C 程序调用一个库函数,该函数返回一个指向基于堆的存储的指针,而指向的存储通常是一个聚合体,如数组或结构体: ``` SomeStructure* ptr = lib_function(); /* returns pointer to heap storage */ ``` -2\. 然后程序使用所分配的存储。 +2、 然后程序使用所分配的存储。 -3\. 对于清理而言,问题是对 **free** 的简单调用是否会清理库函数分配的所有堆分配存储。例如,**SomeStructure** 实例可能有指向堆分配存储的字段。一个特别麻烦的情况是动态分配的结构体数组,每个结构体有一个指向又一层动态分配的存储的字段。下面的代码示例说明了这个问题,并重点关注了如何设计一个可以安全地为客户端提供堆分配存储的库。 +3、 对于清理而言,问题是对 `free` 的简单调用是否会清理库函数分配的所有堆分配存储。例如,`SomeStructure` 实例可能有指向堆分配存储的字段。一个特别麻烦的情况是动态分配的结构体数组,每个结构体有一个指向又一层动态分配的存储的字段。下面的代码示例说明了这个问题,并重点关注了如何设计一个可以安全地为客户端提供堆分配存储的库。 ``` #include @@ -299,7 +299,7 @@ int main() { } ``` -上面的 **nestedHeap** 程序示例以结构体 **HeapStruct** 为中心,结构体中又有名为 **heap_nums** 的指针字段: +上面的 `nestedHeap` 程序示例以结构体 `HeapStruct` 为中心,结构体中又有名为 `heap_nums` 的指针字段: ``` typedef struct { @@ -309,7 +309,7 @@ typedef struct { } HeapStruct; ``` -函数 **get_heap_struct** 尝试为 **HeapStruct** 实例分配堆存储,这需要为字段 **heap_nums** 指向的若干个 **float** 变量分配堆存储。如果成功调用 **get_heap_struct** 函数,并将指向堆分配结构体的指针以 **hs** 命名,其结果可以描述如下: +函数 `get_heap_struct` 尝试为 `HeapStruct` 实例分配堆存储,这需要为字段 `heap_nums` 指向的若干个 `float` 变量分配堆存储。如果成功调用 `get_heap_struct` 函数,并将指向堆分配结构体的指针以 `hs` 命名,其结果可以描述如下: ``` hs-->HeapStruct instance @@ -318,7 +318,7 @@ hs-->HeapStruct instance         heap_nums-->N contiguous float elements ``` -在 **get_heap_struct** 函数中,第一个堆分配过程很简单: +在 `get_heap_struct` 函数中,第一个堆分配过程很简单: ``` HeapStruct* heap_struct = malloc(sizeof(HeapStruct)); @@ -326,9 +326,9 @@ if (NULL == heap_struct) /* failure? */   return NULL;           /* if so, return NULL */ ``` -**sizeof(HeapStruct)** 包括了 **heap_nums** 字段的字节数(32 位机器上为 4,64 位机器上为 8),**heap_nums** 字段则是指向动态分配数组中的 **float** 元素的指针。那么,问题关键在于 **malloc** 为这个结构体传送了字节空间还是表示失败的 **NULL**;如果是 **NULL**,**get_heap_struct** 函数就也返回 **NULL** 以通知调用者堆分配失败。 +`sizeof(HeapStruct)` 包括了 `heap_nums` 字段的字节数(32 位机器上为 4,64 位机器上为 8),`heap_nums` 字段则是指向动态分配数组中的 `float` 元素的指针。那么,问题关键在于 `malloc` 为这个结构体传送了字节空间还是表示失败的 `NULL`;如果是 `NULL`,`get_heap_struct` 函数就也返回 `NULL` 以通知调用者堆分配失败。 -第二步尝试堆分配的过程更复杂,因为在这一步,**HeapStruct** 的堆存储已经分配好了: +第二步尝试堆分配的过程更复杂,因为在这一步,`HeapStruct` 的堆存储已经分配好了: ``` heap_struct->heap_nums = malloc(sizeof(float) * n); @@ -338,13 +338,13 @@ if (NULL == heap_struct->heap_nums) {  /* failure? */ } ``` -传递给 **get_heap_struct** 函数的参数 **n** 指明动态分配的 **heap_nums** 数组中应该有多少个 **float** 元素。如果可以分配所需的若干个 **float** 元素,则该函数在返回 **HeapStruct** 的堆地址之前会设置结构的 **id** 和 **len** 字段。 但是,如果尝试分配失败,则需要两个步骤来实现最优方案: +传递给 `get_heap_struct` 函数的参数 `n` 指明动态分配的 `heap_nums` 数组中应该有多少个 `float` 元素。如果可以分配所需的若干个 `float` 元素,则该函数在返回 `HeapStruct` 的堆地址之前会设置结构的 `id` 和 `len` 字段。 但是,如果尝试分配失败,则需要两个步骤来实现最优方案: -1\. 必须释放 **HeapStruct** 的存储以避免内存泄漏。对于调用 **get_heap_struct** 的客户端函数而言,没有动态 **heap_nums** 数组的 **HeapStruct** 可能就是没用的;因此,**HeapStruct** 实例的字节空间应该显式释放,以便系统可以回收这些空间用于未来的堆分配。 +1、 必须释放 `HeapStruct` 的存储以避免内存泄漏。对于调用 `get_heap_struct` 的客户端函数而言,没有动态 `heap_nums` 数组的 `HeapStruct` 可能就是没用的;因此,`HeapStruct` 实例的字节空间应该显式释放,以便系统可以回收这些空间用于未来的堆分配。 -2\. 返回 **NULL** 以标识失败。 +2、 返回 `NULL` 以标识失败。 -如果成功调用 **get_heap_struct** 函数,那么释放堆存储也很棘手,因为它涉及要以正确顺序进行的两次 **free** 操作。因此,该程序设计了一个 **free_all** 函数,而不是要求程序员再去手动实现两步释放操作。回顾一下,**free_all** 函数是这样的: +如果成功调用 `get_heap_struct` 函数,那么释放堆存储也很棘手,因为它涉及要以正确顺序进行的两次 `free` 操作。因此,该程序设计了一个 `free_all` 函数,而不是要求程序员再去手动实现两步释放操作。回顾一下,`free_all` 函数是这样的: ``` void free_all(HeapStruct* heap_struct) { @@ -356,18 +356,18 @@ void free_all(HeapStruct* heap_struct) { } ``` -检查完参数 **heap_struct** 不是 **NULL** 值后,函数首先释放 **heap_nums** 数组,这步要求 **heap_struct** 指针此时仍然是有效的。先释放 **heap_struct** 的做法是错误的。一旦 **heap_nums** 被释放,**heap_struct** 就可以释放了。如果 **heap_struct** 被释放,但 **heap_nums** 没有被释放,那么数组中的 **float** 元素就会泄漏:仍然分配了字节空间,但无法被访问到——因此一定要记得释放 **heap_nums**。存储泄漏将一直持续,直到 **nestedHeap** 程序退出,系统回收泄漏的字节时为止。 +检查完参数 `heap_struct` 不是 `NULL` 值后,函数首先释放 `heap_nums` 数组,这步要求 `heap_struct` 指针此时仍然是有效的。先释放 `heap_struct` 的做法是错误的。一旦 `heap_nums` 被释放,`heap_struct` 就可以释放了。如果 `heap_struct` 被释放,但 `heap_nums` 没有被释放,那么数组中的 `float` 元素就会泄漏:仍然分配了字节空间,但无法被访问到——因此一定要记得释放 `heap_nums`。存储泄漏将一直持续,直到 `nestedHeap` 程序退出,系统回收泄漏的字节时为止。 -关于 **free** 库函数的注意事项就是要有顺序。回想一下上面的调用示例: +关于 `free` 库函数的注意事项就是要有顺序。回想一下上面的调用示例: ``` free(heap_struct->heap_nums); /* first free encapsulated aggregate */ free(heap_struct);            /* then free containing structure */ ``` -这些调用释放了分配的存储空间——但它们并 _不是_ 将它们的操作参数设置为 **NULL**(**free** 函数会获取地址的副本作为参数;因此,将副本更改为 **NULL** 并不会改变原地址上的参数值)。例如,在成功调用 **free** 之后,指针 **heap_struct** 仍然持有一些堆分配字节的堆地址,但是现在使用这个地址将会产生错误,因为对 **free** 的调用使得系统有权回收然后重用这些分配过的字节。 +这些调用释放了分配的存储空间——但它们并 _不是_ 将它们的操作参数设置为 `NULL`(`free` 函数会获取地址的副本作为参数;因此,将副本更改为 `NULL` 并不会改变原地址上的参数值)。例如,在成功调用 `free` 之后,指针 `heap_struct` 仍然持有一些堆分配字节的堆地址,但是现在使用这个地址将会产生错误,因为对 `free` 的调用使得系统有权回收然后重用这些分配过的字节。 -使用 **NULL** 参数调用 **free** 没有意义,但也没有什么坏处。而在非 **NULL** 的地址上重复调用 **free** 会导致不确定结果的错误: +使用 `NULL` 参数调用 `free` 没有意义,但也没有什么坏处。而在非 `NULL` 的地址上重复调用 `free` 会导致不确定结果的错误: ``` free(heap_struct);  /* 1st call: ok */ @@ -384,9 +384,9 @@ nums[0] = 3.14f;                          /* and so on */ nums = malloc(sizeof(float) * 25);        /* 25 new floats */ ``` -假如第一个 **malloc** 成功,第二个 **malloc** 会再将 **nums** 指针重置为 **NULL**(分配失败情况下)或是新分配的 25 个 **float** 中第一个的地址。最初分配的 10 个 **float** 元素的堆存储仍然处于被分配状态,但此时已无法再对其访问,因为 **nums** 指针要么指向别处,要么是 **NULL**。结果就是造成了 40 个字节 (**sizeof(float) * 10**) 的泄漏。 +假如第一个 `malloc` 成功,第二个 `malloc` 会再将 `nums` 指针重置为 `NULL`(分配失败情况下)或是新分配的 25 个 `float` 中第一个的地址。最初分配的 10 个 `float` 元素的堆存储仍然处于被分配状态,但此时已无法再对其访问,因为 `nums` 指针要么指向别处,要么是 `NULL`。结果就是造成了 40 个字节(`sizeof(float) * 10`)的泄漏。 -在第二次调用 **malloc** 之前,应该释放最初分配的存储空间: +在第二次调用 `malloc` 之前,应该释放最初分配的存储空间: ``` float* nums = malloc(sizeof(float) * 10); /* 10 floats */ @@ -395,13 +395,13 @@ free(nums);                               /** good **/ nums = malloc(sizeof(float) * 25);        /* no leakage */ ``` -即使没有泄漏,堆也会随着时间的推移而碎片化,需要对系统进行碎片整理。例如,假设两个最大的堆块当前的大小分别为 200MB 和 100MB。然而,这两个堆块并不连续,进程 **P** 此时又需要分配 250MB 的连续堆存储。在进行分配之前,系统可能要对堆进行 _碎片整理_ 以给 **P** 提供 250MB 连续存储空间。碎片整理很复杂,因此也很耗时。 +即使没有泄漏,堆也会随着时间的推移而碎片化,需要对系统进行碎片整理。例如,假设两个最大的堆块当前的大小分别为 200MB 和 100MB。然而,这两个堆块并不连续,进程 `P` 此时又需要分配 250MB 的连续堆存储。在进行分配之前,系统可能要对堆进行 _碎片整理_ 以给 `P` 提供 250MB 连续存储空间。碎片整理很复杂,因此也很耗时。 内存泄漏会创建处于已分配状态但不可访问的堆块,从而会加速碎片化。因此,释放不再需要的堆存储是程序员帮助减少碎片整理需求的一种方式。 ### 诊断内存泄漏的工具 -有很多工具可用于分析内存效率和安全性,其中我最喜欢的是 [valgrind][11]。为了说明该工具如何处理内存泄漏,这里给出 **leaky** 示例程序: +有很多工具可用于分析内存效率和安全性,其中我最喜欢的是 [valgrind][11]。为了说明该工具如何处理内存泄漏,这里给出 `leaky` 示例程序: ``` #include @@ -431,15 +431,15 @@ int main() { } ``` -**main** 函数调用了 **get_ints** 函数,后者会试着从堆中 **malloc** 32 个 4 字节的 **int**,然后初始化动态数组(如果 **malloc** 成功)。初始化成功后,**main** 函数会调用 **print_ints**函数。程序中并没有调用 **free** 来对应 **malloc** 操作;因此,内存泄漏了。 +`main` 函数调用了 `get_ints` 函数,后者会试着从堆中 `malloc` 32 个 4 字节的 `int`,然后初始化动态数组(如果 `malloc` 成功)。初始化成功后,`main` 函数会调用 `print_ints`函数。程序中并没有调用 `free` 来对应 `malloc` 操作;因此,内存泄漏了。 -如果安装了 **valgrind** 工具箱,下面的命令会检查 **leaky** 程序是否存在内存泄漏(**%** 是命令行提示符): +如果安装了 `valgrind` 工具箱,下面的命令会检查 `leaky` 程序是否存在内存泄漏(`%` 是命令行提示符): ``` % valgrind --leak-check=full ./leaky ``` -绝大部分输出都在下面给出了。左边的数字 207683 是正在执行的 **leaky** 程序的进程标识符。这份报告给出了泄漏发生位置的详细信息,本例中位置是在 **main** 函数所调用的 **get_ints** 函数中对 **malloc** 的调用处。 +绝大部分输出都在下面给出了。左边的数字 207683 是正在执行的 `leaky` 程序的进程标识符。这份报告给出了泄漏发生位置的详细信息,本例中位置是在 `main` 函数所调用的 `get_ints` 函数中对 `malloc` 的调用处。 ``` ==207683== HEAP SUMMARY: @@ -459,7 +459,7 @@ int main() { ==207683==   suppressed: 0 bytes in 0 blocks ``` -如果把 **main** 函数改成在对 **print_ints** 的调用之后,再加上一个对 **free** 的调用,**valgrind** 就会对 **leaky** 程序给出一个干净的内存健康清单: +如果把 `main` 函数改成在对 `print_ints` 的调用之后,再加上一个对 `free` 的调用,`valgrind` 就会对 `leaky` 程序给出一个干净的内存健康清单: ``` ==218462== All heap blocks were freed -- no leaks are possible @@ -467,9 +467,9 @@ int main() { ### 静态区存储 -在正统的 C 语言中,函数必须在所有块之外定义。这是一些 C 编译器支持的特性,杜绝了在另一个函数体内定义一个函数的可能。我举的例子都是在所有块之外定义的函数。这样的函数要么是 **static** 即静态的,要么是 **extern** 即外部的,其中 **extern** 是默认值。 +在正统的 C 语言中,函数必须在所有块之外定义。这是一些 C 编译器支持的特性,杜绝了在另一个函数体内定义一个函数的可能。我举的例子都是在所有块之外定义的函数。这样的函数要么是 `static` ,即静态的,要么是 `extern`,即外部的,其中 `extern` 是默认值。 -C 语言中,以 **static** 或 **extern** 修饰的函数和变量驻留在内存中所谓的 **静态区** 中,因为在程序执行期间该区域大小是固定不变的。这两个存储类型的语法非常复杂,我们应该回顾一下。在回顾之后,会有一个完整的代码示例来生动展示语法细节。在所有块之外定义的函数或变量默认为 **extern**;因此,函数和变量要想存储类型为 **static** ,必须显式指定: +C 语言中,以 `static` 或 `extern` 修饰的函数和变量驻留在内存中所谓的 **静态区** 中,因为在程序执行期间该区域大小是固定不变的。这两个存储类型的语法非常复杂,我们应该回顾一下。在回顾之后,会有一个完整的代码示例来生动展示语法细节。在所有块之外定义的函数或变量默认为 `extern`;因此,函数和变量要想存储类型为 `static` ,必须显式指定: ``` /** file1.c: outside all blocks, five definitions  **/ @@ -481,7 +481,7 @@ int num1;        /* extern */ static int num2; /* static */ ``` -**extern** 和 **static** 的区别在于作用域:**extern** 修饰的函数或变量可以实现跨文件可见(需要声明)。相比之下,**static** 修饰的函数仅在 _定义_ 该函数的文件中可见,而 **static** 修饰的变量仅在 _定义_ 该变量的文件(或文件中的块)中可见: +`extern` 和 `static` 的区别在于作用域:`extern` 修饰的函数或变量可以实现跨文件可见(需要声明)。相比之下,`static` 修饰的函数仅在 _定义_ 该函数的文件中可见,而 `static` 修饰的变量仅在 _定义_ 该变量的文件(或文件中的块)中可见: ``` static int n1;    /* scope is the file */ @@ -491,18 +491,18 @@ void func() { } ``` -如果在所有块之外定义了 **static** 变量,例如上面的 **n1**,该变量的作用域就是定义变量的文件。无论在何处定义 **static** 变量,变量的存储都在内存的静态区中。 +如果在所有块之外定义了 `static` 变量,例如上面的 `n1`,该变量的作用域就是定义变量的文件。无论在何处定义 `static` 变量,变量的存储都在内存的静态区中。 -**extern** 函数或变量在给定文件中的所有块之外定义,但这样定义的函数或变量也可以在其他文件中声明。典型的做法是在头文件中 _声明_ 这样的函数或变量,只要需要就可以包含进来。下面这些简短的例子阐述了这些棘手的问题。 +`extern` 函数或变量在给定文件中的所有块之外定义,但这样定义的函数或变量也可以在其他文件中声明。典型的做法是在头文件中 _声明_ 这样的函数或变量,只要需要就可以包含进来。下面这些简短的例子阐述了这些棘手的问题。 -假设 **extern** 函数 **foo** 在 **file1.c** 中 _定义_,有无关键字 **extern** 效果都一样: +假设 `extern` 函数 `foo` 在 `file1.c` 中 _定义_,有无关键字 `extern` 效果都一样: ``` /** file1.c **/ int foo(int n) { return n * 2; } /* definition has a body {...} */ ``` -必须在其他文件(或其中的块)中使用显式的 **extern** _声明_ 此函数才能使其可见。以下是使 **extern** 函数 **foo** 在文件 **file2.c** 中可见的声明语句: +必须在其他文件(或其中的块)中使用显式的 `extern` _声明_ 此函数才能使其可见。以下是使 `extern` 函数 `foo` 在文件 `file2.c` 中可见的声明语句: ``` /** file2.c: make function foo visible here **/ @@ -511,16 +511,16 @@ extern int foo(int); /* declaration (no body) */ 回想一下,函数声明没有用大括号括起来的主体,而函数定义会有这样的主体。 -为了便于查看,函数和变量声明通常会放在头文件中。准备好需要声明的源代码文件,然后就可以 **#include** 相关的头文件。下一节中的 **staticProg** 程序演示了这种方法。 +为了便于查看,函数和变量声明通常会放在头文件中。准备好需要声明的源代码文件,然后就可以 `#include` 相关的头文件。下一节中的 `staticProg` 程序演示了这种方法。 -至于 **extern** 的变量,规则就变得更棘手了(很抱歉增加了难度!)。任何 **extern** 的对象——无论函数或变量——必须 _定义_ 在所有块之外。此外,在所有块之外定义的变量默认为 **extern**: +至于 `extern` 的变量,规则就变得更棘手了(很抱歉增加了难度!)。任何 `extern` 的对象——无论函数或变量——必须 _定义_ 在所有块之外。此外,在所有块之外定义的变量默认为 `extern`: ``` /** outside all blocks **/ int n; /* defaults to extern */ ``` -但是,只有在变量的 _定义_ 中显式初始化变量时,**extern** 才能在变量的 _定义_ 中显式修饰(LCTT译注:换言之,如果下列代码中的 `int n1;` 行前加上 **extern**,该行就由 _定义_ 变成了 _声明_): +但是,只有在变量的 _定义_ 中显式初始化变量时,`extern` 才能在变量的 _定义_ 中显式修饰(LCTT 译注:换言之,如果下列代码中的 `int n1;` 行前加上 `extern`,该行就由 _定义_ 变成了 _声明_): ``` /** file1.c: outside all blocks **/ @@ -529,18 +529,18 @@ extern int n2 = -1; /* ok, initialized explicitly */ int n3 = 9876;      /* ok, extern by default and initialized explicitly */ ``` -要使在 **file1.c** 中定义为 **extern** 的变量在另一个文件(例如 **file2.c**)中可见,该变量必须在 **file2.c** 中显式 _声明_ 为 **extern** 并且不能初始化(初始化会将声明转换为定义): +要使在 `file1.c` 中定义为 `extern` 的变量在另一个文件(例如 `file2.c`)中可见,该变量必须在 `file2.c` 中显式 _声明_ 为 `extern` 并且不能初始化(初始化会将声明转换为定义): ``` /** file2.c **/ extern int n1; /* declaration of n1 defined in file1.c */ ``` -为了避免与 **extern** 变量混淆,经验是在 _声明_ 中显式使用 **extern**(必须),但不要在 _定义_ 中使用(非必须且棘手)。对于函数,**extern** 在定义中是可选使用的,但在声明中是必须使用的。下一节中的 **staticProg** 示例会把这些点整合到一个完整的程序中。 +为了避免与 `extern` 变量混淆,经验是在 _声明_ 中显式使用 `extern`(必须),但不要在 _定义_ 中使用(非必须且棘手)。对于函数,`extern` 在定义中是可选使用的,但在声明中是必须使用的。下一节中的 `staticProg` 示例会把这些点整合到一个完整的程序中。 ### staticProg 示例 -**staticProg** 程序由三个文件组成:两个 C 语言源文件(**static1.c** 和 **static2.c**)以及一个头文件(**static.h**),头文件中包含两个声明: +`staticProg` 程序由三个文件组成:两个 C 语言源文件(`static1.c` 和 `static2.c`)以及一个头文件(`static.h`),头文件中包含两个声明: ``` /** header file static.h **/ @@ -549,7 +549,7 @@ extern int global_nums[NumCount];  /* array declaration */ extern void fill_array();          /* function declaration */ ``` -两个声明中的 **extern**,一个用于数组,另一个用于函数,强调对象在别处(“外部”)_定义_:数组 **global_nums** 在文件 **static1.c** 中定义(没有显式的 **extern**),函数 **fill_array** 在文件 **static2.c** 中定义(也没有显式的 **extern**)。每个源文件都包含了头文件 **static.h**。**static1.c** 文件定义了两个驻留在内存静态区域中的数组(**global_nums** 和 **more_nums**)。第二个数组有 **static** 修饰,这将其作用域限制为定义数组的文件 (**static1.c**)。如前所述, **extern** 修饰的 **global_nums** 则可以实现在多个文件中可见。 +两个声明中的 `extern`,一个用于数组,另一个用于函数,强调对象在别处(“外部”)_定义_:数组 `global_nums` 在文件 `static1.c` 中定义(没有显式的 `extern`),函数 `fill_array` 在文件 `static2.c` 中定义(也没有显式的 `extern`)。每个源文件都包含了头文件 `static.h`。`static1.c` 文件定义了两个驻留在内存静态区域中的数组(`global_nums` 和 `more_nums`)。第二个数组有 `static` 修饰,这将其作用域限制为定义数组的文件 (`static1.c`)。如前所述, `extern` 修饰的 `global_nums` 则可以实现在多个文件中可见。 ``` /** static1.c **/ @@ -576,7 +576,7 @@ int main() { } ``` -下面的 **static2.c** 文件中定义了 **fill_array** 函数,该函数由 **main**(在 **static1.c** 文件中)调用;**fill_array** 函数会给名为 **global_nums** 的 **extern** 数组中的元素赋值,该数组在文件 **static1.c** 中定义。使用两个文件的唯一目的是凸显 **extern** 变量或函数能够跨文件可见。 +下面的 `static2.c` 文件中定义了 `fill_array` 函数,该函数由 `main`(在 `static1.c` 文件中)调用;`fill_array` 函数会给名为 `global_nums` 的 `extern` 数组中的元素赋值,该数组在文件 `static1.c` 中定义。使用两个文件的唯一目的是凸显 `extern` 变量或函数能够跨文件可见。 ``` /** static2.c **/ @@ -588,7 +588,7 @@ void fill_array() { /** definition **/ } ``` -**staticProg** 程序可以如下编译: +`staticProg` 程序可以用如下编译: ``` % gcc -o staticProg static1.c static2.c @@ -596,13 +596,13 @@ void fill_array() { /** definition **/ ### 从汇编语言看更多细节 -现代 C 编译器能够处理 C 和汇编语言的任意组合。编译 C 源文件时,编译器首先将 C 代码翻译成汇编语言。这是对从上文 **static1.c** 文件生成的汇编语言进行保存的命令: +现代 C 编译器能够处理 C 和汇编语言的任意组合。编译 C 源文件时,编译器首先将 C 代码翻译成汇编语言。这是对从上文 `static1.c` 文件生成的汇编语言进行保存的命令: ``` % gcc -S static1.c ``` -生成的文件就是 **static1.s**。这是文件顶部的一段代码,额外添加了行号以提高可读性: +生成的文件就是 `static1.s`。这是文件顶部的一段代码,额外添加了行号以提高可读性: ```     .file    "static1.c"          ## line  1 @@ -620,25 +620,25 @@ main:                             ## line 12 ... ``` -诸如 **.file**(第 1 行)之类的汇编语言指令以句点开头。顾名思义,指令会指导汇编程序将汇编语言翻译成机器代码。**.rodata** 指令(第 6 行)表示后面是只读对象,包括字符串常量 **"%4i\t%4i\n"**(第 8 行),**main** 函数(第 12 行)会使用此字符串常量来实现格式化输出。作为标签引入(通过末尾的冒号实现)的 **main** 函数(第 12 行),同样也是只读的。 +诸如 `.file`(第 1 行)之类的汇编语言指令以句点开头。顾名思义,指令会指导汇编程序将汇编语言翻译成机器代码。`.rodata` 指令(第 6 行)表示后面是只读对象,包括字符串常量 `"%4i\t%4i\n"`(第 8 行),`main` 函数(第 12 行)会使用此字符串常量来实现格式化输出。作为标签引入(通过末尾的冒号实现)的 `main` 函数(第 12 行),同样也是只读的。 -在汇编语言中,标签就是地址。标签 **main:**(第 12 行)标记了 **main** 函数代码开始的地址,标签 **.LC0**:(第 7 行)标记了格式化字符串开头所在的地址。 +在汇编语言中,标签就是地址。标签 `main:`(第 12 行)标记了 `main` 函数代码开始的地址,标签 `.LC0:`(第 7 行)标记了格式化字符串开头所在的地址。 -**global_nums**(第 3 行)和 **more_nums**(第 4 行)数组的定义包含了两个数字:400 是每个数组中的总字节数,32 是每个数组(含 100 个 **int** 元素)中每个元素的比特数。(第 5 行中的 **.comm** 指令表示 **common name**,可以忽略。) +`global_nums`(第 3 行)和 `more_nums`(第 4 行)数组的定义包含了两个数字:400 是每个数组中的总字节数,32 是每个数组(含 100 个 `int` 元素)中每个元素的比特数。(第 5 行中的 `.comm` 指令表示 `common name`,可以忽略。) -两个数组定义的不同之处在于 **more_nums** 被标记为 **.local**(第 4 行),这意味着其作用域仅限于其所在文件 **static1.s**。相比之下,**global_nums** 数组就能在多个文件中实现可见,包括由 **static1.c** 和 **static2.c** 文件翻译成的汇编文件。 +两个数组定义的不同之处在于 `more_nums` 被标记为 `.local`(第 4 行),这意味着其作用域仅限于其所在文件 `static1.s`。相比之下,`global_nums` 数组就能在多个文件中实现可见,包括由 `static1.c` 和 `static2.c` 文件翻译成的汇编文件。 -最后,**.text** 指令在汇编代码段中出现了两次(第 2 行和第 9 行)。术语“text”表示“只读”,但也会涵盖一些读/写变量,例如两个数组中的元素。尽管本文展示的汇编语言是针对 Intel 架构的,但 Arm6 汇编也非常相似。对于这两种架构,**.text** 区域中的变量(本例中为两个数组中的元素)会自动初始化为零。 +最后,`.text` 指令在汇编代码段中出现了两次(第 2 行和第 9 行)。术语“text”表示“只读”,但也会涵盖一些读/写变量,例如两个数组中的元素。尽管本文展示的汇编语言是针对 Intel 架构的,但 Arm6 汇编也非常相似。对于这两种架构,`.text` 区域中的变量(本例中为两个数组中的元素)会自动初始化为零。 ### 总结 C 语言中的内存高效和内存安全编程准则很容易说明,但可能会很难遵循,尤其是在调用设计不佳的库的时候。准则如下: * 尽可能使用栈存储,进而鼓励编译器将通用寄存器用作暂存器,实现优化。栈存储代表了高效的内存使用并促进了代码的整洁和模块化。永远不要返回指向基于栈的存储的指针。 - * 小心使用堆存储。C(和 C++)中的重难点是确保动态分配的存储尽快解除分配。良好的编程习惯和工具(如 **valgrind**)有助于攻关这些重难点。优先选用自身提供释放函数的库,例如 **nestedHeap** 代码示例中的 **free_all** 释放函数。 - * 谨慎使用静态存储,因为这种存储会自始至终地影响进程的内存占用。特别是尽量避免使用 **extern** 和 **static** 数组。 + * 小心使用堆存储。C(和 C++)中的重难点是确保动态分配的存储尽快解除分配。良好的编程习惯和工具(如 `valgrind`)有助于攻关这些重难点。优先选用自身提供释放函数的库,例如 `nestedHeap` 代码示例中的 `free_all` 释放函数。 + * 谨慎使用静态存储,因为这种存储会自始至终地影响进程的内存占用。特别是尽量避免使用 `extern` 和 `static` 数组。 -本文 C 语言代码示例可在我的网站 () 上找到。 +本文 C 语言代码示例可在我的网站()上找到。 -------------------------------------------------------------------------------- @@ -647,7 +647,7 @@ via: https://opensource.com/article/21/8/memory-programming-c 作者:[Marty Kalin][a] 选题:[lujun9972][b] 译者:[unigeorge](https://github.com/unigeorge) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 3097d12a0d3f2f7cb5ddaa56e8b2d0c3111c6963 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 3 Oct 2021 10:14:32 +0800 Subject: [PATCH 058/143] PUB @unigeorge https://linux.cn/article-13845-1.html --- .../20210813 Code memory safety and efficiency by example.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210813 Code memory safety and efficiency by example.md (99%) diff --git a/translated/tech/20210813 Code memory safety and efficiency by example.md b/published/20210813 Code memory safety and efficiency by example.md similarity index 99% rename from translated/tech/20210813 Code memory safety and efficiency by example.md rename to published/20210813 Code memory safety and efficiency by example.md index 37b2d9985b..d962653d8f 100644 --- a/translated/tech/20210813 Code memory safety and efficiency by example.md +++ b/published/20210813 Code memory safety and efficiency by example.md @@ -4,8 +4,8 @@ [#]: collector: "lujun9972" [#]: translator: "unigeorge" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13845-1.html" 实例讲解代码之内存安全与效率 ====== From c448df2cfd368dad6cc640278e1f22516af43ca0 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 3 Oct 2021 11:03:25 +0800 Subject: [PATCH 059/143] PRF @wxy --- ...721 Run GitHub Actions on Fedora CoreOS.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md b/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md index 9badd6a20e..60b032190c 100644 --- a/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md +++ b/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md @@ -3,7 +3,7 @@ [#]: author: (Clément Verna https://fedoramagazine.org/author/cverna/) [#]: collector: (lujun9972) [#]: translator: (wxy) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) @@ -14,7 +14,7 @@ [GitHub Actions][3] 是一项为快速建立持续集成和交付(CI/CD)工作流程而提供的服务。这些工作流程在被称为“运行器runner”的主机上运行。GitHub 提供的 [托管运行器][4] 的操作系统的选择是有限的(Windows Server、Ubuntu、MacOS)。 -另一个选择是使用 [自我托管][5] 运行器,这让仓库管理员对运行器有更多控制。自我托管的运行程序是专门为某个版本库或组织服务的。下面的文章介绍了使用 Fedora CoreOS 配置自我托管运行程序的步骤。 +另一个选择是使用 [自托管][5] 的运行器,这让仓库管理员对运行器有更多控制。自托管的运行程序是专门为某个存储库或组织服务的。下面的文章介绍了使用 Fedora CoreOS 配置自托管运行程序的步骤。 ### 入门 @@ -51,11 +51,11 @@ storage: #### 注册和删除令牌 -为一个项目配置运行程序需要一个“令牌token”。这可以防止在没有正确权限的情况下从项目中注册或删除自我托管的运行器。GitHub 提供的令牌有一个小时的过期时间。如果运行器在这个时间之后重新启动,它将需要一个新的注册令牌。 +为一个项目配置运行器需要一个“令牌token”。这可以防止在没有正确权限的情况下从项目中注册或删除自托管的运行器。GitHub 提供的令牌有一个小时的过期时间。如果运行器在这个时间之后重新启动,它将需要一个新的注册令牌。 -该令牌可能有问题,特别是在 Fedora CoreOS 自动更新时。更新过程希望托管主机在收到新数据后至少每隔几周重启一次。 +该令牌可能出问题,特别是在 Fedora CoreOS 自动更新时。更新过程希望托管主机在收到新数据后至少每隔几周重启一次。 -幸运的是,可以使用 GitHub REST API 来获取这些令牌,并在主机每次重启时自动配置运行器。下面的 `manage-runner.sh` 脚本使用 API 来获取令牌,删除任何已经配置好的运行器,并用新的令牌注册运行器。 +幸运的是,可以使用 GitHub REST API 来获取这些令牌,并在托管主机每次重启时自动配置运行器。下面的 `manage-runner.sh` 脚本使用 API 来获取令牌,删除任何已经配置好的运行器,并用新的令牌注册运行器。 ``` #!/bin/bash @@ -73,7 +73,7 @@ REGISTRATION_TOKEN=$(curl -u ${GITHUB_USER}:${GITHUB_TOKEN} -X POST -H "Accept: /usr/local/sbin/actions-runner/config.sh --url https://github.com/cverna/fcos-actions-runner --token ${REGISTRATION_TOKEN} --labels fcos --unattended ``` -上面的脚本使用了一些环境变量,包含 GitHub 用户名和用于验证 REST API 请求的 [个人访问令牌][9]Personal Access Token。个人访问令牌需要存储库权限,以便成功检索运行者注册和移除令牌。该令牌是安全敏感的,所以最好将其存储在一个具有更严格权限的不同文件中。在这个例子中,这个文件是 `actions-runner`。 +上面的脚本使用了一些环境变量,包含 GitHub 用户名和用于验证 REST API 请求的 [个人访问令牌][9]Personal Access Token。个人访问令牌需要存储库权限,以便成功检索运行器的注册和移除令牌。该令牌是安全敏感信息,所以最好将其存储在一个具有更严格权限的不同文件中。在这个例子中,这个文件是 `actions-runner`。 ``` GITHUB_USER= @@ -142,7 +142,7 @@ systemd: 这将创建两个服务:`github-runner-configure.service`(在主机启动完成后运行一次)和 `github-runner.service`(运行 Actions 运行器二进制文件并等待新的 CI/CD 作业)。 -现在 Butane 配置已经完成,从中生成一个 Ignition 文件并配备一个Fedora CoreOS Actions 运行器。 +现在 Butane 配置已经完成,从中生成一个 Ignition 文件并配备一个 Fedora CoreOS Actions 运行器。 ``` $ podman run -i --rm -v $PWD:/code:z --workdir /code quay.io/coreos/butane:release --pretty --strict --files-dir /code config.yaml -o config.ignition @@ -150,9 +150,9 @@ $ podman run -i --rm -v $PWD:/code:z --workdir /code quay.io/coreos/butane:relea 一旦 Ignition 文件生成,它就可以用来在 [支持][10] Fedora CoreOS 的平台上配备一个运行器。 -### 配置一个 Action 来使用一个自我托管的运行器 +### 配置一个 Action 来使用一个自托管的运行器 -下面的测试 Action 工作流程将测试 FCOS 的自我托管的工作者。在你的 git 存储库中创建以下文件 `.github/workflows/main.yml`。 +下面的测试 Action 工作流程将测试 FCOS 的自托管的运行器。在你的 git 存储库中创建以下文件 `.github/workflows/main.yml`。 ``` # This is a basic workflow to help you get started with Actions @@ -195,7 +195,7 @@ via: https://fedoramagazine.org/run-github-actions-on-fedora-coreos/ 作者:[Clément Verna][a] 选题:[lujun9972][b] 译者:[wxy](https://github.com/wxy) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From ce496fbf792a052a046f7702bbee408b8091bcd9 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 3 Oct 2021 11:03:57 +0800 Subject: [PATCH 060/143] PUB @wxy https://linux.cn/article-13846-1.html --- .../20210721 Run GitHub Actions on Fedora CoreOS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210721 Run GitHub Actions on Fedora CoreOS.md (99%) diff --git a/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md b/published/20210721 Run GitHub Actions on Fedora CoreOS.md similarity index 99% rename from translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md rename to published/20210721 Run GitHub Actions on Fedora CoreOS.md index 60b032190c..0a6ce8b4b6 100644 --- a/translated/tech/20210721 Run GitHub Actions on Fedora CoreOS.md +++ b/published/20210721 Run GitHub Actions on Fedora CoreOS.md @@ -4,8 +4,8 @@ [#]: collector: (lujun9972) [#]: translator: (wxy) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13846-1.html) 在 Fedora CoreOS 上运行 GitHub Actions ====== From 1e9fd6f8bbbee7dbedd592bafb86e7c238fa6088 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 3 Oct 2021 11:11:24 +0800 Subject: [PATCH 061/143] APL --- ...Comparing Linux Mint and Fedora- Which One Should You Use.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md b/sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md index 631a60e504..f12afb8fea 100644 --- a/sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md +++ b/sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md @@ -2,7 +2,7 @@ [#]: via: (https://itsfoss.com/linux-mint-vs-fedora/) [#]: author: (Ankush Das https://itsfoss.com/author/ankush/) [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (wxy) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From 83c5cdc2d530eff26773b71912c72b56a6ddc06a Mon Sep 17 00:00:00 2001 From: unigeorge <40418272+unigeorge@users.noreply.github.com> Date: Sun, 3 Oct 2021 20:25:39 +0800 Subject: [PATCH 062/143] translated --- ...an by writing a -guess the number- game.md | 134 ------------------ ...an by writing a -guess the number- game.md | 129 +++++++++++++++++ 2 files changed, 129 insertions(+), 134 deletions(-) delete mode 100644 sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md create mode 100644 translated/tech/20210104 Learn Fortran by writing a -guess the number- game.md diff --git a/sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md b/sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md deleted file mode 100644 index 89292005f8..0000000000 --- a/sources/tech/20210104 Learn Fortran by writing a -guess the number- game.md +++ /dev/null @@ -1,134 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: (unigeorge) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Learn Fortran by writing a "guess the number" game) -[#]: via: (https://opensource.com/article/21/1/fortran) -[#]: author: (Jim Hall https://opensource.com/users/jim-hall) - -Learn Fortran by writing a "guess the number" game -====== -Because Fortran was written in the punched card era, its syntax is -pretty limited. But you can still write useful and interesting programs -with it. -![Person typing on a 1980's computer][1] - -The first compiled programming language I learned was Fortran 77. While growing up, I taught myself how to write programs in BASIC on the Apple II and later in QBasic on DOS. But when I went to university to study physics, I learned [Fortran][2]. - -Fortran used to be quite common in scientific computing. And once upon a time, all computer systems had a Fortran compiler. Fortran used to be as ubiquitous as Python is today. So if you were a physics student like me, working in the 1990s, you learned Fortran. - -I always thought Fortran was somewhat similar to BASIC, so I quickly took to Fortran whenever I needed to write a quick program to analyze lab data or perform some other numerical analysis. And when I got bored, I wrote a "Guess the number" game in Fortran, where the computer picks a number between one and 100 and asks me to guess the number. The program loops until I guess correctly. - -The "Guess the number" program exercises several concepts in programming languages: how to assign values to variables, how to write statements, and how to perform conditional evaluation and loops. It's a great practical experiment for learning a new programming language. - -### The basics of Fortran programming - -While Fortran has been updated over the years, I am most familiar with Fortran 77, the implementation I learned years ago. Fortran was created when programmers wrote programs on punched cards, so "classic" Fortran is limited to the data you could put on a punched card. That means you could only write classic Fortran programs with these limitations: - - * Only one line of source code per card is allowed. - * Only columns 1–72 are recognized (the last eight columns, 73-80, are reserved for the card sorter). - * Line numbers ("labels") are in columns 1–5. - * Program statements go in columns 7–72. - * To continue a program line, enter a continuation character (usually `+`) in column 6. - * To create a comment line, enter `C` or `*` in column 1. - * Only the characters `A` to `Z` (uppercase), `0` to `9` (numbers), and the special characters `= + - * / ( ) , . $ ' :` and space are used. - - - -With these limitations, you can still write very useful and interesting programs. - -### Guess the number in Fortran - -Explore Fortran by writing the "Guess the number" game. This is my implementation: - - -``` -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -C     PROGRAM TO GUESS A NUMBER 1-100 -CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -      PROGRAM GUESSNUM -      INTEGER SEED, NUMBER, GUESS - -      PRINT *, 'ENTER A RANDOM NUMBER SEED' -      READ *, SEED -      CALL SRAND(SEED) - -      NUMBER = INT( RAND(0) * 100 + 1 ) - -      PRINT *, 'GUESS A NUMBER BETWEEN 1 AND 100' - 10   READ *, GUESS - -      IF (GUESS.LT.NUMBER) THEN -         PRINT *, 'TOO LOW' -      ELSE IF (GUESS.GT.NUMBER) THEN -         PRINT *, 'TOO HIGH' -      ENDIF - -      IF (GUESS.NE.NUMBER) GOTO 10 - -      PRINT *, 'THATS RIGHT!' -      END -``` - -If you are familiar with other programming languages, you can probably figure out what this program is doing by reading the source code. The first three lines are a comment block to indicate the program's function. The fourth line, `PROGRAM GUESSNUM`, identifies this as a program, and it is closed by the `END` statement on the last line. - -After defining a few variables, the program prompts the user to enter a random number seed. A Fortran program cannot initialize the random number generator from the operating system, so you must always start the random number generator with a "seed" value and the `SRAND` subroutine. - -Fortran generates random numbers between 0 and 0.999... with the `RAND(0)` function. The `0` value tells the `RAND` function to generate another random number. Multiply this random number by 100 to generate a number between 0 and 99.999…, and then add 1 to get a value between 1 and 100.999… The `INT` function truncates this to an integer; thus, the variable `NUMBER` is a random number between 1 and 100. - -The program prompts the user, then enters a loop. Fortran doesn't support the `while` or `do-while` loops available in more modern programming languages. Instead, you must construct your own using labels (line numbers) and `GOTO` statements. That's why the `READ` statement has a line number; you can jump to this label with the `GOTO` at the end of the loop. - -Punched cards did not have the `<` (less than) or `>` (greater than) symbols, so Fortran adopted a different syntax to compare values. To test if one value is less than another, use the `.LT.` (less than) comparison. To test if a value is greater than another, use `.GT.` (greater than). Equal and not equal are `.EQ.` and `.NE.`, respectively. - -In each iteration of the loop, the program tests the user's guess. If the user's guess is less than the random number, the program prints `TOO LOW`, and if the guess is greater than the random number, the program prints `TOO HIGH`. The loop continues until the user's guess is the same as the random number. - -When the loop exits, the program prints `THATS RIGHT!` and ends immediately. - - -``` -$ gfortran -Wall -o guess guess.f - -$ ./guess - ENTER A RANDOM NUMBER SEED -93759 - GUESS A NUMBER BETWEEN 1 AND 100 -50 - TOO LOW -80 - TOO HIGH -60 - TOO LOW -70 - TOO LOW -75 - TOO HIGH -73 - TOO LOW -74 - THATS RIGHT! -``` - -Every time you run the program, the user needs to enter a different random number seed. If you always enter the same seed, the program will always pick the same random number. - -### Try it in other languages - -This "guess the number" game is a great introductory program when learning a new programming language because it exercises several common programming concepts in a pretty straightforward way. By implementing this simple game in different programming languages, you can demonstrate some core concepts and compare each language's details. - -Do you have a favorite programming language? How would you write the "guess the number" game in it? Follow this article series to see examples of other programming languages that might interest you. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/1/fortran - -作者:[Jim Hall][a] -选题:[lujun9972][b] -译者:[unigeorge](https://github.com/unigeorge) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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/1980s-computer-yearbook.png?itok=eGOYEKK- (Person typing on a 1980's computer) -[2]: https://en.wikipedia.org/wiki/Fortran diff --git a/translated/tech/20210104 Learn Fortran by writing a -guess the number- game.md b/translated/tech/20210104 Learn Fortran by writing a -guess the number- game.md new file mode 100644 index 0000000000..68103275ca --- /dev/null +++ b/translated/tech/20210104 Learn Fortran by writing a -guess the number- game.md @@ -0,0 +1,129 @@ +[#]: collector: (lujun9972) +[#]: translator: (unigeorge) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Learn Fortran by writing a "guess the number" game) +[#]: via: (https://opensource.com/article/21/1/fortran) +[#]: author: (Jim Hall https://opensource.com/users/jim-hall) + +通过写“猜数字”游戏学习 Fortran +====== + +Fortran 是在打孔卡时代编写的语言,因此它的语法非常有限。但你仍然可以用它编写有用和有趣的程序。 +![Person typing on a 1980's computer][1] + +Fortran 77 是我学习的第一门编译型编程语言。一开始时,我自学了如何在 Apple II 上用 BASIC 编写程序,后来又学会在 DOS 上用 QBasic 编写程序。但是当我去大学攻读物理学时,我又学习了 [Fortran][2]。 + +Fortran 曾经在科学计算中很常见。曾几何时,所有计算机系统都有一个 Fortran 编译器。Fortran 曾经像今天的 Python 一样无处不在。因此,如果你是像我这样的物理学专业学生,在 1990 年代工作,那你肯定学习了 Fortran。 + +我一直认为 Fortran 与 BASIC 有点相似,所以每当我需要编写一个简短程序,来分析实验室数据或执行其他一些数值分析时,我都会很快想到 Fortran。我在空闲时用 Fortran 编写了一个“猜数字”游戏,其中计算机会在 1 到 100 之间选择一个数字,并让我猜这个数字。程序会一直循环,直到我猜对了为止。 + +“猜数字”程序练习了编程语言中的几个概念:如何为变量赋值、如何编写语句以及如何执行条件判断和循环。这是学习新编程语言时一个很好的的实践案例。 + +### Fortran 编程基础 + +虽然 Fortran 这些年来一直在更新,但我最熟悉的还是 Fortran 77,这是我多年前学习的实现版本。Fortran 是程序员还在打孔卡上编程的年代创建的,因此“经典”Fortran 仅限于处理可以放在打孔卡上的数据。这意味着你只能编写符合以下限制条件的经典 Fortran 程序(LCTT 译注:后来的 Fortran 95 等版本已经对这些限制做了很大的改进,如有兴趣**建议直接学习新版**): + + * 每张卡只允许一行源代码。 + * 仅识别第 1-72 列(最后八列,73-80,保留给卡片分类器)。 + * 行号(“标签”)位于第 1-5 列。 + * 程序语句在第 7-72 列。 + * 要表示跨行,请在第 6 列中输入一个连续字符(通常是 `+`)。 + * 要创建注释行,请在第 1 列中输入 `C` 或 `*`。 + * 只有字符`A` 到`Z`(大写字母)、`0` 到`9`(数字)和特殊字符`= + - * / ( ) , . $ ' :` 和空格能够使用。 + +虽然有这些限制,你仍然可以编写非常有用和有趣的程序。 + +### 在 Fortran 中猜数字 + +通过编写“猜数字”游戏来探索 Fortran。这是我的实现代码: + +``` +CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC +C     PROGRAM TO GUESS A NUMBER 1-100 +CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC +      PROGRAM GUESSNUM +      INTEGER SEED, NUMBER, GUESS + +      PRINT *, 'ENTER A RANDOM NUMBER SEED' +      READ *, SEED +      CALL SRAND(SEED) + +      NUMBER = INT( RAND(0) * 100 + 1 ) + +      PRINT *, 'GUESS A NUMBER BETWEEN 1 AND 100' + 10   READ *, GUESS + +      IF (GUESS.LT.NUMBER) THEN +         PRINT *, 'TOO LOW' +      ELSE IF (GUESS.GT.NUMBER) THEN +         PRINT *, 'TOO HIGH' +      ENDIF + +      IF (GUESS.NE.NUMBER) GOTO 10 + +      PRINT *, 'THATS RIGHT!' +      END +``` + +如果你熟悉其他编程语言,你大概可以通过阅读源代码来弄清楚这个程序在做什么。前三行是注释块,表示程序的功能。第四行 `PROGRAM GUESSNUM` 将其标识为一个 程序program,并由最后一行的 `END` 语句关闭。 + +定义变量后,程序会提示用户输入随机数种子。Fortran 程序无法从操作系统初始化随机数生成器,因此你必须始终使用“种子”值和 `SRAND` 子程序subroutine 启动随机数生成器。 + +Fortran 使用 `RAND(0)` 函数生成 0 到 0.999…… 之间的随机数。参数 `0` 告诉 `RAND` 函数生成一个随机数。将此随机数乘以 100 以生成 0 到 99.999…… 之间的数字,然后加 1 得到 1 到 100.999…… 之间的值。`INT` 函数将结果截断为整数;因此,变量 `NUMBER` 就是一个介于 1 到 100 之间的随机数。 + +程序会给出提示,然后进入一个循环。Fortran 不支持更现代的编程语言中可用的 `while` 或 `do-while` 循环(LCTT 译注:Fortran 95 等新版支持,也因此在一定程度上减少了 `GOTO` 的使用)。相反,你必须使用标签(行号)和 `GOTO` 语句来构建自己的循环。这就是 `READ` 语句有一个行号的原因:你可以在循环末尾使用 `GOTO` 跳转到此标签。 + +穿孔卡片没有 `<`(小于)和 `>`(大于)符号,因此 Fortran 采用了另一种语法来进行值比较。要测试一个值是否小于另一个值,请使用 `.LT.`(小于)。要测试一个值是否大于另一个值,请使用 `.GT.`(大于)。等于和不等于分别是 `.EQ.` 和 `.NE.`。 + +在每次循环中,程序都会验证用户的猜测值。如果用户的猜测值小于随机数,程序打印 `TOO LOW`,如果猜测大于随机数,程序打印 `TOO HIGH`。循环会一直持续,直到用户的猜测值等于目标随机数为止。 + +当循环退出时,程序打印 `THATS RIGHT!` 并立即结束运行。 + +``` +$ gfortran -Wall -o guess guess.f + +$ ./guess + ENTER A RANDOM NUMBER SEED +93759 + GUESS A NUMBER BETWEEN 1 AND 100 +50 + TOO LOW +80 + TOO HIGH +60 + TOO LOW +70 + TOO LOW +75 + TOO HIGH +73 + TOO LOW +74 + THATS RIGHT! +``` + +每次运行程序时,用户都需要输入不同的随机数种子。如果你总是输入相同的种子,程序给出的随机数也会一直不变。 + +### 在其他语言中尝试 + +在学习一门新的编程语言时,这个“猜数字”游戏是一个很好的入门程序,因为它以非常简单的方式练习了几个常见的编程概念。通过用不同的编程语言实现这个简单的游戏,你可以弄清一些核心概念以及比较每种语言的细节。 + +你有最喜欢的编程语言吗?如何用你最喜欢的语言来编写“猜数字”游戏?跟随本系列文章来查看你可能感兴趣的其他编程语言示例吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/1/fortran + +作者:[Jim Hall][a] +选题:[lujun9972][b] +译者:[unigeorge](https://github.com/unigeorge) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/1980s-computer-yearbook.png?itok=eGOYEKK- (Person typing on a 1980's computer) +[2]: https://en.wikipedia.org/wiki/Fortran From 947701cfb1bcc2e6432ac99cb198d7a28d4c0b77 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Mon, 4 Oct 2021 05:07:01 +0800 Subject: [PATCH 063/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020211003=20?= =?UTF-8?q?Open=20Source=20Changed=20Linux=20Otherwise=20It=20Was=20Done:?= =?UTF-8?q?=20Linus=20Torvalds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md --- ...x Otherwise It Was Done- Linus Torvalds.md | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 sources/news/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md diff --git a/sources/news/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md b/sources/news/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md new file mode 100644 index 0000000000..2f3d727a51 --- /dev/null +++ b/sources/news/20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md @@ -0,0 +1,59 @@ +[#]: 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: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Open Source Changed Linux Otherwise It Was Done: Linus Torvalds +====== + +You probably already know the story. 30 years ago, Finnish student Linus Torvalds created a UNIX-like operating system as a hobby project. + +What you do not know is that Torvalds thought that the hobby project was done, and he would have left it behind to work on some new and interesting project. + +So, what made his work on this ‘hobby project’ for 30 years? The answer is open source. + +### Open source changed Linux + +At the recently concluded [Open Source Summit North America event][1], Linus Torvalds shared some insights into the past, present and future of the Linux project. + +While remembering the beginning of the project, [Torvalds said][2] that he’d expected to leave behind Linux in a ‘done state’ to work for something new and interesting. + +> That was clearly then what open source changed. Because suddenly this project — that I probably would’ve left behind, if it was only up to me — I started getting questions about, and eventually patches — that just kept the motivation going. And here we are 30 years later, and it’s still what keeps the motivation going. + +Torvalds also added that as far as he is concerned, Linux is done for the past 29 years. Every other feature that has been added later is about what other people needed, wanted or were interested in. + +Many developers would relate to this. You work on a project and think that it has reached a ‘done’ state. If the project does not get enough traction, you lose interest to work on it and move to something ‘new and exciting’. The real motivation to continue the project comes from the users and the recognition. + +When asked about what they should be doing for the 50th anniversary of Linux, Torvalds said that he doesn’t see himself doing kernel programming at the age of 70. Then he also chipped in that he didn’t imagine himself doing kernel programming at the age of 50 as well and yet he is doing that at present. + +> “Somehow I don’t see myself doing kernel programming when I’m 70. But on the other hand, I didn’t see myself doing kernel programming when I was 50 either, a few years back. So… we’ll see.” + +It is always endearing to listen to Torvalds talking about Linux. So much to learn and to relate as an ardent Linux user, right? + +_Source: [The News Stack][2]_ + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/open-source-changed-linux-torvalds/ + +作者:[Abhishek][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/ From a2dddeec2e8358271308f985eaaba7ff264df8f1 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Mon, 4 Oct 2021 05:07:09 +0800 Subject: [PATCH 064/143] add done: 20211003 Open Source Changed Linux Otherwise It Was Done- Linus Torvalds.md --- sources/tech/20211003 .md | 16 ++++++++++++++++ sources/tech/20211004 .md | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 sources/tech/20211003 .md create mode 100644 sources/tech/20211004 .md diff --git a/sources/tech/20211003 .md b/sources/tech/20211003 .md new file mode 100644 index 0000000000..0edc18fcb5 --- /dev/null +++ b/sources/tech/20211003 .md @@ -0,0 +1,16 @@ +[#]: subject: "" +[#]: via: "https://www.debugpoint.com/2021/10/linux-mint-20-3-christmas/" +[#]: author: "[Arindam] + +Posted by Arindam + +Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + + +====== + diff --git a/sources/tech/20211004 .md b/sources/tech/20211004 .md new file mode 100644 index 0000000000..4eb560068f --- /dev/null +++ b/sources/tech/20211004 .md @@ -0,0 +1,16 @@ +[#]: subject: "" +[#]: via: "https://www.debugpoint.com/2021/10/pop-os-21-10-arm64/" +[#]: author: "[Arindam] + +Posted by Arindam + +Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + + +====== + From c5c51ed12230dca68acd8c1fedc08b4bf058378f Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Mon, 4 Oct 2021 10:53:37 +0800 Subject: [PATCH 065/143] Delete 20211003 .md --- sources/tech/20211003 .md | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 sources/tech/20211003 .md diff --git a/sources/tech/20211003 .md b/sources/tech/20211003 .md deleted file mode 100644 index 0edc18fcb5..0000000000 --- a/sources/tech/20211003 .md +++ /dev/null @@ -1,16 +0,0 @@ -[#]: subject: "" -[#]: via: "https://www.debugpoint.com/2021/10/linux-mint-20-3-christmas/" -[#]: author: "[Arindam] - -Posted by Arindam - -Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - - -====== - From d7d3055984b37c4a70d30a8a0142207532c80c24 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Mon, 4 Oct 2021 10:53:51 +0800 Subject: [PATCH 066/143] Delete 20211004 .md --- sources/tech/20211004 .md | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 sources/tech/20211004 .md diff --git a/sources/tech/20211004 .md b/sources/tech/20211004 .md deleted file mode 100644 index 4eb560068f..0000000000 --- a/sources/tech/20211004 .md +++ /dev/null @@ -1,16 +0,0 @@ -[#]: subject: "" -[#]: via: "https://www.debugpoint.com/2021/10/pop-os-21-10-arm64/" -[#]: author: "[Arindam] - -Posted by Arindam - -Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - - -====== - From 4dd2050b64b9994e171706deba731078b5759b6f Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 4 Oct 2021 12:16:52 +0800 Subject: [PATCH 067/143] PRF&TSL --- ...nt and Fedora- Which One Should You Use.md | 184 ------------------ ...nt and Fedora- Which One Should You Use.md | 184 ++++++++++++++++++ 2 files changed, 184 insertions(+), 184 deletions(-) delete mode 100644 sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md create mode 100644 translated/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md diff --git a/sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md b/sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md deleted file mode 100644 index f12afb8fea..0000000000 --- a/sources/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md +++ /dev/null @@ -1,184 +0,0 @@ -[#]: subject: (Comparing Linux Mint and Fedora: Which One Should You Use?) -[#]: via: (https://itsfoss.com/linux-mint-vs-fedora/) -[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) -[#]: collector: (lujun9972) -[#]: translator: (wxy) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) - -Comparing Linux Mint and Fedora: Which One Should You Use? -====== - -Linux Mint is a [popular Linux distribution tailored for beginners][1] while providing a similar experience to former Windows users. In fact, it does a [few things better than Ubuntu][2], which makes it a suitable choice for every type of user. - -It is completely community-powered, on top of Ubuntu as its base. - -On the other hand, Fedora is a cutting-edge distribution that focuses on incorporating exciting changes that eventually makes it way to Red Hat Enterprise Linux (RHEL). - -Unlike Linux Mint, Fedora does not exclusively focus on personal use (or non-developers). Even though they offer a workstation edition, they aim for developers and experienced Linux users. - -### Fedora or Mint: What Should You Go For? - -While we know that Fedora is not exactly geared towards Linux newbies, many users love using Fedora as their daily driver. So, in this article, we shall shed light on some differences between the two to help you pick one to use on your desktop machine. - -#### System Requirements & Hardware Compatibility - -![][3] - -Before choosing any Linux distribution, you should always go through the system requirements and check the hardware compatibility. - -Here, both Linux Mint and Fedora require at least 2 GB of RAM, 20 GB of disk space, and a 1024 x 768 resolution display to get an entry-level experience. - -Yes, the official documentation may mention 1 GB of RAM to start with but let us be practical of your use-case. Unless you have a vintage computer that you want to revive for a specific purpose, it is out of the equation. - -![Linux Mint Resource Usage][4] - -Technically, both support modern and old hardware. You will only know how it works along with the software/driver support when you get it installed. Unless you have a special peripheral or hardware component with specific features, hardware support may not be a big deal. - -Linux Mint 19 series still provide support for 32-bit systems and you can use it till April 2023. Fedora doesn’t support 32-bit systems anymore. - -#### Software Update Cycle - -![Linux Mint Update Manager][5] - -Linux Mint focuses on Long-Term Releases (LTS) with a five-year support. It will be maintained same as Ubuntu. But there is no paid extension like Ubuntu offers. - -Fedora does not offer an LTS release but pushes a new update every 6 months. Every version gets software support for 13 months. You get the ability to skip one version if you want. - -If you just want to have a Linux distro installed for years without requiring the latest technology/features in an update, Linux Mint is the way to go. - -But, if you want to the latest and greatest (which can also break your computing experience ins some rare cases) and accept to adapt with the major changes Fedora pushes, Fedora can be a choice. - -#### Desktop Environment Choices - -![Linux Mint Cinnamon Edition][6] - -Linux Mint provides three different [desktop environments][7] — **MATE, Cinnamon, and Xfce**. All of them will have the same update cycle and will be supported for five years from their release. - -Even though Fedora does not offer LTS releases, you get a variety of desktop choices in the form of Fedora spins. You get KDE, LXQt, MATE, Cinnamon, LXDE, and an edition with i3 tiling window manager baked in. - -![Fedora 34 with GNOME 40][8] - -So, if you want more choices out of the box, Fedora can be a quite exciting choice. - -#### Software Availability - -![Linux Mint’s Software Center and Package Manager][9] - -The default repositories of Linux Mint (or Ubuntu’s) offer a wide range of software to install. But Fedora’s default repository sticks only to open-source applications. - -Not just limited to that, Linux Mint also comes packed with [Synaptic Package Manager][10] which is an impressive lightweight tool to install software. - -Even though you can [enable third-party repositories in Fedora][11], it is yet an additional step. Also, the RPM Fusion repository may not be as huge as Ubuntu’s universe repository. - -![Fedora 34 Software Center][12] - -So, with Linux Mint, overall, you get more packages available to install and more ways to install software, out of the box. - -#### Ease of Use & Installation - -For an entirely new user, Ubuntu or any Ubuntu-based distribution generally fares well to start with. - -Starting from the [installation experience in Ubuntu][13] to the ease of [installing software][14] while having the option to opt for an LTS release is what a beginner finds handy. - -And, Linux Mint naturally presents the same benefits of Ubuntu with Ubiquity installer – hence, it offers a minimal learning curve, easy to install and easy to use. - -While Fedora is not complex by definition but the installation options, package manager, and lack of software in the default repositories may prove to be a time-consuming factor. - -If you’ve never tried it, I suggest you to go through our [Fedora installation guide for VirtualBox][15]. It is a good way to test the installation experience before trying it out on your production system of any sort. - -#### Out of the Box Experience - -The most hassle-free experience is usually the pleasant option. Well, for most people. - -Now, you need to understand that depending on the hardware configuration, every user might end up having a different “out-of-the-box” experience. - -But, for a reference, let me just give you my example for both Fedora and Linux Mint. - -Considering I’m rocking an NVIDIA GPU on my PC, I need to install the proprietary drivers for the best performance. - -![][16] - -And, when I booted up Linux Mint, installing the drivers were pretty easy using the **Driver Manager** app. - -But, with Fedora, even though I followed our guide on [installing Nvidia drivers in Fedora][17], I was presented with an error when I rebooted. - -![Installing NVIDIA drivers in Fedora][18] - -Not just that, for some reason, my wired network did not seem to be active – hence, I had no internet connectivity. - -Yes, you should always try to troubleshoot when you run into issues, but I did not need to do that for Linux Mint. So, in my experience, I will recommend Linux Mint with a better out of the experience. - -#### Documentation - -I would recommend going for [Fedora’s documentation][19] if you rely on resources and want to challenge yourself with a decent learning experience along the process. - -You will find up-to-date information for recent and latest Fedora releases, which is a good thing. - -On the other hand, [Linux Mint’s documentation][20] is not regularly updated but useful when you want to dig deeper. - -#### Community Support - -You will get a good community support for both. The [Linux Mint forums][21] is a basic platform which is easy to use and gets the job done. - -[Fedora’s forum][22] is powered by Discourse, which happens to be one of the most [popular modern open-source forum software][23]. - -#### Corporate vs Community Angle - -Fedora is backed up by the biggest open-source company [Red Hat][24] – so you get a good level of constant innovation and support for the long run. - -However, just because Fedora is not built for the daily computer users in mind, the choices made with every release may affect your user experience entirely. - -On the other hand, Linux Mint is completely backed up by a passionate Linux community focusing on making Linux easier and reliable for everyday use. Of course, it depends on Ubuntu as the base but Linux Mint does make bold changes if the community does not like something from the upstream. - -For instance, Linux Mint disabled snaps by default unlike official Ubuntu distro. So, you will have to [enable snaps in Linux Mint][25] if you want to use them. - -### Wrapping Up - -If you want a no-nonsense and easy to use operating system for your home computer, Linux Mint would be my suggestion. But, if you want to experience the latest and greatest, while taking a little adventure in your Linux learning experience, Fedora can be a good pick. - -While every operating system requires some form of troubleshooting and nothing can guarantee zero issues with your hardware, I think Linux Mint will have potentially no issues for the majority of the users. - -In any case, you can re-visit the comparison points mentioned above to see what matters most for your computer. - -What do you think? Would you pick Fedora over Mint? And, Why? Let me know in the comments below. - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/linux-mint-vs-fedora/ - -作者:[Ankush Das][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/ankush/ -[b]: https://github.com/lujun9972 -[1]: https://itsfoss.com/best-linux-beginners/ -[2]: https://itsfoss.com/linux-mint-vs-ubuntu/ -[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-34-about.png?resize=1020%2C709&ssl=1 -[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-resources.png?resize=800%2C293&ssl=1 -[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-update-manager.png?resize=819%2C612&ssl=1 -[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-cinnamon-desktop.png?resize=800%2C450&ssl=1 -[7]: https://itsfoss.com/best-linux-desktop-environments/ -[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-34-desktop.png?resize=800%2C478&ssl=1 -[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-software-sources.png?resize=800%2C385&ssl=1 -[10]: https://itsfoss.com/synaptic-package-manager/ -[11]: https://itsfoss.com/fedora-third-party-repos/ -[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-34-software.png?resize=1055%2C691&ssl=1 -[13]: https://itsfoss.com/install-ubuntu/ -[14]: https://itsfoss.com/remove-install-software-ubuntu/ -[15]: https://itsfoss.com/install-fedora-in-virtualbox/ -[16]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/linux-mint-driver-manager.jpg?resize=800%2C548&ssl=1 -[17]: https://itsfoss.com/install-nvidia-drivers-fedora/ -[18]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-nvidia-driver-installation.png?resize=706%2C516&ssl=1 -[19]: https://docs.fedoraproject.org/en-US/docs/ -[20]: https://linuxmint.com/documentation.php -[21]: https://forums.linuxmint.com -[22]: https://ask.fedoraproject.org -[23]: https://itsfoss.com/open-source-forum-software/ -[24]: https://www.redhat.com/en -[25]: https://itsfoss.com/enable-snap-support-linux-mint/ diff --git a/translated/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md b/translated/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md new file mode 100644 index 0000000000..15b1c6425d --- /dev/null +++ b/translated/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md @@ -0,0 +1,184 @@ +[#]: subject: (Comparing Linux Mint and Fedora: Which One Should You Use?) +[#]: via: (https://itsfoss.com/linux-mint-vs-fedora/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) + +Linux Mint 和 Fedora:应该使用哪一个? +====== + +Linux Mint 是一个 [为初学者定制的流行的 Linux 发行版][1],同时为用户提供了与 Windows 类似的体验。事实上,它有 [一些地方比 Ubuntu 做的更好][2],这使它成为每一类用户的合适选择。 + +它是基于 Ubuntu 的,完全由社区所支持。 + +另一方面,Fedora 是一个尝鲜发行版,它专注于纳入令人兴奋的变化,最终使其成为红帽企业 Linux(RHEL)的一部分。 + +与 Linux Mint 不同,Fedora 并不完全专注于个人(或非开发者)使用。即使他们提供了一个工作站版本,其目标也是开发者和有经验的 Linux 用户。 + +### Fedora 或 Mint,应该根据什么选择? + +虽然我们知道 Fedora 并不是完全面向 Linux 新手的,但许多用户喜欢使用 Fedora 作为他们的日常系统。因此,在这篇文章中,我们将阐明两者之间的一些区别,以帮助你选择一个在你的台式机上使用的操作系统。 + +#### 系统要求 & 硬件兼容性 + +![][3] + +在选择任何 Linux 发行版之前,你都应该看一下它的系统要求,并检查硬件兼容性。 + +在这方面,Linux Mint 和 Fedora 都需要至少 2GB 的内存、20GB 的磁盘空间,以及 1024 x 768 分辨率的显示器来获得入门级的体验。 + +是的,官方文件可能提到 1GB 内存就可以起步,但要看实际使用情况。除非你有一台复古的电脑,想为一个特定的目的恢复它,否则它就不在考虑范围之内。 + +![Linux Mint 资源使用情况][4] + +在技术上,两者都支持现代的和陈旧的硬件,你只有在安装时才会知道软件/驱动是否支持它。除非你有一个特殊的外围设备或具有特殊功能的硬件组件,否则硬件支持可能不是什么大问题。 + +Linux Mint 19 系列仍然提供了对 32 位系统的支持,你可以使用它到 2023 年 4 月。而 Fedora 已经不支持 32 位系统了。 + +#### 软件更新周期 + +![Linux Mint 更新管理器][5] + +Linux Mint 专注于长期发布版(LTS),支持时间为五年。它的维护方式与 Ubuntu 相同。但没有像 Ubuntu 那样提供付费的扩展支持。 + +Fedora 不提供 LTS 版本,而是每 6 个月推送一次新的更新,每个版本都会得到 13 个月的软件支持。如果你愿意,你可以跳过一个版本。 + +如果你只是想安装一个可以使用多年的 Linux 发行版,而不在乎是不是最新的技术/功能,那么 Linux Mint 是个不错的选择。 + +但是,如果你想要最新的和最伟大的 Linux 技术(在一些罕见的情况下,这也可能破坏你的计算体验),并接受适应 Fedora 推动的重大变化,Fedora 可以是一个选择。 + +#### 桌面环境的选择 + +![Linux Mint Cinnamon 版][6] + +Linux Mint 提供三种不同的 [桌面环境][7]:MATE、Cinnamon 和 Xfce。它们有相同的更新周期,并从发布之日起支持 5 年。 + +尽管 Fedora 不提供 LTS 版本,但你可以通过 Fedora spins 的形式选择各种桌面。你可以得到 KDE、LXQt、MATE、Cinnamon、LXDE,以及一个内置 i3 平铺窗口管理器的版本。 + +![Fedora 34 with GNOME 40][8] + +所以,如果你想有更多的选择,Fedora 可以是一个相当令人激动的选择。 + +#### 软件可用性 + +![Linux Mint 的软件中心和软件包管理器][9] + +Linux Mint(或 Ubuntu)的默认软件库提供了大量可以安装的软件,而 Fedora 的默认软件库只坚持提供开源软件。 + +不仅仅限于此,Linux Mint 还配备了 [Synaptic 软件包管理器][10],这是一个令人印象深刻的安装软件的轻量级工具。 + +尽管你可以 [在 Fedora 中启用第三方软件库][11],但这又是一个额外的步骤。而且,RPM Fusion 存储库可能没有 Ubuntu 的 universe 存储库那么庞大。 + +![Fedora 34 软件中心][12] + +所以,对于 Linux Mint 来说,总的来说,你可以得到更多可安装的软件包和各种安装软件的方法,开箱即用。 + +#### 使用和安装的便利性 + +对于一个 Linux 的新嫩用户来说,Ubuntu 或任何基于 Ubuntu 的发行版通常都是一个很好的开端。 + +从 [Ubuntu 的安装体验][13],到 [安装软件][14] 的简便性,同时还可以选择 LTS 版本,这让初学者觉得很方便。 + +而且,借助 Ubiquity 安装程序,Linux Mint 自然也有与 Ubuntu 相同的好处,因此,它的学习曲线最小,易于安装,易于使用。 + +虽然从表面上看 Fedora 并不复杂,但安装选项、软件包管理器以及默认存储库中缺乏的软件可能是一个耗时的因素。 + +如果你没有尝试过,我建议你试试我们的 [VirtualBox 版的 Fedora 安装指南][15]。这是一个测试安装体验的好方法,然后再在你的任何生产系统上进行尝试。 + +#### 开箱即用的体验 + +最省事的体验通常是令人愉快的选择。嗯,对大多数人来说。 + +现在,你需要明白,根据硬件配置的不同,每个用户最终可能会有不同的“开箱即用”体验。 + +但是,作为参考,让我给你举个 Fedora 和 Linux Mint 的例子。 + +考虑到我的电脑上使用的是 NVIDIA GPU,我需要安装专有的驱动程序以获得最佳性能。 + +![][16] + +而且,当我启动 Linux Mint 时,使用“驱动程序管理器”应用程序,安装驱动程序相当容易。 + +但是,对于 Fedora,即使我按照我们的 [在 Fedora 中安装 Nvidia 驱动程序][17] 的指南,我在重启时还是出现了一个错误。 + +![在 Fedora 中安装 NVIDIA 驱动程序][18]。 + +不仅如此,由于某些原因,我的有线网络似乎没有被激活,因此,我没有互联网连接。 + +是的,当你遇到问题时,你总是可以尝试着去排除故障,但是对于 Linux Mint,我不需要这么做。所以,根据我的经验,我会推荐 Linux Mint,它有更好的开箱体验。 + +#### 文档 + +如果你依赖于文档资源并想在这个过程中挑战自己,获得不错的学习经验,我推荐你去看看 [Fedora 的文档][19]。 + +你会发现最近和最新的 Fedora 版本的最新信息,这是件好事。 + +另一方面,[Linux Mint 的文档][20] 没有定期更新,但在你想深入挖掘时很有用。 + +#### 社区支持 + +你会得到一个良好的社区支持。[Linux Mint 的论坛][21] 是一个很基础的平台,容易使用并能解决问题。 + +[Fedora 的论坛][22] 是由 Discourse 驱动的,它是最 [流行的现代开源论坛软件][23] 之一。 + +#### 企业与社区的角度 + +Fedora 得到了最大的开源公司 [红帽][24] 的支持 —— 因此你可以得到良好的持续创新和长期的支持。 + +然而,正因为 Fedora 并不是为日常电脑用户而建立的,每一个版本的选择都可能完全影响你的用户体验。 + +另一方面,Linux Mint 完全由一个充满激情的 Linux 社区所支持,专注于使 Linux 在日常使用中更加容易和可靠。当然,它依赖于 Ubuntu 作为基础,但如果社区不喜欢上游的东西,Linux Mint 也会做出大胆的改变。 + +例如,Linux Mint 与 Ubuntu 官方发行版不同,默认情况下禁用了 snap。所以,如果你想使用它们,你就必须 [在 Linux Mint 中启用 snap][25]。 + +### 总结 + +如果你想为你的家用电脑选择一个没有问题的、易于使用的操作系统,我的建议是 Linux Mint。但是,如果你想体验最新的、最伟大的 Linux 操作系统,同时在你的 Linux 学习经历中进行一次小小的冒险,Fedora 可以是一个不错的选择。 + +虽然每个操作系统都需要某种形式的故障排除,没有什么能保证你的硬件完全不出问题,但我认为 Linux Mint 对大多数用户来说可能没有问题。 + +在任何情况下,你可以重新审视上面提到的比较点,看看什么对你的电脑最重要。 + +你怎么看?你会选择 Fedora 而不是 Mint 吗?还有,为什么?请在下面的评论中告诉我。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/linux-mint-vs-fedora/ + +作者:[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://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/best-linux-beginners/ +[2]: https://itsfoss.com/linux-mint-vs-ubuntu/ +[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-34-about.png?resize=1020%2C709&ssl=1 +[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-resources.png?resize=800%2C293&ssl=1 +[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-update-manager.png?resize=819%2C612&ssl=1 +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-cinnamon-desktop.png?resize=800%2C450&ssl=1 +[7]: https://itsfoss.com/best-linux-desktop-environments/ +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-34-desktop.png?resize=800%2C478&ssl=1 +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/linux-mint-software-sources.png?resize=800%2C385&ssl=1 +[10]: https://itsfoss.com/synaptic-package-manager/ +[11]: https://itsfoss.com/fedora-third-party-repos/ +[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-34-software.png?resize=1055%2C691&ssl=1 +[13]: https://itsfoss.com/install-ubuntu/ +[14]: https://itsfoss.com/remove-install-software-ubuntu/ +[15]: https://itsfoss.com/install-fedora-in-virtualbox/ +[16]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/linux-mint-driver-manager.jpg?resize=800%2C548&ssl=1 +[17]: https://itsfoss.com/install-nvidia-drivers-fedora/ +[18]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-nvidia-driver-installation.png?resize=706%2C516&ssl=1 +[19]: https://docs.fedoraproject.org/en-US/docs/ +[20]: https://linuxmint.com/documentation.php +[21]: https://forums.linuxmint.com +[22]: https://ask.fedoraproject.org +[23]: https://itsfoss.com/open-source-forum-software/ +[24]: https://www.redhat.com/en +[25]: https://itsfoss.com/enable-snap-support-linux-mint/ From d273f8f653ffd283e9f4ec4e3987772130438577 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 4 Oct 2021 12:37:06 +0800 Subject: [PATCH 068/143] PUB @wxy https://linux.cn/article-13848-1.html --- ...Comparing Linux Mint and Fedora- Which One Should You Use.md | 2 ++ 1 file changed, 2 insertions(+) rename {translated/tech => published}/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md (99%) diff --git a/translated/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md b/published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md similarity index 99% rename from translated/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md rename to published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md index 15b1c6425d..6e1772bacf 100644 --- a/translated/tech/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md +++ b/published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md @@ -10,6 +10,8 @@ Linux Mint 和 Fedora:应该使用哪一个? ====== +![](https://img.linux.net.cn/data/attachment/album/202110/04/123523kzzm3x4yr2ppmfj9.jpg) + Linux Mint 是一个 [为初学者定制的流行的 Linux 发行版][1],同时为用户提供了与 Windows 类似的体验。事实上,它有 [一些地方比 Ubuntu 做的更好][2],这使它成为每一类用户的合适选择。 它是基于 Ubuntu 的,完全由社区所支持。 From 2236941e65f032261e754ff78907f69eb87ff779 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 4 Oct 2021 12:40:03 +0800 Subject: [PATCH 069/143] PRF --- ...Comparing Linux Mint and Fedora- Which One Should You Use.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md b/published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md index 6e1772bacf..a53b8aef60 100644 --- a/published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md +++ b/published/20210607 Comparing Linux Mint and Fedora- Which One Should You Use.md @@ -106,7 +106,7 @@ Linux Mint(或 Ubuntu)的默认软件库提供了大量可以安装的软件 但是,对于 Fedora,即使我按照我们的 [在 Fedora 中安装 Nvidia 驱动程序][17] 的指南,我在重启时还是出现了一个错误。 -![在 Fedora 中安装 NVIDIA 驱动程序][18]。 +![在 Fedora 中安装 NVIDIA 驱动程序][18] 不仅如此,由于某些原因,我的有线网络似乎没有被激活,因此,我没有互联网连接。 From daf8bb99be07b9d864b12b02ce970a4e2b49e914 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 4 Oct 2021 12:54:16 +0800 Subject: [PATCH 070/143] PRF&PUB @unigeorge https://linux.cn/article-13849-1.html --- ...tran by writing a -guess the number- game.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) rename {translated/tech => published}/20210104 Learn Fortran by writing a -guess the number- game.md (89%) diff --git a/translated/tech/20210104 Learn Fortran by writing a -guess the number- game.md b/published/20210104 Learn Fortran by writing a -guess the number- game.md similarity index 89% rename from translated/tech/20210104 Learn Fortran by writing a -guess the number- game.md rename to published/20210104 Learn Fortran by writing a -guess the number- game.md index 68103275ca..a39854453d 100644 --- a/translated/tech/20210104 Learn Fortran by writing a -guess the number- game.md +++ b/published/20210104 Learn Fortran by writing a -guess the number- game.md @@ -1,8 +1,8 @@ [#]: collector: (lujun9972) [#]: translator: (unigeorge) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13849-1.html) [#]: subject: (Learn Fortran by writing a "guess the number" game) [#]: via: (https://opensource.com/article/21/1/fortran) [#]: author: (Jim Hall https://opensource.com/users/jim-hall) @@ -10,8 +10,9 @@ 通过写“猜数字”游戏学习 Fortran ====== -Fortran 是在打孔卡时代编写的语言,因此它的语法非常有限。但你仍然可以用它编写有用和有趣的程序。 -![Person typing on a 1980's computer][1] +> Fortran 是在打孔卡时代编写的语言,因此它的语法非常有限。但你仍然可以用它编写有用和有趣的程序。 + +![](https://img.linux.net.cn/data/attachment/album/202110/04/125311k6uwzpybabayyoag.jpg) Fortran 77 是我学习的第一门编译型编程语言。一开始时,我自学了如何在 Apple II 上用 BASIC 编写程序,后来又学会在 DOS 上用 QBasic 编写程序。但是当我去大学攻读物理学时,我又学习了 [Fortran][2]。 @@ -23,7 +24,7 @@ Fortran 曾经在科学计算中很常见。曾几何时,所有计算机系统 ### Fortran 编程基础 -虽然 Fortran 这些年来一直在更新,但我最熟悉的还是 Fortran 77,这是我多年前学习的实现版本。Fortran 是程序员还在打孔卡上编程的年代创建的,因此“经典”Fortran 仅限于处理可以放在打孔卡上的数据。这意味着你只能编写符合以下限制条件的经典 Fortran 程序(LCTT 译注:后来的 Fortran 95 等版本已经对这些限制做了很大的改进,如有兴趣**建议直接学习新版**): +虽然 Fortran 这些年来一直在更新,但我最熟悉的还是 Fortran 77,这是我多年前学习的实现版本。Fortran 是程序员还在打孔卡上编程的年代创建的,因此“经典” Fortran 仅限于处理可以放在打孔卡上的数据。这意味着你只能编写符合以下限制条件的经典 Fortran 程序(LCTT 译注:后来的 Fortran 95 等版本已经对这些限制做了很大的改进,如有兴趣**建议直接学习新版**): * 每张卡只允许一行源代码。 * 仅识别第 1-72 列(最后八列,73-80,保留给卡片分类器)。 @@ -31,7 +32,7 @@ Fortran 曾经在科学计算中很常见。曾几何时,所有计算机系统 * 程序语句在第 7-72 列。 * 要表示跨行,请在第 6 列中输入一个连续字符(通常是 `+`)。 * 要创建注释行,请在第 1 列中输入 `C` 或 `*`。 - * 只有字符`A` 到`Z`(大写字母)、`0` 到`9`(数字)和特殊字符`= + - * / ( ) , . $ ' :` 和空格能够使用。 + * 只有字符 `A` 到`Z`(大写字母)、`0` 到`9`(数字)和特殊字符 `= + - * / ( ) , . $ ' :` 和空格能够使用。 虽然有这些限制,你仍然可以编写非常有用和有趣的程序。 @@ -119,7 +120,7 @@ via: https://opensource.com/article/21/1/fortran 作者:[Jim Hall][a] 选题:[lujun9972][b] 译者:[unigeorge](https://github.com/unigeorge) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From af967bcc0a221c44d05d38cb38d3cdbb5399adae Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 4 Oct 2021 19:01:24 +0800 Subject: [PATCH 071/143] APL --- ...e Sucks- Here-s What You Can do to Reduce the Overheating.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md b/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md index bc8c45ad85..fb68e7963f 100644 --- a/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md +++ b/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md @@ -2,7 +2,7 @@ [#]: via: "https://itsfoss.com/raspberry-pi-case-overheating/" [#]: author: "Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From abbac0424f0b325d7799adcd04152143a3a6491b Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 4 Oct 2021 20:12:45 +0800 Subject: [PATCH 072/143] TSL&PRF --- ...at You Can do to Reduce the Overheating.md | 140 ------------------ ...at You Can do to Reduce the Overheating.md | 126 ++++++++++++++++ 2 files changed, 126 insertions(+), 140 deletions(-) delete mode 100644 sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md create mode 100644 translated/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md diff --git a/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md b/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md deleted file mode 100644 index fb68e7963f..0000000000 --- a/sources/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md +++ /dev/null @@ -1,140 +0,0 @@ -[#]: subject: "The Official Raspberry Pi 4 Case Sucks! Here’s What You Can do to Reduce the Overheating" -[#]: via: "https://itsfoss.com/raspberry-pi-case-overheating/" -[#]: author: "Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -The Official Raspberry Pi 4 Case Sucks! Here’s What You Can do to Reduce the Overheating -====== - -The [Raspberry Pi 4][1] is an absolute favorite among millions of people, especially in the nerd community, and I’m no exception. But did you know that the Pi throttles without proper cooling? - -Here, I’m going to describe some serious drawbacks in the [Official Raspberry Pi 4 Case][2] and also share some ways to mitigate them. - -![Raspberry Pi 4 official case][3] - -After the first boot, my Raspberry Pi 4 (8 GB RAM version) mounted inside the [Official Raspberry Pi 4 case][2], would shoot to 80 °C when the unattended upgrades kicked in. I was on Ubuntu with all [firmware updates][4] that are apparently supposed to [fix heating issues][5]. - -On idle, this hot vanilla and strawberry cake would never go less than 75°C. - -I could hardly use it until I removed the top white cover of the case. The temperature dropped to only around 67 °C on idle — Can you believe that? Even after I double-checked after a while with a reboot. This, obviously, still isn’t also quite acceptable. If I got the case and plan to use it for long-term purpose, why would I want to keep the case lid open all the time? - -And why is something like this happening? It’s all because of a very poor design of the official Raspberry Pi case. - -### The Official Raspberry Pi 4 Case is a Heat Monster! - -[Thermal throttling][6] in simple terms, is a reduction in the performance of your Pi processor (CPU) so that the temperature does not exceed extremely high temperatures (such as 80 °C) and [cause damage][7]. - -The case is built out of plastic — a poor conductor of heat (simple [old school physics][8]), and hence is unable to dissipate it effectively throughout the case and out of the Pi board. Therefore, the processor on the Pi board heats up and gets throttled down to an extremely inferior level of performance, once it literally reaches a temperature of an alarming degree. I noticed a 100% CPU usage during _**unattended upgrades**_ right after first boot with the CPU’s temperature at 80 °C. - -Beautiful though it may look, the official case delivers a big blow to the Pi’s performance. - -If you really want to get the most out of your Pi’s performance, you must take care of its cooling too. These heating issues cannot simply be ignored: - -#### Heat gets trapped - -Once you set up the Pi inside this case there is not even a single vent for that excess heat to escape. So it keeps getting accumulated inside until it reaches those crazy temps and triggers the throttle. - -#### No fan outlet (badly needed) - -The top white cover could have had a circular vent on top of the case for at least the [Official Raspberry Pi 4 Fan][9]. - -#### No passive cooling - -If the case had been of metal, it could have doubled up as heat-sink and dissipate the heat efficiently out of the processor residing on the Pi board. - -#### Other drawbacks apart from heating issues - -The official Pi 4 case has a few more drawbacks: - - 1. Inconvenient SD Card Management: It is not very convenient to assemble the Pi board inside the case and get the SD card port in the correct orientation to be able to switch cards later on. - 2. No Screwing System: No screws are provided, maybe because it could break the dummy holders on the base of the case that almost look like you could use four screws to fix the board securely onto the base. - - - -### What can you do to control the overheating in Raspberry Pi 4? - -After doing some intense research, I found some of the best cooling solutions available in the market – all thanks to our amazing modding community! - -#### Use an ice tower cooler - -I first found [an in-depth performance review of various Pi coolers at Jeff Geerling’s][10], who is known online as **[geerlingguy][11]**. I straightaway went for the ICE tower cooler after going through the temperature stats and assembled it: - -![Raspberry Pi 4 ice tower cooler][12] - -Preview | Product | Price | ----|---|---|--- -![GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi Heatsink for Raspberry Pi 4 Model B & Raspberry Pi 3B+ & Raspberry Pi 3 Model B][13] ![GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi Heatsink for Raspberry Pi 4 Model B & Raspberry Pi 3B+ & Raspberry Pi 3 Model B][13] | [GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi...][14] | $19.99[][15] | [Buy on Amazon][16] - -Temperatures dropped to 30 °C on idle and under load, it now stays at around 45 °C. I’m yet to mod a proper case for it. There are ready to purchase cases with enough space for the cooler. You may find such cases on Amazon or other online stores. - -No products found. - -#### Use an aluminum heat sink for passive cooling - -There is also a remarkable video online on [passive cooling][17], reviewing an aluminum heat-sink-as-a-case. - -A thermal pad is provided, which is equivalent to the thermal paste used on Desktop processors. On placing it in the manner shown in the video, the heat is dissipated out of the processor on the Pi board throughout the whole case. A wonderful magic of science! - -Preview | Product | Price | ----|---|---|--- -![Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive Cooling Case Compatible with Raspberry Pi 4 Model B Only][18] ![Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive Cooling Case Compatible with Raspberry Pi 4 Model B Only][18] | [Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive...][19] | $12.99[][15] | [Buy on Amazon][20] - -#### Modding the official Pi case - -If you still want to get the official case, it is advisable to at-least go for a fan mod: - -### Potential Manufacturing Solutions - -Here are some solutions that can make the whole process of manufacturing easier, by applying [DevOps][21] inspired improvements: - - * Think about it, that circular piece of plastic cut out from the top of the cover could be recycled to manufacture so many more Pi 4 cases in production. Isn’t it? It would clearly be a win-win scenario and also lowers costs as well! - - - * Aluminium is the most abundant metal on earth, but [global supply disruptions][22] can be challenging. Even then, there are other [conductivity solutions][23] to explore materials used for the designing the case. - - - -**Personal Notes** - -Hope this write-up helps you in getting the most out of your Raspberry Pi 4. It’s been a quite a while since I used to write here on _**It’s FOSS**_. Feels good to be back. I’d love to know your thoughts, suggestions, and experiences down in the comments below. Please do not hesitate to share. - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/raspberry-pi-case-overheating/ - -作者:[Avimanyu Bandyopadhyay][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/avimanyu/ -[b]: https://github.com/lujun9972 -[1]: https://itsfoss.com/raspberry-pi-4/ -[2]: https://www.raspberrypi.org/products/raspberry-pi-4-case/ -[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/raspberry-pi-4-official-case.webp?resize=800%2C533&ssl=1 -[4]: https://www.einfochips.com/blog/understanding-firmware-updates-the-whats-whys-and-hows/ -[5]: https://www.seeedstudio.com/blog/2019/11/29/raspberry-pi-4-firmware-update-pi-4-now-runs-cooler-than-ever/ -[6]: https://www.pcmag.com/encyclopedia/term/thermal-throttling -[7]: https://www.pcgamer.com/cpu-temperature-overheat/ -[8]: https://thermtest.com/stay-colder-for-longer-in-a-container-made-of-plastic-or-metal -[9]: https://www.raspberrypi.org/products/raspberry-pi-4-case-fan/ -[10]: https://www.jeffgeerling.com/blog/2019/best-way-keep-your-cool-running-raspberry-pi-4 -[11]: https://www.jeffgeerling.com/about -[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/raspberry-pi-4-ice-tower-cooler.webp?resize=480%2C360&ssl=1 -[13]: https://i0.wp.com/m.media-amazon.com/images/I/51g9gQC9k7L._SL160_.jpg?ssl=1 -[14]: https://www.amazon.com/dp/B07V35SXMC?tag=chmod7mediate-20&linkCode=ogi&th=1&psc=1 (GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi Heatsink for Raspberry Pi 4 Model B & Raspberry Pi 3B+ & Raspberry Pi 3 Model B) -[15]: https://www.amazon.com/gp/prime/?tag=chmod7mediate-20 (Amazon Prime) -[16]: https://www.amazon.com/dp/B07V35SXMC?tag=chmod7mediate-20&linkCode=ogi&th=1&psc=1 (Buy on Amazon) -[17]: https://buildabroad.org/2016/11/05/passive-cooling/ -[18]: https://i2.wp.com/m.media-amazon.com/images/I/41XGLQONCVS._SL160_.jpg?ssl=1 -[19]: https://www.amazon.com/dp/B07VD568FB?tag=chmod7mediate-20&linkCode=osi&th=1&psc=1 (Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive Cooling Case Compatible with Raspberry Pi 4 Model B Only) -[20]: https://www.amazon.com/dp/B07VD568FB?tag=chmod7mediate-20&linkCode=osi&th=1&psc=1 (Buy on Amazon) -[21]: https://linuxhandbook.com/what-is-devops/ -[22]: https://www.reuters.com/article/global-metals-idUSL1N2Q90GA -[23]: https://news.mit.edu/2018/engineers-turn-plastic-insulator-heat-conductor-0330 diff --git a/translated/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md b/translated/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md new file mode 100644 index 0000000000..9ff9fb14d1 --- /dev/null +++ b/translated/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md @@ -0,0 +1,126 @@ +[#]: subject: "The Official Raspberry Pi 4 Case Sucks! Here’s What You Can do to Reduce the Overheating" +[#]: via: "https://itsfoss.com/raspberry-pi-case-overheating/" +[#]: author: "Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +官方的树莓派 4 外壳很烂!怎么样减少过热? +====== + +![树莓派 4][1] 绝对是数百万人的最爱,特别是在极客社区里,我也不例外。但是你知道树莓派在没有适当冷却的情况下会限制性能吗? + +在这里,我将介绍 [树莓派 4 官方外壳][2] 的一些严重缺点,同时也分享一些缓解这些缺点的方法。 + +![树莓派 4 官方外壳][3] + +在第一次启动后,我的安装在 [树莓派 4 官方外壳][2] 内的树莓派 4(8GB 内存版),在无人值守的升级启动时,会高达 80℃。我在 Ubuntu 上进行了所有的 [固件更新][4],显然是为了 [解决发热问题][5]。 + +就算在空闲时,这个烫手的香草和草莓蛋糕也绝不会低于 75℃。 + +我几乎无法使用它,直到我取下外壳顶部的白色盖子。它闲置时的温度降到只有 67℃ 左右 —— 你相信吗?即使是在我重新启动一段时间后再次检查也是这样。很明显,这仍然是不太可接受。如果我买了这个外壳并打算长期使用,我为什么要一直把盖子打开? + +为什么会发生这样的事情?这都是因为官方的树莓派外壳的设计非常糟糕。 + +### 官方的树莓派 4 外壳是一个发热怪物! + +简单地说,[热节流][6] 就是降低你的树莓派处理器(CPU)的性能,以使温度不超过极限高温(如 80℃)而 [导致损坏][7]。 + +这个外壳是由塑料制成的,它是热的不良导体(简单的 [传统物理学][8] 知识),因此无法将热量有效地散布到整个外壳和板子之外。因此,板上的处理器会发热,一旦温度达到惊人的程度,它的性能就会被降到一个极低的水平。我注意到,在第一次开机后,在**无人值守**的情况下进行升级时,CPU 的温度为 80℃,CPU 的使用率为 100%。 + +虽然这个官方的外壳看起来很美,但它对树莓派的性能造成了很大的影响。 + +如果你真的想让你的树莓派发挥最大的性能,你也必须负责它的冷却。这些发热问题不能被简单地忽视。 + +#### 热量被困在内部 + +一旦你把树莓派安装在这个外壳里,它甚至没有一个通风口可以让多余的热量排出。所以热量就一直在里面积累,直到达到那些疯狂的温度并触发了节流阀。 + +#### 没有风扇通风口(非常需要) + +顶部的白色盖子上可以有一个圆形的通风口,至少可以把 [树莓派 4 的官方风扇][9] 放在上面使用。 + +#### 没有被动冷却 + +如果外壳是金属的,它就可以作为散热器,有效地将树莓派板上的处理器的热量散发出去。 + +#### 除了发热问题之外,还有其他的缺点 + +树莓派 4 官方外壳还有一些缺点: + + 1. 不便于 SD 卡管理:将树莓派板子装入外壳内,并将 SD 卡端口放在正确的方向上,以便以后能够换卡,这不是很方便。 + 2. 没有螺丝钉系统:没有提供螺丝,也许是因为它可能会破坏机箱底座上的假支架,这些假支架看起来就像你可以用四颗螺丝把板子牢牢地固定在底座上。 + +### 你可以做什么来控制树莓派 4 的过热? + +在做了一些紧张的研究之后,我找到了市场上一些最好的冷却解决方案 —— 这一切都要归功于我们了不起的改装社区。 + +#### 使用冰塔式冷却器 + +我首先发现了 [Jeff Geerling's][10] 对各种树莓派散热器的深入性能评估,他在网上被称为 [geerlingguy][11]。在看完温度统计后,我直接选择了冰塔式散热器,并组装了它: + +![树莓派 4 冰塔冷却器][12] + +它空闲和低载时的温度下降到 30℃,现在保持在 45℃ 左右。我还没有为它改装一个合适的外壳。我准备找个给冷却器提供了足够的空间的现成外壳。也许可以在亚马逊或其他网上商店找到这种外壳。 + +但我没有找到这种产品。 + +#### 使用铝制散热器进行被动散热 + +网上也有一个关于 [被动冷却][17] 的出色视频,测评了一个用铝制散热片做的外壳。 + +它提供了一个热垫,它相当于台式机处理器上使用的散热膏。按照视频中显示的方式放置它,热量就会从树莓派板上的处理器散发到整个外壳内。这就是科学的神奇之处! + +#### 改装官方的树莓派外壳 + +如果你仍然想买官方的外壳,建议你至少要做一个风扇的改装。 + +### 潜在的制造解决方案 + +这里有一些解决方案,通过应用 [DevOps][21] 启发的改进,可以使整个制造过程更容易。 + + * 想一想,从外壳顶部切下的那块圆形塑料可以回收,用来制造更多的树莓派 4 外壳,不是吗?这显然会是一个双赢的局面,同时也降低了成本! + * 铝是地球上最丰富的金属,但 [全球供应中断][22] 可能是一个挑战。即使如此,还有其他的 [导电性解决方案][23] 来探索用于设计案例的材料! + +### 总结 + +希望这篇文章能帮助你从树莓派 4 中获得最大的收益。我很想知道你的想法、建议和经验,请在下面的评论中留言。请不要犹豫地分享。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/raspberry-pi-case-overheating/ + +作者:[Avimanyu Bandyopadhyay][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/avimanyu/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/raspberry-pi-4/ +[2]: https://www.raspberrypi.org/products/raspberry-pi-4-case/ +[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/raspberry-pi-4-official-case.webp?resize=800%2C533&ssl=1 +[4]: https://www.einfochips.com/blog/understanding-firmware-updates-the-whats-whys-and-hows/ +[5]: https://www.seeedstudio.com/blog/2019/11/29/raspberry-pi-4-firmware-update-pi-4-now-runs-cooler-than-ever/ +[6]: https://www.pcmag.com/encyclopedia/term/thermal-throttling +[7]: https://www.pcgamer.com/cpu-temperature-overheat/ +[8]: https://thermtest.com/stay-colder-for-longer-in-a-container-made-of-plastic-or-metal +[9]: https://www.raspberrypi.org/products/raspberry-pi-4-case-fan/ +[10]: https://www.jeffgeerling.com/blog/2019/best-way-keep-your-cool-running-raspberry-pi-4 +[11]: https://www.jeffgeerling.com/about +[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/raspberry-pi-4-ice-tower-cooler.webp?resize=480%2C360&ssl=1 +[13]: https://i0.wp.com/m.media-amazon.com/images/I/51g9gQC9k7L._SL160_.jpg?ssl=1 +[14]: https://www.amazon.com/dp/B07V35SXMC?tag=chmod7mediate-20&linkCode=ogi&th=1&psc=1 (GeeekPi Raspberry Pi Cooling Fan, Raspberry Pi ICE Tower Cooler, RGB Cooling Fan with Raspberry Pi Heatsink for Raspberry Pi 4 Model B & Raspberry Pi 3B+ & Raspberry Pi 3 Model B) +[15]: https://www.amazon.com/gp/prime/?tag=chmod7mediate-20 (Amazon Prime) +[16]: https://www.amazon.com/dp/B07V35SXMC?tag=chmod7mediate-20&linkCode=ogi&th=1&psc=1 (Buy on Amazon) +[17]: https://buildabroad.org/2016/11/05/passive-cooling/ +[18]: https://i2.wp.com/m.media-amazon.com/images/I/41XGLQONCVS._SL160_.jpg?ssl=1 +[19]: https://www.amazon.com/dp/B07VD568FB?tag=chmod7mediate-20&linkCode=osi&th=1&psc=1 (Geekworm Raspberry Pi 4 Armor Case, Raspberry Pi 4 Computer Model B Armor Aluminum Alloy Passive Cooling Case Compatible with Raspberry Pi 4 Model B Only) +[20]: https://www.amazon.com/dp/B07VD568FB?tag=chmod7mediate-20&linkCode=osi&th=1&psc=1 (Buy on Amazon) +[21]: https://linuxhandbook.com/what-is-devops/ +[22]: https://www.reuters.com/article/global-metals-idUSL1N2Q90GA +[23]: https://news.mit.edu/2018/engineers-turn-plastic-insulator-heat-conductor-0330 From ebdcda4f41ed601ba409199465cbde24c0dc8e97 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 4 Oct 2021 20:23:13 +0800 Subject: [PATCH 073/143] PUB @wxy https://linux.cn/article-13851-1.html --- ...s- Here-s What You Can do to Reduce the Overheating.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) rename {translated/tech => published}/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md (95%) diff --git a/translated/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md b/published/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md similarity index 95% rename from translated/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md rename to published/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md index 9ff9fb14d1..8b1b953f84 100644 --- a/translated/tech/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md +++ b/published/20211001 The Official Raspberry Pi 4 Case Sucks- Here-s What You Can do to Reduce the Overheating.md @@ -4,13 +4,15 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13851-1.html" 官方的树莓派 4 外壳很烂!怎么样减少过热? ====== -![树莓派 4][1] 绝对是数百万人的最爱,特别是在极客社区里,我也不例外。但是你知道树莓派在没有适当冷却的情况下会限制性能吗? +![](https://img.linux.net.cn/data/attachment/album/202110/04/201826ghpecyb43cxehi4y.jpg) + +[树莓派 4][1] 绝对是数百万人的最爱,特别是在极客社区里,我也不例外。但是你知道树莓派在没有适当冷却的情况下会限制性能吗? 在这里,我将介绍 [树莓派 4 官方外壳][2] 的一些严重缺点,同时也分享一些缓解这些缺点的方法。 From 41b8cb10b3067f600cdce93034828f3dd5a861bc Mon Sep 17 00:00:00 2001 From: DarkSun Date: Tue, 5 Oct 2021 05:03:47 +0800 Subject: [PATCH 074/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211005=20?= =?UTF-8?q?Markets:=20An=20Open-Source=20App=20to=20Keep=20Track=20of=20Yo?= =?UTF-8?q?ur=20Investments=20for=20Linux=20Desktop=20and=20Phones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211005 Markets- An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones.md --- ...nvestments for Linux Desktop and Phones.md | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 sources/tech/20211005 Markets- An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones.md diff --git a/sources/tech/20211005 Markets- An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones.md b/sources/tech/20211005 Markets- An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones.md new file mode 100644 index 0000000000..ed5b98429f --- /dev/null +++ b/sources/tech/20211005 Markets- An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones.md @@ -0,0 +1,94 @@ +[#]: subject: "Markets: An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones" +[#]: via: "https://itsfoss.com/markets/" +[#]: author: "Ankush Das https://itsfoss.com/author/ankush/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Markets: An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones +====== + +_**Brief:** A Linux app to help you quickly track market movements._ + +Usually, you would log in to a service on your web browser to monitor and track the market for investment opportunities if you’re an investor/trader. + +But, what if you want an app for your Linux desktop and Linux phone? Considering we do have a few for Android/iOS smartphones, it should come in handy for Linux devices as well! + +### Monitor Stocks From Across the Globe via Yahoo Finance + +![][1] + +“Markets” utilizes the data from Yahoo Finance to provide you the required information about stocks, cryptocurrencies, currencies, and more. + +While it is a simple desktop-focused app, it is available for Linux smartphones, and it offers a couple of valuable functionalities. Let me list the key highlights of what you can expect. + +![][2] + +### Features of Markets + +With Markets, you get to track, monitor, and analyze market trends and make investment decisions. + +There are a couple of features along the way that include: + + * Ability to customize the update interval + * Build a personal portfolio + * Add any symbol or currency + * View time in international format + * Dark mode + * Supports Linux phones (PinePhone, Librem5) + * Selectively delete stock monitors + + + +As mentioned previously, it is a dead-simple Linux application to help you track financial data. + +![][3] + +And, I’d say it works pretty well and lets you quickly search for a stock, commodity, and others to build a personal portfolio on your Linux desktop quickly. + +With a dark mode, it is a breeze to look at it and track market movements. + +You can select from the existing list of markets added and delete as per your selection. And, the international time format is useful. As you can notice in the screenshot, the time mentions the timezone you’re at by default, which should be useful. + +Also, from the listings, you can click on it to launch the browser window for full details on Yahoo Finance; this is how it’ll look like: + +![][4] + +### Installing Markets in Linux + +It is available as a Flatpak app for Linux distributions and can be found in [AUR][5] for Arch users. For Linux phones, they recommend installing it from the source. + +To install it from the terminal, you just need to type in: + +``` +flatpak install flathub com.bitstower.Markets +``` + +You can explorer building instructions and other information on their [GitHub page][6]. + +[Markets (Flathub)][7] + +Do you prefer to use an app on your Linux desktop to track financial data quickly? Let me know your thoughts in the comments. + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/markets/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/markets.png?resize=741%2C626&ssl=1 +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/markets-search.png?resize=626%2C651&ssl=1 +[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/markets-dark-mode.png?resize=559%2C475&ssl=1 +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/yahoo-tesla.png?resize=800%2C451&ssl=1 +[5]: https://itsfoss.com/aur-arch-linux/ +[6]: https://github.com/bitstower/markets +[7]: https://flathub.org/apps/details/com.bitstower.Markets From 69f30fdb56a82d2b989f2d899aaee56392d5c4c9 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Tue, 5 Oct 2021 05:03:55 +0800 Subject: [PATCH 075/143] add done: 20211005 Markets- An Open-Source App to Keep Track of Your Investments for Linux Desktop and Phones.md --- sources/tech/20211005 .md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 sources/tech/20211005 .md diff --git a/sources/tech/20211005 .md b/sources/tech/20211005 .md new file mode 100644 index 0000000000..9edb764851 --- /dev/null +++ b/sources/tech/20211005 .md @@ -0,0 +1,25 @@ +[#]: subject: "" +[#]: via: "https://www.2daygeek.com/recover-corrupted-grub-2-bootloader-centos-8-rhel-8/" +[#]: author: " " +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + + +====== + +-------------------------------------------------------------------------------- + +via: https://www.2daygeek.com/recover-corrupted-grub-2-bootloader-centos-8-rhel-8/ + +作者:[][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: +[b]: https://github.com/lujun9972 From bf1ae6f02fbd355be904218324f500b9ff9c8403 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Tue, 5 Oct 2021 05:04:14 +0800 Subject: [PATCH 076/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211004=20?= =?UTF-8?q?How=20I=20use=20Vagrant=20with=20libvirt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211004 How I use Vagrant with libvirt.md --- ...20211004 How I use Vagrant with libvirt.md | 221 ++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 sources/tech/20211004 How I use Vagrant with libvirt.md diff --git a/sources/tech/20211004 How I use Vagrant with libvirt.md b/sources/tech/20211004 How I use Vagrant with libvirt.md new file mode 100644 index 0000000000..198d512bc1 --- /dev/null +++ b/sources/tech/20211004 How I use Vagrant with libvirt.md @@ -0,0 +1,221 @@ +[#]: subject: "How I use Vagrant with libvirt" +[#]: via: "https://opensource.com/article/21/10/vagrant-libvirt" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How I use Vagrant with libvirt +====== +When a virtual machine is what you need, Vagrant may be just the best +way to get it. +![Computer laptop in space][1] + +I'll admit it: I'm a fan of Linux. While I've used Slackware on workstations and Red Hat Enterprise Linux (RHEL) on servers for years, I love seeing how other distributions do things. What's more, I really like to test applications and scripts I write on other distributions to ensure portability. In fact, that's one of the great advantages of Linux, as I see it: You can download a distro and test your software on it for free. You can't do that with a closed OS, at least not without either breaking an EULA or paying to play, and even then, you're often signing up to download several gigabytes just to test an application that's no more than a few hundred megabytes. But Linux is open source, so there's rarely an excuse to ignore at least the three or four main distros, except that setting up a virtual machine can take a lot of clicks and sometimes complex virtual networking. At least, that used to be the excuse until Vagrant changed the virtual machine workflow for developers. + +### What is Vagrant + +Vagrant is a simple virtual machine manager for your terminal. It allows you to easily pull a minimal and pre-built virtual machine from the Internet, run it locally, and SSH into it in just a few steps. It's the quickest you'll ever set up a virtual machine. It's ideal for web developers needing a test web server, programmers who need to test an application across distributions, and hobbyists who enjoy seeing how different distributions work. + +Vagrant itself is relatively minimal, too. It's not a virtualization framework itself. It only manages your virtual machines ("boxes" in Vagrant terminology). It can use VirtualBox or, through a plug-in, the lightweight libvirt project as a backend. + +### What is libvirt + +The libvirt project is a toolkit designed to manage virtualization, with support for [KVM][2], [QEMU][3], [LXC][4], and more. You might think of it as a sort of virtual machine API, allowing developers to write friendly applications that make it easy for users to orchestrate virtualization through libvirt. I use libvirt as the backend for Vagrant because it's useful across several applications, including virt-manager and [GNOME Boxes][5]. + +### Installing Vagrant + +You can install Vagrant from [vagrantup.com/downloads][6]. There are builds available for Debian-based systems, CentOS-based systems, macOS, Windows, and more. + +For CentOS, Fedora, or similar, you get an RPM package, which you can install with `dnf`: + + +``` +`$ sudo dnf install ./vagrant_X.Y.ZZ_x86_64.rpm` +``` + +On Debian, Linux Mint, Elementary, and similar, you get a DEB package, which you can install with `apt`: + + +``` +`$ sudo apt install ./vagrant_X.Y.ZZ_x86_64.deb` +``` + +### Installing libvirt and support packages + +On Linux, your distribution may already have libvirt installed, but to enable integration with Vagrant you need a few other packages, too. Install these with your package manager. + +On Fedora, CentOS, and similar: + + +``` +$ sudo dnf install gcc libvirt \ +libvirt-devel libxml2-devel \ +make ruby-devel libguestfs-tools +``` + +On Debian, Linux Mint, and similar: + + +``` +$ sudo apt install build-dep vagrant ruby-libvirt \ +qemu libvirt-daemon-system libvirt-clients ebtables \ +dnsmasq-base libxslt-dev libxml2-dev libvirt-dev \ +zlib1g-dev ruby-dev libguestfs-tools +``` + +Depending on your distribution, you may have to start the `libvirt` daemon: + + +``` +`$ sudo systemctl start libvirtd` +``` + +### Installing the Vagrant-libvirt plugin + +In Vagrant, libvirt is enabled through a plug-in. Vagrant makes it easy to install a plug-in, so your first Vagrant command is one you'll rarely run again: + + +``` +`$ vagrant plugin install vagrant-libvirt` +``` + +Now that the libvirt plug-in is installed, you can start using virtual machines. + +### Setting up your Vagrant environment + +To start with Vagrant, create a directory called `~/Vagrant`. This is where your `Vagrantfiles` are stored. + + +``` +`$ mkdir ~/Vagrant` +``` + +In this directory, create a subdirectory to represent a distro you want to download. For instance, assume you need a CentOS test box. + +Create a CentOS directory, and then change to it: + + +``` +$ mkdir ~/Vagrant/centos +$ cd ~/Vagrant/centos +``` + +Now you need to find a virtual machine so you can convert the directory you've just made into a Vagrant environment. + +### Finding a Vagrant virtual machine + +Broadly speaking, Vagrant boxes come from three different places: Hashicorp (the maintainers of Vagrant), maintainers of distributions, and people like you and me. Some images are minimal, intended to serve as a base for customization. In contrast, others try to solve a specific need (for instance, you might find a LAMP stack image ready for web development). You can find images by browsing or searching the main hub for boxes [app.vagrantup.com/boxes/search][7]. + +For this example, search for "centos" and find the entry named `generic/centos8`. Click on the image for instructions on how to use the virtual machine. The instructions come in two varieties:  + + * The code you need for a Vagrantfile + * The command you need to use the box from a terminal + + + +The latter is the more straightforward method: + + +``` +`$ vagrant init generic/centos8` +``` + +The `init` subcommand creates a configuration file, called a Vagrantfile, in your current directory, which transforms that directory into a Vagrant environment. At any time, you can view a list of known Vagrant environments using the `global-status` subcommand: + + +``` +$ vagrant global-status +id       name    provider state   directory +\------------------------------------------- +49c797f  default libvirt running /home/tux/Vagrant/centos8 +``` + +### Starting a virtual machine with Vagrant + +Once you've run the `init` command, you can start your virtual machine with `vagrant up`: + + +``` +`$ vagrant up` +``` + +This causes Vagrant to download the virtual machine image if it doesn't already exist locally, set up a virtual network, and configure your box. + +### Entering a Vagrant virtual machine  + +Once your virtual machine is up and running, you can log in to it with `vagrant ssh`: + + +``` +$ vagrant ssh +box$ +``` + +You connect to the box running in your current Vagrant environment. Once logged in, you can run all the commands native to that host. It's a virtual machine running its own kernel, with emulated hardware and common Linux software. + +### Leaving a Vagrant virtual machine + +To leave your Vagrant virtual machine, log out of the host as you normally exit a Linux computer: + + +``` +`box$ exit` +``` + +Alternately, you can power the virtual machine down: + + +``` +`box$ sudo poweroff` +``` + +You can also stop the machine from running using the `vagrant` command: + + +``` +`box$ vagrant halt` +``` + +### Destroying a Vagrant virtual machine + +When finished with a Vagrant virtual machine, you can destroy it: + + +``` +`$ vagrant destroy` +``` + +Alternately, you can remove a virtual machine using the global `box` subcommand: + + +``` +`$ vagrant box remove generic/centos8` +``` + +### Vagrant is easy + +Vagrant makes virtual machines trivial, disposable, and fast. When you need a test environment or a fake server to ping or develop on, or a clean lab computer for experimentation or monitoring, you can get one with Vagrant. Some people think virtual machines aren't relevant now that containers have taken over servers, but virtual machines have unique traits that make them useful. They run their own kernel, have a full and unique stack separate from the host machine, and use emulated hardware. When a virtual machine is what you need, Vagrant may be just the best way to get it. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/vagrant-libvirt + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/computer_space_graphic_cosmic.png?itok=wu493YbB (Computer laptop in space) +[2]: https://opensource.com/article/20/8/virt-tools#kvm +[3]: https://opensource.com/article/20/8/virt-tools#qemu +[4]: https://opensource.com/article/18/11/behind-scenes-linux-containers +[5]: https://opensource.com/article/19/5/getting-started-gnome-boxes-virtualization +[6]: https://www.vagrantup.com/downloads +[7]: https://app.vagrantup.com/boxes/search From 1164a6da1c10ad33a083411583f1d29f995ca598 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Tue, 5 Oct 2021 05:04:31 +0800 Subject: [PATCH 077/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211004=20?= =?UTF-8?q?Launching=20a=20DevOps=20to=20DevSecOps=20transformation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211004 Launching a DevOps to DevSecOps transformation.md --- ...ng a DevOps to DevSecOps transformation.md | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 sources/tech/20211004 Launching a DevOps to DevSecOps transformation.md diff --git a/sources/tech/20211004 Launching a DevOps to DevSecOps transformation.md b/sources/tech/20211004 Launching a DevOps to DevSecOps transformation.md new file mode 100644 index 0000000000..250315de64 --- /dev/null +++ b/sources/tech/20211004 Launching a DevOps to DevSecOps transformation.md @@ -0,0 +1,64 @@ +[#]: subject: "Launching a DevOps to DevSecOps transformation" +[#]: via: "https://opensource.com/article/21/10/devops-to-devsecops" +[#]: author: "Will Kelly https://opensource.com/users/willkelly" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Launching a DevOps to DevSecOps transformation +====== +The move toward DevSecOps is accelerating—here's what you need to know. +![Tips and gears turning][1] + +Widespread adoption of DevSecOps is inevitable. Security and delivery velocity are unrealistic expectations as part of a [waterfall software development life cycle][2] (SDLC). Businesses and government agencies are under constant pressure to deliver new features and functionality to their customers, constituents, and employees. Recent high-profile software supply chain breaches and President Biden's [Executive Order][3] to improve the nation's cybersecurity also increases the urgency for businesses and governments to move to DevSecOps. + +All of that means, sooner or later, your enterprise will need to integrate security with its DevOps process. + +Historically, cybersecurity teams focused on app security only at the end of a long, laborious waterfall SDLC, after scanning and remediating security issues. This model has shown cracks with age. Customer and market demands for new features, security, and compliance are at the top of executives' minds. [Digital transformation][4] efforts aimed at adjusting to the new world of work during and after the pandemic have made software security a higher priority. A DevOps process that makes security an afterthought is out of step with software users and consumers. + +What's needed is a DevOps-to-DevSecOps transformation. Fortunately, cloud computing in the commercial and public sectors, combined with the influence of open source software (OSS), now gives development teams the tools, processes, and frameworks to deliver software at higher velocity while maintaining quality and security. + +DevSecOps brings your security and DevOps teams to work together during the development life cycle. To make that transition, you will need collaboration from your developers, cybersecurity experts, sysadmins, business stakeholders, and even your executives. + +### Assessing DevOps and DevSecOps + +DevOps combines cultural philosophies, best practices, and tools that allow your organization to deliver applications and services more rapidly. Shifting to daily and weekly releases enables you to reduce your quarterly or monthly releases. Using DevOps can also help you grow and improve your products more rapidly than traditional waterfall software development processes and siloed infrastructure management. + +While preserving the best qualities of DevOps, DevSecOps incorporates security in every stage of the cycle. It knocks down the silos standing between your development, security, and operations teams. Benefits of DevSecOps include: + + * Prevention of security incidents before they happen: By integrating DevSecOps within your CI/CD toolchain, you're helping your teams by detecting and resolving issues before they occur in production. + * Faster response to security issues: DevSecOps increases your security focus through continuous assessments while giving you actionable data to make informed decisions about the security posture of apps in development and ready to enter production. + * Accelerated feature velocity: DevSecOps teams have the data and tools to mitigate unforeseen risks better. + * Lower security budget: DevSecOps enables streamlined resources, solutions, and processes, allowing you to simplify your development lifecycle by design. + + + +We're at _peak Ops_ in many industries. Rest assured, the definitions of DevOps and DevSecOps will merge in the months and years to come, if only for the sake of enterprise sanity and management. + +### DevSecOps and OSS + +DevSecOps can also play a vital role in the integration of OSS into enterprise applications. OSS and DevSecOps are becoming increasingly intertwined, especially as enterprises seek to improve the security of their software supply chains. DevSecOps can serve as an OSS remediation tool because it permits scanning automation throughout each pipeline phase. OSS is also foundational for adopting and security software containers and Kubernetes. + +### Final thoughts + +Before your organization embarks on a DevOps to DevSecOps transformation, take a step back and define DevSecOps for your teams. Cut through the marketing. Talk about the results you hope your teams will achieve. Instill a culture of openness and collaboration, and be sure to listen to the positive and negative vantage points of your development, operations, and Quality Assurance (QA) teams. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/devops-to-devsecops + +作者:[Will Kelly][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/willkelly +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/gears_devops_learn_troubleshooting_lightbulb_tips_520.png?itok=HcN38NOk (Tips and gears turning) +[2]: https://en.wikipedia.org/wiki/Waterfall_model +[3]: https://www.whitehouse.gov/briefing-room/presidential-actions/2021/05/12/executive-order-on-improving-the-nations-cybersecurity/ +[4]: https://enterprisersproject.com/what-is-digital-transformation From 2b5387dea3dae44934776a0bb52a0e37cff1bf1a Mon Sep 17 00:00:00 2001 From: DarkSun Date: Tue, 5 Oct 2021 05:05:38 +0800 Subject: [PATCH 078/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020211004=20?= =?UTF-8?q?It=20Seems=20Pop=20OS=20Linux=20Will=20Soon=20be=20Available=20?= =?UTF-8?q?on=20Raspberry=20Pi=20and=20Other=20ARM=20Devices?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20211004 It Seems Pop OS Linux Will Soon be Available on Raspberry Pi and Other ARM Devices.md --- ...e on Raspberry Pi and Other ARM Devices.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 sources/news/20211004 It Seems Pop OS Linux Will Soon be Available on Raspberry Pi and Other ARM Devices.md diff --git a/sources/news/20211004 It Seems Pop OS Linux Will Soon be Available on Raspberry Pi and Other ARM Devices.md b/sources/news/20211004 It Seems Pop OS Linux Will Soon be Available on Raspberry Pi and Other ARM Devices.md new file mode 100644 index 0000000000..7a5d77b46d --- /dev/null +++ b/sources/news/20211004 It Seems Pop OS Linux Will Soon be Available on Raspberry Pi and Other ARM Devices.md @@ -0,0 +1,79 @@ +[#]: subject: "It Seems Pop OS Linux Will Soon be Available on Raspberry Pi and Other ARM Devices" +[#]: via: "https://news.itsfoss.com/pop-os-raspberry-pi-coming-soon/" +[#]: author: "Abhishek https://news.itsfoss.com/author/root/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +It Seems Pop OS Linux Will Soon be Available on Raspberry Pi and Other ARM Devices +====== + +There was a time when only lightweight [operating systems were available for ARM devices like Ra][1]spberry Pi. Why? Because earlier ARM devices had low end hardware with limited RAM and CPU. + +It all changed when Raspberry Pi 4 targeted desktop users with its 8 GB variant and doubled down on it with the introduction of Raspberry Pi 400. + +This resulted in bringing the support of mainstream desktop Linux distributions to Raspberry Pi. Thanks to that, you can now [install Ubuntu desktop on Raspberry Pi][2]. + +Since Ubuntu desktop now supports ARM devices, other Ubuntu-based distros should join the ARM bandwagon soon. And it seems Pop!_OS is ready to board it. + +### Pop OS coming soon on Raspberry Pi! + +System76’s Principal Engineer and maintainer of Pop!_OS, Jeremy Soller shared a teaser photo on Twitter recently. The image is basically a screenshot of Neofetch running in terminal. + +> [pic.twitter.com/ehfGXwtsBf][3] +> +> — Jeremy Soller (@jeremy_soller) [September 28, 2021][4] + +If you look closely, you can see that some details that indicate that it is running on a Raspberry Pi device. + +![][5] + +The host name indicates Raspberry Pi and so does the BCM2835 CPU (chip used on Raspberry Pi devices). You can also notice the aarch64 in the OS name. + +In addition to that, Jeremy also shared a repository link that contains Pop OS packages for ARM devices. Here’s the [link][6]. + +> 😉 +> +> — Jeremy Soller (@jeremy_soller) [September 28, 2021][7] + +### How soon? + +There is no other information available from Systm76 on this front. But if I have to make a guess, I would say that the upcoming Pop!_OS 21.10 version will have an ARM version for Raspberry Pi like devices. + +This is not a blind guess. The ARM repository link shared by Jeremy clearly mentions ‘impish’ in its directory structure. Impish Indri is the codename for the upcoming [Ubuntu 21.10 slated for release][8] on 14th October. + +Pop!_OS 21.10 follows the release of Ubuntu 21.10 and should be released soon afterwards. All this gives us enough clue to surmise that Pop!_OS is coming to Raspberry Pi devices this month. + +This is indeed a good thing because Pop!_OS is popular among developers. This could mean more developers using Raspberry Pi as their development environment. + +I am delighted to see this development. How about you? + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/pop-os-raspberry-pi-coming-soon/ + +作者:[Abhishek][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/root/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/raspberry-pi-os/ +[2]: https://itsfoss.com/install-ubuntu-desktop-raspberry-pi/ +[3]: https://t.co/ehfGXwtsBf +[4]: https://twitter.com/jeremy_soller/status/1442977756623429640?ref_src=twsrc%5Etfw +[5]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ2OCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[6]: https://apt.pop-os.org/release/dists/impish/main/binary-arm64/ +[7]: https://twitter.com/jeremy_soller/status/1442976088053796870?ref_src=twsrc%5Etfw +[8]: https://news.itsfoss.com/ubuntu-21-10-release-schedule/ From 35a05561d61850ed12a8f39f63e0d40781a8689d Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Tue, 5 Oct 2021 09:52:14 +0800 Subject: [PATCH 079/143] Delete 20211005 .md --- sources/tech/20211005 .md | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 sources/tech/20211005 .md diff --git a/sources/tech/20211005 .md b/sources/tech/20211005 .md deleted file mode 100644 index 9edb764851..0000000000 --- a/sources/tech/20211005 .md +++ /dev/null @@ -1,25 +0,0 @@ -[#]: subject: "" -[#]: via: "https://www.2daygeek.com/recover-corrupted-grub-2-bootloader-centos-8-rhel-8/" -[#]: author: " " -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - - -====== - --------------------------------------------------------------------------------- - -via: https://www.2daygeek.com/recover-corrupted-grub-2-bootloader-centos-8-rhel-8/ - -作者:[][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: -[b]: https://github.com/lujun9972 From 7cd21137d9b1461ed9bdf58d0323465c3fecaaf4 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 5 Oct 2021 10:02:10 +0800 Subject: [PATCH 080/143] APL --- sources/tech/20211001 8 reasons why I learned Core Java.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211001 8 reasons why I learned Core Java.md b/sources/tech/20211001 8 reasons why I learned Core Java.md index d42e020c30..686294a0e9 100644 --- a/sources/tech/20211001 8 reasons why I learned Core Java.md +++ b/sources/tech/20211001 8 reasons why I learned Core Java.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/10/why-i-learned-core-java" [#]: author: "Shantam Sahai https://opensource.com/users/shantam-sahai" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 00402895b326e3cd3f48757c671b6d861ff30dc6 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 5 Oct 2021 10:51:50 +0800 Subject: [PATCH 081/143] TSL&PRF --- ...11001 8 reasons why I learned Core Java.md | 99 ------------------- ...11001 8 reasons why I learned Core Java.md | 97 ++++++++++++++++++ 2 files changed, 97 insertions(+), 99 deletions(-) delete mode 100644 sources/tech/20211001 8 reasons why I learned Core Java.md create mode 100644 translated/tech/20211001 8 reasons why I learned Core Java.md diff --git a/sources/tech/20211001 8 reasons why I learned Core Java.md b/sources/tech/20211001 8 reasons why I learned Core Java.md deleted file mode 100644 index 686294a0e9..0000000000 --- a/sources/tech/20211001 8 reasons why I learned Core Java.md +++ /dev/null @@ -1,99 +0,0 @@ -[#]: subject: "8 reasons why I learned Core Java" -[#]: via: "https://opensource.com/article/21/10/why-i-learned-core-java" -[#]: author: "Shantam Sahai https://opensource.com/users/shantam-sahai" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -8 reasons why I learned Core Java -====== -Understanding Core Java gives you a significant advantage when learning -all of the related tools built on top of it. -![Learning and studying technology is the key to success][1] - -Computer programming, also known as *coding *for short, is not about which language you use. It's about developing programming logic and learning to think like a programmer. The language you start with should be the one that helps you the most in this endeavor. So you have to ask yourself the question: "What do you want to do as a programmer?" - -For example, if you want to work on Android app development, video game development, desktop GUI applications, or just general software development, I think learning Java is an excellent option. It's the language I chose, and it has made a whole world of programming available to me. In India, where I live, the average salary of a Java programmer is around 5.9 Lakhs per Annum (LPA) (it can be as high as 10 LPA, depending on your experience.) - -Java is a vast language, though, with lots of frameworks and variants to choose from. _Core Java_ is the term the tech industry has developed to refer to the central components of the Java language—the thing that people use to write the frameworks and has developed the cottage industry around Java. I believe that Core Java is one of the most powerful skills you can acquire because understanding the basics of Java gives you a significant advantage when learning all of the related tools built on top of it. - -Here are the top eight reasons I chose Core Java, and I think you should too: - -### 1\. Java is an evolving programming language - -Java has significant corporate backing, but the most important component in Java development is [OpenJDK][2]—the open source Java Development Kit. With a mission statement to promote and maintain open source, open innovation, and open standards, the OpenJDK community is committed to improving and maintaining an open source implementation of Java and its toolchain. - -Innovations and conveniences get added with every release, making Java easier for developers and users alike. For instance, it was just in Java 11 that they added the ability to run .java files. Now, all it takes to run a single-file Java application is the `java` command, no compilation required: - - -``` -$ java ./hello.java - -Hello world -``` - -You can use Java to program applications for the web, mobile, or desktop. It's a highly versatile language. It has many interesting features such as dynamic coding, multiple security features, platform-independent characteristics, and network-centric design. - -### 2\. Java anchors android app development - -You can use Java to create Android apps. The Android market is enormous, and the demand for mobile programmers is only growing. Even if you're not interested in becoming a professional app developer, the ability to customize your mobile experience is a powerful one, and Java makes it possible. - -And it's easier than you might think! Learning Core Java makes it easy for you to pick up Android development kits or frameworks that export to mobile platforms, like [Processing][3]. - -### 3\. Rich APIs make Java easy to use - -Java's API (Application Programming Interface) includes classes, packages, interfaces, and more. Java has mainly three types of APIs:  - - * Official Java Core APIs - * Optimal official Java APIs - * Unofficial APIs - - - -An API makes programming easier because you can construct applications without knowing their inside implementations. In my experience, many companies prefer Java over other options because of the strength of the Java API. - -### 4\. Open source libraries - -There are nearly endless open source libraries for Java, including Maven, Guava, Apache Commons, Jhipster, and much more. You can copy, study, and share resources from these libraries. They make programming more accessible, faster, cheaper, and more educational. - -### 5\. Java has reliable development tools - -Java has some of my favorite IDEs (Integrated Development Environments), including [Eclipse][4], [NetBeans][5], [BlueJ][6], and IntelliJ IDEA. They provide debugging, syntax highlighting, code completion, language support, automated refactoring, and more. In short, IDEs play an essential role in Java's success and in your success as you learn it! - -### 6\. Demand for Java developers in India - -Giants like Google, Netflix, and Instagram use Java for backend development. Indian companies are actively looking to hire Java programmers to develop Android apps, new APIs, and microservices on the cloud. This demand translates to more job opportunities. - -### 7\. The Java programming community is huge - -The community of Java programmers is vast. It ranges from groups of beginners to experts. I have found the community to be welcoming and helpful when you ask for support. Most importantly, I've learned tons of new tricks by involving myself in online discussions. Being a part of the community has been a vital way for me to keep up with the latest trends, learn more about the language, and keep up with development. - -### 8\. Java is platform-independent - -The fact that Java is platform-independent makes it highly valuable. Java source code is compiled down to bitcode, which runs on the Java Virtual Machine (JVM). Any platform running a JVM (and all the major platforms do) can run your Java application. You write once and run everywhere! And this isn't just a theoretical position: Java has actually achieved this. You can write Java on whatever platform you develop on and deliver it to all your target platforms. - -There are many resources online to learn Java, including a [cheat sheet][7] here on Opensource.com. There's also a great [online Java course][8] available in Hindi for free. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/10/why-i-learned-core-java - -作者:[Shantam Sahai][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/shantam-sahai -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/studying-books-java-couch-education.png?itok=C9gasCXr (Learning and studying technology is the key to success) -[2]: https://developer.ibm.com/components/open-jdk/ -[3]: http://processing.org/ -[4]: https://opensource.com/article/20/12/eclipse -[5]: https://opensource.com/article/20/12/netbeans -[6]: https://opensource.com/article/20/7/ide-java#bluej -[7]: https://opensource.com/downloads/java-cheat-sheet -[8]: https://www.learnvern.com/course/core-java-programming-tutorial diff --git a/translated/tech/20211001 8 reasons why I learned Core Java.md b/translated/tech/20211001 8 reasons why I learned Core Java.md new file mode 100644 index 0000000000..58f2a47d83 --- /dev/null +++ b/translated/tech/20211001 8 reasons why I learned Core Java.md @@ -0,0 +1,97 @@ +[#]: subject: "8 reasons why I learned Core Java" +[#]: via: "https://opensource.com/article/21/10/why-i-learned-core-java" +[#]: author: "Shantam Sahai https://opensource.com/users/shantam-sahai" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +学习 Core Java 的 8 个原因 +====== + +> 在学习建立在 Java 之上的所有相关工具时,了解 Core Java 会给你带来很大的优势。 + +![学习和研究技术是成功的关键][1] + +计算机编程(也被称为 *编码*)的重点不是使用哪种编程语言,而是发展编程逻辑和学习像程序员一样思考。你一开始使用的编程语言应该是在这一努力过程中对你帮助最大的语言。因此,你必须问自己一个问题,“作为一个程序员,你想开发什么?” + +例如,如果你想从事安卓应用开发、视频游戏开发、桌面 GUI 应用,或者只是一般的软件开发,我认为学习 Java 是一个很好的选择。我选择的语言是 Java,它为我提供了一个完整的编程世界。在我居住的印度,Java 程序员的平均工资约为每年 59 万印度卢比(LPA)(根据你的经验,可以高达 100 LPA)。 + +不过,Java 是一种庞大的语言,有很多框架和变体可供选择。Core Java 是科技行业发展出来的术语,指的是 Java 语言的中心组件,人们用它来编写框架,并围绕 Java 发展了丰富的产业。我认为,Core Java 是你能获得的最强大的技能之一,因为在学习建立在它之上的所有相关工具时,了解 Java 的基础知识会给你带来巨大的优势。 + +以下是我选择 Core Java 的八大理由,我想你也会认可: + +### 1、Java 是一种不断发展的编程语言 + +Java 有重要的企业支持,但 Java 开发中最重要的组成部分是 [OpenJDK][2],这是个开源的 Java 开发工具包。OpenJDK 社区以促进和维护开发源码、开放创新和开放标准为使命,致力于改进和维护 Java 及其工具链的开源实现。 + +它的每一个版本都会增加创新和便利,使 Java 对开发者和用户都更容易。例如,就在 Java 11 中,他们增加了运行 .java 文件的能力。现在,运行一个单文件的 Java 应用程序所需要的只是 `java` 命令,不需要进行编译: + +``` +$ java ./hello.java + +Hello world +``` + +你可以使用 Java 做 Web、移动或桌面的应用程序编程。它是一种高度通用的语言。它有许多有趣的特点,如动态编码、多种安全功能、平台无关的特点和以网络为中心的设计。 + +### 2、Java 锚定了安卓应用开发 + +你可以使用 Java 来创建安卓用程序。安卓市场巨大,对移动程序员的需求只会越来越大。即使你对成为一个专业的应用程序开发人员不感兴趣,定制你的移动体验的能力也是很强大的,而 Java 使之成为可能。 + +而且,这比你想象的要容易得多!学习 Core Java 可以让你轻松地掌握安卓开发工具包或可以输出到移动平台的框架,如 [Processing][3]。 + +### 3、丰富的 API 使得 Java 易于使用 + +Java 的 API(应用编程接口Application Programming Interface)包括类、包、接口等。Java 主要有三种类型的 API: + + * 官方的 Java Core API + * 最佳的官方 Java API + * 非官方的 API + +API 使编程更容易,因为你可以在不知道其内部实现的情况下构建应用程序。根据我的经验,许多公司喜欢用 Java 而不是其他选择,就是因为 Java API 的力量。 + +### 4、开源库 + +几乎有无穷无尽的 Java 开源库,包括 Maven、Guava、Apache Commons、Jhipster,等等。你可以复制、学习和分享这些库的资源。它们使编程更容易获得、更快、更便宜,也更有教育意义。 + +### 5、Java 有可靠的开发工具 + +Java 有一些我最喜欢的 IDE(集成开发环境Integrated Development Environments),包括 [Eclipse][4]、[NetBeans][5]、[BlueJ][6] 和 IntelliJ IDEA。它们提供了调试、语法高亮、代码补完、语言支持、自动重构等功能。简而言之,IDE 在 Java 的成功和你在 Java 学习中起着至关重要的作用! + +### 6、印度对 Java 开发人员的需求 + +谷歌、Netflix 和 Instagram 等巨头都使用 Java 进行后台开发。印度公司正在积极寻找雇用 Java 程序员来开发安卓应用程序、新的 API 和云上的微服务。这种需求转化为更多的工作机会。 + +### 7、Java 有庞大的编程社区 + +Java 程序员的社区庞大,囊括了从初学者到专家的所有人。我发现这个社区很热情待人,当你寻求支持的时候,他们会给予帮助。最重要的是,通过参与在线讨论,我学到了大量的新技巧。作为社区的一分子,这是我了解最新趋势、学习更多语言和跟上发展的重要途径。 + +### 8、Java 是独立于平台 + +Java 是平台无关的,这一点使它具有很高的价值。Java 源代码被编译成字节码,在 Java 虚拟机(JVM)上运行。任何运行 JVM 的平台(支持所有主要平台)都可以运行你的 Java 应用程序。你只需写一次,就可以在任何地方运行!这并不只是理论上的,Java 实际上已经实现了这一点。你可以在你开发的任何平台上编写 Java,并将其交付给你的所有目标平台。 + +网上有很多学习 Java 的资源,包括 Opensource.com 上有一个 [速查表][7]。还有一个很好的 [在线 Java 课程][8],可以用印地语免费学习。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/why-i-learned-core-java + +作者:[Shantam Sahai][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/shantam-sahai +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/studying-books-java-couch-education.png?itok=C9gasCXr (Learning and studying technology is the key to success) +[2]: https://developer.ibm.com/components/open-jdk/ +[3]: http://processing.org/ +[4]: https://opensource.com/article/20/12/eclipse +[5]: https://opensource.com/article/20/12/netbeans +[6]: https://opensource.com/article/20/7/ide-java#bluej +[7]: https://opensource.com/downloads/java-cheat-sheet +[8]: https://www.learnvern.com/course/core-java-programming-tutorial From 6c1aefb84a2ca1549085f4c402008cc26718ec08 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 5 Oct 2021 11:03:36 +0800 Subject: [PATCH 082/143] APL --- .../tech/20210818 below- a time traveling resource monitor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210818 below- a time traveling resource monitor.md b/sources/tech/20210818 below- a time traveling resource monitor.md index 0b55e8b14b..2016e92dc8 100644 --- a/sources/tech/20210818 below- a time traveling resource monitor.md +++ b/sources/tech/20210818 below- a time traveling resource monitor.md @@ -2,7 +2,7 @@ [#]: via: "https://fedoramagazine.org/below-a-time-traveling-resource-monitor/" [#]: author: "Daniel Xu https://fedoramagazine.org/author/dxuu/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 3e91d556b157e2bb14cca14d90e48c8d98c219e9 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 5 Oct 2021 14:38:54 +0800 Subject: [PATCH 083/143] TSL --- ...elow- a time traveling resource monitor.md | 111 ------------------ ...elow- a time traveling resource monitor.md | 108 +++++++++++++++++ 2 files changed, 108 insertions(+), 111 deletions(-) delete mode 100644 sources/tech/20210818 below- a time traveling resource monitor.md create mode 100644 translated/tech/20210818 below- a time traveling resource monitor.md diff --git a/sources/tech/20210818 below- a time traveling resource monitor.md b/sources/tech/20210818 below- a time traveling resource monitor.md deleted file mode 100644 index 2016e92dc8..0000000000 --- a/sources/tech/20210818 below- a time traveling resource monitor.md +++ /dev/null @@ -1,111 +0,0 @@ -[#]: subject: "below: a time traveling resource monitor" -[#]: via: "https://fedoramagazine.org/below-a-time-traveling-resource-monitor/" -[#]: author: "Daniel Xu https://fedoramagazine.org/author/dxuu/" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -below: a time traveling resource monitor -====== - -![][1] - -In this article, we introduce _below_: an Apache 2.0 licensed resource monitor for modern Linux systems. _below_ allows you to replay previously recorded data. - -### Background - -One of the kernel’s primary responsibilities is mediating access to resources. Sometimes this might mean parceling out physical memory such that multiple processes can share the same host. Other times it might mean ensuring equitable distribution of CPU time. In all these contexts, the kernel provides the mechanism and leaves the policy to “someone else”. In more recent times, this “someone else” is usually a runtime like systemd or dockerd. The runtime takes input from a scheduler or end user — something along the lines of what to run and how to run it — and turns the right knobs and pulls the right levers on the kernel such that the workload can —well — get to work. - -In a perfect world this would be the end of the story. However, the reality is that resource management is a complex and rather opaque amalgam of technologies that has evolved over decades of computing. Despite some of this technology having various warts and dead ends, the end result — a container — works relatively well. While the user does not usually need to concern themselves with the details, it is crucial for infrastructure operators to have visibility into their stack. Visibility and debuggability are essential for detecting and investigating misconfigurations, bugs, and systemic issues. - -To make matters more complicated, resource outages are often difficult to reproduce. It is not unusual to spend weeks waiting for an issue to reoccur so that the root cause can be investigated. Scale further compounds this issue: one cannot run a custom script on _every_ host in the hopes of logging bits of crucial state if the bug happens again. Therefore, more sophisticated tooling is required. Enter _below_. - -### Motivation - -Historically Facebook has been a heavy user of _atop_ [0]. _atop_ is a performance monitor for Linux that is capable of reporting the activity of all processes as well as various pieces of system level activity. One of the most compelling features _atop_ has over tools like _htop_ is the ability to record historical data as a daemon. This sounds like a simple feature, but in practice this has enabled debugging countless production issues. With long enough data retention, it is possible to go backwards in time and look at the host state before, during, and after the issue or outage. - -Unfortunately, it became clear over the years that _atop_ had certain deficiencies. First, cgroups [1] have emerged as the defacto way to control and monitor resources on a Linux machine. _atop_ still lacks support for this fundamental building block. Second, _atop_ stores data on disk with custom delta compression. This works fine under normal circumstances, but under heavy resource pressure the host is likely to lose data points. Since delta compression is in use, huge swaths of data can be lost for periods of time where the data is most important. Third, the user experience has a steep learning curve. We frequently heard from _atop_ power users that they love the dense layout and numerous keybindings. However, this is a double edged sword. When someone new to the space wants to debug a production issue, they’re solving two problems at once now: the issue at hand and how to use _atop_. - -_below_ was designed and developed by and for the resource control team at Facebook with input from production _atop_ users. The resource control team is responsible for, as the name suggests, resource management at scale. The team is comprised of kernel developers, container runtime developers, and hardware folks. Recognizing the opportunity for a next-generation system monitor, we designed _below_ with the following in mind: - - * Ease of use: _below_ must be both intuitive for new users as well as powerful for daily users - * Opinionated statistics: _below_ displays accurate and useful statistics. We try to avoid collecting and dumping stats just because we can. - * Flexibility: when the default settings are not enough, we allow the user to customize their experience. Examples include configurable keybindings, configurable default view, and a scripting interface (the default being a terminal user interface). - - - -### Install - -To install the package: - -``` -# dnf install -y below -``` - -To turn on the recording daemon: - -``` -# systemctl enable --now below -``` - -### Quick tour - -_below_’s most commonly used mode is replay mode. As the name implies, replay mode replays previously recorded data. Assuming you’ve already started the recording daemon, start a session by running: - -``` -$ below replay --time "5 minutes ago" -``` - -You will then see the cgroup view: - -![][2] - -If you get stuck or forget a keybinding, press **?** to access the help menu. - -The very top of the screen is the status bar. The status bar displays information about the current sample. You can move forwards and backwards through samples by pressing **t** and **T**, respectively. The middle section is the system overview. The system overview contains statistics about the system as a whole that are generally always useful to see. The third and lowest section is the multipurpose view. The image above shows the cgroup view. Additionally, there are process and system views, accessible by pressing **p** and **s**, respectively. - -Press **↑** and **↓** to move the list selection. Press **<Enter>** to collapse and expand cgroups. Suppose you’ve found an interesting cgroup and you want to see what processes are running inside it. To zoom into the process view, select the cgroup and press **z**: - -![][3] - -Press **z** again to return to the cgroup view. The cgroup view can be somewhat long at times. If you have a vague idea of what you’re looking for, you can filter by cgroup name by pressing **/** and entering a filter: - -![][4] - -At this point, you may have noticed a tab system we haven’t explored yet. To cycle forwards and backwards through tabs, press **<Tab>** and **<Shift> \+ <Tab>** respectively. We’ll leave this as an exercise to the reader. - -### Other features - -Under the hood, _below_ has a powerful design and architecture. Facebook is constantly upgrading to newer kernels, so we never assume a data source is available. This tacit assumption enables total backwards and forwards compatibility between kernels and _below_ versions. Furthermore, each data point is zstd compressed and stored in full. This solves the issues with delta compression we’ve seen _atop_ have at scale. Based on our tests, our per-sample compression can achieve on average a 5x compression ratio. - -_below_ also uses eBPF [2] to collect information about short-lived processes (processes that live for shorter than the data collection interval). In contrast, _atop_ implements this feature with BSD process accounting, a known slow and priority-inversion-prone kernel interface. - -For the user, _below_ also supports live-mode and a dump interface. Live mode combines the recording daemon and the TUI session into one process. This is convenient for browsing system state without committing to a long running daemon or disk space for data storage. The dump interface is a scriptable interface to all the data _below_ stores. Dump is both powerful and flexible — detailed data is available in CSV, JSON, and human readable format. - -### Conclusion - -_below_ is an Apache 2.0 licensed open source project that we (the _below_ developers) think offers compelling advantages over existing tools in the resource monitoring space. We’ve spent a great deal of effort preparing _below_ for open source use so we hope that readers and the community get a chance to try _below_ out and report back with bugs and feature requests. - -[0]: -[1]: -[2]: - --------------------------------------------------------------------------------- - -via: https://fedoramagazine.org/below-a-time-traveling-resource-monitor/ - -作者:[Daniel Xu][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://fedoramagazine.org/author/dxuu/ -[b]: https://github.com/lujun9972 -[1]: https://fedoramagazine.org/wp-content/uploads/2021/08/below_resource_monitor-816x345.jpg -[2]: https://fedoramagazine.org/wp-content/uploads/2021/08/image-1024x800.png -[3]: https://fedoramagazine.org/wp-content/uploads/2021/08/image-1-1024x800.png -[4]: https://fedoramagazine.org/wp-content/uploads/2021/08/image-2-1024x800.png diff --git a/translated/tech/20210818 below- a time traveling resource monitor.md b/translated/tech/20210818 below- a time traveling resource monitor.md new file mode 100644 index 0000000000..2571c2d3d4 --- /dev/null +++ b/translated/tech/20210818 below- a time traveling resource monitor.md @@ -0,0 +1,108 @@ +[#]: subject: "below: a time traveling resource monitor" +[#]: via: "https://fedoramagazine.org/below-a-time-traveling-resource-monitor/" +[#]: author: "Daniel Xu https://fedoramagazine.org/author/dxuu/" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Below:一个时间旅行的资源监控器 +====== + +![][1] + +在这篇文章中,我们将介绍 below:一个用于现代 Linux 系统的 Apache 2.0 许可的资源监视器。below 允许你重放以前记录的数据。 + +### 背景 + +内核的主要职责之一是调解对资源的访问。有时这可能意味着分配物理内存,使多个进程可以共享同一主机。其他时候,它可能意味着确保 CPU 时间的公平分配。在所有这些情况下,内核提供了机制,而将策略留给了“别人”。在最近,这个“别人”通常是 systemd 或 dockerd 这样的运行时。运行时接受来自调度器或最终用户的输入(类似于运行什么和如何运行)并在内核上转动正确的旋钮和拉动正确的杠杆,从而使工作负载能够*好好*工作。 + +在一个完美的世界里,故事就到此结束了。然而,现实情况是,资源管理是一个复杂的、相当不透明的技术混合体,在几十年里计算技术不断发展。尽管其中一些技术有各种缺陷和死角,但最终的结果,容器运作得比较好。虽然用户通常不需要关心这些细节,但对于基础设施运营商来说,对他们的技术架构拥有可见性是至关重要的。可见性和可调试性对于检测和调查错误配置、问题和系统性故障至关重要。 + +让事情变得更加复杂的是,资源中断往往难以重现。经常需要花费数周时间等待一个问题重新出现,以便调查其根本原因。规模的扩大进一步加剧了这个问题:我们不能在*每台*主机上运行一个自定义脚本,希望在错误再次发生时记录下关键状态的片段。因此,需要更复杂的工具。这就出现了 below。 + +### ### 动机 + +历史上,Facebook 一直是 [atop][5] 的忠实用户。`atop` 是一个用于 Linux 的性能监视器,能够报告所有进程的活动以及各种系统级活动。与 `htop` 等工具相比,`atop` 最引人注目的功能之一是能够作为一个守护程序记录历史数据。这听起来是一个简单的功能,但在实践中,这使得调试无数的生产问题成为可能。有了足够长的数据保留,就有可能在时间上回溯,查看在问题或故障发生之前、期间和之后的主机状态。 + +不幸的是,随着时间的推移,人们发现`atop` 有某些不足之处。首先,[控制组][6]cgroup 已经成为控制和监视 Linux 机器上资源的实际方式。`atop` 仍然缺乏对这一基本构建模块的支持。第二,`atop` 用自定义的 delta 压缩方法在磁盘上存储数据。这在正常情况下运行良好,但在沉重的资源压力下,主机很可能会丢失数据点。由于使用了 delta 压缩,在数据最重要的时间段内,数据可能会大面积丢失。第三,用户体验有一个陡峭的学习曲线。我们经常听到 `atop` 的资深用户说,他们喜欢密集的布局和众多的键盘绑定。然而,这也是一把双刃剑。当一个刚进入这个领域的人想要调试一个生产问题时,他们现在要同时解决两个问题:手头的问题和如何使用 `atop`。 + +`below` 是由 Facebook 的资源控制团队为其设计和开发的,并得到了 `atop` 生产用户的投入。顾名思义,资源控制团队负责的是规模化的资源管理。该团队由内核开发人员、容器运行时开发人员和硬件人员组成。认识到下一代系统监控器的机会,我们在设计 `below` 时考虑到以下几点: + + * 易用性:`below` 必须既能为新用户提供直观的体验,又能为日常用户提供强大的功能。 + *有意义的统计数据:`below` 显示准确和有用的统计数据。即便可以,但我们尽量避免收集和倾倒统计数字。 + * 灵活性:当默认设置不合适时,我们允许用户自定义他们的体验。例如包括可配置的键绑定、可配置的默认视图,以及脚本界面(默认为终端用户接口)。 + +### 安装 + +安装该软件包: + +``` +# dnf install -y below +``` + +打开记录守护进程: + +``` +# systemctl enable --now below +``` + +### 快速介绍 + +`below` 最常用的模式是重放模式。顾名思义,重放模式是重放以前记录的数据。假设你已经启动了记录守护程序,那么通过运行以下程序启动一个会话: + +``` +$ below replay --time "5 minutes ago" +``` + +然后你会看到控制组视图: + +![][2] + +如果你不知道该怎么操作,或者忘记了一个键位,按 `?` 可以进入帮助菜单。 + +屏幕的最上方是状态栏。状态栏显示关于当前样本的信息。你可以通过按 `t` 和 `T` 分别向前和向后移动样本。中间的部分是系统概览。系统概览包含了关于整个系统的统计数据,一般来说,这些数据总是很有用的。第三部分也是最下面的部分是多用途视图。上面的图片显示了控制组视图。此外,还有进程和系统视图,分别通过按 `p` 和` s` 来访问。 + +按 `↑` 和 `↓` 来移动列表选择。按回车键来折叠和展开控制组。假设你发现了一个感兴趣的控制组,你想看看它里面有哪些进程在运行。要放大进程视图,选择控制组并按 `z`: + +![][3] + +再按 `z` 返回到控制组视图。这个视图有时会有点长。如果你对你要找的东西有一个模糊的概念,你可以通过按 `/` 并输入一个过滤器来过滤控制组名称。 + +![][4] + +在这一点上,你可能已经注意到了一个我们还没有探索过的标签系统。要在标签中向前和向后循环,可以分别按 `Tab` 和 `Shift` + `Tab`。我们把这个问题留给读者去做练习。 + +### 其他功能 + +在底层下,`below` 有一个强大的设计和架构。Facebook 正在不断升级到更新的内核,所以我们从不假设数据源是可用的。这种默契的假设使得内核和 `below `版本之间能够完全向前和向后兼容。此外,每个数据点都被 zstd 压缩并完整地存储。这解决了我们看到的 `atop` 在大规模时的 delta 压缩问题。根据我们的测试,我们的每个样本压缩可以达到平均 5 倍的压缩率。 + +`below` 也使用 [eBPF][8] 来收集关于短暂进程(生存时间短于数据收集间隔的进程)的信息。相比之下,`atop` 使用 BSD 进程核算来实现这一功能,这是一个已知的缓慢且容易发生优先级转换的内核接口。 + +对于用户来说,`below` 还支持实时模式和一个转储接口。实时模式将记录守护程序和 TUI 会话合并到一个进程中。这对于浏览系统状态是很方便的,不需要为数据存储投入长期运行的守护程序或磁盘空间。转储接口是一个可编写脚本的接口,用于所有的 `below` 数据存储。转储既强大又灵活,详细的数据以 CSV、JSON 和人类可读格式提供。 + +### 总结 + +`below` 是一个 Apache 2.0 许可的开源项目,我们(`below` 的开发者)认为它比资源监控领域的现有工具具有引人注目的优势。我们已经花了大量的精力来准备 `below`,以提供开源使用,所以我们希望读者和社区有机会尝试 `below`,并报告错误和功能要求。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/below-a-time-traveling-resource-monitor/ + +作者:[Daniel Xu][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/dxuu/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/08/below_resource_monitor-816x345.jpg +[2]: https://fedoramagazine.org/wp-content/uploads/2021/08/image-1024x800.png +[3]: https://fedoramagazine.org/wp-content/uploads/2021/08/image-1-1024x800.png +[4]: https://fedoramagazine.org/wp-content/uploads/2021/08/image-2-1024x800.png +[5]: +[6]: +[7]: \ No newline at end of file From e70fc460e31dd291bdcd832587dd3fee140e912a Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 5 Oct 2021 14:58:47 +0800 Subject: [PATCH 084/143] PRF @mengxinayan --- .../20210728 Kernel tracing with trace-cmd.md | 60 ++++++++++--------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/translated/tech/20210728 Kernel tracing with trace-cmd.md b/translated/tech/20210728 Kernel tracing with trace-cmd.md index f2f2633110..b0bd534721 100644 --- a/translated/tech/20210728 Kernel tracing with trace-cmd.md +++ b/translated/tech/20210728 Kernel tracing with trace-cmd.md @@ -3,16 +3,18 @@ [#]: author: (Gaurav Kamathe https://opensource.com/users/gkamathe) [#]: collector: (lujun9972) [#]: translator: (mengxinayan) -[#]: reviewer: ( ) +[#]: reviewer: (wxy) [#]: publisher: ( ) [#]: url: ( ) 使用 trace-cmd 追踪内核 ====== -trace-cmd 是一个容易使用且特性众多的,可用来追踪内核函数的命令。 -![Puzzle pieces coming together to form a computer screen][1] -在 [之前的文章][2] 里,我介绍了如何利用 `ftrace` 来追踪内核函数。通过写入和读出文件来使用 `ftrace` 会变得很枯燥,所以在它周围使用了一个包装器来运行带有选项的命令,以启用和禁用追踪,设置过滤器,查看输出,清除输出等等。 +> trace-cmd 是一个易于使用,且特性众多、可用来追踪内核函数的命令。 + +![](https://img.linux.net.cn/data/attachment/album/202110/05/145818d2i9tgjetzj8itqg.jpg) + +在 [之前的文章][2] 里,我介绍了如何利用 `ftrace` 来追踪内核函数。通过写入和读出文件来使用 `ftrace` 会变得很枯燥,所以我对它做了一个封装来运行带有选项的命令,以启用和禁用追踪、设置过滤器、查看输出、清除输出等等。 [trace-cmd][3] 命令是一个可以帮助你做到这一点的工具。在这篇文章中,我使用 `trace-cmd` 来执行我在 `ftrace` 文章中所做的相同任务。由于会经常参考那篇文章,建议在阅读这篇文章之前先阅读它。 @@ -27,7 +29,7 @@ trace-cmd 是一个容易使用且特性众多的,可用来追踪内核函数 none on /sys/kernel/tracing type tracefs (rw,relatime,seclabel) ``` -然而,你需要手动尝试安装 `trace-cmd` 命令: +不过,你需要手动尝试安装 `trace-cmd` 命令: ``` # dnf install trace-cmd -y @@ -35,16 +37,16 @@ none on /sys/kernel/tracing type tracefs (rw,relatime,seclabel) ### 列出可用的追踪器 -当使用 `ftrace` 时,你必须查看文件的内容以了解有哪些追踪器可用。但使用 `trace-cmd`,你可以通过以下方式获得这些信息。 +当使用 `ftrace` 时,你必须查看文件的内容以了解有哪些追踪器可用。但使用 `trace-cmd`,你可以通过以下方式获得这些信息: ``` # trace-cmd list -t hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop ``` -### 启用函数(function)追踪器 +### 启用函数追踪器 -在我之前的文章中,我使用了两个追踪器,在这里我也会这么做。用 `function` 启用你的第一个追踪器。 +在我 [之前的文章][2] 中,我使用了两个追踪器,在这里我也会这么做。用 `function` 启用你的第一个追踪器: ``` $ trace-cmd start -p function @@ -53,7 +55,7 @@ $ trace-cmd start -p function ### 查看追踪输出 -一旦追踪器被启用,你可以通过使用 `show` 参数来查看输出。这只显示了前20行,以保持例子的简短(见我之前的文章对输出的解释)。 +一旦追踪器被启用,你可以通过使用 `show` 参数来查看输出。这只显示了前 20 行以保持例子的简短(见我之前的文章对输出的解释): ``` # trace-cmd show | head -20 @@ -83,24 +85,28 @@ $ trace-cmd start -p function 追踪将会在后台继续运行,你可以继续用 `show` 查看输出。 -要停止追踪,请运行带有 `stop` 参数的 `trace-cmd` 命令。 +要停止追踪,请运行带有 `stop` 参数的 `trace-cmd` 命令: + ``` # trace-cmd stop ``` -要清除缓冲区,用 `clear` 参数运行它。 + +要清除缓冲区,用 `clear` 参数运行它: + ``` # trace-cmd clear ``` -### 启用 函数调用图(function_graph) 追踪器 +### 启用函数调用图追踪器 运行第二个追踪器,通过 `function_graph` 参数来启用它。 + ``` # trace-cmd start -p function_graph Plugin 'function_graph' ``` -再次使用 `show` 参数查看输出。正如预期的那样,输出与第一次追踪输出略有不同。这一次,它包括一个**函数调用**链。 +再次使用 `show` 参数查看输出。正如预期的那样,输出与第一次追踪输出略有不同。这一次,它包括一个**函数调用**链: ``` # trace-cmd show | head -20 @@ -126,7 +132,7 @@ $ trace-cmd start -p function 4) | __cond_resched() { ``` -使用 `stop` 和 `clear` 命令来停止追踪和清楚缓存区。 +使用 `stop` 和 `clear` 命令来停止追踪和清除缓存区: ``` # trace-cmd stop @@ -135,14 +141,14 @@ $ trace-cmd start -p function ### 调整追踪以增加深度 -如果你想在函数调用中看到更多的深度,你可以对追踪器进行调整。 +如果你想在函数调用中看到更多的深度,你可以对追踪器进行调整: ``` # trace-cmd start -p function_graph --max-graph-depth 5 plugin 'function_graph' ``` -现在,当你将这个输出与你之前看到的进行比较时,你应该看到更多的嵌套函数调用。 +现在,当你将这个输出与你之前看到的进行比较时,你应该看到更多的嵌套函数调用: ``` # trace-cmd show | head -20 @@ -170,7 +176,7 @@ $ trace-cmd start -p function ### 了解可被追踪的函数 -如果你想只追踪某些函数而忽略其他的,你需要知道确切的函数名称。你可以用 `list -f` 参数来得到它们。例如搜索常见的内核函数 `kmalloc`,它被用来在内核中分配内存。 +如果你想只追踪某些函数而忽略其他的,你需要知道确切的函数名称。你可以用 `list -f` 参数来得到它们。例如搜索常见的内核函数 `kmalloc`,它被用来在内核中分配内存: ``` # trace-cmd list -f | grep kmalloc @@ -198,7 +204,7 @@ __kmalloc_node_track_caller ### 追踪内核模块相关的函数 -你也可以追踪与特定内核模块相关的函数。假设你想追踪 `kvm` 内核模块相关的功能,你可以通过以下方式来实现。确保该模块已经加载。 +你也可以追踪与特定内核模块相关的函数。假设你想追踪 `kvm` 内核模块相关的功能,你可以通过以下方式来实现。请确保该模块已经加载: ``` # lsmod | grep kvm_intel @@ -228,7 +234,7 @@ vmx_dump_sel [kvm_intel] 现在你知道了如何找到感兴趣的函数,请用一个例子把这些内容用于时间。就像前面的文章一样,试着追踪与文件系统相关的函数。我的测试系统上的文件系统是 `ext4`。 -这个过程略有不同;你在运行命令时,不需要**启动**,而是在**记录**参数后面加上你想追踪的函数的 "模式"。你还需要指定你想要的追踪器;在这种情况下,就是 `function_graph`。该命令会继续记录追踪,直到你用 `Ctrl+C` 停止它。所以几秒钟后,按 `Ctrl+C` 停止追踪。 +这个过程略有不同;你在运行命令时,不使用 `start` 参数,而是在 `record` 参数后面加上你想追踪的函数的“模式”。你还需要指定你想要的追踪器;在这种情况下,就是 `function_graph`。该命令会继续记录追踪,直到你用 `Ctrl+C` 停止它。所以几秒钟后,按 `Ctrl+C` 停止追踪: ``` # trace-cmd list -f | grep ^ext4_ @@ -244,7 +250,7 @@ CPU0 data recorded at offset=0x856000 ### 查看追踪记录 -要查看你之前的追踪记录,运行带有 `report` 参数的命令。从输出结果来看,很明显过滤器起作用了,你只看到 `ext4` 相关的函数追踪。 +要查看你之前的追踪记录,运行带有 `report` 参数的命令。从输出结果来看,很明显过滤器起作用了,你只看到 `ext4` 相关的函数追踪: ``` # trace-cmd report | head -20 @@ -267,14 +273,14 @@ cpus=8 ### 追踪一个特定的 PID -假设你想追踪与一个进程(PID)有关的函数。打开另一个终端,注意运行中的 shell 的PID。 +假设你想追踪与一个进程(PID)有关的函数。打开另一个终端,注意运行中的 shell 的PID: ``` # echo $$ 10885 ``` -再次运行 `record` 命令,用 `-P` 选项传递PID。这一次,让终端运行(也就是说,先不要按 `Ctrl+C` )。 +再次运行 `record` 命令,用 `-P` 选项传递PID。这一次,让终端运行(也就是说,先不要按 `Ctrl+C` ): ``` # trace-cmd record -P 10885 -p function_graph @@ -284,7 +290,7 @@ Hit Ctrl^C to stop recording ### 在 shell 上运行一些命令 -移动到另一个终端,在那里你有一个以特定PID运行的shell,并运行任何命令,例如,`ls` 命令用来列出文件。 +移动到另一个终端,在那里你有一个以特定 PID 运行的 shell,并运行任何命令,例如,`ls` 命令用来列出文件: ``` # ls @@ -294,7 +300,7 @@ v8-compile-cache-1000 [...] ``` -移动到你启用追踪的终端,按 `Ctrl+C` 停止追踪。 +移动到你启用追踪的终端,按 `Ctrl+C` 停止追踪: ``` # trace-cmd record -P 10885 -p function_graph @@ -306,7 +312,7 @@ CPU1 data recorded at offset=0x856000 [...] ``` -在追踪的输出中,你可以看到左边是 PID 和 Bash shell,右边是与之相关的函数调用。这对于缩小你的追踪范围是非常方便的。 +在追踪的输出中,你可以看到左边是 PID 和 Bash shell,右边是与之相关的函数调用。这对于缩小你的追踪范围是非常方便的: ``` # trace-cmd report | head -20 @@ -337,12 +343,12 @@ via: https://opensource.com/article/21/7/linux-kernel-trace-cmd 作者:[Gaurav Kamathe][a] 选题:[lujun9972][b] 译者:[萌新阿岩](https://github.com/mengxinayan) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 [a]: https://opensource.com/users/gkamathe [b]: https://github.com/lujun9972 [1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) -[2]: https://opensource.com/article/21/7/analyze-linux-kernel-ftrace +[2]: https://linux.cn/article-13752-1.html [3]: https://lwn.net/Articles/410200/ From 9227fcf69baba25805d94f5e937fe1d7ff1f3c3a Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Tue, 5 Oct 2021 14:59:38 +0800 Subject: [PATCH 085/143] PUB @mengxinayan https://linux.cn/article-13852-1.html --- .../20210728 Kernel tracing with trace-cmd.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210728 Kernel tracing with trace-cmd.md (99%) diff --git a/translated/tech/20210728 Kernel tracing with trace-cmd.md b/published/20210728 Kernel tracing with trace-cmd.md similarity index 99% rename from translated/tech/20210728 Kernel tracing with trace-cmd.md rename to published/20210728 Kernel tracing with trace-cmd.md index b0bd534721..1b4f6dfc9f 100644 --- a/translated/tech/20210728 Kernel tracing with trace-cmd.md +++ b/published/20210728 Kernel tracing with trace-cmd.md @@ -4,8 +4,8 @@ [#]: collector: (lujun9972) [#]: translator: (mengxinayan) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13852-1.html) 使用 trace-cmd 追踪内核 ====== From b34fbdc9457791731246800371131869937ab753 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 6 Oct 2021 05:02:53 +0800 Subject: [PATCH 086/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211005=20?= =?UTF-8?q?Get=20podman=20up=20and=20running=20on=20Windows=20using=20Linu?= =?UTF-8?q?x?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211005 Get podman up and running on Windows using Linux.md --- ...n up and running on Windows using Linux.md | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 sources/tech/20211005 Get podman up and running on Windows using Linux.md diff --git a/sources/tech/20211005 Get podman up and running on Windows using Linux.md b/sources/tech/20211005 Get podman up and running on Windows using Linux.md new file mode 100644 index 0000000000..ddbca0e519 --- /dev/null +++ b/sources/tech/20211005 Get podman up and running on Windows using Linux.md @@ -0,0 +1,146 @@ +[#]: subject: "Get podman up and running on Windows using Linux" +[#]: via: "https://opensource.com/article/21/10/podman-windows-wsl" +[#]: author: "Stephen Cuppett https://opensource.com/users/cuppett" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Get podman up and running on Windows using Linux +====== +Enable WSL 2 guests to run the podman, skopeo, or buildah commands from +within Windows using the Linux distribution of your choice. +![Penguin driving a car with a yellow background][1] + +WSL 2, the second iteration of the Windows Subsystem for Linux, allows you to run a Linux environment natively on Windows, without the overhead of a virtual machine (VM). It integrates nicely with Windows, too, and provides you access to most of the command-line tools, utilities, and applications you're used to on Linux. + +This guide shows you how to enable WSL 2 guests to run the `podman`, `skopeo`, or `buildah` commands from within Windows using the Linux distribution of your choice (available from the Microsoft store). Coming from a Fedora Linux host OS starting point, I was curious how to enable and use tools I'm most familiar with from within Windows. + +### Prerequisite: WSL 2 + +To install WSL 2, go to the [WSL installation][2] page. + +Use Powershell to ensure that WSL 2 is enabled by default: + +`PS> wsl –set-default-version 2` + +For information on key differences between WSL 1 and WSL 2, see the [WSL documentation][3]. + +The Windows Subsystem for Linux has come a long way. Microsoft has worked hard to make the separation between the host Windows OS and the guest Linux operating system virtually invisible. Special drivers in the kernels of each system make it easy to run commands between various shells and command windows and enable mutual filesystem access. + +You can confirm you are correctly using the WSL 2 kernel with the following command and output in any of the guests: + + +``` +$ uname -a +Linux BLD 5.10.16.3-microsoft.standard-WSL2 #1 SMP Fri Apr 2 22:23:49 +UTC 2021 x86_64 x86_64 GNU/Linux +``` + +WSL 1 guests report a kernel version as 4.14 or similar. + +Small touches in your guests can make the integration even more seamless, including symlinking of various home directory files (.aws, .sh, .config, and so on). There is a hint of how this can be achieved right from the $HOME directory: + +![$HOME directory][4] + +(Stephen Cuppett, [CC BY-SA 4.0][5]) + +### Install a Linux distribution + +To install a Linux distribution, find your favorite in the Microsoft Store. + +![screenshot of Fedora Remix purchase in the Microsoft store][6] + +(Stephen Cuppett, [CC BY-SA 4.0][5]) + +For this article, I'm using Fedora, but other distributions are available to try. Podman works well across distributions, so you can use whatever distribution you're most familiar with. There may be some minor configuration adjustments required, but those are generally documented by the distribution and podman documentation. I chose Fedora because it was the distribution that required no extra setup to get the latest podman working. + +On the first launch, the VM and related technologies are installed. You'll be prompted to select a password for the first user (which gets sudo access). + +### Install podman + +Once your Linux distribution has been installed and configured with a user, you can install podman as usual: + +`$ sudo dnf install podman` + +After a few moments, podman is installed and ready to go. You can check that everything is working as expected: + + +``` +$ podman info +host: +  arch: amd64 +  buildahVersion: 1.22.3 +  cgroupControllers: [] +  cgroupManager: cgroupfs +  cgroupVersion: v1 +[...] +version: +  APIVersion: 3.3.1 +  OsArch: linux/amd64 +  Version: 3.3.1 +``` + +From there, you can build images and use podman as you usually would. + +Thanks to WSL integration, podman is even accessible and usable from PowerShell or the command prompt: + +![screenshot example of Windows PowerShell][7] + +(Stephen Cuppett, [CC BY-SA 4.0][5]) + +Installing and using the `buildah` and `skopeo` commands is exactly the same process. + +### Busybox test + +As a simple test to see `podman` at work, you can pull and run a Busybox container. [BusyBox][8] is an open source (GPL) project providing simple implementations of nearly 400 common commands, including `ls, mv, ln, mkdir, more, ps, gzip, bzip2, tar`, and `grep`, which makes it a fittingly minimal environment for containers and for simple tests like this one. + +First, search the default image repository for a Busybox container. You can do this in either your Linux terminal or in Powershell. + + +``` +$ podman search busybox +INDEX       NAME                             DESCRIPTION                     +docker.io   docker.io/library/busybox        Busybox base image                   +docker.io   docker.io/radial/busyboxplus     Full-chain... +docker.io   docker.io/yauritux/busybox-curl  Busybox with CURL +``` + +Run the one you want to try: + + +``` +$ podman run -it docker.io/library/busybox +/ # +``` + +You can use the container, run a few commands to verify that everything works as expected, then leave it with the exit command. + +### Get started + +I'll admit I was surprised how readily the current Linux distributions out there, podman, and the Windows subsystem worked together here. It's obvious a lot of great work has gone into Windows' container tooling and integration with Linux. I'm hopeful this guide helps others get to this same launching point easily and start being productive. + +There are many good candidates for deep follow-up, including working with volumes, exposing networked services between the guest and the host, and exposing Linux capabilities in those containers. With so many tools available, I have great confidence that the community will make short work of digging through them! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/podman-windows-wsl + +作者:[Stephen Cuppett][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/cuppett +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/car-penguin-drive-linux-yellow.png?itok=twWGlYAc (Penguin driving a car with a yellow background) +[2]: https://docs.microsoft.com/en-us/windows/wsl/install +[3]: https://docs.microsoft.com/en-us/windows/wsl/about +[4]: https://opensource.com/sites/default/files/uploads/home_directory_0.png (directory) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/sites/default/files/uploads/fedora_remix_0.png (Fedora Remix) +[7]: https://opensource.com/sites/default/files/uploads/power_shell.png (Windows PowerShell) +[8]: https://opensource.com/article/21/8/what-busybox From 0c94b8d89c110ce31c2132d0e518328bd95e4f58 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 6 Oct 2021 05:03:31 +0800 Subject: [PATCH 087/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211005=20?= =?UTF-8?q?Tools=20to=20explore=20BGP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211005 Tools to explore BGP.md --- sources/tech/20211005 Tools to explore BGP.md | 374 ++++++++++++++++++ 1 file changed, 374 insertions(+) create mode 100644 sources/tech/20211005 Tools to explore BGP.md diff --git a/sources/tech/20211005 Tools to explore BGP.md b/sources/tech/20211005 Tools to explore BGP.md new file mode 100644 index 0000000000..ee03790758 --- /dev/null +++ b/sources/tech/20211005 Tools to explore BGP.md @@ -0,0 +1,374 @@ +[#]: subject: "Tools to explore BGP" +[#]: via: "https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/" +[#]: author: "Julia Evans https://jvns.ca/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Tools to explore BGP +====== + +Yesterday there was a big Facebook outage caused by BGP. I’ve been vaguely interested in learning more about BGP for a long time, so I was reading a couple of articles. + +I got frustrated because none of the articles showed me how I could actually look up information related to BGP on my computer, so I [wrote a tweet asking for tools][1]. + +I got a bunch of useful replies as always, so this blog post shows some tools you can use to look up BGP information. There might be an above average number of things wrong in this post because I don’t understand BGP that well. + +### I can’t publish BGP routes + +One of the reasons I’ve never learned much about BGP is – as far as I know, I don’t have access to publish BGP routes on the internet. + +With most networking protocols, you can pretty trivially get access to implement the protocol yourself if you want. For example you can: + + * issue your own TLS certificates + * write your own HTTP server + * write your own TCP implementation + * write your own authoritative DNS server for your domain (I’m trying to do that right now for a small project) + * set up your own certificate authority + + + +But with BGP, I think that unless you own your own ASN, you can’t publish routes yourself! (you _could_ implement BGP on your home network, but that feels a bit boring to me, when I experiment with things I like them to actually be on the real internet). + +Anyway, even though I can’t experiment with it, I still think it’s super interesting because I love networking, so I’m going to show you some tools I found to learn about BGP :) + +First let’s talk through some BGP terminology though. I’m going to go pretty fast because I’m more interested in the tools and there are a lot of high level explanations of BGP out there (like this [cloudflare post][2]). + +### What’s an AS (“autonomous system”) + +The first thing we need to understand is an AS. Every AS: + + 1. is owned by an organization (usually a large organization like your ISP, a government, a university, Facebook, etc) + 2. controls a specific set of IP addresses (for example my ISP’s AS includes 247,808 IP addresses) + 3. has a number (like 1403) + + + +Here are some observations I made about ASes just by doing some experimentation: + + * Some fairly big tech companies don’t have their own AS. For example, I looked up Patreon on BGPView, and as far as I can tell they don’t own as AS – their main site (patreon.com, [104.16.6.49][3]) is in Cloudflare’s AS. + * An AS can include IPs in many countries. Facebook’s AS ([AS32934][4]) definitely has IP addresses in Singapore, Canada, Nigeria, Kenya, the US, and more countries. + * It seems like IP address can be in more than one AS. For example, if I look up [209.216.230.240][5], it has 2 ASNs associated with it – AS6130 and AS21581. Apparently when this happens the more specific route takes priority – so packets to that IP would get routed to AS21581. + + + +### what’s a BGP route? + +There are a lot of routers on the internet. For example, my ISP has routers. + +When I send my ISP a packet (for example by running `ping 129.134.30.0`), my ISP’s routers needs to figure out how to actually get my packet to the IP address `129.134.30.0`. + +The way the router figures this out is that it has a **route table** – it has a list of a bunch of IP ranges (like `129.134.30.0/23`), and routes it knows about to get to that subnet. + +Here’s an example of a real route for `129.134.30.0/23`: (one of Facebook’s subnets). This one isn’t from my ISP. + +``` +11670 32934 + 206.108.35.2 from 206.108.35.254 (206.108.35.254) + Origin IGP, metric 0, valid, external + Community: 3856:55000 + Last update: Mon Oct 4 21:17:33 2021 +``` + +I think that this is saying that one path to `129.134.30.0` is through the machine `206.108.35.2`, which is on its local network. So the router might send my ping packet to `206.108.35.2` next, and then `206.108.35.2` will know how to get it to Facebook. The two numbers at the beginning (`11670 32934`) are ASNs. + +### what’s BGP? + +My understanding of BGP is very shaky, but it’s a protocol that companies use to advertise BGP routes. + +What happened yesterday with Facebook is that they basically made BGP announcements withdrawing all their BGP routes, so every router in the world deleted all of its routes related to Facebook, so no traffic could get there. + +Okay, now that we’ve covered some basic terminology, let’s talk about tools you can use to look at autonomous systems and BGP! + +### tool 1: look at your ISP’s AS with BGPView + +To make this AS thing less abstract, let’s use a tool called [BGPView][6] to look at a real AS. + +My ISP (EBOX) owns [AS 1403][7]. Here are the [IP addresses my ISP owns][8]. If I look up my computer’s public IPv4 address, I can check that it’s one of the IP addresses my ISP owns – it’s in the `104.163.128.0/17` block. + +BGPView also has this graph of how my ISP is connected to other ASes + +![][9] + +### tool 2: `traceroute -A` and `mtr -z` + +Okay, so we’re interested in autonomous systems. Let’s see which ASes I go through from + +`traceroute` and `mtr` both have options to tell you the ASN for every IP you go through. The flags are `traceroute -A` and `mtr -z`, respectively. + +Let’s see which autonomous systems I go through on my way to facebook.com with `mtr`! + +``` +$ mtr -z facebook.com + 1. AS??? LEDE.lan + 2. AS1403 104-163-190-1.qc.cable.ebox.net + 3. AS??? 10.170.192.58 + 4. AS1403 0.et-5-2-0.er1.mtl7.yul.ebox.ca + 5. AS1403 0.ae17.er2.mtl3.yul.ebox.ca + 6. AS1403 0.ae0.er1.151fw.yyz.ebox.ca + 7. AS??? facebook-a.ip4.torontointernetxchange.net + 8. AS32934 po103.psw01.yyz1.tfbnw.net + 9. AS32934 157.240.38.75 +10. AS32934 edge-star-mini-shv-01-yyz1.facebook.com +``` + +This is interesting – it looks like we go directly from my ISP’s AS (1403) to Facebook’s AS (32934), with an “internet exchange” in between. + +I’m not sure what an [internet exchange][10] is but I know that it’s an extremely important part of the internet. That’s going to be for another day though. My best guess is that it’s the part of the internet that enables “peering” – like an IX is a server room with a gigantic switch with infinite bandwith in it where a bunch of different companies put their computers so they can send each other packets. + +### mtr looks up ASNs with DNS + +I got curious about how mtr looks up ASNs, so I used strace. I saw that it looked like it was using DNS, so I ran [dnspeep][11], and voila! + +``` +$ sudo dnspeep +... +TXT 1.190.163.104.origin.asn.cymru.com 192.168.1.1 TXT: 1403 | 104.163.176.0/20 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.160.0/19 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.128.0/17 | CA | arin | 2014-08-14 +... +``` + +So it looks like we can find the ASN for `104.163.190.1` by looking up the `txt` record on `1.190.163.104.origin.asn.cymru.com`, like this: + +``` +$ dig txt 1.190.163.104.origin.asn.cymru.com +1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.160.0/19 | CA | arin | 2014-08-14" +1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.128.0/17 | CA | arin | 2014-08-14" +1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.176.0/20 | CA | arin | 2014-08-14" +``` + +That’s cool! Let’s keep moving though. + +### tool 3: the packet clearing house looking glass + +PCH (“packet clearing house”) is the organization that runs a lot of internet exchange points. A “looking glass” seems to be a generic term for a web form that lets you run network commands from another person’s computer. There are looking glasses that don’t support BGP, but I’m just interested in ones that show you information about BGP routes. + +Here’s the PCH looking glass: . + +In the web form on that site, I picked the Toronto IX (“TORIX”), since that’s what `mtr` said I was using to go to facebook.com. + +**thing 1: “show ip bgp summary”** + +Here’s the output. I’ve redacted some of it: + +``` +IPv4 Unicast Summary: +BGP router identifier 74.80.118.4, local AS number 3856 vrf-id 0 +BGP table version 33061919 +RIB entries 513241, using 90 MiB of memory +Peers 147, using 3003 KiB of memory +Peer groups 8, using 512 bytes of memory + +Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd +... +206.108.34.248 4 1403 484672 466938 0 0 0 05w3d03h 50 +... +206.108.35.2 4 32934 482088 466714 0 0 0 01w6d07h 38 +206.108.35.3 4 32934 482019 466475 0 0 0 01w0d06h 38 +... + +Total number of neighbors 147 +``` + +My understanding of what this is saying is that the Toronto Internet Exchange (“TORIX”) is directly connected to both my ISP (EBOX, AS 1403) and Facebook (AS 32934). + +**thing 2: “show ip bgp 129.134.30.0”** + +Here’s the output of picking “show ip bgp” for `129.134.30.0` (one of Facebook’s IP addresses): + +``` +BGP routing table entry for 129.134.30.0/23 +Paths: (4 available, best #4, table default) + Advertised to non peer-group peers: + 206.220.231.55 + 11670 32934 + 206.108.35.2 from 206.108.35.254 (206.108.35.254) + Origin IGP, metric 0, valid, external + Community: 3856:55000 + Last update: Mon Oct 4 21:17:33 2021 + + 11670 32934 + 206.108.35.2 from 206.108.35.253 (206.108.35.253) + Origin IGP, metric 0, valid, external + Community: 3856:55000 + Last update: Mon Oct 4 21:17:31 2021 + + 32934 + 206.108.35.3 from 206.108.35.3 (157.240.58.225) + Origin IGP, metric 0, valid, external, multipath + Community: 3856:55000 + Last update: Mon Oct 4 21:17:27 2021 + + 32934 + 206.108.35.2 from 206.108.35.2 (157.240.58.182) + Origin IGP, metric 0, valid, external, multipath, best (Older Path) + Community: 3856:55000 + Last update: Mon Oct 4 21:17:27 2021 +``` + +This seems to be saying that there are 4 routes to Facebook from that internet exchange. + +**the quebec internet exchange doesn’t seem to know anything about Facebook** + +I also tried the same thing from the Quebec internet exchange QIX (which is presumably closer to me, since I live in Montreal and not Toronto). But the QIX doesn’t seem to know anything about Facebook – when I put in `129.134.30.0` it just says “% Network not in table”. + +So I guess that’s why I was sent through the Toronto IX and not the Quebec one. + +### more BGP looking glasses + +Here are some more websites with looking glasses that will give you similar information from other points of view. They all seem to support the same `show ip bgp` syntax, maybe because they’re running the same software? I’m not sure. + + * + * + * + + + +There seem to be a LOT of these looking glass services out there, way more than just those 3 lists. + +Here’s an example session with one of the servers on this list: route-views.routeviews.org. This time I connected via telnet and not through a web form, but the output looks like it’s in the same format. + +``` +$ telnet route-views.routeviews.org + +route-views>show ip bgp 31.13.80.36 + +BGP routing table entry for 31.13.80.0/24, version 1053404087 +Paths: (23 available, best #2, table default) + Not advertised to any peer + Refresh Epoch 1 + 3267 1299 32934 + 194.85.40.15 from 194.85.40.15 (185.141.126.1) + Origin IGP, metric 0, localpref 100, valid, external + path 7FE0C3340190 RPKI State valid + rx pathid: 0, tx pathid: 0 + Refresh Epoch 1 + 6939 32934 + 64.71.137.241 from 64.71.137.241 (216.218.252.164) + Origin IGP, localpref 100, valid, external, best + path 7FE135DB6500 RPKI State valid + rx pathid: 0, tx pathid: 0x0 + Refresh Epoch 1 + 701 174 32934 + 137.39.3.55 from 137.39.3.55 (137.39.3.55) + Origin IGP, localpref 100, valid, external + path 7FE1604D3AF0 RPKI State valid + rx pathid: 0, tx pathid: 0 + Refresh Epoch 1 + 20912 3257 1299 32934 + 212.66.96.126 from 212.66.96.126 (212.66.96.126) + Origin IGP, localpref 100, valid, external + Community: 3257:8095 3257:30622 3257:50001 3257:53900 3257:53904 20912:65004 + path 7FE1195AF140 RPKI State valid + rx pathid: 0, tx pathid: 0 + Refresh Epoch 1 + 7660 2516 1299 32934 + 203.181.248.168 from 203.181.248.168 (203.181.248.168) + Origin IGP, localpref 100, valid, external + Community: 2516:1030 7660:9001 + path 7FE0D195E7D0 RPKI State valid + rx pathid: 0, tx pathid: 0 +``` + +Here there are a few options for routes: + + * `3267 1299 32934` + * `6939 32934` + * `701 174 32934` + * `20912 3257 1299 32934` + * `7660 2516 1299 32934` + + + +I think the reason there’s more than one AS in all of these is that `31.13.80.36` is a Facebook IP address in Toronto, so this server (which is maybe on the US west coast, I’m not sure) is not able to connect to it directly, it needs to go to another AS first. So all of the routes have one or more ASNs + +The shortest one is 6939 (“Hurricane Electric”), which is a “global internet backbone”. They also have their own [hurricane electric looking glass][12] page. + +### tool 4: BGPlay + +All the other tools so far have just shown us the current state of Facebook routing where everything is fine, but this 4th tool lets us see the history of this Facebook BGP internet disaster! It’s a GUI tool so I’m going to include a bunch of screenshots. + +The tool is at . I typed in the IP address 129.134.30.12 (one of Facebook’s IPs), if you want to play along. + +First, let’s look at the state of things before everything went wrong. I clicked in the timeline at 13:11:28 on Oct. 4, and got this: + +![][13] + +I originally found this very overwhelming. What’s happening? But then someone on Twitter pointed out that the next place to look is to click on the timeline right _after_ the Facebook disaster happened (at 18:38 on Oct. 4). + +![][14] + +It’s pretty clear that something is wrong in this picture – all the BGP routes are gone! oh no! + +The text at the top shows the last Facebook BGP route disappearing: + +``` +Type: W > withdrawal Involving: 129.134.30.0/24 +Short description: The route 50869, 25091, 32934 has been withdrawn. +Date and time: 2021-10-04 16:02:33 Collected by: 20-91.206.53.12 +``` + +If I then click the “fast forward” button, we see the BGP routes start to come back: + +![][15] + +The first one announced is `137409 32934`. I don’t think this is _actually_ the first one announced though – there are a lot of route announcements inside the same second (at 2021-10-04 21:00:40), and I think the ordering inside BGPlay is arbitrary. + +If I click the “fast forward” button again, more and more routes start to come back and routing starts to go back to normal + +I found looking at this outage in BGPlay really fun, even though the interface is pretty confusing at first. + +### maybe it is important to understand a little about BGP? + +I started out this post by saying you can’t change BGP routes BGP, but then I remembered that in 2016 or 2017 there was a [Telia routing issue][16] that caused us some minor network at work. And when that happens, it is actually useful to understand why your customers can’t reach your site, even if it’s totally out of your control. I didn’t know about any of these tools at that time but I would have liked to! + +I think for most companies all you can do to respond to outages caused by someone else’s bad BGP routes is “do nothing and wait for it to get fixed”, but it’s nice to be able to _confidently_ do nothing. + +### some ways to publish BGP routes + +If you want to (as a hobbyist) actually publish BGP routes, here are some links from the comments: + + * [a guide to getting your own ASN][17] + * [dn42][18] seems to have a playground for BGP (it’s not on the public internet, but it does have other people on it which seems more fun than just doing BGP by yourself at home) + + + +### that’s all for now + +I think there are a lot more BGP tools (like PCH has a bunch of [daily snapshots of routing data][19] which look like fun), but this post is already pretty long and there are other things I need to do today. + +I was surprised by how much information I could get about BGP just as a regular person, I always think of it as a “secret network wizard” thing but apparently there are all kind of public machines anybody can just telnet to and use to look at the route tables! Who knew! + +-------------------------------------------------------------------------------- + +via: https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/ + +作者:[Julia Evans][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://jvns.ca/ +[b]: https://github.com/lujun9972 +[1]: https://twitter.com/b0rk/status/1445199475195236356 +[2]: https://blog.cloudflare.com/october-2021-facebook-outage/ +[3]: https://bgpview.io/ip/104.16.6.49 +[4]: https://bgpview.io/asn/32934#prefixes-v4 +[5]: https://bgpview.io/ip/209.216.230.240 +[6]: https://bgpview.io +[7]: https://bgpview.io/asn/1403 +[8]: https://bgpview.io/asn/1403#prefixes-v4 +[9]: https://jvns.ca/images/ebox-graph.png +[10]: https://en.wikipedia.org/wiki/Internet_exchange_point +[11]: https://github.com/jvns/dnspeep/ +[12]: https://lg.he.net/ +[13]: https://jvns.ca/images/bgplay-before.png +[14]: https://jvns.ca/images/bgplay-after.png +[15]: https://jvns.ca/images/bgplay-return.png +[16]: https://news.ycombinator.com/item?id=14246888 +[17]: https://labs.ripe.net/author/samir_jafferali/build-your-own-anycast-network-in-nine-steps/ +[18]: https://dn42.eu/Home +[19]: https://www.pch.net/resources/Routing_Data/IPv4_daily_snapshots/ From cf444883450485892e2a7ebbfd045afbf0c4c176 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Wed, 6 Oct 2021 05:03:56 +0800 Subject: [PATCH 088/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020211005=20?= =?UTF-8?q?GNOME=2042=20to=20Introduce=20a=20System-wide=20Dark=20Style=20?= =?UTF-8?q?Preference,=20Thanks=20to=20elementary=20OS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20211005 GNOME 42 to Introduce a System-wide Dark Style Preference, Thanks to elementary OS.md --- ...yle Preference, Thanks to elementary OS.md | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 sources/news/20211005 GNOME 42 to Introduce a System-wide Dark Style Preference, Thanks to elementary OS.md diff --git a/sources/news/20211005 GNOME 42 to Introduce a System-wide Dark Style Preference, Thanks to elementary OS.md b/sources/news/20211005 GNOME 42 to Introduce a System-wide Dark Style Preference, Thanks to elementary OS.md new file mode 100644 index 0000000000..de58e11b9a --- /dev/null +++ b/sources/news/20211005 GNOME 42 to Introduce a System-wide Dark Style Preference, Thanks to elementary OS.md @@ -0,0 +1,79 @@ +[#]: subject: "GNOME 42 to Introduce a System-wide Dark Style Preference, Thanks to elementary OS" +[#]: via: "https://news.itsfoss.com/gnome-42-dark-style-preference/" +[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +GNOME 42 to Introduce a System-wide Dark Style Preference, Thanks to elementary OS +====== + +There’s still time for GNOME 42, but it looks like it will implement a system-wide dark mode preference similar to [elementary OS 6][1]. + +If you have been reading our coverages, you must have noticed mentioning it as one of the [best elementary OS 6 features][2]. + +And for all the right reasons. Unlike a GTK theme change, elementary OS 6 approached the dark style preference as an opt-in preference that application developers can detect and choose to respect. + +Even though this means that there’s more to be expected from the app developers, but when successful, it should result in a consistent dark mode experience. + +In a [blog post][3] by GNOME developer _Alex_, he mentioned that GNOME would be following elementary OS’s approach while making it a standard to introduce a system-wide dark style preference in GNOME 42. + +### Consistent Dark Mode Experience Even with Flatpak Sandbox + +When it comes to a GTK theme, it is often a problem for Flatpak applications to inherit it because of the sandboxing. + +However, with an implementation planned for GNOME 42, any application (including Flatpak apps) can access the settings portal and know the dark style preference without cutting down the security provided by the sandboxing. + +This work aims to ensure that every type of application (built with any toolkit) and on any desktop should be able to detect and respect the dark style preference. + +The only difference between elementary OS and GNOME’s implementation will be the use of libadwaita API with GNOME 42. You may want to check out an older [blog post][4] by Adrien, another GNOME developer, to know more about Libadwaita. + +Alex also shared a video giving a sneak peek at how the transitions may look like (which is, of course, a work in progress). + +![][5] + +As you can notice, application developers need to update their applications to respect this preference to make the switch/transition from light/dark mode a seamless experience. + +And, further, to bring this change to GNOME 42, there is a couple of significant development work remaining: + + * A preference option in the settings menu that’s easy to use (probably under “Background/Appearance” settings) + * A switch in gnome-shell to quickly toggle the preference + * Day/night scheduling option + * A dark mode version of the wallpaper synchronized to the preference + + + +### Wrapping Up + +The core and first-party applications will have to support the dark style preference before GNOME 42 release to kick things off. + +While third-party developers should also get on the bandwagon, given the difference this makes, it would take time for all your essential/favorite tools to support it. + +_What do you think about GNOME 42 bringing a system-wide dark mode preference, following the footsteps of elementary OS? You are welcome to share your thoughts in the comments down below_. + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/gnome-42-dark-style-preference/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://news.itsfoss.com/elementary-os-6-release/ +[2]: https://news.itsfoss.com/elementary-os-6-features/ +[3]: https://blogs.gnome.org/alexm/2021/10/04/dark-style-preference/ +[4]: https://aplazas.pages.gitlab.gnome.org/blog/blog/2021/03/31/introducing-libadwaita.html +[5]: https://i0.wp.com/i.ytimg.com/vi/urXch15ySGU/hqdefault.jpg?w=780&ssl=1 From b9e21411036dfc07aea5d295ead4090dec6e46b5 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 6 Oct 2021 09:31:55 +0800 Subject: [PATCH 089/143] PRF @wxy --- ...elow- a time traveling resource monitor.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/translated/tech/20210818 below- a time traveling resource monitor.md b/translated/tech/20210818 below- a time traveling resource monitor.md index 2571c2d3d4..04408a72ad 100644 --- a/translated/tech/20210818 below- a time traveling resource monitor.md +++ b/translated/tech/20210818 below- a time traveling resource monitor.md @@ -3,7 +3,7 @@ [#]: author: "Daniel Xu https://fedoramagazine.org/author/dxuu/" [#]: collector: "lujun9972" [#]: translator: "wxy" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " @@ -12,23 +12,23 @@ Below:一个时间旅行的资源监控器 ![][1] -在这篇文章中,我们将介绍 below:一个用于现代 Linux 系统的 Apache 2.0 许可的资源监视器。below 允许你重放以前记录的数据。 +在这篇文章中,我们将介绍 `below`:一个用于现代 Linux 系统的 Apache 2.0 许可的资源监视器。`below` 可以让你重放以前记录的数据。 ### 背景 -内核的主要职责之一是调解对资源的访问。有时这可能意味着分配物理内存,使多个进程可以共享同一主机。其他时候,它可能意味着确保 CPU 时间的公平分配。在所有这些情况下,内核提供了机制,而将策略留给了“别人”。在最近,这个“别人”通常是 systemd 或 dockerd 这样的运行时。运行时接受来自调度器或最终用户的输入(类似于运行什么和如何运行)并在内核上转动正确的旋钮和拉动正确的杠杆,从而使工作负载能够*好好*工作。 +内核的主要职责之一是调度对资源的访问。有时这可能意味着分配物理内存,使多个进程可以共享同一主机。其他时候,它可能意味着确保 CPU 时间的公平分配。在这些场景里,内核提供了机制,而将策略留给了“别人”。近来,这个“别人”通常是 systemd 或 dockerd 这样的运行时。运行时接受来自调度器或最终用户的输入(类似于运行什么和如何运行)并在内核上转动正确的旋钮和拉动正确的杠杆,从而使工作负载能够*好好*工作。 -在一个完美的世界里,故事就到此结束了。然而,现实情况是,资源管理是一个复杂的、相当不透明的技术混合体,在几十年里计算技术不断发展。尽管其中一些技术有各种缺陷和死角,但最终的结果,容器运作得比较好。虽然用户通常不需要关心这些细节,但对于基础设施运营商来说,对他们的技术架构拥有可见性是至关重要的。可见性和可调试性对于检测和调查错误配置、问题和系统性故障至关重要。 +在一个完美的世界里,故事就到此结束了。然而,现实情况是,资源管理是一个复杂的、相当不透明的技术混合体,在几十年里计算技术不断发展。尽管其中一些技术有各种缺陷和死角,但最终的结果是,容器运作得比较好。虽然用户通常不需要关心这些细节,但对于基础设施运营商来说,对他们的技术架构拥有可见性是至关重要的。可见性和可调试性对于检测和调查错误的配置、问题和系统性故障至关重要。 -让事情变得更加复杂的是,资源中断往往难以重现。经常需要花费数周时间等待一个问题重新出现,以便调查其根本原因。规模的扩大进一步加剧了这个问题:我们不能在*每台*主机上运行一个自定义脚本,希望在错误再次发生时记录下关键状态的片段。因此,需要更复杂的工具。这就出现了 below。 +让事情变得更加复杂的是,资源中断往往难以重现。经常需要花费数周时间等待一个问题重新出现,以便调查其根本原因。规模的扩大进一步加剧了这个问题:我们不能在*每台*主机上运行一个自定义脚本,希望在错误再次发生时记录下关键状态的片段。因此,需要更复杂的工具。这就出现了 `below`。 -### ### 动机 +### 动机 历史上,Facebook 一直是 [atop][5] 的忠实用户。`atop` 是一个用于 Linux 的性能监视器,能够报告所有进程的活动以及各种系统级活动。与 `htop` 等工具相比,`atop` 最引人注目的功能之一是能够作为一个守护程序记录历史数据。这听起来是一个简单的功能,但在实践中,这使得调试无数的生产问题成为可能。有了足够长的数据保留,就有可能在时间上回溯,查看在问题或故障发生之前、期间和之后的主机状态。 不幸的是,随着时间的推移,人们发现`atop` 有某些不足之处。首先,[控制组][6]cgroup 已经成为控制和监视 Linux 机器上资源的实际方式。`atop` 仍然缺乏对这一基本构建模块的支持。第二,`atop` 用自定义的 delta 压缩方法在磁盘上存储数据。这在正常情况下运行良好,但在沉重的资源压力下,主机很可能会丢失数据点。由于使用了 delta 压缩,在数据最重要的时间段内,数据可能会大面积丢失。第三,用户体验有一个陡峭的学习曲线。我们经常听到 `atop` 的资深用户说,他们喜欢密集的布局和众多的键盘绑定。然而,这也是一把双刃剑。当一个刚进入这个领域的人想要调试一个生产问题时,他们现在要同时解决两个问题:手头的问题和如何使用 `atop`。 -`below` 是由 Facebook 的资源控制团队为其设计和开发的,并得到了 `atop` 生产用户的投入。顾名思义,资源控制团队负责的是规模化的资源管理。该团队由内核开发人员、容器运行时开发人员和硬件人员组成。认识到下一代系统监控器的机会,我们在设计 `below` 时考虑到以下几点: +`below` 是由 Facebook 的资源控制团队为其设计和开发的,并得到了 `atop` 生产环境用户的支持。顾名思义,资源控制团队负责的是规模化的资源管理。该团队由内核开发人员、容器运行时开发人员和硬件人员组成。认识到下一代系统监控器的机会,我们在设计 `below` 时考虑到以下几点: * 易用性:`below` 必须既能为新用户提供直观的体验,又能为日常用户提供强大的功能。 *有意义的统计数据:`below` 显示准确和有用的统计数据。即便可以,但我们尽量避免收集和倾倒统计数字。 @@ -76,9 +76,9 @@ $ below replay --time "5 minutes ago" ### 其他功能 -在底层下,`below` 有一个强大的设计和架构。Facebook 正在不断升级到更新的内核,所以我们从不假设数据源是可用的。这种默契的假设使得内核和 `below `版本之间能够完全向前和向后兼容。此外,每个数据点都被 zstd 压缩并完整地存储。这解决了我们看到的 `atop` 在大规模时的 delta 压缩问题。根据我们的测试,我们的每个样本压缩可以达到平均 5 倍的压缩率。 +在底层,`below` 有一个强大的设计和架构。Facebook 正在不断升级到更新的内核,所以我们从不假设数据源是可用的。这种默契的假设使得内核和 `below `版本之间能够完全向前和向后兼容。此外,每个数据点都用 zstd 压缩并完整地存储。这解决了我们看到的 `atop` 在大规模时的 delta 压缩问题。根据我们的测试,我们的每个样本压缩可以达到平均 5 倍的压缩率。 -`below` 也使用 [eBPF][8] 来收集关于短暂进程(生存时间短于数据收集间隔的进程)的信息。相比之下,`atop` 使用 BSD 进程核算来实现这一功能,这是一个已知的缓慢且容易发生优先级转换的内核接口。 +`below` 也使用 [eBPF][8] 来收集关于短暂进程(生存时间短于数据收集间隔的进程)的信息。相比之下,`atop` 使用 BSD 进程核算来实现这一功能,这是一个已知缓慢且容易发生优先级转换的内核接口。 对于用户来说,`below` 还支持实时模式和一个转储接口。实时模式将记录守护程序和 TUI 会话合并到一个进程中。这对于浏览系统状态是很方便的,不需要为数据存储投入长期运行的守护程序或磁盘空间。转储接口是一个可编写脚本的接口,用于所有的 `below` 数据存储。转储既强大又灵活,详细的数据以 CSV、JSON 和人类可读格式提供。 @@ -93,7 +93,7 @@ via: https://fedoramagazine.org/below-a-time-traveling-resource-monitor/ 作者:[Daniel Xu][a] 选题:[lujun9972][b] 译者:[wxy](https://github.com/wxy) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From f36c32f8b3045a793d2563dc9312000ccb9a0edf Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 6 Oct 2021 09:36:14 +0800 Subject: [PATCH 090/143] PUB @wxy https://linux.cn/article-13854-1.html --- .../20210818 below- a time traveling resource monitor.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) rename {translated/tech => published}/20210818 below- a time traveling resource monitor.md (98%) diff --git a/translated/tech/20210818 below- a time traveling resource monitor.md b/published/20210818 below- a time traveling resource monitor.md similarity index 98% rename from translated/tech/20210818 below- a time traveling resource monitor.md rename to published/20210818 below- a time traveling resource monitor.md index 04408a72ad..7212fecec1 100644 --- a/translated/tech/20210818 below- a time traveling resource monitor.md +++ b/published/20210818 below- a time traveling resource monitor.md @@ -4,16 +4,18 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13854-1.html" Below:一个时间旅行的资源监控器 ====== -![][1] +![](https://img.linux.net.cn/data/attachment/album/202110/06/093522hdsb82nm1cb4b4b6.jpg) 在这篇文章中,我们将介绍 `below`:一个用于现代 Linux 系统的 Apache 2.0 许可的资源监视器。`below` 可以让你重放以前记录的数据。 +![][1] + ### 背景 内核的主要职责之一是调度对资源的访问。有时这可能意味着分配物理内存,使多个进程可以共享同一主机。其他时候,它可能意味着确保 CPU 时间的公平分配。在这些场景里,内核提供了机制,而将策略留给了“别人”。近来,这个“别人”通常是 systemd 或 dockerd 这样的运行时。运行时接受来自调度器或最终用户的输入(类似于运行什么和如何运行)并在内核上转动正确的旋钮和拉动正确的杠杆,从而使工作负载能够*好好*工作。 From 589e4fa0cce0aa555e4a4f616e1fdc502f77af02 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 6 Oct 2021 09:49:58 +0800 Subject: [PATCH 091/143] PUB @wxy https://linux.cn/article-13855-1.html --- .../20211001 8 reasons why I learned Core Java.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename {translated/tech => published}/20211001 8 reasons why I learned Core Java.md (97%) diff --git a/translated/tech/20211001 8 reasons why I learned Core Java.md b/published/20211001 8 reasons why I learned Core Java.md similarity index 97% rename from translated/tech/20211001 8 reasons why I learned Core Java.md rename to published/20211001 8 reasons why I learned Core Java.md index 58f2a47d83..b7359fbbf1 100644 --- a/translated/tech/20211001 8 reasons why I learned Core Java.md +++ b/published/20211001 8 reasons why I learned Core Java.md @@ -4,15 +4,15 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13855-1.html" 学习 Core Java 的 8 个原因 ====== > 在学习建立在 Java 之上的所有相关工具时,了解 Core Java 会给你带来很大的优势。 -![学习和研究技术是成功的关键][1] +![](https://img.linux.net.cn/data/attachment/album/202110/06/094720iax1d49c5sc0sd48.jpg) 计算机编程(也被称为 *编码*)的重点不是使用哪种编程语言,而是发展编程逻辑和学习像程序员一样思考。你一开始使用的编程语言应该是在这一努力过程中对你帮助最大的语言。因此,你必须问自己一个问题,“作为一个程序员,你想开发什么?” From e514d68ea8e3fcf2864b46bb9634f27c6e1784dc Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 6 Oct 2021 09:53:12 +0800 Subject: [PATCH 092/143] APL --- sources/tech/20211005 Tools to explore BGP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211005 Tools to explore BGP.md b/sources/tech/20211005 Tools to explore BGP.md index ee03790758..97cfa57a78 100644 --- a/sources/tech/20211005 Tools to explore BGP.md +++ b/sources/tech/20211005 Tools to explore BGP.md @@ -2,7 +2,7 @@ [#]: via: "https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/" [#]: author: "Julia Evans https://jvns.ca/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 4fcac05659c8677968f3347d81e0b72fb1335d5b Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 6 Oct 2021 11:14:54 +0800 Subject: [PATCH 093/143] TSL --- sources/tech/20211005 Tools to explore BGP.md | 374 ------------------ .../tech/20211005 Tools to explore BGP.md | 362 +++++++++++++++++ 2 files changed, 362 insertions(+), 374 deletions(-) delete mode 100644 sources/tech/20211005 Tools to explore BGP.md create mode 100644 translated/tech/20211005 Tools to explore BGP.md diff --git a/sources/tech/20211005 Tools to explore BGP.md b/sources/tech/20211005 Tools to explore BGP.md deleted file mode 100644 index 97cfa57a78..0000000000 --- a/sources/tech/20211005 Tools to explore BGP.md +++ /dev/null @@ -1,374 +0,0 @@ -[#]: subject: "Tools to explore BGP" -[#]: via: "https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/" -[#]: author: "Julia Evans https://jvns.ca/" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Tools to explore BGP -====== - -Yesterday there was a big Facebook outage caused by BGP. I’ve been vaguely interested in learning more about BGP for a long time, so I was reading a couple of articles. - -I got frustrated because none of the articles showed me how I could actually look up information related to BGP on my computer, so I [wrote a tweet asking for tools][1]. - -I got a bunch of useful replies as always, so this blog post shows some tools you can use to look up BGP information. There might be an above average number of things wrong in this post because I don’t understand BGP that well. - -### I can’t publish BGP routes - -One of the reasons I’ve never learned much about BGP is – as far as I know, I don’t have access to publish BGP routes on the internet. - -With most networking protocols, you can pretty trivially get access to implement the protocol yourself if you want. For example you can: - - * issue your own TLS certificates - * write your own HTTP server - * write your own TCP implementation - * write your own authoritative DNS server for your domain (I’m trying to do that right now for a small project) - * set up your own certificate authority - - - -But with BGP, I think that unless you own your own ASN, you can’t publish routes yourself! (you _could_ implement BGP on your home network, but that feels a bit boring to me, when I experiment with things I like them to actually be on the real internet). - -Anyway, even though I can’t experiment with it, I still think it’s super interesting because I love networking, so I’m going to show you some tools I found to learn about BGP :) - -First let’s talk through some BGP terminology though. I’m going to go pretty fast because I’m more interested in the tools and there are a lot of high level explanations of BGP out there (like this [cloudflare post][2]). - -### What’s an AS (“autonomous system”) - -The first thing we need to understand is an AS. Every AS: - - 1. is owned by an organization (usually a large organization like your ISP, a government, a university, Facebook, etc) - 2. controls a specific set of IP addresses (for example my ISP’s AS includes 247,808 IP addresses) - 3. has a number (like 1403) - - - -Here are some observations I made about ASes just by doing some experimentation: - - * Some fairly big tech companies don’t have their own AS. For example, I looked up Patreon on BGPView, and as far as I can tell they don’t own as AS – their main site (patreon.com, [104.16.6.49][3]) is in Cloudflare’s AS. - * An AS can include IPs in many countries. Facebook’s AS ([AS32934][4]) definitely has IP addresses in Singapore, Canada, Nigeria, Kenya, the US, and more countries. - * It seems like IP address can be in more than one AS. For example, if I look up [209.216.230.240][5], it has 2 ASNs associated with it – AS6130 and AS21581. Apparently when this happens the more specific route takes priority – so packets to that IP would get routed to AS21581. - - - -### what’s a BGP route? - -There are a lot of routers on the internet. For example, my ISP has routers. - -When I send my ISP a packet (for example by running `ping 129.134.30.0`), my ISP’s routers needs to figure out how to actually get my packet to the IP address `129.134.30.0`. - -The way the router figures this out is that it has a **route table** – it has a list of a bunch of IP ranges (like `129.134.30.0/23`), and routes it knows about to get to that subnet. - -Here’s an example of a real route for `129.134.30.0/23`: (one of Facebook’s subnets). This one isn’t from my ISP. - -``` -11670 32934 - 206.108.35.2 from 206.108.35.254 (206.108.35.254) - Origin IGP, metric 0, valid, external - Community: 3856:55000 - Last update: Mon Oct 4 21:17:33 2021 -``` - -I think that this is saying that one path to `129.134.30.0` is through the machine `206.108.35.2`, which is on its local network. So the router might send my ping packet to `206.108.35.2` next, and then `206.108.35.2` will know how to get it to Facebook. The two numbers at the beginning (`11670 32934`) are ASNs. - -### what’s BGP? - -My understanding of BGP is very shaky, but it’s a protocol that companies use to advertise BGP routes. - -What happened yesterday with Facebook is that they basically made BGP announcements withdrawing all their BGP routes, so every router in the world deleted all of its routes related to Facebook, so no traffic could get there. - -Okay, now that we’ve covered some basic terminology, let’s talk about tools you can use to look at autonomous systems and BGP! - -### tool 1: look at your ISP’s AS with BGPView - -To make this AS thing less abstract, let’s use a tool called [BGPView][6] to look at a real AS. - -My ISP (EBOX) owns [AS 1403][7]. Here are the [IP addresses my ISP owns][8]. If I look up my computer’s public IPv4 address, I can check that it’s one of the IP addresses my ISP owns – it’s in the `104.163.128.0/17` block. - -BGPView also has this graph of how my ISP is connected to other ASes - -![][9] - -### tool 2: `traceroute -A` and `mtr -z` - -Okay, so we’re interested in autonomous systems. Let’s see which ASes I go through from - -`traceroute` and `mtr` both have options to tell you the ASN for every IP you go through. The flags are `traceroute -A` and `mtr -z`, respectively. - -Let’s see which autonomous systems I go through on my way to facebook.com with `mtr`! - -``` -$ mtr -z facebook.com - 1. AS??? LEDE.lan - 2. AS1403 104-163-190-1.qc.cable.ebox.net - 3. AS??? 10.170.192.58 - 4. AS1403 0.et-5-2-0.er1.mtl7.yul.ebox.ca - 5. AS1403 0.ae17.er2.mtl3.yul.ebox.ca - 6. AS1403 0.ae0.er1.151fw.yyz.ebox.ca - 7. AS??? facebook-a.ip4.torontointernetxchange.net - 8. AS32934 po103.psw01.yyz1.tfbnw.net - 9. AS32934 157.240.38.75 -10. AS32934 edge-star-mini-shv-01-yyz1.facebook.com -``` - -This is interesting – it looks like we go directly from my ISP’s AS (1403) to Facebook’s AS (32934), with an “internet exchange” in between. - -I’m not sure what an [internet exchange][10] is but I know that it’s an extremely important part of the internet. That’s going to be for another day though. My best guess is that it’s the part of the internet that enables “peering” – like an IX is a server room with a gigantic switch with infinite bandwith in it where a bunch of different companies put their computers so they can send each other packets. - -### mtr looks up ASNs with DNS - -I got curious about how mtr looks up ASNs, so I used strace. I saw that it looked like it was using DNS, so I ran [dnspeep][11], and voila! - -``` -$ sudo dnspeep -... -TXT 1.190.163.104.origin.asn.cymru.com 192.168.1.1 TXT: 1403 | 104.163.176.0/20 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.160.0/19 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.128.0/17 | CA | arin | 2014-08-14 -... -``` - -So it looks like we can find the ASN for `104.163.190.1` by looking up the `txt` record on `1.190.163.104.origin.asn.cymru.com`, like this: - -``` -$ dig txt 1.190.163.104.origin.asn.cymru.com -1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.160.0/19 | CA | arin | 2014-08-14" -1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.128.0/17 | CA | arin | 2014-08-14" -1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.176.0/20 | CA | arin | 2014-08-14" -``` - -That’s cool! Let’s keep moving though. - -### tool 3: the packet clearing house looking glass - -PCH (“packet clearing house”) is the organization that runs a lot of internet exchange points. A “looking glass” seems to be a generic term for a web form that lets you run network commands from another person’s computer. There are looking glasses that don’t support BGP, but I’m just interested in ones that show you information about BGP routes. - -Here’s the PCH looking glass: . - -In the web form on that site, I picked the Toronto IX (“TORIX”), since that’s what `mtr` said I was using to go to facebook.com. - -**thing 1: “show ip bgp summary”** - -Here’s the output. I’ve redacted some of it: - -``` -IPv4 Unicast Summary: -BGP router identifier 74.80.118.4, local AS number 3856 vrf-id 0 -BGP table version 33061919 -RIB entries 513241, using 90 MiB of memory -Peers 147, using 3003 KiB of memory -Peer groups 8, using 512 bytes of memory - -Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd -... -206.108.34.248 4 1403 484672 466938 0 0 0 05w3d03h 50 -... -206.108.35.2 4 32934 482088 466714 0 0 0 01w6d07h 38 -206.108.35.3 4 32934 482019 466475 0 0 0 01w0d06h 38 -... - -Total number of neighbors 147 -``` - -My understanding of what this is saying is that the Toronto Internet Exchange (“TORIX”) is directly connected to both my ISP (EBOX, AS 1403) and Facebook (AS 32934). - -**thing 2: “show ip bgp 129.134.30.0”** - -Here’s the output of picking “show ip bgp” for `129.134.30.0` (one of Facebook’s IP addresses): - -``` -BGP routing table entry for 129.134.30.0/23 -Paths: (4 available, best #4, table default) - Advertised to non peer-group peers: - 206.220.231.55 - 11670 32934 - 206.108.35.2 from 206.108.35.254 (206.108.35.254) - Origin IGP, metric 0, valid, external - Community: 3856:55000 - Last update: Mon Oct 4 21:17:33 2021 - - 11670 32934 - 206.108.35.2 from 206.108.35.253 (206.108.35.253) - Origin IGP, metric 0, valid, external - Community: 3856:55000 - Last update: Mon Oct 4 21:17:31 2021 - - 32934 - 206.108.35.3 from 206.108.35.3 (157.240.58.225) - Origin IGP, metric 0, valid, external, multipath - Community: 3856:55000 - Last update: Mon Oct 4 21:17:27 2021 - - 32934 - 206.108.35.2 from 206.108.35.2 (157.240.58.182) - Origin IGP, metric 0, valid, external, multipath, best (Older Path) - Community: 3856:55000 - Last update: Mon Oct 4 21:17:27 2021 -``` - -This seems to be saying that there are 4 routes to Facebook from that internet exchange. - -**the quebec internet exchange doesn’t seem to know anything about Facebook** - -I also tried the same thing from the Quebec internet exchange QIX (which is presumably closer to me, since I live in Montreal and not Toronto). But the QIX doesn’t seem to know anything about Facebook – when I put in `129.134.30.0` it just says “% Network not in table”. - -So I guess that’s why I was sent through the Toronto IX and not the Quebec one. - -### more BGP looking glasses - -Here are some more websites with looking glasses that will give you similar information from other points of view. They all seem to support the same `show ip bgp` syntax, maybe because they’re running the same software? I’m not sure. - - * - * - * - - - -There seem to be a LOT of these looking glass services out there, way more than just those 3 lists. - -Here’s an example session with one of the servers on this list: route-views.routeviews.org. This time I connected via telnet and not through a web form, but the output looks like it’s in the same format. - -``` -$ telnet route-views.routeviews.org - -route-views>show ip bgp 31.13.80.36 - -BGP routing table entry for 31.13.80.0/24, version 1053404087 -Paths: (23 available, best #2, table default) - Not advertised to any peer - Refresh Epoch 1 - 3267 1299 32934 - 194.85.40.15 from 194.85.40.15 (185.141.126.1) - Origin IGP, metric 0, localpref 100, valid, external - path 7FE0C3340190 RPKI State valid - rx pathid: 0, tx pathid: 0 - Refresh Epoch 1 - 6939 32934 - 64.71.137.241 from 64.71.137.241 (216.218.252.164) - Origin IGP, localpref 100, valid, external, best - path 7FE135DB6500 RPKI State valid - rx pathid: 0, tx pathid: 0x0 - Refresh Epoch 1 - 701 174 32934 - 137.39.3.55 from 137.39.3.55 (137.39.3.55) - Origin IGP, localpref 100, valid, external - path 7FE1604D3AF0 RPKI State valid - rx pathid: 0, tx pathid: 0 - Refresh Epoch 1 - 20912 3257 1299 32934 - 212.66.96.126 from 212.66.96.126 (212.66.96.126) - Origin IGP, localpref 100, valid, external - Community: 3257:8095 3257:30622 3257:50001 3257:53900 3257:53904 20912:65004 - path 7FE1195AF140 RPKI State valid - rx pathid: 0, tx pathid: 0 - Refresh Epoch 1 - 7660 2516 1299 32934 - 203.181.248.168 from 203.181.248.168 (203.181.248.168) - Origin IGP, localpref 100, valid, external - Community: 2516:1030 7660:9001 - path 7FE0D195E7D0 RPKI State valid - rx pathid: 0, tx pathid: 0 -``` - -Here there are a few options for routes: - - * `3267 1299 32934` - * `6939 32934` - * `701 174 32934` - * `20912 3257 1299 32934` - * `7660 2516 1299 32934` - - - -I think the reason there’s more than one AS in all of these is that `31.13.80.36` is a Facebook IP address in Toronto, so this server (which is maybe on the US west coast, I’m not sure) is not able to connect to it directly, it needs to go to another AS first. So all of the routes have one or more ASNs - -The shortest one is 6939 (“Hurricane Electric”), which is a “global internet backbone”. They also have their own [hurricane electric looking glass][12] page. - -### tool 4: BGPlay - -All the other tools so far have just shown us the current state of Facebook routing where everything is fine, but this 4th tool lets us see the history of this Facebook BGP internet disaster! It’s a GUI tool so I’m going to include a bunch of screenshots. - -The tool is at . I typed in the IP address 129.134.30.12 (one of Facebook’s IPs), if you want to play along. - -First, let’s look at the state of things before everything went wrong. I clicked in the timeline at 13:11:28 on Oct. 4, and got this: - -![][13] - -I originally found this very overwhelming. What’s happening? But then someone on Twitter pointed out that the next place to look is to click on the timeline right _after_ the Facebook disaster happened (at 18:38 on Oct. 4). - -![][14] - -It’s pretty clear that something is wrong in this picture – all the BGP routes are gone! oh no! - -The text at the top shows the last Facebook BGP route disappearing: - -``` -Type: W > withdrawal Involving: 129.134.30.0/24 -Short description: The route 50869, 25091, 32934 has been withdrawn. -Date and time: 2021-10-04 16:02:33 Collected by: 20-91.206.53.12 -``` - -If I then click the “fast forward” button, we see the BGP routes start to come back: - -![][15] - -The first one announced is `137409 32934`. I don’t think this is _actually_ the first one announced though – there are a lot of route announcements inside the same second (at 2021-10-04 21:00:40), and I think the ordering inside BGPlay is arbitrary. - -If I click the “fast forward” button again, more and more routes start to come back and routing starts to go back to normal - -I found looking at this outage in BGPlay really fun, even though the interface is pretty confusing at first. - -### maybe it is important to understand a little about BGP? - -I started out this post by saying you can’t change BGP routes BGP, but then I remembered that in 2016 or 2017 there was a [Telia routing issue][16] that caused us some minor network at work. And when that happens, it is actually useful to understand why your customers can’t reach your site, even if it’s totally out of your control. I didn’t know about any of these tools at that time but I would have liked to! - -I think for most companies all you can do to respond to outages caused by someone else’s bad BGP routes is “do nothing and wait for it to get fixed”, but it’s nice to be able to _confidently_ do nothing. - -### some ways to publish BGP routes - -If you want to (as a hobbyist) actually publish BGP routes, here are some links from the comments: - - * [a guide to getting your own ASN][17] - * [dn42][18] seems to have a playground for BGP (it’s not on the public internet, but it does have other people on it which seems more fun than just doing BGP by yourself at home) - - - -### that’s all for now - -I think there are a lot more BGP tools (like PCH has a bunch of [daily snapshots of routing data][19] which look like fun), but this post is already pretty long and there are other things I need to do today. - -I was surprised by how much information I could get about BGP just as a regular person, I always think of it as a “secret network wizard” thing but apparently there are all kind of public machines anybody can just telnet to and use to look at the route tables! Who knew! - --------------------------------------------------------------------------------- - -via: https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/ - -作者:[Julia Evans][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://jvns.ca/ -[b]: https://github.com/lujun9972 -[1]: https://twitter.com/b0rk/status/1445199475195236356 -[2]: https://blog.cloudflare.com/october-2021-facebook-outage/ -[3]: https://bgpview.io/ip/104.16.6.49 -[4]: https://bgpview.io/asn/32934#prefixes-v4 -[5]: https://bgpview.io/ip/209.216.230.240 -[6]: https://bgpview.io -[7]: https://bgpview.io/asn/1403 -[8]: https://bgpview.io/asn/1403#prefixes-v4 -[9]: https://jvns.ca/images/ebox-graph.png -[10]: https://en.wikipedia.org/wiki/Internet_exchange_point -[11]: https://github.com/jvns/dnspeep/ -[12]: https://lg.he.net/ -[13]: https://jvns.ca/images/bgplay-before.png -[14]: https://jvns.ca/images/bgplay-after.png -[15]: https://jvns.ca/images/bgplay-return.png -[16]: https://news.ycombinator.com/item?id=14246888 -[17]: https://labs.ripe.net/author/samir_jafferali/build-your-own-anycast-network-in-nine-steps/ -[18]: https://dn42.eu/Home -[19]: https://www.pch.net/resources/Routing_Data/IPv4_daily_snapshots/ diff --git a/translated/tech/20211005 Tools to explore BGP.md b/translated/tech/20211005 Tools to explore BGP.md new file mode 100644 index 0000000000..9dfb0a0be9 --- /dev/null +++ b/translated/tech/20211005 Tools to explore BGP.md @@ -0,0 +1,362 @@ +[#]: subject: "Tools to explore BGP" +[#]: via: "https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/" +[#]: author: "Julia Evans https://jvns.ca/" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +由 Facebook 事故引发的 BGP 工具探索 +====== + +昨天,Facebook 发生了由 BGP 引起的离线事故。我对学习更多关于 BGP 的知识已经隐约感兴趣了很长时间,所以我阅读了一些文章。 + +我感到很沮丧,因为没有一篇文章告诉我如何在我的电脑上实际查找与 BGP 有关的信息,因此我 [写了一条询问有关工具的推特][1]。 + +我一如既往地得到了一堆有用的回复,所以这篇博文展示了一些你可以用来查询 BGP 信息的工具。这篇文章中可能会有较多的错误,因为我对 BGP 不是很了解。 + +### 我不能发布 BGP 路由 + +我从来没有了解过 BGP 的原因之一是,据我所知,我没有在互联网上发布 BGP 路由的权限。 + +对于大多数网络协议,如果需要,你可以非常轻松地自己实现该协议。例如,你可以: + + * 发行你自己的 TLS 证书 + * 编写你自己的 HTTP 服务器 + * 编写你自己的 TCP 实现 + * 为你的域名编写你自己的权威 DNS 服务器(我现在正在为一个小项目尝试这样做)。 + *建立你自己的证书机构(CA) + +但是对于 BGP,我认为除非你拥有自己的 ASN,否则你不能自己发布路由(你*可以*在你的家庭网络上实现 BGP,但这对我来说有点无聊,当我做实验的时候,我希望它们真的在真正的互联网上)。 + +无论如何,尽管我不能用它做实验,但我仍然认为它超级有趣,因为我喜欢网络,所以我将向你展示我找到的一些工具来学习 BGP。 + +首先我们来谈谈 BGP 的一些术语。我打算很快掠过,因为我对工具更感兴趣,而且网上有很多关于 BGP 的高水平解释(比如这篇 [cloudflare 的文章][2])。 + +### AS 是什么? + +我们首先需要了解的是 AS(“自治系统autonomous system”)。每个 AS: + + 1. 由一个组织拥有(通常是一个大型组织,如你的 ISP、政府、大学、Facebook 等)。 + 2.控制一组特定的 IP 地址(例如,我的 ISP 的 AS 包括 247,808 个 IP 地址)。 + 3. 有一个编号 ASN(如 1403)。 + +下面是我通过做一些实验对 AS 的一些观察: + + * 一些相当大的科技公司并没有自己的 AS。例如,我在 BGPView 上查看了 Patreon,就我所知,他们没有自己的 AS,他们的主要网站(patreon.com,[104.16.6.49][3])在 Cloudflare 的 AS 中。 + * 一个 AS 可以包括许多国家的 IP。Facebook 的 AS([AS32934][4])肯定有新加坡、加拿大、尼日利亚、肯尼亚、美国和其他国家的 IP 地址。 + * 似乎 IP 地址可以在一个以上的 AS 中。例如,如果我查找[209.216.230.240][5],它有 2 个 ASN 与之相关:AS6130 和 AS21581。显然,当这种情况发生时,更具体的路线会被优先考虑--所以到该 IP 的数据包会被路由到 AS21581。 + +### 什么是 BGP 路由? + +互联网上有很多的路由器。例如,我的 ISP 就有路由器。 + +当我给我的 ISP 发送一个数据包时(例如通过运行 `ping 129.134.30.0`),我的 ISP 的路由器需要弄清楚如何将我的数据包实际送到 IP 地址 `129.134.30.0`。 + +路由器计算的方法是,它有一个**路由表**:有一堆 IP 地址范围的列表(比如 `129.134.30.0/23`),以及它知道的到达该子网的路由。 + +下面是一个 `129.134.30.0/23` 的真实路由的例子(Facebook 的一个子网)。这不是来自我的 ISP。 + +``` +11670 32934 + 206.108.35.2 from 206.108.35.254 (206.108.35.254) + Origin IGP, metric 0, valid, external + Community: 3856:55000 + Last update: Mon Oct 4 21:17:33 2021 +``` + +我认为这是在说通往 `129.134.30.0` 的一条路径是通过机器 `206.108.35.2`,这是在它的本地网络上。所以路由器接下来可能会把我的 ping 包发送到 `206.108.35.2`,然后 `206.108.35.2` 会知道如何把它送到 Facebook。开头的两个数字(`11670 32934`)是 ASN。 + +### BGP 是什么? + +我对 BGP 的理解很不牢靠,但它是一个公司用来公布 BGP 路由的协议。 + +昨天发生在 Facebook 身上的事情基本上是他们发布了一个 BGP 公告,撤销了他们所有的 BGP 路由,所以世界上的每个路由器都删除了所有与 Facebook 有关的路由,没有流量可以到达那里。 + +好了,现在我们已经涵盖了一些基本的术语,让我们来谈谈你可以用来查看 AS 和 BGP 的工具吧! + +### 工具 1:用 BGPView 查看你的 ISP 的 AS + +为了使 AS 这个东西不那么抽象,让我们用一个叫做 [BGPView][6]的 工具来看看一个真实的 AS。 + +我的 ISP(EBOX)拥有 [AS 1403][7]。下面是 [我的 ISP 拥有的 IP 地址][8]。如果我查找我的计算机的公共 IPv4 地址,我可以看到它是我的 ISP 拥有的IP地址之一:它在 `104.163.128.0/17` 块中。 + +BGPView 也有这个图,显示了我的 ISP 与其他 AS 的连接情况。 + +![][9] + +### 工具 2:traceroute -A 和 mtr -z + +好了,我们感兴趣的是 AS 。让我们看看我从哪些 AS 中穿过。 + +`traceroute` 和 `mtr` 都有选项可以告诉你每个 IP 的 ASN。其选项分别是 `traceroute -A` 和 `mtr -z`。 + +让我们看看我用 `mtr` 在去 facebook.com 的路上经过了哪些自治系统! + +``` +$ mtr -z facebook.com + 1. AS??? LEDE.lan + 2. AS1403 104-163-190-1.qc.cable.ebox.net + 3. AS??? 10.170.192.58 + 4. AS1403 0.et-5-2-0.er1.mtl7.yul.ebox.ca + 5. AS1403 0.ae17.er2.mtl3.yul.ebox.ca + 6. AS1403 0.ae0.er1.151fw.yyz.ebox.ca + 7. AS??? facebook-a.ip4.torontointernetxchange.net + 8. AS32934 po103.psw01.yyz1.tfbnw.net + 9. AS32934 157.240.38.75 +10. AS32934 edge-star-mini-shv-01-yyz1.facebook.com +``` + +这很有意思,看起来我们直接从我的 ISP 的 AS(1403)到 Facebook 的 AS(32934),中间有一个“互联网交换”。 + +我不确定 [互联网交换][10]internet exchange(IX)是什么,但我知道它是互联网的一个极其重要的部分。不过这将是以后的事了。我最好的猜测是,它是互联网中实现“对等”的部分,就假设它是一个有巨大的交换机的机房,里面有无限的带宽,一堆不同的公司把他们的电脑放在里面,这样他们就可以互相发送数据包。 + +### mtr 用 DNS 查找 ASN + +我对 `mtr` 如何查找 ASN 感到好奇,所以我使用了 `strace`。我看到它看起来像是在使用 DNS,所以我运行了 [dnspeep][11],然后就看到了! + +``` +$ sudo dnspeep +... +TXT 1.190.163.104.origin.asn.cymru.com 192.168.1.1 TXT: 1403 | 104.163.176.0/20 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.160.0/19 | CA | arin | 2014-08-14, TXT: 1403 | 104.163.128.0/17 | CA | arin | 2014-08-14 +... +``` + +所以,看起来我们可以通过查找 `1.190.163.104.origin.asn.cymru.com` 上的 `txt` 记录找到 `104.163.190.1` 的 ASN,像这样: + +``` +$ dig txt 1.190.163.104.origin.asn.cymru.com +1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.160.0/19 | CA | arin | 2014-08-14" +1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.128.0/17 | CA | arin | 2014-08-14" +1.190.163.104.origin.asn.cymru.com. 13911 IN TXT "1403 | 104.163.176.0/20 | CA | arin | 2014-08-14" +``` + +这很好!让我们继续前进吧。 + +### 工具 3:数据包交换所的观察镜 + +PCH(“数据包交换所packet clearing house”)是运行大量互联网交换点的组织。“观察镜looking glass”似乎是一个通用术语,指的是让你从另一个人的计算机上运行网络命令的 Web 表单。有一些观察镜不支持 BGP,但我只对那些能显示 BGP 路由信息的观察镜感兴趣。 + +这里是 PCH 的观察镜: 。 + +在该网站的 Web 表单中,我选择了多伦多 IX(“TORIX”),因为 `mtr` 说我是用它来访问 facebook.com 的。 + +#### 操作 1:显示 ip bgp 摘要 + +下面是输出结果。我修改了其中的一些内容: + +``` +IPv4 Unicast Summary: +BGP router identifier 74.80.118.4, local AS number 3856 vrf-id 0 +BGP table version 33061919 +RIB entries 513241, using 90 MiB of memory +Peers 147, using 3003 KiB of memory +Peer groups 8, using 512 bytes of memory + +Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd +... +206.108.34.248 4 1403 484672 466938 0 0 0 05w3d03h 50 +... +206.108.35.2 4 32934 482088 466714 0 0 0 01w6d07h 38 +206.108.35.3 4 32934 482019 466475 0 0 0 01w0d06h 38 +... + +Total number of neighbors 147 +``` + +我的理解是,多伦多 IX(“TORIX”)直接连接到我的 ISP (EBOX,AS 1403)和 Facebook(AS 32934)。 + +#### 操作 2:显示 ip bgp 129.134.30.0 + +这是挑选自 `show ip bgp` 对 `129.134.30.0`(Facebook 的一个 IP 地址)的输出: + +``` +BGP routing table entry for 129.134.30.0/23 +Paths: (4 available, best #4, table default) + Advertised to non peer-group peers: + 206.220.231.55 + 11670 32934 + 206.108.35.2 from 206.108.35.254 (206.108.35.254) + Origin IGP, metric 0, valid, external + Community: 3856:55000 + Last update: Mon Oct 4 21:17:33 2021 + + 11670 32934 + 206.108.35.2 from 206.108.35.253 (206.108.35.253) + Origin IGP, metric 0, valid, external + Community: 3856:55000 + Last update: Mon Oct 4 21:17:31 2021 + + 32934 + 206.108.35.3 from 206.108.35.3 (157.240.58.225) + Origin IGP, metric 0, valid, external, multipath + Community: 3856:55000 + Last update: Mon Oct 4 21:17:27 2021 + + 32934 + 206.108.35.2 from 206.108.35.2 (157.240.58.182) + Origin IGP, metric 0, valid, external, multipath, best (Older Path) + Community: 3856:55000 + Last update: Mon Oct 4 21:17:27 2021 +``` + +这似乎是在说,从该 IX 到 Facebook 有 4 条路线。 + +**魁北克 IX 似乎对 Facebook 一无所知**。 + +我也试过从魁北克 IX(“QIX”,它可能离我更近,因为我住在蒙特利尔而不是多伦多)做同样的事情。但 QIX 似乎对 Facebook 一无所知:当我输入`129.134.30.0` 时,它只是说 “% 网络不在表中”。 + +所以我想这就是为什么我被送到多伦多 IX 而不是魁北克的 IX。 + +#### 更多的 BGP 观察镜 + +这里还有一些带观察镜的网站,可以从其他角度给你类似的信息。它们似乎都支持相同的 `show ip bgp` 语法,也许是因为他们运行的是同一个软件?我不太确定。 + + * + * + * + +似乎有很多这样的观察镜服务,远不止这 3 个列表: + +这里有一个与这个列表上的一个服务器进行会话的例子:route-views.routeviews.org。这次我是通过 telnet 连接的,而不是通过 Web 表单,但输出的格式看起来是一样的。 + +``` +$ telnet route-views.routeviews.org + +route-views>show ip bgp 31.13.80.36 + +BGP routing table entry for 31.13.80.0/24, version 1053404087 +Paths: (23 available, best #2, table default) + Not advertised to any peer + Refresh Epoch 1 + 3267 1299 32934 + 194.85.40.15 from 194.85.40.15 (185.141.126.1) + Origin IGP, metric 0, localpref 100, valid, external + path 7FE0C3340190 RPKI State valid + rx pathid: 0, tx pathid: 0 + Refresh Epoch 1 + 6939 32934 + 64.71.137.241 from 64.71.137.241 (216.218.252.164) + Origin IGP, localpref 100, valid, external, best + path 7FE135DB6500 RPKI State valid + rx pathid: 0, tx pathid: 0x0 + Refresh Epoch 1 + 701 174 32934 + 137.39.3.55 from 137.39.3.55 (137.39.3.55) + Origin IGP, localpref 100, valid, external + path 7FE1604D3AF0 RPKI State valid + rx pathid: 0, tx pathid: 0 + Refresh Epoch 1 + 20912 3257 1299 32934 + 212.66.96.126 from 212.66.96.126 (212.66.96.126) + Origin IGP, localpref 100, valid, external + Community: 3257:8095 3257:30622 3257:50001 3257:53900 3257:53904 20912:65004 + path 7FE1195AF140 RPKI State valid + rx pathid: 0, tx pathid: 0 + Refresh Epoch 1 + 7660 2516 1299 32934 + 203.181.248.168 from 203.181.248.168 (203.181.248.168) + Origin IGP, localpref 100, valid, external + Community: 2516:1030 7660:9001 + path 7FE0D195E7D0 RPKI State valid + rx pathid: 0, tx pathid: 0 +``` + +这里有几个路由的选择: + + * `3267 1299 32934` + * `6939 32934` + * `701 174 32934` + * `20912 3257 1299 32934` + * `7660 2516 1299 32934` + +我想这些都有不止一个 AS 的原因是,`31.13.80.36` 是 Facebook 在多伦多的 IP 地址,所以这个服务器(可能在美国西海岸,我不确定)不能直接连接到它,它需要先到另一个 AS。所以所有的路由都有一个或多个 ASN + +最短的是 6939(“Hurricane Electric”),它是一个 “全球互联网骨干”。他们也有自己的 [Hurricane Electric 观察镜][12] 页面。 + +### 工具 4:BGPlay + +到目前为止,所有其他的工具都只是向我们展示了 Facebook 路由的当前状态,其中一切正常,但这第四个工具让我们看到了这个 Facebook BGP 互联网灾难的历史 这是一个 GUI 工具,所以我将包括一堆屏幕截图。 + +该工具在 。我输入了 IP 地址 129.134.30.12(Facebook 的一个 IP),如果你想一起试试。 + +首先,让我们看看一切出错之前的状态。我点击了在 10 月 4 日 13:11:28 的时间线,得到了这个结果: + +![][13] + +我最初发现这很让人不知所措。发生了什么事?但后来有人在推特上指出,下一个要看的地方是点击 Facebook 灾难发生后的时间线(10 月 4 日 18 点 38 分)。 + +![][14] + +很明显,这张图有问题:所有的 BGP 路线都不见了!哦,不要! + +顶部的文字显示了最后一条 Facebook BGP 路由的消失: + +``` +Type: W > withdrawal Involving: 129.134.30.0/24 +Short description: The route 50869, 25091, 32934 has been withdrawn. +Date and time: 2021-10-04 16:02:33 Collected by: 20-91.206.53.12 +``` + +如果我再点击“快进fast forward”按钮,我们看到 BGP 路由开始回来了。 + +![][15] + +第一个宣告的是 `137409 32934`。但我不认为这实际上是第一个宣布的,在同一秒内有很多路由宣告(在 2021-10-04 21:00:40),我认为 BGPlay 内部的排序是任意的。 + +如果我再次点击“快进fast forward”按钮,越来越多的路由开始回来,路由开始恢复正常。 + +我发现在 BGPlay 里看这个故障真的很有趣,尽管一开始界面很混乱。 + +### 也许了解一下 BGP 是很重要的? + +我在这篇文章的开头说,你不能改变 BGP 路由,但后来我想起在 2016 年或 2017 年,有一个 [Telia 路由问题][16],给我们的工作造成了一些小的网络问题。而当这种情况发生时,了解为什么你的客户无法到达你的网站其实是很有用的,即使它完全不受你控制。当时我不知道这些工具,但我希望能知道! + +我认为对于大多数公司来说,应对由其他人的错误 BGP 路由造成的中断,你所能做的就是“什么都不做,等待它得到修复”,但能够_自信地_什么都不做是很好的。 + +### 一些发布 BGP 路由的方法 + +如果你想(作为一个业余爱好者)真正发布 BGP 路由,这里有一些评论中的链接: + + * [获取你自己的 ASN 的指南][17] + * [dn42][18] 似乎有一个 BGP 的实验场(它不在公共互联网上,但确实有其他人在上面,这似乎比自己在家里做 BGP 实验更有趣 + +### 目前就这些了 + +我想还有很多 BGP 工具(比如 PCH 有一堆 [路由数据的每日快照][19],看起来很有趣),但这篇文章已经很长了,而且我今天还有其他事情要做。 + +我对我作为一个普通人可以得到这么多关于 BGP 的信息感到惊讶,我一直认为它是一个“秘密的网络巫师”这样的东西,但显然有各种公共机器,任何人都可以直接 telnet 到它并用来查看路由表!没想到! + +-------------------------------------------------------------------------------- + +via: https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/ + +作者:[Julia Evans][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://jvns.ca/ +[b]: https://github.com/lujun9972 +[1]: https://twitter.com/b0rk/status/1445199475195236356 +[2]: https://blog.cloudflare.com/october-2021-facebook-outage/ +[3]: https://bgpview.io/ip/104.16.6.49 +[4]: https://bgpview.io/asn/32934#prefixes-v4 +[5]: https://bgpview.io/ip/209.216.230.240 +[6]: https://bgpview.io +[7]: https://bgpview.io/asn/1403 +[8]: https://bgpview.io/asn/1403#prefixes-v4 +[9]: https://jvns.ca/images/ebox-graph.png +[10]: https://en.wikipedia.org/wiki/Internet_exchange_point +[11]: https://github.com/jvns/dnspeep/ +[12]: https://lg.he.net/ +[13]: https://jvns.ca/images/bgplay-before.png +[14]: https://jvns.ca/images/bgplay-after.png +[15]: https://jvns.ca/images/bgplay-return.png +[16]: https://news.ycombinator.com/item?id=14246888 +[17]: https://labs.ripe.net/author/samir_jafferali/build-your-own-anycast-network-in-nine-steps/ +[18]: https://dn42.eu/Home +[19]: https://www.pch.net/resources/Routing_Data/IPv4_daily_snapshots/ From d79d44470f48e80b23c3d4b4894aaba31b8fff0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=98=BF=E4=B9=9D?= <2220238842@qq.com> Date: Wed, 6 Oct 2021 18:36:52 +0800 Subject: [PATCH 094/143] translating --- sources/tech/20200307 Compose music as code using Sonic Pi.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20200307 Compose music as code using Sonic Pi.md b/sources/tech/20200307 Compose music as code using Sonic Pi.md index 6944a5f6ea..2f5d2a01a8 100644 --- a/sources/tech/20200307 Compose music as code using Sonic Pi.md +++ b/sources/tech/20200307 Compose music as code using Sonic Pi.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (anine09) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) @@ -108,7 +108,7 @@ via: https://opensource.com/article/20/3/sonic-pi 作者:[Matt Bargenquast][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[译者ID](https://github.com/anine09) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From e123e6a8898e328d383eb65283a425a5203fe70d Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 7 Oct 2021 05:03:39 +0800 Subject: [PATCH 095/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211006=20?= =?UTF-8?q?Check=20Java=20processes=20on=20Linux=20with=20the=20jps=20comm?= =?UTF-8?q?and?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211006 Check Java processes on Linux with the jps command.md --- ...processes on Linux with the jps command.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 sources/tech/20211006 Check Java processes on Linux with the jps command.md diff --git a/sources/tech/20211006 Check Java processes on Linux with the jps command.md b/sources/tech/20211006 Check Java processes on Linux with the jps command.md new file mode 100644 index 0000000000..b7c1c0cdfe --- /dev/null +++ b/sources/tech/20211006 Check Java processes on Linux with the jps command.md @@ -0,0 +1,73 @@ +[#]: subject: "Check Java processes on Linux with the jps command" +[#]: via: "https://opensource.com/article/21/10/check-java-jps" +[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Check Java processes on Linux with the jps command +====== +With many processes running on a system, it's useful to have a quick way +to identify only Java with the jps command. +![Coffee beans][1] + +On Linux, there are commands to view processes running on your system. A process is any ongoing event being managed by the kernel. A process is spawned when you launch an application, but there are also many other processes running in the background of your computer, including programs to keep your system time accurate, to monitor for new filesystems, to index files, and more. The utilities, such as those included in the [procps-ng package][2], that monitor these processes tend to be intentionally generic. They look at all processes on your computer so you can filter the list based on what you need to know. + +On Linux, you can view processes with the `ps` command. It is the simplest way to view the running processes on your system. + + +``` +$ ps +    PID TTY          TIME CMD +   4486 pts/0    00:00:00 bash +  66930 pts/0    00:00:00 ps +``` + +You can use the `ps` command to view running Java processes on a system also by piping output to `grep`. + + +``` +$ ps ax |grep java +  67604 pts/1    Sl+    0:18 /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-4.fc34.x86_64/bin/java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties -jar /home/alan/wildfly/24.0.1/jboss-modules.jar -mp /home/alan/wildfly/24.0.1/modules org.jboss.as.standalone -Djboss.home.dir=/home/alan/wildfly/24.0.1 -Djboss.server.base.dir=/home/alan/wildfly/24.0.1/standalone +``` + +OpenJDK, however, has its very own specific process monitor. The Java Virtual Machine Process Status (jps) tool allows you to scan for each running instance of the Java Virtual Machine (JVM) on your system. + +To view a similar output as seen in the `ps` command, use the `-v` option. This is useful, partly because it requires less typing. + + +``` +$ jps -v +67604 jboss-modules.jar -D[Standalone] -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties +``` + +The default `jps` output provides the process identifier and the class name or Jar file name of each detected instance. + + +``` +$ jps +67604 jboss-modules.jar +69430 Jps +``` + +**Note:** The man page for `jps` states that it is experimental and unsupported. Still, it's a nice-to-have option because often many processes are running on a system, and having a quick way to identify only Java is useful. + +Because Java is still a popular language today, being familiar with the Java Development Kit and Runtime Environment remains important. They contain many tools applicable to the development and maintenance of Java applications. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/check-java-jps + +作者:[Alan Formy-Duval][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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/java-coffee-beans.jpg?itok=3hkjX5We (Coffee beans) +[2]: https://opensource.com/article/21/8/linux-procps-ng From d544b412f527fd30c1e6d54d7194052c1a115232 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 7 Oct 2021 05:03:48 +0800 Subject: [PATCH 096/143] add done: 20211006 Check Java processes on Linux with the jps command.md --- sources/tech/20211007 .md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 sources/tech/20211007 .md diff --git a/sources/tech/20211007 .md b/sources/tech/20211007 .md new file mode 100644 index 0000000000..05999a471f --- /dev/null +++ b/sources/tech/20211007 .md @@ -0,0 +1,25 @@ +[#]: subject: "" +[#]: via: "https://www.2daygeek.com/repair-corrupted-xfs-filesystem-root-partition-rhel-8/" +[#]: author: " " +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + + +====== + +-------------------------------------------------------------------------------- + +via: https://www.2daygeek.com/repair-corrupted-xfs-filesystem-root-partition-rhel-8/ + +作者:[][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: +[b]: https://github.com/lujun9972 From 1b773d1cb92d5dfe374607bb2ce59f1d2068eefb Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 7 Oct 2021 05:03:57 +0800 Subject: [PATCH 097/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211006=20?= =?UTF-8?q?Following=20a=20DevSecOps=20maturity=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211006 Following a DevSecOps maturity model.md --- ...06 Following a DevSecOps maturity model.md | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 sources/tech/20211006 Following a DevSecOps maturity model.md diff --git a/sources/tech/20211006 Following a DevSecOps maturity model.md b/sources/tech/20211006 Following a DevSecOps maturity model.md new file mode 100644 index 0000000000..ed092f3416 --- /dev/null +++ b/sources/tech/20211006 Following a DevSecOps maturity model.md @@ -0,0 +1,66 @@ +[#]: subject: "Following a DevSecOps maturity model" +[#]: via: "https://opensource.com/article/21/10/devsecops-maturity-model" +[#]: author: "Will Kelly https://opensource.com/users/willkelly" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Following a DevSecOps maturity model +====== +Following a maturity model also helps tell a story that includes the +people, process, and technology changes that come with a +DevOps-to-DevSecOps transformation. +![Sunlight coming through the tree branches][1] + +[DevSecOps][2] is in many ways another level of DevOps maturity for an enterprise. Executive management and other stakeholders understand the concept of a maturity model, making it a helpful way to explain the value of this shift. Following a maturity model also helps you tell a story that includes the people, process, and technology changes that come with a DevOps-to-DevSecOps transformation. + +Here are four typical levels of DevSecOps maturity: + +### Level 1: pre-DevOps (no automation) + +At this level, developers perform every task manually, including creating and testing applications and systems. Team management, processes, and application security are still at a very ad hoc level. + +Take the extra step to capture your lessons learned and the challenges of your pre-DevOps development era. You need to know your history, so you don't repeat it in the future. + +### Level 2: early DevOps/DevSecOps (lightweight automation) + +Development teams standardize on some form of a DevOps toolchain to implement Infrastructure-as-Code and Compliance-as-Code. DevSecOps adoption is at the department or even just at the team level. + +Mentioning DevOps and DevSecOps interchangeably in this phase is deliberate. Some organizations will fast-forward from traditional waterfall development straight to a DevSecOps model. At level 2, DevOps/DevSecOps and lightweight automation is the domain of innovative and more forward-thinking development teams. Developers are driven to find a better way to do things, either as a result of their own initiative or because a customer is asking for a DevOps approach. + +Making it from level 2 to level 3 depends upon communicating and selling the successes of your early adopters of DevSecOps to the rest of your organization. Be sure to keep in touch with your early adopters and encourage them to share their DevOps and DevSecOps wins with the rest of their peers. Early win stories resonate much better than managerial mandates. + +### Level 3: DevOps to DevSecOps transition (advanced automation) + +DevSecOps grows into a corporate or agency-wide strategy. With organization-wide support, an automation strategy for application and infrastructure development and management takes form. DevOps teams can now improve their existing processes using containers, Kubernetes (K8s), and public cloud services. + +Bottom line: Organizations at this advanced phase of DevSecOps maturity are deploying applications at scale. + +### Level 4: full DevSecOps (full automation) + +Such an expert state of DevSecOps maturity will be elusive for all but the most prominent and well-funded enterprises, those who must routinely meet the most strict cybersecurity and compliance demands. An organization that reaches this level of maturity is API and cloud-native first. These organizations are also implementing emerging technologies such as [microservices][3], [serverless][4], and [artificial intelligence/machine learning (AI/ML)][5] to strengthen their application development and infrastructure security. + +### Final thoughts + +Only when you track the maturity of your processes, team culture, and tooling do you get the best current and future-state views of your organization's progress to DevSecOps. The pandemic pushed many teams to remote work in the past 18 months. As a result, teams had to mature their processes and mature them quickly to ensure their organization could still deliver to their customers. DevSecOps brings together the very cultural, collaboration, and toolchain improvements that development teams require to deliver secure and compliant software in their new world of work. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/devsecops-maturity-model + +作者:[Will Kelly][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/willkelly +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/jan-huber-tree.jpg?itok=CRBwhuMA (Sunlight coming through the tree branches) +[2]: https://www.redhat.com/en/topics/devops/what-is-devsecops +[3]: https://opensource.com/resources/what-are-microservices +[4]: https://opensource.com/article/21/1/devapps-strategies +[5]: https://opensource.com/tags/ai-and-machine-learning From c56d75057dea78dc8430bcc6de24678170c5a159 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Thu, 7 Oct 2021 05:04:23 +0800 Subject: [PATCH 098/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020211006=20?= =?UTF-8?q?DirectX=2011/12=20Games=20like=20Cyberpunk=202077=20Can=20Use?= =?UTF-8?q?=20NVIDIA=20DLSS=20With=20Proton=20Experimental=20on=20Linux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md --- ... DLSS With Proton Experimental on Linux.md | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md diff --git a/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md b/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md new file mode 100644 index 0000000000..334e19bce4 --- /dev/null +++ b/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md @@ -0,0 +1,96 @@ +[#]: subject: "DirectX 11/12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux" +[#]: via: "https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/" +[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +DirectX 11/12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux +====== + +In June, Nvidia [announced][1] the support for **DLSS** in Linux via Steam Proton and a beta driver for Vulkan-based games. + +DLSS stands for Deep Learning Super Sampling. It utilizes deep learning algorithms powered by Tensor cores found in RTX GPUs to upscale images inside games. This results in clearer and sharper images along with higher framerates. + +![Source: NVIDIA][2] + +This [upscaling technology is similar][3] to AMD’s Fidelity FX and even closer to Intel’s upcoming XeSS, both open-source, unlike DLSS. Gamers already have the benefit of making use of Fidelity FX through [GloriousEggroll’s][4] custom Proton GE versions. + +Moreover, NVIDIA also planned to expand support to DirectX games by this fall. + +And, finally, with the latest Proton Experiment support, that’s happening. Linux gamers using Nvidia GPUs can now play their favorite DX11/12 based games with DLSS. + +There couldn’t be a better time for this addition, considering we will be able to play various multiplayer games soon on Linux with the [support for BattleEye & Easy-Anti Cheat added to Proton][5]. + +### Major Updates to Steam Play Proton + +Along with a wave of improvements in Proton 6.3-7, Valve has finally managed to add DLSS support into Proton’s Experimental branch for DirectX 11/12 games a few days ago. + +Previously, a beta driver was required to use DLSS for Vulkan-based games like DOOM Eternal. + +But, that isn’t the case anymore—although the latest drivers are recommended. + +To complement this, DXVK and the Steamworks SDK have also been updated to the latest development versions. Additionally, performance issues for specific games and other bugs have also been fixed. + +You can check Proton’s [official GitHub changelog][6] to explore the list of improvements for all the games supported so far. + +### Enabling DLSS for DX11/12 Games + +Enabling DLSS is a straightforward process. + +First, you have to make sure that your Windows game runs on Proton Experimental. + +This can be done by right-clicking on the game and selecting Properties. Then under Compatibility, you need to tick the “Force the use of a specific Steam Play compatibility tool” checkbox. Next, choose Proton Experimental from the drop-down menu. + +![][7] + +Finally, you need to insert the command `PROTON_HIDE_NVIDIA_GPU=0 PROTON_ENABLE_NVAPI=1 %command%` in **Launch Options**. + +![][8] + +That’s it! You’re all set to play your games with DLSS! + +### Summing Up + +Nvidia DLSS is a much-needed feature for many games, given the difference it makes. + +Linux did not have full-fledged support for DLSS from the get-go. But, it looks like it will soon be available in a future stable Proton version along with necessary improvements. + +Linux gamers can finally experience better frame rates and visual quality for many games with their RTX-based GPUs. + +Although I use Fidelity FX on my AMD graphics card, I still crave to try out DLSS on an RTX GPU! + +_How do you feel about the arrival of Nvidia’s DLSS? Will you be trying it out soon? Feel free to share your comments below._ + +**Via:** [GamingOnLinux][9] + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/ + +作者:[Rishabh Moharir][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/rishabh/ +[b]: https://github.com/lujun9972 +[1]: https://www.nvidia.com/en-us/geforce/news/june-2021-rtx-dlss-game-update/ +[2]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwOCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[3]: https://news.itsfoss.com/intel-xess-open-source/ +[4]: https://github.com/GloriousEggroll/proton-ge-custom +[5]: https://news.itsfoss.com/easy-anti-cheat-linux/ +[6]: https://github.com/ValveSoftware/Proton/wiki/Changelog +[7]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ3NCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[8]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ2OCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[9]: https://www.gamingonlinux.com/2021/10/proton-experimental-expands-nvidia-dlss-support-on-linux-to-directx-11-titles From ab4f55b2c388b858870cd1a915c78ebe4c1bbea9 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Thu, 7 Oct 2021 08:39:24 +0800 Subject: [PATCH 099/143] Delete 20211007 .md --- sources/tech/20211007 .md | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 sources/tech/20211007 .md diff --git a/sources/tech/20211007 .md b/sources/tech/20211007 .md deleted file mode 100644 index 05999a471f..0000000000 --- a/sources/tech/20211007 .md +++ /dev/null @@ -1,25 +0,0 @@ -[#]: subject: "" -[#]: via: "https://www.2daygeek.com/repair-corrupted-xfs-filesystem-root-partition-rhel-8/" -[#]: author: " " -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - - -====== - --------------------------------------------------------------------------------- - -via: https://www.2daygeek.com/repair-corrupted-xfs-filesystem-root-partition-rhel-8/ - -作者:[][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: -[b]: https://github.com/lujun9972 From 22a468289e84fd5a1a2f36fa143539613d9cc9a3 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 7 Oct 2021 09:38:33 +0800 Subject: [PATCH 100/143] PRF @wxy --- .../tech/20211005 Tools to explore BGP.md | 52 ++++++++++--------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/translated/tech/20211005 Tools to explore BGP.md b/translated/tech/20211005 Tools to explore BGP.md index 9dfb0a0be9..e8b888796c 100644 --- a/translated/tech/20211005 Tools to explore BGP.md +++ b/translated/tech/20211005 Tools to explore BGP.md @@ -3,13 +3,15 @@ [#]: author: "Julia Evans https://jvns.ca/" [#]: collector: "lujun9972" [#]: translator: "wxy" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " 由 Facebook 事故引发的 BGP 工具探索 ====== +![](https://img.linux.net.cn/data/attachment/album/202110/07/093743krr8ftrpvgfrvffx.jpg) + 昨天,Facebook 发生了由 BGP 引起的离线事故。我对学习更多关于 BGP 的知识已经隐约感兴趣了很长时间,所以我阅读了一些文章。 我感到很沮丧,因为没有一篇文章告诉我如何在我的电脑上实际查找与 BGP 有关的信息,因此我 [写了一条询问有关工具的推特][1]。 @@ -25,12 +27,12 @@ * 发行你自己的 TLS 证书 * 编写你自己的 HTTP 服务器 * 编写你自己的 TCP 实现 - * 为你的域名编写你自己的权威 DNS 服务器(我现在正在为一个小项目尝试这样做)。 - *建立你自己的证书机构(CA) + * 为你的域名编写你自己的权威 DNS 服务器(我现在正在为一个小项目尝试这样做) + * 建立你自己的证书机构(CA) 但是对于 BGP,我认为除非你拥有自己的 ASN,否则你不能自己发布路由(你*可以*在你的家庭网络上实现 BGP,但这对我来说有点无聊,当我做实验的时候,我希望它们真的在真正的互联网上)。 -无论如何,尽管我不能用它做实验,但我仍然认为它超级有趣,因为我喜欢网络,所以我将向你展示我找到的一些工具来学习 BGP。 +无论如何,尽管我不能用它做实验,但我仍然认为它超级有趣,因为我喜欢网络,所以我将向你展示我找到的一些用来学习 BGP 的工具。 首先我们来谈谈 BGP 的一些术语。我打算很快掠过,因为我对工具更感兴趣,而且网上有很多关于 BGP 的高水平解释(比如这篇 [cloudflare 的文章][2])。 @@ -39,14 +41,14 @@ 我们首先需要了解的是 AS(“自治系统autonomous system”)。每个 AS: 1. 由一个组织拥有(通常是一个大型组织,如你的 ISP、政府、大学、Facebook 等)。 - 2.控制一组特定的 IP 地址(例如,我的 ISP 的 AS 包括 247,808 个 IP 地址)。 + 2. 控制一组特定的 IP 地址(例如,我的 ISP 的 AS 包括 247,808 个 IP 地址)。 3. 有一个编号 ASN(如 1403)。 下面是我通过做一些实验对 AS 的一些观察: - * 一些相当大的科技公司并没有自己的 AS。例如,我在 BGPView 上查看了 Patreon,就我所知,他们没有自己的 AS,他们的主要网站(patreon.com,[104.16.6.49][3])在 Cloudflare 的 AS 中。 + * 一些相当大的科技公司并没有自己的 AS。例如,我在 BGPView 上查看了 Patreon,就我所知,他们没有自己的 AS,他们的主要网站(`patreon.com`,[104.16.6.49][3])在 Cloudflare 的 AS 中。 * 一个 AS 可以包括许多国家的 IP。Facebook 的 AS([AS32934][4])肯定有新加坡、加拿大、尼日利亚、肯尼亚、美国和其他国家的 IP 地址。 - * 似乎 IP 地址可以在一个以上的 AS 中。例如,如果我查找[209.216.230.240][5],它有 2 个 ASN 与之相关:AS6130 和 AS21581。显然,当这种情况发生时,更具体的路线会被优先考虑--所以到该 IP 的数据包会被路由到 AS21581。 + * 似乎 IP 地址可以在一个以上的 AS 中。例如,如果我查找 [209.216.230.240][5],它有 2 个 ASN 与之相关:`AS6130` 和 `AS21581`。显然,当这种情况发生时,更具体的路线会被优先考虑 —— 所以到该 IP 的数据包会被路由到 `AS21581`。 ### 什么是 BGP 路由? @@ -54,9 +56,9 @@ 当我给我的 ISP 发送一个数据包时(例如通过运行 `ping 129.134.30.0`),我的 ISP 的路由器需要弄清楚如何将我的数据包实际送到 IP 地址 `129.134.30.0`。 -路由器计算的方法是,它有一个**路由表**:有一堆 IP 地址范围的列表(比如 `129.134.30.0/23`),以及它知道的到达该子网的路由。 +路由器计算的方法是,它有一个**路由表**:这是个有一堆 IP 地址范围的列表(比如 `129.134.30.0/23`),以及它知道的到达该子网的路由。 -下面是一个 `129.134.30.0/23` 的真实路由的例子(Facebook 的一个子网)。这不是来自我的 ISP。 +下面是一个 `129.134.30.0/23` (Facebook 的一个子网)的真实路由的例子。这不是来自我的 ISP。 ``` 11670 32934 @@ -70,7 +72,7 @@ ### BGP 是什么? -我对 BGP 的理解很不牢靠,但它是一个公司用来公布 BGP 路由的协议。 +我对 BGP 的理解非常浅薄,它是一个公司用来公布 BGP 路由的协议。 昨天发生在 Facebook 身上的事情基本上是他们发布了一个 BGP 公告,撤销了他们所有的 BGP 路由,所以世界上的每个路由器都删除了所有与 Facebook 有关的路由,没有流量可以到达那里。 @@ -80,7 +82,7 @@ 为了使 AS 这个东西不那么抽象,让我们用一个叫做 [BGPView][6]的 工具来看看一个真实的 AS。 -我的 ISP(EBOX)拥有 [AS 1403][7]。下面是 [我的 ISP 拥有的 IP 地址][8]。如果我查找我的计算机的公共 IPv4 地址,我可以看到它是我的 ISP 拥有的IP地址之一:它在 `104.163.128.0/17` 块中。 +我的 ISP(EBOX)拥有 [AS 1403][7]。这是 [我的 ISP 拥有的 IP 地址][8]。如果我查找我的计算机的公共 IPv4 地址,我可以看到它是我的 ISP 拥有的IP地址之一:它在 `104.163.128.0/17` 块中。 BGPView 也有这个图,显示了我的 ISP 与其他 AS 的连接情况。 @@ -92,7 +94,7 @@ BGPView 也有这个图,显示了我的 ISP 与其他 AS 的连接情况。 `traceroute` 和 `mtr` 都有选项可以告诉你每个 IP 的 ASN。其选项分别是 `traceroute -A` 和 `mtr -z`。 -让我们看看我用 `mtr` 在去 facebook.com 的路上经过了哪些自治系统! +让我们看看我用 `mtr` 在去 `facebook.com` 的路上经过了哪些 AS! ``` $ mtr -z facebook.com @@ -108,11 +110,11 @@ $ mtr -z facebook.com 10. AS32934 edge-star-mini-shv-01-yyz1.facebook.com ``` -这很有意思,看起来我们直接从我的 ISP 的 AS(1403)到 Facebook 的 AS(32934),中间有一个“互联网交换”。 +这很有意思,看起来我们直接从我的 ISP 的 AS(`1403`)到 Facebook 的 AS(`32934`),中间有一个“互联网交换”。 -我不确定 [互联网交换][10]internet exchange(IX)是什么,但我知道它是互联网的一个极其重要的部分。不过这将是以后的事了。我最好的猜测是,它是互联网中实现“对等”的部分,就假设它是一个有巨大的交换机的机房,里面有无限的带宽,一堆不同的公司把他们的电脑放在里面,这样他们就可以互相发送数据包。 +> 我不确定 [互联网交换][10]internet exchange(IX)是什么,但我知道它是互联网的一个极其重要的部分。不过这将是以后的事了。我猜是,它是互联网中实现“对等”的部分,就假设它是一个有巨大的交换机的机房,里面有无限的带宽,一堆不同的公司把他们的电脑放在里面,这样他们就可以互相发送数据包。 -### mtr 用 DNS 查找 ASN +#### mtr 用 DNS 查找 ASN 我对 `mtr` 如何查找 ASN 感到好奇,所以我使用了 `strace`。我看到它看起来像是在使用 DNS,所以我运行了 [dnspeep][11],然后就看到了! @@ -140,7 +142,7 @@ PCH(“数据包交换所packet clearing house”)是 这里是 PCH 的观察镜: 。 -在该网站的 Web 表单中,我选择了多伦多 IX(“TORIX”),因为 `mtr` 说我是用它来访问 facebook.com 的。 +在该网站的 Web 表单中,我选择了多伦多 IX(“TORIX”),因为 `mtr` 说我是用它来访问 `facebook.com` 的。 #### 操作 1:显示 ip bgp 摘要 @@ -169,7 +171,7 @@ Total number of neighbors 147 #### 操作 2:显示 ip bgp 129.134.30.0 -这是挑选自 `show ip bgp` 对 `129.134.30.0`(Facebook 的一个 IP 地址)的输出: +这是筛选自 `show ip bgp` 对 `129.134.30.0`(Facebook 的一个 IP 地址)的输出: ``` BGP routing table entry for 129.134.30.0/23 @@ -217,9 +219,9 @@ Paths: (4 available, best #4, table default) * * -似乎有很多这样的观察镜服务,远不止这 3 个列表: +似乎有很多这样的观察镜服务,远不止这 3 个列表。 -这里有一个与这个列表上的一个服务器进行会话的例子:route-views.routeviews.org。这次我是通过 telnet 连接的,而不是通过 Web 表单,但输出的格式看起来是一样的。 +这里有一个与这个列表上的一个服务器进行会话的例子:`route-views.routeviews.org`。这次我是通过 telnet 连接的,而不是通过 Web 表单,但输出的格式看起来是一样的。 ``` $ telnet route-views.routeviews.org @@ -271,15 +273,15 @@ Paths: (23 available, best #2, table default) * `20912 3257 1299 32934` * `7660 2516 1299 32934` -我想这些都有不止一个 AS 的原因是,`31.13.80.36` 是 Facebook 在多伦多的 IP 地址,所以这个服务器(可能在美国西海岸,我不确定)不能直接连接到它,它需要先到另一个 AS。所以所有的路由都有一个或多个 ASN +我想这些都有不止一个 AS 的原因是,`31.13.80.36` 是 Facebook 在多伦多的 IP 地址,所以这个服务器(可能在美国西海岸,我不确定)不能直接连接到它,它需要先到另一个 AS。所以所有的路由都有一个或多个 ASN。 -最短的是 6939(“Hurricane Electric”),它是一个 “全球互联网骨干”。他们也有自己的 [Hurricane Electric 观察镜][12] 页面。 +最短的是 `6939`(“Hurricane Electric”),它是一个 “全球互联网骨干”。他们也有自己的 [Hurricane Electric 观察镜][12] 页面。 ### 工具 4:BGPlay -到目前为止,所有其他的工具都只是向我们展示了 Facebook 路由的当前状态,其中一切正常,但这第四个工具让我们看到了这个 Facebook BGP 互联网灾难的历史 这是一个 GUI 工具,所以我将包括一堆屏幕截图。 +到目前为止,所有其他的工具都只是向我们展示了 Facebook 路由的当前状态,其中一切正常,但这第四个工具让我们看到了这个 Facebook BGP 互联网灾难的历史。这是一个 GUI 工具,所以我将包括一堆屏幕截图。 -该工具在 。我输入了 IP 地址 129.134.30.12(Facebook 的一个 IP),如果你想一起试试。 +该工具在 。我输入了 IP 地址 `129.134.30.12`(Facebook 的一个 IP),如果你想一起试试。 首先,让我们看看一切出错之前的状态。我点击了在 10 月 4 日 13:11:28 的时间线,得到了这个结果: @@ -320,7 +322,7 @@ Date and time: 2021-10-04 16:02:33 Collected by: 20-91.206.53.12 如果你想(作为一个业余爱好者)真正发布 BGP 路由,这里有一些评论中的链接: * [获取你自己的 ASN 的指南][17] - * [dn42][18] 似乎有一个 BGP 的实验场(它不在公共互联网上,但确实有其他人在上面,这似乎比自己在家里做 BGP 实验更有趣 + * [dn42][18] 似乎有一个 BGP 的实验场(它不在公共互联网上,但确实有其他人在上面,这似乎比自己在家里做 BGP 实验更有趣) ### 目前就这些了 @@ -335,7 +337,7 @@ via: https://jvns.ca/blog/2021/10/05/tools-to-look-at-bgp-routes/ 作者:[Julia Evans][a] 选题:[lujun9972][b] 译者:[wxy](https://github.com/wxy) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 82237a7445036e105f315f698c10ee39b4886006 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 7 Oct 2021 09:39:11 +0800 Subject: [PATCH 101/143] PUB @wxy https://linux.cn/article-13857-1.html --- .../tech => published}/20211005 Tools to explore BGP.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20211005 Tools to explore BGP.md (99%) diff --git a/translated/tech/20211005 Tools to explore BGP.md b/published/20211005 Tools to explore BGP.md similarity index 99% rename from translated/tech/20211005 Tools to explore BGP.md rename to published/20211005 Tools to explore BGP.md index e8b888796c..5b9e728692 100644 --- a/translated/tech/20211005 Tools to explore BGP.md +++ b/published/20211005 Tools to explore BGP.md @@ -4,8 +4,8 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13857-1.html" 由 Facebook 事故引发的 BGP 工具探索 ====== From be3b47c87b0b331c9c2eba721330241644d81f59 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 7 Oct 2021 10:07:43 +0800 Subject: [PATCH 102/143] APL --- .../tech/20211002 Monitor your Java on Linux with jconsole.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211002 Monitor your Java on Linux with jconsole.md b/sources/tech/20211002 Monitor your Java on Linux with jconsole.md index 3d75ccd24b..9774cd9a00 100644 --- a/sources/tech/20211002 Monitor your Java on Linux with jconsole.md +++ b/sources/tech/20211002 Monitor your Java on Linux with jconsole.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/10/monitor-java-linux-jconsole" [#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 886238663a0b77315c945c102265c5b5d68edda3 Mon Sep 17 00:00:00 2001 From: unigeorge <40418272+unigeorge@users.noreply.github.com> Date: Thu, 7 Oct 2021 10:19:03 +0800 Subject: [PATCH 103/143] APL --- ...1006 Check Java processes on Linux with the jps command.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20211006 Check Java processes on Linux with the jps command.md b/sources/tech/20211006 Check Java processes on Linux with the jps command.md index b7c1c0cdfe..e6c11e3e86 100644 --- a/sources/tech/20211006 Check Java processes on Linux with the jps command.md +++ b/sources/tech/20211006 Check Java processes on Linux with the jps command.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/10/check-java-jps" [#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "unigeorge" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " @@ -62,7 +62,7 @@ via: https://opensource.com/article/21/10/check-java-jps 作者:[Alan Formy-Duval][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[unigeorge](https://github.com/unigeorge) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From ee82ce9853a0d021b9fed383689f6db470575f08 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 7 Oct 2021 10:32:10 +0800 Subject: [PATCH 104/143] TSL&PRF --- ...onitor your Java on Linux with jconsole.md | 122 ------------------ ...onitor your Java on Linux with jconsole.md | 104 +++++++++++++++ 2 files changed, 104 insertions(+), 122 deletions(-) delete mode 100644 sources/tech/20211002 Monitor your Java on Linux with jconsole.md create mode 100644 translated/tech/20211002 Monitor your Java on Linux with jconsole.md diff --git a/sources/tech/20211002 Monitor your Java on Linux with jconsole.md b/sources/tech/20211002 Monitor your Java on Linux with jconsole.md deleted file mode 100644 index 9774cd9a00..0000000000 --- a/sources/tech/20211002 Monitor your Java on Linux with jconsole.md +++ /dev/null @@ -1,122 +0,0 @@ -[#]: subject: "Monitor your Java on Linux with jconsole" -[#]: via: "https://opensource.com/article/21/10/monitor-java-linux-jconsole" -[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Monitor your Java on Linux with jconsole -====== -How to use the Java monitoring and management console included in the -Java Development Kit. -![Puzzle pieces coming together to form a computer screen][1] - -The Java Development Kit (JDK) provides binaries, tools, and compilers for the development of Java applications. One helpful tool included is jconsole. - -To demonstrate, I will use the WildFly J2EE application server, which is part of the JBOSS open source application server project. First, I start up a standalone instance. - - -``` -~/wildfly/24.0.1/bin$ ./standalone.sh -========================================================================= - -  JBoss Bootstrap Environment - -  JBOSS_HOME: /home/alan/wildfly/24.0.1 - -  JAVA: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-5.fc34.x86_64/bin/java -``` - -Now, in another terminal, I type `jconsole`. - - -``` -$ jconsole -``` - -Upon launching, jconsole lists local instances. Select Local Process, then select the name of the process and click Connect. That is all it takes to connect and begin using jconsole with a running Java Virtual Machine (JVM). - -![jconsole new connection screen with local processes][2] - -(Alan Formy-Duvall, [CC BY-SA 4.0][3]) - -### Overview - -The Java Monitoring and Management Console shows the process identifier (PID) at the top of the dashboard. The Overview tab has four graphs to show the vitals for Heap Memory Usage, Threads, Classes, and CPU Usage. - -![jconsole dashboard showing heap memory usage, threads, classes, and CPU usage][4] - -(Alan Formy-Duvall, [CC BY-SA 4.0][3]) - -The tabs along the top provide more detailed views of each area. - -### Memory - -The Memory tab displays graphs of various aspects of the memory being used by the JVM. The amount of the server system memory allocated to the JVM is called the heap. This screen also provides details about usage by the internal components of the heap, such as the Eden Space, Old Gen, and the Survivor Space. You can manually request a garbage collection action as well. - -![jconsole memory tab][5] - -(Alan Formy-Duvall, [CC BY-SA 4.0][3]) - -### Threads - -The Threads tab shows how many threads are running. You can also manually check for deadlocks. - -![jconsole thread dashboard showing number of threads over time and a scrolling list of threads][6] - -(Alan Formy-Duvall, [CC BY-SA 4.0][3]) - -### Classes - -The classes tab tells you how many classes are loaded and how many have been unloaded. - -![jconsole classes tab showing number of loaded classes over time][7] - -(Alan Formy-Duvall, [CC BY-SA 4.0][3]) - -### VM Summary - -The VM Summary tab provides many details about the application and the host system. You can learn which operating system and architecture you are on, the total amount of system memory, the number of CPUs, and even swap space. - -![jconsole VMsummary tab ][8] - -(Alan Formy-Duvall, [CC BY-SA 4.0][3]) - -Further details about the JVM shown in the summary include current and maximum heap size and information about the garbage collectors in use. The bottom pane lists all of the arguments passed to the JVM. - -### MBeans - -The last tab, MBeans, lets you drill down through all of the MBeans to view attributes and values for each. - -![MBeans tab][9] - -(Alan Formy-Duvall, [CC BY-SA 4.0][3]) - -### Conclusion - -Java has been around a long time, and it continues to power millions of systems worldwide. Plenty of development environments and monitoring systems are available, but having a tool like jconsole included in the base kit can be highly valuable. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/10/monitor-java-linux-jconsole - -作者:[Alan Formy-Duval][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) -[2]: https://opensource.com/sites/default/files/uploads/jconsole_new_connection_local.png (new connection) -[3]: https://creativecommons.org/licenses/by-sa/4.0/deed.ast -[4]: https://opensource.com/sites/default/files/uploads/jconsole_tab_overview.png (tab overview) -[5]: https://opensource.com/sites/default/files/uploads/jconsole_tab_memory.png (memory tab) -[6]: https://opensource.com/sites/default/files/uploads/jconsole_tab_threads.png (threads tab) -[7]: https://opensource.com/sites/default/files/uploads/jconsole_tab_classes.png (classes tab) -[8]: https://opensource.com/sites/default/files/uploads/jconsole_tab_vm-summary.png (VMsummary tab ) -[9]: https://opensource.com/sites/default/files/uploads/jconsole_tab_mbeans.png (MBeans tab) diff --git a/translated/tech/20211002 Monitor your Java on Linux with jconsole.md b/translated/tech/20211002 Monitor your Java on Linux with jconsole.md new file mode 100644 index 0000000000..d0a888fd40 --- /dev/null +++ b/translated/tech/20211002 Monitor your Java on Linux with jconsole.md @@ -0,0 +1,104 @@ +[#]: subject: "Monitor your Java on Linux with jconsole" +[#]: via: "https://opensource.com/article/21/10/monitor-java-linux-jconsole" +[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +用 jconsole 在 Linux 上监控你的 Java +====== + +> 如何使用 Java 开发工具包中的 Java 监控和管理控制台。 + +![拼图拼成的电脑屏幕][1] + +Java 开发工具包(JDK)提供了开发 Java 应用程序的二进制文件、工具和编译器。其中一个有用的工具是 `jconsole`。 + +为了演示,我将使用 WildFly J2EE 应用服务器,它是 JBOSS 开源应用服务器项目的一部分。首先,我启动了一个独立的实例。 + +``` +~/wildfly/24.0.1/bin$ ./standalone.sh +========================================================================= +  JBoss Bootstrap Environment +  JBOSS_HOME: /home/alan/wildfly/24.0.1 +  JAVA: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-5.fc34.x86_64/bin/java +``` + +现在,在另一个终端,我输入 `jconsole`。 + +``` +$ jconsole +``` + +启动后,jconsole 会列出本地实例。选择“本地进程Local Process”,然后选择进程的名称并点击“连接Connect”。这就是连接并开始使用运行中的 Java 虚拟机(JVM)的 jconsole 的全部过程。 + +![jconsole 与本地进程的新连接屏幕][2] + +### 概述 + +这个 Java 监控和管理控制台在仪表板的顶部显示进程标识符(PID)。“概述Overview”标签有四个图表,显示“堆内存使用情况Heap Memory Usage”、“线程Threads”、“Classes”和“CPU 使用情况CPU Usage”的重要信息。 + +![jconsole 仪表板显示堆内存使用量、线程、类和 CPU 使用量][4] + +沿着顶部的标签提供每个区域的更详细的视图。 + +### 内存 + +“内存Memory”标签显示 JVM 所使用的内存的各个方面的图表。分配给 JVM 的服务器系统内存的数量被称为“Heap”。这个屏幕还提供了关于堆的内部组件使用情况的详细信息,例如 Eden Space、Old Gen 和 Survivor Space。你也可以手动请求一个垃圾收集动作。 + +![jconsole 内存标签][5] + +### 线程 + +“线程Threads”标签显示有多少线程在运行。你也可以手动检查是否存在死锁。 + +![jconsole 线程仪表板显示了随时间变化的线程数量和滚动的线程列表][6] + +### 类 + +“Classes”标签告诉你有多少类被加载,有多少被卸载。 + +![jconsole 类标签显示随着时间推移加载的类数量][7] + +### 虚拟机摘要 + +“虚拟机摘要VM Summary”标签提供了许多关于应用程序和主机系统的细节。你可以了解你所处的操作系统和架构、系统内存总量、CPU 数量,甚至交换空间。 + +![jconsole 虚拟机摘要标签][8] + +摘要中显示的关于 JVM 的进一步细节,包括当前和最大的堆大小以及正在使用的垃圾收集器的信息。底部的窗格列出了传递给 JVM 的所有参数。 + +### MBeans + +最后一个标签,MBeans,让你通过所有的 MBeans 向下钻取,以查看每个 MBeans 的属性和值。 + +![MBeans 标签][9] + +### 总结 + +Java 已经存在了很长时间,它将继续为全球数百万的系统提供动力。有很多开发环境和监控系统可以使用,但在基本工具包中包含像 `jconsole` 这样的工具会非常有价值。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/monitor-java-linux-jconsole + +作者:[Alan Formy-Duval][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/alanfdoss +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) +[2]: https://opensource.com/sites/default/files/uploads/jconsole_new_connection_local.png (new connection) +[3]: https://creativecommons.org/licenses/by-sa/4.0/deed.ast +[4]: https://opensource.com/sites/default/files/uploads/jconsole_tab_overview.png (tab overview) +[5]: https://opensource.com/sites/default/files/uploads/jconsole_tab_memory.png (memory tab) +[6]: https://opensource.com/sites/default/files/uploads/jconsole_tab_threads.png (threads tab) +[7]: https://opensource.com/sites/default/files/uploads/jconsole_tab_classes.png (classes tab) +[8]: https://opensource.com/sites/default/files/uploads/jconsole_tab_vm-summary.png (VMsummary tab ) +[9]: https://opensource.com/sites/default/files/uploads/jconsole_tab_mbeans.png (MBeans tab) From b631fcf0246d14ab8de8a8eef8e533502ad1a59a Mon Sep 17 00:00:00 2001 From: unigeorge <40418272+unigeorge@users.noreply.github.com> Date: Thu, 7 Oct 2021 10:50:07 +0800 Subject: [PATCH 105/143] finished --- ...processes on Linux with the jps command.md | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) rename {sources => translated}/tech/20211006 Check Java processes on Linux with the jps command.md (62%) diff --git a/sources/tech/20211006 Check Java processes on Linux with the jps command.md b/translated/tech/20211006 Check Java processes on Linux with the jps command.md similarity index 62% rename from sources/tech/20211006 Check Java processes on Linux with the jps command.md rename to translated/tech/20211006 Check Java processes on Linux with the jps command.md index e6c11e3e86..c8b986badd 100644 --- a/sources/tech/20211006 Check Java processes on Linux with the jps command.md +++ b/translated/tech/20211006 Check Java processes on Linux with the jps command.md @@ -7,15 +7,14 @@ [#]: publisher: " " [#]: url: " " -Check Java processes on Linux with the jps command +使用 jps 命令监测 Linux 上的 Java 进程 ====== -With many processes running on a system, it's useful to have a quick way -to identify only Java with the jps command. +系统上会运行很多进程,使用 jps 命令快速识别 Java 进程是一个很有用的方法。 ![Coffee beans][1] -On Linux, there are commands to view processes running on your system. A process is any ongoing event being managed by the kernel. A process is spawned when you launch an application, but there are also many other processes running in the background of your computer, including programs to keep your system time accurate, to monitor for new filesystems, to index files, and more. The utilities, such as those included in the [procps-ng package][2], that monitor these processes tend to be intentionally generic. They look at all processes on your computer so you can filter the list based on what you need to know. +在 Linux 上,有一些命令可以用于查看系统上运行的进程。进程是指的是由内核管理的正在进行的事件。每当启动应用程序时,就会产生一个进程,但也有许多进程在计算机后台运行,像保持系统时间准确的程序、监视新文件系统的程序、索引化文件的程序等。有一些实用程序可以用来监测这些进程,比如包含在 [procps-ng 包][2] 中的那些程序,但它们往往都是对各种进程通用的。它们会查看计算机上的所有进程,你可以根据想要的内容来过滤结果列表。 -On Linux, you can view processes with the `ps` command. It is the simplest way to view the running processes on your system. +在 Linux 上,可以使用 `ps` 命令查看进程。这是查看系统上正在运行的进程的最简单方法。 ``` @@ -25,7 +24,7 @@ $ ps   66930 pts/0    00:00:00 ps ``` -You can use the `ps` command to view running Java processes on a system also by piping output to `grep`. +你也可以使用 `ps` 命令,将结果输出到管道符 `grep`,从而查看系统上运行的 Java 进程,。 ``` @@ -33,9 +32,9 @@ $ ps ax |grep java   67604 pts/1    Sl+    0:18 /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-4.fc34.x86_64/bin/java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties -jar /home/alan/wildfly/24.0.1/jboss-modules.jar -mp /home/alan/wildfly/24.0.1/modules org.jboss.as.standalone -Djboss.home.dir=/home/alan/wildfly/24.0.1 -Djboss.server.base.dir=/home/alan/wildfly/24.0.1/standalone ``` -OpenJDK, however, has its very own specific process monitor. The Java Virtual Machine Process Status (jps) tool allows you to scan for each running instance of the Java Virtual Machine (JVM) on your system. +然而,OpenJDK 有自己的特定进程监视器。Java 虚拟机进程状态 (jps) 工具可以帮你扫描系统上每个运行的 Java 虚拟机 (JVM) 实例。 -To view a similar output as seen in the `ps` command, use the `-v` option. This is useful, partly because it requires less typing. +要想实现与 `ps` 命令类似的输出,可以使用 `-v` 选项。这很实用,因为与 `ps` 相比,它可以减少你的输入。 ``` @@ -43,7 +42,7 @@ $ jps -v 67604 jboss-modules.jar -D[Standalone] -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties ``` -The default `jps` output provides the process identifier and the class name or Jar file name of each detected instance. +`jps` 的默认输出会给出每个检测到的实例的进程标识符,以及类名或 Jar 文件名。 ``` @@ -52,9 +51,9 @@ $ jps 69430 Jps ``` -**Note:** The man page for `jps` states that it is experimental and unsupported. Still, it's a nice-to-have option because often many processes are running on a system, and having a quick way to identify only Java is useful. +**注意:** `jps` 的手册页指出此命令是试验性且不受支持的。尽管如此,它仍然是一个不错的选择,因为通常一个系统上运行着许多进程,有这样一种只识别 Java 进程的快速方法是很有用的。 -Because Java is still a popular language today, being familiar with the Java Development Kit and Runtime Environment remains important. They contain many tools applicable to the development and maintenance of Java applications. +当下的 Java 仍然是一种流行的语言,所以熟悉 Java 开发工具包和运行时环境仍然很重要。它们里面包含着许多适用于 Java 应用程序开发和维护的工具。 -------------------------------------------------------------------------------- From 64cb51848d14242b17d372daf101422f6c5106eb Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 7 Oct 2021 12:26:25 +0800 Subject: [PATCH 106/143] APL --- ...-like Browsers That Are Better Than Google Chrome in 2021.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md b/sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md index d0de8fbccf..f6bd4eb0bd 100644 --- a/sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md +++ b/sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md @@ -2,7 +2,7 @@ [#]: via: (https://news.itsfoss.com/chrome-like-browsers-2021/) [#]: author: (Jacob Crume https://news.itsfoss.com/author/jacob/) [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (wxy) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From dbbc677c403f0e2c39b96f6b2bbc70965a60ed68 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 7 Oct 2021 13:16:24 +0800 Subject: [PATCH 107/143] TSL&PRF --- ...t Are Better Than Google Chrome in 2021.md | 200 ------------------ ...t Are Better Than Google Chrome in 2021.md | 180 ++++++++++++++++ 2 files changed, 180 insertions(+), 200 deletions(-) delete mode 100644 sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md create mode 100644 translated/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md diff --git a/sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md b/sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md deleted file mode 100644 index f6bd4eb0bd..0000000000 --- a/sources/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md +++ /dev/null @@ -1,200 +0,0 @@ -[#]: subject: (Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021) -[#]: via: (https://news.itsfoss.com/chrome-like-browsers-2021/) -[#]: author: (Jacob Crume https://news.itsfoss.com/author/jacob/) -[#]: collector: (lujun9972) -[#]: translator: (wxy) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) - -Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021 -====== - -Want to switch away from Google? But, looking for something potentially better than Google Chrome (and similar) for your Linux system? - -Fortunately, there are multiple Google Chrome alternatives that you can try. - -Each of them brings something interesting to the table, while also keeping the fantastic compatibility Chrome is known for. Read on to find out more about these browsers. - -### Options That Are Better Than Google Chrome - -**Note:** _While [free and open-source software plays a crucial role in replacing big tech][1], any choice available on Linux other than Google Chrome should be a good start. Hence, you will find some non-FOSS options as well._ - -In my opinion, the best alternatives to Chrome are Chromium-based, meaning that they share the same DNA with Chrome. The advantage of this is that they already have feature parity with Chrome, while having more time to add their own. - -Also, if you want, you can explore [opensource alternatives to Chrome][2] that are not based on Chromium. - -In any case, even if the alternatives to Google Chrome do not seem superior to you, it is worth a try to move away from Big Tech. - -The result of this is a collection of browsers that are equal or better than Chrome in various aspects. Without further ado, here are my top five picks for Chrome-like browsers that are better than Chrome itself: - - * **UnGoogled Chromium** - * **Brave** - * **Microsoft Edge** - * **Vivaldi** - * **Opera** - - - -This list is in no order of ranking. - -### 1\. UnGoogled Chromium - -![][3] - -**Features:** - - * Removal of functionality specific to Google domains. - * Blocking of internal requests to Google at runtime. - * Stripping Google binaries from the source code. - * Many new command-line switches and `chrome://flags` entries. - * Forces all pop-ups into tabs. - - - -For the privacy fans out there, this browser will be a godsend. While it may look identical to Chrome, it has many privacy tweaks under-the-hood. - -As the name suggests, the biggest setback for Chrome users will be the absence of Google’s service integrations. This also means no more internal requests to Google, Google URL tracking, and much more. - -It does not boast anything extraordinary to protect your privacy, but it should be better than Google Chrome. - -You can choose to explore and toggle privacy settings at will through the Chrome flags settings as well. - -All-in-all, UnGoogled Chromium provides a familiar browsing experience, with a suite of privacy features added in as well. It is reliable and is also compatible with the large ecosystem of Chrome extensions. - -[UnGoogled Chromium][4] - -### 2\. Brave - -![][3] - -**Features:** - - * Built-in ad blocker. - * Faster page loading times. - * Brave rewards program. - * Ability to synchronise between devices. - * Chrome web store support. - - - -When Brave first marched onto the stage in 2016, people around the world were gawking at its privacy and performance features. At launch, these included a built-in ad-blocker and a new UI. - -Since then, the browser has gained many more features, including a rewards program and [Tor][5] integration. This has led it to become one of the fastest-growing browsers. - -[Brave][6] - -### 3\. Microsoft Edge - -![][3] - -**Features:** - - * Chrome Web Store support - * Child browsing mode (additional protection and simpler UI) - * Good PDF editing tools - * Built-in coupon finder - * Reader Mode - * Built-in password generator - - - -When Microsoft Edge first released alongside Windows 10 in 2015, it was widely criticized for being slow and buggy. However, in early 2020 it was completely remade using the Chromium web engine. - -This is the same engine Chrome is based on. The result of this is a modern and fast browsing experience. One perk of this transition is the web browser’s ability to run on many different platforms, from Windows 7 and macOS to Ubuntu and other Linux-based distros. - -I know, if you hate Microsoft for some reason, this may not entice you – but Microsoft Edge for Linux is a serious alternative to Google Chrome. - -[Microsoft Edge (Beta)][7] - -### 4\. Vivaldi - -![][3] - -**Features:** - - * Built-in translator - * Vivaldi Email (Beta) - * Feed Reader (Beta) - * Vivaldi Calendar (Beta) - * Highly customizable UI - * Built-in Ad Blocker - * Chrome Web Store support - * Tab grouping - * Split-screen tabs - - - -First released in 2016, Vivaldi has quickly risen the ranks in browser wars. Originally designed for Opera users disgruntled by its transition from the [Presto][8] [layout engine][9], it has managed to re-implement many of the features lost during Opera’s transition to Chromium. - -Amazingly, it has managed to do this all while being based on Chromium (the very reason Opera dropped these features). - -The latest [Vivaldi 4.0 release][10] also turned the tables with several features for power users. - -While it isn’t 100% FOSS, 93% of its source code is available, with only the UI being proprietary. Considering Vivaldi’s development team actively focus on Linux users for improvement, this could be a worthy tradeoff due to the sheer number of features Vivaldi offers. - -[Vivaldi][11] - -### 5\. Opera - -![][3] - -**Features:** - - * Built-in VPN - * Easy access to social media - * Built-in cryptocurrency wallet - * Fraud and malware protection - * Highly visible website security badge - - - -While it has never been the king of web browsers, Opera has always been present in the debate over which browser to use. Originally based on its in-house Presto Layout Engine, it switched over to Chromium in 2013. - -Unfortunately, this switch meant that the Opera team was forced to drop some of its most well-known features, paving the way for alternatives such as Vivaldi and Firefox to fill the space Opera had left. - -That isn’t to say that Opera is without features. It contains many, some of which are listed below. - -[Opera][12] - -### Wrapping Up - -Here we have listed a wide variety of browsers tailored to all kinds of users on any desktop platform. - -No matter whether you want more features, a better user interface, or something that helps you get away from Google, there is an option for you. - -Since all these browsers are based on Chromium, they all offer a good compatibility and user experience like Chrome. So, switch to one of these Chrome-like browsers and enjoy the freedom that each of them grants! - -_What’s your favorite alternative to Google Chrome on Linux in 2021? Let me know in the comments down below._ - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/chrome-like-browsers-2021/ - -作者:[Jacob Crume][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/jacob/ -[b]: https://github.com/lujun9972 -[1]: https://news.itsfoss.com/save-privacy-with-foss/ -[2]: https://itsfoss.com/open-source-browsers-linux/ -[3]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQxNiIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[4]: https://github.com/Eloston/ungoogled-chromium -[5]: https://itsfoss.com/tor-guide/ -[6]: https://brave.com -[7]: https://www.microsoftedgeinsider.com/en-us/download -[8]: https://en.wikipedia.org/wiki/Presto_(browser_engine) -[9]: https://en.wikipedia.org/wiki/Browser_engine -[10]: https://news.itsfoss.com/vivaldi-4-0-release/ -[11]: https://vivaldi.com -[12]: https://www.opera.com diff --git a/translated/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md b/translated/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md new file mode 100644 index 0000000000..dfb9fc76b1 --- /dev/null +++ b/translated/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md @@ -0,0 +1,180 @@ +[#]: subject: (Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021) +[#]: via: (https://news.itsfoss.com/chrome-like-browsers-2021/) +[#]: author: (Jacob Crume https://news.itsfoss.com/author/jacob/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: ( ) +[#]: url: ( ) + +Linux 上 5 个基于 Chromium 的浏览器 +====== + +> 谷歌浏览器可能不是 Linux 用户的最佳浏览器。在这里,我们探讨了 Linux 平台的其他潜在选择。 + +![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/06/chrome-alternatives-2021.png?w=1200&ssl=1) + +想摆脱谷歌?想为你的 Linux 系统寻找可能比谷歌浏览器(和类似的)更好的浏览器? + +幸运的是,有多个谷歌浏览器的替代品,你可以试试。 + +它们中的每一个都带来了一些有趣的东西,同时也保持了 Chrome 所特有的奇妙兼容性。请继续阅读,了解这些浏览器的更多信息。 + +### 比谷歌浏览器更好的选择 + +> 注:虽然 [自由和开源软件在取代科技巨头方面扮演着关键角色][1],但除了谷歌浏览器之外,Linux 上的任何选择都是一个好的开始。因此,你也会发现一些非 FOSS 的选择。 + +在我看来,Chrome 的最佳替代品是基于 Chromium 的浏览器,这意味着它们与 Chrome 共享相同的基因。这样做的好处是,它们已经拥有与 Chrome 相同的功能,同时有更多时间来增加自己的功能。 + +另外,如果你愿意,你可以了解一下不基于 Chromium 的 [Chrome 开源替代品][2]。 + +无论如何,即使谷歌浏览器的替代品对你来说并不优越,也值得尝试远离科技巨头。 + +我们收集了一些在各方面与 Chrome 相当或更好的浏览器。闲话少说,以下是我挑选的五款比 Chrome 本身更好的类似 Chrome 的浏览器: + + * UnGoogled Chromium + * Brave + * Edge + * Vivaldi + * Opera + +这份名单没有排名顺序。 + +### 1、UnGoogled Chromium + +![][13] + +特点: + + * 移除针对谷歌域名的功能 + * 在运行时阻止对 Google 的内部请求 + * 从源代码中剥离谷歌的二进制文件 + * 许多新的命令行开关和 `chrome://flags` 条目 + * 强制所有弹出式窗口为标签 + +对于那些隐私爱好者来说,[UnGoogled Chromium][4] 浏览器将是一个天赐良机。虽然它可能看起来与 Chrome 相同,但它有许多隐私方面的调整。 + +顾名思义,对于 Chrome 浏览器的用户来说,最大的倒退将是没有谷歌的服务集成。但这也意味着不再有对谷歌的内部请求、谷歌网址跟踪等等。 + +它没有吹嘘任何非凡的东西来保护你的隐私,但它应该比谷歌浏览器更好。 + +你也可以选择通过 `chrome://flags` 设置来探索和切换隐私设置。 + +总而言之,UnGoogled Chromium 提供了一种熟悉的浏览体验,同时还加入了一套隐私功能。它是可靠的,而且还与 Chrome 扩展程序庞大的生态系统兼容。 + +### 2、Brave + +![][14] + +特点: + + * 内置广告拦截器 + * 更快的页面加载时间 + * Brave 奖励计划 + * 能够在设备之间进行同步 + * 支持 Chrome Web 商店 + +当 [Brave][6] 在 2016 年首次登上舞台时,世界各地的人们都震惊于它的隐私和性能特点。在发布时,这包括了一个内置的广告屏蔽器和一个新的用户界面。 + +从那时起,该浏览器有了更多的功能,包括奖励计划和 [Tor][5] 整合。这使得它成为增长最快的浏览器之一。 + +### 3、Edge + +![][15] + +特点: + + * 支持 Chrome Web 商店 + * 儿童浏览模式(额外的保护和更简单的用户界面) + * 良好的 PDF 编辑工具 + * 内置优惠券搜索器 + * 阅读模式 + * 内置密码生成器 + +当微软 [Edge][7] 在 2015 年首次与 Windows 10 一起发布时,它因缓慢和有缺陷而被广泛批评。然而,在 2020 年初,它使用 Chromium Web 引擎完全重新制作了。 + +这也是 Chrome 浏览器所基于的引擎,这提供了现代和快速的浏览体验。这种转变的一个好处是 Web 浏览器能够在许多不同的平台上运行,从 Windows 7 和 macOS 到 Ubuntu 和其他基于 Linux 的发行版。 + +我知道,如果你因为某些原因讨厌微软,这可能不会吸引你 —— 但 Linux 版的微软 Edge 是谷歌 Chrome 浏览器的一个重要替代品。 + +### 4、Vivaldi + +![][16] + +特点: + + * 内置翻译器 + * Vivaldi Email(Beta) + * Feed 阅读器(Beta) + * Vivaldi 日历(Beta) + * 可高度定制的用户界面 + * 内置广告拦截器 + * 支持 Chrome Web 商店 + * 标签分组 + * 分屏标签 + +[Vivaldi][11] 于 2016 年首次发布,它在浏览器大战中迅速崛起。它最初是为对 [Presto][8] [布局引擎][9] 过渡不满的 Opera 用户设计的,它已经成功地重新实现了 Opera 过渡到 Chromium 期间失去的许多功能。 + +令人惊讶的是,它在基于 Chromium 的情况下还能做到这一点(正是 Opera 放弃这些功能的原因)。 + +最新的 [Vivaldi 4.0 版本][10] 也为高级用户提供了一些功能。 + +虽然它不是 100% 的自由软件,但其 93% 的源代码是可用的,只有用户界面是专有的。考虑到 Vivaldi 的开发团队积极关注着 Linux 用户的改进,Vivaldi 提供了大量的功能,这可能是一个值得权衡的结果。 + +### 5、Opera + +![][17] + +特点: + + * 内置虚拟专用网络 + * 轻松访问社交媒体 + * 内置加密货币钱包 + * 欺诈和恶意软件保护 + * 高度可见的网站安全徽章 + +虽然 [Opera][12] 从未成为 Web 浏览器之王,但它一直存在于关于使用何种浏览器的争论中。它最初是基于其内部的 Presto 布局引擎的,在 2013 年切换到 Chromium。 + +不幸的是,这一转换意味着 Opera 团队被迫放弃了其最知名的一些功能,为 Vivaldi 和 Firefox 等替代品填补 Opera 留下的空间铺平道路。 + +这并不是说 Opera 缺乏功能,它包含了许多功能。 + +### 总结 + +在这里,我们列出了为 Linux 桌面平台上用户量身定做的浏览器。 + +无论你是想要更多的功能、更好的用户界面,还是想要帮助你摆脱谷歌的束缚,都有一个选择适合你。 + +由于所有这些浏览器都是基于 Chromium 的,它们都能像 Chrome 一样提供良好的兼容性和用户体验。因此,请切换到这些类似 Chrome 的浏览器中,享受它们各自赋予的自由吧。 + +2021 年,你最喜欢的 Linux 上谷歌浏览器的替代品是什么?请在下面的评论中告诉我。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/chrome-like-browsers-2021/ + +作者:[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://news.itsfoss.com/save-privacy-with-foss/ +[2]: https://itsfoss.com/open-source-browsers-linux/ +[4]: https://github.com/Eloston/ungoogled-chromium +[5]: https://itsfoss.com/tor-guide/ +[6]: https://brave.com +[7]: https://www.microsoftedgeinsider.com/en-us/download +[8]: https://en.wikipedia.org/wiki/Presto_(browser_engine) +[9]: https://en.wikipedia.org/wiki/Browser_engine +[10]: https://news.itsfoss.com/vivaldi-4-0-release/ +[11]: https://vivaldi.com +[12]: https://www.opera.com +[13]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/05/ungoogled-chromium-screenshot.png?w=1366&ssl=1 +[14]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/06/brave-homepage.png?w=1366&ssl=1 +[15]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/06/edge-homepage.png?w=1366&ssl=1 +[16]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/06/vivaldi-4.0-homepage.png?w=1366&ssl=1 +[17]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/06/opera-homepage.png?w=1366&ssl=1 \ No newline at end of file From f68e780dc0ce985feaa6bf4ef5ef7154cee5abd1 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 7 Oct 2021 13:20:05 +0800 Subject: [PATCH 108/143] PUB @wxy https://linux.cn/article-13858-1.html --- ...ike Browsers That Are Better Than Google Chrome in 2021.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md (99%) diff --git a/translated/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md b/published/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md similarity index 99% rename from translated/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md rename to published/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md index dfb9fc76b1..ea7ebdd97e 100644 --- a/translated/tech/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md +++ b/published/20210616 Top 5 Chrome-like Browsers That Are Better Than Google Chrome in 2021.md @@ -4,8 +4,8 @@ [#]: collector: (lujun9972) [#]: translator: (wxy) [#]: reviewer: (wxy) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13858-1.html) Linux 上 5 个基于 Chromium 的浏览器 ====== From ed5ff0b20ae2d5438b183de39688b92dadb6cece Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 8 Oct 2021 05:02:29 +0800 Subject: [PATCH 109/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211008=20?= =?UTF-8?q?How=20to=20Install=20Vivaldi=20Browser=20on=20Ubuntu=20and=20Ot?= =?UTF-8?q?her=20Linux=20Distributions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md --- ...on Ubuntu and Other Linux Distributions.md | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md diff --git a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md new file mode 100644 index 0000000000..a58f299afa --- /dev/null +++ b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md @@ -0,0 +1,161 @@ +[#]: subject: "How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions" +[#]: via: "https://itsfoss.com/install-vivaldi-ubuntu-linux/" +[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions +====== + +_**Brief: Learn how to install Vivaldi web browser on Ubuntu, Debian and several other Linux distributions in this beginner’s tutorial. You’ll also learn about updating it and removing it.**_ + +[Vivaldi][1] is an increasingly popular web browser. It is based on Chromium, so you have Chrome like features, but it adds several other features to give a different, intuitive interface. + +It comes with tab grouping, ad blocker, mouse gestures, notes manager and even allows adding macros. You could even use split viewing to view multiple pages at once. It also respects your privacy, unlike Chrome. + +![Tab tiling for split viewing multiple websites at once][2] + +You can understand the popularity of this browser from the fact that [Manjaro Linux recently replaced Firefox with Vivaldi as the default browser][3] in some of its variants. + +If you want to try it, let me show how to install Vivaldi on Linux. You’ll learn: + + * GUI and command line methods for installing Vivaldi + * Tips on updating Vivaldi to the newest version + * Steps for removing Vivaldi from Ubuntu + + + +Non-FOSS alert! + +Vivaldi is not complete open source software. It’s UI is closed source. It’s been covered here because Vivaldi team took effort in making its software available on Linux. + +### Installing Vivaldi on Ubuntu [GUI Method] + +The good thing is that Vivaldi provides pre-built binaries in DEB form for Ubuntu/Debian based distros and in RPM form for Fedora, Red Hat and SUSE. + +It is available for both 32 bit and 64-bit platforms, as well as [ARM devices like Raspberry Pi][4]. + +![Vivaldi provides installer for several types of Linux distributions][5] + +The installation process is really simple. You go to the Vivaldi web page and download the appropriate installer file and then double click on it to install it. That’s it. + +I’ll show the steps in detail for Ubuntu/Debian. You can use similar steps for other distributions. + +#### Step 1: Download Vivaldi + +Go to the Vivaldi’s download page and download the DEB file for Ubuntu. + +[Download Vivaldi][6] + +![Download DEB file for Ubuntu/Debian][7] + +#### Step 2: Install the downloaded DEB file + +Go to the Downloads folder where you have the deb file downloaded. [Installing deb file][8] is easy. Either just double-click on it or right click to open it with software center. + +![Right click on the downloaded deb file and open it with Software Install][9] + +It will open the software center application and here, you can see the option to install Vivaldi. Just hit the Install button. + +![Hit the Install button][10] + +You’ll be asked to enter your system’s account password. Enter that and you should have it installed in a few seconds. You’ll see that Install option changes to remove. This is an indication that Vivaldi is now installed. + +#### Step 3: Using Vivaldi + +Open the system menu by pressing the super (Windows) key and searching for Vivaldi. Click on the Vivaldi icon. + +![Search for Vivaldi in the system menu][11] + +You’ll see a screen like this on the first run. + +![Vivaldi running in Ubuntu][12] + +Now that you know the this method, let me quickly show how to install Vivaldi on Ubuntu and Debian from the terminal. + +### Method 2: Installing Vivaldi on Ubuntu and Debian from the command line + +Open a terminal and make sure that you have wget installed for [downloading files in the command line.][13] + +``` +sudo apt install wget +``` + +Next, get the public key of the Vivaldi repository and add it to your system so that your system trusts the packages coming from it. If interested, read [this article about adding external repository in Ubuntu][14]. + +``` +wget -qO- https://repo.vivaldi.com/archive/linux_signing_key.pub | sudo apt-key add - +``` + +Once the key has been added, add Vivaldi repository as well: + +``` +sudo add-apt-repository 'deb https://repo.vivaldi.com/archive/deb/ stable main' +``` + +Now you are almost set. Update the package cache and install it. + +``` +sudo apt update && sudo apt install vivaldi-stable +``` + +And that’s it. Search for it in the menu and start it from there. + +### Updating Vivaldi on Ubuntu + +Both GUI and command line methods add the Vivaldi repository to your system. This means that whenever there is a new Vivaldi release, you get it along with the system updates. + +![Vivaldi repo is added to the system][15] + +Basically, you update the Ubuntu system and it updates the Vivaldi browser if there is a new version available. + +![Vivaldi browser is updated with the system updates][16] + +### Removing Vivaldi from Ubuntu + +If you do not like Vivaldi or no longer want to use it, you can surely remove it. Now, to [uninstall applications from Ubuntu][17], you may use Software Center but it won’t find the external, third-party installed software. + +You’ll have to use the terminal now even though you used GUI method to install it. That’s really easy. Open a terminal and use the command below: + +``` +sudo apt remove vivaldi-stable +``` + +Sudo gives you [root access in Ubuntu][18]. You’ll have to enter your account’s password. While entering the password, nothing is seen on the screen. That’s normal. Enter the password blindly and it will be removed. + +I hope you find this tutorial helpful in installing and using Vivaldi on Linux. + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-vivaldi-ubuntu-linux/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://vivaldi.com/ +[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/tab-tiling.webp?resize=800%2C448&ssl=1 +[3]: https://news.itsfoss.com/vivaldi-replaces-firefox-manjaro/ +[4]: https://itsfoss.com/raspberry-pi-alternatives/ +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/downloading-vivaldi-linux.webp?resize=800%2C541&ssl=1 +[6]: https://vivaldi.com/download/ +[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/vivaldi-download-linux.webp?resize=800%2C438&ssl=1 +[8]: https://itsfoss.com/install-deb-files-ubuntu/ +[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/installing-vivaldi-ubuntu.webp?resize=800%2C466&ssl=1 +[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/install-vivaldi-ubuntu-software.png?resize=800%2C407&ssl=1 +[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/running-vivaldi-in-ubuntu.png?resize=703%2C229&ssl=1 +[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/Vivaldi-in-Ubuntu.webp?resize=800%2C450&ssl=1 +[13]: https://itsfoss.com/download-files-from-linux-terminal/ +[14]: https://itsfoss.com/adding-external-repositories-ubuntu/ +[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/10/Vivaldi-repo-ubuntu.png?resize=800%2C403&ssl=1 +[16]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/06/chrome-edge-update-ubuntu.png?resize=716%2C421&ssl=1 +[17]: https://itsfoss.com/uninstall-programs-ubuntu/ +[18]: https://itsfoss.com/root-user-ubuntu/ From 774efa5311bd59521b95e146c58d40f43619a825 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 8 Oct 2021 05:03:49 +0800 Subject: [PATCH 110/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211007=20?= =?UTF-8?q?Rotate=20and=20archive=20logs=20with=20the=20Linux=20logrotate?= =?UTF-8?q?=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md --- ...e logs with the Linux logrotate command.md | 228 ++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md diff --git a/sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md b/sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md new file mode 100644 index 0000000000..007e41cd22 --- /dev/null +++ b/sources/tech/20211007 Rotate and archive logs with the Linux logrotate command.md @@ -0,0 +1,228 @@ +[#]: subject: "Rotate and archive logs with the Linux logrotate command" +[#]: via: "https://opensource.com/article/21/10/linux-logrotate" +[#]: author: "Ayush Sharma https://opensource.com/users/ayushsharma" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Rotate and archive logs with the Linux logrotate command +====== +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. + +### Basics + +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 + +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: + + +``` +/var/log/syslog +{ +        rotate 7 +        daily +        missingok +        notifempty +        delaycompress +        compress +        postrotate +                reload rsyslog >/dev/null 2>&1 || true +        endscript +} + +/var/log/mail.info +/var/log/mail.warn +/var/log/mail.err +/var/log/mail.log +/var/log/daemon.log +/var/log/kern.log +/var/log/auth.log +/var/log/user.log +/var/log/lpr.log +/var/log/cron.log +/var/log/debug +/var/log/messages + +{ +        rotate 4 +        weekly +        missingok +        notifempty +        compress +        delaycompress +        sharedscripts +        postrotate +                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: + + * `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. + + + +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. + + +``` +/var/log/nginx/access.log +/var/log/nginx/error.log  { +        size 1 +        missingok +        notifempty +        create 544 www-data adm +        rotate 30 +        compress +        delaycompress +        dateext +        dateformat -%Y-%m-%d-%s +        sharedscripts +        extension .log +        postrotate +                service nginx reload +        endscript +} +``` + +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 +extension is now .log + +Handling 1 logs + +rotating pattern: /var/log/nginx/access.log +/var/log/nginx/error.log   1 bytes (30 rotations) +empty log files are not rotated, old logs are removed +considering log /var/log/nginx/access.log +  log needs rotating +considering log /var/log/nginx/error.log +  log does not need rotating +rotating log /var/log/nginx/access.log, log->rotateCount is 30 +Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s' +dateext suffix '-2021-08-27-1485508250' +glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' +glob finding logs to compress failed +glob finding old rotated logs failed +renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log +creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4 +running postrotate script +* Reloading nginx configuration nginx +``` + +And running it a second time: + + +``` +reading config file /tmp/logrotate +extension is now .log + +Handling 1 logs + +rotating pattern: /var/log/nginx/access.log +/var/log/nginx/error.log   1 bytes (30 rotations) +empty log files are not rotated, old logs are removed +considering log /var/log/nginx/access.log +  log needs rotating +considering log /var/log/nginx/error.log +  log does not need rotating +rotating log /var/log/nginx/access.log, log->rotateCount is 30 +Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s' +dateext suffix '-2021-08-27-1485508280' +glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' +compressing log with: /bin/gzip +renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log +creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4 +running postrotate script +* Reloading nginx configuration nginx +``` + +And running it a third time: + + +``` +reading config file /tmp/logrotate +extension is now .log + +Handling 1 logs + +rotating pattern: /var/log/nginx/access.log +/var/log/nginx/error.log   1 bytes (30 rotations) +empty log files are not rotated, old logs are removed +considering log /var/log/nginx/access.log +  log needs rotating +considering log /var/log/nginx/error.log +  log does not need rotating +rotating log /var/log/nginx/access.log, log->rotateCount is 30 +Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s' +dateext suffix '-2021-08-27-1485508316' +glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' +compressing log with: /bin/gzip +renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log +creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4 +running postrotate script +* Reloading nginx configuration nginx +``` + +The contents of the state file look like this: + + +``` +logrotate state -- version 2 +"/var/log/nginx/error.log" 2021-08-27-9:0:0 +"/var/log/nginx/access.log" 2021-08-27-9:11:56 +``` + +[**Download the Linux logrotate cheat sheet.**][2] + +* * * + +_This article was originally published on the [author's personal blog][3] and has been adapted with permission._ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/linux-logrotate + +作者:[Ayush Sharma][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ayushsharma +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/oliver-paaske-unsplash.jpg?itok=bv0sZSSB (Logs stacked up and to the right in front of a green tree forest) +[2]: https://opensource.com/downloads/logrotate-cheat-sheet +[3]: https://notes.ayushsharma.in/2017/01/fiddling-with-logrotate From 391d4f1ac8d38e79470071d6cdba454a7755b33b Mon Sep 17 00:00:00 2001 From: DarkSun Date: Fri, 8 Oct 2021 05:04:07 +0800 Subject: [PATCH 111/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211007=20?= =?UTF-8?q?3=20phases=20to=20start=20a=20DevSecOps=20transformation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211007 3 phases to start a DevSecOps transformation.md --- ...ses to start a DevSecOps transformation.md | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 sources/tech/20211007 3 phases to start a DevSecOps transformation.md diff --git a/sources/tech/20211007 3 phases to start a DevSecOps transformation.md b/sources/tech/20211007 3 phases to start a DevSecOps transformation.md new file mode 100644 index 0000000000..3c671d4a86 --- /dev/null +++ b/sources/tech/20211007 3 phases to start a DevSecOps transformation.md @@ -0,0 +1,115 @@ +[#]: subject: "3 phases to start a DevSecOps transformation" +[#]: via: "https://opensource.com/article/21/10/first-phases-devsecops-transformation" +[#]: author: "Will Kelly https://opensource.com/users/willkelly" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +3 phases to start a DevSecOps transformation +====== +Taking the right steps at the right time smooths the path toward full +adoption. +![Green graph of measurements][1] + +DevSecOps is another step in the DevOps journey for your organization. Breaking down your transformation into phases facilitates working directly with developers and other team members. A phased approach also allows you to get feedback from those affected by the change and iterate as necessary. + +Here are the first three phases of a DevSecOps transformation: + +### Phase 1: analysis, education, and training + +In phase 1, you do the preliminary work necessary to make DevSecOps the next step in your DevOps journey. + +This phase is even more critical for your teams if you're moving from a waterfall software development lifecycle (SDLC) model. Making that leap may require you to put more time and effort into DevOps training to bridge any knowledge gaps between your current processes and DevSecOps. + +#### Analyze your development process maturity + +Whether DevSecOps is just the next step in your DevSecOps journey or you're making your initial foray into DevSecOps straight from a waterfall SDLC, analyzing the [maturity of your software development process][2] is a critical step. An effective analysis includes: + + * Documenting the current state of any processes + * Gathering any reporting data about your current development processes + * Identifying what's working and not working in your development processes by interviewing key developers + + + +#### Define DevSecOps for your organization + +DevOps and now DevSecOps can mean many things to people. Software vendor marketing and the open source software (OSS) community each put their spin on the definition of DevSecOps. Spare your teams from any misunderstandings and document your definition of DevSecOps. A clear definition includes: + + * What DevSecOps means to your organization + * The expected outcomes after moving to DevSecOps + * The tools and processes your organization is putting into place to ensure employee success + + + +Writing a definition is not merely creating a project charter for your DevOps to DevSecOps transformation; it identifies your true north. + +#### Foster a DevSecOps culture + +You can't _buy_ DevSecOps. Your managers and key technology team members need to work together to foster DevSecOps cultural philosophies to set a foundation for your DevOps to DevSecOps transformation. + +Here are some vital elements of DevSecOps culture that are important to foster during and after your transformation: + +##### Continuous feedback + +Remote DevSecOps teams have their advantages and disadvantages with continuous feedback. The manager's role is not simply to deliver feedback on the DevSecOps team's performance. Instead, the purpose of feedback is to enable teams to collaborate more effectively. [Open source chat tools][3] provide the instant communication necessary for DevSecOps teams to collaborate in real time. + +##### Container-based architectures + +DevSecOps sets the stage for moving to container-based architectures that can be another cultural change for DevOps teams. A proper and robust implementation of containers changes developer and operations cultures because it changes how architects design solutions, programmers create code, and operations teams maintain production applications. + +##### Team autonomy + +DevSecOps is no place for micromanagers at any level of your organization. A standard part of DevSecOps culture is enabling your teams to choose their tools and create processes based on their work. DevSecOps also promotes distributed decision making that supports greater agility and innovation. + +##### DevSecOps training + +Providing security training to your developers is another step towards making security part of everyone's job. Training could take the form of in-house developer training in casual formats such as lunch-and-learns, or it could include more formal training classes conducted by your organization's training department. + +Depending on your security ambitions (and budget), there is always the option to send your DevOps team members to get a DevSecOps vendor certification, such as the DevSecOps Foundation certification from the [DevOps Institute][4] or the Certified DevSecOps Professional (CDP) from [Practical DevSecOps][5]. + +### Phase 2: integrate security into your DevOps lifecycle + +During phase 2 of your DevOps to DevSecOps transformation, you integrate security processes and tools into your DevOps life cycle. If your enterprise is already using DevOps toolchains, this phase integrates security tools into your existing DevOps toolchains. This phase is also the time to perform a security audit on your continuous integration and continuous delivery/deployment (CI/CD) toolchains to ensure security. + +Suppose your organization takes the fast track to DevSecOps from a waterfall SDLC or other legacy development process. In that case, security needs to become a requirement of your CI/CD toolchain build. + +### Phase 3: introduce automation into your DevOps lifecycle + +The automation phase includes analysis, outreach, and experimentation. Applying automation to everyday software development tasks such as quality assurance and security checks isn't an exact science. Expect a push and pull between your executives and development teams. Executives often want to automate as much as possible, even to the extreme. Developers and sysadmins are going to approach automation more cautiously. + +Automation is foundational to DevSecOps because it removes the prospect of human error from some everyday build tasks and security checks. If you're building and running cloud workloads, you need automation. + +How well the automation tools are implemented determines how effectively you can enforce security practices and facilitate security sign-offs. + +Here are some tips for introducing automation into your DevOps toolchain: + + * Dispel the notion in your management and stakeholders that you'll be able to automate every task along with your toolchain. Engage with your stakeholders to learn their automation priorities and take that feedback into an automation strategy for your DevOps teams. + * Engage with your development teams — not just the team leads and managers — about how automation can help them perform their jobs. Listen to their concerns with empathy and answer their questions with definitive answers. + * Create an automation roadmap that charts how you'll introduce automation into your toolchains. Start small and expand with automation across your toolchains. Seek a small project such as a patch or a feature update to test your implementation plan. + * Automate one build, quality assurance, or security check for one of your DevOps teams as a proof-of-concept project. Document your findings from this small project, especially the lessons learned and any other feedback from the DevOps team members working on the project. + * Communicate the successes, lessons learned, and, yes, even the mistakes made on the pilot project to your stakeholders and internal DevOps community. + + + +You can use your existing DevOps center of excellence or DevSecOps center of excellence as an opportunity to gather input from employees from across your organization about how automation affects their work. Otherwise, look for formal and informal channels in your development and operations organizations to gain the input. For example, informal lunch and learns, group chat channels, or team meetings can be ideal for gathering input depending on your corporate culture. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/first-phases-devsecops-transformation + +作者:[Will Kelly][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/willkelly +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/metrics_lead-steps-measure.png?itok=DG7rFZPk (Green graph of measurements) +[2]: https://opensource.com/article/21/10/devsecops-maturity-model +[3]: https://opensource.com/article/20/4/open-source-chat +[4]: https://www.devopsinstitute.com/ +[5]: http://practical-devsecops.com/ From b98a107bdf0416544fca9ae4306f533334d28f36 Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 8 Oct 2021 08:51:08 +0800 Subject: [PATCH 112/143] translated --- ... your Linux distribution-s repositories.md | 123 ------------------ ... your Linux distribution-s repositories.md | 122 +++++++++++++++++ 2 files changed, 122 insertions(+), 123 deletions(-) delete mode 100644 sources/tech/20210927 Install Java from your Linux distribution-s repositories.md create mode 100644 translated/tech/20210927 Install Java from your Linux distribution-s repositories.md diff --git a/sources/tech/20210927 Install Java from your Linux distribution-s repositories.md b/sources/tech/20210927 Install Java from your Linux distribution-s repositories.md deleted file mode 100644 index 2a763b96f2..0000000000 --- a/sources/tech/20210927 Install Java from your Linux distribution-s repositories.md +++ /dev/null @@ -1,123 +0,0 @@ -[#]: subject: "Install Java from your Linux distribution's repositories" -[#]: via: "https://opensource.com/article/21/9/install-java-linux-repositories" -[#]: author: "Chris Hermansen https://opensource.com/users/clhermansen" -[#]: collector: "lujun9972" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Install Java from your Linux distribution's repositories -====== -Regardless of which distribution and package manager you prefer, it is -easy to get Java on your Linux system. -![Coffee beans and a cup of coffee][1] - -There are a number of different ways to install Java on your Linux desktop. An obvious route is to use the packages provided in your Linux distribution. Note that this doesn’t work for everyone; for example, some users may need a very specific version of Java. - -Before you can start, you must determine “which Java” you need. Do you just need to run some `.class` files or a `.jar` file? Or are you writing some code that you need to compile? - -In my case, most of the Java I run is Java that I have (at least partly) written myself, so it always makes sense to install the full Java Development Kit, or JDK, which comes with a Java compiler, libraries, and some really useful utilities. And of course, hereabouts, we give preference to the open source JDK, called [OpenJDK][2]. - -Since I primarily work on the Ubuntu Linux distribution, my package manager is `apt`. I can use `apt` to find out which OpenJDK packages are available: - - -``` -`apt list OpenJDK\*` -``` - -The output of this command looks like: - - -``` -Listing... Done -openjdk-11-dbg/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 -openjdk-11-dbg/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 -openjdk-11-demo/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 -openjdk-11-demo/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 -openjdk-11-doc/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 11.0.11+9-0ubuntu2 all -openjdk-11-jdk-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 -openjdk-11-jdk-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 -openjdk-11-jdk/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 -openjdk-11-jdk/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 -openjdk-11-jre-dcevm/hirsute 11.0.10+1-1 amd64 -openjdk-11-jre-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 -openjdk-11-jre-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 -openjdk-11-jre-zero/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 -openjdk-11-jre-zero/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 -openjdk-11-jre/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 -openjdk-11-jre/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 -openjdk-11-source/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 11.0.11+9-0ubuntu2 all -openjdk-15-dbg/hirsute 15.0.3+3-1 amd64 -openjdk-15-dbg/hirsute 15.0.3+3-1 i386 -openjdk-15-demo/hirsute 15.0.3+3-1 amd64 -... -openjdk-8-jre/hirsute-updates,hirsute-security 8u292-b10-0ubuntu1 i386 -openjdk-8-source/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 8u292-b10-0ubuntu1 all -``` - -I have elided quite a few lines above with `...`. - -It turns out that, even though I’m limiting myself to the OpenJDK, I still have plenty of options for: - - * The architecture (in my case, whether i386 or amd64). - * The version of Java (in my case, whether 8, 11, 15, 16, 17). - * The pure OpenJDK or the headless version. - * The Java Runtime Environment or JRE. - * Options for debugging, demo, source code, etc. - - - -Again, in my case, primarily, I’m just interested in the pure vanilla OpenJDK. - -Supposing then I want to install the Java 11 version of the plain vanilla OpenJDK for my amd64 architecture, I can type: - - -``` -`sudo apt install -a=amd64 openjdk-11-jdk` -``` - -A few minutes later, I’ll be able to compile, run, debug, and package my Java code. - -Note that it’s quite possible, and sometimes even desirable, to have multiple versions of Java installed simultaneously. In the case of Ubuntu, there is a useful utility called `update-java-alternatives` that [displays and configures which java environment][3] to use at any point in time. - -Those of you using a different Linux distro can, in general, take a similar approach. Several other distros (such as Debian and Mint) also use `apt`, though the available packages may differ. Other distros use different package managers. For example, [the Fedora documentation page for Installing Java][4] shows how to use the Fedora `dnf` package manager to handle the installation. First, to show the available version, type: - - -``` -`dnf search openjdk` -``` - -Next, to install the full development x86_64 architecture version, type: - - -``` -`sudo dnf install java-11-openjdk-devel.x86_64` -``` - -Similarly, Fedora provides the `alternatives` utility to [display and configure the Java environment][5]. - -For another example, the [wonderful Arch Linux wiki][6] shows the corresponding package is `jdk11-openjdk`**.** The wiki also explains many other important details related to using Java in Arch, such as using the `archlinux-java` utility to show what Java environments are installed or select a different default environment. Arch uses a package manager called `pacman`, which is also documented [here on the Arch Linux wiki][7]. - -Regardless of which distribution and package manager you prefer, it is easy to get Java on your Linux system. Consider version and function, of course, before installing. Also keep in mind that there are options for managing two or more Java versions on the same computer. Most of my examples used `apt`, but keep in mind the `dnf` options, too. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/9/install-java-linux-repositories - -作者:[Chris Hermansen][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/clhermansen -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/java-coffee-mug.jpg?itok=Bj6rQo8r (Coffee beans and a cup of coffee) -[2]: https://openjdk.java.net/ -[3]: http://manpages.ubuntu.com/manpages/hirsute/man8/update-java-alternatives.8.html -[4]: https://docs.fedoraproject.org/en-US/quick-docs/installing-java/ -[5]: https://tecadmin.net/install-java-on-fedora/ -[6]: https://wiki.archlinux.org/title/java#OpenJDK -[7]: https://wiki.archlinux.org/title/pacman#Querying_package_databases diff --git a/translated/tech/20210927 Install Java from your Linux distribution-s repositories.md b/translated/tech/20210927 Install Java from your Linux distribution-s repositories.md new file mode 100644 index 0000000000..c04dd813fd --- /dev/null +++ b/translated/tech/20210927 Install Java from your Linux distribution-s repositories.md @@ -0,0 +1,122 @@ +[#]: subject: "Install Java from your Linux distribution's repositories" +[#]: via: "https://opensource.com/article/21/9/install-java-linux-repositories" +[#]: author: "Chris Hermansen https://opensource.com/users/clhermansen" +[#]: collector: "lujun9972" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +从你的 Linux 发行版的仓库中安装 Java +====== +无论你喜欢哪个发行版和包管理器,都可以都很容易在您的 Linux 系统上安装 Java。 +![Coffee beans and a cup of coffee][1] + +有许多不同的方法可以把 Java 安装到你的 Linux 桌面上。一个明显的途径是使用你的 Linux 发行版中提供的软件包。请注意,这并不适合所有人。例如,有些用户可能需要一个非常具体的 Java 版本。 + +在你开始之前,你必须确定你需要“哪种 Java”。你是否只需要运行一些 `.class` 文件或 `.jar` 文件?还是你正在编写一些需要编译的代码? + +就我而言,我运行的大部分 Java 都是我自己(至少部分)编写的 Java,所以安装完整的 Java 开发工具包(或称 JDK)总是有意义的,它包含了 Java 编译器、库和一些非常有用的工具。当然,在这里,我们更倾向于使用开源的 JDK,称为 [OpenJDK][2]。 + +由于我主要在 Ubuntu Linux 发行版上工作,我的软件包管理器是 `apt`。我可以用 `apt` 来查找哪些 OpenJDK 包是可用的: + + +``` +`apt list OpenJDK\*` +``` + +这个命令的输出看起来像这样: + + +``` +Listing... Done +openjdk-11-dbg/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 +openjdk-11-dbg/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 +openjdk-11-demo/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 +openjdk-11-demo/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 +openjdk-11-doc/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 11.0.11+9-0ubuntu2 all +openjdk-11-jdk-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 +openjdk-11-jdk-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 +openjdk-11-jdk/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 +openjdk-11-jdk/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 +openjdk-11-jre-dcevm/hirsute 11.0.10+1-1 amd64 +openjdk-11-jre-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 +openjdk-11-jre-headless/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 +openjdk-11-jre-zero/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 +openjdk-11-jre-zero/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 +openjdk-11-jre/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 +openjdk-11-jre/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 i386 +openjdk-11-source/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 11.0.11+9-0ubuntu2 all +openjdk-15-dbg/hirsute 15.0.3+3-1 amd64 +openjdk-15-dbg/hirsute 15.0.3+3-1 i386 +openjdk-15-demo/hirsute 15.0.3+3-1 amd64 +... +openjdk-8-jre/hirsute-updates,hirsute-security 8u292-b10-0ubuntu1 i386 +openjdk-8-source/hirsute-updates,hirsute-updates,hirsute-security,hirsute-security 8u292-b10-0ubuntu1 all +``` + +我在上面用 `...` 省略了不少行。 + +事实证明,即使我把自己限制在 OpenJDK 中,我仍然有很多选择: + + * 架构(在我的例子中,是 i386 还是 amd64)。 + * Java 的版本(就我而言,是 8、11、15、16、17)。 + * 纯粹的 OpenJDK 或无头版本。 + * Java 运行时环境(或称 JRE)。 + * 调试、演示、源代码等选项。 + + + +同样,在我的案例中,我主要是对纯粹的 vanilla OpenJDK 感兴趣。 + +假设我想为我的 amd64 架构安装 Java 11 版本的纯 vanilla OpenJDK,我可以输入: + + +``` +`sudo apt install -a=amd64 openjdk-11-jdk` +``` + +几分钟后,我就可以编译、运行、调试和打包我的 Java 代码了。 + +注意,同时安装多个版本的 Java 是很有可能的,有时甚至是理想的。在 Ubuntu 中,有一个有用的工具,叫做 `update-java-alternatives`,它可以[显示和配置在任何时候使用哪个 Java 环境][3]。 + +那些使用不同 Linux 发行版的人,一般来说,可以采取类似的方法。其他几个发行版(如 Debian 和 Mint)也使用 `apt` ,尽管可用的软件包可能不同。其他发行版使用不同的软件包管理器。例如,[Fedora 安装 Java 的文档页面][4]显示了如何使用 Fedora `dnf` 包管理器来处理安装。首先,为了显示可用的版本,输入: + + +``` +`dnf search openjdk` +``` + +接下来,要安装完整的开发 x86_64 架构版本,请输入: + + +``` +`sudo dnf install java-11-openjdk-devel.x86_64` +``` + +同样地,Fedora 提供了 `alternatives` 工具来[显示和配置 Java 环境][5]。 + +再比如,[很棒的 Arch Linux wiki][6] 显示对应的软件包是 `jdk11-openjdk`。wiki 还解释了许多与在 Arch 中使用 Java 有关的其他重要细节,比如使用 `archlinux-java` 工具来显示安装了哪些 Java 环境或选择一个不同的默认环境。Arch 使用一个叫 `pacman` 的包管理器,它也有文档[在 Arch Linux wiki 上][7]。 + +不管你喜欢哪个发行版和软件包管理器,在你的 Linux 系统上获得 Java 是很容易的。当然,在安装之前,要考虑版本和功能。还要记住,在同一台电脑上有管理两个或多个 Java 版本的选项。我的大多数例子都使用了 `apt`,但也要记得 `dnf` 选项。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/install-java-linux-repositories + +作者:[Chris Hermansen][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/clhermansen +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/java-coffee-mug.jpg?itok=Bj6rQo8r (Coffee beans and a cup of coffee) +[2]: https://openjdk.java.net/ +[3]: http://manpages.ubuntu.com/manpages/hirsute/man8/update-java-alternatives.8.html +[4]: https://docs.fedoraproject.org/en-US/quick-docs/installing-java/ +[5]: https://tecadmin.net/install-java-on-fedora/ +[6]: https://wiki.archlinux.org/title/java#OpenJDK +[7]: https://wiki.archlinux.org/title/pacman#Querying_package_databases From 72ac2032afe866d589bef697228365e746b301fc Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 8 Oct 2021 08:57:41 +0800 Subject: [PATCH 113/143] translated --- ...1001 -e- cloud is a deGoogled Alternative to Google Drive.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md b/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md index 5d83613107..496e8212b5 100644 --- a/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md +++ b/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md @@ -2,7 +2,7 @@ [#]: via: "https://news.itsfoss.com/e-cloud/" [#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From aac331c1748d1b1b6bd3cfa9e346ffbca35ba0ea Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 8 Oct 2021 13:12:30 +0800 Subject: [PATCH 114/143] PUB @wxy https://linux.cn/article-13860-1.html --- ...11002 Monitor your Java on Linux with jconsole.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename {translated/tech => published}/20211002 Monitor your Java on Linux with jconsole.md (87%) diff --git a/translated/tech/20211002 Monitor your Java on Linux with jconsole.md b/published/20211002 Monitor your Java on Linux with jconsole.md similarity index 87% rename from translated/tech/20211002 Monitor your Java on Linux with jconsole.md rename to published/20211002 Monitor your Java on Linux with jconsole.md index d0a888fd40..737b990907 100644 --- a/translated/tech/20211002 Monitor your Java on Linux with jconsole.md +++ b/published/20211002 Monitor your Java on Linux with jconsole.md @@ -4,15 +4,15 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13860-1.html" 用 jconsole 在 Linux 上监控你的 Java ====== > 如何使用 Java 开发工具包中的 Java 监控和管理控制台。 -![拼图拼成的电脑屏幕][1] +![](https://img.linux.net.cn/data/attachment/album/202110/08/131129bf3h3gv18388fl11.jpg) Java 开发工具包(JDK)提供了开发 Java 应用程序的二进制文件、工具和编译器。其中一个有用的工具是 `jconsole`。 @@ -26,7 +26,7 @@ Java 开发工具包(JDK)提供了开发 Java 应用程序的二进制文件   JAVA: /usr/lib/jvm/java-11-openjdk-11.0.11.0.9-5.fc34.x86_64/bin/java ``` -现在,在另一个终端,我输入 `jconsole`。 +现在,在另一个终端,输入 `jconsole`。 ``` $ jconsole @@ -46,7 +46,7 @@ $ jconsole ### 内存 -“内存Memory”标签显示 JVM 所使用的内存的各个方面的图表。分配给 JVM 的服务器系统内存的数量被称为“Heap”。这个屏幕还提供了关于堆的内部组件使用情况的详细信息,例如 Eden Space、Old Gen 和 Survivor Space。你也可以手动请求一个垃圾收集动作。 +“内存Memory”标签显示 JVM 所使用的内存的各个方面的图表。分配给 JVM 的服务器系统内存量被称为“Heap”。这个屏幕还提供了关于堆的内部组件使用情况的详细信息,例如 “伊甸园Eden Space”、“老年代Old Gen” 和 “幸存者区Survivor Space”。你也可以手动请求一个垃圾收集动作。 ![jconsole 内存标签][5] @@ -78,7 +78,7 @@ $ jconsole ### 总结 -Java 已经存在了很长时间,它将继续为全球数百万的系统提供动力。有很多开发环境和监控系统可以使用,但在基本工具包中包含像 `jconsole` 这样的工具会非常有价值。 +Java 已经存在了很长时间,它将继续为全球数百万的系统提供动力。有很多开发环境和监控系统可以使用,但像 `jconsole` 这样的包含在基本工具包中的工具非常有价值。 -------------------------------------------------------------------------------- From d005f8de3ba8610761f8bf823c519ebfe1150f5f Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 8 Oct 2021 14:15:58 +0800 Subject: [PATCH 115/143] APL --- .../20210809 NMState- A declarative networking config tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210809 NMState- A declarative networking config tool.md b/sources/tech/20210809 NMState- A declarative networking config tool.md index 21e95b6ea9..dd4caa0dff 100644 --- a/sources/tech/20210809 NMState- A declarative networking config tool.md +++ b/sources/tech/20210809 NMState- A declarative networking config tool.md @@ -2,7 +2,7 @@ [#]: via: "https://fedoramagazine.org/nmstate-a-declarative-networking-config-tool/" [#]: author: "Maurizio Garcia https://fedoramagazine.org/author/malgnuz/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 76f44fb915ac250033705ffe95ab49c31e369055 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 8 Oct 2021 14:55:24 +0800 Subject: [PATCH 116/143] TSL&PRF --- ...e- A declarative networking config tool.md | 108 ++++++++---------- 1 file changed, 49 insertions(+), 59 deletions(-) rename {sources => translated}/tech/20210809 NMState- A declarative networking config tool.md (69%) diff --git a/sources/tech/20210809 NMState- A declarative networking config tool.md b/translated/tech/20210809 NMState- A declarative networking config tool.md similarity index 69% rename from sources/tech/20210809 NMState- A declarative networking config tool.md rename to translated/tech/20210809 NMState- A declarative networking config tool.md index dd4caa0dff..1ea9af52c3 100644 --- a/sources/tech/20210809 NMState- A declarative networking config tool.md +++ b/translated/tech/20210809 NMState- A declarative networking config tool.md @@ -3,42 +3,40 @@ [#]: author: "Maurizio Garcia https://fedoramagazine.org/author/malgnuz/" [#]: collector: "lujun9972" [#]: translator: "wxy" -[#]: reviewer: " " +[#]: reviewer: "wxy" [#]: publisher: " " [#]: url: " " -NMState: A declarative networking config tool +NMState:一个声明式网络配置工具 ====== ![][1] -Comic excerpted from photo by [Bee Felten-Leidel][2] on [Unsplash][3] +这篇文章描述并演示了 NMState,这是一个使用声明式方法配置主机的网络管理器。这意味着你可以通过 API 定义所需的配置状态,而工具则通过提供者provider来应用配置。 -This article describes and demonstrates NMState, a network manager that uses a declarative approach to configure hosts. This means you define the desired configuration state through an API and the tool applies the configuration through a provider. +### 配置方法:命令式与声明式 -### Configuration approaches: imperative vs declarative +网络管理有时候是一项非常复杂的任务,这取决于环境的规模和多样性。在 IT 的早期,网络管理依赖于网络管理员在网络设备上手动执行命令。如今,基础设施即代码Infrastructure as Code(IaC)允许以不同的方式将这些任务自动化。z这基本上有两种方法:命令式或声明式。 -Networking management can be a very complex task depending on the size and diversity of the environment. In the early days of IT, networking management relied on manual procedures performed by network administrators over networking devices. Nowadays, Infrastructure as Code (IaC) allows automation of those tasks in a different way. There are, essentially two approaches: imperative or declarative. +在命令式方法中,你会定义“如何”达到所需的配置状态。而在声明式范式里则定义了“什么”是所需的配置状态,所以它不确定哪些步骤是必需的,也不确定它们必须以何种顺序执行。这种方法目前正在聚集更多的人员参与,你可以在目前使用的大多数管理和编排工具上找到它。 -In an imperative approach you define “how” you will arrive at a desired configuration state. The declarative paradigm defines “what” is the desired configuration state, so it does not shape which steps are required nor in which order they must be performed. This approach is currently gathering more adepts and you can find it on most of the management and orchestration tools currently used. +### NMState:一个声明式的工具 -### NMState: a declarative tool +NMState 是一个网络管理器,允许你按照声明式方法配置主机。这意味着你通过一个北向的声明式 API 定义所需的配置状态,这个工具通过南向的提供者provider应用配置。 -NMState is a network manager that allows you to configure hosts following a declarative approach. It means you define the desired configuration state through a northbound declarative API and this tool applies the configuration through a southbound provider. +目前 NMState 支持的唯一的提供者是 NetworkManager,它是为 Fedora Linux 提供网络功能的主要服务。不过,NMState 的开发计划中将逐渐增加其他提供者。 -Currently the only provider supported by NMState is NetworkManager, which is the main service to address networking capabilities on Fedora Linux. However, the development life cycle of NMState will add other providers gradually. +关于 NMState 的进一步信息,请访问其项目 [站点][4] 或 GitHub [仓库][5]。 -For further information regarding NMState please visit either its project [site][4] or github [repository][5]. +### 安装 -### Installation - -NMState is available on Fedora Linux 29+ and requires NetworkManager 1.26 or later installed and running on the system. The following shows the installation on Fedora Linux 34: +NMState 在 Fedora Linux 29+ 上可用,需要在系统上安装并运行 NetworkManager 1.26 或更高版本。下面是在 Fedora Linux 34 上的安装情况: ``` $ sudo dnf -y install nmstate -… -output omitted -… +... +输出节略 +... Installed: NetworkManager-config-server-1:1.30.4-1.fc34.noarch gobject-introspection-1.68.0-3.fc34.x86_64 nispor-1.0.1-2.fc34.x86_64 nmstate-1.0.3-2.fc34.noarch python3-gobject-base-3.40.1-1.fc34.x86_64 python3-libnmstate-1.0.3-2.fc34.noarch python3-nispor-1.0.1-2.fc34.noarch python3-varlink-30.3.1-2.fc34.noarch @@ -46,18 +44,18 @@ Installed: Complete! ``` -At this point you can use _nmstatectl_ as a command line tool for NMState. Please refer to either _nmstatectl –help_ or _man nmstatectl_ for further information about this tool. +这样,你可以使用 `nmstatectl` 作为 NMState 的命令行工具。请参考 `nmstatectl -help` 或 `man nmstatectl` 以了解关于这个工具的进一步信息。 -### Using NMstate +### 使用 NMstate -Start by checking the NMState version installed in the system: +首先要检查系统中安装的 NMState 版本: ``` $ nmstatectl version 1.0.3 ``` -Check the current configuration of a networking interface, e.g. the _eth0_ configuration: +检查一个网络接口的当前配置,例如 `eth0` 的配置: ``` $ nmstatectl show eth0 @@ -124,29 +122,23 @@ interfaces: mtu: 1500 ``` - As you can see above the networking configuration shows four main sections: +正如你在上面看到的,这个网络配置显示了四个主要部分: - * **dns-resolver**: this section has the nameserver configuration for this interface. - * **route-rules**: it states the routing rules.  - * **routes**: it includes both dynamic and static routes. - * **Interfaces**: this section describes both ipv4 and ipv6 settings. + * `dns-resolver`:这部分是这个接口的名字服务器配置。 + * `route-rules`:它说明了路由规则。  + * `routes`:它包括动态和静态路由。 + * `interfaces`:这部分描述了 ipv4 和 ipv6 设置。 +### 修改配置 +你可以在两种模式下修改所需的配置状态: -### Modify the configuration + * 交互式:通过 `nmstatectl edit` 编辑接口配置。这个命令调用环境变量 `EDITOR` 定义的文本编辑器,因此可以用 yaml 格式编辑网络状态。完成编辑后,NMState 将应用新的网络配置,除非有语法错误。 + * 基于文件的:使用 `nmstatectl apply` 应用接口配置,它从先前创建的 yaml 或 json 文件中导入一个所需的配置状态。 -You can modify the desired configuration state in two modes:  +下面几节告诉你如何使用 NMState 来改变网络配置。这些改变可能会对系统造成破坏,所以建议在测试系统或客户虚拟机上执行这些任务,直到你对 NMState 有更好的理解。 - * **Interactive**: editing the interface configuration through _nmstatectl edit_. This command invokes the text editor defined by the environment variable EDITOR so the network state can be edited in yaml format. After finishing the edition NMState will apply the new network configuration unless there are syntax errors. - - - * **File-based**: applying the interface configuration using _nmstatectl apply_ which imports a desired configuration state from a yaml or json file earlier created. - - - -The following sections show you how to change the networking configuration using NMState. These changes can be disruptive to the system so the recommendation is to perform these tasks on a test system or guest VM till you get a better understanding of NMState. - -The test system in use herehas two Ethernet interfaces: _eth0_ and _eth1_: +这里使用的测试系统有两个以太网接口,`eth0` 和 `eth1`: ``` $ ip -br -4 a @@ -155,11 +147,9 @@ eth0 UP 192.168.122.238/24 eth1 UP 192.168.122.108/24 ``` -#### Example of interactive configuration mode: +#### 互动配置模式的例子 -``` -Change the MTU of eth0 interface to 9000 bytes using the nmstatectl edit command as follows (all changes are in bold): -``` +使用 `nmstatectl edit` 命令将 `eth0` 接口的 MTU 改为 9000 字节,如下所示: ``` $ sudo nmstatectl edit eth0 @@ -222,7 +212,7 @@ interfaces: mtu: 9000 ``` -After saving and exiting the edito, NMState applies the new network desired state: +在保存并退出编辑器后,NMState 应用新的网络期望状态: ``` 2021-06-29 11:29:05,726 root DEBUG Nmstate version: 1.0.3 @@ -232,7 +222,7 @@ After saving and exiting the edito, NMState applies the new network desired stat 2021-06-29 11:29:05,792 root DEBUG Async action: Update profile uuid:2bdee700-f62b-365a-bd1d-69d9c31a9f0c iface:eth0 type:ethernet finished ``` -Now, use both the _ip_ command and also the _eth0_ configuration file to check that the _MTU_ of _eth0_ is 9000 bytes. +现在,使用 `ip` 命令和 `eth0` 的配置文件来检查 `eth0` 的 `MTU` 是不是 9000 字节。 ``` $ ip link show eth0 @@ -273,11 +263,11 @@ ra-timeout=2147483647 [proxy] ``` -#### Example of file-based configuration mode: +#### 基于文件的配置模式的例子 -Let’s use the file-based approach to set a new config state. In this case disable the IPv6 configuration in _eth1_ interface. +让我们使用基于文件的方法来设置一个新的配置状态。这里我们禁用 `eth1` 接口的 IPv6 配置。 -First, create a yaml file to define the desired state of the _eth1_ interface. Use _nmstatectl show_ to save the current settings then _nmstatectl edit_ to disable IPv6. Again, all changes are in bold and deletions are shown with strike-through: +首先,创建一个 yaml 文件来定义 `eth1` 接口的期望状态。使用 `nmstatectl show` 来保存当前设置,然后使用 `nmstatectl edit` 来禁用 IPv6。 ``` $ nmstatectl show eth1 > eth1.yaml @@ -341,7 +331,7 @@ interfaces: mtu: 1500 ``` -After saving the new configuration, use it to apply the new state: +保存新的配置后,用它来应用新的状态: ``` $ sudo nmstatectl apply eth1.yaml @@ -402,7 +392,7 @@ interfaces: mtu: 1500 ``` -You can check that the _eth1_ interface does not have any IPv6 configured: +你可以检查看到 `eth1` 接口没有配置任何 IPv6: ``` $ ip -br a @@ -440,11 +430,11 @@ method=disabled [proxy] ``` -#### Applying changes temporarily +#### 临时应用改变 -An interesting feature of NMState allows you to configure a desired networking state temporarily. In case you are satisfied with the configuration you can commit it afterwards. Otherwise it will rollback when the timeout expires (default is 60 sec). +NMState 的一个有趣的功能允许你临时配置一个期望的网络状态。如果你对这个配置感到满意,你可以事后提交。否则,当超时(默认为 60 秒)过后,它将回滚。 -Modify the _eth1_ configuration from the previous example so it has an IPv4 static address instead of getting it dynamically by DHCP. +修改前面例子中的 `eth1` 配置,使它有一个 IPv4 静态地址,而不是通过 DHCP 动态获得。 ``` $ vi eth1.yaml @@ -498,7 +488,7 @@ interfaces: mtu: 1500 ``` -Now, apply this config temporarily using the option _no-commit_ so it will be valid only for 30 seconds. This can be done adding the option _–timeout_. Meanwhile, we will run the _ip  -br a_ command three times to see how the IPv4 address configured in _eth1_ interface changes and then the configuration rolls back. +现在,使用选项 `no-commit` 临时应用这个配置,让它只在 30 秒内有效。这可以通过添加选项 `timeout` 来完成。同时,我们将运行 `ip -br a` 命令三次,看看配置在 `eth1` 接口的 IPv4 地址是如何变化的,然后配置就会回滚。 ``` $ ip -br a && sudo nmstatectl apply --no-commit --timeout 30 eth1.yaml && sleep 10 && ip -br a && sleep 25 && ip -br a @@ -561,13 +551,13 @@ eth0 UP 192.168.122.238/24 fe80::5054:ff:fe91:e44e/64 eth1 UP 192.168.122.108/24 ``` -As you can see from above, the _eth1_ IP address changed temporarily from 192.168.122.108 to 192.168.122.110 and then it returned to 192.168.122.108 after the timeout expired. +从上面可以看到,`eth1` 的 IP 地址从 `192.168.122.108` 暂时变成了 `192.168.122.110`,然后在超时结束后又回到了 `192.168.122.108`。 -### Conclusion +### 总结 -NMState is a declarative networking configuration tool that currently applies the desired networking configuration state in a host through the NetworkManager API. This state can be defined either interactively using a text editor or with a file-based approach creating a yaml or json file. +NMState 是一个声明式的网络配置工具,目前可以通过 NetworkManager API 在主机中应用所需的网络配置状态。这种状态既可以用文本编辑器交互式地定义,也可以用基于文件的方法创建一个 yaml 或 json 文件。 -This kind of tool provides Infrastructure as Code, it allows the automation of networking tasks and also reduces potential misconfigurations or unstable networking scenarios that could arise using legacy configuration methods. +这种工具提供了“基础设施即代码”,它可以自动化网络任务,也减少了使用传统配置方法可能出现的潜在错误配置或不稳定的网络情况。 -------------------------------------------------------------------------------- @@ -575,8 +565,8 @@ via: https://fedoramagazine.org/nmstate-a-declarative-networking-config-tool/ 作者:[Maurizio Garcia][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From b4999922d5aea7ac513d3d5ddb5bd9d44aa86530 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 8 Oct 2021 14:59:02 +0800 Subject: [PATCH 117/143] PUB @wxy https://linux.cn/article-13861-1.html --- ...0210809 NMState- A declarative networking config tool.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/translated/tech/20210809 NMState- A declarative networking config tool.md b/translated/tech/20210809 NMState- A declarative networking config tool.md index 1ea9af52c3..2f15c78d84 100644 --- a/translated/tech/20210809 NMState- A declarative networking config tool.md +++ b/translated/tech/20210809 NMState- A declarative networking config tool.md @@ -4,13 +4,13 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13861-1.html" NMState:一个声明式网络配置工具 ====== -![][1] +![](https://img.linux.net.cn/data/attachment/album/202110/08/145714mqcyh6sshchomyot.jpg) 这篇文章描述并演示了 NMState,这是一个使用声明式方法配置主机的网络管理器。这意味着你可以通过 API 定义所需的配置状态,而工具则通过提供者provider来应用配置。 From 1a071c5f877b30724c2d7dd93544491f8b2aff28 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sat, 9 Oct 2021 05:02:45 +0800 Subject: [PATCH 118/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211008=20?= =?UTF-8?q?3=20more=20phases=20of=20DevSecOps=20transformation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211008 3 more phases of DevSecOps transformation.md --- ...more phases of DevSecOps transformation.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 sources/tech/20211008 3 more phases of DevSecOps transformation.md diff --git a/sources/tech/20211008 3 more phases of DevSecOps transformation.md b/sources/tech/20211008 3 more phases of DevSecOps transformation.md new file mode 100644 index 0000000000..9f4d5eeb0e --- /dev/null +++ b/sources/tech/20211008 3 more phases of DevSecOps transformation.md @@ -0,0 +1,65 @@ +[#]: subject: "3 more phases of DevSecOps transformation" +[#]: via: "https://opensource.com/article/21/10/last-phases-devsecops-transformation" +[#]: author: "Will Kelly https://opensource.com/users/willkelly" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +3 more phases of DevSecOps transformation +====== +Ensure you reach your goals by continuing a step-by-step approach to +DevSecOps. +![Gold trophy on green background][1] + +Making a major operations transition must be a long-term and well-planned process. Because DevSecOps is an important step in the DevOps journey for your organization, you are more likely to find success if you introduce and implement your transformation in phases. + +In my [previous article][2], I explained the first three phases of making this change. This article presents three additional phases of DevSecOps transformation you must work through to achieve your goals. Finishing these phases requires that you foster team collaboration to carry your organization through security changes, going live with DevSecOps, and putting the tools in place for continuous learning and iteration of your DevSecOps toolchain and processes. + +### Phase 4: collaborate on security changes to your DevOps toolchains + +Some security changes on the move to DevSecOps may adversely affect operations and even security compliance. Changes to tools, processes, and even staffing sometimes change the way teams work. + +Your development, operations, and security teams must collaborate before deployment and at other touchpoints to set priorities. Security teams sometimes prioritize a security measure that adversely impacts operations. Likewise, your developers probably overlook some holes caused by system configurations that could compromise the security and compliance of your systems. + +Predeployment reviews provide a prime collaboration channel. When you conduct predeployment reviews during your DevOps to DevSecOps transformation, you give your developers and security staff a forum through which they can educate each other on their team's priorities and informed tradeoffs. + +### Phase 5: execute on DevSecOps + +As your organization crosses into phase 5 of your DevOps to DevSecOps transformation, it's time to execute your plans with one or more teams. Don't move to Phase 5 as an entire organization. Instead, look for natural breaks in your project teams' schedules for them to move to a DevSecOps model. For example, say that one of your DevOps teams has just launched a new product release. After catching their collective breath, they're working on bug fixes that come in from the field. Don't interrupt their flow with a full-on move to DevSecOps during an in-progress project. + +Look for new project opportunities to begin executing on DevSecOps. Such an approach offers the following advantages: + + * Providing teams a clean slate to learn a new process from the beginning, not midstream during a project + * Enabling you to include process and tools training as part of the project kickoff process + * Affording the chance to bring your developers, operations, and security teams together to discuss mutual expectations for the project + * Giving teams a chance to learn to work together better during the new workflows that DevSecOps brings to an organization + + + +### Phase 6: pursue continuous learning and iteration + +There is no formal end to an adequately executed shift from DevOps to DevSecOps. After your organization moves to DevSecOps and adopts the principles and foundations, the learning and iteration need to continue past the transformation. + +As there is no single accepted DevSecOps definition for the industry, you can expect to learn a lot as your DevSecOps journey gains momentum and your processes mature. You also need to prepare your organization for changes in DevOps and DevSecOps philosophies that might benefit your internal efforts. + +### Final thoughts + +The phases I outline in this series are general guidelines for a path toward achieving your DevSecOps transformation. The emphasis on collaboration is deliberate because your enterprise's particular circumstances could require that you modify these phases to achieve your transformation. Even if you need to make substantial changes to these phases, having a graduated implementation roadmap will get you much closer to success. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/last-phases-devsecops-transformation + +作者:[Will Kelly][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/willkelly +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/trophy_celebrate.png?itok=jGnRHBq2 (Gold trophy on green background) +[2]: https://opensource.com/article/21/10/first-phases-devsecops-transformation From 2c0aa6266a9841144283727191751b2fa46dd7b4 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sat, 9 Oct 2021 05:03:01 +0800 Subject: [PATCH 119/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211008=20?= =?UTF-8?q?3=20new=20features=20of=20the=20latest=20OpenPGP.js=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211008 3 new features of the latest OpenPGP.js version.md --- ...atures of the latest OpenPGP.js version.md | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 sources/tech/20211008 3 new features of the latest OpenPGP.js version.md diff --git a/sources/tech/20211008 3 new features of the latest OpenPGP.js version.md b/sources/tech/20211008 3 new features of the latest OpenPGP.js version.md new file mode 100644 index 0000000000..c966e80965 --- /dev/null +++ b/sources/tech/20211008 3 new features of the latest OpenPGP.js version.md @@ -0,0 +1,71 @@ +[#]: subject: "3 new features of the latest OpenPGP.js version" +[#]: via: "https://opensource.com/article/21/10/openpgpjs" +[#]: author: "Daniel Huigens https://opensource.com/users/twiss" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +3 new features of the latest OpenPGP.js version +====== +OpenPGP.js is a cryptography library that implements the OpenPGP +standard, most commonly used for email encryption. +![email or newsletters via inbox and browser][1] + +[OpenPGP.js][2] is a cryptography library that implements the [OpenPGP standard][3], most commonly used for email encryption. ProtonMail, Mailvelope, and FlowCrypt all use OpenPGP.js, to name a few. That means the OpenPGP.js library encrypts millions of users' messages. + +The OpenPGP standard, first published in the 1990s, like almost anything, requires maintenance and updating for both security and usability. A "crypto refresh" of the standard [is in the works][4], which adds modern encryption algorithms and deprecates outdated ones. To improve usability, various email applications now allow users to seamlessly encrypt their communication—without managing their keys or those of their contacts. + +First released in 2014, OpenPGP.js began based on an early prototype called GPG4Browsers, which is based on several scripts by Herbert Hanewinkel (among other contributors). The second version of OpenPGP.js, released in 2016, was completely reworked to use Uint8Arrays instead of strings (which significantly increased its performance) and modern ES6 modules rather than CommonJS modules internally. Versions 3 and 4, both released in 2018, added support for Elliptic-curve cryptography (ECC) and streaming, respectively. + +My team and I continue working on OpenPGP.js to ensure its evolution as an easy-to-use library for strong encryption. + +### 1\. Elliptic-curve cryptography by default + +In OpenPGP.js version 4, RSA was used when generating new keys by default. Although ECC is faster and more secure, Curve25519 had not been standardized in the OpenPGP specification yet. The crypto refresh draft does include Curve25519, and it is expected to be included "as is" in the next version of the OpenPGP specification, so OpenPGP.js version 5 now generates keys using ECC by default. + +### 2\. Import only the modules you need + +Similarly, while OpenPGP.js used ES6 modules internally for years, version 4 still didn't publish a proper ES6 module. Instead, it published only a Univeral Module Definition (UMD) module that could run both in the browser and on Node.js. In version 5, this changes by publishing separate modules for the browser and Node.js (both ES6 and non-ES6), making it easier for library users to import OpenPGP.js on all platforms and (when using the ES6 module) only import the parts they need. This is enabled in large part by switching the build system to [rollup][5]. + +### 3\. Reject weak cryptography + +There are also many other security improvements. For example, 1024-bit RSA keys, ElGamal, and DSA keys are considered insecure and are rejected by default. Additionally, where version 4 already defaulted to AES-encryption, version 5 now refuses to encrypt using weaker algorithms entirely by default, even if the public key claims to only support a weaker algorithm. It instead assumes that all OpenPGP implementations support AES (which has been the case for a very long time). + +### What's next for OpenPGP.js + +Looking ahead, there are some security improvements to make. Key fingerprints, used to identify public keys, still use SHA-1, though a fix for this is planned in the crypto refresh. In the meantime, it is recommended to use different means to ascertain the authenticity of any public key used for encryption, such as by fetching the entire key directly from the recipient's domain using the proposed [Web Key Directory (WKD)][6] standard—already implemented by various [email providers][7]. WKD support was built into OpenPGP.js version 4 but is a separate module in version 5 to keep the main library lean. + +Similarly, when encrypting messages or files with a password rather than a public key (uncommon when using OpenPGP for email encryption, but more so when used for encrypted backups, for example), the password is converted to a symmetric key using a relatively weak key derivation function (KDF). It is thus advisable for applications to pass the user's password through a strong KDF, such as [Argon2][8] or [scrypt][9], before passing it to OpenPGP.js. Hopefully, the crypto refresh will include one of these algorithms to implement in a future version of OpenPGP.js. + +### How to use OpenPGP.js version 5 + +For now, though, OpenPGP.js version 5 has been [published][10] to the npm package registry. If you like, feel free to try it out! Feedback is welcome in the [discussions tab][11] on GitHub. Please note, however, that while OpenPGP.js is a general-purpose encryption library, its primary use case is in situations where compatibility with the OpenPGP specification is required (for example, when sending or receiving PGP-encrypted email). For other use cases, a different library may be a more appropriate or performant choice. In general, of course, be careful when rolling any crypto. + +Thanks for reading, and here's to securing the future of email! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/10/openpgpjs + +作者:[Daniel Huigens][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/twiss +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/newsletter_email_mail_web_browser.jpg?itok=Lo91H9UH (email or newsletters via inbox and browser) +[2]: https://github.com/openpgpjs/openpgpjs +[3]: https://tools.ietf.org/html/rfc4880 +[4]: https://datatracker.ietf.org/doc/charter-ietf-openpgp/ +[5]: https://rollupjs.org/ +[6]: https://datatracker.ietf.org/doc/html/draft-koch-openpgp-webkey-service +[7]: https://wiki.gnupg.org/WKD#Mail_Service_Providers_offering_WKD +[8]: https://en.wikipedia.org/wiki/Argon2 +[9]: https://en.wikipedia.org/wiki/Scrypt +[10]: https://www.npmjs.com/package/openpgp +[11]: https://github.com/openpgpjs/openpgpjs/discussions From 299318418436c7f1fca030393f1a03ac5e91ec53 Mon Sep 17 00:00:00 2001 From: geekpi Date: Sat, 9 Oct 2021 08:30:33 +0800 Subject: [PATCH 120/143] translated --- ...n Open-Source Translation App for Linux.md | 102 ------------------ ...n Open-Source Translation App for Linux.md | 102 ++++++++++++++++++ 2 files changed, 102 insertions(+), 102 deletions(-) delete mode 100644 sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md create mode 100644 translated/tech/20210929 Dialect- An Open-Source Translation App for Linux.md diff --git a/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md b/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md deleted file mode 100644 index f2d8192562..0000000000 --- a/sources/tech/20210929 Dialect- An Open-Source Translation App for Linux.md +++ /dev/null @@ -1,102 +0,0 @@ -[#]: subject: "Dialect: An Open-Source Translation App for Linux" -[#]: via: "https://itsfoss.com/dialect/" -[#]: author: "Ankush Das https://itsfoss.com/author/ankush/" -[#]: collector: "lujun9972" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Dialect: An Open-Source Translation App for Linux -====== - -_**Brief:** Dialect is a straightforward app that lets you translate between languages using web services. To explore more, let us take a closer look._ - -While you can launch the web browser and directly use any translation service to get the job done, a desktop app can sometimes come in handy. - -Dialect is a simple translation app that utilizes web services to translate while giving you some extra abilities. - -### Open-Source Translation App with Google Translate & LibreTranslate - -![][1] - -Dialect is primarily an app tailored for GNOME desktops, but it should work fine with other desktop environments. - -It lets you quickly translate languages along with a few extra options. - -At its core, it lets you choose between Google Translate or LibreTranslate as the translation service. - -Even though LibreTranslate cannot come close to Google Translate’s accuracy, featuring it as an option to switch is an excellent addition. At least, for some basic usage, if a user does not want to utilize Google’s services, you have an alternative ready on your desktop. - -### Features of Dialect - -![][2] - -Along with the ability to switch translation services, you get a few more tweaks: - - * Pronunciation - * Text to Speech functionality (Google) - * Dark mode - * Translation shortcut - * Live Translation - * Clipboard buttons to quickly copy/paste - * Translation history (undo/redo) - - - -As you can notice in the screenshot, the live translation feature may get your IP addressed banned from using the service because of API abuse. - -![][3] - -I tried using LibreTranslate (as shown in the image above) and Google Translate with the live translation feature enabled, and it worked fine. - -Maybe if you rely on translations quite often, you may want to avoid the feature. But, for my quick usage, the services didn’t ban by IP address for quite a few test runs. - -It is important to note that you can specify a custom LibreTranslate instance if you want. By default, it uses “translate.astian.org” as the instance. - -You may not find a separate translation history section, but the arrow buttons in the top-left corner of the window will let you see your previous translations and the translation settings as well. - -So, it works as a redo/undo feature as well. - -### Installing Dialect in Linux - -Dialect is available as a [Flatpak][4]. So, you should be able to install it on any Linux distro of your choice. If you are new to this, you might want to check out our [Flatpak guide][5] for help. - -First, add Flathub repo: - -``` -flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo -``` - -And then install the application: - -``` -flatpak install flathub com.github.gi_lom.dialect -``` - -Once installed, look for it in the system menu and start it from there. - -You can also explore its [GitHub page][6] for more information. - -[Dialect][7] - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/dialect/ - -作者:[Ankush Das][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/ankush/ -[b]: https://github.com/lujun9972 -[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-screenshot.png?resize=800%2C331&ssl=1 -[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-app-options.png?resize=800%2C470&ssl=1 -[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-libretranslate.png?resize=800%2C326&ssl=1 -[4]: https://itsfoss.com/what-is-flatpak/ -[5]: https://itsfoss.com/flatpak-guide/ -[6]: https://github.com/dialect-app/dialect/ -[7]: https://flathub.org/apps/details/com.github.gi_lom.dialect diff --git a/translated/tech/20210929 Dialect- An Open-Source Translation App for Linux.md b/translated/tech/20210929 Dialect- An Open-Source Translation App for Linux.md new file mode 100644 index 0000000000..0c4176f011 --- /dev/null +++ b/translated/tech/20210929 Dialect- An Open-Source Translation App for Linux.md @@ -0,0 +1,102 @@ +[#]: subject: "Dialect: An Open-Source Translation App for Linux" +[#]: via: "https://itsfoss.com/dialect/" +[#]: author: "Ankush Das https://itsfoss.com/author/ankush/" +[#]: collector: "lujun9972" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Dialect:Linux 下的开源翻译应用 +====== + +_**简介:**Dialect 是一个简单明了的应用,可以让你使用网络服务进行语言间的翻译。为了探索更多,让我们仔细看看。_ + +虽然你可以启动网络浏览器并直接使用任何翻译服务来完成工作,但桌面应用有时会派上用场。 + +Dialect 是一个简单的翻译应用,利用网络服务进行翻译,同时给你一些额外的能力。 + +### 使用谷歌翻译和 LibreTranslate 的开源翻译应用 + +![][1] + +Dialect 主要是一个为 GNOME 桌面定制的应用,但它在其他桌面环境下也应该能正常工作。 + +它可以让你快速翻译语言,同时还有一些额外的选项。 + +在其核心部分,它让你在谷歌翻译或 LibreTranslate 之间选择翻译服务。 + +尽管 LibreTranslate 不能接近谷歌翻译的准确性,但把它作为一个选项来切换是一个很好的补充。至少,对于一些基本的用法,如果用户不想利用谷歌的服务,你的桌面上就有一个备选方案。 + +### Dialect 的特点 + +![][2] + +除了切换翻译服务外,你还能得到: + + * 发音 + * 文本到语音功能(谷歌) + * 黑暗模式 + * 翻译快捷方式 + * 实时翻译 + * 剪贴板按钮可快速复制/粘贴 + * 翻译历史(撤销/重做)。 + + + +正如你在截图中所注意到的,实时翻译功能可能会因为滥用 API 而使你的 IP 地址被禁止使用该服务。 + +![][3] + +我试着使用 LibreTranslate(如上图所示)和谷歌翻译,并启用实时翻译功能,它工作得很好。 + +也许,如果你经常依赖翻译,你可能想避免这个功能。但是,对于我的临时使用,在相当多的测试中,这些服务并没有按 IP 地址禁止。 + +重要的是要注意,如果你想,你可以指定一个自定义的 LibreTranslate 实例。默认情况下,它使用 “translate.astian.org” 作为实例。 + +你可能找不到一个单独的翻译历史部分,但窗口左上角的箭头按钮会让你看到你以前的翻译和翻译设置。 + +所以,它也可以作为一个重做/撤销的功能。 + +### 在 Linux 中安装 Dialect + +Dialect 是以 [Flatpak][4] 的形式提供的。所以,你应该能够在你选择的任何 Linux 发行版上安装它。如果你是新手,你可能想看看我们的 [Flatpak 指南][5]以获得帮助。 + +首先,添加Flathub 仓库: + +``` +flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +``` + +然后安装应用: + +``` +flatpak install flathub com.github.gi_lom.dialect +``` + +安装后,在系统菜单中寻找它,并从那里启动它。 + +你也可以浏览它的 [GitHub 页面][6]了解更多信息。 + +[Dialect][7] + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/dialect/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-screenshot.png?resize=800%2C331&ssl=1 +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-app-options.png?resize=800%2C470&ssl=1 +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/09/dialect-libretranslate.png?resize=800%2C326&ssl=1 +[4]: https://itsfoss.com/what-is-flatpak/ +[5]: https://itsfoss.com/flatpak-guide/ +[6]: https://github.com/dialect-app/dialect/ +[7]: https://flathub.org/apps/details/com.github.gi_lom.dialect From ca25fde04efa42cec8098ec9ef6777264f87f258 Mon Sep 17 00:00:00 2001 From: geekpi Date: Sat, 9 Oct 2021 08:36:47 +0800 Subject: [PATCH 121/143] translating --- .../20211008 3 new features of the latest OpenPGP.js version.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211008 3 new features of the latest OpenPGP.js version.md b/sources/tech/20211008 3 new features of the latest OpenPGP.js version.md index c966e80965..d46866e3ba 100644 --- a/sources/tech/20211008 3 new features of the latest OpenPGP.js version.md +++ b/sources/tech/20211008 3 new features of the latest OpenPGP.js version.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/10/openpgpjs" [#]: author: "Daniel Huigens https://opensource.com/users/twiss" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 47c0f5f685a84dd49134fbfac76e9697ca2deb33 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 9 Oct 2021 09:06:10 +0800 Subject: [PATCH 122/143] PUB --- .../20210809 NMState- A declarative networking config tool.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {translated/tech => published}/20210809 NMState- A declarative networking config tool.md (100%) diff --git a/translated/tech/20210809 NMState- A declarative networking config tool.md b/published/20210809 NMState- A declarative networking config tool.md similarity index 100% rename from translated/tech/20210809 NMState- A declarative networking config tool.md rename to published/20210809 NMState- A declarative networking config tool.md From 99682e305b6154cc28bad6782b4f77ec5a9a83e9 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 9 Oct 2021 09:29:00 +0800 Subject: [PATCH 123/143] PRF&PUB @geekpi https://linux.cn/article-13864-1.html --- ... your Linux distribution-s repositories.md | 57 +++++++++---------- 1 file changed, 26 insertions(+), 31 deletions(-) rename {translated/tech => published}/20210927 Install Java from your Linux distribution-s repositories.md (63%) diff --git a/translated/tech/20210927 Install Java from your Linux distribution-s repositories.md b/published/20210927 Install Java from your Linux distribution-s repositories.md similarity index 63% rename from translated/tech/20210927 Install Java from your Linux distribution-s repositories.md rename to published/20210927 Install Java from your Linux distribution-s repositories.md index c04dd813fd..f2de6c0c60 100644 --- a/translated/tech/20210927 Install Java from your Linux distribution-s repositories.md +++ b/published/20210927 Install Java from your Linux distribution-s repositories.md @@ -3,16 +3,18 @@ [#]: author: "Chris Hermansen https://opensource.com/users/clhermansen" [#]: collector: "lujun9972" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13864-1.html" -从你的 Linux 发行版的仓库中安装 Java +如何从 Linux 发行版的仓库中安装 Java ====== -无论你喜欢哪个发行版和包管理器,都可以都很容易在您的 Linux 系统上安装 Java。 -![Coffee beans and a cup of coffee][1] -有许多不同的方法可以把 Java 安装到你的 Linux 桌面上。一个明显的途径是使用你的 Linux 发行版中提供的软件包。请注意,这并不适合所有人。例如,有些用户可能需要一个非常具体的 Java 版本。 +> 无论你喜欢哪个发行版和包管理器,都可以都很容易地在你的 Linux 系统上安装 Java。 + +![](https://img.linux.net.cn/data/attachment/album/202110/09/092717ean17be0alz10kt5.jpg) + +把 Java 安装到你的 Linux 桌面上有多种方法。一个明显的方式是使用你的 Linux 发行版中提供的软件包。请注意,这并不适合所有人。例如,有些用户可能需要一个非常具体的 Java 版本。 在你开始之前,你必须确定你需要“哪种 Java”。你是否只需要运行一些 `.class` 文件或 `.jar` 文件?还是你正在编写一些需要编译的代码? @@ -20,14 +22,12 @@ 由于我主要在 Ubuntu Linux 发行版上工作,我的软件包管理器是 `apt`。我可以用 `apt` 来查找哪些 OpenJDK 包是可用的: - ``` -`apt list OpenJDK\*` +apt list OpenJDK\* ``` 这个命令的输出看起来像这样: - ``` Listing... Done openjdk-11-dbg/hirsute-updates,hirsute-security 11.0.11+9-0ubuntu2 amd64 @@ -57,48 +57,43 @@ openjdk-8-source/hirsute-updates,hirsute-updates,hirsute-security,hirsute-securi 我在上面用 `...` 省略了不少行。 -事实证明,即使我把自己限制在 OpenJDK 中,我仍然有很多选择: +事实证明,即使限制在 OpenJDK 中,我仍然有很多选择: - * 架构(在我的例子中,是 i386 还是 amd64)。 - * Java 的版本(就我而言,是 8、11、15、16、17)。 + * 不同的架构(在我的例子中,i386 还是 amd64)。 + * 不同的 Java 版本(就我而言,有 8、11、15、16、17 等)。 * 纯粹的 OpenJDK 或无头版本。 - * Java 运行时环境(或称 JRE)。 - * 调试、演示、源代码等选项。 + * Java 运行时环境(JRE)。 + * 用于调试、演示,以及是否包含源代码等。 +同样,在我的情况中,我主要对纯粹的普通 OpenJDK 感兴趣。 - -同样,在我的案例中,我主要是对纯粹的 vanilla OpenJDK 感兴趣。 - -假设我想为我的 amd64 架构安装 Java 11 版本的纯 vanilla OpenJDK,我可以输入: - +假设我想为我的 amd64 架构安装 Java 11 版本的普通 OpenJDK,我可以输入: ``` -`sudo apt install -a=amd64 openjdk-11-jdk` +sudo apt install -a=amd64 openjdk-11-jdk ``` 几分钟后,我就可以编译、运行、调试和打包我的 Java 代码了。 -注意,同时安装多个版本的 Java 是很有可能的,有时甚至是理想的。在 Ubuntu 中,有一个有用的工具,叫做 `update-java-alternatives`,它可以[显示和配置在任何时候使用哪个 Java 环境][3]。 - -那些使用不同 Linux 发行版的人,一般来说,可以采取类似的方法。其他几个发行版(如 Debian 和 Mint)也使用 `apt` ,尽管可用的软件包可能不同。其他发行版使用不同的软件包管理器。例如,[Fedora 安装 Java 的文档页面][4]显示了如何使用 Fedora `dnf` 包管理器来处理安装。首先,为了显示可用的版本,输入: +注意,很有可能需要同时安装多个版本的 Java,有时甚至是必要的。在 Ubuntu 中,有一个有用的工具,叫做 `update-java-alternatives`,它可以 [显示并配置在使用哪个 Java 环境][3]。 +那些使用不同 Linux 发行版的人,一般来说,可以采取类似的方法。其他的几个发行版(如 Debian 和 Mint)也使用 `apt` ,尽管可用的软件包可能不同。发行版可能使用不同的软件包管理器。例如, [Fedora 安装 Java 的文档页面][4] 显示了如何使用 Fedora `dnf` 包管理器来处理安装。首先,为了显示可用的版本,输入: ``` -`dnf search openjdk` +dnf search openjdk ``` 接下来,要安装完整的开发 x86_64 架构版本,请输入: - ``` -`sudo dnf install java-11-openjdk-devel.x86_64` +sudo dnf install java-11-openjdk-devel.x86_64 ``` -同样地,Fedora 提供了 `alternatives` 工具来[显示和配置 Java 环境][5]。 +同样地,Fedora 提供了 `alternatives` 工具来 [显示和配置 Java 环境][5]。 -再比如,[很棒的 Arch Linux wiki][6] 显示对应的软件包是 `jdk11-openjdk`。wiki 还解释了许多与在 Arch 中使用 Java 有关的其他重要细节,比如使用 `archlinux-java` 工具来显示安装了哪些 Java 环境或选择一个不同的默认环境。Arch 使用一个叫 `pacman` 的包管理器,它也有文档[在 Arch Linux wiki 上][7]。 +再比如,[很棒的 Arch Linux 维基][6] 显示对应的软件包是 `jdk11-openjdk`。该维基还解释了许多在 Arch 中使用 Java 的其他重要细节,比如使用 `archlinux-java` 工具来显示安装了哪些 Java 环境或选择一个不同的默认环境。Arch 使用一个叫 `pacman` 的包管理器,它也有文档 [在 Arch Linux 维基上][7]。 -不管你喜欢哪个发行版和软件包管理器,在你的 Linux 系统上获得 Java 是很容易的。当然,在安装之前,要考虑版本和功能。还要记住,在同一台电脑上有管理两个或多个 Java 版本的选项。我的大多数例子都使用了 `apt`,但也要记得 `dnf` 选项。 +不管你喜欢哪个发行版和软件包管理器,在你的 Linux 系统上获得 Java 是很容易的。当然,在安装之前,要考虑版本和功能。还要记住,在同一台电脑上有管理两个或多个 Java 版本的方法。我的大多数例子都使用了 `apt`,但也要记得可以选择使用 `dnf`。 -------------------------------------------------------------------------------- @@ -107,7 +102,7 @@ via: https://opensource.com/article/21/9/install-java-linux-repositories 作者:[Chris Hermansen][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/) 荣誉推出 From c0809a4ae23b25181f431679ba13542457f75e26 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 9 Oct 2021 09:44:23 +0800 Subject: [PATCH 124/143] APL --- ...077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md b/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md index 334e19bce4..8bb0f9c8fe 100644 --- a/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md +++ b/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md @@ -2,7 +2,7 @@ [#]: via: "https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/" [#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 72620e572786d5ab50315e447898d950a2bdc9be Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 9 Oct 2021 10:32:34 +0800 Subject: [PATCH 125/143] TSL&PRF --- ... DLSS With Proton Experimental on Linux.md | 96 ------------------- ... DLSS With Proton Experimental on Linux.md | 94 ++++++++++++++++++ 2 files changed, 94 insertions(+), 96 deletions(-) delete mode 100644 sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md create mode 100644 translated/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md diff --git a/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md b/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md deleted file mode 100644 index 8bb0f9c8fe..0000000000 --- a/sources/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md +++ /dev/null @@ -1,96 +0,0 @@ -[#]: subject: "DirectX 11/12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux" -[#]: via: "https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/" -[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -DirectX 11/12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux -====== - -In June, Nvidia [announced][1] the support for **DLSS** in Linux via Steam Proton and a beta driver for Vulkan-based games. - -DLSS stands for Deep Learning Super Sampling. It utilizes deep learning algorithms powered by Tensor cores found in RTX GPUs to upscale images inside games. This results in clearer and sharper images along with higher framerates. - -![Source: NVIDIA][2] - -This [upscaling technology is similar][3] to AMD’s Fidelity FX and even closer to Intel’s upcoming XeSS, both open-source, unlike DLSS. Gamers already have the benefit of making use of Fidelity FX through [GloriousEggroll’s][4] custom Proton GE versions. - -Moreover, NVIDIA also planned to expand support to DirectX games by this fall. - -And, finally, with the latest Proton Experiment support, that’s happening. Linux gamers using Nvidia GPUs can now play their favorite DX11/12 based games with DLSS. - -There couldn’t be a better time for this addition, considering we will be able to play various multiplayer games soon on Linux with the [support for BattleEye & Easy-Anti Cheat added to Proton][5]. - -### Major Updates to Steam Play Proton - -Along with a wave of improvements in Proton 6.3-7, Valve has finally managed to add DLSS support into Proton’s Experimental branch for DirectX 11/12 games a few days ago. - -Previously, a beta driver was required to use DLSS for Vulkan-based games like DOOM Eternal. - -But, that isn’t the case anymore—although the latest drivers are recommended. - -To complement this, DXVK and the Steamworks SDK have also been updated to the latest development versions. Additionally, performance issues for specific games and other bugs have also been fixed. - -You can check Proton’s [official GitHub changelog][6] to explore the list of improvements for all the games supported so far. - -### Enabling DLSS for DX11/12 Games - -Enabling DLSS is a straightforward process. - -First, you have to make sure that your Windows game runs on Proton Experimental. - -This can be done by right-clicking on the game and selecting Properties. Then under Compatibility, you need to tick the “Force the use of a specific Steam Play compatibility tool” checkbox. Next, choose Proton Experimental from the drop-down menu. - -![][7] - -Finally, you need to insert the command `PROTON_HIDE_NVIDIA_GPU=0 PROTON_ENABLE_NVAPI=1 %command%` in **Launch Options**. - -![][8] - -That’s it! You’re all set to play your games with DLSS! - -### Summing Up - -Nvidia DLSS is a much-needed feature for many games, given the difference it makes. - -Linux did not have full-fledged support for DLSS from the get-go. But, it looks like it will soon be available in a future stable Proton version along with necessary improvements. - -Linux gamers can finally experience better frame rates and visual quality for many games with their RTX-based GPUs. - -Although I use Fidelity FX on my AMD graphics card, I still crave to try out DLSS on an RTX GPU! - -_How do you feel about the arrival of Nvidia’s DLSS? Will you be trying it out soon? Feel free to share your comments below._ - -**Via:** [GamingOnLinux][9] - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/ - -作者:[Rishabh Moharir][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/rishabh/ -[b]: https://github.com/lujun9972 -[1]: https://www.nvidia.com/en-us/geforce/news/june-2021-rtx-dlss-game-update/ -[2]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQwOCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[3]: https://news.itsfoss.com/intel-xess-open-source/ -[4]: https://github.com/GloriousEggroll/proton-ge-custom -[5]: https://news.itsfoss.com/easy-anti-cheat-linux/ -[6]: https://github.com/ValveSoftware/Proton/wiki/Changelog -[7]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ3NCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[8]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ2OCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[9]: https://www.gamingonlinux.com/2021/10/proton-experimental-expands-nvidia-dlss-support-on-linux-to-directx-11-titles diff --git a/translated/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md b/translated/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md new file mode 100644 index 0000000000..8aeb95218c --- /dev/null +++ b/translated/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md @@ -0,0 +1,94 @@ +[#]: subject: "DirectX 11/12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux" +[#]: via: "https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/" +[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +《赛博朋克 2077》等 DirectX 11/12 游戏可在 Linux 上体验 DLSS 了 +====== + +> 通过 Steam Proton 的实验版本,期待已久的 Nvidia DLSS 支持在 Linux 上的 DirectX 11/12 大作中出现。 + +![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/nvidia-dlss-proton.png?w=1200&ssl=1) + +6 月,英伟达 [宣布][1] 通过 Steam Proton 支持 Linux 中的 DLSS,并为基于 Vulkan 的游戏提供了测试版驱动程序。 + +DLSS 是指深度学习超级采样Deep Learning Super Sampling。它利用由 RTX GPU 中的 Tensor 核心提供支持的深度学习算法来提升游戏中的图像。这将使图像更清晰、更锐利,并提高帧率。 + +![来源:英伟达][2] + +这种 [升级技术][3] 类似于 AMD 的 Fidelity FX,甚至更接近于英特尔即将推出的 XeSS,与 DLSS 不同的是这两者都是开源的。玩家已经可以通过 [GloriousEggroll][4] 的定制 Proton GE 版本体验到 Fidelity FX。 + +此外,英伟达还计划在今年秋天之前将支持范围扩大到 DirectX 游戏。 + +而且,随着最新的 Proton 实验性支持,这一切终于实现了。使用英伟达 GPU 的 Linux 游戏玩家现在可以用 DLSS 玩他们最喜欢的基于 DX11/12 的游戏。 + +考虑到我们很快就能在 Linux 上玩各种多人游戏,并且 [Proton 中添加了对 BattleEye & Easy-Anti Cheat 的支持][5],这是进行这项添加的最好时机。 + +### Steam Porton 的重大更新 + +几天前,伴随着 Proton 6.3-7 的一波改进,Valve 终于设法将 DLSS 支持添加到 Proton 的 DirectX 11/12 游戏实验分支中。 + +在此之前,需要一个测试版驱动程序才能将 DLSS 用于基于 Vulkan 的游戏,例如 DOOM Eternal。 + +但是,现在不再如此 —— 尽管推荐使用最新的驱动程序。 + +作为补充,DXVK 和 Steamworks SDK 也已经更新到最新的开发版本。此外,还修复了特定游戏的性能问题和其他错误。 + +你可以查看 Proton 的 [官方 GitHub 更新日志][6] 来了解到目前为止支持的所有游戏的改进列表。 + +### 为 DX11/12 游戏启用 DLSS + +启用 DLSS 是一个简单明了的过程。 + +首先,你必须确保你的 Windows 游戏可以在 Proton Experimental 上运行。 + +这可以通过右键点击游戏并选择“属性Properties”来完成。然后在“兼容性Compatibility”下,你需要勾选“强制使用特定的 Steam Play 兼容工具Force the use of a specific Steam Play compatibility tool”复选框。接下来,从下拉菜单中选择 “Proton Experimental”。 + +![][7] + +最后,你需要在“启动选项Launch Options”中插入命令:`PROTON_HIDE_NVIDIA_GPU=0 PROTON_ENABLE_NVAPI=1 %command%` 。 + +![][8] + +这就行了。你就可以用 DLSS 玩你的游戏了! + +### 总结 + +英伟达 DLSS 对于许多游戏来说是一个非常需要的功能,因为它的作用很大。 + +Linux 从一开始就没有对 DLSS 的全面支持。但是,看起来它很快就会在未来的 Proton 稳定版本中提供,并进行必要的改进。 + +Linux 玩家终于可以用基于 RTX 的 GPU 在许多游戏中体验到更好的帧率和视觉质量。 + +虽然我在 AMD 显卡上使用 Fidelity FX,但我仍然渴望在 RTX GPU 上尝试 DLSS! + +你对英伟达 DLSS 的到来有什么感觉?你会很快尝试它吗?欢迎在下面分享你的评论。 + +转自:[GamingOnLinux][9]。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/ + +作者:[Rishabh Moharir][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/rishabh/ +[b]: https://github.com/lujun9972 +[1]: https://www.nvidia.com/en-us/geforce/news/june-2021-rtx-dlss-game-update/ +[2]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/DLSS_RDD2.jpg?w=800&ssl=1 +[3]: https://news.itsfoss.com/intel-xess-open-source/ +[4]: https://github.com/GloriousEggroll/proton-ge-custom +[5]: https://news.itsfoss.com/easy-anti-cheat-linux/ +[6]: https://github.com/ValveSoftware/Proton/wiki/Changelog +[7]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/Compatibility.png?w=836&ssl=1 +[8]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/10/Commands-1.png?w=831&ssl=1 +[9]: https://www.gamingonlinux.com/2021/10/proton-experimental-expands-nvidia-dlss-support-on-linux-to-directx-11-titles From f12723e4d55eea6874c7615d5accda12f1e3252e Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 9 Oct 2021 10:35:29 +0800 Subject: [PATCH 126/143] PUB @wxy https://linux.cn/article-13865-1.html --- ...7 Can Use NVIDIA DLSS With Proton Experimental on Linux.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/news => published}/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md (98%) diff --git a/translated/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md b/published/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md similarity index 98% rename from translated/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md rename to published/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md index 8aeb95218c..6ae2ebe009 100644 --- a/translated/news/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md +++ b/published/20211006 DirectX 11-12 Games like Cyberpunk 2077 Can Use NVIDIA DLSS With Proton Experimental on Linux.md @@ -4,8 +4,8 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13865-1.html" 《赛博朋克 2077》等 DirectX 11/12 游戏可在 Linux 上体验 DLSS 了 ====== From 8830cc13492ebe4e66b632aa5f68a7d86e82940d Mon Sep 17 00:00:00 2001 From: unigeorge <40418272+unigeorge@users.noreply.github.com> Date: Sat, 9 Oct 2021 12:33:31 +0800 Subject: [PATCH 127/143] translating --- .../20200228 How to process real-time data with Apache.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20200228 How to process real-time data with Apache.md b/sources/tech/20200228 How to process real-time data with Apache.md index 7bf16741b4..2f1c8e18a0 100644 --- a/sources/tech/20200228 How to process real-time data with Apache.md +++ b/sources/tech/20200228 How to process real-time data with Apache.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (unigeorge) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) @@ -69,7 +69,7 @@ via: https://opensource.com/article/20/2/real-time-data-processing 作者:[Simon Crosby][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[unigeorge](https://github.com/unigeorge) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 9d74817078a19f8a05791ea868ed5c098ddfc8a0 Mon Sep 17 00:00:00 2001 From: YungeGuo Date: Sat, 9 Oct 2021 16:17:59 +0800 Subject: [PATCH 128/143] translated --- ...aging resources with cgroups in systemd.md | 106 +++++++++--------- 1 file changed, 53 insertions(+), 53 deletions(-) rename {sources => translated}/tech/20201029 Managing resources with cgroups in systemd.md (65%) diff --git a/sources/tech/20201029 Managing resources with cgroups in systemd.md b/translated/tech/20201029 Managing resources with cgroups in systemd.md similarity index 65% rename from sources/tech/20201029 Managing resources with cgroups in systemd.md rename to translated/tech/20201029 Managing resources with cgroups in systemd.md index f9c03cd94c..0a78495f78 100644 --- a/sources/tech/20201029 Managing resources with cgroups in systemd.md +++ b/translated/tech/20201029 Managing resources with cgroups in systemd.md @@ -7,30 +7,31 @@ [#]: via: (https://opensource.com/article/20/10/cgroups) [#]: author: (David Both https://opensource.com/users/dboth) -Managing resources with cgroups in systemd +在 systemd 中使用 cgroup 管理资源 ====== -Cgroups manage resources per application rather than by the individual -processes that make up an application. + +cgroup 按照应用管理资源,而不是按照组成应用的单个进程。 + ![Business woman on laptop sitting in front of window][1] -There is little more frustrating to me as a sysadmin than unexpectedly running out of a computing resource. On more than one occasion, I have filled all available disk space in a partition, run out of RAM, and not had enough CPU time to perform my tasks in a reasonable amount of time. Resource management is one of the most important tasks that sysadmins do. +作为一个系统管理员,没有事情比意外地耗尽计算资源让我更觉得沮丧。我曾不止一次填满了一个分区的所有可用磁盘空间、耗尽内存、以及没有足够的 CPU 时间在合理的时间内处理我的任务。资源管理是系统管理员最重要的工作之一。 -The point of resource management is to ensure that all processes have relatively equal access to the system resources they need. Resource management also involves ensuring that RAM, hard drive space, and CPU capacity are added when necessary or rationed when that is not possible. In addition, users who hog system resources, whether intentionally or accidentally, should be prevented from doing so. +资源管理的关键是保证所有的进程能够相对公平的访问需要的系统资源。资源管理还包括确保在需要时添加内存、硬盘驱动器空间、还有 CPU 容量;或者在无法添加时限制资源的使用。此外,应该阻止独占系统资源的用户,无论其是否有意。 -There are tools that enable sysadmins to monitor and manage various system resources. For example, [top][2] and similar tools allow you to monitor the use of memory, I/O, storage (disk, SSD, etc.), network, swap space, CPU usage, and more. These tools, particularly those that are CPU-centric, are mostly based on the paradigm that the running process is the unit of control. At best, they provide a way to adjust the nice number–and through that, the priority—or to kill a running process. (For information about nice numbers, see [_Monitoring Linux and Windows hosts with Glances_][3].) -Other tools based on traditional resource management in a SystemV environment are managed by the `/etc/security/limits.conf` file and the local configuration files located in the `/etc/security/limits.d` directory. Resources can be limited in a fairly crude but useful manner by user or group. Resources that can be managed include various aspects of RAM, total CPU time per day, total amount of data, priority, nice number, number of concurrent logins, number of processes, maximum file size, and more. +系统管理员可以通过一些工具监控和管理不同的系统资源。例如,[top][2] 和类似的工具允许你监控内存、I/O、存储(磁盘,SSD等)、网络、交换空间、CPU 的用量等。这些工具,尤其是以 CPU 为中心的工具,大部分基于运行的进程是控制的基本单位的模型。他们最多只是提供了一种方式来调整 nice 数字——从而修改优先级——或者杀死一个运行的进程。(要了解 nice 数字的信息,查看[_使用 Glances 监控 Linux 和 Windows 主机_][3])。 -### Using cgroups for process management +SystemV 环境中基于传统的资源管理的其他工具,由 `/etc/security/limits.conf` 文件和 `/etc/security/limits.d` 中的本地配置文件控制。资源可以按照用户或组以一种相当粗糙但实用的方式限制。可以管理的资源包括 RAM 的各个方面、每日的总 CPU 时间、数据总量、优先级、nice 数字、同时登陆的数量、进程数、文件大小的最大值等。 -One major difference between [systemd and SystemV][4] is how they handle processes. SystemV treats each process as an entity unto itself. systemd collects related processes into control groups, called [cgroups][5] (short for control groups), and manages system resources for the cgroup as a whole. This means resources can be managed per application rather than by the individual processes that make up an application. +### 使用 cgroup 管理进程 -The control units for cgroups are called slice units. Slices are a conceptualization that allows systemd to order processes in a tree format for ease of management. +[systemd 和 SystemV][4] 之间的一个主要差异是管理进程的方式。SystemV 将每个进程当做指向自身的一个实体。systemd 将相关的进程集中到一个控制组,称作 [cgroup][5](控制组的简称),并将 cgroup 作为一个整体管理系统资源。这意味着资源能够基于应用管理,而不是组成应用的单个进程。 -### Viewing cgroups +cgroup 的控制单元称作切片单元。切片是允许 systemd 以树状格式控制程序次序,从而简化管理的概念化。 -I'll start with some commands that allow you to view various types of information about cgroups. The `systemctl status ` command displays slice information about a specified service, including its slice. This example shows the `at` daemon: +### 查看 cgroup +我将从一些允许你查看不同类型 cgroup 信息的命令开始。 `systemctl status ` 命令显示一个特定服务的切片信息,包括服务的切片。这个例子展示了 `at` 守护进程: ``` [root@testvm1 ~]# systemctl status atd.service @@ -49,10 +50,9 @@ Sep 23 12:18:24 testvm1.both.org systemd[1]: Started Deferred execution schedule [root@testvm1 ~]# ``` -This is an excellent example of one reason that I find systemd more usable than SystemV and the old init program. There is so much more information here than SystemV could provide. The cgroup entry includes the hierarchical structure where the `system.slice` is systemd (PID 1), and the `atd.service` is one level below and part of the `system.slice`. The second line of the cgroup entry also shows the process ID (PID) and the command used to start the daemon. - -The `systemctl` command shows multiple cgroup entries. The `--all` option shows all slices, including those that are not currently active: +这是一个我感到 systemd 比 SystemV 和旧的初始化程序更好用的原因的绝佳示例。这里的信息远比 SystemV 能够提供的丰富。cgroup 项包括的层级结构中,`system.slice` 是 systemd(PID 1),`atd.service` 在下一层,是 `system.slice` 的一部分。cgroup 项的第二行还显示了进程 ID(PID)和启动守护进程使用的命令。 +`systemctl` 命令列出多个 cgroup 项,`--all` 参数列出所有的切片,包括当前没有激活的: ``` [root@testvm1 ~]# systemctl -t slice --all @@ -78,14 +78,13 @@ To show all installed unit files use 'systemctl list-unit-files'. [root@testvm1 ~]# ``` -The first thing to notice about this data is that it shows user slices for UIDs 0 (root) and 1000, which is my user login. This shows only the slices and not the services that are part of each slice. This data shows that a slice is created for each user at the time they log in. This can provide a way to manage all of a user's tasks as a single cgroup entity. +关于这个数据,第一个需要注意的是数据显示了 UID 0(root)和 1000 的用户切片,1000 是我登陆的用户。这里列出了组成每个切片的切片部分,而不是服务。还说明了每个用户登录时都会为其创建一个切片,这为将一个用户的所有任务作为单个 cgroup 项进行管理提供了一种方式。 -### Explore the cgroup hierarchy +### 探索 cgroup 层次结构 -All is well and good so far, but cgroups are hierarchical, and all of the service units run as members of one of the cgroups. Viewing that hierarchy is easy and uses one old command and one new one that is part of systemd. - -The `ps` command can be used to map the processes and their locations in the cgroup hierarchy. Note that it is necessary to specify the desired data columns when using the `ps` command. I significantly reduced the volume of output from this command below, but I tried to leave enough so you can get a feel for what you might find on your systems: +目前为止一切顺利,但是 cgroup 是分层的,所有的服务单元作为其中一个 cgroup 的成员运行。要查看这个层次结构很简单,使用 systemd 的一个旧命令和一个新命令即可。 +`ps` 命令可以用于映射进程的和其所处的 cgroup 层次。注意使用 `ps` 命令时需要指明想要的数据列。我大幅削减了下面命令的输出数量,但是试图保留足够的数据,以便你能够对自己系统上的输出有所感受: ``` [root@testvm1 ~]# ps xawf -eo pid,user,cgroup,args @@ -162,10 +161,9 @@ ons Action Buttons Log out, lock or other system actions <SNIP> ``` -You can view the entire hierarchy with the `systemd-cgls` command, which is a bit simpler because it does not require any complex options. - -I have shortened this tree view considerably. as well, but I left enough to give you some idea of the amount of data as well as the types of entries you should see when you do this on your system. I did this on one of my virtual machines, and it is about 200 lines long; the amount of data from my primary workstation is about 250 lines: +你可以使用 `systemd-cgls` 命令查看整个层次结构,这个命令不需要任何的复杂参数,更加简单。 +我也大幅缩短了这个树状结构,但是保留了足够多的输出,以便你能够了解在自己的系统上执行这个命令时应该看到的数据总量和条目类型。我在我的一个虚拟机上执行了这个命令,输出大概有 200 行;我的主要工作站的输出大概有 250 行。 ``` [root@testvm1 ~]# systemd-cgls @@ -263,43 +261,45 @@ Control group /:  <SNIP> ``` -This tree view shows all of the user and system slices and the services and programs running in each cgroup. Notice the units called "scopes," which group related programs into a management unit, within the `user-1000.slice` in the listing above. The `user-1000.slice/session-7.scope` cgroup contains the GUI desktop program hierarchy, starting with the LXDM display manager session and all of its subtasks, including things like the Bash shell and the Thunar GUI file manager. +这个树状视图显示了所有的用户和系统切片,以及每个 cgroup 内正在运行的服务和程序。注意叫作“范围”的单元,它将相关的程序组成一个管理单元,在上面列出的结果中就是 `user-1000.slice`。`user-1000.slice/session-7.scope` cgroup 包含了 GUI 桌面程序层次结构,以 LXDM 显示管理器会话和其所有的子任务开始,包括像 Bash 命令行解释器和 Thunar GUI 文件管理器之类的程序。 -Scope units are not defined in configuration files but are generated programmatically as the result of starting groups of related programs. Scope units do not create or start the processes running as part of that cgroup. All processes within the scope are equal, and there is no internal hierarchy. The life of a scope begins when the first process is created and ends when the last process is destroyed. +配置文件中不定义范围单元,而是作为启动相关程序组的结果程序化生成的。范围单元不创建或启动作为 cgroup 组成部分运行的进程。范围内的所有进程都是平等的,没有内部的层次结构。范围的生命周期在第一个进程创建时开始,在最后一个进程销毁时结束。 -Open several windows on your desktop, such as terminal emulators, LibreOffice, or whatever you want, then switch to an available virtual console and start something like `top` or [Midnight Commander][11]. Run the `systemd-cgls` command on your host, and take note of the overall hierarchy and the scope units. +在你的桌面打开多个窗口,比如终端模拟器、LibreOffice、或者任何你想打开的,然后切换到一个可用的虚拟控制台,启动类似 `top` 或 [Midnight Commander][11] 的程序。在主机运行 `systemd-cgls` 命令,留意整体的层次结构和范围单元。 -The `systemd-cgls` command provides a more complete representation of the cgroup hierarchy (and details of the units that make it up) than any other command I have found. I prefer its cleaner representation of the tree than what the `ps` command provides. +`systemd-cgls` 命令提供的 cgroup 层次结构表示(以及组成 cgroup 单元的细节),比我见过的其他任何指令都要完整。和 `ps` 命令提供的输出相比,我喜欢 `systemd-cgls` 命令更简洁的树形表示。 -### With a little help from my friends +### 来自朋友们的一点帮助 -After covering these basics, I had planned to go into more detail about cgroups and how to use them, but I discovered a series of four excellent articles by Red Hat's [Steve Ovens][12] on Opensource.com's sister site [Enable Sysadmin][13]. Rather then basically rewriting Steve's articles, I decided it would be much better to take advantage of his cgroup expertise by linking to them: +介绍完这些基础知识后,我曾计划过深入研究 cgroup 的更多细节,以及如何使用,但是我在 Opensource.com 的姐妹网站 [Enable Sysadmin][13] 上发现了一系列四篇优秀文章,由 Red Hat 公司的 [Steve Ovens][12] 所作。与其从头重写 Steve 的文章,我觉得倒不如通过链接到这些文章,利用他的 cgroup 专业知识: - 1. [A Linux sysadmin's introduction to cgroups][14] - 2. [How to manage cgroups with CPUShares][15] - 3. [Managing cgroups the hard way—manually][16] - 4. [Managing cgroups with systemd][17] + 1. [一个 Linux 系统管理员对 cgroup 的介绍][14] + 2. [如何用 CPUShares 管理 cgroup][15] + 3. [用更难的方式——手动管理 cgroup][16] + 4. [用 systemd 管理 cgroup][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]。 - -Enjoy and learn from them, as I did. - -### Other resources - -There is a great deal of information about systemd available on the internet, but much is terse, obtuse, or even misleading. In addition to the resources mentioned in this article, the following webpages offer more detailed and reliable information about systemd startup. This list has grown since I started this series of articles to reflect the research I have done. - - * The Fedora Project has a good, practical [guide][18] [to systemd][18]. It has pretty much everything you need to know in order to configure, manage, and maintain a Fedora computer using systemd. - * The Fedora Project also has a good [cheat sheet][19] that cross-references the old SystemV commands to comparable systemd ones. - * The [systemd.unit(5) manual page][20] contains a nice list of unit file sections and their configuration options along with concise descriptions of each. - * Red Hat documentation contains a good description of the [Unit file structure][21] as well as other important information. - * For detailed technical information about systemd and the reasons for creating it, check out Freedesktop.org's [description of systemd][22]. This page is one of the best I have found because it contains many links to other important and accurate documentation. - * Linux.com's "More systemd fun" offers more advanced systemd [information and tips][23]. - * See the man page for [systemd.resource-control(5)][24]. - * In [_The Linux kernel user's and administrator's guide_][25], see the [Control Group v2][26] entry. - - - -There is also a series of deeply technical articles for Linux sysadmins by Lennart Poettering, the designer and primary developer of systemd. These articles were written between April 2010 and September 2011, but they are just as relevant now as they were then. Much of everything else good that has been written about systemd and its ecosystem is based on these papers. +还有一系列针对系统管理员的深度技术文章,由 systemd 的设计者和主要开发者 Lennart +Poettering 所作。这些文章写于 2010 年 4 月到 2011 年 9 月之间,但在当下仍然像当时一样有 +价值。关于 systemd 及其生态的许多其他优秀的作品都是基于这些文章的。 * [Rethinking PID 1][27] * [systemd for Administrators, Part I][28] @@ -322,7 +322,7 @@ via: https://opensource.com/article/20/10/cgroups 作者:[David Both][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[YungeG](https://github.com/YungeG) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 34842d03e59df3dba90a36e9c73abd53d843d9b3 Mon Sep 17 00:00:00 2001 From: imgradeone <30969327+imgradeone@users.noreply.github.com> Date: Sat, 9 Oct 2021 21:51:39 +0800 Subject: [PATCH 129/143] Update 20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md --- ...l Vivaldi Browser on Ubuntu and Other Linux Distributions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md index a58f299afa..7dbdeece74 100644 --- a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md +++ b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md @@ -2,7 +2,7 @@ [#]: via: "https://itsfoss.com/install-vivaldi-ubuntu-linux/" [#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "imgradeone" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 3f1f6e0377917321322ce89490f74eb1d8682d8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?imgradeone=20-=20=E4=B8=80=E5=B9=B4=E7=BA=A7=E4=B9=88?= =?UTF-8?q?=E4=B9=88=E5=93=92?= Date: Sat, 9 Oct 2021 22:38:50 +0800 Subject: [PATCH 130/143] Update 20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md --- ...on Ubuntu and Other Linux Distributions.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md index 7dbdeece74..62c81df583 100644 --- a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md +++ b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md @@ -7,18 +7,20 @@ [#]: publisher: " " [#]: url: " " -How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions +如何在 Ubuntu 和其他 Linux 发行版中安装 Vivaldi 浏览器 ====== -_**Brief: Learn how to install Vivaldi web browser on Ubuntu, Debian and several other Linux distributions in this beginner’s tutorial. You’ll also learn about updating it and removing it.**_ +> 您将在本篇新手教程中学习如何在 Ubuntu、Debian 及其他 Linux 发行版中安装 Vivaldi 网页浏览器,同时本教程也将介绍如何更新和卸载该软件。 -[Vivaldi][1] is an increasingly popular web browser. It is based on Chromium, so you have Chrome like features, but it adds several other features to give a different, intuitive interface. +[Vivaldi][1] 是一款关注度逐步上升的网页浏览器。它基于 Chromium 内核,因此它拥有和 Chrome 类似的功能,但它也新增了一些其他特色功能,让这款浏览器与众不同、更为直观。 -It comes with tab grouping, ad blocker, mouse gestures, notes manager and even allows adding macros. You could even use split viewing to view multiple pages at once. It also respects your privacy, unlike Chrome. +它内置了标签组、广告拦截、鼠标手势、笔记管理,甚至还有命令连锁。你甚至可以借助页面平铺来一次性浏览多个页面。当然,相比于 Chrome,Vivaldi 更加尊重你的隐私。 -![Tab tiling for split viewing multiple websites at once][2] +![页面平铺,一次性浏览多个页面][2] -You can understand the popularity of this browser from the fact that [Manjaro Linux recently replaced Firefox with Vivaldi as the default browser][3] in some of its variants. +你可以从 [Manjaro Linux 近期使用 Vivaldi 取代 Firefox 作为部分分支的默认浏览器][3] 这件事来了解 Vivaldi 浏览器的受欢迎程度。 + +如果你想尝试一下 If you want to try it, let me show how to install Vivaldi on Linux. You’ll learn: @@ -26,11 +28,9 @@ If you want to try it, let me show how to install Vivaldi on Linux. You’ll lea * Tips on updating Vivaldi to the newest version * Steps for removing Vivaldi from Ubuntu - - -Non-FOSS alert! - -Vivaldi is not complete open source software. It’s UI is closed source. It’s been covered here because Vivaldi team took effort in making its software available on Linux. +> 非自由软件(Non-FOSS)警告! +> +> Vivaldi is not complete open source software. It’s UI is closed source. It’s been covered here because Vivaldi team took effort in making its software available on Linux. ### Installing Vivaldi on Ubuntu [GUI Method] From e70384a0b070228473c978cbb03ab0e06e234626 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sun, 10 Oct 2021 05:02:33 +0800 Subject: [PATCH 131/143] =?UTF-8?q?=E9=80=89=E9=A2=98[tech]:=2020211010=20?= =?UTF-8?q?Best=20Linux=20Distributions=20Based=20on=20KDE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/tech/20211010 Best Linux Distributions Based on KDE.md --- ...0 Best Linux Distributions Based on KDE.md | 221 ++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 sources/tech/20211010 Best Linux Distributions Based on KDE.md diff --git a/sources/tech/20211010 Best Linux Distributions Based on KDE.md b/sources/tech/20211010 Best Linux Distributions Based on KDE.md new file mode 100644 index 0000000000..44955e4795 --- /dev/null +++ b/sources/tech/20211010 Best Linux Distributions Based on KDE.md @@ -0,0 +1,221 @@ +[#]: subject: "Best Linux Distributions Based on KDE" +[#]: via: "https://itsfoss.com/best-kde-distributions/" +[#]: author: "Ankush Das https://itsfoss.com/author/ankush/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Best Linux Distributions Based on KDE +====== + +KDE is one of the most customizable and fastest desktop environments out there. While you can always install KDE if you know-how, it is best to choose a Linux distribution that comes with KDE out-of-the-box. + +Here, let me list some of the best KDE-based Linux distros. + +### Linux Distributions With KDE Onboard + +No matter what you choose as your preferred distro, you can refer to our [KDE customization guide][1] to tweak your experience. + +**Note:** The list is in no particular order of ranking. + +### 1\. KDE Neon + +![][2] + +Key Highlights: + + * Official KDE distribution + * Latest stable KDE Plasma version + * Focuses on latest KDE software + * Not a perfect replacement as a desktop distro + + + +KDE Neon is one of the exciting choices if you want to get your hands on the latest KDE Plasma experience. + +Even if it utilizes a stable Ubuntu LTS base, you always get the newest KDE version delivered as soon as it is released. + +Unlike any other distros, it does not focus on a complete desktop user experience but the KDE software packages. So, it may not be the perfect desktop replacement for everyone. However, if you focus on using the latest KDE software, KDE Neon is a decent choice. + +The User Edition is what you need to opt for, but you also have the choice to try “Testing” or “Unstable” editions if you are willing to try pre-released features. + +If you wonder how it differs from Kubuntu, you should check out [KDE Neon vs Kubuntu][3] comparison to explore it. + +[KDE Neon][4] + +### 2\. Kubuntu + +![][5] + +Key Highlights: + + * An Ubuntu-based desktop-focused Linux distro + * Offers both LTS and non-LTS versions + * Good hardware compatibility + + + +Kubuntu should be an excellent distro for your Linux desktop if the KDE software suite is not your focus. + +Kubuntu is an official flavor of Ubuntu, which provides three years of updates for its LTS editions. Unlike KDE Neon, you get better support for various applications and are not just limited to KDE software. + +You get the option to opt for an LTS edition or a non-LTS version to get the latest Ubuntu features. + +Kubuntu has improved hardware compatibility when compared to some other KDE-based distros. Considering, it powers a variety of laptops that include Kubuntu Focus, Slimbook, and more, the hardware compatibility is something that you can rely on. + +### 3\. Manjaro KDE + +![][6] + +Key Highlights: + + * Arch-based Linux distro + * Rolling-release updates + * Presents a slight learning curve to new Linux users + + + +Manjaro is an Arch-Linux-based distribution that makes it easy to use Arch as a desktop Linux platform. + +It follows a rolling-release schedule, which should help you get the latest packages quickly without worrying about the software update period. + +If you are a new Linux user, you may want to stick to Flatpak or Snaps to install any application. While Manjaro makes it easy to use Arch, it does present a slight learning curve to new users. So, you might want to check the [Arch wiki][7] to explore more. + +### 4\. Fedora KDE Spin + +Key Highlights: + + * A unique KDE-based Linux distribution (if you don’t prefer mainstream Ubuntu/Arch distros) + * Tailored for workstations and servers + * May not be convenient for new Linux users + * Hardware compatibility can be an issue + + + +Fedora is an independent distribution (not based on Ubuntu/Arch) that acts as an upstream for Red Hat Enterprise Linux. + +And, Fedora spin editions feature alternate desktops for users. If you want KDE, you need to download Fedora’s KDE spin. + +Like KDE Neon, Fedora does not focus on providing a great desktop experience but aims to implement the latest technology useful for a workstation or server. + +So, if you are confident to tackle any issues/challenges that come with newer technology implementations on a Linux distro, Fedora KDE spin can be a good choice. + +[Fedora KDE Spin][8] + +### 5\. openSUSE + +![][9] + +Key Highlights: + + * Suitable for system administrators and developers requiring access to several tools + * Two different editions available including a stable and a rolling-release + + + +openSUSE is yet another independent Linux distribution featuring the KDE desktop by default. While it pitches itself as one of the choices for desktop users, I have had hardware compatibility issues in the past. + +However, it can be a good choice for system administrators or developers who want to access tools like YaST, Open Build Service, Kiwi, and more on their desktop, out-of-the-box. + +It offers a stable edition and a rolling-release version. As per your requirements, choose what’s best for you. + +[openSUSE][10] + +### 6\. Garuda Linux + +![][11] + +Key Highlights: + + * Rolling-release distro + * BTRFS as the default filesystem + * Comes with essential pre-installed GUI tools to make the Arch Linux experience easy + + + +Garuda Linux is a modern Arch-based distribution that focuses on a customized experience out-of-the-box. + +The KDE version (or the Dr460nized edition) offers a beautiful experience while tweaking it with a macOS-like workflow. + +Of course, if you are an experienced Linux user, you may customize your existing distribution to mimic the same experience. + +As a cherry on top, Garuda Linux also provides different variants of its KDE editions, one with pre-installing gaming tools, one for penetration testing, and another as an essential Linux desktop system. + +[Garuda Linux][12] + +### 7\. Nitrux OS + +![][13] + +Key Highlights: + + * Debian-based distribution for a change + * Unique desktop experience + + + +A Debian-based Linux distribution that features KDE out-of-the-box. Unlike Kubuntu, Nitrux may end up offering faster KDE plasma updates and newer Linux Kernel upgrades. + +Nitrux OS offers a beautiful and unique experience while featuring its NX Desktop. + +If you want to try something different with KDE onboard, Nitrux OS would be a great pick. + +[Nitrux OS][14] + +### 8\. MX Linux KDE + +![][15] + +Key Highlights: + + * Debian-based distro + * Lightweight + * Useful MX Tools pre-installed + + + +Don’t need the looks but want a simple and customizable KDE desktop with a Debian base? MX Linux KDE edition should be a fantastic choice as it is known for its snappy performance and pre-installed essential tools baked in. + +You also get several KDE themes if you want to tweak the default user experience. + +[MX Linux][16] + +### Wrapping Up + +In addition to this list, several other Linux distributions feature KDE desktop as their preferred choice. + +Nitrux OS should be a unique pick overall, and if you want to move away from Ubuntu-based distributions, there are solid arch-based distros like Garuda Linux and Manjaro to try. + +What is your favorite KDE-based Linux distribution? Do you focus on out-of-the-box customization or prefer to customize the KDE experience yourself? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/best-kde-distributions/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/kde-customization +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/08/kde-neon-information-20-04.jpg?resize=800%2C397&ssl=1 +[3]: https://itsfoss.com/kde-neon-vs-kubuntu/ +[4]: https://neon.kde.org/index +[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/01/kubuntu-kde.jpg?resize=800%2C450&ssl=1 +[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/11/manjaro-20-desktop.jpeg?resize=800%2C440&ssl=1 +[7]: https://wiki.archlinux.org +[8]: https://spins.fedoraproject.org/en/kde/ +[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/10/opensuse-kde.png?resize=800%2C423&ssl=1 +[10]: https://www.opensuse.org +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/12/Garuda-Linux-review.png?resize=800%2C450&ssl=1 +[12]: https://garudalinux.org +[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/10/nitrux-os-kde.png?resize=800%2C450&ssl=1 +[14]: https://nxos.org +[15]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/08/mx-linux-19-2-kde.jpg?resize=800%2C452&ssl=1 +[16]: https://mxlinux.org From ec86df3d2e935bd8d2edde6c1f29be678c2f8c6c Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sun, 10 Oct 2021 05:03:59 +0800 Subject: [PATCH 132/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020211008=20?= =?UTF-8?q?Feren=20OS=202021.10=20Release=20Introduces=20a=20New=20Firefox?= =?UTF-8?q?=20Configuration=20and=20UI=20Improvements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20211008 Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements.md --- ...refox Configuration and UI Improvements.md | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 sources/news/20211008 Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements.md diff --git a/sources/news/20211008 Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements.md b/sources/news/20211008 Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements.md new file mode 100644 index 0000000000..863cd52336 --- /dev/null +++ b/sources/news/20211008 Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements.md @@ -0,0 +1,93 @@ +[#]: subject: "Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements" +[#]: via: "https://news.itsfoss.com/feren-os-2021-10-release/" +[#]: author: "Omar Maarof https://news.itsfoss.com/author/omar/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements +====== + +Feren OS is a Linux/GNU distribution based on Ubuntu. + +The latest 2021.10 release, codenamed ‘Gallium’, presents new features and changes. Let’s take a look at them. + +### Feren OS 2021.10: What’s New? + +#### A New Configuration For Mozilla Firefox + +![][1] + +Feren OS 2021.10 aims to offer a hassle-free Mozilla web browsing experience by removing the unnecessary elements of the browser. + +For new users, Mozilla Firefox comes pre-installed with a new configuration. Things like [removing the title bar from Mozilla Firefox][2], getting rid of distractions in a new tab, are some of the configurations made. + +Overall, these are the changes made to Firefox: + + * Compact Mode and no title bar by default + * No Pocket by default + * The Library is now in the toolbar (as was intended by Mozilla themselves during early Proton design ideas) instead of Pocket’s button + * Skipped Welcome Screens to allow you to get right into the action + + + +If you have never launched Firefox (or have a fresh install of Feren OS), you will get the configuration out-of-the-box. In either case, you will have to install the **firefox-config-feren** package from the web browser manager. + +#### New Splash Screen + +The new update comes with a redesigned splash screen. As a consequence, now it looks smoother and more elegant, especially when transitioning from the login screen to the desktop. + +![][3] + +#### Refreshed Lock Screen + +The new lock screen is a mixture of the Feren OS login screen’s design style and KDE plasma’s lock screen features. + +![Feren OS 2021.10 Lock Screen][4] + +As a result, it combines elegance and functionality. From the lock screen, you will have access to your music, a virtual keyboard, and more. + +![Feren OS 2021.10 Login Screen][4] + +#### New Wallpapers + +With every new release, you can notice some new wallpapers. And, Feren OS 2021.10 is no exception. + +Some interesting wallpapers have been added from sources like Unsplash and some were removed. + +### Upgrading & Downloading + +You should be easily able to get the new update from the update manager. In case you run into issues, you can refer to the [official blog post][5] for a solution to fix the most common problem encountered when updating. + +For more details on this release, refer to [the official announcement][6]. + +[Download Feren OS 2021.10][7] + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/feren-os-2021-10-release/ + +作者:[Omar Maarof][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/omar/ +[b]: https://github.com/lujun9972 +[1]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzOSIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[2]: https://itsfoss.com/remove-title-bar-firefox/ +[3]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM5MyIgd2lkdGg9IjcwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[4]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM1OCIgd2lkdGg9IjcwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[5]: https://medium.com/feren-os/the-repository-keyring-expired-heres-how-to-renew-it-bd50dd874aac +[6]: https://medium.com/feren-os/feren-os-2021-10-iterative-improvements-993aab5dba51 +[7]: https://ferenos.weebly.com/get-feren-os.html From 720ca85479b5eaaed8d912b8609e9304d786ed97 Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sun, 10 Oct 2021 05:04:09 +0800 Subject: [PATCH 133/143] add done: 20211008 Feren OS 2021.10 Release Introduces a New Firefox Configuration and UI Improvements.md --- sources/tech/20211010 .md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 sources/tech/20211010 .md diff --git a/sources/tech/20211010 .md b/sources/tech/20211010 .md new file mode 100644 index 0000000000..2c12f65567 --- /dev/null +++ b/sources/tech/20211010 .md @@ -0,0 +1,16 @@ +[#]: subject: "" +[#]: via: "https://www.debugpoint.com/2021/10/dark-mode-browser/" +[#]: author: "[Arindam] + +Posted by Arindam + +Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + + +====== + From d542cd6bbbefe76fc21f7f55a9cd9f77e0ffee6e Mon Sep 17 00:00:00 2001 From: DarkSun Date: Sun, 10 Oct 2021 05:04:23 +0800 Subject: [PATCH 134/143] =?UTF-8?q?=E9=80=89=E9=A2=98[news]:=2020211008=20?= =?UTF-8?q?TUXEDO=E2=80=99s=20Linux=20Gaming=20Ultrabook=20=E2=80=9CInfini?= =?UTF-8?q?tyBook=20Pro=2014=E2=80=9D=20Now=20Sports=20an=20RTX=203050=20T?= =?UTF-8?q?i=20and=203K=20Display?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sources/news/20211008 TUXEDO-s Linux Gaming Ultrabook -InfinityBook Pro 14- Now Sports an RTX 3050 Ti and 3K Display.md --- ...ow Sports an RTX 3050 Ti and 3K Display.md | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 sources/news/20211008 TUXEDO-s Linux Gaming Ultrabook -InfinityBook Pro 14- Now Sports an RTX 3050 Ti and 3K Display.md diff --git a/sources/news/20211008 TUXEDO-s Linux Gaming Ultrabook -InfinityBook Pro 14- Now Sports an RTX 3050 Ti and 3K Display.md b/sources/news/20211008 TUXEDO-s Linux Gaming Ultrabook -InfinityBook Pro 14- Now Sports an RTX 3050 Ti and 3K Display.md new file mode 100644 index 0000000000..019b613536 --- /dev/null +++ b/sources/news/20211008 TUXEDO-s Linux Gaming Ultrabook -InfinityBook Pro 14- Now Sports an RTX 3050 Ti and 3K Display.md @@ -0,0 +1,85 @@ +[#]: subject: "TUXEDO’s Linux Gaming Ultrabook “InfinityBook Pro 14” Now Sports an RTX 3050 Ti and 3K Display" +[#]: via: "https://news.itsfoss.com/tuxedos-infinitybook-14/" +[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/" +[#]: collector: "lujun9972" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +TUXEDO’s Linux Gaming Ultrabook “InfinityBook Pro 14” Now Sports an RTX 3050 Ti and 3K Display +====== + +Tuxedo has recently unveiled its latest and exciting revision to its InfinityBook Pro 14. Despite weighing just around one kg, this sleek-looking ultrabook packs in impressive specs and can pretty much run various AAA games. Let’s take a look at what this laptop has to offer. + +### Updated Specifications + +![Source: Tuxedo][1] + +#### Processor Upgrade + +The refreshed offering has updated the processors to high-performance **Intel Core i5-11300H and Core i7-11370H** instead of the power-saving chips in the previous iteration. + +In case you didn’t know, the performance-oriented chips can utilize up to 60 watts (TDP) to provide you the enhanced performance. + +#### New-Gen RTX Graphics + +As for the graphics side, you’ll find NVIDIA’s mid-range **GeForce RTX 3050 Ti** along with the integrated Iris Xe graphics. This is a power-efficient MaxQ variant that promises a TGP of 35 watts. + +Considering this as a mid-tier GPU, it should be enough for gaming with 1080p settings. + +Do note there are no 3050ti available in the market separately. It is currently limited to OEMs/laptops. + +This graphics card is very beneficial for gamers on the go as it supports NVIDIA’s DLSS, like all RTX GPUs, for a stepped-up gaming experience. + +Also, it’s never been a better time because Linux gamers can now [enable DLSS for DX11/12 and Vulkan-based games like Cyberpunk 2077][2]. + +### Other Features + +If you’re worried about cooling, fret not. The laptop comes with an all-new cooling system that contains two heat pipes and two fans. Thus, working under heavy workloads is no longer an issue. + +As for the storage and memory, two M.2 NVME SSD slots and dual-channel RAM up to 64 GB can be seen. + +The I/O ports include an HDMI 2.0, USB-C 3.2 Gen2, two USB-A 3.2 Gen1 ports, an SD card reader, and a Thunderbolt 4 port. + +Finally, a large **53 Wh battery** is also included that ensures 12 hours (idle) of runtime. This is pretty helpful to that stunning 14 inch **Omnia 3K IPS display.** + +### Availability and Pricing + +The InfinityBook Pro 14 **starts at 1180 EUR** and goes all the way **up to 1770 EUR** if you need the 3K Omnia display and Core i7-11370H. + +Preorders have already started from Oct 6th. You can head to its official website to explore more about the product and its availability. + +[TUXEDO Computers][3] + +### Wrapping Up + +This is one beast of an ultrabook that doubles as a gaming laptop. However, I don’t understand the inclusion of 3050ti with a 3K display. So, if you are looking for other options, I would suggest [exploring other places to buy Linux laptops][4]. + +Users frequently on the go will find this laptop useful for both work and play, thanks to the laptop’s weight and power. + +_What do you think about this laptop? Do share your thoughts below_. + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/tuxedos-infinitybook-14/ + +作者:[Rishabh Moharir][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/rishabh/ +[b]: https://github.com/lujun9972 +[1]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjU2NyIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[2]: https://news.itsfoss.com/nvidia-dlss-dx-11-12-proton/ +[3]: https://www.tuxedocomputers.com/en/Linux-Hardware/Linux-Notebooks/10-14-inch/TUXEDO-InfinityBook-Pro-14-Gen6.tuxedo# +[4]: https://itsfoss.com/get-linux-laptops/ From b74404757e1fd42846c1f559cfdeb1029e635d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?imgradeone=20-=20=E4=B8=80=E5=B9=B4=E7=BA=A7=E4=B9=88?= =?UTF-8?q?=E4=B9=88=E5=93=92?= Date: Sun, 10 Oct 2021 10:00:45 +0800 Subject: [PATCH 135/143] Update 20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md --- ...on Ubuntu and Other Linux Distributions.md | 88 +++++++++---------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md index 62c81df583..31dd4d01c2 100644 --- a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md +++ b/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md @@ -20,113 +20,111 @@ 你可以从 [Manjaro Linux 近期使用 Vivaldi 取代 Firefox 作为部分分支的默认浏览器][3] 这件事来了解 Vivaldi 浏览器的受欢迎程度。 -如果你想尝试一下 +如果你想尝试一下这款浏览器的话,接下来让我告诉你,如何在 Linux 上安装 Vivaldi。你将了解到: -If you want to try it, let me show how to install Vivaldi on Linux. You’ll learn: - - * GUI and command line methods for installing Vivaldi - * Tips on updating Vivaldi to the newest version - * Steps for removing Vivaldi from Ubuntu + * 安装 Vivaldi 的 GUI 和命令行方式 + * 将 Vivaldi 更新到最新版本的提示 + * 在 Ubuntu 中卸载 Vivaldi 的方式 > 非自由软件(Non-FOSS)警告! > -> Vivaldi is not complete open source software. It’s UI is closed source. It’s been covered here because Vivaldi team took effort in making its software available on Linux. +> Vivaldi 并非完全的开源软件。它的 UI 界面是闭源的。之所以在这里介绍这款浏览器,是因为 Vivaldi 团队正努力让该软件在 Linux 平台上可用。 -### Installing Vivaldi on Ubuntu [GUI Method] +### 在 Ubuntu 中安装 Vivaldi [GUI 方式] -The good thing is that Vivaldi provides pre-built binaries in DEB form for Ubuntu/Debian based distros and in RPM form for Fedora, Red Hat and SUSE. +好消息是,Vivaldi 提供了预先构建好的安装包,包括 Ubuntu/Debian 的 DEB 文件,以及 Fedora、Red Hat、SUSE 的 RPM 文件、 -It is available for both 32 bit and 64-bit platforms, as well as [ARM devices like Raspberry Pi][4]. +它支持 32 位和 64 位平台,也支持 [像树莓派之类的 ARM 设备][4]。 -![Vivaldi provides installer for several types of Linux distributions][5] +![Vivaldi 为各类 Linux 发行版提供了安装包][5] -The installation process is really simple. You go to the Vivaldi web page and download the appropriate installer file and then double click on it to install it. That’s it. +安装过程非常简单。你只需要前往 Vivaldi 的官网下载正确的安装包文件,双击打开,然后安装,大功告成。 -I’ll show the steps in detail for Ubuntu/Debian. You can use similar steps for other distributions. +我将详细介绍在 Ubuntu/Debian 下的安装过程。对于其他类型的发行版,你可以使用类似的步骤。 -#### Step 1: Download Vivaldi +#### 第 1 步:下载 Vivaldi -Go to the Vivaldi’s download page and download the DEB file for Ubuntu. +前往 Vivaldi 的下载页面,下载支持 Ubuntu 的 DEB 格式安装包。 -[Download Vivaldi][6] +[下载 Vivaldi][6] -![Download DEB file for Ubuntu/Debian][7] +![下载支持 Ubuntu/Debian 的 DEB 安装包][7] -#### Step 2: Install the downloaded DEB file +#### 第 2 步:安装刚刚下载的 DEB 文件 -Go to the Downloads folder where you have the deb file downloaded. [Installing deb file][8] is easy. Either just double-click on it or right click to open it with software center. +前往你刚刚下载 DEB 文件的下载文件夹。[安装 DEB 文件][8] 非常简单,只需要双击打开,或者右键后使用软件中心打开即可。 -![Right click on the downloaded deb file and open it with Software Install][9] +![右键点击下载的 DEB 文件并用软件中心打开以安装][9] -It will open the software center application and here, you can see the option to install Vivaldi. Just hit the Install button. +这将打开软件中心,在这里可以看到安装 Vivaldi 的选项。点击安装按钮即可。 -![Hit the Install button][10] +![点击安装按钮][10] -You’ll be asked to enter your system’s account password. Enter that and you should have it installed in a few seconds. You’ll see that Install option changes to remove. This is an indication that Vivaldi is now installed. +您将需要输入系统账户的密码,输入密码授权后,Vivaldi 很快就能完成安装,随后安装按钮也变成了移除按钮。这表明 Vivaldi 已经安装完成了。 -#### Step 3: Using Vivaldi +#### 第 3 步:使用 Vivaldi -Open the system menu by pressing the super (Windows) key and searching for Vivaldi. Click on the Vivaldi icon. +按下 Super(Windows)键打开系统菜单,搜索 Vivaldi,然后单击 Vivaldi 的图标。 -![Search for Vivaldi in the system menu][11] +![在系统菜单中搜索 Vivaldi][11] -You’ll see a screen like this on the first run. +首次启动时,你将看到如下界面。 -![Vivaldi running in Ubuntu][12] +![运行于 Ubuntu 的 Vivaldi][12] -Now that you know the this method, let me quickly show how to install Vivaldi on Ubuntu and Debian from the terminal. +既然你已经知道了这个方法,那我接下来将展示在 Ubuntu/Debian 使用终端安装 Vivaldi 的方法。 -### Method 2: Installing Vivaldi on Ubuntu and Debian from the command line +### 方式 2:借助终端,在 Ubuntu/Debian 上安装 Vivaldi -Open a terminal and make sure that you have wget installed for [downloading files in the command line.][13] +打开终端,确认你已经安装了用于 [在命令行下下载文件][13] 的 wget。 ``` sudo apt install wget ``` -Next, get the public key of the Vivaldi repository and add it to your system so that your system trusts the packages coming from it. If interested, read [this article about adding external repository in Ubuntu][14]. +接下来,获取 Vivaldi 仓库的公钥并添加到系统,以让系统信任该来源的软件包。如果你感兴趣的话,你可以阅读 [关于在 Ubuntu 添加第三方软件仓库的文章][14]。 ``` wget -qO- https://repo.vivaldi.com/archive/linux_signing_key.pub | sudo apt-key add - ``` -Once the key has been added, add Vivaldi repository as well: +添加完该密钥后,再添加 Vivaldi 的仓库: ``` sudo add-apt-repository 'deb https://repo.vivaldi.com/archive/deb/ stable main' ``` -Now you are almost set. Update the package cache and install it. +现在距离完成也只有一步之遥了。更新软件仓库缓存并安装 Vivaldi。 ``` sudo apt update && sudo apt install vivaldi-stable ``` -And that’s it. Search for it in the menu and start it from there. +大功告成。现在,前往系统菜单搜索并启动 Vivaldi 吧。 -### Updating Vivaldi on Ubuntu +### 在 Ubuntu 中更新 Vivaldi -Both GUI and command line methods add the Vivaldi repository to your system. This means that whenever there is a new Vivaldi release, you get it along with the system updates. +GUI 和命令行这两种方式都会在系统里添加 Vivaldi 的仓库。这意味着,只要 Vivaldi 发布了新版本,你就可以在系统更新中一并获取 Vivaldi 的更新。 -![Vivaldi repo is added to the system][15] +![已添加到系统中的 Vivaldi 仓库][15] -Basically, you update the Ubuntu system and it updates the Vivaldi browser if there is a new version available. +一般情况下,你更新 Ubuntu 系统时,如果 Vivaldi 发布了新版本,那么 Vivaldi 也同时会被更新。 -![Vivaldi browser is updated with the system updates][16] +![Vivaldi 浏览器会跟随系统更新][16] -### Removing Vivaldi from Ubuntu +### 在 Ubuntu 中卸载 Vivaldi -If you do not like Vivaldi or no longer want to use it, you can surely remove it. Now, to [uninstall applications from Ubuntu][17], you may use Software Center but it won’t find the external, third-party installed software. +如果你不喜欢 Vivaldi 或者不再使用,你可以直接卸载。现在,如果你想 [在 Ubuntu 中卸载软件][17],你可能会想到软件中心,但软件中心不会查找到外部和第三方的软件包。 -You’ll have to use the terminal now even though you used GUI method to install it. That’s really easy. Open a terminal and use the command below: +目前你必须使用终端卸载 Vivaldi,即便你使用 GUI 方式安装。其实这也很简单,打开终端,输入以下命令: ``` sudo apt remove vivaldi-stable ``` -Sudo gives you [root access in Ubuntu][18]. You’ll have to enter your account’s password. While entering the password, nothing is seen on the screen. That’s normal. Enter the password blindly and it will be removed. +sudo 会 [在 Ubuntu 中给予你 root 权限][18]。你需要输入当前账户的密码。输入密码时,你可能不会在屏幕上看见输入密码的痕迹。这是正常现象,直接输入密码即可,随后 Vivaldi 将被卸载。 -I hope you find this tutorial helpful in installing and using Vivaldi on Linux. +希望这篇关于如何在 Linux 安装 Vivaldi 的教程对你有用。 -------------------------------------------------------------------------------- From b273869bb0d143071f4bdb7bbe52e91a51d5895a Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Sun, 10 Oct 2021 10:26:53 +0800 Subject: [PATCH 136/143] Delete 20211010 .md --- sources/tech/20211010 .md | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 sources/tech/20211010 .md diff --git a/sources/tech/20211010 .md b/sources/tech/20211010 .md deleted file mode 100644 index 2c12f65567..0000000000 --- a/sources/tech/20211010 .md +++ /dev/null @@ -1,16 +0,0 @@ -[#]: subject: "" -[#]: via: "https://www.debugpoint.com/2021/10/dark-mode-browser/" -[#]: author: "[Arindam] - -Posted by Arindam - -Creator of debugpoint.com. All time Linux user and open-source supporter. Connect with me via Telegram, Twitter, or send us an email. " -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - - -====== - From 02c9434b2dc75c860b860ab77e199c6ae2f90011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?imgradeone=20-=20=E4=B8=80=E5=B9=B4=E7=BA=A7=E4=B9=88?= =?UTF-8?q?=E4=B9=88=E5=93=92?= Date: Sun, 10 Oct 2021 11:31:43 +0800 Subject: [PATCH 137/143] move --- ...all Vivaldi Browser on Ubuntu and Other Linux Distributions.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {sources => translated}/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md (100%) diff --git a/sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md b/translated/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md similarity index 100% rename from sources/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md rename to translated/tech/20211008 How to Install Vivaldi Browser on Ubuntu and Other Linux Distributions.md From 10a542f5510908e6c3f75ec7306e2ab8f035a559 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 10 Oct 2021 11:58:42 +0800 Subject: [PATCH 138/143] PRF&PUB @geekpi https://linux.cn/article-13868-1.html --- ...n Open-Source Translation App for Linux.md | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) rename {translated/tech => published}/20210929 Dialect- An Open-Source Translation App for Linux.md (56%) diff --git a/translated/tech/20210929 Dialect- An Open-Source Translation App for Linux.md b/published/20210929 Dialect- An Open-Source Translation App for Linux.md similarity index 56% rename from translated/tech/20210929 Dialect- An Open-Source Translation App for Linux.md rename to published/20210929 Dialect- An Open-Source Translation App for Linux.md index 0c4176f011..073ad4a64f 100644 --- a/translated/tech/20210929 Dialect- An Open-Source Translation App for Linux.md +++ b/published/20210929 Dialect- An Open-Source Translation App for Linux.md @@ -3,66 +3,66 @@ [#]: author: "Ankush Das https://itsfoss.com/author/ankush/" [#]: collector: "lujun9972" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13868-1.html" Dialect:Linux 下的开源翻译应用 ====== -_**简介:**Dialect 是一个简单明了的应用,可以让你使用网络服务进行语言间的翻译。为了探索更多,让我们仔细看看。_ +![](https://img.linux.net.cn/data/attachment/album/202110/10/115724t5xgx8agu8asag0u.jpg) -虽然你可以启动网络浏览器并直接使用任何翻译服务来完成工作,但桌面应用有时会派上用场。 +> Dialect 是一个简单明了的应用,可以让你使用 Web 服务进行语言间的翻译。想要了解更多的话,让我们来一窥究竟。 -Dialect 是一个简单的翻译应用,利用网络服务进行翻译,同时给你一些额外的能力。 +虽然你可以启动 Web 浏览器并直接使用任何翻译服务来完成工作,但桌面应用有时会派上用场。 + +Dialect 是一个简单的翻译应用,可以利用 Web 服务进行翻译,同时给你一些额外的能力。 ### 使用谷歌翻译和 LibreTranslate 的开源翻译应用 ![][1] -Dialect 主要是一个为 GNOME 桌面定制的应用,但它在其他桌面环境下也应该能正常工作。 +Dialect 是一个主要为 GNOME 桌面定制的应用,但它在其他桌面环境下也应该能正常工作。 它可以让你快速翻译语言,同时还有一些额外的选项。 -在其核心部分,它让你在谷歌翻译或 LibreTranslate 之间选择翻译服务。 +在其核心部分,你可以选择谷歌翻译或 LibreTranslate 翻译服务。 -尽管 LibreTranslate 不能接近谷歌翻译的准确性,但把它作为一个选项来切换是一个很好的补充。至少,对于一些基本的用法,如果用户不想利用谷歌的服务,你的桌面上就有一个备选方案。 +尽管 LibreTranslate 达不到谷歌翻译的准确性,但把它作为一个选项来切换是一个很好的补充。至少,对于一些基本的用法,如果用户不想利用谷歌的服务,你的桌面上就有一个备选方案。 ### Dialect 的特点 ![][2] -除了切换翻译服务外,你还能得到: +除了切换翻译服务外,你还能得到如下个功能: * 发音 - * 文本到语音功能(谷歌) + * 文本到语音(TTS)功能(谷歌) * 黑暗模式 * 翻译快捷方式 * 实时翻译 * 剪贴板按钮可快速复制/粘贴 - * 翻译历史(撤销/重做)。 + * 翻译历史(撤销/重做) - - -正如你在截图中所注意到的,实时翻译功能可能会因为滥用 API 而使你的 IP 地址被禁止使用该服务。 +正如你在截图中所注意到的,实时翻译功能可能会因为滥用 API 而使你的 IP 地址被禁止使用服务。 ![][3] 我试着使用 LibreTranslate(如上图所示)和谷歌翻译,并启用实时翻译功能,它工作得很好。 -也许,如果你经常依赖翻译,你可能想避免这个功能。但是,对于我的临时使用,在相当多的测试中,这些服务并没有按 IP 地址禁止。 +也许,如果你经常依赖翻译,你可能想避免这个实时翻译。但是,对于我的临时使用,在相当多的测试中,该服务并没有导致 IP 地址被禁止。 重要的是要注意,如果你想,你可以指定一个自定义的 LibreTranslate 实例。默认情况下,它使用 “translate.astian.org” 作为实例。 -你可能找不到一个单独的翻译历史部分,但窗口左上角的箭头按钮会让你看到你以前的翻译和翻译设置。 +你可能找不到一个单独显示的翻译历史区域,但窗口左上角的箭头按钮会让你看到你以前的翻译,以及翻译设置。 所以,它也可以作为一个重做/撤销的功能。 ### 在 Linux 中安装 Dialect -Dialect 是以 [Flatpak][4] 的形式提供的。所以,你应该能够在你选择的任何 Linux 发行版上安装它。如果你是新手,你可能想看看我们的 [Flatpak 指南][5]以获得帮助。 +[Dialect][7] 是以 [Flatpak][4] 的形式提供的。所以,你应该能够在你选择的任何 Linux 发行版上安装它。如果你是新手,你可能想看看我们的 [Flatpak 指南][5] 以获得帮助。 -首先,添加Flathub 仓库: +首先,添加 Flathub 仓库: ``` flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo @@ -76,9 +76,7 @@ flatpak install flathub com.github.gi_lom.dialect 安装后,在系统菜单中寻找它,并从那里启动它。 -你也可以浏览它的 [GitHub 页面][6]了解更多信息。 - -[Dialect][7] +你也可以浏览它的 [GitHub 页面][6] 了解更多信息。 -------------------------------------------------------------------------------- @@ -87,7 +85,7 @@ via: https://itsfoss.com/dialect/ 作者:[Ankush Das][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/) 荣誉推出 From 6eae18d2209f322af585dfa542e7d3162b3963be Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 10 Oct 2021 14:16:23 +0800 Subject: [PATCH 139/143] APL --- sources/tech/20210929 Install Java manually on Linux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210929 Install Java manually on Linux.md b/sources/tech/20210929 Install Java manually on Linux.md index 62f170cd7e..dd879ba100 100644 --- a/sources/tech/20210929 Install Java manually on Linux.md +++ b/sources/tech/20210929 Install Java manually on Linux.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/9/install-java-manually-linux" [#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "wxy" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 6af6f3554c167f3c6d731328607615a102accb42 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 10 Oct 2021 14:39:20 +0800 Subject: [PATCH 140/143] TSL&PRF --- ...20210929 Install Java manually on Linux.md | 123 ------------------ ...20210929 Install Java manually on Linux.md | 118 +++++++++++++++++ 2 files changed, 118 insertions(+), 123 deletions(-) delete mode 100644 sources/tech/20210929 Install Java manually on Linux.md create mode 100644 translated/tech/20210929 Install Java manually on Linux.md diff --git a/sources/tech/20210929 Install Java manually on Linux.md b/sources/tech/20210929 Install Java manually on Linux.md deleted file mode 100644 index dd879ba100..0000000000 --- a/sources/tech/20210929 Install Java manually on Linux.md +++ /dev/null @@ -1,123 +0,0 @@ -[#]: subject: "Install Java manually on Linux" -[#]: via: "https://opensource.com/article/21/9/install-java-manually-linux" -[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" -[#]: collector: "lujun9972" -[#]: translator: "wxy" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Install Java manually on Linux -====== -Manual installation provides the user with the highest level of control -over the Java runtime environment. -![Penguin driving a car with a yellow background][1] - -It is easy to use your Linux distribution's package management tool to install the Java software packages. However, sometimes you need to do a manual installation of Java. This is of particular importance to administrators of Java-based application servers such as Tomcat or JBoss. Many open source and proprietary software products rely on these services. - -### Developer or Runtime kit? - -The Java Virtual Machine (JVM) is provided in two different forms: The Java Development Kit (JDK) or the Java Runtime Environment (JRE). - -Software developers usually need the JDK. It contains the binaries necessary for compiling, running, and testing the source code. To deploy a pre-built Java application generally only requires the JRE. It doesn't include the compilers and other development tools. The JRE is typically installed in production environments due to increased security and space limitations. - -### Get Java - -You can download open source Java software from the internet. You can find downloads of OpenJDK tarballs at [Red Hat Developer][2], [Adoptium.net][3], or the [Zulu Community edition][4] from Azul. - -### Install Java - -Set up a directory to hold the Java files. I like to create one simply called `java` so I can download and extract the tarball in a dedicated directory. - - -``` -`$ mkdir -p java/jdk` -``` - -Let's use the JDK in this example. Save the downloaded file to the `jdk` directory. Then change into that directory: - - -``` -$ cd java/jdk -$ ls -OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz -``` - -Extract the tarball. Note that `tar` will create a new directory: - - -``` -$ tar xvzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz -$ ls -jdk-11.0.12+7 OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz -``` - -Confirm the version of the new JVM using the `-version` option: - - -``` -$ cd jdk-11.0.12+7/bin -$ ./java -version -``` - -The version output of the JVM looks similar to this: - - -``` -openjdk version "11.0.12" 2021-07-20 -OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7) -OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode) -``` - -#### Environment variables - -To ensure that a given application works correctly, it needs to know exactly how to locate the JVM. Two main variables should be set: **JAVA_HOME** and **PATH**: - - -``` -$ echo $JAVA_HOME -$ echo $PATH -``` - -These can be set in the user's `.bashrc` file. Make sure that the variables come after [any existing code that sets **PATH**][5]: - - -``` -#Set the JAVA_HOME -export JAVA_HOME=~/java/jdk/jdk-11.0.12+7 -#Add the JAVA_HOME to the PATH -export PATH="$JAVA_HOME/bin:$PATH" -``` - -### Manual install situations - -Different situations require a manual installation of Java. Consider the following three scenarios. - -One situation could be a requirement for a different, perhaps older, version of Java that is not available in your Linux distribution's software repositories. - -Another example could be a security-driven decision that Java will not be installed on an operating system by default or at the "root level." - -A third situation could be the need for several different versions of Java, usually because multiple instances of a J2EE web application are running on the same server. This OS sharing is less common today due to the increased usage of virtual machines and containers to isolate processes. However, the need to maintain varying container images continues to make the understanding of manual installation vital. - -### Wrap up - -I demonstrated how I like to install the Java runtime environment but feel free to make up a convention that works best for your needs. Ultimately, manual installation provides the user with the highest level of control over the Java runtime environment. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/9/install-java-manually-linux - -作者:[Alan Formy-Duval][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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/car-penguin-drive-linux-yellow.png?itok=twWGlYAc (Penguin driving a car with a yellow background) -[2]: https://developers.redhat.com/products/openjdk/download -[3]: https://adoptium.net/%20%22https://Adoptium.net%22 -[4]: https://www.azul.com/downloads/zulu-community%20%22https://www.azul.com/downloads/zulu-community%22 -[5]: https://opensource.com/article/17/6/set-path-linux diff --git a/translated/tech/20210929 Install Java manually on Linux.md b/translated/tech/20210929 Install Java manually on Linux.md new file mode 100644 index 0000000000..0bfee62ddd --- /dev/null +++ b/translated/tech/20210929 Install Java manually on Linux.md @@ -0,0 +1,118 @@ +[#]: subject: "Install Java manually on Linux" +[#]: via: "https://opensource.com/article/21/9/install-java-manually-linux" +[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss" +[#]: collector: "lujun9972" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: " " +[#]: url: " " + +如何在 Linux 上手动安装 Java +====== + +> 手动安装可以让用户更好的控制 Java 运行时环境。 + +![](https://img.linux.net.cn/data/attachment/album/202110/10/143844wm2x4d18b1mb8md1.jpg) + +[使用 Linux 发行版的软件包管理工具来安装 Java 软件包][6] 是很容易的。然而,有时你需要手动安装 Java。这对基于 Java 的应用服务器(如 Tomcat 或 JBoss)的管理员特别重要。许多开源和专有软件产品都依赖于这些服务。 + +### 开发者或运行时套件? + +Java 虚拟机Java Virtual Machine(JVM)以两种不同的形式提供:Java 开发工具包Java Development Kit(JDK)或 Java 运行时环境Java Runtime Environment(JRE)。 + +软件开发人员通常需要 JDK。它包含编译、运行和测试源代码所需的二进制文件。部署一个预先建立的 Java 应用程序通常只需要 JRE。它不包括编译器和其他开发工具。由于安全性的提高和空间的限制,通常在生产环境中安装 JRE。 + +### 获取 Java + +你可以从网上下载开源的 Java 软件。你可以在 [Red Hat Developer][2]、[Adoptium.net][3] 下载 OpenJDK 打包文件,或从 Azul 下载 [Zulu 社区版][4] 。 + +### 安装 Java + +设置一个目录来存放 Java 文件。我喜欢创建一个简单的名为 `java` 的目录,这样我就可以在一个专门的目录中下载并解压打包文件: + +``` +$ mkdir -p java/jdk +``` + +让我们在这个例子中使用 JDK。将下载的文件保存到 `jdk` 目录下。然后换到该目录: + +``` +$ cd java/jdk +$ ls +OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz +``` + +提取该打包文件。注意,`tar` 会创建一个新的目录: + +``` +$ tar xvzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz +$ ls +jdk-11.0.12+7 OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz +``` + +使用 `-version` 选项确认新 JVM 的版本。 + +``` +$ cd jdk-11.0.12+7/bin +$ ./java -version +``` + +JVM 的版本输出看起来类似这样: + +``` +openjdk version "11.0.12" 2021-07-20 +OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7) +OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode) +``` + +#### 环境变量 + +为了确保一个特定的应用程序能够正常工作,它需要确切地知道如何定位 JVM。有两个主要的变量需要设置:`JAVA_HOME` 和 `PATH`。 + +``` +$ echo $JAVA_HOME +$ echo $PATH +``` + +这些可以在用户的 `.bashrc` 文件中设置。确保这些变量出现在 [任何设置 PATH 的现有代码][5] 之后: + +``` +#Set the JAVA_HOME +export JAVA_HOME=~/java/jdk/jdk-11.0.12+7 +#Add the JAVA_HOME to the PATH +export PATH="$JAVA_HOME/bin:$PATH" +``` + +### 手动安装的情况 + +有几种情况需要手动安装 Java。请考虑以下三种情况: + +一种情况可能是要求使用不同的,也许是较早的,在你的 Linux 发行版的软件库中已经没有的 Java 版本。 + +另一个例子可能是由安全推动的决定,即 Java 不会被默认安装在操作系统上或在“根级别”上。 + +第三种情况是可能需要几个不同版本的 Java,通常是因为 J2EE Web 应用程序的多个实例在同一台服务器上运行。由于越来越多地使用虚拟机和容器来隔离进程,这种操作系统共享在今天已经不太常见了。然而,由于需要维护不同的容器镜像,对手动安装的理解仍然至关重要。 + +### 总结 + +我演示了我手动安装 Java 运行时环境的方式,但你可以制定一个最适合你需求的惯例。最终,手动安装让用户可以更好的控制 Java 运行时环境。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/9/install-java-manually-linux + +作者:[Alan Formy-Duval][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/alanfdoss +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/car-penguin-drive-linux-yellow.png?itok=twWGlYAc (Penguin driving a car with a yellow background) +[2]: https://developers.redhat.com/products/openjdk/download +[3]: https://adoptium.net/ +[4]: https://www.azul.com/downloads/zulu-community +[5]: https://opensource.com/article/17/6/set-path-linux +[6]: https://linux.cn/article-13864-1.html \ No newline at end of file From d510d3fa141c4ac9cf2a28b557238e844abd83b7 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 10 Oct 2021 14:41:14 +0800 Subject: [PATCH 141/143] PUB @wxy https://linux.cn/article-13869-1.html --- .../20210929 Install Java manually on Linux.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename {translated/tech => published}/20210929 Install Java manually on Linux.md (98%) diff --git a/translated/tech/20210929 Install Java manually on Linux.md b/published/20210929 Install Java manually on Linux.md similarity index 98% rename from translated/tech/20210929 Install Java manually on Linux.md rename to published/20210929 Install Java manually on Linux.md index 0bfee62ddd..32ba846089 100644 --- a/translated/tech/20210929 Install Java manually on Linux.md +++ b/published/20210929 Install Java manually on Linux.md @@ -4,8 +4,8 @@ [#]: collector: "lujun9972" [#]: translator: "wxy" [#]: reviewer: "wxy" -[#]: publisher: " " -[#]: url: " " +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13869-1.html" 如何在 Linux 上手动安装 Java ====== From 67f85d5eeb50209847cc95bbd6224490f82e1114 Mon Sep 17 00:00:00 2001 From: geekpi Date: Mon, 11 Oct 2021 08:58:16 +0800 Subject: [PATCH 142/143] translated --- ...a deGoogled Alternative to Google Drive.md | 77 ------------------- ...a deGoogled Alternative to Google Drive.md | 72 +++++++++++++++++ 2 files changed, 72 insertions(+), 77 deletions(-) delete mode 100644 sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md create mode 100644 translated/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md diff --git a/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md b/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md deleted file mode 100644 index 496e8212b5..0000000000 --- a/sources/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md +++ /dev/null @@ -1,77 +0,0 @@ -[#]: 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: " " -[#]: publisher: " " -[#]: url: " " - -/e/ cloud is a deGoogled Alternative to Google Drive -====== - -Google Drive is a popular cloud storage service that works great for the most part. - -However, it may not be the most private option out there. So, to take total control of your data, the best way is to spin up a [Nextcloud][1] instance and store your essential data while getting access to other collaboration tools. - -While that sounds good to hear, not everyone can put the effort to create and maintain their instance. This is where ecloud comes in—built by the same team behind [**/e/ OS**, the de-googled Android operating system][2]. - -ecloud pitches itself primarily as a new private alternative to Google Drive and offers a mailbox to replace Gmail. - -### /e/ cloud: Nextcloud & OnlyOffice With Mailbox - -![][3] - -When you create an /e/ account, it gives you a private email address **[xyz@e.email][4]** - -And, along with the email address, you get **1 GB** free ecloud storage space and a collaboration platform powered by Nextcloud and OnlyOffice at its core. - -So, if you want to utilize Nextcloud and OnlyOffice to replace Google’s suite of tools without setting it up all yourself, /e/ cloud can be a compelling privacy-centric choice. - -![][5] - -In addition to the file storage and document support with OnlyOffice, you can also use a calendar, store notes, and add tasks. - -Hence, it can also be a decent privacy-focused collaboration platform that you can use for free. - -If you want more storage, you can upgrade your subscription to a paid plan where you opt for 20 to 1 TB of storage as required with monthly/yearly billing options. The pricing plans start as low as **$3/month**. - -Undoubtedly, it should be a seamless experience if you are using /e/ OS on your phone or a /e/ smartphone. - -But, you can also use it on any device using third-party mail clients and the Nextcloud mobile app. - -[Sign Up for /e/ cloud][6] - -### Wrapping Up - -Considering it is relatively new, several features are planned to be added that include end-to-end encryption, migration from Google Drive, and more. - -You can sign up for an account and try it out free. - -_What do you think about a mainstream solution like /e/ cloud that uses Nextcloud at its core to help you manage/store files securely in addition to email and collaboration services?_ - -#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! - -If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. - -I'm not interested - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/e-cloud/ - -作者:[Ankush Das][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [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]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4NCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[4]: mailto:xyz@e.email -[5]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM5MiIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= -[6]: https://e.foundation/e-email-invite/ diff --git a/translated/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md b/translated/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md new file mode 100644 index 0000000000..0abef81544 --- /dev/null +++ b/translated/tech/20211001 -e- cloud is a deGoogled Alternative to Google Drive.md @@ -0,0 +1,72 @@ +[#]: 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: " " +[#]: publisher: " " +[#]: url: " " + +/e/ cloud 是一个去谷歌化的 Google Drive 替代方案 +====== + +Google Drive 是一种流行的云存储服务,在大多数情况下效果很好。 + +然而,它可能不是最隐私的选择。因此,要完全控制你的数据,最好的办法是启动一个 [Nextcloud][1] 实例,存储你的基本数据,同时访问其他协作工具。 + +虽然这听起来不错,但不是每个人都能投入精力来创建和维护他们的实例。这就是 ecloud 上场的时候了,它是由 [**/e/ OS**,一个去谷歌化的安卓操作系统][2]背后的同一个团队建立的。 + +ecloud 主要将自己定位为 Google Drive 的一个新的私人替代品,并提供一个邮箱来取代 Gmail。 + +### /e/ cloud:带邮箱的 Nextcloud 及 OnlyOffice + +![][3] + +当你创建一个 /e/ 账户时,它会给你一个私人电子邮件地址 **[xyz@e.email][4]**。 + +而且,同邮箱地址一起,你会得到 **1GB** 的免费 ecloud 存储空间和一个由 Nextcloud 和 OnlyOffice 为核心的协作平台。 + +因此,如果你想利用 Nextcloud 和 OnlyOffice 来取代谷歌的工具套件,而不需要自己全部设置,/e/ cloud 可以成为一个引人注目的以隐私为中心的选择。 + +![][5] + +除了 OnlyOffice 的文件存储和文档支持外,你还可以使用日历,存储笔记,并添加任务。 + +因此,它也可以成为一个体面的以隐私为中心的协作平台,你可以免费使用。 + +如果你想要更多的存储空间,你可以将你的订阅升级到付费计划,你可以根据需要选择 20 到 1TB 的存储空间,并按月/年计费。定价计划起价低至 **3 美元/月**。 + +毫无疑问,如果你在手机上使用 /e/ 操作系统或 /e/ 智能手机,这应该是一种无缝体验。 + +但是,你也可以使用第三方邮件客户端和 Nextcloud 移动应用在任何设备上使用它。 + +[Sign Up for /e/ cloud][6] + +### 总结 + +考虑到它相对较新,计划增加几个功能,包括端到端加密,从 Google Drive 迁移等。 + +你可以注册一个帐户并免费试用。 + +_你认为像 /e/ cloud 这样以 Nextcloud 为核心的主流解决方案,除了电子邮件和协作服务外,还能帮助你安全地管理/存储文件吗?_ + + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/e-cloud/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [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]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM4NCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[4]: mailto:xyz@e.email +[5]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjM5MiIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[6]: https://e.foundation/e-email-invite/ From decfb789d495ec6acd0cb8546ba22e37145d2386 Mon Sep 17 00:00:00 2001 From: geekpi Date: Mon, 11 Oct 2021 09:04:36 +0800 Subject: [PATCH 143/143] translating --- .../20210930 How I use Ansible and anacron for automation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210930 How I use Ansible and anacron for automation.md b/sources/tech/20210930 How I use Ansible and anacron for automation.md index 78de59d790..7df9a4d6be 100644 --- a/sources/tech/20210930 How I use Ansible and anacron for automation.md +++ b/sources/tech/20210930 How I use Ansible and anacron for automation.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/9/ansible-anacron-automation" [#]: author: "Seth Kenlon https://opensource.com/users/seth" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " "