chgrp 和 newgrp 命令简介

Summary: chgrp 和 newgrp 命令可帮助你管理需要维护组所有权的文件。

chgrp 和 newgrp 命令可帮助你管理需要维护组所有权的文件。

>
> chgrp 和 newgrp 命令可帮助你管理需要维护组所有权的文件。
>
>
>

![](/data/attachment/album/201909/28/155554aezllilzbedetm43.jpg)

在最近的一篇文章中，我介绍了 [chown](/article-11416-1.html) 命令，它用于修改系统上的文件所有权。回想一下，所有权是分配给一个对象的用户和组的组合。`chgrp` 和 `newgrp` 命令为管理需要维护组所有权的文件提供了帮助。

### 使用 chgrp

`chgrp` 只是更改文件的组所有权。这与 `chown :<group>` 命令相同。你可以使用：

```
$chown :alan mynotes
```

或者：

```
$chgrp alan mynotes
```

#### 递归

`chgrp` 和它的一些参数可以用在命令行和脚本中。就像许多其他 Linux 命令一样，`chgrp` 有一个递归参数 `-R`。如下所示，你需要它来对文件夹及其内容进行递归操作。我加了 `-v`（详细）参数，因此 `chgrp` 会告诉我它在做什么：

```
$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug  5 15:33 conf

conf:
-rw-rw-r-- 1 alan alan 0 Aug  5 15:33 conf.xml
# chgrp -vR delta conf
changed group of 'conf/conf.xml' from alan to delta
changed group of 'conf' from alan to delta
```

#### 参考

当你要更改文件的组以匹配特定的配置，或者当你不知道具体的组时（比如你运行一个脚本时），可使用参考文件 （`--reference=RFILE`）。你可以复制另外一个作为参考的文件（RFILE）的组。比如，为了撤销上面的更改 （请注意，点 `.` 代表当前工作目录）：

```
$ chgrp -vR --reference=. conf
```

#### 报告更改

大多数命令都有用于控制其输出的参数。最常见的是 `-v` 来启用详细信息，而且 `chgrp` 命令也拥有详细模式。它还具有 `-c`（`--changes`）参数，指示 `chgrp` 仅在进行了更改时报告。`chgrp` 还会报告其他内容，例如是操作不被允许时。

参数 `-f`（`--silent`、`--quiet`）用于禁止显示大部分错误消息。我将在下一节中使用此参数和 `-c` 来显示实际更改。

#### 保持根目录

Linux 文件系统的根目录（`/`）应该受到高度重视。如果命令在此层级犯了一个错误，那么后果可能是可怕的，并会让系统无法使用。尤其是在运行一个会递归修改甚至删除的命令时。`chgrp` 命令有一个可用于保护和保持根目录的参数。它是 `--preserve-root`。如果在根目录中将此参数和递归一起使用，那么什么也不会发生，而是会出现一条消息：

```
[root@localhost /]# chgrp -cfR --preserve-root a+w /
chgrp: it is dangerous to operate recursively on '/'
chgrp: use --no-preserve-root to override this failsafe
```

不与递归（-R）结合使用时，该选项无效。但是，如果该命令由 `root` 用户运行，那么 `/` 的权限将会更改，但其下的其他文件或目录的权限则不会被更改：

```
[alan@localhost /]$ chgrp -c --preserve-root alan /
chgrp: changing group of '/': Operation not permitted
[root@localhost /]# chgrp -c --preserve-root alan /
changed group of '/' from root to alan
```

令人惊讶的是，它似乎不是默认参数。而选项 `--no-preserve-root` 是默认的。如果你在不带“保持”选项的情况下运行上述命令，那么它将默认为“无保持”模式，并可能会更改不应更改的文件的权限：

```
[alan@localhost /]$ chgrp -cfR alan /
changed group of '/dev/pts/0' from tty to alan
changed group of '/dev/tty2' from tty to alan
changed group of '/var/spool/mail/alan' from mail to alan
```

### 关于 newgrp

`newgrp` 命令允许用户覆盖当前的主要组。当你在所有文件必须有相同的组所有权的目录中操作时，`newgrp` 会很方便。假设你的内网服务器上有一个名为 `share` 的目录，不同的团队在其中存储市场活动照片。组名为 `share`。当不同的用户将文件放入目录时，文件的主要组可能会变得混乱。每当添加新文件时，你都可以运行 `chgrp` 将错乱的组纠正为 `share`：

```
$ cd share
ls -l
-rw-r--r--. 1 alan share 0 Aug  7 15:35 pic13
-rw-r--r--. 1 alan alan 0 Aug  7 15:35 pic1
-rw-r--r--. 1 susan delta 0 Aug  7 15:35 pic2
-rw-r--r--. 1 james gamma 0 Aug  7 15:35 pic3
-rw-rw-r--. 1 bill contract  0 Aug  7 15:36 pic4
```

我在 [chmod 命令](https://opensource.com/article/19/8/linux-chmod-command)的文章中介绍了 `setgid` 模式。它是解决此问题的一种方法。但是，假设由于某种原因未设置 `setgid` 位。`newgrp` 命令在此时很有用。在任何用户将文件放入 `share` 目录之前，他们可以运行命令 `newgrp share`。这会将其主要组切换为 `share`，因此他们放入目录中的所有文件都将有 `share` 组，而不是用户自己的主要组。完成后，用户可以使用以下命令切换回常规主要组（举例）：

```
newgrp alan
```

### 总结

了解如何管理用户、组和权限非常重要。最好知道一些替代方法来解决可能遇到的问题，因为并非所有环境都以相同的方式设置。

---

via: <https://opensource.com/article/19/9/linux-chgrp-and-newgrp-commands>

作者：[Alan Formy-Duval](https://opensource.com/users/alanfdosshttps://opensource.com/users/sethhttps://opensource.com/users/alanfdosshttps://opensource.com/users/seth) 选题：[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/) 荣誉推出


每周开源点评：云原生 Java、开源安全以及更多行业趋势

Summary: 开源社区和行业趋势的每周总览。

开源社区和行业趋势的每周总览。

>
> 开源社区和行业趋势的每周总览。
>
>
>

![Person standing in front of a giant computer screen with numbers, data](/data/attachment/album/201909/29/103316pxhxlh5l9qag7mth.png "Person standing in front of a giant computer screen with numbers, data")

作为我在具有开源开发模型的企业软件公司担任高级产品营销经理的角色的一部分，我为产品营销人员、经理和其他影响者定期发布有关开源社区，市场和行业趋势的定期更新。 以下是该更新中我和他们最喜欢的五篇文章。

### 《为什么现代 web 开发如此复杂？》

* [文章地址](https://www.vrk.dev/2019/07/11/why-is-modern-web-development-so-complicated-a-long-yet-hasty-explanation-part-1/)

>
> 现代前端 web 开发带来了一种两极分化的体验：许多人喜欢它，而其他人则鄙视它。
>
>
> 我是现代Web开发的忠实拥护者，尽管我将其描述为“魔法”——而魔法也有其优点和缺点……。最近，我一直在向那些只具有粗略的原始 web 开发工作流程的人们讲解“现代 web 开发工作流程”……，但我发现需要解释的内容实在是太多了！甚至笼统的解释最终都会变得冗长。因此，在我努力写下更多解释的过程中，这里是对 web 开发演变的一个长期而笼统的解释的开始……
>
>
>

**影响**：足够具体，对前端开发人员非常有用（特别是对新开发人员），且足够简单，解释得足够好，可以帮助非开发人员更好地理解前端开发人员的一些问题。到最后，你将（有点）了解 Javascript 和 WebAPI 之间的区别，以及 2019 年的 Javascript 与 2006 年的 Javascript 有何不同。

### 开源 Kubernetes 安全审计

* [文章链接](https://www.cncf.io/blog/2019/08/06/open-sourcing-the-kubernetes-security-audit/)

>
> 去年，云原生计算基金会（CNCF）开始为其项目执行并开源第三方安全审计，以提高我们生态系统的整体安全性。这个想法是从一些项目开始，并从 CNCF 社区收集了关于这个试点项目是否有用的反馈。第一批经历这个过程的项目是 [CoreDNS](https://coredns.io/2018/03/15/cure53-security-assessment/)、[Envoy](https://github.com/envoyproxy/envoy/blob/master/docs/SECURITY_AUDIT.pdf) 和 [Prometheus](https://cure53.de/pentest-report_prometheus.pdf)。这些首次公开审计发现了从一般漏洞到严重漏洞的安全问题。有了这些结果，CoreDNS、Envoy 和 Prometheus 的项目维护者就能够解决已发现的漏洞，并添加文档来帮助用户。
>
>
> 从这些初始审计中得出的主要结论是，公开安全审计是测试开源项目的质量及其漏洞管理过程的一个很好的方法，更重要的是，测试开源项目的安全实践有多大的弹性。特别是 CNCF 的[毕业项目](https://www.cncf.io/projects/)，它们被世界上一些最大的公司广泛应用于生产中，它们必须坚持最高级别的安全最佳实践。
>
>
>

**影响**：就像 Linux 之于数据中心一样，很多公司都把云计算押宝在 Kubernetes 上。从安全的角度来看，看到其中 4 家公司以确保项目正在做应该做的事情，这激发了人们的信心。共享这项研究表明，开源远远不止是仓库中的代码；它是以一种有益于整个社区而不是少数人利益的方式获取和分享专家意见。

### Quarkus——这个轻量级 Java 框架的下一步是什么？

* [文章链接](https://jaxenter.com/quarkus-whats-next-for-the-lightweight-java-framework-160793.html)

>
> “容器优先”是什么意思？Quarkus 有哪些优势？0.20.0 版本有什么新功能？未来我们可以期待哪些功能？1.0.0 版什么时候发布？我们对 Quarkus 有很多问题，而 Alex Soto 也很耐心地回答了所有问题。 随着 Quarkus 0.20.0 的发布，我们和 [JAX 伦敦演讲者](https://jaxlondon.com/cloud-kubernetes-serverless/java-particle-acceleration-using-quarkus/)，Java 拥护者和红帽的开发人员体验总监 Alex Soto 进行了接触。他很好地回答了我们关于 Quarkus 的过去、现在和未来的所有问题。看起来我们对这个令人兴奋的轻量级框架有很多期待！
>
>
>

**影响**：最近有个聪明的人告诉我，Quarkus 有潜力使 Java “可能成为容器和无服务器环境的最佳语言之一”。不禁使我多看了一眼。尽管 Java 是最流行的编程语言之一（[如果不是最流行的](https://opensource.com/article/19/8/possibly%20one%20of%20the%20best%20languages%20for%20containers%20and%20serverless%20environments.)），但当你听到“云原生”一词时，它可能并不是第一个想到的语言。Quarkus 可以通过让开发人员将他们的经验应用到新的挑战中，从而扩展和提高他们所拥有的技能的价值。

### Julia 编程语言：用户批露他们最喜欢和最讨厌它的地方

* [文章链接](https://www.zdnet.com/article/julia-programming-language-users-reveal-what-they-love-and-hate-the-most-about-it/#ftag=RSSbaffb68)

>
> Julia 最受欢迎的技术特性是速度和性能，其次是易用性，而最受欢迎的非技术特性是使用者无需付费即可使用它。
>
>
> 用户还报告了他们对该语言最大的不满。排在首位的是附加功能的包不够成熟，或者维护得不够好，无法满足他们的需求。
>
>
>

**影响**：Julia 1.0 版本已经发布了一年，并且在一系列相关指标（下载、GitHub 星级等）中取得了令人瞩目的增长。它是一种直接针对我们当前和未来最大挑战（“科学计算、机器学习、数据挖掘、大规模线性代数、分布式和并行计算”）的语言，因此，了解用户对它的感受，就可以间接看到有关这些挑战的应对情况。

### 多云数据解读：11 个有趣的统计数据

* [文章链接](https://enterprisersproject.com/article/2019/8/multi-cloud-statistics)

>
> 如果你把我们最近对 [Kubernetes 的有趣数据](https://enterprisersproject.com/article/2019/7/kubernetes-statistics-13-compelling)的深入研究归结最基本的一条，它看起来是这样的：[Kubernetes](https://www.redhat.com/en/topics/containers/what-is-kubernetes?intcmp=701f2000000tjyaAAA) 的受欢迎程度在可预见的未来将持续下去。
>
>
> 剧透警报：当你挖掘有关[多云](https://www.redhat.com/en/topics/cloud-computing/what-is-multicloud?intcmp=701f2000000tjyaAAA)使用情况的最新数据时，他们告诉你一个类似的描述：使用率正在飙升。
>
>
> 这种一致性是有道理的。也许不是每个组织都将使用 Kubernetes 来管理其多云和/或[混合云](https://enterprisersproject.com/hybrid-cloud)基础架构，但是两者越来越紧密地联系在一起。即使不这样做，它们都反映了向更分散和异构 IT 环境的普遍转变，以及[云原生开发](https://enterprisersproject.com/article/2018/10/how-explain-cloud-native-apps-plain-english)和其他重叠趋势。
>
>
>

**影响**：越来越多地采用“多云战略”的另一种解释是，它们将组织中单独部分未经协商而作出的决策追溯为“战略”，从而使决策合法化。“等等，所以你从谁那里买了几个小时？又从另一个人那里买了几个小时？为什么在会议纪要中没有呢？我想我们现在是一家多云公司！”。当然，我在开玩笑，我敢肯定大多数大公司的协调能力远胜于此，对吗？

*我希望你喜欢这张上周让我印象深刻的列表，并在下周一回来了解更多的开放源码社区、市场和行业趋势。*

---

via: <https://opensource.com/article/19/8/cloud-native-java-and-more>

作者：[Tim Hildred](https://opensource.com/users/thildred) 选题：[lujun9972](https://github.com/lujun9972) 译者：[laingke](https://github.com/laingke) 校对：[wxy](https://github.com/wxy)

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


使用 strace 查找 Emacs 启动阻塞的原因

Summary: 刚好最近在学习使用 strace 工具，因此决定使用 strace 来看看 Emacs 到底卡在哪里。

用esup包就能看，exec-path-from-shell确实占用了90%以上的启动时间。

来自广东广州的 Chrome Mobile 119.0|Android 10 用户

![](/data/attachment/album/201909/29/115250bgndkvezdds7q24j.jpg)

之前就觉得我的 Emacs 启动好慢，查看启动日志会发现启动到一般的时候会有一个比较长时间的卡顿。 之前一直没有理会它，今天花了点时间探索了一下，发现罪魁祸首居然是 exec-path-from-shell 这个包。

现将探索的过程记录如下： 由于使用了 spacemacs 的配置，配置上比较复杂，不太想通过实验缩减配置的方式来摸索出问题的地方。刚好最近在学习使用 `strace` 工具，因此决定使用 `strace` 来看看 Emacs 到底卡在哪里。

```
strace emacs --fg-daemon

```

输出的内容特别多，这里只截取卡顿前的部分内容

```
readlinkat(AT_FDCWD, "/home", 0x7ffd1d3abb50, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972", 0x7ffd1d3abf00, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d", 0x7ffd1d3ac2b0, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa", 0x7ffd1d3ac660, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904", 0x7ffd1d3aca10, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904/exec-path-from-shell.elc", 0x7ffd1d3acdc0, 1024) = -1 EINVAL (无效的参数)
lseek(7, -2655, SEEK_CUR)               = 1441
read(7, "\n(defvar exec-path-from-shell-de"..., 4096) = 4096
lseek(7, 5537, SEEK_SET)                = 5537
lseek(7, 5537, SEEK_SET)                = 5537
lseek(7, 5537, SEEK_SET)                = 5537
lseek(7, 5537, SEEK_SET)                = 5537
lseek(7, 5537, SEEK_SET)                = 5537
lseek(7, 5537, SEEK_SET)                = 5537
brk(0x7507000)                          = 0x7507000
lseek(7, 5537, SEEK_SET)                = 5537
lseek(7, 5537, SEEK_SET)                = 5537
lseek(7, 5537, SEEK_SET)                = 5537
read(7, "230\\205\26\0\t\22\\307\\310\t!\vC\\\"\\211\24\\2"..., 4096) = 2430
lseek(7, 7967, SEEK_SET)                = 7967
lseek(7, 7967, SEEK_SET)                = 7967
lseek(7, 7967, SEEK_SET)                = 7967
lseek(7, 7967, SEEK_SET)                = 7967
read(7, "", 4096)                       = 0
close(7)                                = 0
getpid()                                = 10818
faccessat(AT_FDCWD, "/home/lujun9972/bin/printf", X_OK) = -1 ENOENT (没有那个文件或目录)
faccessat(AT_FDCWD, "/usr/local/sbin/printf", X_OK) = -1 ENOENT (没有那个文件或目录)
faccessat(AT_FDCWD, "/usr/local/bin/printf", X_OK) = -1 ENOENT (没有那个文件或目录)
faccessat(AT_FDCWD, "/usr/bin/printf", X_OK) = 0
stat("/usr/bin/printf", {st_mode=S_IFREG|0755, st_size=51176, ...}) = 0
openat(AT_FDCWD, "/dev/null", O_RDONLY|O_CLOEXEC) = 7
faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0
faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0
faccessat(AT_FDCWD, "/bin/bash", X_OK)  = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=903440, ...}) = 0
pipe2([8, 9], O_CLOEXEC)                = 0
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
vfork()                                 = 10949
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
close(9)                                = 0
close(7)                                = 0
read(8, "bash: \346\227\240\346\263\225\350\256\276\345\256\232\347\273\210\347\253\257\350\277\233\347\250\213\347\273"..., 16384) = 74
read(8, "bash: \346\255\244 shell \344\270\255\346\227\240\344\273\273\345\212\241\346\216\247\345"..., 16310) = 35
read(8, "setterm: \347\273\210\347\253\257 xterm-256color \344"..., 16275) = 51
read(8, "Couldn't get a file descriptor r"..., 16224) = 56
read(8, "bash: [: \357\274\232\351\234\200\350\246\201\346\225\264\346\225\260\350\241\250\350\276\276\345\274"..., 16168) = 34
read(8, "Your display number is 0\n", 16134) = 25
read(8, "Test whether fcitx is running co"..., 16109) = 53
read(8, "Fcitx is running correctly.\n\n==="..., 16056) = 87
read(8, "Launch fbterm...\n", 15969)    = 17
read(8, "stdin isn't a tty!\n", 15952)  = 19
read(8, "__RESULT\0/home/lujun9972/bin:/ho"..., 15933) = 298
read(8, 0x7ffd1d39ce9d, 15635)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=10949, si_uid=1000, si_status=0, si_utime=10, si_stime=7} ---
rt_sigreturn({mask=[]})                 = -1 EINTR (被中断的系统调用)
read(8, "", 15635)                      = 0
wait4(10949, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 10949
close(8)                                = 0
getpid()                                = 10818
faccessat(AT_FDCWD, "/home/lujun9972/bin/printf", X_OK) = -1 ENOENT (没有那个文件或目录)
faccessat(AT_FDCWD, "/usr/local/sbin/printf", X_OK) = -1 ENOENT (没有那个文件或目录)
faccessat(AT_FDCWD, "/usr/local/bin/printf", X_OK) = -1 ENOENT (没有那个文件或目录)
faccessat(AT_FDCWD, "/usr/bin/printf", X_OK) = 0
stat("/usr/bin/printf", {st_mode=S_IFREG|0755, st_size=51176, ...}) = 0
openat(AT_FDCWD, "/dev/null", O_RDONLY|O_CLOEXEC) = 7
faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0
faccessat(AT_FDCWD, "/proc/5070/fd/.", F_OK) = 0
faccessat(AT_FDCWD, "/bin/bash", X_OK)  = 0
stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=903440, ...}) = 0
pipe2([8, 9], O_CLOEXEC)                = 0
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
vfork()                                 = 11679
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
close(9)                                = 0
close(7)                                = 0
read(8, "setterm: \347\273\210\347\253\257 xterm-256color \344"..., 16384) = 51
read(8, "Couldn't get a file descriptor r"..., 16333) = 56
read(8, "/home/lujun9972/.bash_profile: \347"..., 16277) = 72
read(8, "Your display number is 0\nTest wh"..., 16205) = 78
read(8, "Fcitx is running correctly.\n\n==="..., 16127) = 104
read(8, "stdin isn't a tty!\n", 16023)  = 19
read(8, "__RESULT\0b269cd09e7ec4e8a115188c"..., 16004) = 298
read(8, 0x7ffd1d39cba6, 15706)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11679, si_uid=1000, si_status=0, si_utime=1, si_stime=1} ---
rt_sigreturn({mask=[]})                 = -1 EINTR (被中断的系统调用)
read(8,

```

很容易就可以看出，当 Emacs 卡顿时，它在尝试从 8 号文件句柄中读取内容。

那么 8 号文件句柄在哪里定义的呢？往前看可以看到：

```
pipe2([8, 9], O_CLOEXEC)                = 0
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
vfork()                                 = 11679
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
close(9)                                = 0

```

可以推测出，Emacs 主进程 `fork` 出一个子进程（进程号为 11679），并通过管道读取子进程的内容。

然而，从

```
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=11679, si_uid=1000, si_status=0, si_utime=1, si_stime=1} ---
rt_sigreturn({mask=[]})                 = -1 EINTR (被中断的系统调用)
read(8,

```

可以看出，实际上子进程已经退出了（父进程收到 SIGCHLD 信号），父进程确依然在尝试从管道中读取内容，导致的阻塞。

而且从

```
read(8, "setterm: \347\273\210\347\253\257 xterm-256color \344"..., 16384) = 51
read(8, "Couldn't get a file descriptor r"..., 16333) = 56
read(8, "/home/lujun9972/.bash_profile: \347"..., 16277) = 72
read(8, "Your display number is 0\nTest wh"..., 16205) = 78
read(8, "Fcitx is running correctly.\n\n==="..., 16127) = 104
read(8, "stdin isn't a tty!\n", 16023)  = 19
read(8, "__RESULT\0b269cd09e7ec4e8a115188c"..., 16004) = 298
read(8, 0x7ffd1d39cba6, 15706)          = ? ERESTARTSYS (To be restarted if SA_RESTART is set)

```

看到，子进程的输出似乎是我的交互式登录 bash 启动时的输出（加载了 `.bash_profile`）

在往前翻发现这么一段信息：

```
readlinkat(AT_FDCWD, "/home", 0x7ffd1d3abb50, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972", 0x7ffd1d3abf00, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d", 0x7ffd1d3ac2b0, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa", 0x7ffd1d3ac660, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904", 0x7ffd1d3aca10, 1024) = -1 EINVAL (无效的参数)
readlinkat(AT_FDCWD, "/home/lujun9972/.emacs.d/elpa/exec-path-from-shell-20180323.1904/exec-path-from-shell.elc", 0x7ffd1d3acdc0, 1024) = -1 EINVAL (无效的参数)
lseek(7, -2655, SEEK_CUR)               = 1441
read(7, "\n(defvar exec-path-from-shell-de"..., 4096) = 4096

```

这很明显是跟 `exec-path-from-shell` 有关啊。

通过查看 `exec-path-from-shell` 的实现，发现 `exec-path-from-shell` 的实现原理是通过实际调启一个 shell，然后输出 `PATH` 和 `MANPATH` 的值的。 而且对于 `bash` 来说，默认的启动参数为 `-i -l`（可以通过`exec-path-from-shell-arguments`来设置）。也就是说 `bash` 会作为交互式的登录shell来启动的，因此会加载 `.bash_profile` 和 `.bashrc`。

既然发现跟 `exec-path-from-shell` 这个包有关，而且据说这个包对 Linux 其实意义不大，那不如直接禁用掉好了。

```
dotspacemacs-excluded-packages '(exec-path-from-shell)

```

再次重启Emacs，发现这次启动速度明显快了许多了。


一份 Markdown 简介

Summary: 一次编辑便可将文本转换为多种格式。下面是如何开始使用 Markdown。

一次编辑便可将文本转换为多种格式。下面是如何开始使用 Markdown。

>
> 一次编辑便可将文本转换为多种格式。下面是如何开始使用 Markdown。
>
>
>

![](/data/attachment/album/201909/29/123226bjte253n2h44cjjj.jpg)

在很长一段时间里，我发现我在 GitLab 和 GitHub 上看到的所有文件都带有 **.md** 扩展名，这是专门为开发人员编写的文件类型。几周前，当我开始使用 Markdown 时，我的观念发生了变化。它很快成为我日常工作中最重要的工具。

Markdown 使我的生活更简易。我只需要在已经编写的代码中添加一些符号，并且在浏览器扩展或开源程序的帮助下，即可将文本转换为各种常用格式，如 ODT、电子邮件（稍后将详细介绍）、PDF 和 EPUB。

### 什么是 Markdown?

来自 [维基百科](https://en.wikipedia.org/wiki/Markdown)的友情提示:

>
> Markdown 是一种轻量级标记语言，具有纯文本格式语法。
>
>
>

这意味着通过在文本中使用一些额外的符号，Markdown 可以帮助你创建具有特定结构和格式的文档。当你以纯文本（例如，在记事本应用程序中）做笔记时，没有任何东西表明哪个文本应该是粗体或斜体。在普通文本中，你在写链接时需要将一个链接写为 “<http://example.com> ”，或者写为 “example.com”，又或“访问网站（example.com）”。这样没有内在的一致性。

但是如果你按照 Markdown 的方式编写，你的文本就有了内在的一致性。计算机喜欢一致性，因为这使得它们能够遵循严格的指令而不用担心异常。

相信我；一旦你学会使用 Markdown，每一项写作任务在某种程度上都会比以前更容易、更好。让我们开始吧。

### Markdown 基础

以下是使用 Markdown 的基础语法。

1、创建一个以 **.md** 扩展名结尾的文本文件（例如，`example.md`）。你可以使用任何文本编辑器（甚至像 LibreOffice 或 Microsoft word 这样的文字处理程序亦可），只要记住将其保存为*文本*文件。

![Names of Markdown files](/data/attachment/album/201909/29/123250xzw5vjyvz4dw3y6s.png "Names of Markdown files")

2、想写什么就写什么，就像往常一样:

```
Lorem ipsum

Consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

De Finibus Bonorum et Malorum

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.

  Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.
```

（LCTT 译注：上述这段“Lorem ipsum”，中文又称“乱数假文”，是一篇常用于排版设计领域的拉丁文文章，主要目的为测试文章或文字在不同字型、版型下看起来的效果。）

3、确保在段落之间留有空行。如果你习惯写商务信函或传统散文，这可能会觉得不自然，因为那里段落只有一行，甚至在第一个单词前还有一个缩进。对于 Markdown，空行（一些文字处理程序使用 `¶`，称为Pilcrow 符号）保证在创建一个新段落应用另一种格式（如 HTML）。

4、指定标题和副标题。对于文档的标题，在文本前面添加一个井号或散列符号（`#`）和一个空格（例如 `# Lorem ipsum`）。第一个副标题级别使用两个（`## De Finibus Bonorum et Malorum`），下一个级别使用三个（`### 第三个副标题`），以此类推。注意，在井号和第一个单词之间有一个空格。

```
# Lorem ipsum

Consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

## De Finibus Bonorum et Malorum

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.

  Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.
```

5、如果你想使用**粗体**字符，只需将字母放在两个星号之间，没有空格：`**对应的文本将以粗体显示**`。

![Bold text in Markdown](/data/attachment/album/201909/29/123301vwbz2f8wttq3bbtk.png "Bold text in Markdown")

6、对于**斜体**，将文本放在没有空格的下划线符号之间：`_我希望这个本文以斜体显示_`。（LCTT 译注：有的 Markdown 流派会将用下划线引起来的字符串视作下划线文本，而单个星号 `*` 引用起来的才视作斜体。从兼容性的角度看，使用星号比较兼容。）

![Italics text in Markdown](/data/attachment/album/201909/29/123317u0ep0m0w2dmz0mlp.png "Italics text in Markdown")

7、要插入一个链接（像 [Markdown Tutorial](https://www.markdowntutorial.com/)），把你想链接的文本放在括号里，URL 放在括号里，中间没有空格：`[Markdown Tutorial](<https://www.markdowntutorial.com/>)`。

![Hyperlinks in Markdown](/data/attachment/album/201909/29/123337uuyttpuz47h6z5me.png "Hyperlinks in Markdown")

8、块引用是用大于号编写的（`>`）在你要引用的文本前加上大于符号和空格: `> 名言引用`。

![Blockquote text in Markdown](/data/attachment/album/201909/29/123359h63m96mkscm1c9s9.png "Blockquote text in Markdown")

### Markdown 教程和技巧

这些技巧可以帮助你上手 Markdown ，但它涵盖了很多功能，不仅仅是粗体、斜体和链接。学习 Markdown 的最好方法是使用它，但是我建议你花 15 分钟来学习这篇简单的 [Markdown 教程](https://www.markdowntutorial.com/)，学以致用，勤加练习。

由于现代 Markdown 是对结构化文本概念的许多不同解释的融合，[CommonMark](https://commonmark.org/help/) 项目定义了一个规范，其中包含一组严格的规则，以使 Markdown 更加清晰。在编辑时手边准备一份[符合 CommonMark 的快捷键列表](https://opensource.com/downloads/cheat-sheet-markdown)可能会有帮助。

### 你能用 Markdown 做什么

Markdown 可以让你写任何你想写的东西，仅需一次编辑，就可以把它转换成几乎任何你想使用的格式。下面的示例演示如何将用 MD 编写简单的文本并转换为不同的格式。你不需要多种格式的文档-你可以仅仅编辑一次…然后拥有无限可能。

1、**简单的笔记**：你可以用 Markdown 编写你的笔记，并且在保存笔记时，开源笔记应用程序 [Turtl](https://turtlapp.com/) 将解释你的文本文件并显示为对应的格式。你可以把笔记存储在任何地方!

![Turtl application](/data/attachment/album/201909/29/123406kudznzc1uni63ccn.png "Turtl application")

2、**PDF 文件**：使用 [Pandoc](https://opensource.com/article/19/5/convert-markdown-to-word-pandoc) 应用程序，你可以使用一个简单的命令将 Markdown 文件转换为 PDF：

```
pandoc <file.md> -o <file.pdf>
```

![Markdown text converted to PDF with Pandoc](/data/attachment/album/201909/29/123418xeixhzl8b3yzhebf.png "Markdown text converted to PDF with Pandoc")

3、**Email**：你还可以通过安装浏览器扩展 [Markdown Here](https://markdown-here.com/) 将 Markdown 文本转换为 html 格式的电子邮件。要使用它，只需选择你的 Markdown 文本，在这里使用 Markdown 将其转换为 HTML，并使用你喜欢的电子邮件客户端发送消息。

![Markdown text converted to email with Markdown Here](/data/attachment/album/201909/29/123424orbu5k9b51psstp9.png "Markdown text converted to email with Markdown Here")

### 现在就开始上手吧

你不需要一个特殊的应用程序来使用 Markdown，你只需要一个文本编辑器和上面的技巧。它与你已有的写作方式兼容；你所需要做的就是使用它，所以试试吧。

---

via: <https://opensource.com/article/19/9/introduction-markdown>

作者：[Juan Islas](https://opensource.com/users/xislas) 选题：[lujun9972](https://github.com/lujun9972) 译者：[qfzy1233](https://github.com/qfzy1233) 校对：[wxy](https://github.com/wxy)

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


区块链 2.0 ：以太坊（九）

![Ethereum](/data/attachment/album/201909/29/174151e7apavuw77b3so4a.png)

在本系列的上一指南中，我们讨论了 [Hyperledger 项目（HLP）](/article-11275-1.html)，这是一个由 Linux 基金会开发的增长最快的产品。在本指南中，我们将详细讨论什么是“<ruby> 以太坊 <rt>  Ethereum </rt></ruby>”及其功能。许多研究人员认为，互联网的未来将基于<ruby> 去中心化计算 <rt>  decentralized computing </rt></ruby>的原理。实际上，去中心化计算是互联网放在首位的更广泛目标之一。但是，由于可用的计算能力不同，互联网发生了转折。尽管现代服务器功能使得服务器端处理和执行成为可能，但在世界上大部分地区缺乏像样的移动网络使得客户端也是如此。现在，现代智能手机具有 SoC（片上系统），在客户端本身上也能够处理许多此类操作，但是，由于安全地检索和存储数据而受到的限制仍然迫使开发人员需要在服务器端进行计算和数据管理。因此，当前可以观察到数据传输能力方面存在瓶颈。

由于分布式数据存储和程序执行平台的进步，所有这些可能很快就会改变。[区块链](/article-10650-1.html)允许在分布式用户网络（而不是中央服务器）上进行安全的数据管理和程序执行，这在互联网历史上基本上是第一次。

以太坊就是一个这样的区块链平台，使开发人员可以访问用于在这样的去中心化网络上构建和运行应用程序的框架和工具。尽管它以其加密货币而广为人知，以太坊不只是<ruby> 以太币 <rt>  ether </rt></ruby>（加密货币）。这是一种完整的<ruby> 图灵完备 <rt>  Turing complete </rt></ruby>编程语言，旨在开发和部署 DApp（即<ruby> 分布式应用 <rt>  Distributed APPlication </rt></ruby>）    1 。我们会在接下来的一篇文章中详细介绍 DApp。

以太坊是开源的，默认情况下是一个公共（非许可）区块链，并具有一个大范围的智能合约平台底层（Solidity）。以太坊提供了一个称为“<ruby> 以太坊虚拟机 <rt>  Ethereum virtual machine </rt></ruby>（EVM）”的虚拟计算环境，以运行应用程序和[智能合约](/article-10956-1.html)    2 。以太坊虚拟机运行在世界各地的成千上万个参与节点上，这意味着应用程序数据在保证安全的同时，几乎不可能被篡改或丢失。

### 以太坊的背后：什么使之不同

在 2017 年，为了推广对以太坊区块链的功能的利用，技术和金融领域的 30 多个团队汇聚一堂。因此，“<ruby> 以太坊企业联盟 <rt>  Ethereum Enterprise Alliance </rt></ruby>”（EEA）由众多支持成员组成，包括微软、摩根大通、思科、德勤和埃森哲。摩根大通已经拥有 Quorum，这是一个基于以太坊的去中心化金融服务计算平台，目前已经投入运行；而微软拥有基于以太坊的云服务，通过其 Azure 云业务销售    3 。

### 什么是以太币，它和以太坊有什么关系

以太坊的创建者<ruby> 维塔利克·布特林 <rt>  Vitalik Buterin </rt></ruby>深谙去中心化处理平台的真正价值以及为比特币提供动力的底层区块链技术。他提议比特币应该开发以支持运行分布式应用程序（DApp）和程序（现在称为智能合约）的想法，未能获得多数同意。

因此，他在 2013 年发表的白皮书中提出了以太坊的想法。原始白皮书仍然保留，[可供](https://github.com/ethereum/wiki/wiki/White-Paper)读者阅读。其理念是开发一个基于区块链的平台来运行智能合约和应用程序，这些合约和应用程序设计为在节点和用户设备上运行，而非服务器上运行。

以太坊系统经常被误认为就是加密货币以太币，但是，必须重申，以太坊是一个用于开发和执行应用程序的全栈平台，自成立以来一直如此，而比特币则不是。**以太网目前是按市值计算的第二大加密货币**，在撰写本文时，其平均交易价格为每个以太币 170 美元    4 。

### 该平台的功能和技术特性    5

* 正如我们已经提到的，称为以太币的加密货币只是该平台功能之一。该系统的目的不仅仅是处理金融交易。 实际上，以太坊平台和比特币之间的主要区别在于它们的脚本能力。以太坊是以图灵完备的编程语言开发的，这意味着它具有类似于其他主要编程语言的脚本编程和应用程序功能。开发人员需要此功能才能在平台上创建 DApp 和复杂的智能合约，而该功能是比特币缺失的。
* 以太币的“挖矿”过程更加严格和复杂。尽管可以使用专用的 ASIC 来开采比特币，但以太坊使用的基本哈希算法（EThash）降低了 ASIC 在这方面的优势。
* 为激励矿工和节点运营者运行网络而支付的交易费用本身是使用称为 “<ruby> 燃料 <rt>  Gas </rt></ruby>”的计算令牌来计算的。通过要求交易的发起者支付与执行交易所需的计算资源数量成比例的以太币，燃料提高了系统的弹性以及对外部黑客和攻击的抵抗力。这与其他平台（例如比特币）相反，在该平台上，交易费用与交易规模一并衡量。因此，以太坊的平均交易成本从根本上低于比特币。这也意味着在以太坊虚拟机上运行的应用程序需要付费，具体取决于应用程序要解决的计算问题。基本上，执行越复杂，费用就越高。
* 以太坊的出块时间估计约为 10 - 15 秒。出块时间是在区块链网络上打时间戳和创建区块所需的平均时间。与将在比特币网络上进行同样的交易要花费 10 分钟以上的时间相比，很明显，就交易和区块验证而言，以太坊要快得多。
* *有趣的是，对可开采的以太币数量或开采速度没有硬性限制，这导致其系统设计不像比特币那么激进*。

### 总结

尽管与以太坊相比，它远远超过了类似的平台，但在以太坊企业联盟开始推动之前，该平台本身尚缺乏明确的发展道路。虽然以太坊平台确实推动了企业发展，但必须注意，以太坊还可以满足小型开发商和个人的需求。 这样一来，为最终用户和企业开发的平台就为以太坊遗漏了许多特定功能。另外，以太坊基金会提出和开发的区块链模型是一种公共模型，而 Hyperledger 项目等项目提出的模型是私有的和需要许可的。

虽然只有时间才能证明以太坊、Hyperledger 和 R3 Corda 等平台中，哪一个平台会在现实场景中找到最多粉丝，但此类系统确实证明了以区块链为动力的未来主张背后的有效性。

---

1. [Gabriel Nicholas, “Ethereum Is Coding’s New Wild West | WIRED,” Wired , 2017](https://www.wired.com/story/ethereum-is-codings-new-wild-west/). [↩](#fnref1)
2. [What is Ethereum? — Ethereum Homestead 0.1 documentation](http://www.ethdocs.org/en/latest/introduction/what-is-ethereum.html#ethereum-virtual-machine). [↩](#fnref2)
3. [Ethereum, a Virtual Currency, Enables Transactions That Rival Bitcoin’s – The New York Times](https://www.nytimes.com/2016/03/28/business/dealbook/ethereum-a-virtual-currency-enables-transactions-that-rival-bitcoins.html). [↩](#fnref3)
4. [Cryptocurrency Market Capitalizations | CoinMarketCap](https://coinmarketcap.com/). [↩](#fnref4)
5. [Introduction — Ethereum Homestead 0.1 documentation](http://www.ethdocs.org/en/latest/introduction/index.html). [↩](#fnref5)

---

via: <https://www.ostechnix.com/blockchain-2-0-what-is-ethereum/>

作者：[ostechnix](https://www.ostechnix.com/author/editor/) 选题：[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/) 荣誉推出


IBM 将区块链引入红帽 OpenShift；为混合云客户添加了Apache CouchDB

>
> IBM 在其区块链平台上增加了红帽 OpenShift 支持，并将用于 Apache CouchDB 的 Kubernetes Operator 引入其混合云服务中。
>
>
>

![](/data/attachment/album/201909/29/220234zc6zk6i66nt66kk1.jpg)

IBM 本周继续推进其红帽和开源集成工作，在其[区块链](https://www.networkworld.com/article/3330937/how-blockchain-will-transform-the-iot.html)平台上添加了红帽 OpenShift 支持，并在其[混合云](https://www.networkworld.com/article/3268448/what-is-hybrid-cloud-really-and-whats-the-best-strategy.html)服务产品之外为 Apache CouchDB 引入了 Kubernetes Operator。

在该公司的旗舰级企业 Kubernetes 平台 [红帽 OpenShift 上部署 IBM 区块链](https://www.ibm.com/blogs/blockchain/2019/09/ibm-blockchain-platform-meets-red-hat-openshift/) 的能力，意味着 IBM 区块链的开发人员将能够在本地、公共云或混合云架构中部署安全软件。

区块链是一个分布式数据库，维护着一个不断增长的记录列表，可以使用哈希技术对其进行验证，并且 IBM 区块链平台包括用于构建、操作、治理和发展受保护的区块链网络的工具。

IBM 表示，其区块链 / OpenShift 组合的目标客户面对的公司客户是：希望保留区块链分类帐副本并在自己的基础设施上运行工作负载以实现安全性，降低风险或合规性；需要将数据存储在特定位置以满足数据驻留要求；需要在多个云或混合云架构中部署区块链组件。

自 7 月份完成对红帽的收购以来，IBM 一直在围绕红帽基于 Kubernetes 的 OpenShift 容器平台构建云开发生态系统。最近，这位蓝色巨人将其[新 z15 大型机与 IBM 的红帽](https://www.networkworld.com/article/3438542/ibm-z15-mainframe-amps-up-cloud-security-features.html)技术融合在一起，称它将为红帽 OpenShift 容器平台提供 IBM z/OS 云代理。该产品将通过连接到 Kubernetes 容器为用户提供 z/OS 计算资源的直接自助访问。

IBM 表示，打算在 IBM z 系列和 LinuxONE 产品上向 Linux 提供 IBM [Cloud Pak 产品](https://www.networkworld.com/article/3429596/ibm-fuses-its-software-with-red-hats-to-launch-hybrid-cloud-juggernaut.html)。Cloud Paks 是由 OpenShift 与 100 多种其他 IBM 软件产品组成的捆绑包。LinuxONE 是 IBM 专为支持 Linux 环境而设计的非常成功的大型机系统。

IBM 表示，愿景是使支持 OpenShift 的 IBM 软件成为客户用来转变其组织的基础构建组件。

IBM 表示：“我们的大多数客户都需要支持混合云工作负载以及可在任何地方运行这些工作负载的灵活性的解决方案，而用于红帽的 z/OS 云代理将成为我们在平台上启用云原生的关键。”

在相关新闻中，IBM 宣布支持开源 Apache CouchDB，这是 [Apache CouchDB](https://www.ibm.com/cloud/learn/couchdb) 的 Kubernetes Operator，并且该 Operator 已通过认证可与红帽 OpenShift 一起使用。Operator 可以自动部署、管理和维护 Apache CouchDB 部署。Apache CouchDB 是非关系型开源 NoSQL 数据库。

在最近的 [Forrester Wave 报告](https://reprints.forrester.com/#/assets/2/363/RES136481/reports)中，研究人员说：“企业喜欢 NoSQL 这样的能力，可以使用低成本服务器和可以存储、处理和访问任何类型的业务数据的灵活的无模式模型进行横向扩展。NoSQL 平台为企业基础设施专业人士提供了对数据存储和处理的更好控制，并提供了可加速应用程序部署的配置。当许多组织使用 NoSQL 来补充其关系数据库时，一些组织已开始替换它们以支持更好的性能、扩展规模并降低其数据库成本。”

当前，IBM 云使用 Cloudant Db 服务作为其针对新的云原生应用程序的标准数据库。IBM 表示，对 CouchDB 的强大支持为用户提供了替代方案和后备选项。IBM 表示，能够将它们全部绑定到红帽 OpenShift Kubernetes 部署中，可以使客户在部署应用程序并在多个云环境中移动数据时使用数据库本地复制功能来维持对数据的低延迟访问。

“我们的客户正在转向基于容器化和[微服务](https://www.networkworld.com/article/3137250/what-you-need-to-know-about-microservices.html)的架构，以提高速度、敏捷性和运营能力。在云原生应用程序开发中，应用程序需要具有支持可伸缩性、可移植性和弹性的数据层。”IBM 院士兼云数据库副总裁 Adam Kocoloski 写道，“我们相信数据可移植性和 CouchDB 可以大大改善多云架构的功能，使客户能够构建真正可在私有云、公共云和边缘位置之间移植的解决方案。”

---

via: <https://www.networkworld.com/article/3441362/ibm-brings-blockchain-to-red-hat-openshift-adds-apache-couchdb-for-hybrid-cloud-customers.html>

作者：[Michael Cooney](https://www.networkworld.com/author/Michael-Cooney/) 选题：[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/) 荣誉推出


用 Python 入门数据科学

>
> 使用 Python 开展数据科学为你提供了无限的潜力，使你能够以有意义和启发性的方式解析、解释和组织数据。
>
>
>

![](/data/attachment/album/201909/30/001853sfkm07j7wfp94dzp.jpg)

数据科学是计算领域一个令人兴奋的新领域，它围绕分析、可视化和关联以解释我们的计算机收集的有关世界的无限信息而建立。当然，称其为“新”领域有点不诚实，因为该学科是统计学、数据分析和普通而古老的科学观察派生而来的。

但是数据科学是这些学科的形式化分支，拥有自己的流程和工具，并且可以广泛应用于以前从未产生过大量不可管理数据的学科（例如视觉效果）。数据科学是一个新的机会，可以重新审视海洋学、气象学、地理学、制图学、生物学、医学和健康以及娱乐行业的数据，并更好地了解其中的模式、影响和因果关系。

像其他看似包罗万象的大型领域一样，知道从哪里开始探索数据科学可能会令人生畏。有很多资源可以帮助数据科学家使用自己喜欢的编程语言来实现其目标，其中包括最流行的编程语言之一：Python。使用 [Pandas](https://pandas.pydata.org/)、[Matplotlib](https://matplotlib.org/) 和 [Seaborn](https://seaborn.pydata.org/index.html) 这些库，你可以学习数据科学的基本工具集。

如果你对 Python 的基本用法不是很熟悉，请在继续之前先阅读我的 [Python 介绍](https://opensource.com/article/17/10/python-101)。

### 创建 Python 虚拟环境

程序员有时会忘记在开发计算机上安装了哪些库，这可能导致他们提供了在自己计算机上可以运行，但由于缺少库而无法在所有其它电脑上运行的代码。Python 有一个系统旨在避免这种令人不快的意外：虚拟环境。虚拟环境会故意忽略你已安装的所有 Python 库，从而有效地迫使你一开始使用通常的 Python 进行开发。

为了用 `venv` 激活虚拟环境, 为你的环境取个名字 (我会用 `example`) 并且用下面的指令创建它:

```
$ python3 -m venv example
```

<ruby> 导入 <rt>  source </rt></ruby>该环境的 `bin` 目录里的 `activate` 文件以激活它：

```
$ source ./example/bin/activate
(example) $
```

你现在“位于”你的虚拟环境中。这是一个干净的状态，你可以在其中构建针对该问题的自定义解决方案，但是额外增加了需要有意识地安装依赖库的负担。

### 安装 Pandas 和 NumPy

你必须在新环境中首先安装的库是 Pandas 和 NumPy。这些库在数据科学中很常见，因此你肯定要时不时安装它们。它们也不是你在数据科学中唯一需要的库，但是它们是一个好的开始。

Pandas 是使用 BSD 许可证的开源库，可轻松处理数据结构以进行分析。它依赖于 NumPy，这是一个提供多维数组、线性代数和傅立叶变换等等的科学库。使用 `pip3` 安装两者：

```
(example) $ pip3 install pandas
```

安装 Pandas 还会安装 NumPy，因此你无需同时指定两者。一旦将它们安装到虚拟环境中，安装包就会被缓存，这样，当你再次安装它们时，就不必从互联网上下载它们。

这些是你现在仅需的库。接下来，你需要一些样本数据。

### 生成样本数据集

数据科学都是关于数据的，幸运的是，科学、计算和政府组织可以提供许多免费和开放的数据集。虽然这些数据集是用于教育的重要资源，但它们具有比这个简单示例所需的数据更多的数据。你可以使用 Python 快速创建示例和可管理的数据集：

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

import random

def rgb():
    NUMBER=random.randint(0,255)/255
    return NUMBER

FILE = open('sample.csv','w')
FILE.write('"red","green","blue"')
for COUNT in range(10):
    FILE.write('\n{:0.2f},{:0.2f},{:0.2f}'.format(rgb(),rgb(),rgb()))
```

这将生成一个名为 `sample.csv` 的文件，该文件由随机生成的浮点数组成，这些浮点数在本示例中表示 RGB 值（在视觉效果中通常是数百个跟踪值）。你可以将 CSV 文件用作 Pandas 的数据源。

### 使用 Pandas 提取数据

Pandas 的基本功能之一是可以提取数据和处理数据，而无需程序员编写仅用于解析输入的新函数。如果你习惯于自动执行此操作的应用程序，那么这似乎不是很特别，但请想象一下在 [LibreOffice](http://libreoffice.org) 中打开 CSV 并且必须编写公式以在每个逗号处拆分值。Pandas 可以让你免受此类低级操作的影响。以下是一些简单的代码，可用于提取和打印以逗号分隔的值的文件：

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

from pandas import read_csv, DataFrame
import pandas as pd

FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
print(DATAFRAME)
```

一开始的几行导入 Pandas 库的组件。Pandas 库功能丰富，因此在寻找除本文中基本功能以外的功能时，你会经常参考它的文档。

接下来，通过打开你创建的 `sample.csv` 文件创建变量 `FILE`。Pandas 模块 `read_csv`（在第二行中导入）使用该变量来创建<ruby> 数据帧 <rt>  dataframe </rt></ruby>。在 Pandas 中，数据帧是二维数组，通常可以认为是表格。数据放入数据帧中后，你可以按列和行进行操作，查询其范围，然后执行更多操作。目前，示例代码仅将该数据帧输出到终端。

运行代码。你的输出会和下面的输出有些许不同，因为这些数字都是随机生成的，但是格式都是一样的。

```
(example) $ python3 ./parse.py
    red  green  blue
0  0.31   0.96  0.47
1  0.95   0.17  0.64
2  0.00   0.23  0.59
3  0.22   0.16  0.42
4  0.53   0.52  0.18
5  0.76   0.80  0.28
6  0.68   0.69  0.46
7  0.75   0.52  0.27
8  0.53   0.76  0.96
9  0.01   0.81  0.79
```

假设你只需要数据集中的红色值（`red`），你可以通过声明数据帧的列名称并有选择地仅打印你感兴趣的列来做到这一点：

```
from pandas import read_csv, DataFrame
import pandas as pd

FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)

# define columns
DATAFRAME.columns = [ 'red','green','blue' ]

print(DATAFRAME['red'])
```

现在运行代码，你只会得到红色列：

```
(example) $ python3 ./parse.py
0    0.31
1    0.95
2    0.00
3    0.22
4    0.53
5    0.76
6    0.68
7    0.75
8    0.53
9    0.01
Name: red, dtype: float64
```

处理数据表是经常使用 Pandas 解析数据的好方法。从数据帧中选择数据的方法有很多，你尝试的次数越多就越习惯。

### 可视化你的数据

很多人偏爱可视化信息已不是什么秘密，这是图表和图形成为与高层管理人员开会的主要内容的原因，也是“信息图”在新闻界如此流行的原因。数据科学家的工作之一是帮助其他人理解大量数据样本，并且有一些库可以帮助你完成这项任务。将 Pandas 与可视化库结合使用可以对数据进行可视化解释。一个流行的可视化开源库是 [Seaborn](https://seaborn.pydata.org/)，它基于开源的 [Matplotlib](https://matplotlib.org/)。

#### 安装 Seaborn 和 Matplotlib

你的 Python 虚拟环境还没有 Seaborn 和 Matplotlib，所以用 `pip3` 安装它们。安装 Seaborn 的时候，也会安装 Matplotlib 和很多其它的库。

```
(example) $ pip3 install seaborn
```

为了使 Matplotlib 显示图形，你还必须安装 [PyGObject](https://pygobject.readthedocs.io/en/latest/getting_started.html) 和 [Pycairo](https://pycairo.readthedocs.io/en/latest/)。这涉及到编译代码，只要你安装了必需的头文件和库，`pip3` 便可以为你执行此操作。你的 Python 虚拟环境不了解这些依赖库，因此你可以在环境内部或外部执行安装命令。

在 Fedora 和 CentOS 上：

```
(example) $ sudo dnf install -y gcc zlib-devel bzip2 bzip2-devel readline-devel \
sqlite sqlite-devel openssl-devel tk-devel git python3-cairo-devel \
cairo-gobject-devel gobject-introspection-devel
```

在 Ubuntu 和 Debian 上：

```
(example) $ sudo apt install -y libgirepository1.0-dev build-essential \
libbz2-dev libreadline-dev libssl-dev zlib1g-dev libsqlite3-dev wget \
curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libcairo2-dev
```

一旦它们安装好了，你可以安装 Matplotlib 需要的 GUI 组件。

```
(example) $ pip3 install PyGObject pycairo
```

### 用 Seaborn 和 Matplotlib 显示图形

在你最喜欢的文本编辑器新建一个叫 `vizualize.py` 的文件。要创建数据的线形图可视化，首先，你必须导入必要的 Python 模块 —— 先前代码示例中使用的 Pandas 模块：

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

from pandas import read_csv, DataFrame
import pandas as pd
```

接下来，导入 Seaborn、Matplotlib 和 Matplotlib 的几个组件，以便你可以配置生成的图形：

```
import seaborn as sns
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import rcParams
```

Matplotlib 可以将其输出导出为多种格式，包括 PDF、SVG 和桌面上的 GUI 窗口。对于此示例，将输出发送到桌面很有意义，因此必须将 Matplotlib 后端设置为 `GTK3Agg`。如果你不使用 Linux，则可能需要使用 `TkAgg` 后端。

设置完 GUI 窗口以后，设置窗口大小和 Seaborn 预设样式：

```
matplotlib.use('GTK3Agg')
rcParams['figure.figsize'] = 11,8
sns.set_style('darkgrid')
```

现在，你的显示已配置完毕，代码已经很熟悉了。使用 Pandas 导入 `sample.csv` 文件，并定义数据帧的列：

```
FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
DATAFRAME.columns = [ 'red','green','blue' ]
```

有了适当格式的数据，你可以将其绘制在图形中。将每一列用作绘图的输入，然后使用 `plt.show()` 在 GUI 窗口中绘制图形。`plt.legend()` 参数将列标题与图形上的每一行关联（`loc` 参数将图例放置在图表之外而不是在图表上方）：

```
for i in DATAFRAME.columns:
    DATAFRAME[i].plot()

plt.legend(bbox_to_anchor=(1, 1), loc=2, borderaxespad=1)
plt.show()
```

运行代码以获得结果。

![第一个数据可视化](/data/attachment/album/201909/30/001927sbk9jbqi11s2y2kq.png "First data visualization")

你的图形可以准确显示 CSV 文件中包含的所有信息：值在 Y 轴上，索引号在 X 轴上，并且图形中的线也被标识出来了，以便你知道它们代表什么。然而，由于此代码正在跟踪颜色值（至少是假装），所以线条的颜色不仅不直观，而且违反直觉。如果你永远不需要分析颜色数据，则可能永远不会遇到此问题，但是你一定会遇到类似的问题。在可视化数据时，你必须考虑呈现数据的最佳方法，以防止观看者从你呈现的内容中推断出虚假信息。

为了解决此问题（并展示一些可用的自定义设置），以下代码为每条绘制的线分配了特定的颜色：

```
import matplotlib
from pandas import read_csv, DataFrame
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import rcParams

matplotlib.use('GTK3Agg')
rcParams['figure.figsize'] = 11,8
sns.set_style('whitegrid')

FILE = open('sample.csv','r')
DATAFRAME = pd.read_csv(FILE)
DATAFRAME.columns = [ 'red','green','blue' ]

plt.plot(DATAFRAME['red'],'r-')
plt.plot(DATAFRAME['green'],'g-')
plt.plot(DATAFRAME['blue'],'b-')
plt.plot(DATAFRAME['red'],'ro')
plt.plot(DATAFRAME['green'],'go')
plt.plot(DATAFRAME['blue'],'bo')

plt.show()
```

这使用特殊的 Matplotlib 表示法为每列创建两个图。每列的初始图分配有一种颜色（红色为 `r`，绿色为 `g`，蓝色为 `b`）。这些是内置的 Matplotlib 设置。 `-` 表示实线（双破折号，例如 `r--`，将创建虚线）。为每个具有相同颜色的列创建第二个图，但是使用 `o` 表示点或节点。为了演示内置的 Seaborn 主题，请将 `sns.set_style` 的值更改为 `whitegrid`。

![改进的数据可视化](/data/attachment/album/201909/30/001932q8nq81e4pq8nefqg.png "Improved data visualization")

### 停用你的虚拟环境

探索完 Pandas 和绘图后，可以使用 `deactivate` 命令停用 Python 虚拟环境：

```
(example) $ deactivate
$
```

当你想重新使用它时，只需像在本文开始时一样重新激活它即可。重新激活虚拟环境时，你必须重新安装模块，但是它们是从缓存安装的，而不是从互联网下载的，因此你不必联网。

### 无尽的可能性

Pandas、Matplotlib、Seaborn 和数据科学的真正力量是无穷的潜力，使你能够以有意义和启发性的方式解析、解释和组织数据。下一步是使用你在本文中学到的新工具探索简单的数据集。Matplotlib 和 Seaborn 不仅有折线图，还有很多其他功能，因此，请尝试创建条形图或饼图或完全不一样的东西。

一旦你了解了你的工具集并对如何关联数据有了一些想法，则可能性是无限的。数据科学是寻找隐藏在数据中的故事的新方法。让开源成为你的媒介。

---

via: <https://opensource.com/article/19/9/get-started-data-science-python>

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

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


Linux 中国徽标征集活动进展汇报

不会用Github怎么办QAQ

研究下，这里只涉及到了最简单的部分内容。先fork，自己修改，在pull即可。

会了，谢谢!

![](/data/attachment/album/201909/30/072922u5vvh1pu7cl1t61i.jpg)

自从 10 天前，我们发起了[徽标征集活动](/article-11363-1.html)，得到了大家的踊跃支持。虽然有相当多朋友表示原来的徽标就挺好，是的修改下就可以，但是也有很多朋友给我们提交了新的徽标设计及其设计理念。以下，我将这些设计展示给大家，大家可以发表意见。当然，也欢迎更多朋友来提交你们的徽标设计。

### 当前已经收到的徽标设计

以下是我们当前收到的设计展示及设计理念，我们共收到了 9 位贡献者提交的 12 份设计。以下按名字排序列出：

#### 1466587594

![](/data/attachment/album/201909/30/073015i1thhws5y1151181.png)

地址：<https://github.com/LCTT/logo/tree/master/1466587594>

设计者：1466587594

设计理念：

* 徽标呈箭头状,代表回车键
* 蓝绿配色,完全照搬样例,外加了一个两者的混合色
* 主体是稍带圆角又显锐利的字母 L 与 C 的结合,要说带有一些含义的话不免有些强行了

#### alim0x

![](/data/attachment/album/201909/30/073317b3kzjz2zjukumfm7.png)

地址：<https://github.com/LCTT/logo/tree/master/alim0x>

设计者：alim0x

设计理念：

* 扁平化图标，符合当下趋势
* 主体风格延续原有徽标，减轻徽标更换对受众印象认知的影响
* 中间为原徽标风格的 “L”，小圆点增加徽标活泼感
* 外圈为 “C” 抽象而来，代表 “CN”、“Community”
* 配色上绿色作为主题色，同时中环使用浅绿色作为过渡，使徽标更清新且饱满

#### flag-1

![](/data/attachment/album/201909/30/073646ejm1gvbzywhmg69g.png)

地址：<https://github.com/LCTT/logo/tree/master/flag-1>

设计者：ullpdq

设计理念：

* 一直觉得国旗设计得很美

#### flag-2

![](/data/attachment/album/201909/30/073912qppjcwjfegvwgvm7.png)

地址：<https://github.com/LCTT/logo/tree/master/flag-2>

设计者：ullpdq

设计理念：

* 国旗方案的变种

### logo0281

![](/data/attachment/album/201909/30/074052i7el5cmcvmz577e7.png)

地址：<https://github.com/LCTT/logo/tree/master/logo0281>

设计者：liujiacode

设计理念：

* 该徽标保留了旧徽标的配色 (绿, 白, 灰) 和一些元素 (如中间的 "L"). 在旧徽标的基础上, 本徽标**更强调社区与社区成员之间的联系**. Linux 社区如同一张复杂而有序的网络, 紧紧地将成员联系在一起.
* 徽标背景由深灰色方块和浅灰色中国版图构成, 表示 Linux.CN 主要是面向全国的 Linux 技术社区.
* 图中四个角落分别有朝向不同方向的 "C" ("C" 代表 "Community"), 表示参与到社区中的开源爱好者们专业技能不同, 目标也不同.
* 图正中有一个 "L" ("L" 代表 "Linux", 是旧徽标中的关键元素之一), 代表 Linux 社区.
* 四个 "C" 的开口方向都朝向中间的 "L" , 表示开源爱好者们相互交流与合作, 共同构建起整个社区. "C" 与 "L" 通过一张复杂而又有序的网络连接在一起, 表示开源爱好者们之间并不是相互孤立的, 而是通过社区网络稳定而有序地结合在一起.
* "C" 也可以代表 "Component", 表示 Linux 系统是由多个组件构成的. 这些组件之间并不是相互孤立的, 这些组件的协同作用使得 Linux 能够正常运行.
* 图案下方写有社区名称, 即 "Linux.CN".

#### logo0964

![](/data/attachment/album/201909/30/074312bo74qh964zq7tk7q.png)

地址：<https://github.com/LCTT/logo/tree/master/logo0964>

设计者：liujiacode

设计理念：

* 徽标背景由深灰色方块和浅灰色中国版图构成, 表示 Linux.CN 主要是面向全国的 Linux 技术社区.
* 图中绿色方框代表 Linux 终端, 终端内有命令提示符 "LC:~$\_". 其中 "LC" 是 "Linux.CN" 的缩写.
* 绿色方框叠加在一起, 表示使用 Linux 的开源爱好者们相互交流与合作, 共同构建起整个社区.
* 图案下方写有社区名称, 即 "Linux.CN".

#### long

![](/data/attachment/album/201909/30/074439chsi3jppp2caha2h.png)

地址：<https://github.com/LCTT/logo/tree/master/long>

设计者：lujun9972

设计理念：

* 巨龙,毛笔,石砚,玉佩,筷子.尽显中国气息.

备注：此设计稿规格不符合要求（500x500 的正方形）。

#### RedInLinux

![](/data/attachment/album/201909/30/074641sgp3vnqoqmptjj0j.png)

地址：<https://github.com/LCTT/logo/tree/master/RedInLinux>

设计者：Marksteinsong

设计理念：

* 为表示对“Linux中国的支持”，特地来凑个数。

备注：此设计稿规格不符合要求（500x500 的正方形）。

#### tinnx

![](/data/attachment/album/201909/30/074836xrpst9iqkkqpfk4i.png)

地址：<https://github.com/LCTT/logo/tree/master/tinnx>

设计者：AntonVanke

设计理念：

* 主体是LC
* 下面一行Linux.cn

#### WSJ

![](/data/attachment/album/201909/30/074958ruuuu0a2q9uzv2e8.png)

地址：<https://github.com/LCTT/logo/tree/master/WSJ>

设计者：wangshijun-shexian

设计理念：

* 尽量保留原logo元素，以维持用户记忆，减少突兀感；
* 保留的元素有①灰黑色背景色调②大写字母L③网址④整体造型；
* 改变的元素有①底部绿色改成更新的苹果绿②绿色范围减小，去掉网址，可与圆形内接等边三角形贴合，增加图形稳定性，给放大主logo元素让出空间③大写字母L放大，去掉隔断，填充网址④L东侧是大写字母C，颜色与底部颜色相同，可以凸显原logo架构，主体形状与L相似，东北部加等腰直角三角形，与L共同组成正方形，该正方形可联想成向东怒吼的雄狮侧面部，寓意Linux中国在中国大地孔武有力，大有作为；
* 新logo可方可圆，黑白阴阳稿也一样简洁醒目，可用于各类应用场合。

#### wxy

![](/data/attachment/album/201909/30/075240hcx5aqgg2cl533n0.png)

地址：<https://github.com/LCTT/logo/tree/master/wxy>

设计者：wxy

设计理念：

* 本徽标的灵感来自于俄罗斯方块游戏。
* 配色的蓝绿：绿色一直是我们主题色，蓝色比较搭配，当然要是给它赋予专业、自由的寓意也无不可。
* 主体是一个 4x4 的离散格子，其中由两个字母组成，分别“L”和“c”，这是我们的简写。

#### yue-1

![](/data/attachment/album/201909/30/075409khee2xxt33iiqji1.png)

地址：<https://github.com/LCTT/logo/tree/master/yue-1>

设计者：ullpdq

设计理念：

* 这个方案是钺，配色什么的就随意了，回头可以再调整

### 徽标征集活动

活动目标：为 Linux 中国设计制作一个新的徽标

活动时间：2019 年 9 月 20 日 — 2019 年 10 月 31 日

时间节点：

* 2019 年 9 月 20 日 — 2019 年 10 月 20 日：徽标征集及点评
* 2019 年 9 月 21 日 — 2019 年 10 月 30 日：官方评选
* 2019 年 10 月 31 日 评选结果发布

参与方式：本活动完全在 GitHub 上进行，因此投稿、点评、建议都采用 GitHub 相应机制来完成。

仓库地址： <https://github.com/LCTT/logo>

* 投稿：通过 GitHub 的 PR 提交你的徽标设计展示图和设计说明。格式要求：
	+ 每个投稿一个自行命名的文件夹，不当命名我们会予以修改。文件夹内包括：
	+ 名为 logo.png 的 png 格式的徽标，尺寸为 500px X 500px，评选阶段无需投递原稿
	+ 一个名为 README.md 的说明文件，说明创意构思
* 点评：对提交徽标的 PR 发表评论
* 建议：通过 GitHub 的<ruby> 议题 <rt>  issue </rt></ruby>发起

最后，既然是征集评选活动，那就该有奖品：

* 一等奖（获选）一名，奖金 3000 元
* 二等奖两名，各奖 500 元
* 三等奖五名，各奖 100 元

此外，一等奖作品的作者需同样将该的完整版权授予 Linux 中国，但作品作者的相关信息会在 Linux 中国官方予以记录和致谢。


使用 Terminator 在一个窗口中运行多个终端

![](/data/attachment/album/201909/30/233732j9jjx3xxuujopiuu.jpg)

>
> Terminator 为在单窗口中运行多个 GNOME 终端提供了一个选择，让你可以灵活地调整工作空间来适应你的需求。
>
>
>

![](/data/attachment/album/201909/30/233819d9hn3n4l25dnng59.jpg)

如果你曾经希望可以排列多个终端并将它们组织在一个窗口中，那么我们可能会给你带来一个好消息。 Linux 的 Terminator 可以为你做到这一点。没有问题！

### 分割窗口

Terminator 最初打开像是一个单一窗口的终端窗口一样。但是，一旦在该窗口中单击鼠标，它将弹出一个选项，让你可以灵活地进行更改。你可以选择“水平分割”或“垂直分割”，将你当前所在的窗口分为两个较小的窗口。实际上，菜单旁会有小的分割结果图示（类似于 `=` and `||`），你可以根据需要重复拆分窗口。当然，你如果将整个窗口分为六个或九个以上，那么你可能会发现它们太小而无法有效使用。

使用 ASCII 艺术来说明分割窗口的过程，你可能会看到类似以下的样子：

```
+-------------------+     +-------------------+     +-------------------+
|                   |     |                   |     |                   |
|                   |     |                   |     |                   |
|                   | ==> |-------------------| ==> |-------------------|
|                   |     |                   |     |         |         |
|                   |     |                   |     |         |         |
+-------------------+     +-------------------+     +-------------------+
  原始终端                       水平分割                   垂直分割
```

另一种拆分窗口的方法是使用控制键组合，例如，使用 `Ctrl+Shift+e` 垂直分割窗口，使用 `Ctrl+Shift+o`（“o” 表示“打开”）水平分割窗口。

在 Terminator 分割完成后，你可以点击任意窗口使用，并根据工作需求在窗口间移动。

### 最大化窗口

如果你想暂时忽略除了一个窗口外的其他窗口而只关注一个，你可以单击该窗口，然后从菜单中选择“最大化”选项。接着该窗口会撑满所有空间。再次单击并选择“还原所有终端”可以返回到多窗口显示。使用 `Ctrl+Shift+x` 将在正常和最大化设置之间切换。

窗口标签上的窗口大小指示（例如 80x15）显示了每行的字符数以及每个窗口的行数。

### 关闭窗口

要关闭任何窗口，请打开 Terminator 菜单，然后选择“关闭”。其他窗口将自行调整占用空间，直到你关闭最后一个窗口。

### 保存你的自定义设置

将窗口分为多个部分后，将自定义的 Terminator 设置设置为默认非常容易。从弹出菜单中选择“首选项”，然后从打开的窗口顶部的选项卡中选择“布局”。接着你应该看到列出了“新布局”。只需单击底部的“保存”，然后单击右下角的“关闭”。Terminator 会将你的设置保存在 `~/.config/terminator/config` 中，然后每次使用到时都会使用该文件。

你也可以通过使用鼠标拉伸来扩大整个窗口。再说一次，如果要保留更改，请从菜单中选择“首选项”，“布局”，接着选择“保存”和“关闭”。

### 在保存的配置之间进行选择

如果愿意，你可以通过维护多个配置文件来设置多种 Terminator 窗口布局，重命名每个配置文件（如 `config-1`、`config-2`），接着在你想使用它时将它移动到 `~/.config/terminator/config`。这有一个类似执行此任务的脚本。它让你在 3 个预配置的窗口布局之间进行选择。

```
#!/bin/bash

PS3='Terminator options: '
options=("Split 1" "Split 2" "Split 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Split 1")
            config=config-1
            break
            ;;
        "Split 2")
            config=config-2
            break
            ;;
        "Split 3")
            config=config-3
            break
            ;;
        *)
            exit
            ;;
    esac
done

cd ~/.config/terminator
cp config config-
cp $config config
cd
terminator &
```

如果有用的话，你可以给选项一个比 `config-1` 更有意义的名称。

### 总结

Terminator 是设置多窗口处理相关任务的不错选择。如果你从未使用过它，那么可能需要先使用 `sudo apt install terminator` 或 `sudo yum install -y terminator` 之类的命令进行安装。

希望你喜欢使用 Terminator。还有，如另一个同名角色所说，“我会回来的！”

---

via: <https://www.networkworld.com/article/3436784/how-to-use-terminator-on-linux-to-run-multiple-terminals-in-one-window.html>

作者：[Sandra Henry-Stocker](https://www.networkworld.com/author/Sandra-Henry_Stocker/) 选题：[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/) 荣誉推出


2019 年最好的 Linux 发行版

稿费好拿系列。

作者很厉害，知道我们有些人想说deepin linux,哈哈

>
> 哪个是最好的 Linux 发行版呢？这个问题是没有明确的答案的。这就是为什么我们按各种分类汇编了这个最佳 Linux 列表的原因。
>
>
>

![](/data/attachment/album/201910/01/140807rlo3cz2l99tdoc6d.jpg)

有许多 Linux 发行版，我甚至想不出一个确切的数量，因为你会发现很多不同的 Linux 发行版。

其中有些只是另外一个的复制品，而有些往往是独一无二的。这虽然有点混乱——但这也是 Linux 的优点。

不用担心，尽管有成千上万的发行版，在这篇文章中，我已经列出了目前最好的 Linux 发行版。当然，这个列表是主观的。但是，在这里，我们试图对发行版进行分类——每个发行版本都有自己的特点的。

* 面向初学者的 Linux 用户的最佳发行版
* 最佳 Linux 服务器发行版
* 可以在旧计算机上运行的最佳 Linux 发行版
* 面向高级 Linux 用户的最佳发行版
* 最佳常青树 Linux 发行版

**注：** 该列表没有特定的排名顺序。

### 面向初学者的最佳 Linux 发行版

在这个分类中，我们的目标是列出开箱即用的易用发行版。你不需要深度学习，你可以在安装后马上开始使用，不需要知道任何命令或技巧。

#### Ubuntu

![](/data/attachment/album/201910/01/140821dfhfh2sesc9abfma.jpg)

Ubuntu 无疑是最流行的 Linux 发行版之一。你甚至可以发现它已经预装在很多笔记本电脑上了。

用户界面很容易适应。如果你愿意，你可以根据自己的要求轻松定制它的外观。无论哪种情况，你都可以选择安装一个主题。你可以从了解更多关于[如何在 Ubuntu 安装主题的](https://itsfoss.com/install-themes-ubuntu/)的信息来起步。

除了它本身提供的功能外，你会发现一个巨大的 Ubuntu 用户在线社区。因此，如果你有问题——可以去任何论坛（或版块）寻求帮助。如果你想直接寻找解决方案，你应该看看我们对 [Ubuntu](https://itsfoss.com/tag/ubuntu/) 的报道（我们有很多关于 Ubuntu 的教程和建议）。

* [Ubuntu](https://ubuntu.com/download/desktop)

#### Linux Mint

![](/data/attachment/album/201910/01/140821t96h5bzhh5xvqvqv.jpg)

Linux Mint Cinnamon 是另一个受初学者欢迎的 Linux 发行版。默认的 Cinnamon 桌面类似于 Windows XP，这就是为什么当 Windows XP 停止维护时许多用户选择它的原因。

Linux Mint 基于 Ubuntu，因此它具有适用于 Ubuntu 的所有应用程序。简单易用是它成为 Linux 新用户首选的原因。

* [Linux Mint](https://www.linuxmint.com/)

#### elementary OS

![](/data/attachment/album/201910/01/140826viyz1ut1u116urrr.jpg)

elementary OS 是我用过的最漂亮的 Linux 发行版之一。用户界面类似于苹果操作系统——所以如果你已经使用了苹果系统，则很容易适应。

该发行版基于 Ubuntu，致力于提供一个用户友好的 Linux 环境，该环境在考虑性能的同时尽可能美观。如果你选择安装 elementary OS，这份[在安装 elementary OS 后要做的 11 件事的清单](https://itsfoss.com/things-to-do-after-installing-elementary-os-5-juno/)会派上用场。

* [elementary OS](https://elementary.io/)

#### MX Linux

![](/data/attachment/album/201910/01/140827firvujjzfpwjwpjb.jpg)

大约一年前，MX Linux 成为众人瞩目的焦点。现在（在发表这篇文章的时候），它是 [DistroWatch.com](https://distrowatch.com/) 上最受欢迎的 Linux 发行版。如果你还没有使用过它，那么当你开始使用它时，你会感到惊讶。

与 Ubuntu 不同，MX Linux 是一个基于 Debian 的日益流行的发行版，采用 Xfce 作为其桌面环境。除了无与伦比的稳定性之外，它还配备了许多图形用户界面工具，这使得任何习惯了 Windows/Mac 的用户易于使用它。

此外，软件包管理器还专门针对一键安装进行了量身定制。你甚至可以搜索 [Flatpak](https://flatpak.org/) 软件包并立即安装它（默认情况下，Flathub 在软件包管理器中是可用的来源之一）。

* [MX Linux](https://mxlinux.org/)

#### Zorin OS

![](/data/attachment/album/201910/01/140827a8qpk88q5335pee8.png)

Zorin OS 是又一个基于 Ubuntu 的发行版，它又是桌面上最漂亮、最直观的操作系统之一。尤其是在[Zorin OS 15 发布](https://itsfoss.com/zorin-os-15-release/)之后——我绝对会向没有任何 Linux 经验的用户推荐它。它也引入了许多基于图形用户界面的应用程序。

你也可以将其安装在旧电脑上，但是，请确保选择“Lite”版本。此外，你还有“Core”、“Education”和 “Ultimate”版本可以选择。你可以选择免费安装 Core 版，但是如果你想支持开发人员并帮助改进 Zorin，请考虑获得 Ultimate 版。

Zorin OS 是由两名爱尔兰的青少年创建的。你可以[在这里阅读他们的故事](https://itsfoss.com/zorin-os-interview/)。

* [Zorin OS](https://zorinos.com/)

#### Pop!\_OS

![](/data/attachment/album/201910/01/140829wftaafiqjlm224ag.jpg)

Sytem76 的 Pop!\_OS 是开发人员或计算机科学专业人员的理想选择。当然，不仅限于编码人员，如果你刚开始使用 Linux，这也是一个很好的选择。它基于 Ubuntu，但是其 UI 感觉更加直观和流畅。除了 UI 外，它还强制执行全盘加密。

你可以通过文章下面的评论看到，我们的许多读者似乎都喜欢（并坚持使用）它。如果你对此感到好奇，也应该查看一下我们关于 Phillip Prado 的 [Pop!\_OS 的动手实践](https://itsfoss.com/pop-os-linux-review/)的文章。

（LCTT 译注：这段推荐是原文后来补充的，因为原文下面很多人在评论推荐。）

* [Pop!\_OS](https://system76.com/pop)

#### 其他选择

[深度操作系统](https://www.deepin.org/en/) 和其他的 Ubuntu 变种（如 Kubuntu、Xubuntu）也是初学者的首选。如果你想寻求更多的选择，你可以看看。（LCTT 译注：我知道你们肯定对将深度操作系统列入其它不满意——这个锅归原作者。）

如果你想要挑战自己，你可以试试 Ubuntu 之外的 Fedora —— 但是一定要看看我们关于 [Ubuntu 和 Fedora 对比](https://itsfoss.com/ubuntu-vs-fedora/)的文章，从桌面的角度做出更好的选择。

### 最好的服务器发行版

对于服务器来说，选择 Linux 发行版取决于稳定性、性能和企业级支持。如果你只是尝试，则可以尝试任何你想要的发行版。

但是，如果你要为 Web 服务器或任何重要的组件安装它，你应该看看我们的一些建议。

#### Ubuntu 服务器

根据你的需要，Ubuntu 为你的服务器提供了不同的选项。如果你正在寻找运行在 AWS、Azure、谷歌云平台等平台上的优化解决方案，[Ubuntu Cloud](https://ubuntu.com/download/cloud) 是一个很好的选择。

无论是哪种情况，你都可以选择 Ubuntu 服务器包，并将其安装在你的服务器上。然而，Ubuntu 在云上部署时也是最受欢迎的 Linux 发行版（根据数字判断——[来源1](https://w3techs.com/technologies/details/os-linux/all/all)、[来源2](https://thecloudmarket.com/stats)）。

请注意，除非你有特殊要求，我们建议你选择 LTS 版。

* [Ubuntu Server](https://ubuntu.com/download/server)

#### 红帽企业版 Linux（RHEL）

红帽企业版 Linux（RHEL）是面向企业和组织的顶级 Linux 平台。如果我们按数字来看，红帽可能不是服务器领域最受欢迎的。但是，有相当一部分企业用户依赖于 RHEL (比如联想)。

从技术上讲，Fedora 和红帽企业版是相关联的。无论红帽要支持什么——在出现在 RHEL 之前，都要在 Fedora 上进行测试。我不是定制需求的服务器发行版专家，所以你一定要查看他们的[官方文档](https://developers.redhat.com/products/rhel/docs-and-apis)以了解它是否适合你。

* [RHEL](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux)

#### SUSE Linux 企业服务器（SLES）

![](/data/attachment/album/201910/01/140830hz8txlzh1tmx2h6o.jpg)

别担心，不要把这和 OpenSUSE 混淆。一切都以一个共同的品牌 “SUSE” 命名 —— 但是 OpenSUSE 是一个开源发行版，目标是社区，并且由社区维护。

SUSE Linux 企业服务器（SLES）是基于云的服务器最受欢迎的解决方案之一。为了获得管理开源解决方案的优先支持和帮助，你必须选择订阅。

* [SLES](https://www.suse.com/products/server/)

#### CentOS

![](/data/attachment/album/201910/01/140832v0fitxwxl6wwwx0f.png)

正如我提到的，对于 RHEL 你需要订阅。而 CentOS 更像是 RHEL 的社区版，因为它是从 RHEL 的源代码中派生出来的。而且，它是开源的，也是免费的。尽管与过去几年相比，使用 CentOS 的托管提供商数量明显减少，但这仍然是一个很好的选择。

CentOS 可能没有加载最新的软件包，但它被认为是最稳定的发行版之一，你可以在各种云平台上找到 CentOS 镜像。如果没有，你可以选择 CentOS 提供的自托管镜像。

* [CentOS](https://www.centos.org/)

#### 其他选择

你也可以尝试 [Fedora Server](https://getfedora.org/en/server/)或[Debian](https://www.debian.org/distrib/)作为上述发行版的替代品。

### 旧电脑的最佳 Linux 发行版

如果你有一台旧电脑，或者你真的不需要升级你的系统，你仍然可以尝试一些最好的 Linux 发行版。

我们已经详细讨论了一些[最好的轻量级 Linux 发行版](https://itsfoss.com/lightweight-linux-beginners/)。在这里，我们将只提到那些真正突出的东西（以及一些新的补充）。

#### Puppy Linux

![](/data/attachment/album/201910/01/140834mu66hl2ah6is3eh6.jpg)

Puppy Linux 实际上是最小的发行版本之一。刚开始使用 Linux 时，我的朋友建议我尝试一下 Puppy Linux，因为它可以轻松地在较旧的硬件配置上运行。

如果你想在你的旧电脑上享受一次爽快的体验，那就值得去看看。多年来，随着一些新的有用特性的增加，用户体验得到了改善。

* [Puppy Linux](http://puppylinux.com/)

#### Solus Budgie

![](/data/attachment/album/201910/01/140837pb38q8zeo8bbomu5.jpg)

在最近的一个主要版本——[Solus 4 Fortitude](https://itsfoss.com/solus-4-release/) 之后，它是一个令人印象深刻的轻量级桌面操作系统。你可以选择像 GNOME 或 MATE 这样的桌面环境。然而，Solus Budgie 恰好是我的最爱之一，它是一款适合初学者的功能齐全的 Linux发行版，同时对系统资源要求很少。

* [Solus](https://getsol.us/home/)

#### Bodhi

![](/data/attachment/album/201910/01/140840s9ohzo1srgc4zvik.png)

Bodhi Linux 构建于 Ubuntu 之上。然而，与Ubuntu不同，它在较旧的配置上运行良好。

这个发行版的主要亮点是它的 [Moksha 桌面](http://www.bodhilinux.com/moksha-desktop/)（这是 Enlightenment 17 桌面的延续）。用户体验直观且反应极快。即使我个人不用它，你也应该在你的旧系统上试一试。

* [Bodhi Linux](http://www.bodhilinux.com/)

#### antiX

![](/data/attachment/album/201910/01/140841vp6sannk0qga403q.jpg)

antiX 部分担起了 MX Linux 的责任，它是一个轻量级的 Linux 发行版，为新的或旧的计算机量身定制。其用户界面并不令人印象深刻——但它可以像预期的那样工作。

它基于 Debian，可以作为一个现场版 CD 发行版使用，而不需要安装它。antiX 还提供现场版引导加载程序。与其他发行版相比，你可以保存设置，这样就不会在每次重新启动时丢失设置。不仅如此，你还可以通过其“持久保留”功能将更改保存到根目录中。

因此，如果你正在寻找一个可以在旧硬件上提供快速用户体验的现场版 USB 发行版，antiX 是一个不错的选择。

* [antiX](https://antixlinux.com/)

#### Sparky Linux

![](/data/attachment/album/201910/01/140842svk7u7v2307gkn79.jpg)

Sparky Linux 基于 Debian，它是理想的低端系统 Linux 发行版。伴随着超快的用户体验，Sparky Linux 为不同的用户提供了几个特殊版本（或变种）。

例如，它提供了针对一组用户的稳定版本（和变种）和滚动版本。Sparky Linux GameOver 版非常受游戏玩家欢迎，因为它包含了一堆预装的游戏。你可以查看我们的[最佳 Linux 游戏发行版](https://itsfoss.com/linux-gaming-distributions/) —— 如果你也想在你的系统上玩游戏。

#### 其他选择

你也可以尝试 [Linux Lite](https://www.linuxliteos.com/)、[Lubuntu](https://lubuntu.me/)、[Peppermint](https://peppermintos.com/) 等轻量级 Linux 发行版。

### 面向高级用户的最佳 Linux 发行版

一旦你习惯了各种软件包管理器和命令来帮助你解决任何问题，你就可以开始找寻只为高级用户量身定制的 Linux 发行版。

当然，如果你是专业人士，你会有一套具体的要求。然而，如果你已经作为普通用户使用了一段时间——以下发行版值得一试。

#### Arch Linux

![](/data/attachment/album/201910/01/140844k366n0gqob3488nq.jpg)

Arch Linux 本身是一个简单而强大的发行版，具有陡峭的学习曲线。不像其系统，你不会一次就把所有东西都预先安装好。你必须配置系统并根据需要添加软件包。

此外，在安装 Arch Linux 时，必须按照一组命令来进行（没有图形用户界面）。要了解更多信息，你可以按照我们关于[如何安装 Arch Linux](https://itsfoss.com/install-arch-linux/) 的指南进行操作。如果你要安装它，你还应该知道在[安装 Arch Linux 后需要做的一些基本事情](https://itsfoss.com/things-to-do-after-installing-arch-linux/)。这会帮助你快速入门。

除了多才多艺和简便性之外，值得一提的是 Arch Linux 背后的社区非常活跃。所以，如果你遇到问题，你不用担心。

* [Arch Linux](https://www.archlinux.org)

#### Gentoo

![](/data/attachment/album/201910/01/140845teav5shle1p11gsl.png)

如果你知道如何编译源代码，Gentoo Linux 是你必须尝试的版本。这也是一个轻量级的发行版，但是，你需要具备必要的技术知识才能使它发挥作用。

当然，[官方手册](https://wiki.gentoo.org/wiki/Handbook:Main_Page)提供了许多你需要知道的信息。但是，如果你不确定自己在做什么——你需要花很多时间去想如何充分利用它。

* [Gentoo Linux](https://www.gentoo.org)

#### Slackware

![](/data/attachment/album/201910/01/140846xdiktbb9c1ied0bd.jpg)

Slackware 是仍然重要的最古老的 Linux 发行版之一。如果你愿意编译或开发软件来为自己建立一个完美的环境 —— Slackware 是一个不错的选择。

如果你对一些最古老的 Linux 发行版感到好奇，我们有一篇关于[最早的 Linux 发行版](https://itsfoss.com/earliest-linux-distros/)可以去看看。

尽管使用它的用户/开发人员的数量已经显著减少，但对于高级用户来说，它仍然是一个极好的选择。此外，最近有个新闻是 [Slackware 有了一个 Patreon 捐赠页面](https://distrowatch.com/dwres.php?resource=showheadline&story=8743)，我们希望 Slackware 继续作为最好的 Linux 发行版之一存在。

* [Slackware](http://www.slackware.com/)

### 最佳多用途 Linux 发行版

有些 Linux 发行版既可以作为初学者友好的桌面又可以作为高级操作系统的服务器。因此，我们考虑为这样的发行版编辑一个单独的部分。

如果你不同意我们的观点（或者有建议要补充），请在评论中告诉我们。我们认为，这对于每个用户都可以派上用场：

#### Fedora

![](/data/attachment/album/201910/01/140849h700m0y79q7hynq2.png)

Fedora 提供两个独立的版本：一个用于台式机/笔记本电脑（Fedora 工作站），另一个用于服务器（Fedora 服务器)。

因此，如果你正在寻找一款时髦的桌面操作系统，有点学习曲线，又对用户友好，那么 Fedora 是一个选择。无论是哪种情况，如果你正在为你的服务器寻找一个 Linux 操作系统，这也是一个不错的选择。

* [Fedora](https://getfedora.org/)

#### Manjaro

![](/data/attachment/album/201910/01/140901p2qafahqqcyryzyr.jpg)

Manjaro 基于 [Arch Linux](https://www.archlinux.org/)。不用担心，虽然 Arch Linux 是为高级用户量身定制的，但Manjaro 让新手更容易上手。这是一个简单且对初学者友好的 Linux 发行版。用户界面足够好，并且内置了一系列有用的图形用户界面应用程序。

下载时，你可以为 Manjaro 选择[桌面环境](https://itsfoss.com/glossary/desktop-environment/)。就个人而言，我喜欢 Manjaro 的 KDE 桌面。

* [Manjaro Linux](https://manjaro.org/)

#### Debian

![](/data/attachment/album/201910/01/140902u8ch14h4ubrj8ja1.png)

嗯，Ubuntu 是基于 Debian 的——所以它本身是一个非常好的发行版本。Debian 是台式机和服务器的理想选择。

这可能不是对初学者最友好的操作系统——但你可以通过阅读[官方文档](https://www.debian.org/releases/stable/installmanual)轻松开始。[Debian 10 Buster](https://itsfoss.com/debian-10-buster/) 的最新版本引入了许多变化和必要的改进。所以，你必须试一试！

### 总结

总的来说，这些是我们推荐你去尝试的最好的 Linux 发行版。是的，还有许多其他的 Linux 发行版值得一提，但是根据个人喜好，对每个发行版来说，取决于个人喜好，这种选择是主观的。

但是，我们也为 [Windows 用户](https://itsfoss.com/windows-like-linux-distributions/)、[黑客和脆弱性测试人员](https://itsfoss.com/linux-hacking-penetration-testing/)、[游戏玩家](https://itsfoss.com/linux-gaming-distributions/)、[程序员](https://itsfoss.com/best-linux-distributions-progammers/)和[偏重隐私者](https://itsfoss.com/privacy-focused-linux-distributions/)提供了单独的发行版列表所以，如果你感兴趣的话请仔细阅读。

如果你认为我们遗漏了你最喜欢的 Linux 发行版，请在下面的评论中告诉我们你的想法，我们将更新这篇文章。

---

via: <https://itsfoss.com/best-linux-distributions/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[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/) 荣誉推出


滚动版 CentOS Stream 和 Fedora  的关系

![](/data/attachment/album/201910/02/093523xigcv6mx7ximcmzc.jpg)

*一封来自 Fedora 项目负责人办公室的信件：*

（LCTT 译注：背景介绍 —— 红帽宣布与 CentOS 同步构建一个 CentOS Stream 滚动构建版。我们知道 Fedora 是红帽企业版 Linux [RHEL] 的上游，经过 Fedora 验证的特性才会放入 RHEL；而 RHEL 发布后，其源代码开放出来形成了 CentOS。而新的 CentOS Stream 则位于 Fedora 和 RHEL 之间，会滚动添加新的实验特性、更新的软件包等。）

嗨，大家好！你可能已经看到有关 [CentOS 项目变更](https://wiki.centos.org/Manuals/ReleaseNotes/CentOSStream)的[公告](http://redhat.com/en/blog/transforming-development-experience-within-centos)。（如果没有，请花一些时间阅读它，我等你看完回来！）现在你可能想知道：如果 CentOS 现在位于 RHEL 的上游，那么 Fedora 会发生什么？那不是 Fedora 在 Red Hat 生态系统中的角色吗？

首先，不用担心。整体有一些变化，但是一切都变得更好。

![](/data/attachment/album/201910/02/093405qx085a0pu535dui5.jpg)

如果你一直在关注 RHEL 领导者关于 Fedora、CentOS 和 RHEL 之间关系的会议讨论，那么你就听说过 “<ruby> <a href="https://www.youtube.com/watch?v=1JmgOkEznjw">  彭罗斯三角 </a> <rt>  Penrose Triangle </rt></ruby>”。形状就像 M. C. Escher 绘图中的形状：在现实生活中这是不可能的！

我们已经思考了一段时间，*也许*几何不可能实际上是最好的模型。

一方面，想象中的流向最终的贡献会流回 Fedora 并以“良性循环”增长，但这种流从来没有真正起作用过。 真可惜，因为有一个庞大而强大的 CentOS 社区，并且有很多伟大的人在为此工作，而且 Fedora 社区也有很多重叠之处。我们错失了。

但是，这个缺口并不是唯一的空隙：在该项目与产品之间并没有真正一致的流程。到目前为止，该过程如下：

1. 在上一版 RHEL 发布之后的某个时间，红帽突然会比以往更加关注 Fedora。
2. 几个月后，红帽将分拆出一个内部开发的 RHEL 新版本。
3. 几个月后，它便被带到了世界各地，成为所有包括 CentOS 在内的下游发行版的来源。
4. 这些源持续向下更新，有时这些更新包括 Fedora 中的修补程序，但没有明确的路径。

这里的每个步骤都有其问题：间歇性注意力、闭门开发、盲目下发以及几乎没有持续的透明度。但是现在红帽和 CentOS 项目正在解决此问题，这对 Fedora 也是个好消息。

**Fedora 仍将是 RHEL 的[第一个](https://docs.fedoraproject.org/en-US/project/#_first)上游**。这是每个 RHEL 的来源，也是 RHEL 9 的来源。但是在 RHEL 分支之后，*CentOS* 将成为上游，以继续进行那些 RHEL 版本的工作。我喜欢称其为“中游”，但营销人员却不这样称呼，因此将其称为 “CentOS Stream”。

我们（Fedora、CentOS 和红帽）仍需要解决各种技术细节，但是我们的想法是这些分支将存在于同一软件包源存储库中。（目前的计划是制作一个 “src.centos.org”，它具有与 [src.fedoraproject.org](https://src.fedoraproject.org/) 相同数据的并行视图）。这项更改使公众可以看到已经发布的 RHEL 上正在进行的工作，并为开发人员和红帽合作伙伴在该级别进行协作提供了场所。

[CentOS SIG](https://wiki.centos.org/SpecialInterestGroup)（虚拟化、存储、配置管理等特殊兴趣小组）将在 Fedora 分支旁边的共享空间中开展工作。这将使项目之间的协作和共享更加容易，我希望我们甚至能够合并一些类似的 SIG，以直接协同工作。在有用的情况下，可以将 Fedora 软件包中的修补程序挑选到 CentOS “中游”中，反之亦然。

最终，Fedora、CentOS 和 RHEL 属于同一大型项目家族。这种新的、更自然的流程为协作提供了可能性，这些协作被锁定在人为（和超维度！）障碍的后面。我们现在可以一起做，我感到非常兴奋！

*—— Matthew Miller, Fedora 项目负责人*

---

via: <https://fedoramagazine.org/fedora-and-centos-stream/>

作者：[Matthew Miller](https://fedoramagazine.org/author/mattdm/) 选题：[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/) 荣誉推出


CutiePi：正在开发中的基于树莓派的开源平板

Summary: CutiePi 是一款 8 英寸的构建在树莓派上的开源平板。他们在树莓派论坛上宣布：现在，它只是一台原型机。

![](/data/attachment/album/201910/02/125301wkbvgz1n7zv7j55e.jpg)

CutiePi 是一款 8 英寸的构建在树莓派上的开源平板。他们在[树莓派论坛](https://www.raspberrypi.org/forums/viewtopic.php?t=247380)上宣布：现在，它只是一台原型机。

在本文中，你将了解有关 CutiePi 的规格、价格和可用性的更多详细信息。

它们使用一款定制的计算模块载版（CM3）来制造平板。[官网](https://cutiepi.io/)提到使用定制 CM3 载板的目的是：

>
> 定制 CM3/CM3+ 载板是专为便携使用而设计，拥有增强的电源管理和锂聚合物电池电量监控功能。还可与指定的 HDMI 或 MIPI DSI 显示器配合使用。
>
>
>

因此，这使得该平板足够薄而且便携。

### CutiePi 规格

![CutiePi Board](/data/attachment/album/201910/02/125334rux1xsyli3gguffz.png)

我惊讶地了解到它有 8 英寸的 IPS LCD 显示屏，这对新手而言是个好事。然而，你不会有一个真正高清的屏幕，因为官方宣称它的分辨率是 1280×800。

它还计划配备 4800 mAh 锂电池（原型机的电池为 5000 mAh）。嗯，对于平板来说，这不算坏。

连接性上包括支持 Wi-Fi 和蓝牙 4.0。此外，还有一个 USB Type-A 插口、6 个 GPIO 引脚和 microSD 卡插槽。

![CutiePi Specifications](/data/attachment/album/201910/02/125336o7cc7n7k87vfvfiz.jpg)

硬件与 [Raspbian OS](https://itsfoss.com/raspberry-pi-os-desktop/) 官方兼容，用户界面采用 [Qt](https://en.wikipedia.org/wiki/Qt_%28software%29) 构建，以获得快速直观的用户体验。此外，除了内置应用外，它还将通过 XWayland 支持 Raspbian PIXEL 应用。

### CutiePi 源码

你可以通过分析所用材料的清单来猜测此平板的定价。CutiePi 遵循 100% 的开源硬件设计。因此，如果你觉得好奇，可以查看它的 [GitHub 页面](https://github.com/cutiepi-io/cutiepi-board)，了解有关硬件设计和内容的详细信息。

### CutiePi 价格、发布日期和可用性

CutiePi 计划在 8 月进行[设计验证测试](https://en.wikipedia.org/wiki/Engineering_validation_test#Design_verification_test)批量 PCB。他们的目标是在 2019 年底推出最终产品。

官方预计，发售价大约在 $150-$250 左右。这只是一个近似的范围，还应该保有怀疑。

显然，即使产品听上去挺有希望，但价格将是它成功的一个主要因素。

### 总结

CutiePi 并不是第一个使用[像树莓派这样的单板计算机](https://itsfoss.com/raspberry-pi-alternatives/)来制作平板的项目。我们有即将推出的 [PineTab](https://www.pine64.org/pinetab/)，它基于 Pine64 单板电脑。Pine 还有一种笔记本电脑，名为 [Pinebook](https://itsfoss.com/pinebook-pro/)。

从原型来看，它确实是一个我们可以期望使用的产品。但是，预安装的应用和它将支持的应用可能会扭转局面。此外，考虑到价格估计，这听起来很有希望。

你觉得怎么样？让我们在下面的评论中知道你的想法，或者投个票。

---

via: <https://itsfoss.com/cutiepi-open-source-tab/>

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

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


使用 rsync 复制大文件的一些误解

Summary: 这位朋友认为 rsync 是一个神奇的工具，应该仅“同步”文件本身。但是，我们大多数人所忘记的是了解 rsync 的真正含义、用法，以及我认为最重要的是它原本是用来做什么的。

rsync（remote synchronize），目前由 http://rsync.samba.org 维护。<br />
该软件主要是用在Linux系统中，但在 windows 平台下也有相应的版本，如 cwrsync 和DeltaCopy 等。

![](/data/attachment/album/201910/02/134003xeowu3qppvl6fz3j.jpg)

有一种观点认为，在 IT 行业工作的许多人经常从网络帖子里复制和粘贴。我们都干过，复制粘贴本身不是问题。问题是当我们在不理解它们的情况下这样干。

几年前，一个曾经在我团队中工作的朋友需要将虚拟机模板从站点 A 复制到站点 B。他们无法理解为什么复制的文件在站点 A 上为 10GB，但是在站点 B 上却变为 100GB。

这位朋友认为 `rsync` 是一个神奇的工具，应该仅“同步”文件本身。但是，我们大多数人所忘记的是了解 `rsync` 的真正含义、用法，以及我认为最重要的是它原本是用来做什么的。本文提供了有关 `rsync` 的更多信息，并解释了那件事中发生了什么。

### 关于 rsync

`rsync` 是由 Andrew Tridgell 和 Paul Mackerras 创建的工具，其动机是以下问题：

假设你有两个文件，`file_A` 和 `file_B`。你希望将 `file_B` 更新为与 `file_A` 相同。显而易见的方法是将 `file_A` 复制到 `file_B`。

现在，假设这两个文件位于通过慢速通信链接（例如，拨号 IP 链接）连接的两个不同的服务器上。如果`file_A` 大，将其复制到 `file_B` 将会很慢，有时甚至是不可能完成的。为了提高效率，你可以在发送前压缩 `file_A`，但这通常只会获得 2 到 4 倍的效率提升。

现在假设 `file_A` 和 `file_B` 非常相似，并且为了加快处理速度，你可以利用这种相似性。一种常见的方法是仅通过链接发送 `file_A` 和 `file_B` 之间的差异，然后使用这个差异列表在远程端重建文件。

问题在于，用于在两个文件之间创建一组差异的常规方法依赖于能够读取两个文件。因此，它们要求链接的一端预先提供两个文件。如果它们在同一台计算机上不是同时可用的，则无法使用这些算法。（一旦将文件复制过来，就不需要做对比差异了）。而这是 `rsync` 解决的问题。

`rsync` 算法有效地计算源文件的哪些部分与现有目标文件的部分匹配。这样，匹配的部分就不需要通过链接发送了；所需要的只是对目标文件部分的引用。只有源文件中不匹配的部分才需要发送。

然后，接收者可以使用对现有目标文件各个部分的引用和原始素材来构造源文件的副本。

另外，可以使用一系列常用压缩算法中的任何一种来压缩发送到接收器的数据，以进一步提高速度。

我们都知道，`rsync` 算法以一种漂亮的方式解决了这个问题。

在 `rsync` 的介绍之后，回到那件事！

### 问题 1：自动精简配置

有两件事可以帮助那个朋友了解正在发生的事情。

该文件在其他地方的大小变得越来越大的问题是由源系统上启用了<ruby> 自动精简配置 <rt>  Thin Provisioning </rt></ruby>（TP）引起的，这是一种优化存储区域网络（SAN）或网络连接存储（NAS）中可用空间效率的方法。

由于启用了 TP，源文件只有 10GB，并且在不使用任何其他配置的情况下使用 `rsync` 进行传输时，目标位置将接收到全部 100GB 的大小。`rsync` 无法自动完成该（TP）操作，必须对其进行配置。

进行此工作的选项是 `-S`（或 `–sparse`），它告诉 `rsync` 有效地处理稀疏文件。它会按照它说的做！它只会发送该稀疏数据，因此源和目标将有一个 10GB 的文件。

### 问题 2：更新文件

当发送一个更新的文件时会出现第二个问题。现在目标仅接收 10GB 了，但始终传输的是整个文件（包含虚拟磁盘），即使只是在该虚拟磁盘上更改了一个配置文件。换句话说，只是该文件的一小部分发生了更改。

用于此传输的命令是：

```
rsync -avS vmdk_file syncuser@host1:/destination
```

同样，了解 `rsync` 的工作方式也将有助于解决此问题。

上面是关于 `rsync` 的最大误解。我们许多人认为 `rsync` 只会发送文件的增量更新，并且只会自动更新需要更新的内容。**但这不是 `rsync` 的默认行为**。

如手册页所述，`rsync` 的默认行为是在目标位置创建文件的新副本，并在传输完成后将其移动到正确的位置。

要更改 `rsync` 的默认行为，你必须设置以下标志，然后 `rsync` 将仅发送增量：

```
--inplace               原地更新目标文件
--partial               保留部分传输的文件
--append                附加数据到更短的文件
--progress              在传输时显示进度条
```

因此，可以确切地执行我那个朋友想要的功能的完整命令是：

```
rsync -av --partial --inplace --append --progress vmdk_file syncuser@host1:/destination
```

注意，出于两个原因，这里必须删除稀疏选项 `-S`。首先是通过网络发送文件时，不能同时使用 `–sparse` 和 `–inplace`。其次，当你以前使用过 `–sparse` 发送文件时，就无法再使用 `–inplace` 进行更新。请注意，低于 3.1.3 的 `rsync` 版本将拒绝 `–sparse` 和 `–inplace` 的组合。

因此，即使那个朋友最终通过网络复制了 100GB，那也只需发生一次。以下所有更新仅复制差异，从而使复制非常高效。

---

via: <https://fedoramagazine.org/copying-large-files-with-rsync-and-some-misconceptions/>

作者：[Daniel Leite de Abreu](https://fedoramagazine.org/author/dabreu/) 选题：[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/) 荣誉推出


chown 命令简介

Summary: 学习如何使用 chown 命令更改文件或目录的所有权。

学习如何使用 chown 命令更改文件或目录的所有权。

>
> 学习如何使用 chown 命令更改文件或目录的所有权。
>
>
>

![](/data/attachment/album/201910/03/000014mfrxrxi5rej75mjs.jpg)

Linux 系统上的每个文件和目录均由某个人拥有，拥有者可以完全控制更改或删除他们拥有的文件。除了有一个*拥有用户*外，文件还有一个*拥有组*。

你可以使用 `ls -l` 命令查看文件的所有权：

```
[pablo@workstation Downloads]$ ls -l
total 2454732
-rw-r--r--. 1 pablo pablo 1934753792 Jul 25 18:49 Fedora-Workstation-Live-x86_64-30-1.2.iso
```

该输出的第三和第四列是拥有用户和组，它们一起称为*所有权*。上面的那个 ISO 文件这两者都是 `pablo`。

所有权设置由 [chmod 命令](https://opensource.com/article/19/8/introduction-linux-chmod-command)进行设置，控制允许谁可以执行读取、写入或运行的操作。你可以使用 `chown` 命令更改所有权（一个或两者）。

所有权经常需要更改。文件和目录一直存在在系统中，但用户不断变来变去。当文件和目录在系统中移动时，或从一个系统移动到另一个系统时，所有权也可能需要更改。

我的主目录中的文件和目录的所有权是我的用户和我的主要组，以 `user:group` 的形式表示。假设 Susan 正在管理 Delta 组，该组需要编辑一个名为 `mynotes` 的文件。你可以使用 `chown` 命令将该文件的用户更改为 `susan`，组更改为 `delta`：

```
$ chown susan:delta mynotes
ls -l
-rw-rw-r--. 1 susan delta 0 Aug  1 12:04 mynotes
```

当给该文件设置好了 Delta 组时，它可以分配回给我：

```
$ chown alan mynotes
$ ls -l mynotes
-rw-rw-r--. 1 alan delta 0 Aug  1 12:04 mynotes
```

给用户后添加冒号（`:`），可以将用户和组都分配回给我：

```
$ chown alan: mynotes
$ ls -l mynotes
-rw-rw-r--. 1 alan alan 0 Aug  1 12:04 mynotes
```

通过在组前面加一个冒号，可以只更改组。现在，`gamma` 组的成员可以编辑该文件：

```
$ chown :gamma mynotes
$ ls -l
-rw-rw-r--. 1 alan gamma 0 Aug  1 12:04 mynotes
```

`chown` 的一些附加参数都能用在命令行和脚本中。就像许多其他 Linux 命令一样，`chown` 有一个递归参数（`-R`），它告诉该命令进入目录以对其中的所有文件进行操作。没有 `-R` 标志，你就只能更改文件夹的权限，而不会更改其中的文件。在此示例中，假定目的是更改目录及其所有内容的权限。这里我添加了 `-v`（详细）参数，以便 `chown` 报告其工作情况：

```
$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug  5 15:33 conf

conf:
-rw-rw-r-- 1 alan alan 0 Aug  5 15:33 conf.xml

$ chown -vR susan:delta conf
changed ownership of 'conf/conf.xml' from alan:alan to  susan:delta
changed ownership of 'conf' from alan:alan to  susan:delta
```

根据你的角色，你可能需要使用 `sudo` 来更改文件的所有权。

在更改文件的所有权以匹配特定配置时，或者在你不知道所有权时（例如运行脚本时），可以使用参考文件（`--reference=RFILE`）。例如，你可以复制另一个文件（`RFILE`，称为参考文件）的用户和组，以撤消上面所做的更改。回想一下，点（`.`）表示当前的工作目录。

```
$ chown -vR --reference=. conf
```

### 报告更改

大多数命令都有用于控制其输出的参数。最常见的是 `-v`（`--verbose`）以启用详细信息，但是 `chown` 还具有 `-c`（`--changes`）参数来指示 `chown` 仅在进行更改时报告。`chown` 还会报告其他情况，例如不允许进行的操作。

参数 `-f`（`--silent`、`--quiet`）用于禁止显示大多数错误消息。在下一节中，我将使用 `-f` 和 `-c`，以便仅显示实际更改。

### 保持根目录

Linux 文件系统的根目录（`/`）应该受到高度重视。如果命令在此层级上犯了一个错误，则后果可能会使系统完全无用。尤其是在运行一个会递归修改甚至删除的命令时。`chown` 命令具有一个可用于保护和保持根目录的参数，它是 `--preserve-root`。如果在根目录中将此参数和递归一起使用，那么什么也不会发生，而是会出现一条消息：

```
$ chown -cfR --preserve-root alan /
chown: it is dangerous to operate recursively on '/'
chown: use --no-preserve-root to override this failsafe
```

如果不与 `--recursive` 结合使用，则该选项无效。但是，如果该命令由 `root` 用户运行，则 `/` 本身的权限将被更改，但其下的其他文件或目录的权限则不会更改：

```
$ chown -c --preserve-root alan /
chown: changing ownership of '/': Operation not permitted
[root@localhost /]# chown -c --preserve-root alan /
changed ownership of '/' from root to alan
```

### 所有权即安全

文件和目录所有权是良好的信息安全性的一部分，因此，偶尔检查和维护文件所有权以防止不必要的访问非常重要。`chown` 命令是 Linux 安全命令集中最常见和最重要的命令之一。

---

via: <https://opensource.com/article/19/8/linux-chown-command>

作者：[Alan Formy-Duval](https://opensource.com/users/alanfdosshttps://opensource.com/users/sethhttps://opensource.com/users/alanfdosshttps://opensource.com/users/sethhttps://opensource.com/users/greg-phttps://opensource.com/users/alanfdoss) 选题：[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/) 荣誉推出


Shell 点文件可以为你做点什么

Summary: 了解如何使用配置文件来改善你的工作环境。

了解如何使用配置文件来改善你的工作环境。

>
> 了解如何使用配置文件来改善你的工作环境。
>
>
>

![](/data/attachment/album/201910/03/123528x3skwqwb8sz8qo8s.jpg)

不要问你可以为你的 shell <ruby> 点文件 <rt>  dotfile </rt></ruby>做什么，而是要问一个 shell 点文件可以为你做什么！

我一直在操作系统领域里面打转，但是在过去的几年中，我的日常使用的一直是 Mac。很长一段时间，我都在使用 Bash，但是当几个朋友开始把 [zsh](http://www.zsh.org/) 当成宗教信仰时，我也试试了它。我没用太长时间就喜欢上了它，几年后，我越发喜欢它做的许多小事情。

我一直在使用 zsh（通过 [Homebrew](https://brew.sh/) 提供，而不是由操作系统安装的）和 [Oh My Zsh 增强功能](https://github.com/robbyrussell/oh-my-zsh)。

本文中的示例是我的个人 `.zshrc`。大多数都可以直接用在 Bash 中，我觉得不是每个人都依赖于 Oh My Zsh，但是如果不用的话你的工作量可能会有所不同。曾经有一段时间，我同时为 zsh 和 Bash 维护一个 shell 点文件，但是最终我还是放弃了我的 `.bashrc`。

### 不偏执不行

如果你希望在各个操作系统上使用相同的点文件，则需要让你的点文件聪明点。

```
### Mac 专用
if [[ "$OSTYPE" == "darwin"* ]]; then
        # Mac 专用内容在此
```

例如，我希望 `Alt + 箭头键` 将光标按单词移动而不是单个空格。为了在 [iTerm2](https://www.iterm2.com/)（我的首选终端）中实现这一目标，我将此代码段添加到了 `.zshrc` 的 Mac 专用部分：

```
### Mac 专用
if [[ "$OSTYPE" == "darwin"* ]]; then
        ### Mac 用于 iTerm2 的光标命令；映射 ctrl+arrows 或 alt+arrows 来快速移动
        bindkey -e
        bindkey '^[[1;9C' forward-word
        bindkey '^[[1;9D' backward-word
        bindkey '\e\e[D' backward-word
        bindkey '\e\e[C' forward-word
fi
```

（LCTT 译注：标题 “We’re all mad here” 是电影《爱丽丝梦游仙境》中，微笑猫对爱丽丝讲的一句话：“我们这儿全都是疯的”。）

### 在家不工作

虽然我开始喜欢我的 Shell 点文件了，但我并不总是想要家用计算机上的东西与工作的计算机上的东西一样。解决此问题的一种方法是让补充的点文件在家中使用，而不是在工作中使用。以下是我的实现方式：

```
if [[ `egrep 'dnssuffix1|dnssuffix2' /etc/resolv.conf` ]]; then
        if [ -e $HOME/.work ]
                source $HOME/.work
        else
                echo "This looks like a work machine, but I can't find the ~/.work file"
        fi
fi
```

在这种情况下，我根据我的工作 dns 后缀（或多个后缀，具体取决于你的情况）来提供（`source`）一个可以使我的工作环境更好的单独文件。

（LCTT 译注：标题 “What about Bob?” 是 1991 年的美国电影《天才也疯狂》。）

### 你该这么做

现在可能是放弃使用波浪号（`~`）表示编写脚本时的主目录的好时机。你会发现在某些上下文中无法识别它。养成使用环境变量 `$HOME` 的习惯，这将为你节省大量的故障排除时间和以后的工作。

如果你愿意，合乎逻辑的扩展是应该包括特定于操作系统的点文件。

（LCTT 译注：标题 “That thing you do” 是 1996 年由汤姆·汉克斯执导的喜剧片《挡不住的奇迹》。）

### 别指望记忆

我写了那么多 shell 脚本，我真的再也不想写脚本了。并不是说 shell 脚本不能满足我大部分时间的需求，而是我发现写 shell 脚本，可能只是拼凑了一个胶带式解决方案，而不是永久地解决问题。

同样，我讨厌记住事情，在我的整个职业生涯中，我经常不得不在一天之中就彻彻底底地改换环境。实际的结果是这些年来，我不得不一再重新学习很多东西。（“等等……这种语言使用哪种 for 循环结构？”）

因此，每隔一段时间我就会觉得自己厌倦了再次寻找做某事的方法。我改善生活的一种方法是添加别名。

对于任何一个使用操作系统的人来说，一个常见的情况是找出占用了所有磁盘的内容。不幸的是，我从来没有记住过这个咒语，所以我做了一个 shell 别名，创造性地叫做 `bigdirs`：

```
alias bigdirs='du --max-depth=1 2> /dev/null | sort -n -r | head -n20'
```

虽然我可能不那么懒惰，并实际记住了它，但是，那不太 Unix ……

（LCTT 译注：标题 “Memory, all alone in the moonlight” 是一手英文老歌。）

### 输错的人们

使用 shell 别名改善我的生活的另一种方法是使我免于输入错误。我不知道为什么，但是我已经养成了这种讨厌的习惯，在序列 `ea` 之后输入 `w`，所以如果我想清除终端，我经常会输入 `cleawr`。不幸的是，这对我的 shell 没有任何意义。直到我添加了这个小东西：

```
alias cleawr='clear'
```

在 Windows 中有一个等效但更好的命令 `cls`，但我发现自己会在 Shell 也输入它。看到你的 shell 表示抗议真令人沮丧，因此我添加：

```
alias cls='clear'
```

是的，我知道 `ctrl + l`，但是我从不使用它。

（LCTT 译注：标题 “Typos, and the people who love them” 可能来自某部电影。）

### 要自娱自乐

工作压力很大。有时你需要找点乐子。如果你的 shell 不知道它显然应该执行的命令，则可能你想直接让它耸耸肩！你可以使用以下功能执行此操作：

```
shrug() { echo "¯\_(ツ)_/¯"; }
```

如果还不行，也许你需要掀桌不干了：

```
fliptable() { echo "（╯°□°）╯ ┻━┻"; } # 掀桌，用法示例: fsck -y /dev/sdb1 || fliptable
```

想想看，当我想掀桌子时而我不记得我给它起了个什么名字，我会有多沮丧和失望，所以我添加了更多的 shell 别名：

```
alias flipdesk='fliptable'
alias deskflip='fliptable'
alias tableflip='fliptable'
```

而有时你需要庆祝一下：

```
disco() {
        echo "(•_•)"
        echo "<)   )╯"
        echo " /    \ "
        echo ""
        echo "\(•_•)"
        echo " (   (>"
        echo " /    \ "
        echo ""
        echo " (•_•)"
        echo "<)   )>"
        echo " /    \ "
}
```

通常，我会将这些命令的输出通过管道传递到 `pbcopy`，并将其粘贴到我正在使用的相关聊天工具中。

我从一个我关注的一个叫 “Command Line Magic” [@ climagic](https://twitter.com/climagic) 的 Twitter 帐户得到了下面这个有趣的函数。自从我现在住在佛罗里达州以来，我很高兴看到我这一生中唯一的一次下雪：

```
snow() {
        clear;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS));sleep 0.1;done|gawk '{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf "\033[%s;%sH ",o,x;printf "\033[%s;%sH*\033[0;0H",a[x],x;}}'
}
```

（LCTT 译注：标题 “Amuse yourself” 是 1936 年的美国电影《自娱自乐》）

### 函数的乐趣

我们已经看到了一些我使用的函数示例。由于这些示例中几乎不需要参数，因此可以将它们作为别名来完成。 当比一个短句更长时，我出于个人喜好使用函数。

在我职业生涯的很多时期我都运行过 [Graphite](https://github.com/graphite-project/)，这是一个开源、可扩展的时间序列指标解决方案。 在很多的情况下，我需要将度量路径（用句点表示）转换到文件系统路径（用斜杠表示），反之亦然，拥有专用于这些任务的函数就变得很有用：

```
# 在 Graphite 指标和文件路径之间转换很有用
function dottoslash() {
        echo $1 | sed 's/\./\//g'
}
function slashtodot() {
        echo $1 | sed 's/\//\./g'
}
```

在我的另外一段职业生涯里，我运行了很多 Kubernetes。如果你对运行 Kubernetes 不熟悉，你需要编写很多 YAML。不幸的是，一不小心就会编写了无效的 YAML。更糟糕的是，Kubernetes 不会在尝试应用 YAML 之前对其进行验证，因此，除非你应用它，否则你不会发现它是无效的。除非你先进行验证：

```
function yamllint() {
        for i in $(find . -name '*.yml' -o -name '*.yaml'); do echo $i; ruby -e "require 'yaml';YAML.load_file(\"$i\")"; done
}
```

因为我厌倦了偶尔破坏客户的设置而让自己感到尴尬，所以我写了这个小片段并将其作为提交前挂钩添加到我所有相关的存储库中。在持续集成过程中，类似的内容将非常有帮助，尤其是在你作为团队成员的情况下。

（LCTT 译注：哦抱歉，我不知道这个标题的出处。）

### 手指不听话

我曾经是一位出色的盲打打字员。但那些日子已经一去不回。我的打字错误超出了我的想象。

在各种时期，我多次用过 Chef 或 Kubernetes。对我来说幸运的是，我从未同时使用过这两者。

Chef 生态系统的一部分是 Test Kitchen，它是加快测试的一组工具，可通过命令 `kitchen test` 来调用。Kubernetes 使用 CLI 工具 `kubectl` 进行管理。这两个命令都需要几个子命令，并且这两者都不会特别顺畅地移动手指。

我没有创建一堆“输错别名”，而是将这两个命令别名为 `k`：

```
alias k='kitchen test $@'
```

或

```
alias k='kubectl $@'
```

（LCTT 译注：标题 “Oh, fingers, where art thou?” 演绎自《O Brother, Where Art Thou?》，这是 2000 年美国的一部电影《逃狱三王》。）

### 分裂与合并

我职业生涯的后半截涉及与其他人一起编写更多代码。我曾在许多环境中工作过，在这些环境中，我们在帐户中复刻了存储库副本，并将拉取请求用作审核过程的一部分。当我想确保给定存储库的复刻与父版本保持最新时，我使用 `fetchupstream`：

```
alias fetchupstream='git fetch upstream && git checkout master && git merge upstream/master && git push'
```

（LCTT 译注：标题 “Timesplitters” 是一款视频游戏《时空分裂者》。）

### 颜色之荣耀

我喜欢颜色。它可以使 `diff` 之类的东西更易于使用。

```
alias diff='colordiff'
```

我觉得彩色的手册页是个巧妙的技巧，因此我合并了以下函数：

```
# 彩色化手册页，来自：
# http://boredzo.org/blog/archives/2016-08-15/colorized-man-pages-understood-and-customized
man() {
        env \
                LESS_TERMCAP_md=$(printf "\e[1;36m") \
                LESS_TERMCAP_me=$(printf "\e[0m") \
                LESS_TERMCAP_se=$(printf "\e[0m") \
                LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
                LESS_TERMCAP_ue=$(printf "\e[0m") \
                LESS_TERMCAP_us=$(printf "\e[1;32m") \
                man "$@"
}
```

我喜欢命令 `which`，但它只是告诉你正在运行的命令在文件系统中的位置，除非它是 Shell 函数才能告诉你更多。在多个级联的点文件之后，有时会不清楚函数的定义位置或作用。事实证明，`whence` 和 `type` 命令可以帮助解决这一问题。

```
# 函数定义在哪里？
whichfunc() {
        whence -v $1
        type -a $1
}
```

（LCTT 译注：标题“Mine eyes have seen the glory of the coming of color” 演绎自歌曲 《Mine Eyes Have Seen The Glory Of The Coming Of The Lord》）

### 总结

希望本文对你有所帮助，并能激发你找到改善日常使用 Shell 的方法。这些方法不必庞大、新颖或复杂。它们可能会解决一些微小但频繁的摩擦、创建捷径，甚至提供减少常见输入错误的解决方案。

欢迎你浏览我的 [dotfiles 存储库](https://github.com/gwaldo/dotfiles)，但我要警示你，这样做可能会花费很多时间。请随意使用你认为有帮助的任何东西，并互相取长补短。

---

via: <https://opensource.com/article/18/9/shell-dotfile>

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


把“点文件”放到版本控制中

>
> 通过在 GitLab 或 GitHub 上分享你的点文件，可以在整个系统上备份或同步你的自定义配置。
>
>
>

![](/data/attachment/album/201910/03/205222yzo1rbck6accccvo.jpg)

通过隐藏文件集（称为<ruby> 点文件 <rt>  dotfile </rt></ruby>）来定制操作系统是个非常棒的想法。在这篇 [Shell 点文件可以为你做点什么](/article-11417-1.html)中，H. Waldo Grunenwald 详细介绍了为什么以及如何设置点文件的细节。现在让我们深入探讨分享它们的原因和方式。

### 什么是点文件？

“<ruby> 点文件 <rt>  dotfile </rt></ruby>”是指我们计算机中四处漂泊的配置文件。这些文件通常在文件名的开头以 `.` 开头，例如 `.gitconfig`，并且操作系统通常在默认情况下将其隐藏。例如，当我在 MacOS 上使用 `ls -a` 时，它才会显示所有可爱的点文件，否则就不会显示这些点文件。

```
dotfiles on master
➜ ls
README.md  Rakefile   bin       misc    profiles   zsh-custom

dotfiles on master
➜ ls -a
.               .gitignore      .oh-my-zsh      README.md       zsh-custom
..              .gitmodules     .tmux           Rakefile
.gemrc          .global_ignore .vimrc           bin
.git            .gvimrc         .zlogin         misc
.gitconfig      .maid           .zshrc          profiles
```

如果看一下用于 Git 配置的 `.gitconfig`，我能看到大量的自定义配置。我设置了帐户信息、终端颜色首选项和大量别名，这些别名可以使我的命令行界面看起来就像我的一样。这是 `[alias]` 块的摘录：

```
87   # Show the diff between the latest commit and the current state
88   d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat"
89
90   # `git di $number` shows the diff between the state `$number` revisions ago and the current state
91   di = !"d() { git diff --patch-with-stat HEAD~$1; }; git diff-index --quiet HEAD -- || clear; d"
92
93   # Pull in remote changes for the current repository and all its submodules
94   p = !"git pull; git submodule foreach git pull origin master"
95
96   # Checkout a pull request from origin (of a github repository)
97   pr = !"pr() { git fetch origin pull/$1/head:pr-$1; git checkout pr-$1; }; pr"
```

由于我的 `.gitconfig` 有 200 多行的自定义设置，我无意于在我使用的每一台新计算机或系统上重写它，其他人肯定也不想这样。这是分享点文件变得越来越流行的原因之一，尤其是随着社交编码网站 GitHub 的兴起。正式提倡分享点文件的文章是 Zach Holman 在 2008 年发表的《[点文件意味着被复刻](https://zachholman.com/2010/08/dotfiles-are-meant-to-be-forked/)》。其前提到今天依然如此：我想与我自己、与点文件新手，以及那些分享了他们的自定义配置从而教会了我很多知识的人分享它们。

### 分享点文件

我们中的许多人拥有多个系统，或者知道硬盘变化无常，因此我们希望备份我们精心策划的自定义设置。那么我们如何在环境之间同步这些精彩的文件？

我最喜欢的答案是分布式版本控制，最好是可以为我处理繁重任务的服务。我经常使用 GitHub，随着我对 GitLab 的使用经验越来越丰富，我肯定会一如既往地继续喜欢它。任何一个这样的服务都是共享你的信息的理想场所。要自己设置的话可以这样做：

1. 登录到你首选的基于 Git 的服务。
2. 创建一个名为 `dotfiles` 的存储库。（将其设置为公开！分享即关爱。）
3. 将其克隆到你的本地环境。（你可能需要设置 Git 配置命令来克隆存储库。GitHub 和 GitLab 都会提示你需要运行的命令。）
4. 将你的点文件复制到该文件夹中。
5. 将它们符号链接回到其目标文件夹（最常见的是 `$HOME`）。
6. 将它们推送到远程存储库。

![](/data/attachment/album/201910/03/205253y5e5ya4y556u5m35.png)

上面的步骤 4 是这项工作的关键，可能有些棘手。无论是使用脚本还是手动执行，工作流程都是从 `dotfiles` 文件夹符号链接到点文件的目标位置，以便对点文件的任何更新都可以轻松地推送到远程存储库。要对我的 `.gitconfig` 文件执行此操作，我要输入：

```
$ cd dotfiles/
$ ln -nfs .gitconfig $HOME/.gitconfig
```

添加到符号链接命令的标志还具有其他一些用处：

* `-s` 创建符号链接而不是硬链接。
* `-f` 在发生错误时继续做其他符号链接（此处不需要，但在循环中很有用）
* `-n` 避免符号链接到一个符号链接文件（等同于其他版本的 `ln` 的 `-h` 标志）

如果要更深入地研究可用参数，可以查看 IEEE 和开放小组的 [ln 规范](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html)以及 [MacOS 10.14.3](https://www.unix.com/man-page/FreeBSD/1/ln/) 上的版本。自从其他人的点文件中拉取出这些标志以来，我才发现了这些标志。

你还可以使用一些其他代码来简化更新，例如我从 [Brad Parbs](https://github.com/bradp/dotfiles) 复刻的 [Rakefile](https://github.com/mbbroberg/dotfiles/blob/master/Rakefile)。另外，你也可以像 Jeff Geerling [在其点文件中](https://github.com/geerlingguy/dotfiles)那样，使它保持极其简单的状态。他使用[此 Ansible 剧本](https://github.com/geerlingguy/mac-dev-playbook)对文件进行符号链接。这样使所有内容保持同步很容易：你可以从点文件的文件夹中进行 cron 作业或偶尔进行 `git push`。

### 简单旁注：什么不能分享

在继续之前，值得注意的是你不应该添加到共享的点文件存储库中的内容 —— 即使它以点开头。任何有安全风险的东西，例如 `.ssh/` 文件夹中的文件，都不是使用此方法分享的好选择。确保在在线发布配置文件之前仔细检查配置文件，并再三检查文件中没有 API 令牌。

### 我应该从哪里开始？

如果你不熟悉 Git，那么我[有关 Git 术语的文章](https://opensource.com/article/19/2/git-terminology)和常用命令[备忘清单](https://opensource.com/downloads/cheat-sheet-git)将会帮助你继续前进。

还有其他超棒的资源可帮助你开始使用点文件。多年前，我就发现了 [dotfiles.github.io](http://dotfiles.github.io/)，并继续使用它来更广泛地了解人们在做什么。在其他人的点文件中隐藏了许多秘传知识。花时间浏览一些，大胆地将它们添加到自己的内容中。

我希望这是让你在计算机上拥有一致的点文件的快乐开端。

你最喜欢的点文件技巧是什么？添加评论或在 Twitter 上找我 [@mbbroberg](https://twitter.com/mbbroberg?lang=en)。

---

via: <https://opensource.com/article/19/3/move-your-dotfiles-version-control>

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


主流发行版之前的那些最早的 Linux 发行版

>
> 在这篇回溯历史的文章中，我们尝试回顾一些最早的 Linux 发行版是如何演变的，并形成我们今天所知道的发行版的。
>
>
>

![](/data/attachment/album/201910/04/100019oc79ftxhuw91x7rc.png)

在这里，我们尝试探讨了第一个 Linux 内核问世后，诸如 Red Hat、Debian、Slackware、SUSE、Ubuntu 等诸多流行的发行版的想法是如何产生的。

随着 1991 年 Linux 最初以内核的形式发布，今天我们所知道的发行版在世界各地众多合作者的帮助下得以创建 shell、库、编译器和相关软件包，从而使其成为一个完整的操作系统。

### 1、第一个已知的“发行版”是由 HJ Lu 创建的

Linux 发行版这种方式可以追溯到 1992 年，当时可以用来访问 Linux 的第一个已知的类似发行版的工具是由 HJ Lu 发布的。它由两个 5.25 英寸软盘组成：

![Linux 0.12 Boot and Root Disks | Photo Credit](/data/attachment/album/201910/04/100021xb3xz61oozxbcbqq.jpg)

* LINUX 0.12 BOOT DISK：“启动”磁盘用来先启动系统。
* LINUX 0.12 ROOT DISK：第二个“根”磁盘，用于在启动后获取命令提示符以访问 Linux 文件系统。

要在硬盘上安装 LINUX 0.12，必须使用十六进制编辑器来编辑其主启动记录（MBR），这是一个非常复杂的过程，尤其是在那个时代。

>
> 感觉太怀旧了？
>
>
> 你可以[安装 cool-retro-term 应用程序](https://itsfoss.com/cool-retro-term/)，它可以为你提供 90 年代计算机的复古外观的 Linux 终端。
>
>
>

### 2、MCC Interim Linux

![MCC Linux 0.99.14, 1993 | Image Credit](/data/attachment/album/201910/04/100028sbt9ujbjx29xuxpg.jpg)

MCC Interim Linux 最初由英格兰曼彻斯特计算中心的 Owen Le Blanc 与 “LINUX 0.12” 同年发布，它是针对普通用户的第一个 Linux 发行版，它具有菜单驱动的安装程序和最终用户/编程工具。它也是以软盘集的形式，可以将其安装在系统上以提供基于文本的基本环境。

MCC Interim Linux 比 0.12 更加易于使用，并且在硬盘驱动器上的安装过程更加轻松和类似于现代方式。它不需要使用十六进制编辑器来编辑 MBR。

尽管它于 1992 年 2 月首次发布，但自当年 11 月以来也可以通过 FTP 下载。

### 3、TAMU Linux

![TAMU Linux | Image Credit](/data/attachment/album/201910/04/100029kz397iwlonxoyxr9.jpg)

TAMU Linux 由 Texas A＆M 的 Aggies 与 Texas A＆M Unix ＆ Linux 用户组于 1992 年 5 月开发，被称为 TAMU 1.0A。它是第一个提供 X Window System 的 Linux 发行版，而不仅仅是基于文本的操作系统。

### 4、Softlanding Linux System (SLS)

![SLS Linux 1.05, 1994 | Image Credit](/data/attachment/album/201910/04/100031cromfglvzipyyrqg.jpg)

他们的口号是“DOS 伞降的温柔救援”！SLS 由 Peter McDonald 于 1992 年 5 月发布。SLS 在其时代得到了广泛的使用和流行，并极大地推广了 Linux 的思想。但是由于开发人员决定更改发行版中的可执行格式，因此用户停止使用它。

当今社区最熟悉的许多流行发行版是通过 SLS 演变而成的。其中两个是：

* Slackware：它是最早的 Linux 发行版之一，由 Patrick Volkerding 于 1993 年创建。Slackware 基于 SLS，是最早的 Linux 发行版之一。
* Debian：由 Ian Murdock 发起，Debian 在从 SLS 模型继续发展之后于 1993 年发布。我们今天知道的非常流行的 Ubuntu 发行版基于 Debian。

### 5、Yggdrasil

![LGX Yggdrasil Fall 1993 | Image Credit](/data/attachment/album/201910/04/100034o21yhz60az10dg88.jpg)

Yggdrasil 于 1992 年 12 月发行，是第一个产生 Live Linux CD 想法的发行版。它是由 Yggdrasil 计算公司开发的，该公司由位于加利福尼亚州伯克利的 Adam J. Richter 创立。它可以在系统硬件上自动配置自身，即“即插即用”功能，这是当今非常普遍且众所周知的功能。Yggdrasil 后来的版本包括一个用于在 Linux 中运行任何专有 MS-DOS CD-ROM 驱动程序的黑科技。

![Yggdrasil’s Plug-and-Play Promo | Image Credit](/data/attachment/album/201910/04/100035rf14o70x5jt9l590.jpg)

他们的座右铭是“<ruby> 我们其余人的自由软件 <rp>  （ </rp> <rt>  Free Software For The Rest of Us </rt> <rp>  ） </rp></ruby>”。

### 6、Mandriva

在 90 年代后期，有一个非常受欢迎的发行版 [Mandriva](https://en.wikipedia.org/wiki/Mandriva_Linux)，该发行版于 1998 年首次发行，是通过将法国的 Mandrake Linux 发行版与巴西的 Conectiva Linux 发行版统一起来形成的。它的发布寿命为 18 个月，会对 Linux 和系统软件进行更新，并且每年都会发布基于桌面的更新。它还有带有 5 年支持的服务器版本。现在是 [Open Mandriva](https://www.openmandriva.org/)。

如果你在 Linux 发行之初就用过更多的怀旧发行版，请在下面的评论中与我们分享。

---

via: <https://itsfoss.com/earliest-linux-distros/>

作者：[Avimanyu Bandyopadhyay](https://itsfoss.com/author/avimanyu/) 选题：[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/) 荣誉推出


用 Linux 命令显示硬件信息

Summary: 通过命令行获取计算机硬件详细信息。

通过命令行获取计算机硬件详细信息。

>
> 通过命令行获取计算机硬件详细信息。
>
>
>

![](/data/attachment/album/201910/04/120618q2k1fflrsy1bgbwp.jpg)

你可能会有很多的原因需要查清计算机硬件的详细信息。例如，你需要修复某些问题并在论坛上发出请求，人们可能会立即询问你的计算机具体的信息。或者当你想要升级计算机配置时，你需要知道现有的硬件型号和能够升级的型号。这些都需要查询你的计算机具体规格信息。

最简单的方法是使用标准的 Linux GUI 程序之一:

* [i-nex](http://sourceforge.net/projects/i-nex/) 收集硬件信息，并且类似于 Windows 下流行的 [CPU-Z](https://www.cpuid.com/softwares/cpu-z.html) 的显示。
* [HardInfo](http://sourceforge.net/projects/hardinfo.berlios/) 显示硬件具体信息，甚至包括一组八个的流行的性能基准程序，你可以用它们评估你的系统性能。
* [KInfoCenter](https://userbase.kde.org/KInfoCenter) 和 [Lshw](http://www.binarytides.com/linux-lshw-command/) 也能够显示硬件的详细信息，并且可以从许多软件仓库中获取。

或者，你也可以拆开计算机机箱去查看硬盘、内存和其他设备上的标签信息。或者你可以在系统启动时，按下[相应的按键](http://www.disk-image.com/faq-bootmenu.htm)进入 UEFI 和 BIOS 界面获得信息。这两种方式都会向你显示硬件信息但省略软件信息。

你也可以使用命令行获取硬件信息。等一下… 这听起来有些困难。为什么你会要这样做？

有时候通过使用一条针对性强的命令可以很轻松的找到特定信息。也可能你没有可用的 GUI 程序或者只是不想安装这样的程序。

使用命令行的主要原因可能是编写脚本。无论你是使用 Linux shell 还是其他编程语言来编写脚本通常都需要使用命令行。

很多检测硬件信息的命令行都需要使用 root 权限。所以要么切换到 root 用户，要么使用 `sudo` 在普通用户状态下发出命令：

```
sudo <the_line_command>
```

并按提示输入你的密码。

这篇文章介绍了很多用于发现系统信息的有用命令。文章最后的快速查询表对它们作出了总结。

### 硬件概述

下面几条命令可以全面概述计算机硬件信息。

`inxi` 命令能够列出包括 CPU、图形、音频、网络、驱动、分区、传感器等详细信息。当论坛里的人尝试帮助其他人解决问题的时候，他们常常询问此命令的输出。这是解决问题的标准诊断程序：

```
inxi -Fxz
```

`-F` 参数意味着你将得到完整的输出，`x` 增加细节信息，`z` 参数隐藏像 MAC 和 IP 等私人身份信息。

`hwinfo` 和 `lshw` 命令以不同的格式显示大量相同的信息：

```
hwinfo --short
```

或

```
lshw -short
```

这两条命令的长格式输出非常详细，但也有点难以阅读：

```
hwinfo
```

或

```
lshw
```

### CPU 详细信息

通过命令你可以了解关于你的 CPU 的任何信息。使用 `lscpu` 命令或与它相近的 `lshw` 命令查看 CPU 的详细信息：

```
lscpu
```

或

```
lshw -C cpu
```

在这两个例子中，输出的最后几行都列出了所有 CPU 的功能。你可以查看你的处理器是否支持特定的功能。

使用这些命令的时候，你可以通过使用 `grep` 命令过滤复杂的信息，并缩小所需信息范围。例如，只查看 CPU 品牌和型号:

```
lshw -C cpu | grep -i product
```

仅查看 CPU 的速度（兆赫兹）:

```
lscpu | grep -i mhz
```

或其 [BogoMips](https://en.wikipedia.org/wiki/BogoMips) 额定功率:

```
lscpu | grep -i bogo
```

`grep` 命令的 `-i` 参数代表搜索结果忽略大小写。

### 内存

Linux 命令行使你能够收集关于你的计算机内存的所有可能的详细信息。你甚至可以不拆开计算机机箱就能确定是否可以为计算机添加额外的内存条。

使用 `dmidecode` 命令列出每根内存条和其容量：

```
dmidecode -t memory | grep -i size
```

使用以下命令获取系统内存更多的信息，包括类型、容量、速度和电压：

```
lshw -short -C memory
```

你肯定想知道的一件事是你的计算机可以安装的最大内存：

```
dmidecode -t memory | grep -i max
```

现在检查一下计算机是否有空闲的插槽可以插入额外的内存条。你可以通过使用命令在不打开计算机机箱的情况下就做到：

```
lshw -short -C memory | grep -i empty
```

输出为空则意味着所有的插槽都在使用中。

确定你的计算机拥有多少显卡内存需要下面的命令。首先使用 `lspci` 列出所有设备信息然后过滤出你想要的显卡设备信息:

```
lspci | grep -i vga
```

视频控制器的设备号输出信息通常如下：

```
00:02.0 VGA compatible controller: Intel Corporation 82Q35 Express Integrated Graphics Controller (rev 02)
```

现在再加上视频设备号重新运行 `lspci` 命令：

```
lspci -v -s 00:02.0
```

输出信息中 `prefetchable` 那一行显示了系统中的显卡内存大小:

```
...
Memory at f0100000 (32-bit, non-prefetchable) [size=512K]
I/O ports at 1230 [size=8]
Memory at e0000000 (32-bit, prefetchable) [size=256M]
Memory at f0000000 (32-bit, non-prefetchable) [size=1M]
...
```

最后使用下面的命令展示当前内存使用量（兆字节）：

```
free -m
```

这条命令告诉你多少内存是空闲的，多少命令正在使用中以及交换内存的大小和是否正在使用。例如，输出信息如下：

```
              total        used        free     shared    buff/cache   available
Mem:          11891        1326        8877      212        1687       10077
Swap:          1999           0        1999
```

`top` 命令为你提供内存使用更加详细的信息。它显示了当前全部内存和 CPU 使用情况并按照进程 ID、用户 ID 及正在运行的命令细分。同时这条命令也是全屏输出:

```
top
```

### 磁盘文件系统和设备

你可以轻松确定有关磁盘、分区、文件系统和其他设备信息。

显示每个磁盘设备的描述信息：

```
lshw -short -C disk
```

通过以下命令获取任何指定的 SATA 磁盘详细信息，例如其型号、序列号以及支持的模式和扇区数量等：

```
hdparm -i /dev/sda
```

当然，如果需要的话你应该将 `sda` 替换成 `sdb` 或者其他设备号。

要列出所有磁盘及其分区和大小，请使用以下命令：

```
lsblk
```

使用以下命令获取更多有关扇区数量、大小、文件系统 ID 和 类型以及分区开始和结束扇区：

```
fdisk -l
```

要启动 Linux，你需要确定 [GRUB](https://www.dedoimedo.com/computers/grub.html) 引导程序的可挂载分区。你可以使用 `blkid` 命令找到此信息。它列出了每个分区的唯一标识符（UUID）及其文件系统类型（例如 ext3 或 ext4）：

```
blkid
```

使用以下命令列出已挂载的文件系统和它们的挂载点，以及已用的空间和可用的空间（兆字节为单位）：

```
df -m
```

最后，你可以列出所有的 USB 和 PCI 总线以及其他设备的详细信息：

```
lsusb
```

或

```
lspci
```

### 网络

Linux 提供大量的网络相关命令，下面只是几个例子。

查看你的网卡硬件详细信息:

```
lshw -C network
```

`ifconfig` 是显示网络接口的传统命令：

```
ifconfig -a
```

但是现在很多人们使用：

```
ip link show
```

或

```
netstat -i
```

在阅读输出时，了解常见的网络缩写十分有用：

| 缩写 | 含义 |
| --- | --- |
| `lo` | 回环接口 |
| `eth0` 或 `enp*` | 以太网接口 |
| `wlan0` | 无线网接口 |
| `ppp0` | 点对点协议接口（由拨号调制解调器、PPTP VPN 连接或者 USB 调制解调器使用） |
| `vboxnet0` 或 `vmnet*` | 虚拟机网络接口 |

表中的星号是通配符，代表不同系统的任意字符。

使用以下命令显示默认网关和路由表：

```
ip route | column -t
```

或

```
netstat -r
```

### 软件

让我们以显示最底层软件详细信息的两条命令来结束。例如，如果你想知道是否安装了最新的固件该怎么办？这条命令显示了 UEFI 或 BIOS 的日期和版本:

```
dmidecode -t bios
```

内核版本是多少，以及它是 64 位的吗？网络主机名是什么？使用下面的命令查出结果：

```
uname -a
```

### 快速查询表

| 用途 | 命令 |
| --- | --- |
| 显示所有硬件信息 | `inxi -Fxz` 或 `hwinfo --short` 或 `lshw -short` |
| CPU 信息 | `lscpu` 或 `lshw -C cpu` |
| 显示 CPU 功能（例如 PAE、SSE2） | `lshw -C cpu | grep -i capabilities` |
| 报告 CPU 位数 | `lshw -C cpu | grep -i width` |
| 显示当前内存大小和配置 | `dmidecode -t memory | grep -i size` 或 `lshw -short -C memory` |
| 显示硬件支持的最大内存 | `dmidecode -t memory | grep -i max` |
| 确定是否有空闲内存插槽 | `lshw -short -C memory | grep -i empty`（输出为空表示没有可用插槽） |
| 确定显卡内存数量 | `lspci | grep -i vga` 然后指定设备号再次使用；例如：`lspci -v -s 00:02.0` 显卡内存数量就是 `prefetchable` 的值 |
| 显示当前内存使用情况 | `free -m` 或 `top` |
| 列出磁盘驱动器 | `lshw -short -C disk` |
| 显示指定磁盘驱动器的详细信息 | `hdparm -i /dev/sda`（需要的话替换掉 `sda`） |
| 列出磁盘和分区信息 | `lsblk`（简单） 或 `fdisk -l`（详细） |
| 列出分区 ID（UUID） | `blkid` |
| 列出已挂载文件系统挂载点以及已用和可用空间 | `df -m` |
| 列出 USB 设备 | `lsusb` |
| 列出 PCI 设备 | `lspci` |
| 显示网卡详细信息 | `lshw -C network` |
| 显示网络接口 | `ifconfig -a` 或 `ip link show` 或 `netstat -i` |
| 显示路由表 | `ip route | column -t` 或 `netstat -r` |
| 显示 UEFI/BIOS 信息 | `dmidecode -t bios` |
| 显示内核版本网络主机名等 | `uname -a` |

你有喜欢的命令被我忽略掉的吗？请添加评论分享给大家。

---

via: <https://opensource.com/article/19/9/linux-commands-hardware-information>

作者：[Howard Fosdick](https://opensource.com/users/howtechhttps://opensource.com/users/sethhttps://opensource.com/users/sethhttps://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[way-ww](https://github.com/way-ww) 校对：[wxy](https://github.com/wxy)

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