企业云 2.0：VMware 眼中的企业 IT 的未来

![](/data/attachment/album/201907/17/221009qx8abz58bla8lhah.jpg)

近日，笔者聆听了 VMware 大中华区高级技术总监李刚先生一场精彩演讲，他就企业 IT 的发展之路探讨了 VMware 企业云 2.0 的发展。

### VMware 眼中的行业趋势

李刚谈到，从 VMware 的愿景可以看出整个企业 IT 正在发生的三个深刻的变化：

VMware 认为，首先，私有云演进为混合云，也就是说， 云基础架构可以自建也可以去当作服务购买，而提供给用户的是统一技术栈，统一运维管理的融合环境；其次，IT 和 CT 会融合成电信云~电信网络会形成云的形态；而边缘计算会成为一个新的基础架构形态。

![](/data/attachment/album/201907/17/220538bx0xhlxzm2lh0l05.jpg)

从行业角度来看，也和 VMware 的愿景高度契合， VMware 称之为三波产业重大变革：

* 第一个就是通过重构企业云，整个企业 IT 会全面转型以适应新的变化，拥抱变化创造新的机遇。当今的企业正处于从私有云和公有云阶段迈向混合云、多云的阶段，既保有了私有云的安全性，也利用到了公有云的开放性，使得企业可以以最佳成本获得业务快速发展的基础设施服务。而新的企业云，正承担着这一数字化转型的重任。
* 第二个是云网融合，就是整个 IT 生态会以云和网络融合的形态来包容在企业的外围。在多云战略进一步深化之后，企业将协调处于多云环境中的数据、服务和应用，通过云和网络的融合，能将这些融为一体。未来，随着基础设施的进一步发展，流经多云之间的网络的流量必将占到更多的份额。
* 第三个是拓展到边缘，边缘计算以后将会是更大的想象空间。越来越多的数据和应用将来自于边缘设备、迫切地需要在利用边缘设备的计算能力、存储能力以满足业务需求。这些迅速增长的边缘设备极大地拓展了计算的范围和领域，而它们的爆发式增长也给企业带来了更多压力和广阔的前景。

这三个变化和由此发展而来的三波浪潮，给企业计算带来全新的挑战和机遇，只有不断地变革企业云基础设施，升级企业的数字化技术，才能应对数字化转型 2.0 的进化，而这就是 VMware 重构企业云，推出企业云 2.0 的原动力。

### 重构企业云

VMware 认为，对于大中型企业而言，其战略方向无疑是重构企业云，通过建设新一代企业云（EnterpriseCloud 2.0），完成企业 IT 的重塑，让 IT 真正从资源供给的角色到创新平台的转变。

李刚谈到，所谓“重构企业云，实际上就是重构企业IT的核心，企业IT要做大的转型。用一句话来说，企业IT要从资源供给到创新平台。”

传统的企业，私有云的模式就是一个比较先进的企业IT模式了，但是私有云实际上关注的还是以资源为核心，而且做的主要工作就是两个：一个是资源池化，另一个是资源交付流程化和自动化。所有这些对业务来说的价值就是节省成本。对 IT 自身的价值是变得自动化简易和简单。

新一代企业云我们把它起个名字叫**企业云 2.0**。新一代企业云才会真正改变企业IT的形式、定位和价值。

![](/data/attachment/album/201907/17/220555hjgqzw8q9w8lwdzd.jpg)

#### 企业云 2.0

什么是新一代企业云？李刚从四个方面阐述了这一概念：

第一，对于新一代企业云来说，它把资源转化成服务、而且是全栈式服务。所谓“全栈服务”就是说它，包括 IaaS、SaaS、PaaS 等完整的服务能力，企业IT要有能力提供各个层面的服务。这个叫**全栈资源服务化**。

第二，从传统企业 IT 来说，用户的概念是相对比较弱的。传统企业 IT 严格意义上讲没有特别强烈的用户的概念——谁是你的用户，或者直接一点说，谁是你的云的用户？很多企业建了云，云的用户是谁？这个概念并没有得到强化。

在未来，对于企业云来说会有非常明显的用户的概念。

企业云的第一大用户就是你的业务创新团队，或研发团队。真正企业IT做的很好的，都已经大量的开始把研发从外包转向内包，甚至于能力的对外输出。第二类用户，即传统的业务线用户，当你的应用越来越丰富，也需要强化给用户提供服务的概念，而不是站在一个个单独的应用角度给用户提供服务，因为你的很多应用流程都会通过服务的方式提供出来，所以就有了所谓的应用门户的概念。这就是**强化用户的概念**。

第三，新一代企业云里面不强调公有云、私有云，事实上，无论是公有云还是私有云都是你的资源。公有云和私有云只不过是你建设资源管理资源的一个方式和选择。至于怎么选有很多方面，比如安全性、可靠性、成本等等，此外还包括服务的种类。比如说现在公有云服务相对会比私有云多一些，有些服务在私有云上还没有建成，需要公有云提供支持。而这些都是你的资源。最重要的是，要能够**融合资源**，以安全可控可管理的方式为我所用。

第四个，云本身具有非常强烈的**迭代发展**的概念，并不像传统的数据中心建设有一期、二期那么明确的阶段性。云服务必须不断的推出、升级，要能积淀这些服务，让它能力不断的增强。

#### 企业 IT 演进战略

谈及了企业云 2.0，就不能不提到企业IT演进战略，李刚把它分成三个方面进行了阐述：云战略、服务战略、应用战略。

所谓云战略，就是把基础架构往前推，包括私有云跟同构公有云如何在资源上做分配，原生公有云和公有云之间如何做整合，企业应用怎么上云，公有云的技术怎么导入企业 IT 等等，这是讲云的战略。

其次是服务战略，之前它的服务非常弱化，在企业云 2.0 的实际建设里，最核心的部分之一就是怎么样把这些资源变成服务，提供给开发团队，这是很重要的能力。

第三是应用战略，就是应用怎么变得敏捷、创新，从外包到内包，怎么去思考这些问题。之前在这个层面上做的很多工作都是在建设一个传统的池化资源，采用私有云的模式。而到了企业云 2.0 阶段，从应用来看就是怎么定位你的应用，哪些应用可以退出了，哪些应用可以重新放在云上，哪些应用不用理它，哪些应用重新按照新的模式做设计，你的应用开发模式要做转变。

![](/data/attachment/album/201907/17/220617dly7jhzsbs7h0yal.jpg)

#### 基础架构即代码

当你开始架构你的应用的时候，同时也会规划基础架构怎么部署，而且是代码的方式进行规划和部署。在真实部署之前会做配置管理，然后采用基础架构代码的方式来管理。在每一步，当你需要基础架构提供支持的时候，它会帮你部署和调整基础架构，这里是由代码自动提供的。

这个基础架构的概念包括 IaaS、PaaS 等，包括各种各样的服务。通过在企业内部实现企业云 2.0，知道企业内部有哪些资源可供被调用，然后把来自不同云的、包括私有云的这些服务组装成企业所需要的基础架构的元配件，再用代码的方式编写成应用所需要的基础架构描述，然后，研发团队会自动的调用这些代码生成基础架构。一个真正的应用，比如 VMware公司 内部在做的云管产品的应用，每天会做几十次的持续集成、自动化测试和持续交付，整个的迭代速度非常快，发现错误的速度也非常快，整个开发的进度就是之前十几倍、几十倍的提升。

![](/data/attachment/album/201907/17/220637jxnkj3bk9nr3byxp.jpg)

这里有个非常核心的部分，第一个，你会发现它充分体现了应用驱动，应用在驱动整个基础架构在变动。第二点，这些如果不是软件定义的，不是真正可以代码化的，应用根本没法驱动，它需要完全高度代码化，然后就可以通过应用驱动转起来了。所以，在软件定义之上，有了应用驱动，使得价值充分发挥出来，IT基础架构变得高度灵活。

### 与 Intel 携手

而李刚先生在演讲中也提及，VMware 行业领先的云计算技术和 Intel® 技术可以帮助客户充分利用混合云，并连接和管理本地部署与远程部署的工作负载，从而提高敏捷性、容量、透明度、可见性和恢复能力。

借助一系列私有云、公有云和混合云解决方案，企业可以随心所欲地实施支持其云计算战略的云计算解决方案，以推动其独特业务的发展。他们既可以自由选择，又能保持可控力。

![](/data/attachment/album/201907/17/221155fewf1rlznlrh9lnw.jpg)

### 云的未来

![](/data/attachment/album/201907/17/220709b22eyvdfddg6hg5c.jpg)

早在 2015 年时，VMware 发布的企业愿景“一云承万象”，其核心是通过软件定义的基础设施，在一体化的混合云平台上，支持任何类型的应用和对不同类型的终端平台做交付服务。如今， VMware 的这一愿景得到了再次升华，在迎合新的变化的同时，深耕于企业云计算领域，也将自身转化为了一家“数字技术基础设施”供应商。而新的企业云 2.0 也正是这家软件巨头向未来迈出的坚实一步。


如何在 Ubuntu 中删除仓库及其 GPG 密钥

![Delete A Repository And GPG Key In Ubuntu](/data/attachment/album/201907/17/223223badn7ulike6qw27x.png)

前几天我们讨论了如何在基于 RPM 和 DEB 的系统中[列出已安装的仓库](https://www.ostechnix.com/find-list-installed-repositories-commandline-linux/)。今天，我们将学习如何在 Ubuntu 中删除仓库及其 GPG 密钥。对于不知道仓库的人，仓库（简称 repo）是开发人员存储软件包的地方。仓库的软件包经过全面测试，并由 Ubuntu 开发人员专门为每个版本构建。用户可以使用 Apt 包管理器在他们的 Ubuntu 系统上下载和安装这些包。Ubuntu 有四个官方仓库，即 Main、Universe、Restricted 和 Multiverse。

除了官方仓库外，还有许多由开发人员（或软件包维护人员）维护的非官方仓库。非官方仓库通常有官方仓库中不可用的包。所有包都由包维护者用一对密钥（公钥和私钥）签名。如你所知，公钥是发给用户的，私钥必须保密。每当你在源列表中添加新的仓库时，如果 Apt 包管理器想要信任新添加的仓库，你还应该添加仓库密钥（公钥）。使用仓库密钥，你可以确保从正确的人那里获得包。到这里希望你对软件仓库和仓库密钥有了一个基本的了解。现在让我们继续看看如果在 Ubuntu 系统中不再需要仓库及其密钥，那么该如何删除它。

### 在 Ubuntu 中删除仓库

每当使用 `add-apt-repository` 命令添加仓库时，它都将保存在 `/etc/apt/sources.list` 中。

要从 Ubuntu 及其衍生版中删除软件仓库，只需打开 `/etc/apt/sources.list` 文件并查找仓库名字并将其删除即可。

```
$ sudo nano /etc/apt/sources.list
```

正如你在下面的截图中看到的，我在我的 Ubuntu 系统中添加了 [Oracle Virtualbox](https://www.ostechnix.com/install-oracle-virtualbox-ubuntu-16-04-headless-server/) 仓库。

![](/data/attachment/album/201907/17/223224tefb2m6f28ahfom6.png)

*virtualbox 仓库*

要删除此仓库，只需删除该条目即可。保存并关闭文件。

如果你已添加 PPA 仓库，请查看 `/etc/apt/sources.list.d/` 目录并删除相应的条目。

或者，你可以使用 `add-apt-repository` 命令删除仓库。例如，我要删除 [Systemback](https://www.ostechnix.com/systemback-restore-ubuntu-desktop-and-server-to-previous-state/) 仓库，如下所示。

```
$ sudo add-apt-repository -r ppa:nemh/systemback
```

最后，使用以下命令更新软件源列表：

```
$ sudo apt update
```

### 删除仓库密钥

我们使用 `apt-key` 命令添加仓库密钥。首先，让我们使用命令列出添加的密钥：

```
$ sudo apt-key list
```

此命令将列出所有添加的仓库密钥。

```
/etc/apt/trusted.gpg
--------------------
pub rsa1024 2010-10-31 [SC]
3820 03C2 C8B7 B4AB 813E 915B 14E4 9429 73C6 2A1B
uid [ unknown] Launchpad PPA for Kendek

pub rsa4096 2016-04-22 [SC]
B9F8 D658 297A F3EF C18D 5CDF A2F6 83C5 2980 AECF
uid [ unknown] Oracle Corporation (VirtualBox archive signing key) <[email protected]>
sub rsa4096 2016-04-22 [E]

/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-archive.gpg
------------------------------------------------------
pub rsa4096 2012-05-11 [SC]
790B C727 7767 219C 42C8 6F93 3B4F E6AC C0B2 1F32
uid [ unknown] Ubuntu Archive Automatic Signing Key (2012) <[email protected]>

/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg
------------------------------------------------------
pub rsa4096 2012-05-11 [SC]
8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092
uid [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>

/etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg
------------------------------------------------------
pub rsa4096 2018-09-17 [SC]
F6EC B376 2474 EDA9 D21B 7022 8719 20D1 991B C93C
uid [ unknown] Ubuntu Archive Automatic Signing Key (2018) <[email protected]>
```

正如你在上面的输出中所看到的，那串长的（40 个字符）十六进制值是仓库密钥。如果你希望 APT 包管理器停止信任该密钥，只需使用以下命令将其删除：

```
$ sudo apt-key del "3820 03C2 C8B7 B4AB 813E 915B 14E4 9429 73C6 2A1B"
```

或者，仅指定最后 8 个字符：

```
$ sudo apt-key del 73C62A1B
```

完成！仓库密钥已被删除。运行以下命令更新仓库列表：

```
$ sudo apt update
```

资源：

* [软件仓库 – Ubuntu 社区 Wiki](https://help.ubuntu.com/community/Repositories/Ubuntu)

---

via: <https://www.ostechnix.com/how-to-delete-a-repository-and-gpg-key-in-ubuntu/>

作者：[sk](https://www.ostechnix.com/author/sk/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


利用 Python 引导孩子的计算机思维

>
> 编程可以给低收入家庭的学生提供足够的技能、信心和知识，进而让他们摆脱因为家庭收入低带来的经济和社会地位上的劣势。
>
>
>

![](/data/attachment/album/201907/17/231228k3t9skntnlst59h9.jpg)

尽管暑假期间底特律公共图书馆的[帕克曼分部](https://detroitpubliclibrary.org/locations/parkman)挤满了无聊的孩子并且占用了所有的电脑，图书馆工作人员并不觉得这会是个问题，反而更多是一个机会。他们成立一个名为 [Parkman Coders](https://www.dplfound.org/single-post/2016/05/15/Parkman-Branch-Coders) 的编程社团，社团以 [Qumisha Goss](https://www.linkedin.com/in/qumisha-goss-b3bb5470) 为首，她是图书管理员，也负责利用 Python 的魔力引导弱势儿童的计算机思维。

四年前 [Qumisha Goss](https://www.linkedin.com/in/qumisha-goss-b3bb5470) 刚发起 Parkman Coders 计划的时候， “Q”（代表她）并不是太懂编程。之后她通过努力成为图书馆里教学和技术方面的专家和树莓派认证讲师。

社团最开始采用 [Scratch](https://scratch.mit.edu/) 教学，但很快学生就对这种图形化的块编程感到乏味，他们觉得这就是个“婴儿玩具”。Q 坦言，“我们意识到是时候需要在课程内容这方面做些改变了，如果是为了维持课程内容对初学者的友好性继续选择 Scratch 教学，这无疑会影响孩子们后期继续保持对编程的关注。”因此，她开始教授孩子们 Python。

Q 是在 [Code.org](http://Code.org) 平台玩地牢骷髅怪物这个关卡的时候第一次接触到 Python。她最开始是通过 《[Python Programming: An Introduction to Computer Science](https://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1887902996)》 和 《[Python for Kids](https://nostarch.com/pythonforkids)》 这两本书学习的 Python。她也推荐 《[Automate the Boring Stuff with Python](https://automatetheboringstuff.com/)》 和 《[Lauren Ipsum: A Story about Computer Science and Other Improbable Things](https://nostarch.com/laurenipsum)》 这两本书。

### 建立一个基于树莓派的创客空间

Q 决定使用[树莓派](https://www.raspberrypi.org/)电脑来避免学生可能会因为自己的不当操作对图书馆的电脑造成损害，而且这些电脑因为便携性等问题也不方便用来构建组成一个创客空间。[树莓派](https://www.raspberrypi.org/)的购买价格加上它的灵活性和便携性包括生态圈里面的一些适合教学的自由免费软件，让大家更能感受到她的决策的可行性和可靠性。

虽然图书馆发起 [Parkman Coders](https://www.dplfound.org/single-post/2016/05/15/Parkman-Branch-Coders) 社区计划的本意是通过努力创造一个吸引孩子们的学习空间，进而维持图书馆的平和，但社区发展的很快，很受大家欢迎，以至于这座建立于 1921 的大楼的空间，电脑和插座都不够用了。他们最开始是 20 个孩子共享 10 台[树莓派](https://www.raspberrypi.org/)来进行授课，但后来图书馆陆续收到了来自个人和公司比如 Microsoft、4H，和 Detroit Public Library Foundation 的资金援助从而能够购买更多设备以支撑社区的进一步壮大发展。

目前，每节课程大概有 40 个孩子参加，而且图书馆也有了足够的[树莓派](https://www.raspberrypi.org/)让参与者人手一台设备甚至还可以送出去一些。鉴于不少 [Parkman Coders](https://www.dplfound.org/single-post/2016/05/15/Parkman-Branch-Coders) 的参与者来自于低收入家庭，图书馆也能提供别人捐赠的 Chromebooks 给他们使用。

Q 说，“当孩子们的表现可以证明他们能够很好的使用[树莓派](https://www.raspberrypi.org/)或者 [Microbit](https://microbit.org/guide/) 而且定期来参加课程，我们也会提供设备允许他们可以带回家练习。但即便这样也还是会遇到很多问题，比如他们在家无法访问网络或者没有显示器、键盘、鼠标等外设。”

### 利用 Python 学习生存技能，打破束缚

Q 说，“我认为教授孩子们计算机科学的主要目的是让他们学会批判性思考和解决问题的能力。我希望随着孩子们长大成人，不管他们选择在哪个领域继续发展他们的未来，这些经验教训都会一直伴随他们成长。此外，我也希望这个课程能够激发孩子们对创造的自豪感。能够清楚的意识到‘这是我做的’是一种很强烈、很有用的感受。而且一旦孩子们越早能够有这种成功的体验，我相信未来的路上他们都会满怀热情迎接新的挑战而不是逃避。”

她继续分享道，“在学习编程的过程中，你不得不对单词的拼写和大小写高度警惕。受限于孩子年龄，有时候阅读认知会是个大问题。为了确保课程受众的包容性，我们会在授课过程中大声拼读，同样我们也会极力鼓励孩子们大声说出他们不知道的或者不能正确拼写的单词，以便我们纠正。”

Q 也会尝试尽力去给需要帮助的孩子们更多的关注。她解释道，“如果我确认有孩子遇到困难不能跟上我们的授课进度，我们会尝试在课下时间安排老师辅导帮助他，但还是会允许他们继续参加编程。我们想帮助到他们而不是让他们因为挫败而沮丧的不再参与进来。”

最重要的是，[Parkman Coders](https://www.dplfound.org/single-post/2016/05/15/Parkman-Branch-Coders) 计划所追求的是能够帮助每个孩子认识到每个人都会有独特的技能和能力。参与进来的大部分孩子都是非裔美国人，一半是女孩。Q 直言，“我们所生活在的这个世界，我们成长的过程中，伴随着各种各种的社会偏见，这些都常常会限制我们对自己所能达到的成就的准确认知。”她坚信孩子们需要一个没有偏见的空间，“他们可以尝试很多新事物，不会因为担心犯错责骂而束手束脚，可以放心大胆的去求知探索。”

Q 和 [Parkman Coders](https://www.dplfound.org/single-post/2016/05/15/Parkman-Branch-Coders) 计划所营造的环境氛围能够帮助到参与者摆脱低家庭收入带来的劣势。如果说社区能够发展壮大到今天的规模真有什么独特秘诀的话，那大概就是，Q 解释道，“确保你有一个令人舒适的空间，充满了理解与宽容，这样大家才会被吸引过来。让来的人不忘初心，做好传道受业解惑的准备；当大家参与进来并感觉到充实愉悦，自然而然会想要留下来。”

---

via: <https://opensource.com/article/19/2/break-down-stereotypes-python>

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

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


在线试用 200 多种 Linux 和 Unix 操作系统

Summary: 只要打开该网站，选择你需要的 Linux/Unix 发行版，然后开始试用！

只要打开该网站，选择你需要的 Linux/Unix 发行版，然后开始试用！

![DistroTest——在线试用200多种Linux和Unix操作系统](/data/attachment/album/201907/18/124355htdu1tuqt1kxaggd.jpg)

不久前我们介绍过[OSBoxes](https://www.ostechnix.com/osboxes-free-unixlinux-virtual-machines-for-vmware-and-virtualbox/)，该网站提供了一系列免费且开箱即用的 Linux 和 Unix 虚拟机。你可以在你的 Linux 系统中下载这些虚拟机并用 VirtualBox 或 VMWare workstation 试用。今天，我偶然发现一个名叫 “DistroTest” 的类似服务。与 OSBoxes 不同之处在于 DistroTest 让你免费试用现场版 Linux 和 Unix 操作系统。你可以在线试用 200 多种 Linux 和 Unix 操作系统而无需在本地安装它们。只要打开该网站，选择你需要的 Linux/Unix 发行版，然后开始试用！

两个名为 Klemann Andy 和 Forster Tobias 的好心人用 Qemu 在 Debian 上运行了这项网络服务。这里列出的公开发行版在使用上没有任何限制。你可以象使用本地系统一样使用系统的所有功能。你可以安装和卸载软件。你可以测试安装的程序，甚至删除或格式化硬盘，删除系统文件。简而言之，DistroTest让喜欢尝试不同发行版的的人自行决定：

* 最适合他们的发行版
* 想要哪种图形界面
* 他们可以选择哪些配置

本文撰写之时，DistroTest 提供了 227 种操作系统的 711 个版本。我已经使用 Linux 很多年，但我从未听说过这里列出的一些发行版。说实话我甚至不知道 Linux 操作系统有如此之多的版本。

DistroTest 网站提供的 Linux 发行版的列表如下。（LCTT 译注：其中也包括部分非 Linux 的操作系统如 FreeBSD 和 FreeDOS，或是分区工具如 Gparted）

* 4mLinux
* AbsoluteLinux
* AlpineLinux
* Antergos
* antiX Linux
* Aptosid
* ArchBang
* ArchLabs
* ArchLinux
* Archman
* ArchStrike
* ArtixLinux
* AryaLinux
* AvLinux
* BackBoxLinux
* BigLinux
* Bio-Linux
* BlackArch
* BlackLab
* BlackPantherOS
* blag
* BlankOn
* Bluestar
* Bodhi
* BunsenLabs
* Caine
* Calculate Linux Desktop
* CentOS 7
* Chakra
* ChaletOS
* ClearOS
* Clonezilla
* ConnochaetOS
* Cucumber
* Damn Small Linux
* Debian
* Devil-Linux
* Devuan
* DragonFly BSD
* Dragora
* Dyne:bolic
* Edubuntu
* elementaryOS
* Elive Linux
* Emmabuntüs
* Emmabuntüs
* Endless OS
* EnsoOS
* Exe GNU/Linux
* ExTiX
* Fatdog64
* Fedora
* FerenOS
* FreeBSD
* FreeDOS
* Frugalware
* Frugalware
* G4L
* GeckoLinux
* Gentoo
* GNewSense
* GoboLinux
* Gparted
* GreenieLinux
* GRML
* GuixSD
* Haiku
* Heads
* Kali Linux
* Kanotix
* KaOS
* Knoppix
* Kodachi
* KolibriOS
* Korora
* Kwort
* Linux Lite
* Linux Mint
* LiveRaizo
* LMDE
* LXLE OS
* Macpup
* Mageia
* MakuluLinux
* Manjaro
* MauiLinux
* MenuetOS
* MiniNo
* Modicia
* Musix
* MX Linux
* Nas4Free
* Neptune
* NetBSD
* Netrunner
* NixOs
* NuTyX
* OpenIndiana
* OpenMandriva
* openSUSE
* OracleLinux
* OSGeo live
* OviOS
* Parabola
* Pardus
* Parrot
* Parsix
* PCLinuxOS
* PeachOSI
* Peppermint
* Pinguy
* PinguyOS
* plopLinux
* PointLinux
* Pop!\_OS
* PORTEUS
* Puppy Linux
* PureOS
* Q4OS
* QubesOS
* Quirky
* ReactOS
* Redcore
* Rescatux
* RevengeOS
* RoboLinux
* Rockstor
* ROSA
* Runtu
* Sabayon
* SalentOS
* Salix
* ScientificLinux
* Siduction
* Slax
* SliTaz
* Solus
* SolydK
* SparkyLinux
* Springdale
* Stresslinux
* SubgraphOS
* SwagArch (18.03)
* Tails
* Tanglu
* Tiny Core
* Trisquel
* TrueOS
* TurnKey Linux
* Ubuntu及其官方衍生版本
* Uruk
* VectorLinux
* VineLinux
* VoidLinux
* Voyager
* VyOS
* WattOs
* Zentyal
* Zenwalk
* Zevenet
* Zorin OS

### 如何使用？

要试用任何操作系统，点击下面的链接： <https://distrotest.net/>

在这个网站，你会看到可用的操作系统列表。单击你想了解的发行版名称即可。

![](/data/attachment/album/201907/18/124357zoh8yx3k3jlnl3vb.png)

用 DistroTest 试用 200 多种Linux和Unix操作系统

本文中我会试用 Arch Linux。

单击发行版链接后，在跳转到的页面单击 “System start” 按钮即可启动所选操作系统。

![](/data/attachment/album/201907/18/124359tqott327caqq1t6a.png)

此现场版操作系统会在新浏览器窗口中启动。你可以通过内建的 noVNC viewer 访问它。请在浏览器中启用/允许 DistroTest 网站的弹出窗口，否则无法看到弹出的 noVNC 窗口。

按回车启动现场版系统。

![](/data/attachment/album/201907/18/124403zqswjxuzee6qeexe.png)

这就是 Arch Linux 现场版系统：

![](/data/attachment/album/201907/18/124406asgwzjezwd3v1js3.png)

你可以免费使用这个系统 1 小时。你可以试用该现场版操作系统、安装应用、卸载应用、删除或修改系统文件、测试配置或脚本。每次关机后，一切都会恢复成默认配置。

一旦试用结束，回到 DistroTest 页面并停止你试用的系统。如果你不想启用 DistroTest 页面的弹出窗口，用你本地系统安装的任意 VNC 客户端也可以。VNC 登录信息可在同一页面找到。

![](/data/attachment/album/201907/18/124407elpgggdw16p1givg.png)

DistroTest 服务对两类用户比较实用：想在线试用 Linux/Unix 系统，或是没有喜欢的操作系统现场版 ISO 镜像文件的人。我在 4G 网络上测试的结果一切正常。

### 实际上，我没法在这个虚拟机里安装新软件

试用期间我注意到的一个问题是这个虚拟机没有联网。除了本地环回接口之外没有其他网络接口。没有联网也没有本地镜像源的情况下我没法下载和安装新软件。我不知道为何网站声称可以安装软件。也许在这点上我遗漏了什么。我在 DistroTest 上能做的只是看看现成的系统，试用现场版而不能安装任何软件。

推荐阅读：

* [免费在线学习和练习 Linux命令！](https://www.ostechnix.com/learn-and-practice-linux-commands-online-for-free/)
* [在浏览器中运行 Linux 和其他操作系统](https://www.ostechnix.com/run-linux-operating-systems-browser/)

暂时就这样了。我不知道 DistroTest 团队如何设法托管了这么多操作系统。我肯定这会花不少时间。这的确是件值得称赞的工作。我非常感激项目成员的无私行为。荣誉归于你们。加油！

---

via: <https://www.ostechnix.com/test-100-linux-and-unix-operating-systems-online-for-free/>

作者：[sk](https://www.ostechnix.com/author/sk/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[0x996](https://github.com/0x996) 校对：[wxy](https://github.com/wxy)

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


MX Linux：一款专注于简洁性的中等体量发行版

Summary: 这个发行版可以使任何人在 Linux 上如家一般。

这个发行版可以使任何人在 Linux 上如家一般。

>
> 这个发行版可以使任何人在 Linux 上如家一般。
>
>
>

![](/data/attachment/album/201907/18/235101h8m8cwcew2zwl8kq.png)

Linux 有着如此多种的发行版。许多发行版为了使自己与众不同而做出了很多改变。另一方面，许多发行版之间的区别又是如此之小，你可能会问为什么有人还愿意不厌其烦的重复别人已经做过的工作呢？也正是基于这一疑惑，让我好奇为什么 [antiX](https://antixlinux.com/) 和 [MEPIS](https://en.wikipedia.org/wiki/MEPIS)这两个社区要联合推出一个特殊的发行版，考虑到具体情况应该会是一个搭载 Xfce 桌面并基于 antiX 的版本，由 MEPIS 社区承担开发。

这一开发中的使用 Xfce 桌面的 antiX 系统是否会基于它之前的发行版呢？毕竟，antiX 旨在提供一个“基于 Debian 稳定版的快速、轻量级、易于安装的非 systemd 的 live CD 发行版”。antiX 所搭载的桌面是 [LXDE](https://lxde.org/)，能够极好的满足关于轻量化系统的相关要求和特性。那究竟是什么原因使得 antiX 决定构建另一个轻量化发行版呢，仅仅是因为这次换成了 Xfce 吗？好吧，Linux 社区中的任何人都知道，增加了不同风格的好的轻量级发行版是值得一试的（特别是可以使得我们的旧硬件摆脱进入垃圾填埋场的宿命）。当然，LXDE 和 Xfce 并不完全属于同一类别。LXDE 应该被认为是一个真正的轻量级桌面，而 Xfce 应该被认为是一个中等体量的桌面。朋友们，这就是为什么 MX Linux 是 antiX 的一个重要迭代的关键。一个基于 Debian 的中等体量的发行版，它包含你完成工作所需的所有工具。

但是在 MX Linux 中有一些直接从 antiX 借用来的非常有用的东西 —— 那就是安装工具。当我初次设置了 VirtualBox 虚拟机来安装 MX Linux 时，我认为安装的系统将是我已经习惯的典型的、非常简单的 Linux 系统。令我非常惊讶的是，MX Linux 使用的 antiX 安装程序打破了以往的痛点，特别是对于那些对尝试 Linux 持观望态度的人来说。

因此，甚至在我开始尝试 MX Linux 之前，我就对它有了深刻的印象。让我们来看看是什么让这个发行版的安装如此特别，最后再来看看桌面。

你可以从[这里](https://mxlinux.org/download-links)下载 MX Linux 17.1。系统的最低要求是:

* CD/DVD驱动器（以及能够从该驱动器引导的 BIOS）或 live USB（以及能够从 USB 引导的 BIOS）
* 英特尔 i486 或 AMD 处理器
* 512 MB 内存
* 5 GB 硬盘空间
* 扬声器，AC97 或 HDA-compatible 声卡
* 作为一个 LiveUSB 使用，需要 4 GB 空间

### 安装

MX Linux 安装程序使安装 Linux 变得轻而易举。虽然它可能不是外观最现代化的安装工具，但也已经差不多了。安装的要点是从选择磁盘和选择安装类型开始的（图 1）。

![install](/data/attachment/album/201907/18/235102zrdzscdjsqgta7dv.jpg "install")

*图 1：MX Linux 的安装程序截图之一*

下一个重要的界面（图 2）要求你设置一个计算机名称、域名和（如果需要的话，为微软网络设置）工作组。

![network](/data/attachment/album/201907/18/235103cjkkui00xei67iq8.jpg)

*图 2：设置网络名称*

配置工作组的能力是第一个真正值得称赞的。这是我记忆中第一款在安装期间提供此选项的发行版。它还应该提示你，MX Linux 提供了开箱即用的共享目录功能。它做到了，而且深藏功与名。它并不完美，但它可以在不需要安装任何额外包的情况下工作（稍后将详细介绍）。

最后一个重要的安装界面（需要用户交互）是创建用户帐户和 root 权限的密码（图 3）。

![user](/data/attachment/album/201907/18/235104xf7g0dg9uurmsgd7.jpg "user")

*图 3：设置用户帐户详细信息和 root 用户密码*

最后一个界面设置完成后，安装将完成并要求重新启动。重启后，你将看到登录屏幕。登录并享受 MX Linux 带来的体验。

### 使用

Xfce 桌面是一个非常容易上手的界面。默认设置将面板位于屏幕的左边缘（图 4）。

![desktop](/data/attachment/album/201907/18/235105mkstisski51sigzi.jpg "desktop")

*图 4：MX Linux 的默认桌面*

如果你想将面板移动到更传统的位置，右键单击面板上的空白点，然后单击“面板”>“面板首选项”。在显示的窗口中（图 5），单击样式下拉菜单，在桌面栏、垂直栏或水平栏之间进行选择你想要的模式。

![panel](/data/attachment/album/201907/18/235106eh9chv2m2rjm6vjj.jpg "panel")

*图 5：配置 MX Linux 面板*

桌面栏和垂直选项的区别在于，在桌面栏模式下，面板垂直对齐，就像在垂直模式下一样，但是插件是水平放置的。这意味着你可以创建更宽的面板（用于宽屏布局）。如果选择水平布局，它将默在顶部，然后你必须取消锁定面板，单击关闭，然后（使用面板左侧边缘的拖动手柄）将其拖动到底部。你可以回到面板设置窗口并重新锁定面板。

除此之外，使用 Xfce 桌面对于任何级别的用户来说都是无需动脑筋的事情……就是这么简单。你会发现很多涵盖了生产力（LibreOffice、Orage Calendar、PDF-Shuffler）、图像（GIMP)、通信（Firefox、Thunderbird、HexChat）、多媒体（Clementine、guvcview SMTube、VLC媒体播放器）的软件，和一些 MX Linux 专属的工具（称为 MX 工具，涵盖了 live-USB 驱动器制作工具、网络助手、包管理工具、仓库管理工具、live ISO 快照工具等等）。

### Samba

让我们讨论一下如何将文件夹共享到你的网络。正如我所提到的，你不需要安装任何额外的包就可以使其正常工作。只需打开文件管理器，右键单击任何位置，并选择网络上的共享文件夹。系统将提示你输入管理密码（已在安装期间设置）。验证成功之后，Samba 服务器配置工具将打开（图 6）。

![sharing](/data/attachment/album/201907/18/235107wudepgzdximx53dc.jpg "sharing")

*图 6：向网络共享一个目录*

单击“+”按钮配置你的共享。你将被要求指定一个目录，为共享提供一个名称/描述，然后决定该共享是否可写和可见（图 7）。

![sharing](/data/attachment/album/201907/18/235107xub6sjn6zhz55b3i.jpg "sharing")

*图 7：在 MX Linux 上配置共享*

当你单击 Access 选项时，你可以选择是让每个人都访问共享，还是限于特定的用户。问题就出在这里。此时，没有用户可以共享。为什么？因为它们还没有被添加。有两种方法可以把它们添加到共享：从命令行或使用我们已经打开的工具。让我们用一种更为简单的方法。在 Samba 服务器配置工具的主窗口中，单击“首选项” > “Samba 用户”。在弹出的窗口中，单击“添加用户”。

将出现一个新窗口（图 8），你需要从下拉框中选择用户，输入 Windows 用户名，并为用户键入/重新键入密码。

![Samba](/data/attachment/album/201907/18/235108cyeecsevuydchzmq.jpg "Samba")

*图 8：向 Samba 添加用户*

一旦你单击“确定”，这用户就会被添加，并且基于你的网络的对用户的共享功能也随之启用。创建 Samba 共享从未变得如此容易。

### 结论

MX Linux 使任何从桌面操作系统转到 Linux 都变得非常简单。尽管有些人可能会觉得桌面界面不太现代，但发行版的主要关注点不是美观，而是简洁。为此，MX Linux 以出色的方式取得了成功。Linux 的这个特色发行版可以让任何人在使用 Linux 的过程中感到宾至如归。尝试这一中等体量的发行版，看看它能否作为你的日常系统。

---

via: <https://www.linux.com/learn/intro-to-linux/2018/4/mx-linux-mid-weight-distro-focused-simplicity>

作者：[JACK WALLEN](https://www.linux.com/users/jlwallen) 译者：[qfzy1233](https://github.com/qfzy1233) 校对：[wxy](https://github.com/wxy) 选题：[lujun9972](https://github.com/lujun9972)

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


32位支持：使用 GCC 交叉编译

Summary: 使用 GCC 在单一的构建机器上来为不同的 CPU 架构交叉编译二进制文件。

其实有个小小小问题：

在ubuntu上使用arm-linux-gnueabi-gcc命令，所需要安装的软件包为apt-get install gcc-arm-linux-gnueabi

（找了半天）

使用 GCC 在单一的构建机器上来为不同的 CPU 架构交叉编译二进制文件。

>
> 使用 GCC 在单一的构建机器上来为不同的 CPU 架构交叉编译二进制文件。
>
>
>

![](/data/attachment/album/201907/19/054242nwhludz9tm2lwd8t.jpg)

如果你是一个开发者，要创建二进制软件包，像一个 RPM、DEB、Flatpak 或 Snap 软件包，你不得不为各种不同的目标平台编译代码。典型的编译目标包括 32 位和 64 位的 x86 和 ARM。你可以在不同的物理或虚拟机器上完成你的构建，但这需要你为何几个系统。作为代替，你可以使用 GNU 编译器集合 ([GCC](https://gcc.gnu.org/)) 来交叉编译，在单一的构建机器上为几个不同的 CPU 架构产生二进制文件。

假设你有一个想要交叉编译的简单的掷骰子游戏。在大多数系统上，以 C 语言来编写这个相对简单，出于给添加现实的复杂性的目的，我以 C++ 语言写这个示例，所以程序依赖于一些不在 C 语言中东西 (具体来说就是 `iostream`)。

```
#include <iostream>
#include <cstdlib>

using namespace std;

void lose (int c);
void win (int c);
void draw ();

int main() {
  int i;
    do {
      cout << "Pick a number between 1 and 20: \n";
      cin >> i;
      int c = rand ( ) % 21;
      if (i > 20) lose (c);
      else if (i < c ) lose (c);
      else if (i > c ) win (c);
      else draw ();
      }
      while (1==1);
      }

void lose (int c )
  {
    cout << "You lose! Computer rolled " << c << "\n";
  }

void win (int c )
  {
    cout << "You win!! Computer rolled " << c << "\n";
   }

void draw ( )
   {
     cout << "What are the chances. You tied. Try again, I dare you! \n";
   }
```

在你的系统上使用 `g++` 命令编译它：

```
$ g++ dice.cpp -o dice
```

然后，运行它来确认其工作：

```
$ ./dice
Pick a number between 1 and 20:
[...]
```

你可以使用 `file` 命令来查看你刚刚生产的二进制文件的类型：

```
$ file ./dice
dice: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked (uses shared libs), for GNU/Linux 5.1.15, not stripped
```

同样重要，使用 `ldd` 命令来查看它链接哪些库：

```
$ ldd dice
linux-vdso.so.1 => (0x00007ffe0d1dc000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
(0x00007fce8410e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
(0x00007fce83d4f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6
(0x00007fce83a52000)
/lib64/ld-linux-x86-64.so.2 (0x00007fce84449000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1
(0x00007fce8383c000)
```

从这些测试中，你已经确认了两件事：你刚刚运行的二进制文件是 64 位的，并且它链接的是 64 位库。

这意味着，为实现 32 位交叉编译，你必需告诉 `g++` 来：

1. 产生一个 32 位二进制文件
2. 链接 32 位库，而不是 64 位库

### 设置你的开发环境

为编译成 32 位二进制，你需要在你的系统上安装 32 位的库和头文件。如果你运行一个纯 64 位系统，那么，你没有 32 位的库或头文件，并且需要安装一个基础集合。最起码，你需要 C 和 C++ 库（`glibc` 和 `libstdc++`）以及 GCC 库（`libgcc`）的 32 位版本。这些软件包的名称可能在每个发行版中不同。在 Slackware 系统上，一个纯 64 位的带有 32 位兼容的发行版，可以从 [Alien BOB](http://www.slackware.com/%7Ealien/multilib/) 提供的 `multilib` 软件包中获得。在 Fedora、CentOS 和 RHEL 系统上：

```
$ yum install libstdc++-*.i686
$ yum install glibc-*.i686
$ yum install libgcc.i686
```

不管你正在使用什么系统，你同样必须安装一些你工程使用的 32 位库。例如，如果你在你的工程中包含 `yaml-cpp`，那么，在编译工程前，你必需安装 `yaml-cpp` 的 32 位版本，或者，在很多系统上，安装 `yaml-cpp` 的开发软件包（例如，在 Fedora 系统上的 `yaml-cpp-devel`）。

一旦这些处理好了，编译是相当简单的：

```
$ g++ -m32 dice.cpp -o dice32 -L /usr/lib -march=i686
```

`-m32` 标志告诉 GCC 以 32 位模式编译。`-march=i686` 选项进一步定义来使用哪种最优化类型（参考 `info gcc` 了解选项列表）。`-L` 标志设置你希望 GCC 来链接的库的路径。对于 32 位来说通常是 `/usr/lib`，不过，这依赖于你的系统是如何设置的，它可以是 `/usr/lib32`，甚至 `/opt/usr/lib`，或者任何你知道存放你的 32 位库的地方。

在代码编译后，查看你的构建的证据：

```
$ file ./dice32
dice: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
dynamically linked (uses shared libs) [...]
```

接着，当然， `ldd ./dice32` 也会指向你的 32 位库。

### 不同的架构

在 64 位相同的处理器家族上允许 GCC 做出很多关于如何编译代码的假设来编译 32 位软件。如果你需要为完全不同的处理器编译，你必需安装适当的交叉构建实用程序。安装哪种实用程序取决于你正在编译的东西。这个过程比为相同的 CPU 家族编译更复杂一点。

当你为相同处理器家族交叉编译时，你可以期待找到与 32 位库集的相同的 64 位库集，因为你的 Linux 发行版是同时维护这二者的。当为一个完全不同的架构编译时，你可能不得不穷追你的代码所需要的库。你需要的版本可能不在你的发行版的存储库中，因为你的发行版可能不为你的目标系统提供软件包，或者它不在容易到达的位置提供所有的软件包。如果你正在编译的代码是你写的，那么你可能非常清楚它的依赖关系是什么，并清楚在哪里找到它们。如果代码是你下载的，并需要编译，那么你可能不熟悉它的要求。在这种情况下，研究正确编译代码需要什么（它们通常被列在 `README` 或 `INSTALL` 文件中，当然也出现在源文件代码自身之中），然后收集需要的组件。

例如，如果你需要为 ARM 编译 C 代码，你必须首先在 Fedora 或 RHEL 上安装 `gcc-arm-linux-gnu`（32 位）或 `gcc-aarch64-linux-gnu`（64 位）；或者，在 Ubuntu 上安装 `arm-linux-gnueabi-gcc` 和 `binutils-arm-linux-gnueabi`。这提供你需要用来构建（至少）一个简单的 C 程序的命令和库。此外，你需要你的代码使用的任何库。你可以在惯常的位置（大多数系统上在 `/usr/include`）放置头文件，或者，你可以放置它们在一个你选择的目录，并使用 `-I` 选项将 GCC 指向它。

当编译时，不使用标准的 `gcc` 或 `g++` 命令。作为代替，使用你安装的 GCC 实用程序。例如：

```
$ arm-linux-gnu-g++ dice.cpp \
  -I/home/seth/src/crossbuild/arm/cpp \
  -o armdice.bin
```

验证你构建的内容：

```
$ file armdice.bin
armdice.bin: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV) [...]
```

### 库和可交付结果

这是一个如何使用交叉编译的简单的示例。在真实的生活中，你的源文件代码可能产生的不止于一个二进制文件。虽然你可以手动管理，在这里手动管理可能不是好的正当理由。在我接下来的文章中，我将说明 GNU 自动工具，GNU 自动工具做了使你的代码可移植的大部分工作。

---

via: <https://opensource.com/article/19/7/cross-compiling-gcc>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

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


Epic Games 给予 Blender 基金会 120 万美元的拨款支持

[Epic MegaGrants](https://www.unrealengine.com/en-US/megagrants) 是 [Epic Games](https://www.epicgames.com/store/en-US/) 的一个计划，用于支持游戏开发人员、企业专业人士、内容创建者和工具开发人员使用<ruby> 虚幻引擎 <rt>  Unreal Engine </rt></ruby>（UE）做出神奇的作品或增强 3D 图形社区的开源功能。

作为该计划的一部分，Epic Games 给予 [Blender 基金会](https://www.blender.org/) 120 万美元拨款以帮助改善他们的发展。如果你还不知道，Blender 是[最好的开源视频编辑](https://itsfoss.com/open-source-video-editors/)之一，特别是以创建专业的 3D 计算机图形而闻名。

**Tim Sweeney**（Epic Games 的创始人兼首席执行官）这样评论这笔授予：

>
> “开放式工具、库和平台对数字内容生态系统的未来至关重要。……Blender 是艺术社区持久的资源，我们的目标是确保其进步，造福所有创作者。”
>
>
>

即使这是个好消息，也有人对此不满意。在本文中，我们将看一下得到该拨款后的 Blender 基金会的计划，以及人们对此的看法。

### Blender 基金会的改进计划

![Image Credit : BlenderNation](/data/attachment/album/201907/19/064207nm5m7o575eoxe7e7.jpg)

在[新闻稿](https://www.blender.org/press/epic-games-supports-blender-foundation-with-1-2-million-epic-megagrant/)当中，Blender 基金会提到了如何利用这笔资金以及用于何种目的：

>
> “Epic MegaGrant 将在未来三年内逐步交付，并将为 Blender 的<ruby> 专业 Blender 发展计划 <rt>  Professionalizing Blender Development Initiative </rt></ruby>做出贡献。”
>
>
>

所以，没错，这笔财务帮助将以现金提供 —— 但是，它要在 3 年内完成。也就是说，我们要期待 Blender 基金会及其软件质量得到重大改进还有很长时间。

这是 **Ton Roosendaal**（Blender 基金会的创始人）需要说明的它将如何被利用：

>
> “Epic Games 的支持对 Blender 是一个重要里程碑，”Blender 基金会的创始人兼董事长 Ton Roosendaal 说道。“由于这项拨款，我们将对我们的项目组织进行大量投入，以改善支持、协作和代码质量实践。因此，我们期望更多来自该行业的贡献者加入我们的项目。”
>
>
>

### 为什么人们对此不是很喜欢？

让我澄清一下，就我个人而言，我不喜欢用 Epic Game 的市场或客户端玩游戏。

由于各种原因（功能、隐私等），我更喜欢 [Steam](https://itsfoss.com/install-steam-ubuntu-linux/) 而不是 Epic Games。

Epic Games 被称为游戏社区中的坏人，因为它最近几款游戏专属于其平台 —— 尽管很多人警告用户该平台上的隐私问题。

不仅如此，Epic Games 的首席执行官在过去发过这样的推特：

>
> 安装 Linux 相当于人们不喜欢美国的政治趋势时就搬到加拿大。
>
>
> 不，我们必须为今天的自由而战，如今我们拥有自由。
>
>
> * Tim Sweeney（@TimSweeneyEpic）[2018年2月15日](https://twitter.com/TimSweeneyEpic/status/964284402741149698?ref_src=twsrc%5Etfw)
>
>
>

嗯，这并不直接暗示他讨厌 Linux 或者没有积极推动 Linux 的游戏开发 —— 但是只是因为很多历史情况，人们并不真正信任 Epic Games 的决策。所以，他们并不欣赏与 Blender 基金会的联系（即使这个财务帮助是积极的）。

这与财务帮助无关。但是，Epic Games 缺乏良好的声誉（当然是主观的），因此，人们对此的看法是消极的。看看拨款公告后的一些推文：

>
> 希望不要走向排它……这可能会破坏你的声誉。
>
>
> * Ray（@ Epicshadow1994）[2019年7月15日](https://twitter.com/Epicshadow1994/status/1150787326626263042?ref_src=twsrc%5Etfw)
>
>
> 我对将来会变成什么样感到怀疑。EPIC 最近一直在采取敌对战术。
>
>
> * acrid Heartwood（@acrid\_heartwood）[2019年7月15日](https://twitter.com/acrid_heartwood/status/1150789691979030528?ref_src=twsrc%5Etfw)
>
>
>

### 总而言之

你仍然可以[通过 Lutris 在 Linux 上运行 Epic Games](/article-10968-1.html)，但这是很单薄的非官方尝试。Epic Games 没有表示有兴趣正式支持该项目。

所以，很明显不是每个人都信任 Epic Games。因此，这个消息带来了各种消极反应。

但是，这笔拨款肯定会帮助 Blender 基金会改善其组织和软件质量。

你怎么看待这件事？请在下面的评论中告诉我们您的想法。

---

via: <https://itsfoss.com/epic-games-blender-grant/>

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

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


命令行快速提示：权限

Summary: 这些权限保护文件和文件夹免受未经授权的访问。

这些权限保护文件和文件夹免受未经授权的访问。

![](/data/attachment/album/201907/20/002206gmse8odsynsz71ds.jpg)

Fedora 与所有基于 Linux 的系统一样，它提供了一组强大的安全特性。其中一个基本特性是文件和文件夹上的*权限*。这些权限保护文件和文件夹免受未经授权的访问。本文将简要介绍这些权限，并向你展示如何使用它们共享对文件夹的访问。

### 权限基础

Fedora 本质上是一个多用户操作系统，它也有*组*，用户可以是其成员。但是，想象一下一个没有权限概念的多用户系统，不同的登录用户可以随意阅读彼此的内容。你可以想象到这对隐私或安全性并不是很好。

Fedora 上的任何文件或文件夹都分配了三组权限。第一组用于拥有文件或文件夹的*用户*，第二组用于拥有它的*组*，第三组用于其他人，即既不是该文件的用户也不是拥有该文件的组中的用户。有时这被称为*全世界*。

### 权限意味着什么

每组权限都有三种形式：*读*、*写*和*执行*。其中每个都可以用首字母来代替，即 `r`、`w`、`x`。

#### 文件权限

对于*文件*，权限的含义如下所示：

* 读（`r`）：可以读取文件内容
* 写（`w`）：可以更改文件内容
* 执行（`x`）：可以执行文件 —— 这主要用于打算直接运行的程序或脚本

当你对任何文件进行详细信息列表查看时，可以看到这三组权限。尝试查看系统上的 `/etc/services` 文件：

```
$ ls -l /etc/services
-rw-r--r--. 1 root root 692241 Apr  9 03:47 /etc/services
```

注意列表左侧的权限组。如上所述，这些表明三种用户的权限：拥有该文件的用户，拥有该文件的组以及其他人。用户所有者是 `root`，组所有者是 `root` 组。用户所有者具有对文件的读写权限，`root` 组中的任何人都只能读取该文件。最后，其他任何人也只能读取该文件。（最左边的 `-` 显示这是一个常规文件。）

顺便说一下，你通常会在许多（但不是所有）系统配置文件上发现这组权限，它们只由系统管理员而不是普通用户更改。通常，普通用户需要读取其内容。

#### 文件夹（目录）权限

对于文件夹，权限的含义略有不同：

* 读（`r`）：可以读取文件夹内容（例如 `ls` 命令）
* 写（`w`）：可以更改文件夹内容（可以在此文件夹中创建或删除文件）
* 执行（`x`）：可以搜索文件夹，但无法读取其内容。（这听起来可能很奇怪，但解释起来需要更复杂的文件系统细节，这超出了本文的范围，所以现在就这样吧。）

看一下 `/etc/grub.d` 文件夹的例子：

```
$ ls -ld /etc/grub.d
drwx------. 2 root root 4096 May 23 16:28 /etc/grub.d
```

注意最左边的 `d`，它显示这是一个目录或文件夹。权限显示用户所有者（`root`）可以读取、更改和 `cd` 到此文件夹中。但是，没有其他人可以这样做 —— 无论他们是否是 `root` 组的成员。注意，你不能 `cd` 进入该文件夹。

```
$ cd /etc/grub.d
bash: cd: /etc/grub.d: Permission denied
```

注意你自己的主目录是如何设置的：

```
$ ls -ld $HOME
drwx------. 221 paul paul 28672 Jul  3 14:03 /home/paul
```

现在，注意除了作为所有者之外，没有人可以访问此文件夹中的任何内容。这是特意的！你不希望其他人能够在共享系统上读取你的私人内容。

### 创建共享文件夹

你可以利用此权限功能轻松创建一个文件夹以在组内共享。假设你有一个名为 `finance` 的小组，其中有几个成员需要共享文档。因为这些是用户文档，所以将它们存储在 `/home` 文件夹层次结构中是个好主意。

首先，[使用 sudo](https://fedoramagazine.org/howto-use-sudo/) 创建一个共享文件夹，并将其设置为 `finance` 组所有：

```
$ sudo mkdir -p /home/shared/finance
$ sudo chgrp finance /home/shared/finance
```

默认情况下，新文件夹具有这些权限。注意任何人都可以读取或搜索它，即使他们无法创建或删除其中的文件：

```
drwxr-xr-x. 2 root root 4096 Jul  6 15:35 finance
```

对于金融数据来说，这似乎不是一个好主意。接下来，使用 `chmod` 命令更改共享文件夹的模式（权限）。注意，使用 `g` 更改所属组的权限，使用 `o` 更改其他用户的权限。同样，`u` 会更改用户所有者的权限：

```
$ sudo chmod g+w,o-rx /home/shared/finance
```

生成的权限看起来更好。现在，`finance` 组中的任何人（或用户所有者 `root`）都可以完全访问该文件夹及其内容：

```
drwxrwx---. 2 root finance 4096 Jul  6 15:35 finance
```

如果其他用户尝试访问共享文件夹，他们将无法执行此操作。太棒了！现在，我们的金融部门可以将文档放在一个共享的地方。

### 其他说明

还有其他方法可以操作这些权限。例如，你可能希望将此文件夹中的任何文件设置为 `finance` 组所拥有。这需要本文未涉及的其他设置，但请继续关注我们，以了解关于该主题的更多信息。

---

via: <https://fedoramagazine.org/command-line-quick-tips-permissions/>

作者：[Paul W. Frields](https://fedoramagazine.org/author/pfrields/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

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


Linux 入门十法

Summary: 想要进入 Linux 之门，试试这十个方法。

想要进入 Linux 之门，试试这十个方法。

>
> 想要进入 Linux 之门，试试这十个方法。
>
>
>

![](/data/attachment/album/201907/20/061809wwkmb51vqookoqq5.jpg)

文章《[什么是 Linux 用户？](https://opensource.com/article/19/6/what-linux-user)》的作者 Anderson Silva 明确表示，现今人们使用 Linux（在某种程度上）就像使用 Windows 一样，只要你对“使用 Linux”这个事情定义得足够广义。尽管如此，如果你的生活中没有太多的使用 Linux 的机会，现在正是以前所未有的方式尝试 Linux 的好时机。

以下是 Linux 入门的十种方法。你可以试试其中一个或者全部试试。

### 1、加入免费 shell 计划

![Free shell screenshot](/data/attachment/album/201907/20/061648howbfjuooytw4t4t.png "Free shell screenshot")

有很多人在用不上的服务器上运行 Linux （请记住，“Linux 服务器”可以是从最新的超级计算机到丢弃的、已经用了 12 年的笔记本电脑中的任何一个）。为了充分利用多余的计算机，许多管理员用这些备用的机器提供了免费的 shell 帐户。

如果你想要登录到 Linux 终端中学习命令、shell 脚本、Python 以及 Web 开发的基础知识，那么免费的 shell 帐户是一种简单、免费的入门方式。下面是一个可以体验一下的简短列表：

* [Freeshell.de](https://freeshell.de) 是一个自 2002 年以来一直在线服务的公用 Linux 系统。你可以通过 SSH、IPv6 和 OpenSSL 进行访问，以获得 Linux shell 体验，并且可以使用 MySQL 数据库。
* [Blinkenshell](https://blinkenshell.org/wiki/Start) 提供了一个学习 Unix、使用 IRC、托管简单网站和共享文件的 Linux shell。它自 2006 年以来一直在线服务。
* [SDF 公用 Unix 系统](https://sdf.org/)成立于 1987 年，提供了免费的 NetBSD 账户。当然，NetBSD 不是 Linux，但它是开源的 Unix，因此它提供了类似的体验。它也有几个自制应用程序，因此它不但有普通的免费 shell，还提供了老派 BBS。

免费 shell 帐户常会受到滥用，因此你表现出的可信程度和积极参与协作的意愿越多，你的体验就越好。你可以通过专门请求或小额捐赠来证明你的诚意，通常可以访问数据库引擎、编译器和高级编程语言。你还可以要求安装其他软件或库，但需经管理员批准。

#### 如何使用

公用 shell 帐户是尝试真正的 Linux 系统的好方法。你无法获得 root 权限这一事实意味着你可以学习本地软件管理，而无需做更多的维护工作。你可以做很多实际操作，以完成真正的工作，尽管它们对于学习关键任务还不够。

### 2、试试 Windows WSL 2 里面的 Linux

不管你信不信，微软从 2019 年 6 月开始在 Windows 里面带上了 Linux，这意味着你可以从 Windows 运行 Linux 应用程序，这是 [Windows 里的 Linux 子系统](https://devblogs.microsoft.com/commandline/wsl-2-is-now-available-in-windows-insiders/)的第二版（WSL 2）。虽然它主要针对开发人员，但 Windows 用户可以发现 WSL 2 是一个来自于他们熟悉的桌面上的 Linux 环境，而没有被任何虚拟化占用额外资源。这是一个以进程方式运行在 Windows 机器上的 Linux。现阶段，它仍然是一个新的动向和正在进行中的工作，因此它可能会发生变化。如果你试图用它承担重任，你可能会遇到一两个错误，但是如果你只是想入门 Linux、学习一些命令，并感受在基于文本的环境如何完成工作，那么 WSL 2 可能正是你所需要的。

#### 如何使用

WSL 还没有明确的用途或目的，但它在 Windows 机器上提供了 Linux 环境。你可以获得 root 访问权限，并可以运行 Linux 发行版和应用程序，因此这是一种简单而无缝的学习方式。但是，即使 WSL *是Linux*，它也不能给你典型的 Linux 体验。它是由 Windows 提供的 Linux，而这不太会是你在现实世界中遇到的情况。WSL 是一个开发和教育工具，但如果你可以使用它，那么你应该试试它。

### 3、把 Linux 放到可启动的 U 盘上

![Porteus Linux](/data/attachment/album/201907/20/061649e0oeyo322vt2tq2t.jpg "Porteus Linux")

便携 Linux 可以安装到 U 盘上随身携带，并用该 U 盘启动你遇到的任何计算机。你可以获得个性化的 Linux 桌面，而无需担心所用于启动的主机上的数据。该计算机上原有的系统不会与你的 Linux 系统相接触，并且你的 Linux 操作系统也不会影响计算机。它非常适合酒店商务中心、图书馆、学校的公共计算机，或者只是给自己一个不时启动 Linux 的借口。

与许多其他快速获得的 Linux shell 不同，此方法为你提供了一个完整而强大的 Linux 系统，包括桌面环境，可访问你需要的任何软件以及持久的数据存储。

这个系统永远不会改变。你要保存的任何数据都将写入压缩的文件系统中，然后在引导时将其作为覆盖层应用于该系统。这种灵活性允许你选择是以持久模式启动，将所有数据保存回 U 盘；还是以临时模式启动，以便一旦关闭电源，你所做的一切都会消失。换句话说，你可以将其用作不受信任的计算机上的安全信息亭或你信任的计算机上的便携式操作系统。

你可以尝试很多 [U 盘发行版](/article-11040-1.html)，有些带有精简的桌面环境，适用于低功耗计算机，而另一些带有完整的桌面环境。我偏爱 [Porteus](http://porteus.org) Linux。在过去的八年里，我每天都把它放在我的钥匙链上，在商务旅行中使用它作为我的主要计算平台，如果在工作场所或家中计算机发生问题，它也会用作工具盘。它是一个可靠而稳定的操作系统，有趣且易于使用。

在 Mac 或 Windows 上，下载 [Fedora Media Writer](https://getfedora.org/en/workstation/download/) 以创建你下载的任何便携式发行版的可启动 U 盘。

#### 如何使用

从 U 盘启动一个 “实时 Linux” 可提供完整的 Linux 发行版环境。虽然数据存储与你安装到硬盘驱动器的系统略有不同，但其它的所有内容都与你在 Linux 桌面上所期望的一样。在便携式 Linux 操作系统上你几乎没有什么不能做的，所以在你的钥匙串上挂上一个以解锁你遇到的每台计算机的全部潜力吧。

### 4、在线游览

![Linux tour screenshot](/data/attachment/album/201907/20/061649wubi8bbbpkbbggtl.jpg "Linux tour screenshot")

Ubuntu 的某个人想到了在浏览器中托管 Ubuntu GNOME 桌面的好主意。如果想要自己尝试一下，可以打开 Web 浏览器并导航到 [tour.ubuntu.com](http://tour.ubuntu.com/en/#)。你可以选择要演示的活动，也可以跳过单个课程并单击 “<ruby> 四处看看 <rt>  Show Yourself Around </rt></ruby>” 按钮。

即使你是 Linux 桌面的新用户，你也可能会发现“四处看看”功能比你想象的更还简单。在线游览中，你可以四处看看，查看可用的应用程序，以及查看典型的默认 Linux 桌面。你不能在 Firefox 中调整设置或启动另一个在线游览（这是我尝试过的第一件事），虽然你可以完成安装应用程序的动作，但你无法启动它们。但是，如果你之前从未使用过 Linux 桌面，并且想要看到各种新奇的东西，那这就是一场旋风之旅。

#### 如何使用

在线游览真的只是一次旅行。如果你从未见过 Linux 桌面，那么这是一个了解它的情况的机会。这不是一个正式的使用，而是一个吸引过客的展示。

### 5、在浏览器中用 JavaScript 运行 Linux

![JSLinux](/data/attachment/album/201907/20/061650vo6dr2bodrm6cd76.jpg "JSLinux")

就在不久之前，虚拟化的计算成本还很高，还仅限于使用先进的硬件的用户。而现在虚拟化已被优化到可以由 JavaScript 引擎执行的程度，这要归功于 Fabrice Bellard，它是优秀的开源 [QEMU](https://www.qemu.org) 机器仿真器和虚拟器的创建者。

Bellard 还启动了 JSLinux 项目，该项目允许你在浏览器中运行 Linux 和其他操作系统，这算是闲暇时间的一个乐趣。它仍然是一个实验性项目，但它是一个技术奇迹。打开 Web 浏览器导航到 [JSLinux](https://bellard.org/jslinux/) 页面，你可以启动基于文本的 Linux shell 或精简的图形 Linux 环境。你可以上传和下载文件到 JSLinux 主机上或（在理论上可以）将文件发送到一个网络备份位置，因为 JSLinux 可以通过 VPN 套接字访问互联网（尽管上限速度取决于 VPN 服务）。

#### 如何使用

你不会在 JSLinux 上正经使用多少时间，这个环境可能太不寻常了，无法学习 Linux 正常工作的广泛课程。但是，如果你厌倦了在一台普通的 PC 上运行 Linux 并想在一个真正独特的平台上试用 Linux，那么 JSLinux 就属于这种。

### 6、阅读关于它的书

并非每种 Linux 体验都要用到计算机。也许你是那种喜欢在开始新事物之前保持距离先观察和研究的人，或者你可能还不清楚 “Linux” 所包含的内容，或者你喜欢全情投入其中。关于 Linux 如何工作、运行 Linux 的方式以及 Linux 世界中有什么，有很多书可以读。

你越熟悉开源世界，就越容易理解常用术语，将城市神话与实际经验区分开来。我们不时会发布[图书清单](https://opensource.com/article/19/1/tech-books-new-skils)，但我的最爱之一是 Hazel Russman 的《[The Charm of Linux](http://www.lulu.com/shop/hazel-russman/the-charm-of-linux/paperback/product-21229401.html)》。这是一个从不同角度巡览 Linux 的过程，是由一位独立作者在发现 Linux 时兴奋之余写作的。

#### 如何使用

没有什么能比一本好书更好。这是体验 Linux 的最不传统的方法，但对于喜欢印刷文字的人来说，它既舒适又有效。

### 7、弄块树莓派

![Raspberry Pi 4](/data/attachment/album/201907/20/061650fhgjcel18bpz1kya.jpg "Raspberry Pi 4")

如果你正在使用[树莓派](https://opensource.com/resources/raspberry-pi)，那么你就正在运行 Linux。Linux 和低功耗计算很容易上手。关于树莓派的好处，除了价格低于 100 美元之外，它的[网站](https://www.raspberrypi.org/)是专为教育而设计的。你可以了解树莓派所能做的一切，当你了解之后，就知道了 Linux 可以为你做些什么。

#### 如何使用

树莓派被设计为低功耗计算机。这意味着你不能像过去那样做那么多的多任务处理，但这是一种避免不堪重负的方便方法。树莓派是学习 Linux 及其附带的所有可能性的好方法，它是发现环保、小型、简化计算能力的有趣方式。并且一定要关注 Opensource.com 上的[提示](https://opensource.com/article/19/3/raspberry-pi-projects)、[技巧](https://opensource.com/article/19/3/piflash)和[有趣的](https://opensource.com/article/19/3/gamepad-raspberry-pi)[活动](https://opensource.com/life/16/3/make-music-raspberry-pi-milkytracker)，特别是在每年三月份的树莓派之周的期间。

### 8、赶上容器热潮

如果你从事于神话般的[云服务](https://opensource.com/resources/cloud)的后端工作，那么你已经听说过容器热潮。虽然你可以在 Windows、Azure、Mac 和 Linux 上运行 Docker 和 Kubernetes，但你可能不知道容器本身就是 Linux。云计算应用和基础设施实际上是精简的 Linux 系统，部分虚拟化，部分基于裸机。如果启动容器，则会启动微型的超特定的 Linux 发行版。

容器与虚拟机或物理服务器[不同](https://opensource.com/article/19/6/how-ssh-running-container)。它们不打算用作通用操作系统。但是，如果你在容器中进行开发，你可以停下来四处打量一下，你将了解到 Linux 系统的结构、保存重要文件的位置以及最常见的命令。你甚至可以[在线尝试容器](https://linuxcontainers.org/lxd/try-it/)，你可以在我的文章中[深入到 Linux 容器的背后](https://opensource.com/article/18/11/behind-scenes-linux-containers)了解它们如何工作的。

#### 如何使用

根据设计，容器特定于一个单一任务，但它们是 Linux，因此它们非常灵活。你可以如你预期的使用它们，也可以在你的 Linux 实验当中将容器构建到大部分完整系统中。它虽然不提供桌面 Linux 体验，但它是完整的 Linux 体验。

### 9、以虚拟机方式安装 Linux

虚拟化是尝试操作系统的简便方法，[VirtualBox](https://virtualbox.org) 是一种很好的开源虚拟化方法。VirtualBox 可以在 Windows 和 Mac 上运行，因此你可以将 Linux 安装为虚拟机（VM）并使用它，就好像它只是一个应用程序一样。如果你不习惯安装操作系统，VirtualBox 也是一种尝试 Linux 的非常安全的方式，而不会意外地将其安装覆盖在你通常的操作系统上。

#### 如何使用

将 Linux 作为虚拟机运行既方便又简单，既可以作为试运行使用，也可以在需要 Linux 环境时进行双启动或重启进入。它功能齐全，因为它使用虚拟硬件，宿主操作系统负责驱动你的外围设备。将 Linux 作为虚拟机运行的唯一缺点主要是心理上的。如果你打算使用 Linux 作为主要操作系统，但最终默认在宿主操作系统上做除了特定于 Linux 的大多数任务，那么虚拟机就会让你失望。否则，虚拟机是现代技术的胜利，在 VirtualBox 中使用 Linux 可以为你提供 Linux 所提供的所有最佳功能。

### 10、安装一个 Linux

![Fedora Silverblue](/data/attachment/album/201907/20/061651i9wnnnnnz0lpi4ee.png "Fedora Silverblue")

如果对上述方式有疑问，那么总会有传统的方式。如果你想给予 Linux 应有的关注，你可以下载 Linux，将安装程序刻录到 U 盘（或 DVD，如果你更喜欢光学介质的话），并将其安装在你的计算机上。Linux 是开源的，所以任何想要花时间打包 Linux 的人都可以分发 Linux，并且可以将所有可用的部分分配到通常称为发行版的内容中。无论问哪一个 Linux 用户什么发行版是“最好的”，你必然都会得到一个不同的答案（主要是因为这个术语“最佳”通常是尚未定义的）。大多数人都认可：你应该使用适合你的 Linux 发行版，这意味着你应该测试一些流行的发行版，并坚持使你的计算机按照你期望的行为行事。这是一种务实和功能性的方法。例如，如果发行版无法识别你的网络摄像头而你希望它可以正常工作，则可以使用一个可识别该网络摄像头的发行版。

如果你之前从未安装过操作系统，你会发现大多数 Linux 发行版都包含一个友好且简单的安装程序。只需下载一个发行版（它们以 ISO 文件提供），然后下载 [Fedora Media Writer](https://getfedora.org/en/workstation/download/) 来创建一个可启动的安装 U 盘。

#### 如何使用

安装 Linux 并将其用作操作系统是迈向熟悉它的一步。怎么使用它都可以。你可能会发现一些你从未了解过的所需的必备功能，你可能会比你想象的更多地了解计算机，并且可能会改变你的世界观。你使用一个 Linux 桌面，或者是因为它易于下载和安装，或者是因为你想要削弱公司中某些人的霸主地位，或者只是因为它可以帮助你完成工作。

无论你的原因是什么，只需尝试使用上面这些任何（或所有）这些方式。

---

via: <https://opensource.com/article/19/7/ways-get-started-linux>

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

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


如何在 MacOS 上安装 Elasticsearch

Summary: 安装 Elasticsearch 很复杂！以下是如何在 Mac 上安装。

安装 Elasticsearch 很复杂！以下是如何在 Mac 上安装。

>
> 安装 Elasticsearch 很复杂！以下是如何在 Mac 上安装。
>
>
>

![](/data/attachment/album/201907/20/064958dnnwvp8wqzqq4fm2.jpg)

[Elasticsearch](https://www.getapp.com/it-management-software/a/qbox-dot-io-hosted-elasticsearch/) 是一个用 Java 开发的开源全文搜索引擎。用户上传 JSON 格式的数据集。然后，Elasticsearch 在向集群索引中的文档添加可搜索的引用之前先保存原始文档。

Elasticsearch 创建还不到九年，但它是最受欢迎的企业搜索引擎。Elastic 在 2019 年 6 月 25 日发布了最新的更新版本 7.2.0。

[Kibana](https://www.elastic.co/products/kibana) 是 Elasticsearch 的开源数据可视化工具。此工具可帮助用户在 Elasticsearch 集群的内容索引之上创建可视化。

[Sunbursts](https://en.wikipedia.org/wiki/Pie_chart#Ring)、[地理空间数据地图](https://en.wikipedia.org/wiki/Spatial_analysis)、[关系分析](https://en.wikipedia.org/wiki/Correlation_and_dependence)和实时数据面板只是其中几个功能。并且由于 Elasticsearch 的机器学习能力，你可以了解哪些属性可能会影响你的数据（如服务器或 IP 地址）并查找异常模式。

在上个月的 [DevFest DC](https://www.devfestdc.org/) 中，Booz Allen Hamilton 的首席数据科学家 [Summer Rankin 博士](https://www.summerrankin.com/about)将 TED Talk 的内容数据集上传到了 Elasticsearch，然后使用 Kibana 快速构建了面板。出于好奇，几天后我去了一个 Elasticsearch 聚会。

由于本课程针对的是新手，因此我们从第一步开始：在我们的笔记本上安装 Elastic 和 Kibana。如果没有安装这两个包，我们无法将莎士比亚的文本数据集作为测试 JSON 文件创建可视化了。

接下来，我将分享在 MacOS 上下载、安装和运行 Elasticsearch V7.1.1 的分步说明。这是我在 2019 年 6 月中旬参加 Elasticsearch 聚会时的最新版本。

### 下载适合 MacOS 的 Elasticsearch

1、进入 <https://www.elastic.co/downloads/elasticsearch>，你会看到下面的页面：

![The Elasticsearch download page.](/data/attachment/album/201907/20/065017vv8c61wv8kvvvnov.png "The Elasticsearch download page.")

2、在**下载**区，单击 **MacOS**，将 Elasticsearch TAR 文件（例如，`elasticsearch-7.1.1-darwin-x86_64.tar`）下载到 `Downloads` 文件夹。 3、双击此文件并解压到自己的文件夹中（例如，`elasticsearch-7.1.1`），这其中包含 TAR 中的所有文件。

**提示**：如果你希望 Elasticsearch 放在另一个文件夹中，现在可以移动它。

### 在 MacOS 命令行中运行 Elasticsearch

如果你愿意，你可以只用命令行运行 Elasticsearch。只需遵循以下流程：

1、[打开终端窗口](https://support.apple.com/en-ca/guide/terminal/welcome/mac)。

2、在终端窗口中，输入你的 Elasticsearch 文件夹。例如（如果你移动了程序，请将 `Downloads` 更改为正确的路径）：

```
$ cd ~Downloads/elasticsearch-1.1.0
```

3、切换到 Elasticsearch 的 `bin` 子文件夹，然后启动该程序。例如：

```
$ cd bin
$ ./elasticsearch
```

这是我启动 Elasticsearch 1.1.0 时命令行终端显示的一些输出：

![Terminal output when running Elasticsearch.](/data/attachment/album/201907/20/065020fbpv5zwske8gkwop.png "Terminal output when running Elasticsearch.")

**注意**：默认情况下，Elasticsearch 在前台运行，这可能会导致计算机速度变慢。按 `Ctrl-C` 可以阻止 Elasticsearch 运行。

### 使用 GUI 运行 Elasticsearch

如果你更喜欢点击操作，你可以像这样运行 Elasticsearch：

1、打开一个新的 **Finder** 窗口。

2、在左侧 Finder 栏中选择 `Downloads`（如果你将 Elasticsearch 移动了另一个文件夹，请进入它）。

3、打开名为 `elasticsearch-7.1.1` 的文件夹（对于此例）。出现了八个子文件夹。

![The elasticsearch/bin menu.](/data/attachment/album/201907/20/065021iev3qa56j43jj36a.png "The elasticsearch/bin menu.")

4、打开 `bin` 子文件夹。如上面的截图所示，此子文件夹中有 20 个文件。 5、单击第一个文件，即 `elasticsearch`。

请注意，你可能会收到安全警告，如下所示：

![The security warning dialog box.](/data/attachment/album/201907/20/065021w1ze3cjneqctbc00.jpg "The security warning dialog box.")

这时候要打开程序需要：

1. 在警告对话框中单击 **OK**。
2. 打开**系统偏好**。
3. 单击**安全和隐私**，打开如下窗口：

![Where you can allow your computer to open the downloaded file.](/data/attachment/album/201907/20/065021c61nyx7hlb5h2vq7.jpg "Where you can allow your computer to open the downloaded file.")
4. 单击**永远打开**，打开如下所示的确认对话框：

![Security confirmation dialog box.](/data/attachment/album/201907/20/065022xpap8g88w3md9uos.jpg "Security confirmation dialog box.")
5. 单击**打开**。会打开一个终端窗口并启动 Elasticsearch。

启动过程可能需要一段时间，所以让它继续运行。最终，它将完成，你最后将看到类似这样的输出：

![Launching Elasticsearch in MacOS.](/data/attachment/album/201907/20/065022eigxpzvn31n3gzni.png "Launching Elasticsearch in MacOS.")

### 了解更多

安装 Elasticsearch 之后，就可以开始探索了！

该工具的 [Elasticsearch：开始使用](https://www.elastic.co/webinars/getting-started-elasticsearch?ultron=%5BB%5D-Elastic-US+CA-Exact&blade=adwords-s&Device=c&thor=elasticsearch&gclid=EAIaIQobChMImdbvlqOP4wIVjI-zCh3P_Q9mEAAYASABEgJuAvD_BwE)指南会根据你的目标指导你。它的介绍视频介绍了在 [Elasticsearch Service](https://info.elastic.co/elasticsearch-service-gaw-v10-nav.html?ultron=%5BB%5D-Elastic-US+CA-Exact&blade=adwords-s&Device=c&thor=elasticsearch%20service&gclid=EAIaIQobChMI_MXHt-SZ4wIVJBh9Ch3wsQfPEAAYASAAEgJo9fD_BwE) 上启动托管集群，执行基本搜索查询，通过创建、读取、更新和删除（CRUD）REST API 等方式操作数据的步骤。

本指南还提供文档链接，开发控制台命令，培训订阅以及 Elasticsearch Service 的免费试用版。此试用版允许你在 AWS 和 GCP 上部署 Elastic 和 Kibana 以支持云中的 Elastic 集群。

在本文的后续内容中，我们将介绍在 MacOS 上安装 Kibana 所需的步骤。此过程将通过不同的数据可视化将你的 Elasticsearch 查询带到一个新的水平。 敬请关注！

---

via: <https://opensource.com/article/19/7/installing-elasticsearch-macos>

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

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


ElectronMail：ProtonMail 和 Tutanota 的桌面客户端

Summary: ElectronMail 可以简单地视作 ProtonMail 和 Tutanota 的电子邮件客户端。它使用三大技术构建：Electron、TypeScript 和 Angular。

互联网上的大多数人都拥有来自 Google 等大公司的电子邮件帐户，但这些帐户不尊重你的隐私。值得庆幸的是，目前有 [Tutanota](https://itsfoss.com/tutanota-review/) 和 [ProtonMail](https://itsfoss.com/protonmail/) 等具有隐私意识的替代品。问题是并非所有人都有桌面客户端。今天，我们将研究一个为你解决该问题的项目。我们来看看 ElectronMail 吧。

>
> ‘Electron’ 警告！
>
>
> 以下应用是使用 Electron 构建的（也就是名为 ElectronMail 的原因之一）。如果使用 Electron 让你感到不安，请将此视为触发警告。
>
>
>

### ElectronMail：Tutanota 和 ProtonMail 的桌面客户端

![Electron Mail About](/data/attachment/album/201907/21/200603jedbowmssb6ausub.jpg)

[ElectronMail](https://github.com/vladimiry/ElectronMail) 可以简单地视作 ProtonMail 和 Tutanota 的电子邮件客户端。它使用三大技术构建：[Electron](https://electronjs.org/)、[TypeScript](http://www.typescriptlang.org/) 和 [Angular](https://angular.io/)。它包括以下功能：

* 针对每个电子邮件提供商提供多帐户支持
* 加密本地存储
* 适用于 Linux、Windows、macOS 和 FreeBSD
* 原生通知系统
* 带有未读消息总数的系统托盘图标
* 用主密码保护帐户信息
* 可切换的视图布局
* 可离线访问电子邮件
* 电子邮件在本地加密存储
* 批量导出电子邮件为 EML 文件
* 全文搜索
* 内置/预打包的 Web 客户端
* 可以为每个帐户配置代理
* 拼写检查
* 支持双因素身份验证，以提高安全性

目前，ElectronMail 仅支持 Tutanota 和 ProtonMail。我觉得他们将来会增加更多。根据 [GitHub 页面](https://github.com/vladimiry/ElectronMail)：“多电子邮件提供商支持。目前支持 ProtonMail 和 Tutanota。”

ElectronMail 目前是 MIT 许可证。

#### 如何安装 ElectronMail

目前，有几种方法可以在 Linux 上安装 ElectronMail。对于Arch 和基于 Arch 的发行版，你可以从[Arch 用户仓库](https://aur.archlinux.org/packages/electronmail-bin)安装它。ElectrionMail 还有一个 Snap 包。要安装它，只需输入 `sudo snap install electron-mail` 即可。

对于所有其他 Linux 发行版，你可以[下载](https://github.com/vladimiry/ElectronMail/releases) `.deb` 或 `.rpm` 文件。

![Electron Mail Inbox](/data/attachment/album/201907/21/200604tlxe3v4lplsxlclg.jpg)

你也可以[下载](https://github.com/vladimiry/ElectronMail/releases)用于 Windows 中的 `.exe` 安装程序或用于 macOS 的 `.dmg` 文件。甚至还有给 FreeBSD 用的文件。

#### 删除 ElectronMail

如果你安装了 ElectronMail 并确定它不适合你，那么[开发者](https://github.com/vladimiry)建议采用几个步骤。 **在卸载应用之前，请务必遵循以下步骤。**

如果你使用了“保持登录”功能，请单击菜单上的“注销”。这将删除本地保存的主密码。卸载 ElectronMail 后也可以删除主密码，但这涉及编辑系统密钥链。

你还需要手动删除设置文件夹。在系统托盘中选择应用图标后，单击“打开设置文件夹”可以找到它。

![Electron Mail Setting][13]

### 我对 ElectronMail 的看法

我通常不使用电子邮件客户端。事实上，我主要依赖于 Web 客户端。所以，这个应用对我没太大用处。

话虽这么说，但是 ElectronMail 看着不错，而且很容易设置。它有大量开箱即用的功能，并且高级功能并不难使用。

我遇到的一个问题与搜索有关。根据功能列表，ElectronMail 支持全文搜索。但是，Tutanota 的免费版本仅支持有限的搜索。我想知道 ElectronMail 如何处理这个问题。

最后，ElectronMail 只是一个基于 Web Email 的一个 Electron 封装。我宁愿在浏览器中打开它们，而不是将单独的系统资源用于运行 Electron。如果你只[使用 Tutanota，他们有自己官方的 Electron 桌面客户端](/article-10688-1.html)。你可以尝试一下。

我最大的问题是安全性。这是两个非常安全的电子邮件应用的非官方应用。如果有办法捕获你的登录信息或阅读你的电子邮件怎么办？比我聪明的人必须通过源代码才能确定。这始终是一个安全项目的非官方应用的问题。

你有没有使用过 ElectronMail？你认为是否值得安装 ElectronMail？你最喜欢的邮件客户端是什么？请在下面的评论中告诉我们。

如果你发现这篇文章很有趣，请花一点时间在社交媒体、Hacker News 或 [Reddit](http://reddit.com/r/linuxusersgroup) 上分享它。

---

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

作者：[John Paul](https://itsfoss.com/author/john/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


成为终身学习者，并在工作中取得成功

>
> 在具有适应性文化的开放组织中，学习应该一直持续 —— 但不会总是出现在正式场合。我们真的明白它是如何工作的吗？
>
>
>

![Writing in a notebook](/data/attachment/album/201907/21/205725u2eeh7yzuhq442g2.jpg "Writing in a notebook")

持续学习是指人们为发展自己而进行的持续的、职业驱动的、有意识的学习过程。对于那些自认是持续学习者的人来说，学习从未停止 —— 这些人从日常经历中看到学习机会。与同事进行辩论、反思反馈、在互联网上寻找问题的解决方案、尝试新事物或冒险都是一个人在工作中可以进行的非正式学习活动的例子。

持续学习是开放组织中任何人的核心能力。毕竟，开放的组织是建立在同行相互思考、争论和行动的基础上的。在开放组织的模棱两可、话语驱动的世界中茁壮成长，每天都需要员工具备这些技能。

不幸的是，科学文献在传播我们在工作中学习的知识方面、帮助个人欣赏和发展自己的学习能力方面，做得很差。因此，在本文系列中，我将向你介绍非正式学习，并帮助你理解将学习视为一种技能会如何帮助你在任何组织中茁壮成长，尤其是在开放式组织中。

### 为什么这么正式？

迄今为止，对组织中学习的科学研究主要集中在正式学习而不是非正式学习的设计、交付和评估上。

投资于员工知识、技能和能力的发展是一个组织保持其相对于竞争对手优势的重要方式。组织通过创建或购买课程、在线课程、研讨会等来使学习机会正规化。这些课程旨在像个人传授与工作相关的内容，就像学校里的班级一样。对于一个组织来说，提供一门课程是一种简单（如果成本高昂的话）的方法，可以确保其员工的技能或知识保持最新。同样，教室环境是研究人员的天然实验室，使得基于培训的研究和工作不仅可能，而且强大。

当然，有些东西人们不需要培训来学习；通常，人们通过研究答案、与同事交谈、思考、实验或适应变化来学习。事实上，[最近的评估表明](https://www.groupoe.com/images/Accelerating_On-the-Job-Learning_-_White_Paper.pdf) 70% 到 80% 的与工作相关的知识不是在培训中学到的，而是在工作中非正式学到的。这并不是说正规的培训无效；培训可能非常有效，但它是一种精确的干预方式。在工作的大部分方面正式培训一个人是不现实的，尤其是当这些工作变得更加复杂的时候。

因此，非正式学习，或者任何发生在结构化学习环境之外的学习，对工作场所来说是极其重要的。事实上，[最近的科学证据](https://www.researchgate.net/publication/316490244_Antecedents_and_Outcomes_of_Informal_Learning_Behaviors_a_Meta-Analysis)表明，非正式学习比正式培训更能预测工作表现。

那么，为什么机构和科学界如此关注培训呢？

### 循环过程

除了我前面提到的原因，研究非正式学习可能非常困难。与正式学习不同，非正式学习发生在非结构化环境中，高度依赖于个人，很难或不可能观察到。

直到最近，大多数关于非正式学习的研究都集中在定义非正式学习的合格特征和确定非正式学习在理论上是如何与工作经验联系在一起的。研究人员描述了一个[动态的周期性过程](https://psycnet.apa.org/record/2008-13469-009)，通过这个过程，个人可以在组织中非正式地学习。

与正式学习一样，非正式学习发生在非结构化环境中，高度依赖于个人，很难或不可能观察。

在这个过程中，个人和组织都有创造学习机会的机构。例如，一个人可能对学习某样东西感兴趣，并为此表现出学习行为。组织以向个人提供反馈的形式，可能表明需要学习。这可能是一个糟糕的绩效评估、一个在项目中发表的评论、或者一个不是个人指导的组织环境的更广泛的变化。这些力量在组织环境中（例如，有人尝试了一个新想法，他或她的同事认识到并奖励了这种行为）或者通过在个人的头脑中反思（例如，有人反思了关于他或她的表现的，并决定在学习工作中付出更多的努力）。与培训不同，非正式学习不遵循正式的线性过程。个人可以随时体验过程的任何部分，同时体验过程的多个部分。

### 开放组织中的非正式学习

具体而言，在开放组织中，既减少了对等级制度的重视程度，又更加注重对参与式文化的重视程度，这两者都推动了这种非正式的学习。简而言之，开放式组织只是为个人和组织环境提供了更多互动和激发学习的机会。此外，想法和变革需要开放式组织中员工给予更广泛的认同 —— 而认同需要对他人的适应性和洞察力的欣赏。

也就是说，仅仅增加学习机会并不能保证学习会发生或成功。有人甚至可能会说，开放式组织中常见的模糊性和公开性话语可能会阻止不擅长持续学习的人——同样，随着时间的推移学习的习惯和开放式组织的核心能力——尽可能有效地为组织做出贡献。

解决这些问题需要一种以一致的方式跟踪非正式学习。最近，科学界呼吁创造衡量非正式学习的方法，这样就可以进行系统的研究来解决非正式学习的前因后果的问题。我自己的研究集中在这一呼吁上，我花了几年时间发展和完善我们对非正式学习行为的理解，以便可以衡量它们。

在本文系列的第二部分，我将重点介绍我最近在一个开放式组织中进行的一项研究的成果，在该研究中，我测试了我对非正式学习行为的研究，并将它们与更广泛的工作环境和个人工作成果联系起来。

---

via: <https://opensource.com/open-organization/19/7/informal-learning-adaptability>

作者：[Colin Willis](https://opensource.com/users/colinwillishttps://opensource.com/users/marcobravo) 选题：[lujun9972](https://github.com/lujun9972) 译者：[heguangzhi](https://github.com/heguangzhi)
 校对：[wxy](https://github.com/wxy)

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


专访青云“四爷”和他的 KubeSphere

Summary: 在上个月刚刚结束的 KubeCon 2019 上，我见到了江湖人称“四爷”的青云QingCloud 容器平台负责人周小四。期间，我和四爷聊起了 KubeSphere 容器平台，也对青云 QingCloud 的容器战略有了一些管中窥豹的了解。我想将这些谈话整理出来分享给大家，希望可以通过我的侧写让大家也认识一下这位“四爷”和他的团队打造的 KubeSphere。

正在用青云的服务器

在国内的云服务市场当中，青云QingCloud 一直是一个积极活跃的身影，但是我却从来没有和他们直接接触过，而在上个月刚刚结束的 KubeCon 2019 上，我见到了江湖人称“四爷”的青云QingCloud 容器平台负责人周小四。自以为尚不算健谈的我，跟人聊起技术来，居然聊得非常投机。期间，我和四爷聊起了 KubeSphere 容器平台，也对青云QingCloud 的容器战略有了一些管中窥豹的了解。我想将这些谈话整理出来分享给大家，希望可以通过我的侧写让大家也认识一下这位“四爷”和他的团队打造的 KubeSphere。

![](/data/attachment/album/201907/21/213835pp2apnnpho4n9na4.jpg)

谈话自然是从我所不了解的青云QingCloud 开始的。

### 天然的企业服务提供者

说起青云QingCloud，自然不能放过其背后的历史，这段与众不同的历史，造就了这家与众不同的云计算企业。

谈起云计算，大家会想起国内公有云市场占有率较高的一些互联网公司旗下的云服务商，这些公司的云计算业务最初大多是从内部的云计算技术能力转化出来的，将其在内部打造的云计算能力开放给公众，从而形成了我们所熟悉的多个云计算平台。

>
> 青云QingCloud 从一开始就走上了和绝大多数云计算创业企业不同的道路——自研云计算架构。
>
>
>

 “与这些云计算公司不同，青云QingCloud 从 2012 年公司创立的那一刻开始，就是一个立足于为企业服务的云计算企业，其三位创始人均有多年在 IBM 工作的深厚背景，使得他们对于企业级用户的市场和用户的需求更加敏感，也能更加准确把握企业用户的需求和痛点。”四爷介绍说，“并且，青云QingCloud 的创始人均是资深的技术研发出身，对于技术方向的发展更加敏感，也正是如此，青云从一开始就走上了和绝大多数云计算创业企业不同的道路——自研云计算架构。”说到这里，四爷眼中洋溢着自信的眼神，作为一个同样从事了多年技术工作的老兵，我对这种技术驱动型的公司更加感兴趣了。

### 私有云成就下的青云

从 2012 年开始，青云QingCloud 便开始进行自研底层云计算架构的研究。自研架构所需要付出的技术成本，使得青云的公有云服务上线花费了一年半的时间，但是，付出总有回报，在自研架构上的投入，使得青云QingCloud更加灵活和富有创造力，可以更加专心地为企业提供更优质的服务。

而同时期一些使用 OpenStack 作为基础设施的云计算企业，却受制于社区的发展速度，不得不在底层基础设施的优化上花费大量的精力。说到这里，四爷表示，“这为青云争取到了宝贵的时间！”

到了 2014 年，青云QingCloud 已经取得了长足的发展。这个时候他们意识到，在当时的环境下只做公有云服务是“一条腿走路”，无法获得长时间的可持续发展，而私有云服务能够更好的发挥青云QingCloud 在企业服务的能力和经验。因此，青云开始正式进军私有云市场，并在次年年初，成功拿下中国银行、招商银行等的私有云业务。

随着青云QingCloud 的私有云业务的发展一路开疆拓土，他们逐渐建立起来成熟完善的公有云、私有云、托管云、混合云一体化的产品服务体系，后续不断得到越来越多客户的认可，我们耳熟能详的光大银行、泰康保险、中国太平、江苏交通控股、华润创业、本钢集团、国航、四川航空、好未来、VIPKID 等，都是青云的客户。

在云业务一片向好的环境下，容器时代正在悄悄的来临了。

### 容器时代来临，KubeSphere 应运而生

容器时代的到来，让各家云服务商都开始积极布局容器服务，而在青云QingCloud，容器服务的负责人便是我们今天谈话的主角周小四——圈内亲切的称其为“四爷”。

#### 从 Docker 开始

在当时，开源社区内的主流容器方案，一种是一出现就迅速风靡技术世界的 Docker 技术，另一个则是同样源自 CGroup 技术的 LXC。那个时候，看起来 LXC 的目标更远大，但是在对这两种技术方向进行分析后，最终四爷选择了 Docker 的方案。

我们也曾经在容器技术初现萌芽时，对出现的各种容器技术做过跟踪，因此，我也好奇为什么四爷会在 Docker 技术初生时就押注 Docker，因为这不仅仅是社区爱好，这个决策肯定会影响到公司的技术方向和时间差优势。

四爷对此的解释说，“2013 年才提出的 Docker 虽然很年轻，但是作为一个新的容器化解决方案，它所提出的解决方案适合这个面向应用、快速迭代、微服务正在兴起的大趋势，符合并适合现行的软件开发模式发展，可以让技术把更多的精力放在如何构建一个更好的应用上。”而 LXC 则延续了重型虚拟机时代的思路，将更多的精力放在了如何更好的隔离宿主环境与容器内的环境上。这很重要，但是已经不再适合如今快节奏、快迭代的开发环境了，因此，他认为 Docker 一定会是最终的胜利者，决定选择 Docker 作为青云QingCloud 容器服务平台的底层设施。

虽然现在回过头看，Docker 容器技术在初期确实存在容器逃逸的安全问题，如今也有专注于提高隔离性的安全容器技术的出现，但是在当时，这种折中确实极大地激发了 DevOps 和相关生态的迅速发展。而正当其时，能敏锐地发现这一点，并果断下注，我认为这离不开一位技术领袖的远瞻。

在选择了容器技术方向之后，四爷的下一个挑战就来了。Docker 最初主要是一个容器引擎，其外围的生态尚不完善，尤其是对于企业大规模应用所需要的容器编排才刚刚开始获得发展。业界也推出几种不同的容器编排技术方案，这包括 Docker 推出的 Swarm、Google 推出的 Kubernetes，以及 Apache Mesos，那么作为面对企业提供服务的青云QingCloud，该如何选择呢？

#### 押注 Kubernetes

现在看起来，当初四爷选择 Kubernetes 作为技术方向似乎是在技术人直觉之下做的选择。但是，这背后是经过了深思熟虑和足够的技术远见之下的选择。

四爷告诉我，他选择 Kubernetes 的主要原因有以下几点：

1. Kubernetes 背后由 Google 支持：显然 Google 支持的 Kubernetes 会拥有更多的资源来发展，它也拥有更加强大的生命力。
2. Kubernetes 是 Google 在内部基础设施的容器编排方面的经验升华：Kubernetes 的应用场景是容器编排，这种大规模容器的实践经验十分难得。而 Google 作为互联网领域的巨鳄，所拥有的经验和技术积累具有无可比拟的优势。相比之下，初创企业 Docker 公司在海量的可伸缩服务上的经验就稍显孱弱。而且 Docker 公司本身的开发力量显然有限，在容器技术日新月异的快节奏发展之下，仅仅是 Docker 引擎本身的开发和维护就已经有些不堪负荷，所以对他们在 Docker Swarm 上发展自然不如 Kubernetes 那么快。
3. Kubernetes 的社区更加活跃：得益于 Google、Red Hat 等企业的开源社区基础，Kubernetes 从一开始就是整个社区目光的焦点，大量的开发者活跃在 Kubernetes 及其周边项目上，活跃的社区为企业培养了足够的储备人才，这一点是 Docker Swarm 和 Mesos 都无法比拟的。
4. 容器时代已经与以虚机为基础的云计算时代有着本质的区别，以前人们关注的是功能、性能、安全等问题，创建一个虚机每个厂商可以用不同的 API 提供，用户要的是资源，不会太在意这些差异性，因此自研的云平台有存在的市场空间。但容器时代是面向应用的，用户更关注的是开放、标准等问题。简单来说，如果大家都用 Java 语言，你去采用一个只能使用汇编语言的平台，这个平台基本上很难有市场。容器编排系统一样，用 YAML 或 JSON 定义的声明式接口就是标准，大家害怕的就是选错标准。所以当大家都选择 Kubernetes 的时候，实际上选择的是标准。

经过权衡，四爷及其团队最终选择了 Kubernetes 作为青云QingCloud容器平台的编排工具。而随着对 Kubernetes 的不断的深入研究，更是让他相信，Kubernetes 会成为最终的胜利者。

他补充道：“Kubernetes 的一个主要关注是规范化，应用可以随意的在不同的基础设施间迁移，从而避免了供应商锁定。这会使得越来越多的人主动尝试使用 Kubernetes，此长彼消之下，Kubernetes 会成为最终的赢家。”

#### KubeSphere 的诞生

确定了 Kubernetes 方向后，四爷开始对各个 Kubernetes 产品进行了调研。通过不断试用、体验后，他敏锐的发现，现有市场上大多数厂商都没有认真做产品，要么是为了尽快抢占市场、在市场上发布尚不完善的产品，要么就是厂商的防御性产品。

“他们是以做项目的心态在做产品，没有精细化地打磨产品，更多的是功能的堆砌。”周小四解释到。

“就好像考试做题，一共十道题，每道题 10 分。他们可以做八道题，但是因为做得不好，每道题都只能得五分。而我们即使只做了 6 道题，但是每道题都是 10 分。最后的总分还是我们高，企业还是会选择我们。”四爷举了一个例子来说明“做项目”和“做产品”的不同。

在他看来，也正是这些企业以“做项目”的心态来做容器产品，才给了 KubeSphere 弯道超车的机会，以满分的心态，做出更好的产品。

![](/data/attachment/album/201907/21/214427f1jgggz8xxg1hzbz.jpg)

从 2017 年 6 月开始，周小四便开始调研和思考如何设计 KubeSphere 的原型。2018 年 4 月，KubeSphere 项目正式立项，经过了三个月的苦干，终于在同年 6 月正式发布了 KubeSphere 的社区版，并邀请了部分用户进行内测。

精细化打磨的 KubeSphere 得到了用户的很多好评。而这一切并没有让 KubeSphere 团队止步，他们又进行了 5 个月的研发迭代，继而在 2018 年的 12 月发布了 KubeSphere 高级版，并进入了公测期。KubeSphere 团队吸收了在社区版上积累的经验，高级版将更多的精力放在企业用户的专业性、高可用性、易用性需求上。而就在前不久的 4 月发布的 KubeSphere 高级版 2.0 中，融合了更多的企业级特性。

四爷向我介绍说，KubeSphere 容器平台在企业增强特性上主要可总结为四点：

* 极简：向导式图形化的 UI 全方位覆盖调度、管理、运维监控等功能，低学习成本高效使用。
* 安全：基于微服务级别细粒度的多租户权限管理，完美实现资源隔离，保障数据安全性。
* 运维友好：可视化、自动化的统一运维，以及全方位、立体化的秒级频率监控，极大程度降低运维复杂度。
* 兼容企业传统 IT：尊重企业 IT 管理规范，兼容企业既有 IT 管理流程，可平滑整合到现有 IT 体系中。

比如说，在 Kubernetes 社区中，官方仪表盘糟糕的监控功能饱受诟病，为了解决这个问题，KubeSphere 团队为用户提供了更细粒度的权限控制、自定义控制、日志查看等功能，帮助企业更好的解决监控的需求。此外，KubeSphere 还提供了诸如 DevOps、微服务治理等能力，可以帮助企业更加简单的完成 Kubernetes 生态的接入。这些方面的差异性体现在以下几点：

* DevOps：无需Jenkins配置、图形化拖拽编辑、即点即用
* 微服务：治理功能完善、全可视化治理、低成本运维（轻点即用、零 Istio 基础也可以）

在接下来会发布的版本中，四爷透露道，新版会更加适配企业用户的需求，将会为企业用户提供诸如多集群、多租户、多网络、AI平台等企业亟需的特性，还将对 KubeSphere 进行架构层面的改造，让 KubeSphere 支持模块化配置，用户可以根据自己的需要，选择所需的产品模块，从而让 KubeSphere 的架构更加灵活、自如。

#### KubeSphere 的开源基因

如今是开源的年代，而云计算、容器和 Kubernetes 更在开源中诞生并茁壮成长起来的奇迹花园。作为开源社区，我们也非常关心 KubeSphere 的开源情况。

四爷表示，KubeSphere 项目从一开始，就是抱着开源的想法去做的，项目从初期便开源。他提到，青云QingCloud 做 KubeSphere 一开始就和其他的企业的思路不同。青云有天然的企业服务基因，从一开始 KubeSphere 就是面向企业设计和研发的，企业对于开源产品会更加的信任，而开源模式也能够让 KubeSphere 走得更远。

>
> 这种开放的策略，让 KubeSphere 在早期收获了大量用户，也让 KubeSphere 赢得了用户的信赖。
>
>
>

此外，四爷表示，KubeSphere 的开源也是符合用户利益的。实际上，有不少用户在开始使用青云QingCloud 的云服务之前，已经采购了其他的云服务、虚拟化或者物理设备，很难马上迁移到青云上来。开源的 KubeSphere 可以帮助他们在其它基础设施上先用起来。这种开放的策略，让 KubeSphere 在早期收获了大量用户，也让 KubeSphere 赢得了用户的信赖。

#### 当 KubeSphere 根植于青云时

开源的 KubeSphere 与云平台是完全解耦的，这意味着 KubeSphere 可以运行于任何公有云基础设施之上，而当 KubeSphere 根植于青云QingCloud 自身所提供的基础设施时，就出现了 QKE。

![](/data/attachment/album/201907/21/214502s727sd7s7b457g5n.jpg)

周小四说，“QKE 是我们在 KubeSphere 容器平台的基础上，加入了青云的基础设施，以进一步的降低用户的使用成本。”

“从一开始做我们就知道，KubeSphere 的最终形态一定是对接公有云的，也只有公有云才有足够的资源提供给企业进行弹性伸缩。我们在 KubeSphere 的基础之上，对接了青云的高可扩展性网络和高性能存储，帮助企业用户更加简便地使用 Kubernetes 完成应用开发，而无需将大量的精力投放在底层基础设施的运维上。”

进一步的，在 QKE 之上，QKS（QingCloud Kubernetes Service）也会很快推出，QKS 是 QKE 的升级版。“QKS 也在 KubeSphere 之上，提供了不少非常有价值的功能，比如说，相比于其他家的容器服务，QKS 能够根据用量付费，这和其他家以集群来付费的理念是完全不同的。他们的本质上还是购买计算资源，然后在资源内部进行弹性。而 QKS 的底层是一个大的资源池，所有的用户都从这个资源池内调取资源进行计算，使用完成后就可以释放，从而达到真正的‘按量计费’。”

### 尾声

或许都是技术人吧，两个有共同话题的人聊起来技术就滔滔不绝，聊天中，我问起了“四爷”这个颇为霸气的昵称的来历，据说最初这来自同事们的戏称，周小四在技术问题上非常较真，十分霸气；而在攻关重大技术难关时，又能领着大家迎头挑战，颇有侠气，因此这个昵称在技术部门内不胫而走，最后在整个青云公司内，甚至连客户都这样亲切称呼他。我想，这正是一个技术人对技术的自信、对自己做出来的产品自信，才能自信立于云计算的潮头吧。

![](/data/attachment/album/201907/21/220647qzeehp9v4kqhlvp7.png)

>
> “穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访，将为大家介绍中国开源领域中一些积极推动开源，谙熟开源思想的技术人，并辨析其思考、挖掘其动因，揭示其背后所发生的事情，为关注开源、有志于开源的企业和技术人标出一条路径。
>
>
> 取名为“穿山甲”寓意有二：取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用；穿山甲是珍稀保护动物，宣传公益。
>
>
>


如何在 Debian/Ubuntu 上手动安装安全更新？

![](/data/attachment/album/201907/21/233619rm8kvj5z9ojkpwc8.jpg)

在 Linux 上通过命令行安装一个包程序是一件简单的事。在一行命令中组合使用多个命令能让你更加简单地完成任务。

安全更新也同样如此。

在这个教程里面，我们会向你展示如何查看可用的安全更新，以及如何在 Ubuntu、LinuxMint 等等这些基于 Debian 的系统中安装它们。

有三种方法可以完成这件事，下面会详细地描述这三种方法。

作为一个 Linux 管理员，你应该让你的系统保持为最新，这会让你的系统更安全，保护你的系统抵抗意想不到的攻击。

如果你因为一些应用的依赖问题不能解决，导致不能给所有的系统进行全部更新。那至少，你应该打上安全补丁来让你的系统 100% 符合要求。

### 方法一：如何检查 Debian/Ubuntu 中是否有任何可用的安全更新？

在进行补丁安装之前，检查可用安全更新列表始终是一个好习惯。它会为你提供将在你的系统中进行更新的软件包的列表。

默认情况下，你的系统上应该是已经安装了 `unattended-upgrades` 包的。但是如果你的系统没有装这个包，那么请使用下面的命令来安装它。

使用 [APT-GET 命令](https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/) 或者 [APT 命令](https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/) 来安装 `unattended-upgrades` 包。

```
$ sudo apt-get install unattended-upgrades
或
$ sudo apt install unattended-upgrades
```

**什么是试运行?** 大多数的 Linux 命令都有一个试运行选项，它会给出实际的输出但不会下载或安装任何东西。

为此，你需要在 `unattended-upgrades` 命令中添加 `--dry-run` 选项。

```
$ sudo unattended-upgrade --dry-run -d

Initial blacklisted packages:
Initial whitelisted packages:
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=bionic, o=Ubuntu,a=bionic-security, o=UbuntuESM,a=bionic
Using (^linux-image-[0-9]+\.[0-9\.]+-.*|^linux-headers-[0-9]+\.[0-9\.]+-.*|^linux-image-extra-[0-9]+\.[0-9\.]+-.*|^linux-modules-[0-9]+\.[0-9\.]+-.*|^linux-modules-extra-[0-9]+\.[0-9\.]+-.*|^linux-signed-image-[0-9]+\.[0-9\.]+-.*|^kfreebsd-image-[0-9]+\.[0-9\.]+-.*|^kfreebsd-headers-[0-9]+\.[0-9\.]+-.*|^gnumach-image-[0-9]+\.[0-9\.]+-.*|^.*-modules-[0-9]+\.[0-9\.]+-.*|^.*-kernel-[0-9]+\.[0-9\.]+-.*|^linux-backports-modules-.*-[0-9]+\.[0-9\.]+-.*|^linux-modules-.*-[0-9]+\.[0-9\.]+-.*|^linux-tools-[0-9]+\.[0-9\.]+-.*|^linux-cloud-tools-[0-9]+\.[0-9\.]+-.*) regexp to find kernel packages
Using (^linux-image-4\.15\.0\-51\-generic$|^linux-headers-4\.15\.0\-51\-generic$|^linux-image-extra-4\.15\.0\-51\-generic$|^linux-modules-4\.15\.0\-51\-generic$|^linux-modules-extra-4\.15\.0\-51\-generic$|^linux-signed-image-4\.15\.0\-51\-generic$|^kfreebsd-image-4\.15\.0\-51\-generic$|^kfreebsd-headers-4\.15\.0\-51\-generic$|^gnumach-image-4\.15\.0\-51\-generic$|^.*-modules-4\.15\.0\-51\-generic$|^.*-kernel-4\.15\.0\-51\-generic$|^linux-backports-modules-.*-4\.15\.0\-51\-generic$|^linux-modules-.*-4\.15\.0\-51\-generic$|^linux-tools-4\.15\.0\-51\-generic$|^linux-cloud-tools-4\.15\.0\-51\-generic$) regexp to find running kernel packages
Checking: apt ([])
adjusting candidate version: apt=1.6.6ubuntu0.1
Checking: apt-utils ([])
adjusting candidate version: apt-utils=1.6.6ubuntu0.1
Checking: bash ([])
.
.
Checking: xxd ([, ])
pkgs that look like they should be upgraded: binutils
binutils-common
binutils-x86-64-linux-gnu
cpp
cpp-7
dbus
dbus-user-session
dbus-x11
firefox
firefox-locale-en
g++
g++-7
gcc
gcc-7
gcc-7-base
gcc-8-base
libasan4
libatomic1
libbinutils
libcc1-0
libcilkrts5
libdbus-1-3
libdbus-1-dev
libgcc-7-dev
libgcc1
libgfortran4
libgomp1
libitm1
liblsan0
libmpx2
libquadmath0
libstdc++-7-dev
libstdc++6
libtsan0
libubsan0
vim-common
vim-tiny
xxd
```

如果在终端里，上面的命令输出说 “No packages found that can be upgraded unattended and no pending auto-removals”，这意味着你的系统已经是最新的了。

#### 如何在 Debian/Ubuntu 中安装可用的安全更新？

如果你在上面的命令输出中获得了任意的软件包更新，就运行下面的命令来安装它们。

```
$ sudo unattended-upgrade -d
```

除此之外，你也可以使用 `apt-get` 命令来进行安装。但是这个方法有点棘手，我会建议用户用第一个选项。

### 方法二：如何使用 apt-get 命令在 Debian/Ubuntu 中检查是否有可用的安全更新？

在你的 Debian/Ubuntu 系统中运行下面的命令来查看可用安全更新的列表。

```
$ sudo apt-get -s dist-upgrade | grep "^Inst" | grep -i securi

Inst libquadmath0 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst libitm1 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst gcc-8-base [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libmpx2:amd64 libgcc1:amd64 libtsan0:amd64 liblsan0:amd64 libgomp1:amd64 libatomic1:amd64 libcc1-0:amd64 libstdc++6:amd64 ]
Inst libgcc1 [1:8.2.0-1ubuntu2~18.04] (1:8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libmpx2:amd64 libtsan0:amd64 liblsan0:amd64 libgomp1:amd64 libatomic1:amd64 libcc1-0:amd64 libstdc++6:amd64 ]
Inst libmpx2 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libtsan0:amd64 liblsan0:amd64 libgomp1:amd64 libatomic1:amd64 libcc1-0:amd64 libstdc++6:amd64 ]
Inst liblsan0 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libtsan0:amd64 libgomp1:amd64 libatomic1:amd64 libcc1-0:amd64 libstdc++6:amd64 ]
Inst libtsan0 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libgomp1:amd64 libatomic1:amd64 libcc1-0:amd64 libstdc++6:amd64 ]
Inst libcc1-0 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libgomp1:amd64 libatomic1:amd64 libstdc++6:amd64 ]
Inst libatomic1 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libgomp1:amd64 libstdc++6:amd64 ]
Inst libgomp1 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libstdc++6:amd64 ]
Inst libstdc++6 [8.2.0-1ubuntu2~18.04] (8.3.0-6ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst libdbus-1-dev [1.12.2-1ubuntu1] (1.12.2-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst dbus-user-session [1.12.2-1ubuntu1] (1.12.2-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst dbus-x11 [1.12.2-1ubuntu1] (1.12.2-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst dbus [1.12.2-1ubuntu1] (1.12.2-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst libdbus-1-3 [1.12.2-1ubuntu1] (1.12.2-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst xxd [2:8.0.1453-1ubuntu1] (2:8.0.1453-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst vim-tiny [2:8.0.1453-1ubuntu1] (2:8.0.1453-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst vim-common [2:8.0.1453-1ubuntu1] (2:8.0.1453-1ubuntu1.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [all])
Inst binutils-x86-64-linux-gnu [2.30-21ubuntu1~18.04] (2.30-21ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [binutils:amd64 ]
Inst binutils-common [2.30-21ubuntu1~18.04] (2.30-21ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [binutils:amd64 libbinutils:amd64 ]
Inst binutils [2.30-21ubuntu1~18.04] (2.30-21ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) [libbinutils:amd64 ]
Inst libbinutils [2.30-21ubuntu1~18.04] (2.30-21ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst libasan4 [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst libubsan0 [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst libcilkrts5 [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst g++-7 [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst gcc-7 [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst libstdc++-7-dev [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst libgcc-7-dev [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst libgfortran4 [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst cpp-7 [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64]) []
Inst gcc-7-base [7.3.0-27ubuntu1~18.04] (7.4.0-1ubuntu1~18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst cpp [4:7.3.0-3ubuntu2.1] (4:7.4.0-1ubuntu2.3 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst firefox [67.0.1+build1-0ubuntu0.18.04.1] (67.0.2+build2-0ubuntu0.18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst firefox-locale-en [67.0.1+build1-0ubuntu0.18.04.1] (67.0.2+build2-0ubuntu0.18.04.1 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst gcc [4:7.3.0-3ubuntu2.1] (4:7.4.0-1ubuntu2.3 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst g++ [4:7.3.0-3ubuntu2.1] (4:7.4.0-1ubuntu2.3 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
```

#### 如何使用 apt-get 命令在 Debian/Ubuntu 系统中安装可用的安全更新？

如果你在上面命令的输出中发现任何的软件包更新。就运行下面的命令来安装它们。

```
$ sudo apt-get -s dist-upgrade | grep "^Inst" | grep -i securi | awk -F " " {'print $2'} | xargs apt-get install
```

除此之外，也可以使用 `apt` 命令来完成。但是这个方法有点棘手，我会建议用户用第一个方式。

### 方法三：如何使用 apt 命令在 Debian/Ubuntu 系统中检查是否有可用的安全更新？

在 Debian/Ubuntu 系统中运行下面的命令来查看可用安全更新的列表。

```
$ sudo apt list --upgradable | grep -e "-security"

binutils/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.2 amd64 [upgradable from: 2.30-21ubuntu1~18.04]
binutils-common/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.2 amd64 [upgradable from: 2.30-21ubuntu1~18.04]
binutils-x86-64-linux-gnu/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.2 amd64 [upgradable from: 2.30-21ubuntu1~18.04]
cpp/bionic-updates,bionic-security 4:7.4.0-1ubuntu2.3 amd64 [upgradable from: 4:7.3.0-3ubuntu2.1]
cpp-7/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
dbus/bionic-updates,bionic-security 1.12.2-1ubuntu1.1 amd64 [upgradable from: 1.12.2-1ubuntu1]
dbus-user-session/bionic-updates,bionic-security 1.12.2-1ubuntu1.1 amd64 [upgradable from: 1.12.2-1ubuntu1]
dbus-x11/bionic-updates,bionic-security 1.12.2-1ubuntu1.1 amd64 [upgradable from: 1.12.2-1ubuntu1]
firefox/bionic-updates,bionic-security 67.0.2+build2-0ubuntu0.18.04.1 amd64 [upgradable from: 67.0.1+build1-0ubuntu0.18.04.1]
firefox-locale-en/bionic-updates,bionic-security 67.0.2+build2-0ubuntu0.18.04.1 amd64 [upgradable from: 67.0.1+build1-0ubuntu0.18.04.1]
g++/bionic-updates,bionic-security 4:7.4.0-1ubuntu2.3 amd64 [upgradable from: 4:7.3.0-3ubuntu2.1]
g++-7/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
gcc/bionic-updates,bionic-security 4:7.4.0-1ubuntu2.3 amd64 [upgradable from: 4:7.3.0-3ubuntu2.1]
gcc-7/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
gcc-7-base/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
gcc-8-base/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libasan4/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
libatomic1/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libbinutils/bionic-updates,bionic-security 2.30-21ubuntu1~18.04.2 amd64 [upgradable from: 2.30-21ubuntu1~18.04]
libcc1-0/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libcilkrts5/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
libdbus-1-3/bionic-updates,bionic-security 1.12.2-1ubuntu1.1 amd64 [upgradable from: 1.12.2-1ubuntu1]
libdbus-1-dev/bionic-updates,bionic-security 1.12.2-1ubuntu1.1 amd64 [upgradable from: 1.12.2-1ubuntu1]
libgcc-7-dev/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
libgcc1/bionic-updates,bionic-security 1:8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 1:8.2.0-1ubuntu2~18.04]
libgfortran4/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
libgomp1/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libitm1/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
liblsan0/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libmpx2/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libquadmath0/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libstdc++-7-dev/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
libstdc++6/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libtsan0/bionic-updates,bionic-security 8.3.0-6ubuntu1~18.04.1 amd64 [upgradable from: 8.2.0-1ubuntu2~18.04]
libubsan0/bionic-updates,bionic-security 7.4.0-1ubuntu1~18.04.1 amd64 [upgradable from: 7.3.0-27ubuntu1~18.04]
vim-common/bionic-updates,bionic-updates,bionic-security,bionic-security 2:8.0.1453-1ubuntu1.1 all [upgradable from: 2:8.0.1453-1ubuntu1]
vim-tiny/bionic-updates,bionic-security 2:8.0.1453-1ubuntu1.1 amd64 [upgradable from: 2:8.0.1453-1ubuntu1]
xxd/bionic-updates,bionic-security 2:8.0.1453-1ubuntu1.1 amd64 [upgradable from: 2:8.0.1453-1ubuntu1]
```

#### 如何在 Debian/Ubuntu 系统中使用 apt 命令来安装可用的安全更新？

如果你在上面命令的输出中发现任何的软件包更新。就运行下面的命令来安装它们。

```
$ sudo apt list --upgradable | grep -e "-security" | awk -F "/" '{print $1}' | xargs apt install
```

同样，下面的文件也会告诉你更新包的总数。

```
$ sudo cat /var/lib/update-notifier/updates-available

190 packages can be updated.
39 updates are security updates.
```

---

via: <https://www.2daygeek.com/manually-install-security-updates-ubuntu-debian/>

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

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


使用 Python 处理 JSON 格式的数据

>
> 如果你不希望从头开始创造一种数据格式来存放数据，JSON 是一个很好的选择。如果你对 Python 有所了解，就更加事半功倍了。下面就来介绍一下如何使用 Python 处理 JSON 数据。
>
>
>

![](/data/attachment/album/201907/21/235723kkk55q455145dkkr.jpg)

[JSON](https://json.org) 的全称是 <ruby> JavaScript 对象表示法 <rt>  JavaScript Object Notation </rt></ruby>。这是一种以键值对的形式存储数据的格式，并且很容易解析，因而成为了一种被广泛使用的数据格式。另外，不要因为 JSON 名称而望文生义，JSON 并不仅仅在 JavaScript 中使用，它也可以在其它语言中使用。下文会介绍它是如何在 Python 中使用的。

首先我们给出一个 JSON 示例：

```
{
    "name":"tux",
    "health":"23",
    "level":"4"
}
```

上面是一个和编程语言无关的原生 JSON 数据。熟悉 Python 的人会看出来这个 JSON 数据跟 Python 中的<ruby> 字典 <rt>  dictionary </rt></ruby>长得很像。而这两者之间确实非常相似，如果你对 Python 中的列表和字典数据结构有一定的理解，那么 JSON 理解起来也不难。

### 使用字典存放数据

如果你的应用需要存储一些结构复杂的数据，不妨考虑使用 JSON 格式。对比你可能曾经用过的自定义格式的文本配置文件，JSON 提供了更加结构化的可递归的存储格式。同时，Python 自带的 `json` 模块已经提供了可以将 JSON 数据导入/导出应用时所需的所有解析库。因此，你不需要针对 JSON 自行编写代码进行解析，而其他开发人员在与你的应用进行数据交互的时候也不需要去解析新的数据格式。正是这个原因，JSON 在数据交换时被广泛地采用了。

以下是一段在 Python 中使用嵌套字典的代码：

```
#!/usr/bin/env python3

import json

# instantiate an empty dict
team = {}

# add a team member
team['tux'] = {'health': 23, 'level': 4}
team['beastie'] = {'health': 13, 'level': 6}
team['konqi'] = {'health': 18, 'level': 7}
```

这段代码声明了一个名为 `team` 的字典，并初始化为一个空字典。

如果要给这个字典添加内容，首先需要创建一个键，例如上面示例中的 `tux`、`beastie`、`konqi`，然后为这些键一一提供对应的值。上面示例中的值由一个个包含游戏玩家信息的字典充当。

字典是一种可变的变量。字典中的数据可以随时添加、删除或更新。这样的特性使得字典成为了应用程序存储数据的极好选择。

### 使用 JSON 格式存储数据

如果存放在字典中的数据需要持久存储，这些数据就需要写到文件当中。这个时候就需要用到 Python 中的 `json` 模块了：

```
with open('mydata.json', 'w') as f:
    json.dump(team, f)
```

上面的代码首先创建了一个名为 `mydata.json` 的文件，然后以写模式打开了这个文件，这个被打开的文件以变量 `f` 表示（当然也可以用任何你喜欢的名称，例如 `file`、`output` 等）。而 `json` 模块中的 `dump()` 方法则是用于将一个字典输出到一个文件中。

从应用中导出数据就是这么简单，同时这些导出的数据是结构化的、可理解的。现在可以查看导出的数据：

```
$ cat mydata.json
{"tux": {"health": 23, "level": 4}, "beastie": {"health": 13, "level": 6}, "konqi": {"health": 18, "level": 7}}
```

### 从 JSON 文件中读取数据

如果已经将数据以 JSON 格式导出到文件中了，也有可能需要将这些数据读回到应用中去。这个时候，可以使用 Python `json` 模块中的 `load()` 方法：

```
#!/usr/bin/env python3

import json

f = open('mydata.json')
team = json.load(f)

print(team['tux'])
print(team['tux']['health'])
print(team['tux']['level'])

print(team['beastie'])
print(team['beastie']['health'])
print(team['beastie']['level'])

# when finished, close the file
f.close()
```

这个方法实现了和保存文件大致相反的操作。使用一个变量 `f` 来表示打开了的文件，然后使用 `json` 模块中的 `load()` 方法读取文件中的数据并存放到 `team` 变量中。

其中的 `print()` 展示了如何查看读取到的数据。在过于复杂的字典中迭代调用字典键的时候有可能会稍微转不过弯来，但只要熟悉整个数据的结构，就可以慢慢摸索出其中的逻辑。

当然，这里使用 `print()` 的方式太不灵活了。你可以将其改写成使用 `for` 循环的形式：

```
for i in team.values():
    print(i)
```

### 使用 JSON

如上所述，在 Python 中可以很轻松地处理 JSON 数据。因此只要你的数据符合 JSON 的模式，就可以选择使用 JSON。JSON 非常灵活易用，下次使用 Python 的时候不妨尝试一下。

---

via: <https://opensource.com/article/19/7/save-and-load-data-python-json>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[HankChow](https://github.com/HankChow) 校对：[wxy](https://github.com/wxy)

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


如何在 MacOS 上安装 Kibana

用docker 一撸到底啊，方便好用

>
> Elasticsearch 安装好了之后，Kibana 插件可以为这个功能强大的搜索工具添加可视化功能。
>
>
>

![](/data/attachment/album/201907/22/204048vl8t88y6q8988229.jpg)

在我之前的文章中，我向 Mac 用户介绍了[安装 Elasticsearch](/article-11125-1.html) 的步骤，这是世界上最受欢迎的企业级搜索引擎。（这里有一篇针对 Linux 用户的[单独文章](https://opensource.com/article/19/7/installing-elasticsearch-and-kibana-linux)。）其自然语言处理能力使得 Elasticsearch 在数据集中查找细节方面表现出色。一旦你发现了你需要的数据，如果你已经安装了 [Kibana](https://www.elastic.co/products/kibana)，你可以将它提升到一个新的水平。

Kibana 是 Elasticsearch 的开源的数据可视化插件。当你在 Elasticsearch 中找到了数据，Kibana 就会帮助你将其放入折线图、[时间序列查询](https://en.wikipedia.org/wiki/Time_series)、地理空间地图等。该工具非常适合于必须展示其研究成果的数据科学家，尤其是那些使用开源数据的人。

### 安装 Kibana

你需要在 Elasticsearch 之外单独安装 Kibana。因为我安装了 Elasticsearch 7.1.1，所以我将安装 Kibana 1.1。版本的匹配非常重要，Kibana 需要针对相同版本的 Elasticsearch 节点运行。 （Kibana 运行在 node.js 上。）

以下是我为 MacOS 安装 Kibana 7.1.1 时所遵循的步骤：

1、确保 Elasticsearch 已下载并运行。如果需要，请参阅上一篇文章。

**注意**：你至少需要先安装 Elasticsearch 1.4.4 或更高版本才能使用 Kibana。这是因为你需要向 Kibana 提供要连接的 Elasticsearch 实例的 URL 以及你要搜索的 Elasticsearch 索引。通常，最好安装两者的最新版本。

2、单击[此处](https://www.elastic.co/downloads/kibana)下载 Kibana。你将看到如下的网页，它会提示你在**下载**部分的右上角下载 Kibana for Mac：

![Download Kibana here.](/data/attachment/album/201907/22/204132mvow3ld6k3z6aw3o.png "Download Kibana here.")

3、在你的 `Downloads` 文件夹中，打开 .tar 文件以展开它。此操作将创建一个具有相同名称的文件夹（例如，`kibana-7.1.1-darwin-x86_64`）。

4、如果你希望 Kibana 放在另一个文件夹中，请立即移动它。

仔细检查 Elasticsearch 是否正在运行，如果没有，请在继续之前启动它。（如果你需要说明，请参阅上一篇文章。）

### 打开 Kibana 插件

Elasticsearch 运行起来后，你现在可以启动 Kibana 了。该过程类似于启动 Elasticsearch：

1、从 Mac 的 `Downloads` 文件夹（或 Kibana 移动到的新文件夹）里，打开 Kibana 文件夹（即 `~Downloads/kibana-7.1.1-darwin-x86_64`）。

2、打开 `bin` 子文件夹。

![The Kibana bin folder.](/data/attachment/album/201907/22/204137krn6gnpnhujcpbjw.png "The Kibana bin folder.")

3、运行 `kibana-plugin`。你可能会遇到上一篇文章中出现的相同安全警告： ![Security warning](/data/attachment/album/201907/22/204144fl2vsvhld2hlpmcc.png "Security warning")

通常，如果收到此警告，请按照那篇文章中的说明清除警告并打开 Kibana。请注意，如果我在终端中没有运行 Elasticsearch 的情况下打开该插件，我会收到相同的安全警告。要解决此问题，如上一篇文章中所述，打开 Elasticsearch 并在终端中运行它。使用 GUI 启动 Elasticsearch 也应该打开终端。

然后，我右键单击 `kibana-plugin` 并选择“打开”。这个解决方案对我有用，但你可能需要尝试几次。 我的 Elasticsearch 聚会中的几个人在他们的设备上打开 Kibana 时遇到了一些麻烦。

### 更改 Kibana 的主机和端口号

Kibana 的默认设置将其配置为在 `localhost:5601` 上运行。你需要更新文件（在这个例子的情况下）`~Downloads/kibana-7.1.1-darwin-x86_64/config/kibana.yml` 以在运行 Kibana 之前更改主机或端口号。

![The Kibana config directory.](/data/attachment/album/201907/22/204150pnu0oz3en1adz2r0.png "The Kibana config directory.")

以下是我的 Elasticsearch 聚会组里配置 Kibana 时终端的样子，因此默认为 `http://localhost:9200`，这是查询 Elasticsearch 实例时使用的 URL：

![Configuring Kibana's host and port connections.](/data/attachment/album/201907/22/204151nfmxxywrraf2yf35.png "Configuring Kibana's host and port connections.")

### 从命令行运行 Kibana

打开插件后，可以从命令行或 GUI 运行 Kibana。这是终端连接到 Elasticsearch 后的样子：

![Kibana running once it's connected to Elasticsearch.](/data/attachment/album/201907/22/204153p63k00hiredgsddg.png "Kibana running once it's connected to Elasticsearch.")

与 Elasticsearch 一样，Kibana 默认在前台运行。你可以按 `Ctrl-C` 来停止它。

### 总结

Elasticsearch 和 Kibana 是占用大量存储空间的大型软件包。有这么多人一次下载这两个软件包，当我的Elasticsearch 会员和我下载它们两个时，我平均要下载几分钟。这可能是由于 WiFi 不佳和/或用户数量太多，但如果发生同样的事情，请记住这种可能性。

之后，由于我的笔记本电脑存储空间不足，我无法上传我们正在使用的 JSON 文件。我能够按照讲师的可视化进行操作，但无法实时使用 Kibana。因此，在下载 Elasticsearch 和 Kibana 之前，请确保设备上有足够的空间（至少几千兆字节）来上传和使用这些工具搜索文件。

要了解有关 Kibana 的更多信息，他们的用户指南[简介](https://www.elastic.co/guide/en/kibana/7.2/introduction.html)是理想的。（你可以根据你正在使用的 Kibana 版本配置该指南。）他们的演示还向你展示了如何[在几分钟内构建仪表板](https://www.elastic.co/webinars/getting-started-kibana?baymax=rtp&elektra=docs&storm=top-video&iesrc=ctr)，然后进行首次部署。

玩得开心！

---

via: <https://opensource.com/article/19/7/installing-kibana-macos>

作者：[Lauren Maffeo](https://opensource.com/users/lmaffeo) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


大公司开源怎么做？SOFAStack 给出一个很好的例子

![](/data/attachment/album/201907/22/214517mmghhmoocslshgp2.jpg)

蚂蚁金服的 SOFAStack 作为一个成功地将企业私有项目转化为开源核心模式的知名案例，我们之前对背后的思考和推动力做过专题分析，但是具体这件事是如何在蚂蚁金服内部发生的、是如何实操的，有很多读者向我们表示非常感兴趣，而我觉得这也是其它技术公司所正在探索和思考的方向。

因此，上个月底，老王在参加上海举办的 KubeCon 2019 时，遇到了蚂蚁金服 SOFA 团队的余淮，他目前在蚂蚁金服中间件团队服务与框架组具体负责开发框架与 SOFAStack 的开源工作。于是，参会之余，我和余淮就 SOFA 开源的实操方面进行了深入的沟通，现将谈话所得整理给大家。

![余淮（左）和老王（右）在 KubeCon 2019](/data/attachment/album/201907/22/212902qqy22y92mkq93bw8.jpg)

### SOFA 与开源

2018 年，SOFAStack 开始开源之后，处于关注，我曾向蚂蚁金服中间件负责人杨冰了解过[为什么要将 SOFA 开源的背后思考，以及 SOFA 发展迭代的历程](/article-10548-1.html)。

目前，SOFA 的架构已经发展到 SOFA 5 阶段，前任的 SOFA 开源负责人鲁直也向我介绍过 [SOFA 5 中重点推进的方向](/article-10794-1.html)，主要包括 Service Mesh 和 Serverless，以及分布式事务 Seata 的落地等。而在今年上半年他们又[开源了分布式事务框架 Seata](/article-10693-1.html) 和服务注册中心 SOFARegistry。

作为一个成功的开源核心模式的项目，我非常关注 SOFA 开源的实操是如何进行的，是如何进行开源治理的，作为 SOFA 团队的老朋友，我们话题就直接从 SOFA 的开源治理聊起。

### 以 SOFA 为例：公司内部软件的开源流程

余淮说，从 2015 年开始，蚂蚁金服开启了金融科技对外输出的战略，SOFAStack 也走出了蚂蚁金服，甚至跨越了国界，被更多金融机构与合作伙伴所使用，如天弘基金、信美互信、南京银行、PayTM、DANA 钱包等。

在与合作伙伴以及客户的沟通、合作过程中，他们发现了 SOFAStack 的理念和能力也正是很多金融行业的企业所需要的。在蚂蚁金融科技对外输出的过程中，内部已经对 SOFAStack 进行了一定程度的代码重构，例如历史兼容逻辑的剥离等，但是并未能达到直接开源的标准。

关于开源，其内部一直有开源的讨论，到 2017 年双十一结束后正式决定开源。经过了一系列的准备，2018 年 4 月，完成了对 SOFA 项目的满足了开源改造的标准后，SOFAStack 马上宣布正式开源框架中部分重要组件。

**SOFA 团队给开源定的策略叫「<ruby> 开源核心 <rp>  （ </rp> <rt>  Open Core </rt> <rp>  ） </rp></ruby>」，顾名思义就是要将接口层以及核心实现都开源，以可扩展化的方式来层层构建 SOFAStack 的能力，保证 SOFAStack 的内部版本和开源的版本采用的是同一个内核**。为此 SOFAStack 做了大量的改造和重构工作。

在开源的具体考量上，余淮表示，**SOFAStack 的开源改造基本上有三条原则，分别是高可扩展性、对内兼容历史版本、对外兼容业界标准**。

以 SOFARPC 重构为例，大概经历了这样的过程：

1. 首先需要将 SOFARPC 进行了一次核心接口和模型抽象，然后增加了扩展点机制和事件总线机制，所有的对内、对外实现都基于这些核心接口和模型去扩展，并且保证这些扩展能力都是平等的、可选的；
2. 接着将核心的处理逻辑实现迁移到这套接口和模型上来，保证 RPC 能力完整可用；
3. 然后需要将 RPC 里一些对接内部系统的、兼容历史逻辑的代码做成内部扩展，并进行全量测试验证，确保和已有线上的历史方案的兼容，发布上线；
4. 最后会调研业界的一些开源标准方案和实现，并对其进行兼容，例如 SOFARPC 不仅对接自己的 SOFARegistry 的实现，还兼容了 Zookeeper、Etcd、Nacos 等业界优秀的注册中心方案。

虽然上面重构过程听上去没那么复杂，但是在实际过程中还是非常考验团队的技术能力的，特别是在抽象核心接口和模型的时候，为了做到既兼容内部又兼容外部，这需要进行大量的调研工作，才能做好这层较为通用抽象。其次在对内逻辑兼容的时候，由于内部的历史负担还是比较重的，为了能让重构的代码安全上线，团队也做了很多事情。

还是举 SOFARPC 的例子，蚂蚁内部的服务路由过程比开源是要复杂很多的，特别是配合蚂蚁特有的单元化部署以及异地多活的能力，有时候需要多层路由才能找到目标地址。为了验证重构后逻辑的正确性，除了在开源代码里有单元测试用例外，SOFA 团队在内部也构建了一套非常完善的集成框架，专门用来测试已有逻辑的兼容性及正确性。

基于开源核心这套思想建设 SOFAStack 以后，其实对开发人员的工作量来不会变少，反而可能是增多的。这是因为在写代码的同时，需要更多的考虑内部外部的使用情况，对代码质量也提出了更高的要求，开发流程会变得更加复杂。

例如，内部新增一个特性，在以前可能直接修改代码经过测试就发布上线了，但现在的话会去思考这其中哪些能力是通用的，把这些能力抽象一下放到开源版本里去，然后开源版测试后发布，这个时候内部版本在基于这个开源版进行扩展，再经过测试后发布上线。

虽然开发人员工作变多了，但是这样的话可以让 SOFAStack 的核心代码被更多的开发者评审，在更多的系统中运行，在更多的场景下进行验证，对 SOFAStack 的品质保证有非常大的帮助。

此外在开源进度上，余淮表示， SOFAStack 并不追求开源全部内部的组件，而是会根据产品的特性和开源准备的情况有选择的开源。

例如 SOFAStack 下的分库、分表组件，因为产品特性和 OB 等内部结合紧密就暂时不会开源。**金融级分布式架构下未开源部分能力，SOFAStack 会和与业界其它优秀的开源项目做集成，保证整个金融级分布式架构功能的完整性和多样性**。

所以对于 SOFAStack 来说，并不只有自己开源的产品，而更多关注的是，和整个社区里所有开源优秀的产品一起，打造一套快速构建金融级分布式架构的套件。

### 开源项目的管理

开源一个项目，作为背后推动的公司事实上要付出相当多的人力和资金成本，同时，也不可避免的会涉及到审批流程。随着蚂蚁金服越来越多领域的项目开源，包括 SOFAStack、AI、区块链等，蚂蚁金服内部出台了相应的严格的审核机制，包括技术、合规、法务、安全等部门进行审核，同时还会考察项目开源对公司的意义，以及是否对社区有价值，在审核通过之后项目就会正式开源与大家见面了。

蚂蚁金服对于开源文化是十分友好的，其内部的代码也大多都是公开在内网的 GitLab 仓库，经常会有业务团队对 SOFAStack 提交一些合并请求（拉取请求）来帮助项目的发展。

同时，蚂蚁金服的工程师也普遍地拥抱开源，开源能够帮助项目产生更多、更好的想法，同时也可以吸收来自社区的贡献，让项目本身能够做的更好，这是大家所喜闻乐见的。

### SOFA 的社区治理

开源项目并不是开放源代码就是终点，事实上，这只是开始，之后持续不断的开源治理才是开源之路。而如何将一个开源项目从最开始的由开源项目背后的公司主导转变为社区性项目，这是一个值得思考和探索的课题。

基于目前的开源模式和社区建设力度，SOFA 团队也在尽可能去吸引外部的贡献者。不过 SOFAStack 项目由于大量应用在蚂蚁金服及不少企业线上环境，所以目前对于开发者技术能力以及代码质量要求相对较高，因此，这项任务还需要较多的工作。

目前 SOFA 社区已经涌现了不少积极的开发者和贡献者，解决了社区提出的一些重要需求。这其中一些功能组件的完成，贡献者提供了相当重要的代码基础，而 SOFA 社区成员也积极参与到功能的完善和规范化工作中，甚至有的拉取请求要经过十几个来回才能被合并入功能分支。

余淮同时也谈到，下一步会引入更友好的流程和工具，让更多的开发者能够更容易地加入到 SOFAStack 社区的开发和贡献当中，为 SOFAStack 的共同发展做出包括贡献代码、文档完善和推广宣传等各个方面的贡献。

在社区团队方面，SOFAStack 也设计了诸如<ruby> 贡献者 <rp>  （ </rp> <rt>  Contributor </rt> <rp>  ） </rp></ruby>、<ruby> 提交者 <rp>  （ </rp> <rt>  Committer </rt> <rp>  ） </rp></ruby>、<ruby> 委员会成员 <rp>  （ </rp> <rt>  PMC </rt> <rp>  ） </rp></ruby>等多个层面的贡献者认证机制，以让各个层级的热情、精力不同的人能够加入到项目的贡献中。

SOFAStack 开源至今社区已经有 120 多位贡献者共建社区，也有十来位外部提交者通过其贡献的代码获得社区的认可，并进一步取得对社区发展的影响力。谈及这一点，余淮表示，为了保证代码质量，来自社区的代码贡献往往需要 SOFAStack 社区已有成员和贡献者许多次的往复修改和完善才能进入到代码主干，但是通过这些互动，才能真正遴选出来社区的中坚分子，也进一步将项目融入到社区中。

在社区建设方面，除了在 Github 上、钉钉微信群的一些交流外，SOFAStack 社区还会有丰富的线上线下的活动。每周类似周报形式的 SOFA Weekly，帮助大家了解社区的最新资讯和项目进展；社区共建的 SOFALab 源码解析实验室，和社区同学一起学习和解析源码，整理成册，帮助大家更好的学习项目；每月若干次的 SOFAChannel 直播，可以在线和讲师进行沟通交流。与此同时，SOFAStack 也会定期在全国各地举行线下的 SOFAMeetup 活动，大家一起面对面交流，目前已经在全国五个城市举办了 7 场，共有一千多人到现场；也会举办 Workshop 和 CodeLab 等实践类的活动，像本次的 KubeCon 就有一场 Workshop，手把手带着大家一起实践 SOFAStack。

在社区合作方面，社区里有很多优秀的开发者和开源项目，SOFA 团队也经常和社区互相学习、分享、交流技术，目前SOFAStack 已经和很多开源社群建立了良好的关系，包括国内 ServiceMesher，K8S 中国，ShardingSephere，SkyWalking，Ant Design，EggJS 等，也包括国外的 light4j 等。

此外，余淮还谈到，SOFAStack 在今年还会结合实际业务方面和开源社区做更多的能力整合提升，他举例说到 SOFAStack 今年会和做 Spring Cloud 更深入的集成和增强，例如 Spring Cloud 还是文件级别的配置更新，配合 SOFAStack可以做到更细粒度的配置更新等。

### 总结

要说我对哪个国内开源项目研究的最深入，那非 SOFAStack 莫属。自从 SOFAStack 开源以来，我先后和杨冰、鲁直从 SOFA 开源的思想、战略层面进行过深入沟通，而这次，我希望可以从战术上，从实操层面分享他们在 SOFA 开源方面的经验给广大的开源社区和开源企业。

![](/data/attachment/album/201907/22/215406xrvbra33hrqn3r3t.png)

>
> “穿山甲专访”栏目是 Linux 中国社区推出的面向开源界、互联网技术圈的重要领军人物的系列采访，将为大家介绍中国开源领域中一些积极推动开源，谙熟开源思想的技术人，并辨析其思考、挖掘其动因，揭示其背后所发生的事情，为关注开源、有志于开源的企业和技术人标出一条路径。
>
>
> 取名为“穿山甲”寓意有二：取穿山甲挖掘、深入之意来象征技术进步和表征技术领袖的作用；穿山甲是珍稀保护动物，宣传公益。
>
>
>


10 个 Linux 中最好的 Visio 替代品

Graphviz 感觉不错，就是难以阅读。

>
> 如果你正在 Linux 中寻找一个好的 Visio 查看器，这里有一些可以在 Linux 中使用的微软 Visio 的替代方案。
>
>
>

[微软 Visio](https://products.office.com/en/visio/flowchart-software) 是创建或生成关键任务图和矢量表示的绝佳工具。虽然它可能是制作平面图或其他类型图表的好工具 —— 但它既不是免费的，也不是开源的

此外，微软 Visio 不是一个独立的产品。它与微软 Office 捆绑在一起。我们过去已经看过 [MS Office 的开源替代品](https://itsfoss.com/best-free-open-source-alternatives-microsoft-office/)。今天我们将看看你可以在 Linux 上使用哪些工具代替 Visio。

### 适用于 Linux 的最佳 微软 Visio 备选方案

![用于 Linux 的微软 Visio 备选方案](/data/attachment/album/201907/23/073521hp23n7nnff7p7i7l.png)

此处为强制性免责声明。该列表不是排名。排名第三的产品并不比排名第六的好。

我还提到了两个可以从 Web 界面使用的非开源 Visio 软件。

| 软件 | 类型 | 许可证类型 |
| --- | --- | --- |
| [LibreOffice Draw](https://www.libreoffice.org/discover/draw/) | 桌面软件 | 自由开源 |
| [OpenOffice Draw](https://www.openoffice.org/product/draw.html) | 桌面软件 | 自由开源 |
| [Dia](http://dia-installer.de/) | 桌面软件 | 自由开源 |
| [yED Graph Editor](https://www.yworks.com/products/yed) | 桌面和基于 Web | 免费增值 |
| [Inkscape](https://inkscape.org/en/) | 桌面软件 | 自由开源 |
| [Pencil](http://pencil.evolus.vn/Downloads.html) | 桌面和基于 Web | 自由开源 |
| [Graphviz](http://graphviz.org/) | 桌面软件 | 自由开源 |
| [darw.io](https://about.draw.io/) | 桌面和基于 Web | 自由开源 |
| [Lucidchart](https://www.lucidchart.com/) | 基于 Web | 免费增值 |
| [Calligra Flow](https://www.calligra.org/flow/) | 桌面软件 | 自由开源 |

### 1、LibreOffice Draw

![](/data/attachment/album/201907/23/073522vez9neebnpeqgxqx.jpg)

LibreOffice Draw 模块是微软 Visio 的最佳开源替代方案之一。在它的帮助下，你可以选择制作一个想法的速写或一个复杂的专业平面布置图来展示。流程图、组织结构图、网络图、小册子、海报等等！所有这些都不需要花一分钱。

好的是它与 LibreOffice 捆绑在一起，默认情况下安装在大多数 Linux 发行版中。

#### 主要功能概述：

* 用于制作宣传册/海报的样式和格式工具
* Calc 数据可视化
* PDF 文件编辑功能
* 通过操作图库中的图片来创建相册
* 灵活的绘图工具类似于 微软 Visio （智能连接器，尺寸线等）的工具
* 支持 .VSD 文件（打开）

官网：[LibreOffice Draw](https://www.libreoffice.org/discover/draw/)

### 2、Apache OpenOffice Draw

![](/data/attachment/album/201907/23/073522gz74j6g7x0ofz6ch.jpg)

很多人都知道 OpenOffice（LibreOffice 项目最初就是基于它的），但他们并没有真正意识到 Apache OpenOffice Draw 可以作为微软 Visio 的替代方案。但事实上，它是另一个令人惊奇的开源图表软件工具。与 LibreOffice Draw 不同，它不支持编辑 PDF 文件，但它为任何类型的图表创建提供了绘图工具。

这只是个警告。仅当你的系统中已经有 OpenOffice 时才使用此工具。这是因为[安装 OpenOffice](https://itsfoss.com/install-openoffice-ubuntu-linux/) 是一件痛苦的事情，而且它已经[不再继续开发](https://itsfoss.com/openoffice-shutdown/)。

#### 主要功能概述：

* 快速创建 3D 形状控制器
* 创建作品的 flash 版本（.swf）
* 样式和格式工具
* 与微软 Visio 类似的灵活绘图工具（智能连接器、尺寸线等）

官网：[Apache OpenOffice Draw](https://www.openoffice.org/product/draw.html)

### 3、Dia

![](/data/attachment/album/201907/23/073522ff4qgjgc0gyq3ngc.jpg)

Dia 是另一个有趣的开源工具。它可能不像前面提到的那样处于积极开发之中。但是，如果你正在寻找一个自由而开源的替代微软 Visio 的简单而体面的图表，那么 Dia 可能是你的选择。这个工具可能唯一让你失望的地方就是它的用户界面。除此之外，它还允许你为复杂的图使用强大的工具（但它看起来可能不太好 —— 所以我们建议你用于更简单的图）。

#### 主要功能概述：

* 它可以通过命令行使用
* 样式和格式工具
* 用于自定义形状的形状存储库
* 与微软 Visio 类似的绘图工具（特殊对象、网格线、图层等）
* 跨平台

官网：[Dia](http://dia-installer.de/)

### 4、yED Graph Editor

是最受欢迎的免费的微软 Visio 替代方案之一。如果你对它是一个免费软件而不是开源项目有些担心，你仍然可以通过 web 浏览器免费使用 [yED 的实时编辑器](https://www.yworks.com/products/yed-live)。如果你想用一个非常易于使用的界面快速绘制图表，这是最好的建议之一。

#### 主要功能概述：

* 拖放功能，方便图表制作
* 支持导入外部数据进行链接

官网：[yED Graph Editor](https://www.yworks.com/products/yed)

### 5、Inkscape

![](/data/attachment/album/201907/23/073523pwzfsfss0sn434wh.jpg)

Inkscape 是一个自由开源的矢量图形编辑器。你将拥有创建流程图或数据流程图的基本功能。它不提供高级的图表绘制工具，而是提供创建更简单图表的基本工具。因此，当你希望通过使用图库中的可用符号，在图库连接器工具的帮助下生成基本图时，Inkscape 可能是你的 Visio 替代品。

#### 主要功能概述：

* 连接器工具
* 灵活的绘图工具
* 广泛的文件格式兼容性

官网：[Inkscape](https://inkscape.org/en/)

### 6、Pencil 项目

![](/data/attachment/album/201907/23/073523jhl6ulnl36thwty1.jpg)

Pencil 项目是一个令人印象深刻的开源项目，适用于 Windows、Mac 以及 Linux。它具有易于使用的图形界面，使绘图更容易和方便。它有一个很好的内建形状和符号的集合，可以使你的图表看起来很棒。它还内置了 Android 和 iOS UI 模板，可以让你在需要时创建应用程序原型。

你也可以将其安装为 Firefox 扩展，但该扩展不能使用项目的最新版本。

#### 主要功能概述：

* 轻松浏览剪贴画（使用 openclipart.org）
* 导出为 ODT 文件/PDF 文件
* 图表连接工具
* 跨平台

官网：[Pencil 项目](http://pencil.evolus.vn/Downloads.html)

### 7、Graphviz

![](/data/attachment/album/201907/23/073524zfyzp9tppftag9mc.jpg)

Graphviz 略有不同。它不是绘图工具，而是专用的图形可视化工具。如果你在网络图中需要多个设计来表示一个节点，那么一定要使用这个工具。当然，你不能用这个工具做平面布置图（至少这不容易）。因此，它最适合于网络图、生物信息学、数据库连接和类似的东西。

#### 主要功能概述：

* 支持命令行使用
* 支持自定义形状和表格节点布局
* 基本样式和格式设置工具

官网：[Graphviz](http://graphviz.org/)

### 8、Draw.io

Draw.io 主要是一个基于 Web 的免费图表工具，它的强大的工具几乎可以制作任何类型的图表。你只需要拖放然后连接它们以创建流程图、ER 图或任何相关的。此外，如果你喜欢该工具，则可以尝试[离线桌面版本](https://about.draw.io/integrations/#integrations_offline)。

#### 主要功能概述：

* 直接上传到云存储服务
* 自定义形状
* 样式和格式工具
* 跨平台

官网：[Draw.io](https://about.draw.io/)

### 9、Lucidchart

![](/data/attachment/album/201907/23/073524ofwrlsru0hsftpq4.jpg)

Lucidchart 是一个基于 Web 的高级图表工具，它提供了一个具有有限功能的免费订阅。你可以使用免费订阅创建几种类型的图表，并将其导出为图像或 PDF。但是，免费版本不支持数据链接和 Visio 导入/导出功能。如果你不需要数据链接功能，Lucidchart 可以说是一个生成漂亮的图表的非常好的工具。

#### 主要功能概述：

* 可以集成到 Slack、Jira 核心、Confluence
* 能够制作产品模型
* 导入 Visio 文件

官网：[Lucidchart](https://www.lucidchart.com/)

### 10、Calligra Flow

![calligra flow](/data/attachment/album/201907/23/073525gfusm6euuimerm7z.jpg)

Calligra Flow 是 [Calligra 项目](https://www.calligra.org/)的一部分，旨在提供自由开源的软件工具。使用 Calligra flow 你可以轻松地创建网络图、实体关系图、流程图等

#### 主要功能概述：

* 各种模具盒
* 样式和格式工具

官网：[Calligra Flow](https://www.calligra.org/flow/)

### 总结

既然你已经了解到了这些最好的自由开源的 Visio 替代方案，你对它们有什么看法？

对于你任何方面的需求，它们是否优于 微软 Visio？另外，如果我们错过了你最喜欢的基于 Linux 的替代微软 Visio 的绘图工具，请在下面的评论中告诉我们。

---

via: <https://itsfoss.com/visio-alternatives-linux/>

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

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


使用 ImageGlass 以幻灯片形式快速查看 JPG 图像

>
> 想要在 Windows 10 中以幻灯片形式逐个查看文件夹中的图像么？开源软件可以做到。
>
>
>

![Looking back with binoculars](/data/attachment/album/201907/23/233438bnaxazkwf6bfxw92.png "Looking back with binoculars")

欢迎阅读今天的系列文章 “我该如何让它实现？”就我而言，我试图在 Windows 10 上以幻灯片形式查看 JPG 图像的文件夹。像往常一样，我转向开源来解决这个问题。

在 Mac 上，以幻灯片形式查看 JPG 图像文件夹只需选择文件夹中的所有图像（`Command-A`），然后按 `Option-Command-Y` 即可。之后，你可以使用箭头键向前翻动。当然，在 Windows 中，你可以通过选择第一个图像，然后单击窗口中黄色的**管理**栏，然后选择**幻灯片**来执行类似的操作。在那里，你可以控制速度，但只能做到：慢、中、快。

我希望像在 Windows 中能像 Mac 一样翻下一张图片。自然地，我 Google 搜索了一下并找到了一个方案。我发现了 [ImageGlass](https://imageglass.org/) 这个开源应用，其许可证是 [GPL 3.0](https://github.com/d2phap/ImageGlass/blob/master/LICENSE)，并且它完美地做到了。这是它的样子：

![Viewing an image in ImageGlass.](/data/attachment/album/201907/23/233520tq08b2si0d0i8ljr.png "Viewing an image in ImageGlass.")

### 关于 ImageGlass

ImageGlass 是由 Dương Diệu Pháp 开发的，根据他的网站，他是一名越南开发人员，在 Chainstack 负责前端。他与在美国的 [Kevin Routley](https://github.com/fire-eggs) 协作，后者“为 ImageGlass 开发新功能”。源代码可以在 [GitHub](https://github.com/d2phap/ImageGlass) 上找到。

ImageGlass 支持最常见的图像格式，包括 JPG、GIF、PNG、WEBP、SVG 和 RAW。用户可以轻松自定义扩展名列表。

我遇到的具体问题是需要找到一张用于目录封面的图像。不幸的是，它在一个包含数十张照片的文件夹中。在 ImageGlass 中以幻灯片浏览照片，在我想要的照片前停止，并将其下载到我的项目文件夹中变得很容易。开源再次帮助了我，该应用只花了很短的时间下载和使用。

在 2016 年 3 月 10 日，Jason Baker 在他的文章 [9 款 Picasa 的开源替代品](https://opensource.com/alternatives/picasa) 中将 ImageGlass 列为其中之一。如果你有需求，里面还有一些其他有趣的图像相关工具。

---

via: <https://opensource.com/article/19/6/use-imageglass-view-jpg-images-slideshow-windows-10>

作者：[Jeff Macharyas](https://opensource.com/users/jeffmacharyas) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


用大写字母输入 Linux 命令以将其作为 sudo 用户运行

Summary: 正如名字暗示的那样，你无论何时用大写字母输入 Linux 命令，SUDO 程序都会将它们作为 sudo 用户运行！这意味着，你无需在要运行的 Linux 命令前面输入 sudo。

还需要按shift或CapsLook 麻烦

![Type Linux Commands In Capital Letters To Run Them As Sudo User](/data/attachment/album/201907/24/091111leufqj6vujuu9evz.png)

我非常喜欢 Linux 社区的原因是他们创建了很多有趣的项目，你很少能在任何其他操作系统中找到它们。不久前，我们看了一个名为 [Hollywood](https://www.ostechnix.com/turn-ubuntu-terminal-hollywood-technical-melodrama-hacker-interface/) 的有趣项目，它在类 Ubuntu 系统将终端变成了好莱坞技术情景剧的黑客界面。还有一些其他工具，例如 `cowsay`、`fortune`、`sl` 和 `toilet` 等，用来消磨时间自娱自乐！它们可能没有用，但这些程序娱乐性不错并且使用起来很有趣。今天，我偶然发现了另一个名为 `SUDO` 的类似工具。正如名字暗示的那样，你无论何时用大写字母输入 Linux 命令，`SUDO` 程序都会将它们作为 sudo 用户运行！这意味着，你无需在要运行的 Linux 命令前面输入 `sudo`。很酷，不是么？

### 安装 SUDO

>
> 提醒一句：
>
>
> 在安装这个程序（或任何程序）之前，请查看源代码（最后给出的链接），并查看是否包含会损害你的系统的可疑/恶意代码。在 VM 中测试它。如果你喜欢或觉得它很有用，你可以在个人/生产系统中使用它。
>
>
>

用 Git 克隆 `SUDO` 仓库：

```
$ git clone https://github.com/jthistle/SUDO.git
```

此命令将克隆 SUDO GIT 仓库的内容，并将它们保存在当前目录下的 `SUDO` 的目录中。

```
Cloning into 'SUDO'...
remote: Enumerating objects: 42, done.
remote: Counting objects: 100% (42/42), done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 42 (delta 17), reused 30 (delta 12), pack-reused 0
Unpacking objects: 100% (42/42), done.
```

切换到 `SUDO` 目录：

```
$ cd SUDO/
```

并使用命令安装它：

```
$ ./install.sh
```

该命令将在 `~/.bashrc` 文件中添加以下行：

```
[...]
# SUDO - shout at bash to su commands
# Distributed under GNU GPLv2, @jthistle on github

shopt -s expand_aliases

IFS_=${IFS}
IFS=":" read -ra PATHS <<< "$PATH"

for i in "${PATHS[@]}"; do
    for j in $( ls "$i" ); do
        if [ ${j^^} != $j ] && [ $j != "sudo" ]; then
            alias ${j^^}="sudo $j"
        fi
    done
done

alias SUDO='sudo $(history -p !!)'

IFS=${IFS_}

# end SUDO
```

它还会备份你的 `~/.bashrc` 并将其保存为 `~/.bashrc.old`。如果有重大错误，你可以恢复它。

最后，使用命令更新更改：

```
$ source ~/.bashrc
```

### 现在，用大写字母中输入 Linux 命令，将它们作为 Sudo 用户运行

通常我们像下面那样执行需要 sudo/root 权限的命令。

```
$ sudo mkdir /ostechnix
```

对么？没错！上面的命令将在根目录（`/`）中创建名为 `ostechnix` 的目录。让我们使用 `Ctrl + c` 取消。

一旦安装了 `SUDO`，你就可以**在不使用 sudo 的情况下输入任何大写 Linux 命令**并运行它们。因此，你可以像下面那样运行上面的命令：

```
$ MKDIR /ostechnix
$ TOUCH /ostechnix/test.txt
$ LS /ostechnix
```

![](/data/attachment/album/201907/24/091112jygas3632iff6rae.gif)

用大写字母输入 Linux 命令以将其作为 sudo 用户运行

请注意**它无法绕过 sudo 密码**。你仍然需要键入 `sudo` 密码才能执行给定的命令。它只会有助于避免在每个命令前面输入 `sudo`。

相关阅读：

* [如何在 Linux 中没有 sudo 密码运行特定命令](https://www.ostechnix.com/run-particular-commands-without-sudo-password-linux/)
* [如何恢复用户的 sudo 权限](https://www.ostechnix.com/how-to-restore-sudo-privileges-to-a-user/)
* [如何在 Ubuntu 上为用户授予和删除 sudo 权限](https://www.ostechnix.com/how-to-grant-and-remove-sudo-privileges-to-users-on-ubuntu/)
* [如何在 Linux 系统中查找所有 sudo 用户](https://www.ostechnix.com/find-sudo-users-linux-system/)
* [如何在终端中输入密码时显示星号](https://www.ostechnix.com/display-asterisks-type-password-terminal/)
* [如何更改 Linux 中的 sudo 提示符](https://www.ostechnix.com/change-sudo-prompt-linux-unix/)

当然，输入 `sudo` 只需几秒钟，所以这不是什么大问题。 我必须告诉这是一个用来消磨时间的有趣且无用的项目。 如果你不喜欢它，那就去学习一些有用的东西吧。 如果你喜欢它，试一试，玩得开心！

资源：

* [SUDO GitHub 仓库](https://github.com/jthistle/SUDO)

---

via: <https://www.ostechnix.com/type-linux-commands-in-capital-letters-to-run-them-as-sudo-user/>

作者：[sk](https://www.ostechnix.com/author/sk/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


使用 Python 解析参数

Summary: 使用 argparse 模块像专业人士一样解析参数。

使用 argparse 模块像专业人士一样解析参数。

>
> 使用 argparse 模块像专业人士一样解析参数。
>
>
>

![](/data/attachment/album/201907/24/210351h99gzcttqmk7c7mx.jpg)

如果你在使用 [Python](https://www.python.org/) 进行开发，你可能会在终端中使用命令，即使只是为了启动 Python 脚本或使用 [pip](https://pip.pypa.io/en/stable/installing/) 安装 Python 模块。命令可能简单而单一：

```
$ ls
```

命令也可能需要参数：

```
$ ls example
```

命令也可以有选项或标志：

```
$ ls --color example
```

有时选项也有参数：

```
$ sudo firewall-cmd  --list-all --zone home
```

### 参数

POSIX shell 会自动将你输入的内容作为命令分成数组。例如，这是一个简单的命令：

```
$ ls example
```

命令 `ls` 的位置是 `$0`，参数 `example` 位置是 `$1`。

你**可以**写一个循环迭代每项。确定它是否是命令、选项还是参数。并据此采取行动。幸运的是，已经有一个名为 [argparse](https://pypi.org/project/argparse/) 的模块。

### argparse

argparse 模块很容易集成到 Python 程序中，并有多种便利功能。例如，如果你的用户更改选项的顺序或使用一个不带参数的选项（称为**布尔**，意味着选项可以打开或关闭设置），然后另一个需要参数（例如 `--color red`），argparse 可以处理多种情况。如果你的用户忘记了所需的选项，那么 argparse 模块可以提供友好的错误消息。

要在应用中使用 argparse，首先要定义为用户提供的选项。你可以接受几种不同的参数，而语法一致又简单。

这是一个简单的例子：

```
#!/usr/bin/env python
import argparse
import sys

def getOptions(args=sys.argv[1:]):
    parser = argparse.ArgumentParser(description="Parses command.")
    parser.add_argument("-i", "--input", help="Your input file.")
    parser.add_argument("-o", "--output", help="Your destination output file.")
    parser.add_argument("-n", "--number", type=int, help="A number.")
    parser.add_argument("-v", "--verbose",dest='verbose',action='store_true', help="Verbose mode.")
    options = parser.parse_args(args)
    return options
```

此示例代码创建一个名为 `getOptions` 的函数，并告诉 Python 查看每个可能的参数，前面有一些可识别的字符串（例如 `--input` 或者 `-i`）。 Python 找到的任何选项都将作为 `options` 对象从函数中返回（`options` 是一个任意名称，且没有特殊含义。它只是一个包含函数已解析的所有参数的摘要的数据对象）。

默认情况下，Python 将用户给出的任何参数视为字符串。如果需要提取整数（数字），则必须指定选项 `type=int`，如示例代码中的 `--number` 选项。

如果你有一个只是关闭和打开功能的参数，那么你必须使用 `boolean` 类型，就像示例代码中的 `--verbose` 标志一样。这种选项只保存 `True` 或 `False`，用户用来指定是否使用标志。如果使用该选项，那么会激活 `stored_true`。

当 `getOptions` 函数运行时，你就可以使用 `options` 对象的内容，并让程序根据用户调用命令的方式做出决定。你可以使用测试打印语句查看 `options` 的内容。将其添加到示例文件的底部：

```
print(getOptions())
```

然后带上参数运行代码：

```
$ python3 ./example.py -i foo -n 4
Namespace(input='foo', number=4, output=None, verbose=False)
```

### 检索值

示例代码中的 `options` 对象包含了用户提供的选项后面的值（或派生的布尔值）。例如，在示例代码中，可以通过 `options.number` 来检索 `--number`。

```
options = getOptions(sys.argv[1:])

if options.verbose:
    print("Verbose mode on")
else:
    print("Verbose mode off")

print(options.input)
print(options.output)
print(options.number)

# 这里插入你的 Python 代码
```

示例中的布尔选项 `--verbose` 是通过测试 `options.verbose` 是否为 `True`（意味着用户使用了 `--verbose` 标志）或 `False`（用户没有使用 `--verbose` 标志），并采取相应的措施。

### 帮助和反馈

argparse 还包含一个内置的 `--help`（简写 `-h`）选项，它提供了有关如何使用命令的提示。这是从你的代码派生的，因此生成此帮助系统不需要额外的工作：

```
$ ./example.py --help
usage: example.py [-h] [-i INPUT] [-o OUTPUT] [-n NUMBER] [-v]

Parses command.

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        Your input file.
  -o OUTPUT, --output OUTPUT
                        Your destination output file.
  -n NUMBER, --number NUMBER
                        A number.
  -v, --verbose         Verbose mode.
```

### 像专业人士一样用 Python 解析

这是一个简单的示例，来演示如何在 Python 应用中的解析参数以及如何快速有效地记录它的语法。下次编写 Python 脚本时，请使用 argparse 为其提供一些选项。你以后会感到自得，你的命令不会像一个快速的临时脚本，更像是一个“真正的” Unix 命令！

以下是可用于测试的示例代码：

```
#!/usr/bin/env python3
# GNU All-Permissive License
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.  This file is offered as-is,
# without any warranty.

import argparse
import sys

def getOptions(args=sys.argv[1:]):
    parser = argparse.ArgumentParser(description="Parses command.")
    parser.add_argument("-i", "--input", help="Your input file.")
    parser.add_argument("-o", "--output", help="Your destination output file.")
    parser.add_argument("-n", "--number", type=int, help="A number.")
    parser.add_argument("-v", "--verbose",dest='verbose',action='store_true', help="Verbose mode.")
    options = parser.parse_args(args)
    return options

options = getOptions(sys.argv[1:])

if options.verbose:
    print("Verbose mode on")
else:
    print("Verbose mode off")

print(options.input)
print(options.output)
print(options.number)
```

---

via: <https://opensource.com/article/19/7/parse-arguments-python>

作者：[Seth Kenlon](https://opensource.com/users/seth/users/notsag) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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