Merge branch 'master' of https://github.com/LCTT/TranslateProject into translating

This commit is contained in:
geekpi 2020-02-03 10:02:16 +08:00
commit 45ed0f4b54
10 changed files with 765 additions and 306 deletions

View File

@ -1,8 +1,8 @@
[#]: collector: (lujun9972)
[#]: translator: (wxy)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11841-1.html)
[#]: subject: (My favorite Bash hacks)
[#]: via: (https://opensource.com/article/20/1/bash-scripts-aliases)
[#]: author: (Katie McLaughlin https://opensource.com/users/glasnt)
@ -14,13 +14,13 @@
![bash logo on green background][1]
要是你整天使用计算机,如果能找到可重复的命令并标记它们,以便以后轻松使用那就太棒了。它们全都在那里,藏在 `~/.bashrc` 中(或 [zsh 用户][2]的 `~/.zshrc` 中),等待着改善你的生活!
要是你整天使用计算机,如果能找到需要重复执行的命令并记下它们以便以后轻松使用那就太棒了。它们全都在那里,藏在 `~/.bashrc` 中(或 [zsh 用户][2]的 `~/.zshrc` 中),等待着改善你的生活!
在本文中,我分享了我最喜欢的这些辅助命令,它们可以帮助我避免一些遗忘的事情,也希望可以帮助到你,以及为你解决一些越来越头疼的问题。
在本文中,我分享了我最喜欢的这些助手命令,对于我经常遗忘的事情,它们很有用,也希望这可以帮助到你,以及为你解决一些经常头疼的问题。
### 完事一声
### 完事一声
当我执行一个需要长时间运行的命令时,我经常采用多任务的方式,然后必须回过去检查该操作是否已完成。 然而通过有用的 `say`,现在就不用再这样了(这是在 MacOS 上;更改为本地环境等效的方式):
当我执行一个需要长时间运行的命令时,我经常采用多任务的方式,然后就必须回头去检查该操作是否已完成。然而通过有用的 `say` 命令,现在就不用再这样了(这是在 MacOS 上;请根据你的本地环境更改为等效的方式):
```
function looooooooong {
@ -36,11 +36,11 @@ function looooooooong {
}
```
这个命令会记命令的开始和结束时间,计算所需的分钟数,并说出调用的命令、花费的时间和退出码。当简单的控制台铃声无法使用时,我发现这个超级有用。
这个命令会记命令的开始和结束时间,计算所需的分钟数,并出调用的命令、花费的时间和退出码。当简单的控制台铃声无法使用时,我发现这个超级有用。
### 安装小助手
我在小时候就开始使用 Ubuntu而我需要学习的第一件事是如何安装软件包。我曾经添加的第一个别名之一是它的助手(根据当天的流行梗命名的):
我在小时候就开始使用 Ubuntu而我需要学习的第一件事是如何安装软件包。我曾经首先添加的别名之一是它的助手(根据当天的流行梗命名的):
```
alias canhas="sudo apt-get install -y"
@ -48,7 +48,7 @@ alias canhas="sudo apt-get install -y"
### GPG 签名
有时候,我必须在没有扩展程序或应用程序的情况下给电子邮件签署 [GPG][3] 签名,我会跳到命令行并使用以下令人讨厌的别名:
有时候,我必须在没有 GPG 扩展程序或应用程序的情况下给电子邮件签署 [GPG][3] 签名,我会跳到命令行并使用以下令人讨厌的别名:
```
alias gibson="gpg --encrypt --sign --armor"
@ -57,7 +57,7 @@ alias ungibson="gpg --decrypt"
### Docker
Docker 命令很多,但是 Docker compose 命令更多。我曾经使用这些别名来忘记 `--rm` 标志,但是现在不再使用这些有用的别名了:
Docker 的子命令很多,但是 Docker compose 的更多。我曾经使用这些别名来将 `--rm` 标志丢到脑后,但是现在不再使用这些有用的别名了:
```
alias dc="docker-compose"
@ -65,15 +65,15 @@ alias dcr="docker-compose run --rm"
alias dcb="docker-compose run --rm --build"
```
### Google Cloud 的 gcurl 辅助程序
### Google Cloud 的 gcurl 助手
对于我来说Google Cloud 是一个相对较新的东西,而它有[极多的文档][4]。gcurl 是一个别名,可确保在用带有身份验证标头的本地 curl 命令连接 Google Cloud API 时,可以获得所有正确的标头。
对于我来说Google Cloud 是一个相对较新的东西,而它有[极多的文档][4]。`gcurl` 是一个别名,可确保在用带有身份验证标头的本地 `curl` 命令连接 Google Cloud API 时,可以获得所有正确的标头。
### Git 和 ~/.gitignore
我工作中用 Git 很多,因此我有一个专门的部分来介绍 Git 的辅助程序
我工作中用 Git 很多,因此我有一个专门的部分来介绍 Git 助手
我最有用的辅助程序之一是我用来克隆 GitHub 存储库的助手。你不必运行:
我最有用的助手之一是我用来克隆 GitHub 存储库的。你不必运行:
```
git clone git@github.com:org/repo /Users/glasnt/git/org/repo
@ -90,14 +90,13 @@ clone(){
}
```
即使每次进入 `~/.bashrc` 文件时,我总是会忘记和傻笑,我也有一个“刷新上游”命令:
即使每次进入 `~/.bashrc` 文件看到这个时,我总是会忘记和傻笑,我也有一个“刷新上游”命令:
```
alias yoink="git checkout master && git fetch upstream master && git merge upstream/master"
```
给 Git 人的另一个辅助程序是全局忽略文件。在你的 `git config --global --list` 中,你应该看到一个 `core.excludesfile`。如果没有,请[创建一个][6],然后将你总是放到各个 `.gitignore` 文件中的内容填满它。作为 MacOS 上的 Python 开发人员,对我来说,这写内容是:
给 Git 一族的另一个助手是全局忽略文件。在你的 `git config --global --list` 中,你应该看到一个 `core.excludesfile`。如果没有,请[创建一个][6],然后将你总是放到各个 `.gitignore` 文件中的内容填满它。作为 MacOS 上的 Python 开发人员,对我来说,这些内容是:
```
.DS_Store     # macOS clutter
@ -107,11 +106,11 @@ __pycache__   # ... or source
*.swp         # ... nor any files open in vim
```
你可以在 [Gitignore.io][7] 或 GitHub 上的 [Gitignore 存储库][8]上找到其他建议。
你可以在 [Gitignore.io][7] 或 GitHub 上的 [Gitignore 存储库][8]上找到其他建议。
### 轮到你了
你最喜欢的辅助程序命令是什么?请在评论中分享。
你最喜欢的助手命令是什么?请在评论中分享。
--------------------------------------------------------------------------------
@ -120,7 +119,7 @@ via: https://opensource.com/article/20/1/bash-scripts-aliases
作者:[Katie McLaughlin][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/) 荣誉推出

View File

@ -0,0 +1,62 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (IBM's CEO Virginia Rometty to be replaced by its cloud, Red Hat chiefs)
[#]: via: (https://www.networkworld.com/article/3518795/ibms-ceo-virginia-rometty-to-be-replaced-by-its-cloud-red-hat-chiefs.html)
[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/)
IBM's CEO Virginia Rometty to be replaced by its cloud, Red Hat chiefs
======
IBM cloud leader Arvind Krishna and Red Hat CEO Jim Whitehurst, to take reins from long-time CEO
IBM
If anyone was still wondering how serious IBM is about being a major cloud player that question was resoundly answered this week when its current cloud and cognitive-software leader Arvind Krishna and Red Hat CEO Jim Whitehurst to be CEO and president, respectively, to replace long-time CEO Virginia Rometty.
Krishna, 57, was a principal architect of IBMs $34 billion acquisition of Red Hat last year and is currently IBMs senior vice president of Cloud and Cognitive Software, which has become the companys palpable future.   
[[Get regularly scheduled insights by signing up for Network World newsletters.]][1]
The [Red Hat acquisition][2] not only made Big Blue a bigger open-source and enterprise-software player, but mostly it got IBM into the lucrative hybrid-cloud business, targeting huge cloud competitor Google, Amazon and Microsoft among others. Gartner says that market will be worth $240 billion by next year.
[][3]
BrandPost Sponsored by HPE
[Take the Intelligent Route with Consumption-Based Storage][3]
Combine the agility and economics of HPE storage with HPE GreenLake and run your IT department with efficiency.
In its most recent financial call IBM talked-up the successes of its cloud and Red Hat growth. For example its total cloud revenue of $6.8 billion was up 21% year over year, and Red Hats normalized revenue was up 24%, eclipsing $1 billion in a quarter for the first time, IBM stated.
“The next chapter of cloud will be driven by mission-critical workloads managed in a hybrid, multi-cloud environment. This will be based on a foundation of Linux, with containers and Kubernetes. This quarter we had strong performance in RHEL and OpenShift,”  said Jim Kavanaugh IBM senior vice president and chief financial officer (a full transcript of that financial call is available from Seeking Alpha [here][4].)  “As we look forward, the largest hybrid-cloud opportunity is in services, advising clients on architectural choices, moving workloads, building new applications and of course managing them.”
In announcing the leadershiop transition, which will occur April 6, [Rometty wrote of Krishna][5]: "He is a brilliant technologist who has played a significant role in developing our key technologies such as artificial intelligence, cloud, quantum computing and blockchain.  He is also a superb operational leader, able to win today while building the business of tomorrow."
Under Rometty, who was named CEO in 2012, IBM has acquired 65 companies, reinvented more than 50% of IBM's portfolio, built a $21 billion hybrid-cloud business and established IBM's position in AI, quantum computing and blockchain, IBM stated. Rometty will remain as executive chairman until the end of 2020 and then retire after some 40 years at the company. 
Meanwhile, Rometty had this to say about Whitehurst, 52, who is currently IBM senior vice president and CEO of Red Hat: "Jim is also a seasoned leader who has positioned Red Hat as the world's leading provider of open-source enterprise IT software solutions and services, and has been quickly expanding the reach and benefit of that technology to an even wider audience as part of IBM.”
Join the Network World communities on [Facebook][6] and [LinkedIn][7] to comment on topics that are top of mind.
--------------------------------------------------------------------------------
via: https://www.networkworld.com/article/3518795/ibms-ceo-virginia-rometty-to-be-replaced-by-its-cloud-red-hat-chiefs.html
作者:[Michael Cooney][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://www.networkworld.com/author/Michael-Cooney/
[b]: https://github.com/lujun9972
[1]: https://www.networkworld.com/newsletters/signup.html
[2]: https://www.networkworld.com/article/3317517/the-ibm-red-hat-deal-what-it-means-for-enterprises.html
[3]: https://www.networkworld.com/article/3440100/take-the-intelligent-route-with-consumption-based-storage.html?utm_source=IDG&utm_medium=promotions&utm_campaign=HPE21620&utm_content=sidebar ( Take the Intelligent Route with Consumption-Based Storage)
[4]: https://seekingalpha.com/article/4318204-international-business-machines-corporation-ibm-q4-2019-results-earnings-call-transcript
[5]: https://newsroom.ibm.com/2020-01-30-Arvind-Krishna-Elected-IBM-Chief-Executive-Officer
[6]: https://www.facebook.com/NetworkWorld/
[7]: https://www.linkedin.com/company/network-world

View File

@ -1,227 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: (robsean)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to Go About Linux Boot Time Optimisation)
[#]: via: (https://opensourceforu.com/2019/10/how-to-go-about-linux-boot-time-optimisation/)
[#]: author: (B Thangaraju https://opensourceforu.com/author/b-thangaraju/)
How to Go About Linux Boot Time Optimisation
======
[![][1]][2]
_Booting an embedded device or a piece of telecommunication equipment quickly is crucial for time-critical applications and also plays a very major role in improving the user experience. This article gives some important tips on how to enhance the boot-up time of any device._
Fast booting or fast rebooting plays a crucial role in various situations. It is critical for an embedded system to boot up fast in order to maintain the high availability and better performance of all the services. Imagine a telecommunications device running a Linux operating system that does not have fast booting enabled. All the systems, services and the users dependent on that particular embedded device might be affected. It is really important that devices maintain high availability in their services, for which fast booting and rebooting play a crucial role.
A small failure or shutdown of a telecom device, even for a few seconds, can play havoc with countless users working on the Internet. Thus, it is really important for a lot of time-dependent devices and telecommunication devices to incorporate fast booting in their devices to help them get back to work quicker. Let us understand the Linux boot-up procedure from Figure 1.
![Figure 1: Boot-up procedure][3]
![Figure 2: Boot chart][4]
**Monitoring tools and the boot-up procedure**
A user should take note of a number of factors before making changes to a machine. These include the current booting speed of the machine and also the services, processes or applications that are taking up resources and increasing the boot-up time.
**Boot chart:** To monitor the boot-up speed and the various services that start while booting up, the user can install the boot chart using the following command:
```
sudo apt-get install pybootchartgui.
```
Each time you boot up, the boot chart saves a _.png_ (portable network graphics) file in the log, which enables the user to view the _png_ files to get an understanding about the systems boot-up process and services. Use the following command for this purpose:
```
cd /var/log/bootchart
```
The user might need an application to view the _.png_ files. Feh is an X11 image viewer that targets console users. It doesnt have a fancy GUI, unlike most other image viewers, but it simply displays pictures. Feh can be used to view the _.png_ files. You can install it using the following command:
```
sudo apt-get install feh
```
You can view the _png_ files using _feh xxxx.png_.
Figure 2 shows the boot chart when a boot chart _png_ file is viewed.
However, a boot chart is not necessary for Ubuntu versions later than 15.10. To get very brief information regarding boot up speed, use the following command:
```
systemd-analyze
```
![Figure 3: Output of systemd-analyze][5]
Figure 3 shows the output of the command _systemd-analyze_.
The command _systemd-analyze_ blame is used to print a list of all running units based on the time they took to initialise. This information is very helpful and can be used to optimise boot-up times. systemd-analyze blame doesnt display results for services with _Type=simple_, because systemd considers such services to be started immediately; hence, no measurement of the initialisation delays can be done.
![Figure 4: Output of systemd-analyze blame][6]
Figure 4 shows the output of _systemd-analyze_ blame.
The following command prints a tree of the time-critical chain of units:
```
command systemd-analyze critical-chain
```
Figure 5 shows the output of the command _systemd-analyze critical-chain_.
![Figure 5: Output of systemd-analyze critical-chain][7]
**Steps to reduce the boot-up time**
Shown below are the various steps that can be taken to reduce boot-up time.
**BUM (Boot-Up-Manager):** BUM is a run level configuration editor that allows the configuration of _init_ services when the system boots up or reboots. It displays a list of every service that can be started at boot. The user can toggle individual services on and off. BUM has a very clean GUI and is very easy to use.
BUM can be installed in Ubuntu 14.04 using the following command:
```
sudo apt-get install bum
```
To install it in versions later than 15.10, download the packages from the link _<http://apt.ubuntu.com/p/bum> 13_.
Start with basic things and disable services related to the scanner and printer. You can also disable Bluetooth and all other unwanted devices and services if you are not using any of them. I strongly recommend that you study the basics about the services before disabling them, as it might affect the machine or operating system. Figure 6 shows the GUI of BUM.
![Figure 6: BUM][8]
**Editing the rc file:** To edit the rc file, you need to go to the rc directory. This can be done using the following command:
```
cd /etc/init.d.
```
However, root privileges are needed to access _init.d_, which basically contains start/stop scripts that are used to control (start, stop, reload, restart) the daemon while the system is running or during boot.
The _rc_ file in _init.d_ is called a run control script. During booting, init executes the _rc_ script and plays its role. To improve the booting speed, we make changes to the _rc_ file. Open the _rc_ file (once you are in the _init.d_ directory) using any file editor.
For example, by entering _vim rc_, you can change the value of _CONCURRENCY=none_ to _CONCURRENCY=shell_. The latter allows certain startup scripts to be executed simultaneously, rather than serially.
In the latest versions of the kernel, the value should be changed to _CONCURRENCY=makefile_.
Figures 7 and 8 show the comparison of boot-up times before and after editing the rc file. The improvement in the boot-up speed can be noticed. The time to boot before editing the rc file was 50.98 seconds, whereas the time to boot after making the changes to the rc file is 23.85 seconds.
However, the above-mentioned changes dont work on operating systems later than the Ubuntu version 15.10, since the operating systems with the latest kernel use the systemd file and not the _init.d_ file any more.
![Figure 7: Boot speed before making changes to the rc file][9]
![Figure 8: Boot speed after making changes to the rc file][10]
**E4rat:** E4rat stands for e4 reduced access time (ext4 file system only). It is a project developed by Andreas Rid and Gundolf Kiefer. E4rat is an application that helps in achieving a fast boot with the help of defragmentation. It also accelerates application startups. E4rat eliminates both seek times and rotational delays using physical file reallocation. This leads to a high disk transfer rate.
E4rat is available as a .deb package and you can download it from its official website _<http://e4rat.sourceforge.net/>_.
Ubuntus default ureadahead package conflicts with e4rat. So a few packages have to be installed using the following command:
```
sudo dpkg purge ureadahead ubuntu-minimal
```
Now install the dependencies for e4rat using the following command:
```
sudo apt-get install libblkid1 e2fslibs
```
Open the downloaded _.deb_ file and install it. Boot data is now needed to be gathered properly to work with e4rat.
Follow the steps given below to get e4rat running properly and to increase the boot-up speed.
* Access the Grub menu while booting. This can be done by holding the shift button when the system is booting.
* Choose the option (kernel version) that is normally used to boot and press e.
* Look for the line starting with _linux /boot/vmlinuz_ and add the following code at the end of the line (hit space after the last letter of the sentence):
```
- init=/sbin/e4rat-collect or try - quiet splash vt.handsoff =7 init=/sbin/e4rat-collect
```
* Now press _Ctrl+x_ to continue booting. This lets e4rat collect data after booting. Work on the machine, open and close applications for the next two minutes.
* Access the log file by going to the e4rat folder and using the following command:
```
cd /var/log/e4rat
```
* If you do not find any log file, repeat the above mentioned process. Once the log file is there, access the Grub menu again and press e as your option.
* Enter single at the end of the same line that you have edited before. This will help you access the command line. If a different menu appears asking for anything, choose Resume normal boot. If you dont get to the command prompt for some reason, hit Ctrl+Alt+F1.
* Enter your details once you see the login prompt.
* Now enter the following command:
```
sudo e4rat-realloc /var/lib/e4rat/startup.log
```
This process takes a while, depending on the machines disk speed.
* Now restart your machine using the following command:
```
sudo shutdown -r now
```
* Now, we need to configure Grub to run e4rat at every boot.
* Access the grub file using any editor. For example, _gksu gedit /etc/default/grub._
* Look for a line starting with _GRUB CMDLINE LINUX DEFAULT=_, and add the following line in between the quotes and before whatever options there are:
```
init=/sbin/e4rat-preload 18
```
* It should look like this:
```
GRUB CMDLINE LINUX DEFAULT = init=/sbin/e4rat- preload quiet splash
```
* Save and close the Grub menu and update Grub using _sudo update-grub_.
* Reboot the system and you will find noticeable changes in boot speed.
Figures 9 and 10 show the differences between the boot-up time before and after installing e4rat. The improvement in the boot-up speed can be noticed. The time taken to boot before using e4rat was 22.32 seconds, whereas the time taken to boot after using e4rat is 9.065 seconds
![Figure 9: Boot speed before using e4rat][11]
![Figure 10: Boot speed after using e4rat][12]
**A few simple tweaks**
A good boot-up speed can also be achieved using very small tweaks, two of which are listed below.
**SSD:** Using solid-state devices rather than normal hard disks or other storage devices will surely improve your booting speed. SSDs also help in achieving great speeds in transferring files and running applications.
**Disabling GUI:** The graphical user interface, desktop graphics and window animations take up a lot of resources. Disabling the GUI is another good way to achieve great boot-up speed.
--------------------------------------------------------------------------------
via: https://opensourceforu.com/2019/10/how-to-go-about-linux-boot-time-optimisation/
作者:[B Thangaraju][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://opensourceforu.com/author/b-thangaraju/
[b]: https://github.com/lujun9972
[1]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/Screenshot-from-2019-10-07-13-16-32.png?resize=696%2C496&ssl=1 (Screenshot from 2019-10-07 13-16-32)
[2]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/Screenshot-from-2019-10-07-13-16-32.png?fit=700%2C499&ssl=1
[3]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-1.png?resize=350%2C302&ssl=1
[4]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-2.png?resize=350%2C412&ssl=1
[5]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-3.png?resize=350%2C69&ssl=1
[6]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-4.png?resize=350%2C535&ssl=1
[7]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-5.png?resize=350%2C206&ssl=1
[8]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-6.png?resize=350%2C449&ssl=1
[9]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-7.png?resize=350%2C85&ssl=1
[10]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-8.png?resize=350%2C72&ssl=1
[11]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-9.png?resize=350%2C61&ssl=1
[12]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-10.png?resize=350%2C61&ssl=1

View File

@ -1,5 +1,5 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: translator: (mengxinayan)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
@ -396,7 +396,7 @@ via: https://www.2daygeek.com/linux-commands-check-memory-usage/
作者:[Magesh Maruthamuthu][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
译者:[萌新阿岩](https://github.com/mengxinayan)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,56 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: (LazyWolfLin)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (What's your favorite Linux distribution?)
[#]: via: (https://opensource.com/article/20/1/favorite-linux-distribution)
[#]: author: (Opensource.com https://opensource.com/users/admin)
What's your favorite Linux distribution?
======
Take our 7th annual poll to let us know your preference in Linux
distribution.
![Hand putting a Linux file folder into a drawer][1]
What's your favorite Linux distribution? Take our 7th annual poll. Some have come and gone, but there are hundreds of [Linux distributions][2] alive and well today. The combination of distribution, package manager, and desktop creates an endless amount of customized environments for Linux users.
We asked the community of writers what their favorite is and why. While there were some commonalities (Fedora and Ubuntu were popular choices for a variety of reasons), we heard a few surprises as well. Here are a few of their responses:
"I use the Fedora distro! I love the community of people who work together to make an awesome operating system that showcases the greatest innovations in the free and open source software world." — Matthew Miller
"I use Arch at home. As a gamer, I want easy access to the latest Wine versions and GFX drivers, as well as large amounts of control over my OS. Give me a rolling-release distro with every package at bleeding-edge." —Aimi Hobson
"NixOS, with nothing coming close in the hobbyist niche." —Alexander Sosedkin
"I have used every Fedora version as my primary work OS. Meaning, I started with the first one. Early on, I asked myself if there would ever come a time when I couldn't remember which number I was on. That time has arrived. What year is it, anyway?" —Hugh Brock
"I usually have Ubuntu, CentOS, and Fedora boxes running around the house and the office. We depend on all of these distributions for various things. Fedora for speed and getting the latest versions of applications and libraries. Ubuntu for those that need easy of use with a large community of support. CentOS when we need a rock-solid server platform that just runs." —Steve Morris
"My favorite? For the community, and how packages are built for the distribution (from source, not binaries), I choose Fedora. For pure breadth of packages available and elegance in how packages are defined and developed, I choose Debian. For documentation, I choose Arch. For newbies that ask, I used to recommend Ubuntu but now recommend Fedora." —Al Stone
* * *
We've been asking the community this question since 2014. With the exception of PCLinuxOS taking the lead in 2015, Ubuntu tends to be the fan-favorite from year to year. Other popular contenders have been Fedora, Debian, Mint, and Arch. Which distribution stands out to you in the new decade? If we didn't include your favorite in the list of choices, tell us about it in the comments. 
Here's a look at your favorite Linux distributions throughout the last seven years. You can find this in our latest yearbook, [Best of a decade on Opensource.com][3]. To download the whole eBook, [click here][3]!
![Poll results for favorite Linux distribution through the years][4]
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/1/favorite-linux-distribution
作者:[Opensource.com][a]
选题:[lujun9972][b]
译者:[LazyWolfLin](https://github.com/LazyWolfLin)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/admin
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yearbook-haff-rx-linux-file-lead_0.png?itok=-i0NNfDC (Hand putting a Linux file folder into a drawer)
[2]: https://distrowatch.com/
[3]: https://opensource.com/downloads/2019-yearbook-special-edition
[4]: https://opensource.com/sites/default/files/pictures/linux-distributions-through-the-years.jpg (favorite Linux distribution through the years)

View File

@ -0,0 +1,77 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (ProtonVPN adopts GPLv3, Mozilla Thunderbird gets new home, and more news)
[#]: via: (https://opensource.com/article/20/2/news-february-1)
[#]: author: (Scott Nesbitt https://opensource.com/users/scottnesbitt)
ProtonVPN adopts GPLv3, Mozilla Thunderbird gets new home, and more news
======
Catch up on the biggest open source headlines from the past two weeks.
![][1]
In this edition of our open source news roundup, we take a look ProtonVPN apps going open, Microsoft's code analysis tool, Mozilla Thunderbird's new home, and more!
### ProtonVPN apps go open source
People wanting to use the internet securely and privately do the deed using a Virtual Private Network (VPN). But which VPNs can you really trust? The company behind the popular ProtonVPN service made a big move to gain that trust by [releasing the source code][2] for all its apps.
By making its apps open source, ProtonVPN is giving security experts the chance to "inspect its encryption implementations and how the company handles user data, giving users confidence that the company is adhering to its strict privacy policy." According to an [article at TechRadar][3], ProtonVPN also engaged "security firm SEC Consult on a full security audit that was able to verify the security of the company's software."
You can find the source code for the apps [on GitHub][4] and links to the audit reports [in this blog post][5].
### Mozilla Thunderbird gets a new home
What a difference a few years makes. When the Mozilla Foundation announced in 2015 that it was considering spinning off the Thunderbird email client, the software's adherents feared the worst. Since then, Thunderbird has persisted but its fate has also been up in the air. [That's changed][6] with the formation of MZLA Technologies Corporation.
MZLA Technologies is "a new wholly owned subsidiary of the Mozilla Foundation" that's the new home of the Thunderbird project. The move to the new corporation means that development will continue on the software and that move "wont have an impact on Thunderbirds day-to-day running." According to Thunderbird's Phillip Kewisch, shifting the project to MZLA Technologies enables it to "explore offering our users products and services that were not possible under the Mozilla Foundation."
### Encrypting the Internet of Things
The so-called Internet of Things (IoT) has promised so much. That promise has been lost under the weight of the often paper-thin security of IoT devices. Teserakt, a Swiss security firm, is trying turn that around with the [release of E4][7], a "cryptographic implant that IoT manufacturers can integrate into their servers."
Teserakt's CEO Jean-Philippe Aumasson said that E4 came about because there are "so many machines and entities that do not have the need to view or modify (data from IoT devices), so they shouldnt have access to it." E4 provides end-to-end encryption of data which bolsters "defenses for information in transit and offers protection against data interception and manipulation."
If you're interesting taking a peek at E4, you can do that in [Teserakt's GitHub repository][8].
#### In other news
* [Scientists working with Google just published the most detailed brain scans ever created][9]
* [AWS JPL open source rover challenge open to competitors][10]
* [Intel joins CHIPS Alliance, contributes advanced interface bus][11]
* [Why UK leaders need open technology for the disrupted future][12]
* [Microsoft open sources code analysis tool][13]
_Thanks, as always, to Opensource.com staff members and moderators for their help this week. Make sure to check out [our event calendar][14], to see what's happening next week in open source._
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/2/news-february-1
作者:[Scott Nesbitt][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/scottnesbitt
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/weekly_news_roundup_tv.png?itok=tibLvjBd
[2]: https://betanews.com/2020/01/21/protonvpn-open-source/
[3]: https://www.techradar.com/au/news/protonvpn-releases-source-code-and-undergoes-security-audit
[4]: https://github.com/ProtonVPN
[5]: https://protonvpn.com/blog/open-source/
[6]: https://blog.thunderbird.net/2020/01/thunderbirds-new-home/
[7]: https://www.wired.com/story/e4-iot-encryption/
[8]: https://github.com/teserakt-io/
[9]: https://thenextweb.com/artificial-intelligence/2020/01/22/scientists-working-with-google-just-published-the-most-detailed-brain-scans-ever-created/
[10]: https://www.therobotreport.com/aws-jpl-open-source-rover-challenge-open-to-competitors/
[11]: https://chipsalliance.org/announcement/2020/01/22/intel-joins-chips-alliance-to-promote-advanced-interface-bus-aib-as-an-open-standard/
[12]: https://www.information-age.com/leaders-open-technology-disrupted-future-123487150/
[13]: https://www.infoworld.com/article/3516147/microsoft-releases-open-source-source-code-analyzer.html
[14]: https://opensource.com/resources/conferences-and-events-monthly

View File

@ -0,0 +1,98 @@
[#]: collector: (lujun9972)
[#]: translator: (LazyWolfLin)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (4 Key Changes to Look Out for in Linux Kernel 5.6)
[#]: via: (https://itsfoss.com/linux-kernel-5-6/)
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
4 Key Changes to Look Out for in Linux Kernel 5.6
======
While weve already witnessed the stable release of Linux 5.5 with better hardware support, Linux 5.6 is next.
To be honest, Linux 5.6 is much more exciting than 5.5. Even though the upcoming Ubuntu 20.04 LTS release will feature Linux 5.5 out of the box, you should really know what Linux 5.6 kernel has in store for us.
In this article, Ill be highlighting the key changes and features that you can expect with Linux 5.6 release:
### Linux 5.6 features highlight
![][1]
Ill try to keep the list of features up-to-date whenever theres a piece of new information on Linux 5.6. But, for now, lets take a look at what we already know so far:
#### 1\. WireGuard Support
WireGuard will be added to Linux 5.6 potentially replacing [OpenVPN][2] for a variety of reasons.
You can learn more about [WireGuard][3] on their official site to know the benefits. Of course, if youve used it, you might be aware of the reasons why its potentially better than OpenVPN.
Also, [Ubuntu 20.04 LTS will be adding support for WireGuard][4].
#### 2\. USB4 Support
Linux 5.6 will also include the support of **USB4**.
In case you didnt know about USB 4.0 (USB4), you can read the [announcement post][5].
As per the announcement “_USB4 doubles the maximum aggregate bandwidth of USB and enables multiple simultaneous data and display protocols._“
Also, while we know that USB4 is based on the Thunderbolt protocol specification, it will be backward compatible with USB 2.0, USB 3.0, and Thunderbolt 3 which is great news.
#### 3\. F2FS Data Compression Using LZO/LZ4
Linux 5.6 will also come with the support for F2FS data compression using LZO/LZ4 algorithms.
In other words, it is just a new compression technique for the Linux file-system where you will be able to select particular file extensions.
#### 4\. Fixing the Year 2038 problem for 32-bit systems
Unix and Linux store the time value in a 32-bit signed integer format which has the maximum value of 2147483647. Beyond this number, due to integer overflow, the values will be stored as a negative number.
This means that for a 32-bit system, the time value cannot go beyond 2147483647 seconds after Jan. 1, 1970. In simpler terms, after 03:14:07 UTC on Jan. 19, 2038, due to integer overflow, the time will read as Dec. 13, 1901 instead of Jan. 19, 2038.
Linux kernel 5.6 has a fix for this problem so that 32-bit systems can run beyond the year 2038.
#### 5\. Improved Hardware Support
Obviously, with the next release, the hardware support will improve as well. The plan to support newer wireless peripherals will be a priority too.
The new kernel will also add the support for MX Master 3 mouse and other wireless Logitech products.
In addition to Logitech products, you can expect a lot of different hardware support as well (including the support for AMD GPUs, NVIDIA GPUs, and Intel Tiger Lake chipset support).
#### 6\. Other Changes
Also, in addition to all these major additions/support in Linux 5.6, there are several other changes that would be coming with the next kernel release:
* Improvements in AMD Zen temperature/power reporting
* A fix for AMD CPUs overheating in ASUS TUF laptops
* Open-source NVIDIA RTX 2000 “Turing” graphics support
* FSCRYPT inline encryption.
[Phoronix][6] tracked a lot of technical changes arriving with Linux 5.6. So, if youre curious about every bit of the changes involved in Linux 5.6, you can check for yourself.
Now that youve known about whats coming with Linux 5.6 release what do you think about it? Let me know your thoughts in the comments below.
--------------------------------------------------------------------------------
via: https://itsfoss.com/linux-kernel-5-6/
作者:[Ankush Das][a]
选题:[lujun9972][b]
译者:[LazyWolfLin](https://github.com/LazyWolfLin)
校对:[校对者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/2020/02/linux-kernel-5.6.jpg?ssl=1
[2]: https://openvpn.net/
[3]: https://www.wireguard.com/
[4]: https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-20.04-Adds-WireGuard
[5]: https://www.usb.org/sites/default/files/2019-09/USB-IF_USB4%20spec%20announcement_FINAL.pdf
[6]: https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.6-Spectacular

View File

@ -0,0 +1,217 @@
chenmu-kk is translating .
How the four components of a distributed tracing system work together
分布式追踪系统的四大功能模块如何协同工作
======
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/touch-tracing.jpg?itok=rOmsY-nU)
Ten years ago, essentially the only people thinking hard about distributed tracing were academics and a handful of large internet companies. Today, its turned into table stakes for any organization adopting microservices. The rationale is well-established: microservices fail in surprising and often spectacular ways, and distributed tracing is the best way to describe and diagnose those failures.
早在十年前,认真研究过分布式追踪基本上只有学者和一小部分大型互联网公司中的人。对于任何采用微服务的组织来说,它如今成为一种筹码。其公认的观点是:微服务通常会发生让人意想不到的错误,而分布式追踪则是描述和诊断那些错误的最好方法。
That said, if you set out to integrate distributed tracing into your own application, youll quickly realize that the term “Distributed Tracing” means different things to different people. Furthermore, the tracing ecosystem is crowded with partially-overlapping projects with similar charters. This article describes the four (potentially) independent components in distributed tracing, and how they fit together.
也就是说,一旦你准备将分布式追踪集成到你自己的应用程序中,你将很快意识到对于不同的人来说“分布式追踪”一词意味着不同的事物。此外,追踪生态系统挤满了具有相似内容的重叠项目。本文介绍了分布式追踪系统中四个(潜在的)独立的功能模块并描述了它们间将如何协同工作。
### Distributed tracing: A mental model
分布式追踪:一种思维模型
Most mental models for tracing descend from [Googles Dapper paper][1]. [OpenTracing][2] uses similar nouns and verbs, so we will borrow the terms from that project:
大多数追踪的思维模型来源于[Google的Dapper论文][1]。[OpenTracing][2]会使用相似的术语,因此,我们从那借用了以下术语:
![Tracing][3]
* **Trace:** The description of a transaction as it moves through a distributed system.
事物在分布式系统运行的过程描述。
* **Span:** A named, timed operation representing a piece of the workflow. Spans accept key:value tags as well as fine-grained, timestamped, structured logs attached to the particular span instance.
一种命名的定时操作,表示工作流的一部分。 Spans 可接受 key : value 标签以及附加到特定 Span 实例的细粒度、带有时间戳的结构化日志。
* **Span context:** Trace information that accompanies the distributed transaction, including when it passes from service to service over the network or through a message bus. The span context contains the trace identifier, span identifier, and any other data that the tracing system needs to propagate to the downstream service.
携带分布式事务的追踪信息,包括当它通过网络或消息总线将服务传递给服务时。 span 上下文包含 trace 标识符、 span 标识符以及追踪系统所需传播到下游服务的任何其他数据。
If you would like to dig into a detailed description of this mental model, please check out the [OpenTracing specification][4].
如果你想要深入研究这种思维模式的细节,请仔细参照[OpenTracing技术规范][1]。
### The four big pieces
四大功能模块
From the perspective of an application-layer distributed tracing system, a modern software system looks like the following diagram:
从应用层分布式追踪系统的观点来看,现代软件系统架构如下图所示:
![Tracing][5]
The components in a modern software system can be broken down into three categories:
现代软件系统的组件可分为三类:
* **Application and business logic:** Your code.
应用程序和业务逻辑:你的代码。
* **Widely shared libraries:** Other people's code.
广泛共享库:他人的代码
* **Widely shared services:** Other peoples infrastructure.
广泛共享服务:他人的基础架构
These three components have different requirements and drive the design of the Distributed Tracing systems which is tasked with monitoring the application. The resulting design yields four important pieces:
这三类组件有着不同的需求,驱动监控应用程序的分布式追踪系统的设计。最终的设计得到了四个重要的部分:
* **A tracing instrumentation API:** What decorates application code.
追踪测试API修饰应用程序代码
* **Wire protocol:** What gets sent alongside application data in RPC requests.
有线协议:在 RPC 请求中与应用程序数据一同发送的规定
* **Data protocol:** What gets sent asynchronously (out-of-band) to your analysis system.
数据协议:将异步信息(带外)发送到你的分析系统的规定
* **Analysis system:** A database and interactive UI for working with the trace data.
分析系统:用于处理追踪数据的数据库和交互式用户界面
To explain this further, well dig into the details which drive this design. If you just want my suggestions, please skip to the four big solutions at the bottom.
为了更深入的解释这个概念,我们将深入研究驱动该设计的细节。如果你只需要我的一些建议,请跳转至下方的四大解决方案。
### Requirements, details, and explanations
需求,细节和解释
Application code, shared libraries, and shared services have notable operational differences, which heavily influence the requirements for instrumenting them.
应用程序代码、共享库以及共享式服务在操作上有显著的差别,这种差别严重影响了对其进行检测的请求操作。
#### Instrumenting application code and business logic
测试应用程序代码和业务逻辑
In any particular microservice, the bulk of the code written by the microservice developer is the application or business logic. This is the code that defines domain-specific operations; typically, it contains whatever special, unique logic justified the creation of a new microservice in the first place. Almost by definition, **this code is usually not shared or otherwise present in more than one service.**
在任何特定的微服务中,由微服务开发者编写的大段代码是应用程序或者商业逻辑。这段代码规定了特定区域的操作。通常,它包含任何特殊、独一无二的逻辑判断,这些逻辑判断首先证明了创建新型微服务的合理性。在几乎所有定义的操作中, 该代码通常不会在多个服务中共享或者以其他方式出现。
That said, you still need to understand it, and that means it needs to be instrumented somehow. Some monitoring and tracing analysis systems auto-instrument code using black-box agents, and others expect explicit "white-box" instrumentation. For the latter, abstract tracing APIs offer many practical advantages for microservice-specific application code:
也即是说你仍需理解它这也意味着需要以某种方式对它进行测试。一些监控和追踪分析系统使用黑盒代理自动检测代码另一些系统更想使用显式的白盒检测工具。对于后者抽象追踪API 提供了许多对于微服务的应用程序代码来说更为实用的优势:
* An abstract API allows you to swap in new monitoring tools without re-writing instrumentation code. You may want to change cloud providers, vendors, and monitoring technologies, and a huge pile of non-portable instrumentation code would add meaningful overhead and friction to that procedure.
抽象API 允许你在不重新编写测试代码的条件下换新的监视工具。你可能想要变更云服务提供商,供应商和监测技术,而一大堆不可移植的检测代码将会为该过程增加有意义的开销和麻烦。
* It turns out there are other interesting uses for instrumentation, beyond production monitoring. There are existing projects that use this same tracing instrumentation to power testing tools, distributed debuggers, “chaos engineering” fault injectors, and other meta-applications.
事实证明,除了生产监控之外,该工具还有其他有趣的用途。现有的项目使用相同的追踪工具来驱动测试工具、分布式调试器、“混沌工程”故障注入器和其他元应用程序。
* But most importantly, what if you wanted to extract an application component into a shared library? That leads us to:
但更重要的是,若将应用程序组件提取到共享库中要怎么办呢?由上述内容可得到结论:
#### Instrumenting shared libraries
测试共享库
The utility code present in most applications—code that handles network requests, database calls, disk writes, threading, queueing, concurrency management, and so on—is often generic and not specific to any particular application. This code is packaged up into libraries and frameworks which are then installed in many microservices, and deployed into many different environments.
在大多数应用程序中出现的实用程序代码(处理网络请求、数据库调用、磁盘写操作、线程、并发管理等)通常情况下是通用的,而非特别应用于某个特定应用程序。这段代码会被打包成库和框架,而后就可以被装载到许多的微服务上并且被部署到多种不同的环境中。
This is the real difference: with shared code, someone else is the user. Most users have different dependencies and operational styles. If you attempt to instrument this shared code, you will note a couple of common issues:
其真正的不同是:对于共享代码,其他人则成为了使用者。大多数用户有不同的依赖关系和操作风格。如果尝试去使用该共享代码,你将会注意到几个常见的问题:
* You need an API to write instrumentation. However, your library does not know what analysis system is being used. There are many choices, and all the libraries running in the same application cannot make incompatible choices.
你需要一个 API 来编写测试工具。然而,你的库并不知道你正在使用哪个分析系统。会有多种选择,并且运行在相同应用下的所有库无法做出不兼容的选择。
* The task of injecting and extracting span contexts from request headers often falls on RPC libraries, since those packages encapsulate all network-handling code. However, a shared library cannot not know which tracing protocol is being used by each application.
由于这些包封装了所有网络处理代码,因此从请求报头注入和提取 span上下文的任务往往指向RPC库。然而共享库必须了解到每个应用程序正在使用哪种追踪协议。
* Finally, you dont want to force conflicting dependencies on your user. Most users have different dependencies and operational styles. Even if they use gRPC, will it be the same version of gRPC you are binding to? So any monitoring API your library brings in for tracing must be free of dependencies.
最后你不想强制用户使用相互冲突的依赖项。大多数用户有不同的依赖关系和操作风格。即使他们使用gRPC会使它会成为你正在绑定的相同的gRPC版本因此任何你的库附带用于追踪的监控API必定是免于依赖的。
**So, an abstract API which (a) has no dependencies, (b) is wire protocol agnostic, and (c) works with popular vendors and analysis systems should be a requirement for instrumenting shared library code.**
所以一个无依赖的抽象API是网络协议的不可知论并且使用流行的供应商和分析系统应该是一个对于配置共享库代码的请求
#### Instrumenting shared services
配置共享服务
Finally, sometimes entire services—or sets of microservices—are general-purpose enough that they are used by many independent applications. These shared services are often hosted and managed by third parties. Examples might be cache servers, message queues, and databases.
最后,有时整个服务或微服务集合体的通用性足以使许多独立的应用程序使用它们。这种共享式服务通常由第三方托管和管理,例如缓存服务器、消息队列以及数据库。
Its important to understand that **shared services are essentially "black boxes" from the perspective of application developers.** It is not possible to inject your applications monitoring solution into a shared service. Instead, the hosted service often runs its own monitoring solution.
从应用程序开发者的角度来看,理解共享式服务本质上是黑盒子是极其重要的。它不可能将你的应用程序监控注入到共享式服务。恰恰相反,托管服务通常会运行它自己的监控方案。
### **The four big solutions**
四大解决方案
So, an abstracted tracing API would help libraries emit data and inject/extract Span Context. A standard wire protocol would help black-box services interconnect, and a standard data format would help separate analysis systems consolidate their data. Let's have a look at some promising options for solving these problems.
因此,一个抽象的追踪应用程序接口将会帮助库发出数据并且注入/抽取 Span Context。一个标准有线协议将会方案帮助黑盒服务相互连接而且一个标准数据格式将会帮助分离分析系统固化其中的数据。让我们来看一下部分有希望解决这些问题的方案。
#### Tracing API: The OpenTracing project
追踪 APIOpenTracing项目
#### As shown above, in order to instrument application code, a tracing API is required. And in order to extend that instrumentation to shared libraries, where most of the Span Context injection and extraction occurs, the API must be abstracted in certain critical ways.
如你所见我们需要一个追踪API 来检测应用程序代码。为了将这种工具扩展到大多数进行 Span Context 注入和提取的共享库中则必须以某种关键方式对API进行抽象。
The [OpenTracing][2] project aims to solve this problem for library developers. OpenTracing is a vendor-neutral tracing API which comes with no dependencies, and is quickly gaining support from a large number of monitoring systems. This means that, increasingly, if libraries ship with native OpenTracing instrumentation baked in, tracing will automatically be enabled when a monitoring system connects at application startup.
[OpenTracing][2]项目主要针对解决库开发者的问题OpenTracing 是一个与供应商无关的 Tracing API它没有依赖关系并且能从许多监控系统中迅速获取支持。这意味着如果库附带内置的本地 OpenTracing 工具,当监控系统在应用程序启动连接时,追踪将会自动启动。
Personally, as someone who has been writing, shipping, and operating open source software for over a decade, it is profoundly satisfying to work on the OpenTracing project and finally scratch this observability itch.
就个人而言,作为一个已经编写、发布和操作开源软件十多年的人,在 OpenTracing 项目上工作并最终解决这个观察性的难题令我十分满意。
In addition to the API, the OpenTracing project maintains a growing list of contributed instrumentation, some of which can be found [here][6]. If you would like to get involved, either by contributing an instrumentation plugin, natively instrumenting your own OSS libraries, or just want to ask a question, please find us on [Gitter][7] and say hi.
除了 API 之外OpenTracing 项目还维护了一个不断增长的工具列表,其中一些可以在[这里][6]找到。如果你想参与进来无论是通过提供一个插装插件对你自己的OSS库进行本地测试或者仅仅只想问个问题都可以通过[Gitter][7]向我们打招呼。
#### Wire Protocol: The trace-context HTTP headers
有线协议: trace-context 的HTTP报头
In order for monitoring systems to interoperate, and to mitigate migration issues when changing from one monitoring system to another, a standard wire protocol is needed for propagating Span Context.
为了监控系统能进行交互操作以及减轻监控系统间切换事务时带来的迁移问题,需要标准的有线协议来传播 Span 上下文。
The [w3c Distributed Trace Context Community Group][8] is hard at work defining this standard. Currently, the focus is on defining a set of standard HTTP headers. The latest draft of the specification can be found [here][9]. If you have questions for this group, the [mailing list][10] and [Gitter chatroom][11] are great places to go for answers.
[w3c Distributed Trace Context Community Group][8]在努力制定此标准。目前的焦点是制定一系列标准的HTTP报头。该规范的最新草案可以在[此处][9]找到。如果你对这个组织有任何的疑问, [邮件列表][10] 和 [Gitter 聊天室][11]是很好的解惑地点。
#### Data protocol (Doesn't exist yet!!)
数据协议 (还未出现!!)
For black-box services, where it is not possible to install a tracer or otherwise interact with the program, a data protocol is needed to export data from the system.
对于黑盒服务,在无法安装追踪程序或无法与程序进行交互的情况下,需要使用数据协议从系统中导出数据。
Work on this data format and protocol is currently at an early stage, and mostly happening within the context of the w3c Distributed Trace Context Working Group. There is particular interest is in defining higher-level concepts, such as RPC calls, database statements, etc, in a standard data schema. This would allow tracing systems to make assumptions about what kind of data would be available. The OpenTracing project is also working on this issue, by starting to define a [standard set of tags][12]. The plan is for these two efforts to dovetail with each other.
目前这种数据格式和协议的开发工作尚处在初级阶段并且大多在w3c分布式追踪上下文工作组的上下文中进行工作。 令人特别感兴趣的是在标准数据模式中定义更高级别的概念,例如 RPC 调用数据库语句等。这将允许追踪系统对可用数据类型做出假设。OpenTracing 项目也通过定义一套 [标准标签集][12]来解决这一事务。该计划是为了使这两项努力结果相互配合。
Note that there is a middle ground available at the moment. For “network appliances” that the application developer operates, but does not want to compile or otherwise perform code modifications to, dynamic linking can help. The primary examples of this are service meshes and proxies, such as Envoy or NGINX. For this situation, an OpenTracing-compliant tracer can be compiled as a shared object, and then dynamically linked into the executable at runtime. This option is currently provided by the [C++ OpenTracing API][13]. For Java, an OpenTracing [Tracer Resolver][14] is also under development.
注意当前有一个中间地带。对于由应用程序开发者操作但不想编译或以其他方式执行代码修改的“网络设备”,动态链接可以帮助避免这种情况。主要的例子就是服务网格和代理,就像 Envoy 或者 NGINX。针对这种情况可将兼容 OpenTracing 的追踪器编译为共享对象,然后在运行时动态链接到可执行文件中。目前[C++ OpenTracing API][13]提供了该选项。而 JAVA 的 OpenTracing [追踪器解析][14]也在开发中。
These solutions work well for services that support dynamic linking, and are deployed by the application developer. But in the long run, a standard data protocol may solve this problem more broadly.
这些解决方案适用于支持动态链接的服务,并由应用程序开发者开发。但从长远来看,标准的数据协议可以更广泛地解决该问题。
#### Analysis system: A service for extracting insights from trace data
分析系统:从追踪数据中提取有见解的服务
Last but not least, there is now a cornucopia of tracing and monitoring solutions. A list of monitoring systems known to be compatible with OpenTracing can be found [here][15], but there are many more options out there. I would encourage you to research your options, and I hope you find the framework provided in this article to be useful when comparing options. In addition to rating monitoring systems based on their operational characteristics (not to mention whether you like the UI and features), make sure you think about the three big pieces above, their relative importance to you, and how the tracing system you are interested in provides a solution to them.
最后不得不提的是,现在有足够多的追踪监视解决方案。可以在[此处][15]找到与 OpenTracing 兼容的已知监控系统列表,但除此之外仍有更多的选择。我更鼓励你研究自定义选项,同时发现本文提供的框架在对比选择时是非常有用的。除了根据监控系统的操作特性对其进行评级外,监控系统基于它们的操作特征(更不用提你是否喜欢 UI 和其功能),确保你考虑到了上述三大组件、它们对你的相对重要性以及你感兴趣的追踪系统如何为它们提供解决方案。
### Conclusion
结论
In the end, how important each piece is depends heavily on who you are and what kind of system you are building. For example, open source library authors are very interested in the OpenTracing API, while service developers tend to be more interested in the Trace-Context specification. When someone says one piece is more important than the other, they usually mean “one piece is more important to me than the other."
最后,每个部分的重要性在很大程度上取决于你是谁以及正在建立什么样的系统。举个例子,开源库的作者对 OpenTracing API 非常感兴趣,而服务开发者对 trace-context 规范更感兴趣。当有人说一部分比另一部分重要时,他们的意思通常是“一部分对我来说比另一部分重要”。
However, the reality is this: Distributed Tracing has become a necessity for monitoring modern systems. In designing the building blocks for these systems, the age-old approach—"decouple where you can"—still holds true. Cleanly decoupled components are the best way to maintain flexibility and forwards-compatibility when building a system as cross-cutting as a distributed monitoring system.
然而,事实是:分布式追踪已经成为监控现代系统所必不可少的事物。在为这些系统进行构建模块时,“尽可能分离的”老方法仍然适用。在构建像分布式监控系统一样的跨系统的系统,干净地分离组件是维持灵活性和前向兼容性地最佳方式。
Thanks for reading! Hopefully, now when you're ready to implement tracing in your own application, you have a guide to understanding which pieces they are talking about, and how they fit together.
感谢您的阅读!现在当你准备好在你自己的应用程序中实现追踪服务时,你已有一份指南来了解他们正在谈论哪部分片段以及他们之间如何相互协作。
Want to learn more? Sign up to attend [KubeCon EU][16] in May or [KubeCon North America][17] in December.
想学到更多报名参加5月份的[KubeCon EU]或者12月份的[KubeCon North America]吧。
--------------------------------------------------------------------------------
via: https://opensource.com/article/18/5/distributed-tracing
作者:[Ted Young][a]
选题:[lujun9972](https://github.com/lujun9972)
译者:[chenmu-kk](https://github.com/chenmu-kk)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://opensource.com/users/tedsuo
[1]:https://research.google.com/pubs/pub36356.html
[2]:http://opentracing.io/
[3]:https://opensource.com/sites/default/files/styles/panopoly_image_original/public/uploads/tracing1_0.png?itok=dvDTX0JJ (Tracing)
[4]:https://github.com/opentracing/specification/blob/master/specification.md
[5]:https://opensource.com/sites/default/files/styles/panopoly_image_original/public/uploads/tracing2_0.png?itok=yokjNLZk (Tracing)
[6]:https://github.com/opentracing-contrib/
[7]:https://gitter.im/opentracing/public
[8]:https://www.w3.org/community/trace-context/
[9]:https://w3c.github.io/distributed-tracing/report-trace-context.html
[10]:http://lists.w3.org/Archives/Public/public-trace-context/
[11]:https://gitter.im/TraceContext/Lobby
[12]:https://github.com/opentracing/specification/blob/master/semantic_conventions.md
[13]:https://github.com/opentracing/opentracing-cpp
[14]:https://github.com/opentracing-contrib/java-tracerresolver
[15]:http://opentracing.io/documentation/pages/supported-tracers
[16]:https://events.linuxfoundation.org/kubecon-eu-2018/
[17]:https://events.linuxfoundation.org/events/kubecon-cloudnativecon-north-america-2018/

View File

@ -0,0 +1,232 @@
[#]: collector: (lujun9972)
[#]: translator: (robsean)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to Go About Linux Boot Time Optimisation)
[#]: via: (https://opensourceforu.com/2019/10/how-to-go-about-linux-boot-time-optimisation/)
[#]: author: (B Thangaraju https://opensourceforu.com/author/b-thangaraju/)
如何进行 Linux 启动时间优化
======
[![][1]][2]
_快速启动一台嵌入式设备或一台电信设备对于时间要求严格的应用程序是至关重要的并且在改善用户体验方面也起着非常重要的作用。这个文件给予一些关于如何增强任意设备的启动时间的重要技巧。_
快速启动或快速重启在各种情况下起着至关重要的作用。对于一套嵌入式设备来说,开始启动是为了保持所有服务的高可用性和更好的性能。设想一台电信设备运行一套没有启用快速启动的 Linux 操作系统。依赖于这个特殊嵌入式设备的所有的系统,服务和用户可能会受到影响。这些设备在其服务中维持高可用性是非常重要的,为此,快速启动和重启起着至关重要的作用。
一台电信设备的一次小故障或关机,甚至几秒钟,都可能会对无数在因特网上工作的用户造成破坏。因此,对于很多对时间要求严格的设备和电信设备来说,在它们的服务中包含快速启动以帮助它们快速重新开始工作是非常重要的。让我们从图表 1 中理解 Linux 启动过程。
![Figure 1: Boot-up procedure][3]
![Figure 2: Boot chart][4]
**监视工具和启动过程**
A user should take note of a number of factors before making changes to a machine.这包括机器的当前启动速度,以及服务,进程或应用程序 These include the current booting speed of the machine and also the services, processes or applications that are taking up resources and increasing the boot-up time.
**Boot chart:** 为监视启动速度和在启动期间启动的各种服务,用户可以使用下面的命令来安装 boot chart
```
sudo apt-get install pybootchartgui.
```
你每次启动时boot chart 在日志中保存一个 _.png_ (便携式网络图片)文件,使用户能够查看 _png_ 文件来理解系统的启动过程和服务。为此,使用下面的命令:
```
cd /var/log/bootchart
```
用户可能需要一个应用程序来查看 _.png_ 文件。Feh 是一个面向控制台用户的 X11 图像查看器。不像大多数其它的图像查看器它没有一个精致的图形用户界面但是它仅仅显示图片。Feh 可以用于查看 _.png_ 文件。你可以使用下面的命令来安装它:
```
sudo apt-get install feh
```
你可以使用 _feh xxxx.png_ 来查看 _png_ 文件。
图表 2 显示查看一个 boot chart 的 _png_ 文件时的启动图表。
但是,对于 Ubuntu 15.10 以后的版本不再需要 boot chart 。 为获取关于启动速度的简短信息,使用下面的命令:
```
systemd-analyze
```
![Figure 3: Output of systemd-analyze][5]
图表 3 显示命令 _systemd-analyze_ 的输出。
命令 _systemd-analyze_ blame 用于打印所有正在运行的基于初始化所用的时间的单元。这个信息是非常有用的并且可用于优化启动时间。systemd-analyze blame 不会显示服务于使用 _Type=simple_ 的结果,因为 systemd 认为这些服务是立即启动的;因此,不能完成测量初始化的延迟。
![Figure 4: Output of systemd-analyze blame][6]
图表 4 显示 _systemd-analyze_ blame 的输出.
下面的命令打印一个单元的时间关键的链的树:
```
command systemd-analyze critical-chain
```
图表 5 显示命令_systemd-analyze critical-chain_ 的输出。
![Figure 5: Output of systemd-analyze critical-chain][7]
**减少启动时间的步骤**
下面显示的是一些可采取的用于减少启动时间的步骤。
**BUM (启动管理器):** BUM 是一个运行级配置编辑器,当系统启动或重启时,允许 _init_ 服务的配置。它显示在启动时可以启动的每个服务的一个列表。用户可以打开和关闭之间切换个别的服务。 BUM 有一个非常干净的图形用户界面,并且非常容易使用。
在 Ubuntu 14.04 中, BUM 可以使用下面的命令安装:
```
sudo apt-get install bum
```
为在 15.10 以后的版本中安装它,从链接 _<http://apt.ubuntu.com/p/bum> 13_ 下载软件包。
以基础的事开始,禁用扫描仪和打印机相关的服务。如果你没有使用蓝牙和其它不想要的设备和服务,你也可以禁用它们中一些。我强烈建议你在禁用相关的服务前学习它们的基础知识,因为它可能会影响机器或操作系统。图表 6 显示 BUM 的图形用户界面。
![Figure 6: BUM][8]
**编辑 rc 文件:** 为编辑 rc 文件,你需要转到 rc 目录。这可以使用下面的命令来做到:
```
cd /etc/init.d.
```
然而,访问 _init.d_ 需要 root 用户权限,它基本上包含了开始/停止脚本,当系统在运行时或在启动期间,控制(开始,停止,重新加载,启动启动)守护进程。
_rc_ 文件在 _init.d_ 中被称为一个运行控制脚本。在启动期间init 执行 _rc_ 脚本并发挥它的作用。为改善启动速度,我们更改 _rc_ 文件。使用任意的文件编辑器打开 _rc_ 文件(当你在 _init.d_ 目录中时)。
例如,通过输入 _vim rc_ ,你可以更改 _CONCURRENCY=none_ 的值为 _CONCURRENCY=shell_ 。后者允许同时执行某些起始阶段的脚本,而不是连续地间断地交替执行。
在最新版本的内核中,该值应该被更改为 _CONCURRENCY=makefile_
图表 7 和 8 显示编辑 rc 文件前后的启动时间的比较。启动速度的改善可以被注意到。在编辑The time to boot before editing the rc 文件前的启动时间是 50.98 秒,然而在对 rc 文件进行更改后的启动时间是 23.85 秒。
但是,上面提及的更改方法在 Ubuntu 15.10 以后的操作系统上不工作,因为使用最新内核的操作系统使用 systemd 文件,而不再是 _init.d_ 文件。
![Figure 7: Boot speed before making changes to the rc file][9]
![Figure 8: Boot speed after making changes to the rc file][10]
**E4rat:** E4rat 代表 e4 ‘减少访问时间’ (仅在 ext4 文件系统的情况下). 它是由 Andreas Rid 和 Gundolf Kiefer 开发的一个项目. E4rat 是一个在碎片整理的帮助下来达到一次快速启动的应用程序。它也加速应用程序的启动。E4rat 排除使用物理文件重新分配的寻道时间和旋转延迟。这导致一个高速的磁盘传输速度。
E4rat 作为一个可以获得的 .deb 软件包,你可以从它的官方网站 _<http://e4rat.sourceforge.net/>_ 下载它.
Ubuntu 默认的 ureadahead 软件包与 e4rat 冲突。因此不得不使用下面的命令安装几个软件包:
```
sudo dpkg purge ureadahead ubuntu-minimal
```
现在使用下面的命令来安装 e4rat 的依赖关系:
```
sudo apt-get install libblkid1 e2fslibs
```
打开下载的 _.deb_ 文件,并安装它。现在需要恰当地收集启动数据来使 e4rat 工作。
遵循下面所给的步骤来使 e4rat 正确地运行,并提高启动速度。
* 在启动期间访问 Grub 菜单。这可以在系统启动时通过按住 shift 按键来完成。
* 选择通常用于启动的选项(内核版本),并按 e
* 查找以 _linux /boot/vmlinuz_ 开头的行,并在该行的末尾添加下面的代码(在句子的最后一个字母后按空格键)
```
- init=/sbin/e4rat-collect or try - quiet splash vt.handsoff =7 init=/sbin/e4rat-collect
```
* 现在,按 _Ctrl+x_ 来继续启动。这让 e4rat 在启动后收集数据。在机器上工作,打开应用程序,并在接下来的两分钟时间内关闭应用程序。
* 通过转到 e4rat 文件夹,并使用下面的命令来访问日志文件:
```
cd /var/log/e4rat
```
* 如果你没有找到任何日志文件,重复上面的过程。一旦日志文件在这里,再次访问 Grub 菜单,并按 e 作为你的选项。
* 在你之前已经编辑过的同一行的末尾输入 single 。这将帮助你访问命令行。如果出现一个要求任何东西的不同菜单选择恢复正常启动Resume normal boot。如果你不知为何不能进入命令提示符按 Ctrl+Alt+F1 组合键。
* 在你看到登录提示后,输入你的详细信息。
* 现在输入下面的命令:
```
sudo e4rat-realloc /var/lib/e4rat/startup.log
```
这个进程需要一段时间,依赖于机器的磁盘速度。
* 现在使用下面的命令来重启你的机器:
```
sudo shutdown -r now
```
* 现在,我们需要配置 Grub 来在每次启动时运行 e4rat 。
* 使用任意的编辑器访问 grub 文件。例如, _gksu gedit /etc/default/grub 。_
* 查找以 _GRUB CMDLINE LINUX DEFAULT=_ 开头的一行,并在引号之间和任何选项之前添加下面的行:
```
init=/sbin/e4rat-preload 18
```
* 它应该看起来像这样:
```
GRUB CMDLINE LINUX DEFAULT = init=/sbin/e4rat- preload quiet splash
```
* 保存并关闭 Grub 菜单,并使用 _sudo update-grub_ 更新 Grub 。
* 重启系统,你将在启动速度方面发现显著的变化。
图表 9 和 10 显示在安装 e4rat 前后的启动时间的不同。启动速度的改善可以被注意到。在使用 e4rat 前启动所用时间是 22.32 秒,然而在使用 e4rat 后启动所用时间是 9.065 秒。
![Figure 9: Boot speed before using e4rat][11]
![Figure 10: Boot speed after using e4rat][12]
**一些易做的调整**
一个极好的启动速度也可以使用非常小的调整来实现,其中两个在下面列出。
**SSD:** 使用固态设备而不是普通的硬盘或者其它的存储设备将肯定会改善启动速度。SSD 也帮助获得在传输文件和运行应用程序方面的极好速度。
**禁用图形用户界面:** 图形用户界面,桌面图形和窗口动画占用大量的资源。禁用图形用户界面是另一个实现极好的启动速度的好方法。
--------------------------------------------------------------------------------
via: https://opensourceforu.com/2019/10/how-to-go-about-linux-boot-time-optimisation/
作者:[B Thangaraju][a]
选题:[lujun9972][b]
译者:[robsean](https://github.com/robsean)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensourceforu.com/author/b-thangaraju/
[b]: https://github.com/lujun9972
[1]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/Screenshot-from-2019-10-07-13-16-32.png?resize=696%2C496&ssl=1 (Screenshot from 2019-10-07 13-16-32)
[2]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/Screenshot-from-2019-10-07-13-16-32.png?fit=700%2C499&ssl=1
[3]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-1.png?resize=350%2C302&ssl=1
[4]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-2.png?resize=350%2C412&ssl=1
[5]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-3.png?resize=350%2C69&ssl=1
[6]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-4.png?resize=350%2C535&ssl=1
[7]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-5.png?resize=350%2C206&ssl=1
[8]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-6.png?resize=350%2C449&ssl=1
[9]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-7.png?resize=350%2C85&ssl=1
[10]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-8.png?resize=350%2C72&ssl=1
[11]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-9.png?resize=350%2C61&ssl=1
[12]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/10/fig-10.png?resize=350%2C61&ssl=1

View File

@ -0,0 +1,57 @@
[#]: collector: (lujun9972)
[#]: translator: (LazyWolfLin)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (What's your favorite Linux distribution?)
[#]: via: (https://opensource.com/article/20/1/favorite-linux-distribution)
[#]: author: (Opensource.com https://opensource.com/users/admin)
你最喜欢哪个 Linux 发行版?
======
参与我们的第七届[年度调查][5],让我们了解你对 Linux 发行版的偏好。
![Hand putting a Linux file folder into a drawer][1]
你最喜欢哪个 Linux 发行版?参与我们的第七届[年度调查][5]。虽然有所变化,但现在仍有数百种 [Linux 发行版][2] 保持活跃且运作良好。发行版、包管理器和桌面的组合为 Linux 用户创建了无数客制化系统环境。
我们询问了社区的作者们哪个是他们的最爱以及原因。尽管回答中存在一些共性由于各种原因Fedora 和 Ubuntu 是最受欢迎的选择),但我们也听到一些惊奇的回答。以下是他们的一些回答:
“我使用 Fedora 发行版我喜欢这样的社区成员们共同创建一个令人敬畏的操作系统展现了开源软件世界最伟大的造物。”——Matthew Miller
“我在家中使用 Arch。作为一名游戏玩家我希望可以轻松使用最新版本的 Wine 和 GFX 驱动同时最大限度地掌控我的系统。所以我选择一个滚动升级并且每个包都保持领先的发行版。”——Aimi Hobson
“NixOS在业余爱好者市场中没有比这更合适的。”——Alexander Sosedkin
“我用过每个 Fedora 版本作为我的工作系统。这意味着我从第一个版本开始使用。从前我问自己是否将有一天我会忘记我用的系统版本号。而这一天已经到来了。所以现在是什么时候呢”——Hugh Brock
“通常,在我的房屋和办公室里都有运行 Ubuntu、CentOS 和 Fedora 的机器。我依赖这些发行版来完成各种工作。Fedora 用于高性能和获取最新版本的应用和库。Ubuntu 用于那些需要大型支持社区。CentOS 则当我们需要稳如磐石的服务器平台时。”——Steve Morris
“我最喜欢?对于社区以及如何为发行版构建软件包(从源码构建而非二进制文件),我选择 Fedora。对于可用包的范围和包的定义和开发我选择 Debian。对于文档我选择 Arch。对于新手的提问我以前会推荐 Ubuntu而现在会推荐 Fedora。”——Al Stone
* * *
自从 2014 以来,我们一直向社区提出这一问题。除了 2015 年 PCLinuxOS 出乎意料的领先Ubuntu 往往每年都获得粉丝们的青睐。其他受欢迎的竞争者还包括 Fedora、Debian、Mint 和 Arch。在新的十年里哪个发行版更吸引你如果我们的投票列表中没有你最喜欢的选择请在评论中告诉我们。
下面是过去七年来你最喜欢的 Linux 发行版投票的总览。你可以在我们去年的年刊《[Opensource.com 上的十年最佳][3]》中看到它。[点击这里][3]下载完整版电子书!
![Poll results for favorite Linux distribution through the years][4]
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/1/favorite-linux-distribution
作者:[Opensource.com][a]
选题:[lujun9972][b]
译者:[LazyWolfLin](https://github.com/LazyWolfLin)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/admin
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yearbook-haff-rx-linux-file-lead_0.png?itok=-i0NNfDC (Hand putting a Linux file folder into a drawer)
[2]: https://distrowatch.com/
[3]: https://opensource.com/downloads/2019-yearbook-special-edition
[4]: https://opensource.com/sites/default/files/pictures/linux-distributions-through-the-years.jpg (favorite Linux distribution through the years)
[5]: https://opensource.com/article/20/1/favorite-linux-distribution