2019年2月

这五个发行版用于开发工作将不会让你失望。

Linux 上最受欢迎的任务之一肯定是开发。理由很充分:业务依赖于 Linux。没有 Linux,技术根本无法满足当今不断发展的世界的需求。因此,开发人员不断努力改善他们的工作环境。而进行此类改善的一种方法就是拥有合适的平台。值得庆幸的是,这就是 Linux,所以你总是有很多选择。

但有时候,太多的选择本身就是一个问题。哪种发行版适合你的开发需求?当然,这取决于你正在开发的工作,但某些发行版更适合作为你的工作任务的基础。我将重点介绍我认为 2019 年最适合开发人员的五个发行版。

Ubuntu

无需赘言。虽然 Linux Mint 的忠实用户无疑是一个非常忠诚的群体(这是有充分的理由的,他们选择的发行版很棒),但 Ubuntu Linux 在这里更被认可。为什么?因为有像 AWS 这样的云服务商存在,Ubuntu 成了部署最多的服务器操作系统之一。这意味着在 Ubuntu 桌面发行版上进行开发可以更轻松地转换为 Ubuntu Server。而且因为 Ubuntu 使得开发、使用和部署容器非常容易,所以你想要使用这个平台是完全合理的。而 Ubuntu 与其包含的 Snap 软件包相结合,使得这个 Canonical(Ubuntu 发行版背后的公司)的操作系统如虎添翼。

但这不仅是你可以用 Ubuntu 做什么,而是你可以轻松做到。几乎对于所有的任务,Ubuntu 都是一个非常易用的发行版。而且因为 Ubuntu 如此受欢迎,所以你可以从 Ubuntu “软件” 应用的图形界面里轻松安装你想要使用的每个工具和 IDE(图 1)。

 title=

图 1:可以在 Ubuntu “软件”工具里面找到开发者工具。

如果你正在寻求易用、易于迁移,以及大量的工具,那么将 Ubuntu 作为开发平台就不会有错。

openSUSE

我将 openSUSE 添加到此列表中有一个非常具体的原因。它不仅是一个出色的桌面发行版,它还是市场上最好的滚动发行版之一。因此,如果你希望用最新的软件开发、发布最新的软件,openSUSE Tumbleweed 应该是你的首选之一。如果你想使用最喜欢的 IDE 的最新版本,如果你总是希望确保使用最新的库和工具包进行开发,那么 Tumbleweed 就是你的平台。

但 openSUSE 不仅提供滚动发布版本。如果你更愿意使用标准发行版,那么 openSUSE Leap 就是你想要的。

当然,它不仅有标准版或滚动版,openSUSE 平台还有一个名为 Kubic 的 Kubernetes 特定版本,该版本基于 openSUSE MicroOS 上的 Kubernetes。但即使你没有为 Kubernetes 进行开发,你也会发现许多软件和工具可供使用。

openSUSE 还提供了选择桌面环境的能力,或者你也可以选择通用桌面或服务器(图 2)。

 title=

图 2: 正在安装 openSUSE Tumbleweed。

Fedora

使用 Fedora 作为开发平台才有意义。为什么?这个发行版本身似乎是面向开发人员的。通过定期的六个月发布周期,开发人员可以确保他们不会一直使用过时的软件。当你需要最新的工具和库时,这很重要。如果你正在开发企业级业务,Fedora 是一个理想的平台,因为它是红帽企业 Linux(RHEL)的上游。这意味着向 RHEL 的过渡应该是无痛的。这一点很重要,特别是如果你希望将你的项目带到一个更大的市场(一个比以桌面为中心的目标更深的领域)。

Fedora 还提供了你将体验到的最佳 GNOME 体验之一(图 3)。换言之,这是非常稳定和快速的桌面。

 title=

图 3:Fedora 上的 GNOME 桌面。

但是如果 GNOME 不是你的菜,你还可以选择安装一个 Fedora 花样版(包括 KDE、XFCE、LXQT、Mate-Compiz、Cinnamon、LXDE 和 SOAS 等桌面环境)。

Pop!\_OS

如果这个列表中我没有包括 System76 平台专门为他们的硬件定制的操作系统(虽然它也在其他硬件上运行良好),那我算是失职了。为什么我要包含这样的发行版,尤其是它还并未远离其所基于的 Ubuntu 平台?主要是因为如果你计划从 System76 购买台式机或笔记本电脑,那它就是你想要的发行版。但是你为什么要这样做呢(特别是考虑到 Linux 几乎适用于所有现成的硬件)?因为 System76 销售的出色硬件。随着他们的 Thelio 桌面的发布,这是你可以使用的市场上最强大的台式计算机之一。如果你正在努力开发大型应用程序(特别是那些非常依赖于非常大的数据库或需要大量处理能力进行编译的应用程序),为什么不用最好的计算机呢?而且由于 Pop!\_OS 完全适用于 System76 硬件,因此这是一个明智的选择。

由于 Pop!\_OS 基于 Ubuntu,因此你可以轻松获得其所基于的 Ubuntu 可用的所有工具(图 4)。

 title=

图 4:运行在 Pop!\_OS 上的 Anjunta IDE

Pop!\_OS 也会默认加密驱动器,因此你可以放心你的工作可以避免窥探(如果你的硬件落入坏人之手)。

Manjaro

对于那些喜欢在 Arch Linux 上开发,但不想经历安装和使用 Arch Linux 的所有环节的人来说,那选择就是 Manjaro。Manjaro 可以轻松地启动和运行一个基于 Arch Linux 的发行版(就像安装和使用 Ubuntu 一样简单)。

但是 Manjaro 对开发人员友好的原因(除了享受 Arch 式好处)是你可以下载好多种不同口味的桌面。从Manjaro 下载页面 中,你可以获得以下口味:

  • GNOME
  • XFCE
  • KDE
  • OpenBox
  • Cinnamon
  • I3
  • Awesome
  • Budgie
  • Mate
  • Xfce 开发者预览版
  • KDE 开发者预览版
  • GNOME 开发者预览版
  • Architect
  • Deepin

值得注意的是它的开发者版本(面向测试人员和开发人员),Architect 版本(适用于想要从头开始构建 Manjaro 的用户)和 Awesome 版本(图 5,适用于开发人员处理日常工作的版本)。使用 Manjaro 的一个警告是,与任何滚动版本一样,你今天开发的代码可能明天无法运行。因此,你需要具备一定程度的敏捷性。当然,如果你没有为 Manjaro(或 Arch)做开发,并且你正在进行工作更多是通用的(或 Web)开发,那么只有当你使用的工具被更新了且不再适合你时,才会影响你。然而,这种情况发生的可能性很小。和大多数 Linux 发行版一样,你会发现 Manjaro 有大量的开发工具。

 title=

图 5:Manjaro Awesome 版对于开发者来说很棒。

Manjaro 还支持 AUR(Arch User Repository —— Arch 用户的社区驱动软件库),其中包括最先进的软件和库,以及 Unity Editor 或 yEd 等专有应用程序。但是,有个关于 AUR 的警告:AUR 包含的软件中被怀疑发现了恶意软件。因此,如果你选择使用 AUR,请谨慎操作,风险自负。

其实任何 Linux 都可以

说实话,如果你是开发人员,几乎任何 Linux 发行版都可以工作。如果从命令行执行大部分开发,则尤其如此。但是如果你喜欢在可靠的桌面上运行一个好的图形界面程序,试试这些发行版中的一个,它们不会令人失望。

通过 Linux 基金会和 edX 的免费“Linux 简介”课程了解有关 Linux 的更多信息。


via: https://www.linux.com/blog/2019/1/top-5-linux-distributions-development-2019

作者:Jack Wallen 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

关于 DNS 和根证书你需要了解的内容。

由于最近发生的一些事件,我们(Privacy Today 组织)感到有必要写一篇关于此事的短文。它适用于所有读者,因此它将保持简单 —— 技术细节可能会在稍后的文章发布。

什么是 DNS,为什么它与你有关?

DNS 的意思是 域名系统 Domain Name System ,你每天都会接触到它。每当你的 Web 浏览器或任何其他应用程序连接到互联网时,它就很可能会使用域名。简单来说,域名就是你键入的地址:例如 duckduckgo.com。你的计算机需要知道它所导向的地方,会向 DNS 解析器寻求帮助。而它将返回类似 176.34.155.23 这样的 IP —— 这就是连接时所需要知道的公开网络地址。 此过程称为 DNS 查找。

这对你的隐私、安全以及你的自由都有一定的影响:

隐私

由于你要求解析器获取域名的 IP,因此它会确切地知道你正在访问哪些站点,并且由于“物联网”(通常缩写为 IoT),甚至它还知道你在家中使用的是哪个设备。

安全

你可以相信解析器返回的 IP 是正确的。有一些检查措施可以确保如此,在正常情况下这一般不是问题。但这些可能措施会被破坏,这就是写作本文的原因。如果返回的 IP 不正确,你可能会被欺骗引向了恶意的第三方 —— 甚至你都不会注意到任何差异。在这种情况下,你的隐私会受到更大的危害,因为不仅会被跟踪你访问了什么网站,甚至你访问的内容也会被跟踪。第三方可以准确地看到你正在查看的内容,收集你输入的个人信息(例如密码)等等。你的整个身份可以轻松接管。

自由

审查通常是通过 DNS 实施的。这不是最有效的方法,但它非常普遍。即使在西方国家,它也经常被公司和政府使用。他们使用与潜在攻击者相同的方法;当你查询 IP 地址时,他们不会返回正确的 IP。他们可以表现得就好像某个域名不存在,或完全将访问指向别处。

DNS 查询的方式

由你的 ISP 提供的第三方 DNS 解析器

大多数人都在使用由其互联网接入提供商(ISP)提供的第三方解析器。当你连接调制解调器时(LCTT 译注:或宽带路由器),这些 DNS 解析器就会被自动取出,而你可能从来没注意过它。

你自己选择的第三方 DNS 解析器

如果你已经知道 DNS 意味着什么,那么你可能会决定使用你选择的另一个 DNS 解析器。这可能会改善这种情况,因为它使你的 ISP 更难以跟踪你,并且你可以避免某些形式的审查。尽管追踪和审查仍然是可能的,但这种方法并没有被广泛使用。

你自己(本地)的 DNS 解析器

你可以自己动手,避免使用别人的 DNS 解析器的一些危险。如果你对此感兴趣,请告诉我们。

根证书

什么是根证书?

每当你访问以 https 开头的网站时,你都会使用它发送的证书与之通信。它使你的浏览器能够加密通信并确保没有人可以窥探。这就是为什么每个人都被告知在登录网站时要注意 https(而不是 http)。证书本身仅用于验证是否为某个域所生成。以及:

这就是根证书的来源。可以其视为一个更高的级别,用来确保其下的级别是正确的。它验证发送给你的证书是否已由证书颁发机构授权。此权限确保创建证书的人实际上是真正的运营者。

这也被称为信任链。默认情况下,你的操作系统包含一组这些根证书,以确保该信任链的存在。

滥用

我们现在知道:

  • DNS 解析器在你发送域名时向你发送 IP 地址
  • 证书允许加密你的通信,并验证它们是否为你访问的域生成
  • 根证书验证该证书是否合法,并且是由真实站点运营者创建的

怎么会被滥用呢?

  • 如前所述,恶意 DNS 解析器可能会向你发送错误的 IP 以进行审查。它们还可以将你导向完全不同的网站。
  • 这个网站可以向你发送假的证书。
  • 恶意的根证书可以“验证”此假证书。

对你来说,这个网站看起来绝对没问题;它在网址中有 https,如果你点击它,它会说已经通过验证。就像你了解到的一样,对吗?不对!

它现在可以接收你要发送给原站点的所有通信。这会绕过想要避免被滥用而创建的检查。你不会收到错误消息,你的浏览器也不会发觉。

而你所有的数据都会受到损害!

结论

风险

  • 使用恶意 DNS 解析器总是会损害你的隐私,但只要你注意 https,你的安全性就不会受到损害。
  • 使用恶意 DNS 解析程序和恶意根证书,你的隐私和安全性将完全受到损害。

可以采取的动作

不要安装第三方根证书!只有非常少的例外情况才需要这样做,并且它们都不适用于一般最终用户。

不要被那些“广告拦截”、“军事级安全”或类似的东西营销噱头所吸引。有一些方法可以自行使用 DNS 解析器来增强你的隐私,但安装第三方根证书永远不会有意义。你正在将自己置身于陷阱之中。

实际看看

警告

有位友好的系统管理员提供了一个现场演示,你可以实时看到自己。这是真事。

千万不要输入私人数据!之后务必删除证书和该 DNS!

如果你不知道如何操作,那就不要安装它。虽然我们相信我们的朋友,但你不要随便安装随机和未知的第三方根证书。

实际演示

链接在这里:http://https-interception.info.tm/

  • 设置所提供的 DNS 解析器
  • 安装所提供的根证书
  • 访问 https://paypal.com 并输入随机登录数据
  • 你的数据将显示在该网站上

延伸信息

如果你对更多技术细节感兴趣,请告诉我们。如果有足够多感兴趣的人,我们可能会写一篇文章,但是目前最重要的部分是分享基础知识,这样你就可以做出明智的决定,而不会因为营销和欺诈而陷入陷阱。请随时提出对你很关注的其他主题。

这篇文章来自 Privacy Today 频道Privacy Today 是一个关于隐私、开源、自由哲学等所有事物的组织!

所有内容均根据 CC BY-NC-SA 4.0 获得许可。(署名 - 非商业性使用 - 共享 4.0 国际)。


via: https://lushka.al/dns-and-certificates/

作者:Anxhelo Lushka 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在你的游戏开发过程中有了 PyGame Zero,和枯燥的模板说再见吧。

Python 是一个很好的入门级编程语言。并且,游戏是一个很好的入门项目:它们是可视化的,自驱动的,并且可以很愉快的与朋友和家人分享。虽然,绝大多数的 Python 写就的库,比如 PyGame ,会让初学者因为忘记微小的细节很容易导致什么都没渲染而感到困扰。

在理解所有部分的作用之前,他们会将其中的许多部分都视为“无意识的模板文件”——需要复制和粘贴到程序中才能使其工作的神奇段落。

PyGame Zero 试图通过在 PyGame 上放置一个抽象层来弥合这一差距,因此它字面上并不需要模板。

我们在说的“字面”,就是在指字面。

这是一个合格的 PyGame Zero 文件:

# This comment is here for clarity reasons

我们可以将它放在一个 game.py 文件里,并运行:

$ pgzrun game.py

这将会展示一个窗口,并运行一个可以通过关闭窗口或按下 CTRL-C 中断的游戏循环。

遗憾的是,这将是一场无聊的游戏。什么都没发生。

为了让它更有趣一点,我们可以画一个不同的背景:

def draw():
    screen.fill((255, 0, 0))

这将会把背景色从黑色换为红色。但是这仍是一个很无聊的游戏,什么都没发生。我们可以让它变的更有意思一点:

colors = [0, 0, 0]

def draw():
    screen.fill(tuple(colors))

def update():
    colors[0] = (colors[0] + 1) % 256

这将会让窗口从黑色开始,逐渐变亮,直到变为亮红色,再返回黑色,一遍一遍循环。

update 函数更新了参数的值,而 draw 基于这些参数渲染这个游戏。

即使是这样,这里也没有任何方式给玩家与这个游戏的交互的方式。让我们试试其他一些事情:

colors = [0, 0, 0]

def draw():
    screen.fill(tuple(colors))

def update():
    colors[0] = (colors[0] + 1) % 256

def on_key_down(key, mod, unicode):
    colors[1] = (colors[1] + 1) % 256

现在,按下按键来提升亮度。

这些包括游戏循环的三个重要部分:响应用户输入,更新参数和重新渲染屏幕。

PyGame Zero 提供了更多功能,包括绘制精灵图和播放声音片段的功能。

试一试,看看你能想出什么类型的游戏!


via: https://opensource.com/article/19/1/pygame-zero

作者:Moshe Zadka 选题:lujun9972 译者:bestony 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

文本文件和 Linux 一直是携手并进的。或者说看起来如此。那你又是依靠哪些让你使用起来很舒服的工具来查看这些文本文件的呢?

Linux 下有很多实用工具可以让你在终端界面查看文本文件。其中一个就是 more)。

more 跟我之前另一篇文章里写到的工具 —— less 很相似。它们之间的主要不同点在于 more 只允许你向前查看文件。

尽管它能提供的功能看起来很有限,不过它依旧有很多有用的特性值得你去了解。下面让我们来快速浏览一下 more 可以做什么,以及如何使用它吧。

基础使用

假设你现在想在终端查看一个文本文件。只需打开一个终端,进入对应的目录,然后输入以下命令:

$ more <filename>

例如,

$ more jekyll-article.md

使用空格键可以向下翻页,输入 q 可以退出。

如果你想在这个文件中搜索一些文本,输入 / 字符并在其后加上你想要查找的文字。例如你要查看的字段是 “terminal”,只需输入:

/terminal

搜索的内容是区分大小写的,所以输入 /terminal/Terminal 会出现不同的结果。

和其他实用工具组合使用

你可以通过管道将其他命令行工具得到的文本传输到 more。你问为什么这样做?因为有时这些工具获取的文本会超过终端一页可以显示的限度。

想要做到这个,先输入你想要使用的完整命令,后面跟上管道符(|),管道符后跟 more。假设现在有一个有很多文件的目录。你就可以组合 morels 命令完整查看这个目录当中的内容。

$ ls | more

你可以组合 moregrep 命令,从而实现在多个文件中找到指定的文本。下面是我在多篇文章的源文件中查找 “productivity” 的例子。

$ grep ‘productivity’ core.md Dict.md lctt2014.md lctt2016.md lctt2018.md README.md | more

另外一个可以和 more 组合的实用工具是 ps(列出你系统上正在运行的进程)。当你的系统上运行了很多的进程,你现在想要查看他们的时候,这个组合将会派上用场。例如你想找到一个你需要杀死的进程,只需输入下面的命令:

$ ps -u scott | more

注意用你的用户名替换掉 “scott”。

就像我文章开篇提到的, more 很容易使用。尽管不如它的双胞胎兄弟 less 那般灵活,但是仍然值得了解一下。


via: https://opensource.com/article/19/1/more-text-files-linux

作者:Scott Nesbitt 选题:lujun9972 译者:dianbanjiu 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

OK05 课程构建于课程 OK04 的基础,使用它来闪烁摩尔斯电码的 SOS 序列(...---...)。这里假设你已经有了 课程 4:OK04 操作系统的代码作为基础。

1、数据

到目前为止,我们与操作系统有关的所有内容提供的都是指令。然而有时候,指令只是完成了一半的工作。我们的操作系统可能还需要数据。

一些早期的操作系统确实只允许特定文件中的特定类型的数据,但是这通常被认为限制太多了。现代方法确实可以使程序变得复杂的多。

通常,数据就是些很重要的值。你可能接受过培训,认为数据就是某种类型的,比如,文本文件包含文本,图像文件包含图片,等等。说实话,这只是你的想法而已。计算机上的全部数据都是二进制数字,重要的是我们选择用什么来解释这些数据。在这个例子中,我们会用一个闪灯序列作为数据保存下来。

main.s 结束处复制下面的代码:

.section .data %定义 .data 段
.align 2 %对齐
pattern: %定义整形变量
.int 0b11111111101010100010001000101010

.align num 确保下一行代码的地址是 2 num 的整数倍。

.int val 输出数值 val

要区分数据和代码,我们将数据都放在 .data 区域。我已经将该区域包含在操作系统的内存布局图。我选择将数据放到代码后面。将我们的指令和数据分开保存的原因是,如果最后我们在自己的操作系统上实现一些安全措施,我们就需要知道代码的那些部分是可以执行的,而那些部分是不行的。

我在这里使用了两个新命令 .align.int.align 保证接下来的数据是按照 2 的乘方对齐的。在这个里,我使用 .align 2 ,意味着数据最终存放的地址是 2 2=4 的整数倍。这个操作是很重要的,因为我们用来读取内存的指令 ldr 要求内存地址是 4 的倍数。

命令 .int 直接复制它后面的常量到输出。这意味着 11111111101010100010001000101010 2 将会被存放到输出,所以该标签模式实际是将这段数据标识为模式。

关于数据的一个挑战是寻找一个高效和有用的展示形式。这种保存一个开、关的时间单元的序列的方式,运行起来很容易,但是将很难编辑,因为摩尔斯电码的 -. 样式丢失了。

如我提到的,数据可以代表你想要的所有东西。在这里我编码了摩尔斯电码的 SOS 序列,对于不熟悉的人,就是 ...---...。我使用 0 表示一个时间单元的 LED 灭灯,而 1 表示一个时间单元的 LED 亮。这样,我们可以像这样编写一些代码在数据中显示一个序列,然后要显示不同序列,我们所有需要做的就是修改这段数据。下面是一个非常简单的例子,操作系统必须一直执行这段程序,解释和展示数据。

复制下面几行到 main.s 中的标记 loop$ 之前。

ptrn .req r4 %重命名 r4 为 ptrn
ldr ptrn,=pattern %加载 pattern 的地址到 ptrn
ldr ptrn,[ptrn] %加载地址 ptrn 所在内存的值
seq .req r5 %重命名 r5 为 seq
mov seq,#0 %seq 赋值为 0

这段代码加载 pattrern 到寄存器 r4,并加载 0 到寄存器 r5r5 将是我们的序列位置,所以我们可以追踪我们已经展示了多少个 pattern

如果 pattern 的当前位置是 1 且仅有一个 1,下面的代码将非零值放入 r1

mov r1,#1 %加载1到 r1
lsl r1,seq %对r1 的值逻辑左移 seq 次
and r1,ptrn %按位与

这段代码对你调用 SetGpio 很有用,它必须有一个非零值来关掉 LED,而一个 0 值会打开 LED。

现在修改 main.s 中你的全部代码,这样代码中每次循环会根据当前的序列数设置 LED,等待 250000 毫秒(或者其他合适的延时),然后增加序列数。当这个序列数到达 32 就需要返回 0。看看你是否能实现这个功能,作为额外的挑战,也可以试着只使用一条指令。

2、当你玩得开心时,时间过得很快

你现在准备好在树莓派上实验。应该闪烁一串包含 3 个短脉冲,3 个长脉冲,然后 3 个短脉冲的序列。在一次延时之后,这种模式应该重复。如果这不工作,请查看我们的问题页。

一旦它工作,祝贺你已经抵达 OK 系列教程的结束点。

在这个系列我们学习了汇编代码,GPIO 控制器和系统定时器。我们已经学习了函数和 ABI,以及几个基础的操作系统原理,已经关于数据的知识。

你现在已经可以准备学习下面几个更高级的课程的某一个。

  • Screen 系列是接下来的,会教你如何通过汇编代码使用屏幕。
  • Input 系列教授你如何使用键盘和鼠标。

到现在,你已经有了足够的信息来制作操作系统,用其它方法和 GPIO 交互。如果你有任何机器人工具,你可能会想尝试编写一个通过 GPIO 管脚控制的机器人操作系统。


via: https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/ok05.html

作者:Robert Mullins 选题:lujun9972 译者:ezio 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在这篇文章,我们继续来深入探讨尖括号的更多其它用法。

上一篇文章当中,我们介绍了尖括号(<>)以及它们的一些用法。在这篇文章,我们继续来深入探讨尖括号的更多其它用法。

通过使用 <,可以实现“欺骗”的效果,让其它命令认为某个命令的输出是一个文件。

例如,在进行备份文件的时候不确定备份是否完整,就需要去确认某个目录是否已经包含从原目录中复制过去的所有文件。你可以试一下这样操作:

diff <(ls /original/dir/) <(ls /backup/dir/)

diff 命令是一个逐行比较两个文件之间差异的工具。在上面的例子中,就使用了 <diff 认为两个 ls 命令输出的结果都是文件,从而能够比较它们之间的差异。

要注意,在 <(...) 之间是没有空格的。

我尝试在我的图片目录和它的备份目录执行上面的命令,输出的是以下结果:

diff <(ls /My/Pictures/) <(ls /My/backup/Pictures/) 
5d4 < Dv7bIIeUUAAD1Fc.jpg:large.jpg

输出结果中的 < 表示 Dv7bIIeUUAAD1Fc.jpg:large.jpg 这个文件存在于左边的目录(/My/Pictures)但不存在于右边的目录(/My/backup/Pictures)中。也就是说,在备份过程中可能发生了问题,导致这个文件没有被成功备份。如果 diff 没有显示出任何输出结果,就表明两个目录中的文件是一致的。

看到这里你可能会想到,既然可以通过 < 将一些命令行的输出内容作为一个文件提供给一个需要接受文件格式的命令,那么在上一篇文章的“最喜欢的演员排序”例子中,就可以省去中间的一些步骤,直接对输出内容执行 sort 操作了。

确实如此,这个例子可以简化成这样:

sort -r <(while read -r name surname films;do echo $films $name $surname ; done < CBactors)

Here 字符串

除此以外,尖括号的重定向功能还有另一种使用方式。

使用 echo 和管道(|)来传递变量的用法,相信大家都不陌生。假如想要把一个字符串变量转换为全大写形式,你可以这样做:

myvar="Hello World" echo $myvar | tr '[:lower:]' '[:upper:]' HELLO WORLD

tr 命令可以将一个字符串转换为某种格式。在上面的例子中,就使用了 tr 将字符串中的所有小写字母都转换为大写字母。

要理解的是,这个传递过程的重点不是变量,而是变量的值,也就是字符串 Hello World。这样的字符串叫做 HERE 字符串,含义是“这就是我们要处理的字符串”。但对于上面的例子,还可以用更直观的方式的处理,就像下面这样:

tr '[:lower:]' '[:upper:]' <<< $myvar

这种简便方式并不需要使用到 echo 或者管道,而是使用了我们一直在说的尖括号。

总结

使用 <> 这两个简单的符号,原来可以实现这么多功能,Bash 又一次为工作的灵活性提供了很多选择。

当然,我们的介绍还远远没有完结,因为还有很多别的符号可以为 Bash 命令带来更多便利。不过如果没有充分理解它们,充满符号的 Bash 命令看起来只会像是一堆乱码。接下来我会解读更多类似的 Bash 符号,下次见!


via: https://www.linux.com/blog/learn/2019/1/more-about-angle-brackets-bash

作者:Paul Brown 选题:lujun9972 译者:HankChow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出