2019年1月

用这些开源游戏来挑战你的战略技能,探索新世界。

长久以来,游戏都是 Linux 的软肋。近些年,Steam、GOG 等游戏发布平台上不少商业游戏都开始支持 Linux,这对于 Linux 的游戏生态来说是件好事,但是我们能在这些平台上玩到的游戏通常是不开源的商业作品。当然,这些游戏在一个开源的操作系统上运行,但对于一个开源提倡者来说这似乎还不够纯粹。

那么,我们能找到既自由开源又能给玩家带来完整游戏体验的优质游戏吗?当然!虽然绝大多数的开源游戏很难和 3A 商业游戏大作竞争,但仍然有不少各种类型的开源游戏,不仅内容有趣而且直接可以通过几大 Linux 发行版本库中直接安装。就算某个游戏在不在某个发行版本的库中,我们也可以在这个游戏项目的网站上找到直接的安装方法。

本篇文章将会介绍策略和模拟类游戏。我已经写了街机游戏桌面卡牌游戏解谜游戏竞速飞行游戏以及角色扮演游戏

开源版“文明”(Freeciv)

Freeciv 可以被视为是文明系列)游戏的开源版本。游戏玩法和文明系列最早期的游戏十分类似,Freeciv 可以让玩家选择选用文明 1 或者文明 2 中的游戏规则设置。Freeciv 中包含了很多元素,例如建造城市、探索世界地图、发展科技以及和其他扩张中的文明竞争。胜利条件包括打败所有其他的文明或建立一个外星殖民地,如果在前两者都没有达成的话,在游戏时间期限前存活下来也可以算作胜利。这个游戏可以和其他玩家联机也可以和 AI 对战,不同的地图集可以改变游戏的外观。

安装 Freeciv,你只需要在终端下运行以下指令。

  • Fedora 用户: dnf install freeciv
  • Debian/Ubuntu 用户:apt install freeciv

MegaGlest

MegaGlest 是一个开源的实时战略游戏,类似暴雪公司制作的游戏魔兽世界星际争霸。玩家控制不同派别的人员、建造新建筑、招募士兵、拓展领土并与敌人作战。在游戏比赛的最开始,玩家仅能建造最基础的建筑和招募最基础的士兵。为了建造更高级的建筑并招募级别更高的人员,玩家必须通过增加建筑和人员从而一路提高科技树、解锁更加高级的选项。当敌人进入国土领域之中,战斗单元将会迎战。但是最好的应对策略是,通过控制战斗单元直接操控每一场战斗。在管理新建筑的建立,新人员的招募的同时控制战斗局势听上去十分困难,但是这就是 RTS(实时战略游戏)游戏的精华所在。MegaGlest 这个游戏提供了大量的人员派别,玩家可以不断尝试这些不同的技巧。

安装 MegaGlest,你只需要在终端下运行以下指令:

  • Fedora 用户: dnf install megaglest
  • Debian/Ubuntu 用户:apt install megaglest

开源版“运输大亨”(OpenTTD)

OpenTTD(见我们的 评测 )是一个开源实现的 运输大亨 。该游戏的目的在于创建一个交通运输网络并获得金钱,从而建立更加复杂的运输网络。这个运输网络包括了船只、巴士、火车、货车和飞机。默认的游戏时间在 1950 和 2050 之间,玩家的目标就是在规定时间内拿到最高的游戏分数。游戏的最终分数基于很多因素,例如货物运输的数量、玩家所拥有的汽车数量以及他们赚到的钱。

安装 OpenTTD,你只需要在终端运行以下指令:

  • Fedora 用户: dnf install openttd
  • Debian/Ubuntu 用户 apt install openttd

韦诺之战 The Battle for Wesnoth

韦诺之战 是目前最完善的开源游戏之一。这个回合制游戏在一个奇幻的故事设定下。游戏在一个六角形网格中进行,各个单元可以互相操作进行战斗。每个类型的单元都有它独特的能力和弱点,因此玩家需要根据这些特点来设计不同的行动。韦诺之战中有很多不同的行动分支,每个行动分支都有它特别的故事线和目标。韦诺之战同时也有一个地图编辑器,感兴趣的玩家可以创作自己的地图以及行动分支。

安装韦诺之战,你只需要在终端运行以下指令:

  • Fedora 用户: dnf install wesnoth
  • Debian/Ubuntu 用户: apt install wesnoth

UFO:外星入侵 UFO: Alien Invasion

UFO: Alien Invasion 是一个开源策略游戏,基于 幽浮系列 X-COM 。 有两个不同的游戏模式: geoscape 和 tactical。在 geoscape 模式下,玩家控制大局、管理基地、开发新技术以及掌控整体策略。 在 tactical 游戏模式下,玩家控制一群士兵并且以回合制的形式直接迎战外星侵略者。两个游戏模式提供了不同的游戏玩法,两者都需要相当复杂的策略和战术。

安装这个游戏,你只需要在终端下运行以下指令:

  • Debian/Ubuntu 用户: apt install ufoai

遗憾的是,UFO: 外星入寝不支持 Fedora 发行版。

如果你知道除了这些以外的开源策略模拟游戏的话,欢迎在评论中分享。


via: https://opensource.com/article/18/8/strategy-simulation-games-linux

作者:Joshua Allen Holm 选题:lujun9972 译者:Scoutydren 校对:wxy

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

这 12 个步骤能确保成功发布。

你写了一个 Python 库。自己觉着这太棒了!如果让人们能够轻松使用它不是很优雅么?这有一个需要考虑的清单,以及在开源 Python 库时要采取的具体步骤。

1、源码

将代码放在 GitHub 上,这里有很多开源项目,并且人们很容易提交拉取请求。

2、许可证

选择一个开源许可证。一般来说 MIT 许可证是一个挺好的宽容许可证。如果你有特定要求,Creative Common 的选择许可证可以指导你完成其它选择。最重要的是,在选择许可证时要记住三条规则:

  • 不要创建自己的许可证。
  • 不要创建自己的许可证。
  • 不要创建自己的许可证。

3、README

将一个名为 README.rst 的文件(使用 ReStructured Text 格式化)放在项目树的顶层。

GitHub 将像 Markdown 一样渲染 ReStructured Text,而 ReST 在 Python 的文档生态系统中的表现更好。

4、测试

写测试。这对你来说没有用处。但对于想要编写避免破坏相关功能的补丁的人来说,它非常有用。

测试可帮助协作者进行协作。

通常情况下,如果可以用 pytest 运行就最好了。还有其他测试工具 —— 但很少有理由去使用它们。

5、样式

使用 linter 制定样式:PyLint、Flake8 或者带上 --check 的 Black 。除非你使用 Black,否则请确保在一个文件中指定配置选项,并签入到版本控制系统中。

6、API 文档

使用 docstrings 来记录模块、函数、类和方法。

你可以使用几种样式。我更喜欢 Google 风格的 docstrings,但 ReST docstrings 也是一种选择。

Sphinx 可以同时处理 Google 风格和 ReST 的 docstrings,以将零散的文档集成为 API 文档。

7、零散文档

使用 Sphinx。(阅读我们这篇文章。)教程很有用,但同样重要的是要指明这是什么、它有什么好处、它有什么坏处、以及任何特殊的考虑因素。

8、构建

使用 tox 或 nox 自动运行测试和 linter,并构建文档。这些工具支持“依赖矩阵”。这些矩阵往往会快速增长,但你可以尝试针对合理的样本进行测试,例如 Python 版本、依赖项版本以及可能安装的可选依赖项。

9、打包

使用 setuptools 工具。写一个 setup.py 和一个 setup.cfg。如果同时支持 Python 2 和 3,请在 setup.cfg 中指定 universal 格式的 wheel。

tox 或 nox 应该做的一件事是构建 wheel 并对已安装的 wheel 进行测试。

避免使用 C 扩展。如果出于性能或绑定的原因一定需要它们,请将它们放在单独的包中。正确打包 C 扩展可以写一篇新的文章。这里有很多问题!

10、持续集成

使用公共持续工具。TravisCICircleCI 为开源项目提供免费套餐。将 GitHub 或其他仓库配置为在合并拉请求之前需要先通过检查,那么你就不必担心在代码评审中告知用户修复测试或样式。

11、版本

使用 SemVerCalVer。有许多工具可以帮助你管理版本:incrementalbumpversionsetuptools\_scm 等都是 PyPI 上的包,都可以帮助你管理版本。

12、发布

通过运行 tox 或 nox 并使用 twine 将文件上传到 PyPI 上发布。你可以通过在 DevPI 中“测试上传”。


via: https://opensource.com/article/18/12/tips-open-sourcing-python-libraries

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

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

Jack Wallen 为 Linux 服务器发行版提供了一些可靠的选择,绝对值回票价。

啊,这个古老的问题:哪种 Linux 发行版最适合做服务器?通常,问这种问题时,所浮现出来的标准的答复就是:

  • RHEL
  • SUSE
  • Ubuntu 服务器
  • Debian
  • CentOS

然而,假如你将眼界放得更宽(不将服务器只看做是 IDC 托管的那种互联网服务器时),可能答案会有点不同。我准备稍微来点不同的。我想做出一个满足入选标准的发行版列表,这些发行版不仅是优秀的候选者,而且易于使用,可以为你的业务中的许多功能提供服务。在某些情况下,我选择的是一些替代品,可以取代其它需要一些工作才能达成要求的操作系统。

我的一些选择是企业级服务器的社区版本,它们可以被视为购买更强大平台的入门级产品。你甚至可以在这里找到一两个作为特定任务平台的候选者。然而,最重要的是,你在此列表中找到的并非寻常的泛泛之辈。

ClearOS

什么是 ClearOS?对于家庭和小型企业用途,你可能找不到比它更好的解决方案。ClearOS 开箱即用,包括了入侵检测、强大的防火墙、带宽管理工具、邮件服务器、域控制器等工具。其目的是将服务器作为一个简单的家庭和 SOHO 服务器,并具有用户友好的基于 Web 的图形化界面,这使得 ClearOS 在某些评比中脱颖而出。从其界面中,你可以找到一个应用程序市场(图 1),其中包含数百个应用程序(其中一些是免费的,而另一些则具有相关费用),这使得扩展 ClearOS 功能集非常容易。换句话说,你可以将 ClearOS 作为你的家庭和小型企业所需的平台。最重要的是,与许多其他替代方案不同,你只需支付所需的软件和支持。

图 1:ClearOS 应用程序市场

有三种版本的 ClearOS:

为了使软件安装更加容易,ClearOS 应用市场允许你通过以下方式进行选择软件:

* 按功能(根据任务显示应用程序) * 按类别(显示相关应用程序组) * 快速选择文件(允许你按预先配置的模板选择,以帮助你快速启动和运行)

换句话说,如果你正在寻找 Linux 的家庭、SOHO 或 SMB 服务器,ClearOS 是一个出色的选择(特别是如果你没有启动和运行标准的 Linux 服务器的能力时)。

Fedora 服务器

你肯定听说过 Fedora Linux。它是市场上最好的前沿发行版之一。但是你知道这个出色的 Fedora 桌面发行版的开发者们也开发了服务器版吗?Fedora 服务器平台是一个短生命周期的、社区支持的服务器操作系统。这使得经验丰富的、或对任何类型的 Linux(或任何操作系统)有经验的系统管理员,可以使用开源社区中提供的最新技术。在这段描述中有三个关键词:

  • 经验丰富
  • 系统
  • 管理员

换言之,新用户就不要考虑了。虽然 Fedora 服务器完全能够处理你抛出的任何任务,但它需要一些拥有更多的 Linux 功夫的人来使它工作并且运行良好。Fedora 服务器非常好的一点是,开箱即用,它包括了市场上用于服务器的开源的基于 Web 的最好的界面之一。通过 Cockpit(图 2),你可以快速浏览系统资源、日志、存储、网络以及拥有管理帐户、服务、应用程序和更新的能力。

 title=

图 2:运行在 Fedora 服务器上的 Cockpit

如果你可以使用最前沿的软件,并想要一个出色的管理仪表板,Fedora 服务器可能就是你要的平台。

NethServer

正如你所发现的那样,NethServer 是每个人都知道的简单 SMB Linux 服务器。通过 NethServer 的最新版本,你的小型企业将得到:

  • 内置 Samba 活动目录控制器 * 与 Nextcloud 的无缝集成 * 证书管理 * HTTPS 透明代理 * 防火墙 * 邮件服务器和过滤器 * Web 服务器和过滤器 * 群件 * IPS / IDS 或 VPN

所有包含的功能都可以通过用户友好的基于 Web 的界面轻松配置,包括单击安装模块以扩展 NethServer 功能集(图 3)。NethServer 与 ClearOS 的区别在于它的设计目的是使管理工作更轻松。换句话说,这个平台提供了更多的灵活性和功能。与面向家庭办公室和 SOHO 部署的 ClearOS 不同,NethServer 在小型商业环境中用起来就像在家庭里使用一样方便。

 title=

图 3:给 NethServer 添加模块

Rockstor

Rockstor 是采用 Linux 和 Btfrs 的高级网络附加存储(NAS)和云存储服务器,可部署用于家庭、SOHO 以及中小型企业。借助 Rockstor,你可以获得一个完整的 NAS /云解决方案,其中包含一个用户友好的基于 Web 的 GUI 工具,管理员可以像普通用户一样轻松使用它来设置。一旦部署好了 Rockstor,你就可以创建存储池、共享、快照、管理复制和用户、共享文件(借助 Samba、NFS、SFTP 和 AFP),甚至扩展它的功能集,这要归功于附加组件(称为 Rock-ons)。Rock-ons 列表包括:

  • CouchPotato(Usenet 和 BitTorrent 用户的下载器)
  • Deluge(BitTorrent 用户的电影下载器)
  • EmbyServer(Emby 媒体服务器)
  • Ghost(专业博主的发布平台)
  • GitLab CE(Git 仓库托管和协作)
  • Gogs Go Git Service(轻量级 Git 版本控制服务器和前端)
  • Headphones(NZB 和 Torrent 的音乐自动下载器)
  • 用于 Squeezebox 设备的罗技 Squeezebox 服务器
  • MariaDB(关系型数据管理系统)
  • NZBGet(高效的 usenet 下载器)
  • OwnCloud-Official(安全的文件共享和托管)
  • Plexpy(基于 Python 的 Plex 用量跟踪器)
  • Rocket.Chat(开源聊天平台)
  • SaBnzbd(Usenet 下载器)
  • Sickbeard(用于电视节目的互联网个人视频录像机)
  • Sickrage(电视节目的自动视频库管理器)
  • Sonarr(Usenet 和 BitTorrent 用户的个人视频录像机)
  • Symform(备份设备)

Rockstor 还包括了一目了然的仪表板,使管理员可以快速访问他们所需的有关其服务器的所有信息(图 4)。

 title=

图 4: Rockstor 面板

Zentyal

Zentyal 是另一个小型企业服务器,可以很好地处理多个任务。如果你正在寻找可以处理以下内容的 Linux 发行版:

  • 目录和域服务器
  • 邮件服务器
  • 网关
  • DHCP、DNS 和 NTP 服务器
  • 认证机构(CA)
  • VPN
  • 实时消息(IM)
  • FTP 服务器
  • 反病毒
  • SSO 认证
  • 文件共享
  • RADIUS 认证
  • 虚拟化管理
  • 等等

Zentyal 可能是你的新选择。从 2004 年 Zentyal 就存在了,它基于 Ubuntu Server,因此它拥有坚实的基础和丰富的应用程序。在 Zentyal 仪表板的帮助下(图 5),管理员可以轻松管理:

  • 系统
  • 网络
  • 日志
  • 软件更新和安装
  • 用户/组
  • 文件共享
  • 邮件
  • DNS
  • 防火墙
  • 证书
  • 等等

图 5:Zentyal 仪表板

向 Zentyal 服务器添加新组件只需要打开仪表板,单击“软件管理” -> “Zentyal 组件”,选择要添加的组件,然后单击安装。Zentyal 可能会遇到的一个问题是,它提供不了与 Nethserver 和 ClearOS 一样多的插件。但它提供的服务,则做得非常好。

更多来自于

这个 Linux 服务器列表显然不是详尽无遗的。然而,这是一种对你可能没有听说过的五大服务器发行版的独特视角。当然,如果你更愿意使用更传统的 Linux 服务器发行版,你可以随时坚持使用 CentOSUbuntu 服务器SUSERHELDebian……它们大多都出现在市场上最好的服务器发行版列表中。但是,如果你正在寻找一些不同的东西,那么试试这五个发行版中的一个。

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


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

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

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

将小马宝莉的魔力带到终端

欢迎再次来到 Linux 命令行玩具日历。如果这是你第一次访问该系列,你甚至可能会问自己什么是命令行玩具。我们正在思考中,但一般来说,它可能是一个游戏,或任何简单的消遣,可以帮助你在终端玩得开心。

很可能你们中的一些人之前已经看过我们日历中的各种玩具,但我们希望每个人至少见到一件新事物。

读者 Lori 在我之前关于 cowsay 的文章的评论中提出了今天玩具的建议:

“嗯,我一直在玩一个叫 ponysay 的东西,它似乎是你的 cowsay 的彩色变种。”

我对此感到好奇,并去看了一下,发现没有让我失望。

简而言之,ponysay 的 cowsay 的重写,它包括了来自小马宝莉中的许多全彩色人物,你可以用它在 Linux 命令行输出短句。它实际上是一个非常完善的项目,拥有超过 400 个字符和字符组合,它还有让人难以置信的的 78 页的 PDF 文档涵盖了所有的用法。

要安装 ponysay,你需要查看项目的 README 来选择最适合你的发行版和情况的安装方法。由于 ponysay 似乎没有为我的 Fedora 发行版打包,我选择试用 Docker 容器镜像,但你可以选择最适合你的方法。从源码安装可能也适合你。

作为一个业余容器用户,我很想试试 podman 来代替 docker。至少对于我而言,它可以正常工作。

$ podman run -ti --rm mpepping/ponysay 'Ponytastic'

输出很神奇,我建议你也试下,然后告诉我你最喜欢的。这是我其中一个:

它的开发人员选择用 Pony 来编写代码。(更新:很遗憾我写错了。虽然 Gihutb 根据它的文件扩展名认为它是 Pony,但是它是用 Python 写的。)Ponysay 使用 GPLv3 许可,你可以在 GitHub 中获取它的源码。

你有特别喜欢的命令行小玩具需要我介绍的吗?这个系列要介绍的小玩具大部分已经有了落实,但还预留了几个空位置。如果你有特别想了解的可以评论留言,我会查看的。如果还有空位置,我会考虑介绍它的。如果没有,但如果我得到了一些很好的意见,我会在最后做一些有价值的提及。

查看昨天的玩具,在 Linux 终端中用火焰放松,记得明天再来!


via: https://opensource.com/article/18/12/linux-toy-ponysay

作者:Jason Baker 选题:lujun9972 译者:geekpi 校对:wxy

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

使用此框架编写断言,提高开发测试的准确性。

测试金字塔的底部是单元测试。单元测试每次只测试一个代码单元,通常是一个函数或方法。

通常,设计单个单元测试是为了测试通过一个函数或特定分支的特定执行流程,这使得将失败的单元测试和导致失败的 bug 对应起来变得容易。

理想情况下,单元测试很少使用或不使用外部资源,从而隔离它们并使它们更快。

单元测试套件通过在开发过程的早期发现问题来帮助维护高质量的产品。有效的单元测试可以在代码离开开发人员机器之前捕获 bug,或者至少可以在特定分支上的持续集成环境中捕获 bug。这标志着好的和坏的单元测试之间的区别:好的测试通过尽早捕获 bug 并使测试更快来提高开发人员的生产力。坏的测试降低了开发人员的工作效率。

当测试附带的特性时,生产率通常会降低。当代码更改时测试会失败,即使它仍然是正确的。发生这种情况是因为输出的不同,但在某种程度上是因为它不是 函数契约 function’s contract 的一部分。

因此,一个好的单元测试可以帮助执行函数所提交的契约。

如果单元测试中断,那意味着该契约被违反了,应该(通过更改文档和测试)明确修改,或者(通过修复代码并保持测试不变)来修复。

虽然将测试限制为只执行公共契约是一项需要学习的复杂技能,但有一些工具可以提供帮助。

其中一个工具是 Hamcrest,这是一个用于编写断言的框架。最初是为基于 Java 的单元测试而发明的,但它现在支持多种语言,包括 Python

Hamcrest 旨在使测试断言更容易编写和更精确。

def add(a, b):
    return a + b

from hamcrest import assert_that, equal_to

def test_add():
    assert_that(add(2, 2), equal_to(4))  

这是一个用于简单函数的断言。如果我们想要断言更复杂的函数怎么办?

def test_set_removal():
    my_set = {1, 2, 3, 4}
    my_set.remove(3)
    assert_that(my_set, contains_inanyorder([1, 2, 4]))
    assert_that(my_set, is_not(has_item(3)))

注意,我们可以简单地断言其结果是任何顺序的 124,因为集合不保证顺序。

我们也可以很容易用 is_not 来否定断言。这有助于我们编写精确的断言,使我们能够把自己限制在执行函数的公共契约方面。

然而,有时候,内置的功能都不是我们真正需要的。在这些情况下,Hamcrest 允许我们编写自己的 匹配器 matchers

想象一下以下功能:

def scale_one(a, b):
    scale = random.randint(0, 5)
    pick = random.choice([a,b])
    return scale * pick

我们可以自信地断言其结果均匀地分配到至少一个输入。

匹配器继承自 hamcrest.core.base_matcher.BaseMatcher,重写两个方法:

class DivisibleBy(hamcrest.core.base_matcher.BaseMatcher):
    def __init__(self, factor):
        self.factor = factor

    def _matches(self, item):
        return (item % self.factor) == 0

    def describe_to(self, description):
        description.append_text('number divisible by')
        description.append_text(repr(self.factor))

编写高质量的 describe_to 方法很重要,因为这是测试失败时显示的消息的一部分。

def divisible_by(num):
    return DivisibleBy(num)

按照惯例,我们将匹配器包装在一个函数中。有时这给了我们进一步处理输入的机会,但在这种情况下,我们不需要进一步处理。

def test_scale():
    result = scale_one(3, 7)
    assert_that(result,
                any_of(divisible_by(3),
                divisible_by(7)))

请注意,我们将 divisible_by 匹配器与内置的 any_of 匹配器结合起来,以确保我们只测试函数提交的内容。

在编辑这篇文章时,我听到一个传言,取 “Hamcrest” 这个名字是因为它是 “matches” 字母组成的字谜。嗯…

>>> assert_that("matches", contains_inanyorder(*"hamcrest")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/moshez/src/devops-python/build/devops/lib/python3.6/site-packages/hamcrest/core/assert_that.py", line 43, in assert_that
    _assert_match(actual=arg1, matcher=arg2, reason=arg3)
  File "/home/moshez/src/devops-python/build/devops/lib/python3.6/site-packages/hamcrest/core/assert_that.py", line 57, in _assert_match
    raise AssertionError(description)
AssertionError:
Expected: a sequence over ['h', 'a', 'm', 'c', 'r', 'e', 's', 't'] in any order
      but: no item matches: 'r' in ['m', 'a', 't', 'c', 'h', 'e', 's']

经过进一步的研究,我找到了传言的来源:它是 “matchers” 字母组成的字谜。

>>> assert_that("matchers", contains_inanyorder(*"hamcrest"))
>>>

如果你还没有为你的 Python 代码编写单元测试,那么现在是开始的好时机。如果你正在为你的 Python 代码编写单元测试,那么使用 Hamcrest 将允许你使你的断言更加精确,既不会比你想要测试的多也不会少。这将在修改代码时减少误报,并减少修改工作代码的测试所花费的时间。


via: https://opensource.com/article/18/8/robust-unit-tests-hamcrest

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

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

使用 fortune 实用程序将名言和俏皮话带到命令行。

这是 12 月,如果你还没有找到一款能激发你灵感的科技降临节日历,那么,也许这个系列可以。从现在到 24 日,每天我们都会为你带来一个不同的 Linux 命令行玩具。你可能会问,什么是命令行玩具?它可能是一个游戏或任何简单的娱乐程序,为你的终端带来一点点快乐。

你可能之前已经看过其中的一些,我们希望你也能发现一些新的东西。不管怎样,我们都希望你在关注时保有乐趣。

今天的玩具是 fortune,它很古老。它的版本可以追溯到 1980 年,当时它包含在 Unix 中。我在 Fedora 中安装的版本是在 BSD 许可下提供的,我可以使用以下命令获取它。(LCTT 译注:fortune 这个命令得名于 fortune cookies,是流行于西方的中餐馆的一种脆饼干,里面包含格言、幸运数字等。)

$ sudo dnf install fortune-mod -y

你的发行版可能会有所不同。在某些情况下,你可能需要在 fortune 命令之外单独安装那些“幸运饼干”(尝试在你的包管理器中搜索 “fortunes”)。你还可以在 GitHub 上查看它的源代码,然后,只需运行 fortune 即可获得好运。

$ fortune
"Time is an illusion.  Lunchtime doubly so."
-- Ford Prefect, _Hitchhiker's Guide to the Galaxy_

那么,你为什么会在终端上需要 fortune 呢?当然是为了好玩啦。也许你想将它们添加到系统上的每天消息(motd)中?

就我个人而言,当我使用终端来解析文本时,我喜欢使用 fortune 命令作为一段内置的虚拟数据,特别是使用正则表达式时,我想要一些简单的东西来尝试一下。

例如,假设我使用 tr 命令来测试转换,用数字 3 替换字母 e。

$ fortune | tr 'eE' '3'
Unix 3xpr3ss:
All pass3ng3r bring a pi3c3 of th3 a3roplan3 and a box of tools with th3m to
th3 airport. Th3y gath3r on th3 tarmac, arguing constantly about what kind
of plan3 th3y want to build and how to put it tog3th3r. 3v3ntually, th3
pass3ng3rs split into groups and build s3v3ral diff3r3nt aircraft, but giv3
th3m all th3 sam3 nam3. Som3 pass3ng3rs actually r3ach th3ir d3stinations.
All pass3ng3rs b3li3v3 th3y got th3r3.

那么你的发行版带来了什么幸运饼干呢?看看你的 /usr/share/games/fortune 目录,找到它们。以下我最喜欢的几个。

Never laugh at live dragons.
                -- Bilbo Baggins [J.R.R. Tolkien, "The Hobbit"]

I dunno, I dream in Perl sometimes...
                -- Larry Wall in  <[email protected]>

I have an existential map.  It has "You are here" written all over it.
                -- Steven Wright

关于 fortune想要了解更多?当然,你可以经常查看 man 页来了解更多选项,或者在维基百科上阅读更多关于此命令的历史信息。

你有特别喜欢的命令行小玩具需要我介绍的吗?这个系列要介绍的小玩具大部分已经有了落实,但还预留了几个空位置。请在评论区留言,我会查看的。如果还有空位置,我会考虑介绍它的。如果没有,但如果我得到了一些很好的意见,我会在最后做一些有价值的提及。

看看昨天的玩具:驾驶火车头通过你的 Linux 终端。记得明天再来!


via: https://opensource.com/article/18/12/linux-toy-fortune

作者:Jason Baker 选题:lujun9972 译者:MjSeven 校对:wxy

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