分类 技术 下的文章

Bitsy 是一个开源电子游戏设计软件。 其简约的功能使任何人都可以探索他们的创造力。

 title=

有许多游戏设计程序和各种游戏设计方法,但对我来说,最突出的是 Bitsy。Bitsy 由 Adam Le Doux 在 2017 年创建,在 MIT 许可下发布,用其创造者的话说,Bitsy 是:“一个用于小游戏或世界的编辑器。其目标是使制作游戏变得容易,在那里你可以四处走动,与人交谈,并到某个地方。”

安装 Bitsy

Bitsy 是用 JavaScript 编写的,可以制作 HTML5 游戏。你可以从 GitHub它的创造者的网站 下载它。它很小,很容易学习,有独特的位图艺术风格,有意在功能上有所欠缺,而且能做的事情有限。

尽管(也许是因为)这些限制,Bitsy 自发布以来吸引了一个充满活力的用户社区。用户对 Bitsy 采取的两个主要方法是:接受限制和寻求突破限制,看看你能走多远。

创意的界限

Bitsy 的局限性意味着接受这些局限性仍能制作出令人满意的游戏,这就成为一个需要创造性和创造力的挑战。你可以在 Itch.io 网站 上看到和玩一些用 Bitsy 制作的令人印象深刻的游戏。同时,人们也想出了一些黑科技、调整和扩展。这些都在不牺牲 Bitsy 的本质的前提下突破了一些限制。

Bitsy 的基本元素是一个代表玩家的头像、发生游戏动作的房间、精灵(可以与之互动的非玩家角色)和物品。有一个用于创建这些元素的位图编辑器,它也支持简单的两帧动画。

 title=

在 Bitsy 中工作依赖于条件变量,而不是成熟的脚本,这使得没有编码背景的人容易学习,但有时会让那些期待更多灵活性的人感到沮丧。

如果你想了解 Bitsy 的基本情况,你可以在创作者的网站上了解,或者下载并在本地运行。

 title=

文档

关于 Bitsy 的文档并不是只有一个地方可以去看。如果你想看 Bitsy 的操作,可以在 YouTube 上找到各种短视频。我更喜欢基于文本的教程,我发现最有用的三个资源是:

阅读这些教程,尝试一些 Bitsy 游戏,并开始创造你自己的东西。开始时要保持简单。当你熟悉了 Bitsy,你可能想研究一下人们为它创造的一些 工具、黑科技和扩展

它也是教育工作者的完美工具,甚至还有教育工作者 Hal Meeks 的 Bitsy 课程 可供在线学习。

你还可以在 Itch.io 网站 上找到人们为 Bitsy 制作的大量游戏资源。

Twine 整合

你可能已经尝试过流行的基于浏览器的游戏开发工具 Twine。你可以将 Bitsy 与 Twine 不同程度地整合。整合的范围可以从简单地将 Bitsy 游戏放在一个 iframe 中显示在你的 Twine 游戏中,到在两个引擎之间共享变量和对话命令,让你在 Bitsy 游戏中执行基本的 Twine 命令!如果你对这些感兴趣,那么请看:

给初学者的 Bitsy

初学者很容易入门 Bitsy,无论你是编程新手还是仅仅是游戏设计的新手。有了它,你可以探索它在激发创造力、想象力和创造性方面的所有可能性。


via: https://opensource.com/article/22/1/bitsy-game-design

作者:Peter Cheer 选题:lujun9972 译者:geekpi 校对:wxy

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

Firefox 显然是 Linux 用户中最受欢迎的开源网络浏览器之一。

事实上,它是 可用于 Linux 的最佳网络浏览器 之一。但是,它的附加组件(或扩展组件)如何呢?

考虑到你更喜欢开源的解决方案,你是否在使用开源服务的附加组件?有哪些你可以安装的最好的开源 Mozilla Firefox 附加组件?

你应该尝试的开源 Firefox 扩展程序

需要注意的是,在 Firefox 中并不是每个附加组件都是开源的。

此外,有几个开源项目的 Firefox 附加组件采用了不同的许可证。

1、Dark Reader

Dark Reader 是一个流行的浏览器扩展,让你打开网站的深色模式。该扩展只是简单地改变背景和文本颜色,以融合深色模式主题。

在默认情况下,它与几乎所有网站都能很好地配合。然而,如果你认为深色模式无法阅读(或不好看),你也可以自定义颜色、对比度、亮度和灰度。

你也可以选择在特定的网站上启用它,而在其他网站上禁用它。在这两种情况下,你都可以创建一个网站白名单/黑名单的列表。

它是一个尊重用户隐私的开源项目。你可以在它的 GitHub 页面 中了解更多关于它的信息,或者安装该附加组件来尝试它。

2、Bitwarden

毋庸置疑,这是现有的 最佳密码管理器 之一。

Bitwarden 是一个开源的密码管理器,提供各种功能。它专注于提供有竞争力的开源解决方案。

这个用于 Mozilla Firefox 的密码管理器插件并不亚于任何其他类似产品。你可以通过该扩展获得所有的基本功能,包括生成密码、管理你的保险库以及一些高级选项。

在我的使用场景中,我没有发现这个扩展有任何不足之处。如果你还没有试过,你应该尝试一下这个插件。你可以看看它的 GitHub页面 来了解更多信息。

3、Vimium-FF

这是一个受 Vim 键盘快捷键 启发的开源工具,最初出现在 Chrome 浏览器上,后被移植到 Firefox。

Mozilla Firefox 上的 Vimium 附加组件还在开发中,最近没有新版本。然而,作为一个实验性的附加组件,它仍然拥有优秀的用户评价。

这个附加组件可以让你使用键盘快捷方式来改善你的浏览体验。例如,你可以设置快捷键来滚动、查看源代码、启用插入模式、浏览历史记录、检查下载等。

如果你对键盘快捷键很熟悉,这个附加组件应该是你的菜,尝试一下吧。

你可以找到它的 GitHub 页面,也可以试试它的几个定制版本(复刻)。

4、uBlock Origin

如果你想摆脱网站中的那些动来动去的元素,以改善浏览体验,uBlock Origin 是一个出色的内容拦截器。

首先,它能阻止各种广告、跟踪器、弹出式窗口,以使网页的加载速度更快。如果一些网页在你的浏览器中加载时出现卡顿,它应该会派上用场。

如果一个网站不能正常运行,你也可以选择选择性地阻止或允许 JavaScript。它还具有过滤列表的功能,帮助你积极地阻断或尽量减少阻断,以平衡网络浏览体验而不破坏网站。

诸如阻止恶意域名、阻止大于特定尺寸的媒体等高级功能,能帮助你保持安全并节省网络带宽。查看其 GitHub页面 以了解更多技术细节。

5、LanguageTool

注意: 在这个列表中,我们尽量推荐完全开源的 Firefox 附加组件。但是,这是一个例外,作为一个非 FOSS 附加组件,其服务最初是开源的,但该扩展不是。

LanguageTool 是一个开源的语法和拼写检查器,它尊重你的隐私,使它成为与 Grammarly 和其他同类产品相当的替代品。它可以免费使用,但可以选择升级为高级更正功能。

对于基本的拼写检查和常见的语法错误,它应该是足够好的。在我写这篇文章的时候,我的 LanguageTool 扩展已经激活。这不仅仅是一个注重隐私的开源替代品,它的工作速度超快,不会影响你的写作体验。

服务器端是开源的,但不幸的是,该附加组件不是开源的。他们澄清了原因,因为他们不希望竞争对手使用该插件而没有任何回报(更多内容见他们的 论坛帖子)。

然而,Mozilla 在它每次发布时都能审查源代码,这使得它成为一个值得推荐的附加组件。你可以在其 官方网站 或其 GitHub 页面 上探索关于该工具的更多信息。

6、Tabby

如果你想方便地管理具有不同活动窗口的多个标签,Tabby 应该会派上用场。

它简化了管理一个浏览器的多个标签和窗口的方法,还可以让你保存标签/窗口以便以后使用。说到标签管理,Firefox 并不是最棒的,所以你可能想试试这个。

你可以查看它的 GitHub 页面 或者安装这个附加组件来了解更多。

7、Emoji

在计算机上挑选或使用表情符并不容易。有了这个开源的 扩展,你就只需点击一下就可以轻松地将几个表情符复制到剪贴板。

该插件是完全开源的,并且还使用一些开源字体。

你可以在其 GitHub 页面 上找到更多关于它的信息。

8、DownThemAll

DownThemAll 是一个强大的插件,可以轻松地从一个网页上下载多个文件/媒体。你可以选择一键下载所有文件,或者自定义你想要的文件。

还有一些额外的选项可以自定义文件名、基于队列的下载和高级选择。

你可以在其 官方网站GitHub 页面 上了解它的更多信息。

9、Tomato Clock

如果你想在你的网络浏览器中实现 Pomodoro 功能(就像 Vivaldi 开箱即用提供的功能),Tomato Clock 是你需要的插件。

换句话说,它可以让你设置定时器,帮助你把工作分成若干个时间段,中间有短暂的休息。这应该有助于你保持生产力,而不会被工作压垮。

它使用起来很简单,还能显示一些使用统计,以了解你对它的利用情况。

你可以探索它的 GitHub 页面 了解技术信息,或者获取该扩展来开始。

总结

如果你是一个狂热的 Firefox 用户,我建议你看看这个 Firefox 键盘快捷键的有用清单。我们也有一个 Firefox 罕为人知的功能 列表。你也可以去看看。

虽然还有其他几个有用的 Firefox 附加组件,但我把这个列表限制在我自己使用的最好的那些。

你最喜欢的开源 Firefox 附加组件有哪些?请在下面的评论中告诉我。


via: https://itsfoss.com/best-firefox-add-ons/

作者:Ankush Das 选题:lujun9972 译者:wxy 校对:wxy

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

用这个开源的终端会话记录器 Asciinema 来展示终端会话。

 title=

支持电话是很重要的,而且最后往往是令人满意的,但明确的沟通行为对每个参与的人来说都是艰巨的。如果你曾经参加过支持电话,你可能会花好几分钟拼出了最短的命令,并详细解释了空格和回车的位置。虽然直接拿过来用户电脑的控制权往往更容易,但这并不是真正的教育的最佳方式。你可以尝试向用户发送一个屏幕记录,而他们可以复制命令并粘贴到自己的终端。

Asciinema 是一个开源的终端会话记录器。与 scriptscriptreplay 命令类似,Asciinema 准确记录了你的终端显示。它将你的“电影”记录保存到一个文本文件中,然后根据需要进行回放。你可以把你的电影上传到 Asciinema.org,就像你在互联网上分享任何其他视频一样,你甚至可以把你的电影嵌入到网页中。

安装 Asciinema

在 Linux 上,你可以使用你的包管理器安装 Asciinema。

在 Fedora、CentOS、Mageia 或类似系统上:

$ sudo dnf install asciinema

在 Debian、Linux Mint 或类似系统上:

$ sudo apt install asciinema

在 macOS 上,你可以用 Homebrew 安装:

$ sudo brew install asciinema

在 BSD 和任何其它平台上使用 Pkgsrc

$ cd /usr/pkgsrc/misc/py-asciinema
$ sudo bmake install clean

从文本中制作电影

要用 Asciinema 开始录制,你可以使用 rec 子命令:

$ asciinema rec mymovie.cast
asciinema: recording asciicast to mymovie.cast
asciinema: press <ctrl-d> or type "exit" when you're done

一些友好的输出信息提醒你,你正在录制,并告诉你如何停止:按 Ctrl+D 或直接输入 exit

当 Asciinema 处于活动状态时,你在终端所做的一切都会被记录下来。这包括输入、输出、错误、尴尬的停顿、错误或成功。如果在录制时,在你的终端中查看它,它就会被剪断。

当你演示完终端如何工作时,按 Ctrl+D 或输入 exit 来停止记录。

在这个例子中,产生的文件 mymovie.cast 是一个时间戳和动作的集合,它用作回放所使用的脚本(像电影脚本一样)。

{"version": 2, "width": 139, "height": 36, "timestamp": 1641457358, "env": {"SHELL": "/bin/bash", "TERM": "xterm-256color"}}
[0.05351, "o", "\u001b]0;seth:~\u0007"]
[0.05393, "o", "\u001b[1;31m$ \u001b[00m"]
[1.380059, "o", "e"]
[1.443823, "o", "c"]
[1.514674, "o", "h"]
[1.595238, "o", "o"]
[1.789562, "o", " "]
[2.09658, "o", "\""]
[2.19683, "o", "h"]
[2.403994, "o", "e"]
[2.466784, "o", "l"]
[2.711183, "o", "lo"]
[3.120852, "o", "\""]
[3.427886, "o", "
hello
"]
[...]

如果你犯了一个错误,你可以通过删除重现错误的行来去除这个错误。如果你发现自己在录制过程中做了很多命令行修改或冗长的停顿,你可以安装并使用 asciinema-edit 工具,它可以通过你定义的时间戳或消除空闲时间来剪掉这些“镜头”片段。

播放 Asciinema 电影

你可以使用 play 子命令回放你的 Asciinema:

$ asciinema play mymovie.cast

这会接管你的终端会话,并使其成为最接近银幕的形式(除了那次你通过 telnet 观看 ASCII 格式的星球大战)。这个基于文本的电影播放,向你的用户展示了一个复杂的任务是如何完成的。当然,播放的 实际 命令并不真正执行。这不是一个正在运行的 shell 脚本,所以即使你在电影中创建了一个 hello.txt 文件,在播放后也不会有一个新的 hello.txt。这只是为了展示。

然而,它又不仅仅是一个展示。你可以暂停 Asciinema 电影,选择你在屏幕上看到的文本,并将其粘贴到一个活动终端以运行该命令。Asciinema 是有用的文档。它向用户展示了如何完成一项任务,并允许他们进行复制和粘贴以确保准确性。

上传你的 Asciinema 电影

目前还没有像大片一样的 Asciinema 电影,但你可以把你的电影上传到 Asciinema.org,与全世界分享:

$ asciinema upload mymovie.cast

如果你习惯了 YouTube 上传所花费的时间,你会对 Asciinema 电影的传输速度感到惊喜。一个 .cast 文件通常只有几千字节,最多几兆字节,所以上传几乎是瞬间完成的。你不需要注册账户来分享你的电影,但所有无人认领的电影将在七天后会被删除。为了保存你的杰作,你可以在 Asciinema 上开设一个账户,然后坐等电影学院的电话。

Asciinema 作为文档

Asciinema 是演示最基本概念的好方法。因为它保留了从录制中复制和粘贴代码的能力,提供了按需暂停和播放的能力,并且完全准确地描绘了它的内容,它不仅仅是屏幕录像,它要好得多。无论你是用它来向你的朋友炫耀你的终端技能,还是用它来教育同事和学生,Asciinema 都是一个无价的、社交的、可利用的工具。


via: https://opensource.com/article/22/1/record-terminal-session-asciinema

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

CrowdSec 门卫被设计成可以包含在任何 PHP 应用程序中,以帮助阻止攻击者。

 title=

PHP 是 Web 上广泛使用的一种编程语言,据估计有近 80% 的网站使用它。我在 CrowdSec 的团队决定,我们需要为服务器管理员提供一个 PHP 门卫,以帮助抵御那些可能试图与 PHP 文件互动的机器人和不良分子。

CrowdSec 门卫可以在应用栈的各个层面上进行设置:Web 服务器、防火墙、CDN 等等。本文关注的是另外一个层次:直接在应用层面设置补救措施。

由于各种原因,直接在应用程序中进行补救是有帮助的:

  • 它为潜在的安全威胁提供了业务逻辑上的答案。
  • 它提供了关于如何应对安全问题的自由。

虽然 CrowdSec 已经发布了一个 WordPress 门卫,但这个 PHP 库被设计成可以包含在任何 PHP 应用中(例如 Drupal)。该门卫有助于阻止攻击者,用验证码挑战他们,让人类通过,同时阻止机器人。

先决条件

本教程假定你在 Linux 服务器上运行 Drupal,并使用 Apache 作为 Web 服务器

第一步是在你的服务器上 安装 CrowdSec。你可以用 官方安装脚本 来完成。如果你使用的是 Fedora、CentOS 或类似系统,请下载 RPM 版本:

$ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.rpm.sh

在 Debian 和基于 Debian 的系统上,下载 DEB 版本:

$ curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh

这些脚本很简单,所以仔细阅读你下载的脚本,以验证它是否导入了 GPG 密钥并配置了一个新的存储库。当你清楚了它的作用后,就执行它,然后安装。

$ sudo dnf install crowdsec || sudo apt install crowdsec

CrowdSec 会自己检测到所有现有的服务,所以不需要进一步的配置就可以立即得到一个能发挥功能的设置。

测试初始设置

现在你已经安装了 CrowdSec,启动一个 Web 应用漏洞扫描器,比如 Nikto,看看它的表现如何:

$ ./nikto.pl -h http://<ip_or_domain>

 title=

该 IP 地址已被检测到触发了各种场景,最后一个是 crowdsecurity/http-crawl-non_statics

 title=

然而,CrowdSec 只检测问题,需要一个门卫来应用补救措施。这就是 PHP 门卫发挥作用的地方。

用 PHP 门卫进行补救

现在你可以检测到恶意行为了,你需要在网站层面上阻止 IP。在这个时候,没有用于 Drupal 的门卫可用。然而,你可以直接使用 PHP 门卫。

它是如何工作的?PHP 门卫(和其他门卫一样)对 CrowdSec 的 API 进行调用,并检查是否应该禁止进入的 IP,向他们发送验证码,或者允许他们通过。

Web 服务器是 Apache,所以你可以使用 Apache 的安装脚本

$ git clone https://github.com/crowdsecurity/cs-php-bouncer.git
$ cd cs-php-bouncer/
$ ./install.sh --apache

 title=

门卫的配置是用来保护整个网站。可以通过调整 Apache 的配置保护网站的一个特定部分。

尝试访问网站

PHP 门卫已经安装并配置好。由于之前的网络漏洞扫描行动,你被禁止了,你可以尝试访问该网站看看:

 title=

门卫成功阻止了你的流量。如果你在以前的 Web 漏洞扫描后没有被禁止,你可以用增加一个手动决策:

$ cscli decisions add -i <your_ip>

对于其余的测试,删除当前的决策:

$ cscli decisions delete -i <your_ip>

更进一步

我封锁了试图破坏 PHP 网站的 IP。这很好,但那些试图扫描、爬取或 DDoS 的 IP 怎么办?这些类型的检测可能会导致误报,那么为什么不返回一个验证码挑战来检查它是否是一个真正的用户(而不是一个机器人),而不是封锁 IP?

检测爬虫和扫描器

我不喜欢爬虫和坏的用户代理,在 Hub 上有各种方案可以用来发现它们。

确保用 cscli’ 下载了 Hub 上的base-http-scenarios` 集合:

$ cscli collections list | grep base-http-scenarios
crowdsecurity/base-http-scenarios  ✔️ enabled  /etc/crowdsec/collections/base-http-scenarios.yaml

如果没有找到,请安装它,并重新加载 CrowdSec:

$ sudo cscli collections install crowdsecurity/base-http-scenarios
$ sudo systemctl reload crowdsec

用验证码补救

由于检测 DDoS、爬虫或恶意的用户代理可能会导致误报,我更倾向于对任何触发这些情况的 IP 地址返回一个验证码,以避免阻止真正的用户。

为了实现这一点,请修改 profiles.yaml 文件。

/etc/crowdsec/profiles.yaml 中的配置文件的开头添加这个 YAML 块:

---
# /etc/crowdsec/profiles.yaml
name: crawler_captcha_remediation
filter: Alert.Remediation == true && Alert.GetScenario() in ["crowdsecurity/http-crawl-non_statics", "crowdsecurity/http-bad-user-agent"]

decisions:
  - type: captcha
    duration: 4h
on_success: break

有了这个配置文件,任何触发 crowdsecurity/http-crawl-non_staticscrowdsecurity/http-bad-user-agent 场景的 IP 地址都会被强制执行一个验证码(持续 4 小时)。

接下来,重新加载 CrowdSec:

$ sudo systemctl reload crowdsec

尝试自定义的补救措施

重新启动 Web 漏洞扫描器会触发很多场景,所以你最终会再次被禁止。相反,你可以直接制作一个触发 bad-user-agent 场景的攻击(已知的坏用户代理列表在 这里)。请注意,你必须激活该规则两次才能被禁止。

$ curl --silent -I -H "User-Agent: Cocolyzebot" http://example.com > /dev/null
$ curl -I -H "User-Agent: Cocolyzebot" http://example.com
HTTP/1.1 200 OK
Date: Tue, 05 Oct 2021 09:35:43 GMT
Server: Apache/2.4.41 (Ubuntu)
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: no-cache, must-revalidate
X-Content-Type-options: nosniff
Content-Language: en
X-Frame-Options: SAMEORIGIN
X-Generator: Drupal 7 (http://drupal.org)
Content-Type: text/html; charset=utf-8

当然,你可以看到,你的行为会被抓住。

$ sudo cscli decisions list

 title=

如果你试图访问该网站,不会被简单地被阻止,而是会收到一个验证码:

 title=

一旦你解决了这个验证码,你就可以重新访问网站了。

接下来,再次解禁自己:

$ cscli decisions delete -i <your_ip>

启动漏洞扫描器:

$ ./nikto.pl -h http://example.com

与上次不同的是,你现在可以看到,你已经触发了几个决策:

 title=

当试图访问网站时,禁止决策具有优先权:

 title=

总结

这是一个帮助阻止攻击者进入 PHP 网站和应用程序的快速方法。本文只包含一个例子。补救措施可以很容易地扩展,以适应额外的需求。要了解更多关于安装和使用 CrowdSec 代理的信息,查看这个方法指南 来开始。

要下载 PHP 门卫,请到 CrowdSec HubGitHub


via: https://opensource.com/article/22/1/php-website-bouncer-crowdsec

作者:Philippe Humeau 选题:lujun9972 译者:wxy 校对:wxy

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

System76 分享了其即将推出的使用 Rust 开发的 COSMIC 桌面的顶部面板草图。看起来令人惊叹!

System76 令人兴奋的用 Rust 开发的 COSMIC 桌面的开发工作现在正在进行中。

虽然我们已经用早期的代码 试过了,但我们现在可以看到更多的东西。从其 GitHub 仓库Figma 文档 的一些原型中,我们可以看到它的更多信息。

值得注意的是,我们可以看到顶部面板和系统托盘,正如你在 COSMIC 桌面上所期望的那样。

这仍是一项正在进行的工作,可能会有变化。

COSMIC 桌面的顶部面板

Pop!\_OS 依赖于 GNOME 扩展来通过顶部面板或系统托盘图标提供更多的功能。

随着即将推出的使用 Rust 开发的 COSMIC 桌面,看起来他们正在创建新的小程序,与当前的外观相融合,并提供更多的功能。

开发者 Eduardo Flores 分解研究 了它,发现了关键的区别以及 System76 的目标是如何使其发挥作用。

而且,这也是它更有趣的地方:

看起来 System76 正在摆脱传统的“扩展”,计划为第三方小程序设计一个 API,这与 KDE、XFce 和其他公司的做法类似。

这是一个令人兴奋的消息,将使 COSMIC 成为一个更强大的桌面环境,使其可以扩展和定制。

另外,似乎这些小程序也可以和顶部面板一起放在坞站里。我们会在其未来的某个测试版中看到更多的实际情况。

在这里,让我重点介绍一下从现有的草图中观察到的基本变化:

1、声音小程序

用 Rust 开发的 COSMIC 桌面(声音小程序)

与我们现在所拥有的相比,COSMIC 的目标是增加细化的控制,如选择输入/输出设备、在顶部面板上切换媒体控制的选项、控制媒体播放,以及访问声音设置。

虽然草图没有显示专辑封面,但在发布前会包括它。

作为参考,以下是 Pop!\_OS 顶部面板选项现在的样子。

Pop!_OS 21.10(COSMIC,基于 GNOME)

2、电源小程序

很高兴看到有一个专门的电源按钮来快速访问系统设置、锁屏和注销。

另外,暂停、重启和关机的按钮应该可以提高可用性,关闭计算机不用额外的点击。

3、网络小程序

虽然你可以很容易地打开或关闭有线、无线网络,但会弹出一个占据了整个屏幕的单独窗口来选择 Wi-Fi 网络并输入密码。

但是,看起来我们终于可以在这里输入密码,连接到可用的无线网络,并重试失败的连接,而不必从活动窗口分心。所有这些都发生在系统托盘上的网络小程序上,如上面的截图所示。

同样,你可以看到关于你的有线连接的更多信息,包括 IP 地址和速度。

4、日期、时间和日历小程序

最重要的日历小程序看起来更加实用,信息量更大。通知区不再驻留在这里(它现在有一个单独的小程序),使它的体验更干净,可以把注意力放在你关注的东西上。

一些细微的视觉改进,比如用重点颜色来突出日历中的某一行,应该会使它更容易理解。

5、通知中心

正如我前面提到的,通知现在有一个独立的空间。通知小程序会将所有的通知堆积起来,并允许你在需要时展开它们,或者将它们全部清除。

我们仍然有“请勿打扰”开关,并可以快速访问通知设置。

6、图形模式小程序

这对笔记本电脑用户来说应该是非常有用的,可以在图形模式之间无缝切换,并可以看到当前使用的哪种模式。

除了所有这些,还有一个蓝牙小程序、一个电池电源模式小程序,以及一些其他的东西,比如改变输入语言或输入源的能力。

鉴于这是初次看到使用 Rust 开发 COSMIC 桌面顶部面板的外观,看来我们有很多东西要去看了。

总结

总的来说,System76 正准备为我们提供一个高度可定制但又简化的 COSMIC 桌面版本。

而所有这些都应该有助于形成一种独特的桌面体验。当然,明年你就得在 Pop!\_OS 中和 GNOME 说再见了。

你怎么看?请在下面的评论中告诉我你的想法!


via: https://news.itsfoss.com/system76-cosmic-panel/

作者:Ankush Das 选题:lujun9972 译者:wxy 校对:wxy

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

欢迎来到面向初学者的 Bash Shell 脚本知识第二部分。本篇将就 Bash 脚本一些更独特的方面进行深入探讨。我们会用到一些 上篇 中已经熟悉的命令(如果遇到新命令,会给出讲解),进而涵盖一些标准输出、标准输入、标准错误、“管道”和数据重定向的相关知识。

使用 # 添加注释

随着脚本变得愈加复杂和实用,我们需要添加注释,以便记住程序在做什么。如果与其他人分享你的脚本,注释也将帮助他们理解思考过程,以及更好理解你的脚本实现的功能。想一想上篇文章中的数学方程,我们在新版脚本中添加了一些注释。注意,在 learnToScript.sh 文件(如下所示)中,注释是前面带有 # 号的行。当脚本运行时,这些注释行并不会出现。

#!/bin/bash

#Let's pick up from our last article. We
#learned how to use mathematical equations
#in bash scripting.

echo $((5+3))
echo $((5-3))
echo $((5*3))
echo $((5/3))
[zexcon ~]$ ./learnToScript.sh
8
2
15
1

管道符 |

我们将使用另一个名为 grep 的工具来介绍管道运算符。

grep 可以在输入文件中搜索可以匹配指定模式的行。默认情况下,grep 会输出相应的匹配行。

https://www.gnu.org/software/grep/

Paul W. Frields 在 《Fedora 杂志》上的文章很好地介绍了关于 grep 的知识。

命令行快速小技巧:使用 grep 进行搜索

管道键在键盘上位于回车键上方,可以在英文状态下按 Shift + \ 输入。

现在你已经略微熟悉了 grep,接下来看一个使用管道命令的示例。在命令行输入 ls -l | grep learn

[zexcon ~]$ ls -l | grep learn
-rwxrw-rw-. 1 zexcon zexcon   70 Sep 17 10:10 learnToScript.sh

通常 ls -l 命令会在屏幕上显示文件列表。这里 ls -l 命令的完整结果通过管道传送到搜索字符串 learngrep 命令中。你可以将管道命令想象成一个过滤器。先运行一个命令(本例中为 ls -l,结果会给出目录中的文件),这些结果通过管道命令给到 grep,后者会在其中搜索 learn,并且只显示符合条件的目标行。

下面再看一个例子以巩固相关知识。less 命令可以让用户查看超出一个屏幕尺寸的命令结果。以下是命令手册页中关于 less 的简要说明。

less 是一个类似于 more 的程序,但它允许在文件中向后或向前进行翻页移动。此外,less 不必在开始之前读取整个输入文件,因此对于大型输入文件而言,它比 vi 等文本编辑器启动更快。该命令较少使用 termcap(或某些系统上的 terminfo),因此可以在各种终端上运行。甚至还在一定程度上支持用于硬拷贝终端的端口。(在硬拷贝终端上,显示在屏幕顶部的行会以插入符号为前缀。)

Fedora 34 手册页

下面让我们看看管道命令和 less 命令结合使用会是什么样子。

[zexcon ~]$ ls -l /etc | less
total 1504
drwxr-xr-x. 1 root root       126 Jul  7 17:46 abrt
-rw-r--r--. 1 root root        18 Jul  7 16:04 adjtime
-rw-r--r--. 1 root root      1529 Jun 23  2020 aliases
drwxr-xr-x. 1 root root        70 Jul  7 17:47 alsa
drwxr-xr-x. 1 root root        14 Apr 23 05:58 cron.d
drwxr-xr-x. 1 root root         0 Jan 25  2021 cron.daily
:
:

为便于阅读,此处对结果进行了修剪。用户可以使用键盘上的箭头键向上或向下滚动,进而控制显示。如果使用命令行,结果超出屏幕的话,用户可能会看不到结果的开头行。要退出 less 屏幕,只需点击 q 键。

标准输出(stdout)重定向 >、>>、1>、1>>

>>> 符号之前的命令输出结果,会被写入到紧跟的文件名对应的文件中。>1> 具有相同的效果,因为 1 就代表着标准输出。如果不显式指定 1,则默认为标准输出。>>1>> 将数据附加到文件的末尾。使用 >>> 时,如果文件不存在,则会创建对应文件。

例如,如果你想查看 ping 命令的输出,以查看它是否丢弃了数据包。与其关注控制台,不如将输出结果重定向到文件中,这样你就可以稍后再回来查看数据包是否被丢弃。下面是使用 > 的重定向测试。

[zexcon ~]$ ls -l ~ > learnToScriptOutput

该命令会获取本应输出到终端的结果(~ 代表家目录),并将其重定向到 learnToScriptOutput 文件。注意,我们并未手动创建 learnToScriptOutput,系统会自动创建该文件。

total 128
drwxr-xr-x. 1 zexcon zexcon   268 Oct  1 16:02 Desktop
drwxr-xr-x. 1 zexcon zexcon    80 Sep 16 08:53 Documents
drwxr-xr-x. 1 zexcon zexcon     0 Oct  1 15:59 Downloads
-rw-rw-r--. 1 zexcon zexcon   685 Oct  4 16:00 learnToScriptAllOutput
-rw-rw-r--. 1 zexcon zexcon    23 Oct  4 12:42 learnToScriptInput
-rw-rw-r--. 1 zexcon zexcon     0 Oct  4 16:42 learnToScriptOutput
-rw-rw-r--. 1 zexcon zexcon    52 Oct  4 16:07 learnToScriptOutputError
-rwxrw-rw-. 1 zexcon zexcon   477 Oct  4 15:01 learnToScript.sh
drwxr-xr-x. 1 zexcon zexcon     0 Jul  7 16:04 Videos

标准错误(stderr)重定向 2>2>>

>>> 符号之前命令的错误信息输出,会被写入到紧跟的文件名对应的文件中。2>2>> 具有相同的效果,但 2>> 是将数据追加到文件末尾。你可能会想,这有什么用?不妨假象一下用户只想捕获错误信息的场景,然后你就会意识到 2>2>> 的作用。数字 2 表示本应输出到终端的标准错误信息输出。现在我们试着追踪一个不存在的文件,以试试这个知识点。

[zexcon ~]$ ls -l /etc/invalidTest 2> learnToScriptOutputError

这会生成错误信息,并将错误信息重定向输入到 learnToScriptOutputError 文件中。

ls: cannot access '/etc/invalidTest': No such file or directory

所有输出重定向 &>、&>>、|&

如果你不想将标准输出(stdout)和标准错误信息(stderr)写入不同的文件,那么在 Bash 5 中,你可以使用 &> 将标准输出和标准错误重定向到同一个文件,或者使用 &>> 追加到文件末尾。

[zexcon ~]$ ls -l ~ &>> learnToScriptAllOutput
[zexcon ~]$ ls -l /etc/invalidTest &>> learnToScriptAllOutput

运行这些命令后,两者的输出都会进入同一个文件中,而不会区分是错误信息还是标准输出。

total 128
drwxr-xr-x. 1 zexcon zexcon   268 Oct  1 16:02 Desktop
drwxr-xr-x. 1 zexcon zexcon    80 Sep 16 08:53 Documents
drwxr-xr-x. 1 zexcon zexcon     0 Oct  1 15:59 Downloads
-rw-rw-r--. 1 zexcon zexcon   685 Oct  4 16:00 learnToScriptAllOutput
-rw-rw-r--. 1 zexcon zexcon    23 Oct  4 12:42 learnToScriptInput
-rw-rw-r--. 1 zexcon zexcon     0 Oct  4 16:42 learnToScriptOutput
-rw-rw-r--. 1 zexcon zexcon    52 Oct  4 16:07 learnToScriptOutputError
-rwxrw-rw-. 1 zexcon zexcon   477 Oct  4 15:01 learnToScript.sh
drwxr-xr-x. 1 zexcon zexcon     0 Jul  7 16:04 Videos
ls: cannot access '/etc/invalidTest': No such file or directory

如果你直接使用命令行操作,并希望将所有结果通过管道传输到另一个命令,可以选择使用 |& 实现。

[zexcon ~]$ ls -l |& grep learn
-rw-rw-r--. 1 zexcon zexcon    1197 Oct 18 09:46 learnToScriptAllOutput
-rw-rw-r--. 1 zexcon zexcon     343 Oct 14 10:47 learnToScriptError
-rw-rw-r--. 1 zexcon zexcon       0 Oct 14 11:11 learnToScriptOut
-rw-rw-r--. 1 zexcon zexcon     348 Oct 14 10:27 learnToScriptOutError
-rwxr-x---. 1 zexcon zexcon     328 Oct 18 09:46 learnToScript.sh
[zexcon ~]$

标准输入(stdin)

在本篇和上篇文章中,我们已经多次使用过标准输入(stdin),因为在每次使用键盘输入时,我们都在使用标准输入。为了区别通常意义上的“键盘即标准输入”,这次我们尝试在脚本中使用 read 命令。下面的脚本中就使用了 read 命令,字面上就像“读取标准输入”。

#!/bin/bash

#Here we are asking a question to prompt the user for standard input. i.e.keyboard
echo 'Please enter your name.'

#Here we are reading the standard input and assigning it to the variable name with the read command.
read name

#We are now going back to standard output, by using echo and printing your name to the command line.
echo "With standard input you have told me your name is: $name"

这个示例通过标准输出给出提示,提醒用户输入信息,然后从标准输入(键盘)获取信息,使用 read 将其存储在 name 变量中,并通过标准输出显示出 name 中的值。

[zexcon@fedora ~]$ ./learnToScript.sh
Please enter your name.
zexcon
With standard input you have told me your name is: zexcon
[zexcon@fedora ~]$

在脚本中使用

现在我们把学到的东西放入脚本中,学习一下如何实际应用。下面是增加了几行后的新版本 learnToScript.sh 文件。它用追加的方式将标准输出、标准错误信息,以及两者混合后的信息,分别写入到三个不同文件。它将标准输出写入 learnToScriptStandardOutput,标准错误信息写入 learnToScriptStandardError,二者共同都写入 learnToScriptAllOutput 文件。

#!/bin/bash

#As we know this article is about scripting. So let's
#use what we learned in a script. 

#Let's get some information from the user and add it to our scripts with stanard input and read

echo "What is your name? "
read name


#Here standard output directed to append a file to learnToScirptStandardOutput
echo "$name, this will take standard output with append >> and redirect to learnToScriptStandardOutput." 1>> learnToScriptStandardOutput


#Here we are taking the standard error and appending it to learnToScriptStandardError but to see this we need to #create an error.
eco "Standard error with append >> redirect to learnToScriptStandardError." 2>> learnToScriptStandardError

#Here we are going to create an error and a standard output and see they go to the same place.
echo "Standard output with append >> redirect to learnToScriptAllOutput." &>> learnToScriptAllOutput
eco "Standard error with append >> redirect to learnToScriptAllOutput." &>> learnToScriptAllOutput

脚本在同一目录中创建了三个文件。命令 echo 故意输入错误(LCTT 译注:缺少了字母 h)以产生错误信息。如果查看三个文件,你会在 learnToScriptStandardOutput 中看到一条信息,在 learnToScriptStandardError 中看到一条信息,在 learnToScriptAllOutput 中看到两条信息。另外,该脚本还会再次提示输入的 name 值,再将其写入 learnToScriptStandardOutput 中。

结语

至此你应该能够明确,可以在命令行中执行的操作,都可以在脚本中执行。在编写可能供他人使用的脚本时,文档非常重要。如果继续深入研究脚本,标准输出会显得更有意义,因为你将会控制它们的生成。在脚本中,你可以与命令行中操作时应用相同的内容。下一篇文章我们会讨论函数、循环,以及在此基础上进一步构建的结构。


via: https://fedoramagazine.org/bash-shell-scripting-for-beginners-part-2/

作者:Matthew Darnell 选题:lujun9972 译者:unigeorge 校对:wxy

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