2021年11月

这些好玩的 Linux 命令也有它的用处。

 title=

Linux 的命令行可以说是资深用户和系统管理员的小窝。然而,Linux 不仅仅是大量的枯燥工作。Linux 是由爱玩的人开发的,他们还创造了一系列搞笑的命令。当你想轻松一下的时候,就可以自己试着这些。

蒸汽机车

随便什么时候,你可以使用 sl 命令使一辆 蒸汽机车 Steam Locomotive 在你的终端上跑过。可以用你的软件包管理器安装这辆蒸汽机车。例如,在 Fedora 上可以这样:

$ sudo dnf install sl

 title=

实际用途

据我所知,sl 命令确实只是为了好玩。你对 sl 有什么有趣的用途吗?请在评论中告诉我。

(LCTT 译注:sl 的实际用途就是提醒你 ls 打错了。?)

壁炉

点燃一座壁炉来温暖你的心和你的终端吧,aafire 命令会播放一段壁炉的动画。你可以用你的软件包管理器安装 aafire。在 Debian、Mint、 Elementary 之类的发行版上:

$ sudo apt install libaa-bin

在 Fedora、CentOS 之类的发行版:

$ sudo dnf install aalib

 title=

实际用途

这个动画是向你的团队或老板传达一切即将化为乌有的微妙方式。

是的

你可以使用 yes 命令打印出一串文字,直到用 Ctrl+C 强行停止。例如,我是一个 Buffalo Bills 的球迷,所以我选择用 yes 命令打印出一串无尽的 “Buffalo Bills”:

$ yes Buffalo Bills

 title=

实际用途

你可以用这个命令来向脚本输送确认信息,这样,当脚本停顿下来要求确认时,它就会自动收到 yes。例如,想象一下,你运行的一个脚本经常停下来问你确认:

$ foo
Are you sure you want to do this? Y/n  Y
Are you really sure? y/N  Y
But are you really? y/N

你可以通过向命令传递 yes 来自动接受这些信息:

$ yes | foo

另外,你也可以用 yes 来自动拒绝信息:

$ yes no | foo

命运

通过安装 fortune 命令,你可以就可以得到命运的指点。fortune 会打印出一段随机的、可能有意义的话语(LCTT 译注:来自命运的指点)。

用你的软件包管理器安装 fortune

$ sudo apt install fortune

在 Fedora 上:

$ sudo dnf install fortune-mod

命运命令有许多数据集,它可以从中提取各种话语。例如,你可以从文学作品或科幻电视节目 《Firefly》中获得名人名言,或者从笑话、关于 Linux 的技巧等中选择。在你的资源库中搜索 fortune,看看你的发行版提供了哪些数据集。

$ fortune
Johnson's law:
  Systems resemble the organizations that create them.

实际用途

你可以用命运来生成一个伪随机数。没有足够的熵来使它在密码学上安全,但当你需要一个意外的数字时,你可以用来计算字符或单词:

$ fortune | wc --chars
38
$ fortune | wc --words
8
$ fortune | wc --chars
169

彩虹猫

彩虹猫(lolcat)是一个将文件或标准输入连接到标准输出的程序(就像一般的 cat 命令),并在其中加入彩虹色。你可以用管道将其他命令的输出连接到 lolcat,这样就可以为结果加上彩虹色。

下面是 lolcat -h 的帮助输出的结果。

 title=

(LCTT 译注:我知道 catcatch。)

“FIG 来信”和横幅

“FIG 来信”(FIGlet)来源于 Frank、Ian 和 Glenn 信件中的签名艺术。这个命令(figlet)和横幅命令(banner)可以帮你创建简单的 ASCII 文本横幅。下面是一个 CentOS 系统的文本横幅:

$ figlet centos.com

 title=

figlet 连接到 lolcat,可以得到一个彩色的横幅:

$ figlet centos.com | lolcat

 title=

$ banner Hello World

 title=

实际用途

figletbanner 都是提醒用户他们正在登录的系统的简单方法。就像许多系统管理员、网页设计师和云开发人员一样,当你和几十台服务器一起工作时,这很有帮助。

电子语音

你可以通过安装电子语音(espeak)来为你的命令行添加语音功能。

一旦 espeak 安装完毕,调高你的电脑的音量,听你的机器和你说话,会有一些乐趣。电子语音是一个软件语音合成器,有几个不同的语音库可用:

$ espeak "Linux is the best operating system.”

有趣的命令

请查阅所有这些命令的手册,以探索所有的可能性和变化。你最喜欢哪些好玩的命令,它们在现实世界中是否也有用途?请在评论中分享你的最爱。


via: https://opensource.com/article/21/11/fun-linux-commands

作者:Don Watkins 选题:lujun9972 译者:wxy 校对:wxy

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

为你的用户提供选项是任何应用的一个重要功能,而 Commander.js 使它变得容易做到。你最喜欢的 JavaScript 命令行构建器是什么?

 title=

JavaScript 是一种为 Web 开发的语言,但它的用处已经远远超出了互联网的范畴。由于 Node.js 和 Electron 这样的项目,JavaScript 既是一种通用的脚本语言,也是一种浏览器组件。有专门设计的 JavaScript 库来构建命令行界面。是的,你可以在你的终端中运行 JavaScript。

现在,当你在终端中输入一个命令时,一般都有 选项,也叫 开关标志,你可以用来修改命令的运行方式。这是由 POSIX 规范 定义的一个有用的惯例,所以作为一个程序员,知道如何检测和解析这些选项是很有帮助的。要从 JavaScript 获得此功能,使用旨在简化构建命令行界面的库很有用。我最喜欢的是 Commander.js。它很简单,很灵活,而且很直观。

安装 node

要使用 Commander.js 库,你必须安装 Node.js。在 Linux 上,你可以用你的包管理器安装 Node。例如,在 Fedora、CentOS、Mageia 和其他系统上:

$ sudo dnf install nodejs

在 Windows 和 macOS 上,你可以 从 nodejs.org 网站下载安装程序

安装 Commander.js

要安装 Commander.js,请使用 npm 命令:

$ npm install commander

在你的 JavaScript 代码中添加一个库

在 JavaScript 中,你可以使用 require 关键字在你的代码中包含(或者导入,如果你习惯于 Python)一个库。创建一个名为 example.js 的文件,并在你喜欢的文本编辑器中打开它。在顶部添加这一行,以包括 Commander.js 库:

const { program } = require('commander');

JavaScript 中的选项解析

要解析选项,你必须做的第一件事是定义你的应用可以接受的有效选项。Commander.js 库可以让你定义短选项和长选项,同时还有一个有用的信息来澄清每个选项的目的。

program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
  .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

第一个选项,我称之为 --alpha(简写 -a),是一个布尔型开关:它要么存在,要么不存在。它不需要任何参数。第二个选项,我称之为 --beta(简写 -b),接受一个参数,甚至在你没有提供任何参数的情况下指定一个默认值。

访问命令行数据

当你定义了有效的选项,你就可以使用长的选项名称来引用这些值:

program.parse();

const options = program.opts();
console.log('Options detected:');

if (options.alpha) console.log('alpha');
 
const beta = !options.beta ? 'no' : options.beta;
console.log('beta is: %s', beta);

运行应用

试着用 node 命令来运行它,首先不使用选项:

$ node ./example.js 
Options detected: 
beta is: Foo

在用户没有覆盖的情况下,beta 的默认值被使用。

再次运行它,这次使用选项:

$ node ./example.js --beta hello --alpha
Options detected: 
alpha
beta is: hello

这次,测试脚本成功检测到了选项 --alpha,以及用户提供的 --beta 选项的值。

选项解析

下面是完整的演示代码供你参考:

const { program } = require('commander');

program
  .description('A sample application to parse options')
  .option('-a, --alpha', 'Alpha')
    .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');

program.parse();

const options = program.opts();
console.log('Options detected:');

console.log(typeof options);

if (options.alpha) console.log(' * alpha');
const beta = !options.beta ? 'no' : options.beta;
console.log(' * beta is: %s', beta);

在该项目的 Git 仓库 中还有更多例子。

对任何应用来说,包括用户的选项都是一个重要的功能,而 Commander.js 使它很容易做到。除了 Commander.js,还有其他库,但我觉得这个库使用起来很方便快捷。你最喜欢的 JavaScript 命令行构建器是什么?


via: https://opensource.com/article/21/11/javascript-command-line-apps

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

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

中国科学家否定谷歌的量子霸权

2019 年 10 月,Google 宣布它的悬铃木量子计算机第一个实现了量子霸权,它在 3 分 20 秒内完成了一项任务,同样的任务当时最强的经典超算 ——IBM 的 Summit 需要花 10000 年。但这个 10000 年的说法受到了质疑,中国科学家 表示 ,在经典计算机“使用了 512 个 GPU,在大约 15 个小时内”完成了对谷歌悬铃木量子电路的模拟,而且保真度高于它。而如果在最新的 exaFLOP 超算上实现,原则上整体模拟时间可以减少到几十秒。

老王点评:虽然对悬铃木的质疑来的有点晚,但是中国在超算和量子计算机方面的进步有目共睹。

IBM 称量子计算取得突破

IBM 称它的新 Eagle 处理器能处理 127 个量子比特,突破 100 量子比特就使得量子计算超过了传统计算机的能力。IBM CEO 认为量子计算能在数年内展现实力,但其他人认为至少需要十年。他说,虽然不能解决所有问题,但“你无法在经典计算机上完成这台计算机能做的工作。这需要一台比这个星球还大的普通计算机才能做到。”

老王点评:真是进入了量子竞赛时代,到底谁能将量子计算机步入实用,必然取得压倒性的胜利。

Windows 11 恢复蓝屏死机

微软最近向测试渠道推送了 Windows 11 的补丁。值得注意的变化是黑屏死机变回 蓝屏死机(BSOD)。蓝屏死机已成为 Windows 操作系统的一个标志性错误,但上个月发布的 Windows 11 将系统崩溃时的颜色从原来的蓝色变成了黑色,最新更新又改了回去。

老王点评:还是习惯蓝屏死机,毕竟黑着屏幕没那么刺眼。

将带来重大改进的 GIMP 3.0 是最令人期待的版本之一。根据它最近的开发版本,这是一个预期的功能列表。

GIMP 是可在 Linux 上使用的 最佳免费图像编辑器 之一。不仅仅适用于那些想要 Adobe 套件的免费替代品的用户,许多专业人士也使用 GIMP 进行艺术创作、设计和照片编辑。

尽管 GIMP 提供了许多必要的功能和选项,但在各种平台上已经出现了许多现代替代品,其中在一些方面已经超过了 GIMP。

不过,GIMP 3.0 可能是一个扭转局面的版本,它将使 GIMP 成为最好的现代产品之一,可与现有的商业对手相竞争。

本文将讨论预期出现在 GIMP 3.0 版本的功能。

GIMP 3.0 值得期待的顶级功能

随着 GIMP 3.0 的版本发布,其开发版本增加了很多改进。

你或许想看到早期开发版本中的所有功能/变化,但我们将在本文中只能介绍其中重要的亮点。

1、基于 GTK3 的用户界面

来源:GIMP 博客

GIMP 3.0 将带来基于 GTK3 的用户界面的重新打造的视觉享受。除了改进的外观和感受,你还可以看到一些新的小工具。

别忘了,爱德华•斯诺登也认为 GIMP 需要进行 UI 大修。所以,GIMP 3.0 即使最终没有成为一种视觉享受,也应该在某种形式上有所改善。

在以前的 GIMP 版本中,它并不支持高像素密度的显示器。虽然可以使用,但如果你有一个更高分辨率的屏幕,GIMP 看起来就不够好。

现在,随着 GTK3 的加入,它增加了对高像素密度显示器的支持。你所要做的就是设置你的操作系统的首选缩放/分辨率,GIMP 应该可以支持它了。

2、Wayland 支持

向 GTK3 的过渡应该能提供更好的 Wayland 支持。因此,如果你开始使用 Wayland 桌面会话,GIMP 3.0 应该可以让你毫无问题地使用该应用程序。

3、多层选择

来源:GIMP 博客

最关键的新增功能之一是可以选择多个图层。

虽然这是一个需要很长时间才能完成的功能,但它终于在 GIMP 3.0 版本中实现了。

有了这个功能,人们可以轻松地管理和组织他们的工程中的几个图层。

根据现有的信息,他们正式提到了这个变化:

可停靠的图层现在完全可以进行多选,使用通常的交互方式进行多项目选择(“Shift + 点击”用于选择一系列图层,“Ctrl + 点击”用于选择或取消选择不相邻的层)。组织操作现在可以对所有选定的图层起作用,即你可以一次性移动、重新排序、删除、复制、合并(以及更多...)所有选定的图层。

换句话说,你可以选择多个图层,并同时对它们进行批量操作。

例如,你可以裁剪、移动、使用合并的图层中的颜色选择工具,并使用这个功能执行更多操作。

在发表这篇文章时,我注意到,根据他们的开发博客,这是一个正在进行的工作,有一些限制。希望在稳定版中,多层选择可以完美地工作。

4、新的插件 API

插件 API 保留了所有的基本功能,但也引入了一些新的改进。

因此,新的插件 API 应该不会对开发者造成任何破坏,而应该可以让他们把插件轻松地移植到 GIMP 3.0 应用程序上。

他们的开发版本中提到了一些改进:

  • 摆脱了对象 ID,转而使用真实的对象。特别是在 GIMP 3 中,GimpImageGimpItemGimpDrawableGimpLayerGimpVectorsGimpChannelGimpPDB 都是对象(其他类别的对象已经存在或以后可能加入)。
  • 路径现在被当作 GFile 来处理,这意味着使用 GLib/GIO API。
  • GIMP API 应该可以完全支持各种语言(Python 3、JavaScript、Lua、Vala 等)。

5、绘画选择工具

来源:GIMP 博客

前景选择工具不会消失。然而,他们正在开发一个新的实验性的“绘画选择”工具,它可以让你逐步选择和绘制使用画笔的区域。

绘画选择工具的目的还在于克服前景选择工具对大图像的限制,并解决内存/稳定性问题。

考虑到它被列为实验性工具,我们不能确定它是否能进入稳定版,但它已经有了新的图标,你可以找到这个工具。

6、Windows Ink 支持

来源:GIMP 博客

当然,我们在这里讨论的都是 Linux。但是,GIMP 是一个流行的跨平台工具。

所以,为了吸引更多的用户,最好为专业人士或设计师使用的工具提供硬件支持。

GIMP 3.0 现在支持 Windows Ink 开箱即用,这要归功于它引入的 GTK3。你会从管理输入设备的设置中找到使用 Windows Ink API 的选项。

7、改进手势支持

GIMP 并不是笔记本电脑用户的最佳选择,或者更准确地说,不是触摸板/触摸屏用户的最佳选择。

然而,随着 GIMP 3.0 增加了手势支持,可以捏住画布放大/缩小,这种情况可能会有所改善。

我们还可能在最终版本中看到更多的手势支持,但截至 2.99.8 版本,也就是最新的开发版本,还没有新的手势。

8、改进的文件格式支持

GIMP 3.0 现在支持 JPEG-XL 文件格式,能够加载/导出带有灰度和 RGB 颜色配置文件的 .jxl 文件。

对 Adobe Photoshop 工程文件的支持也得到了改进。它现在可以处理大于 4GB 的 PSD 文件,同时加载多达 99 个通道。

除此以外,对 WebP 和 16 位 SGI 图像的支持也得到了改进。

总结

看看 GIMP 的开发博客,看起来他们几乎已经完成了最终版本。然而,他们并没有透露任何特定的发布日期时间表。

所以,一旦他们解决了错误并完成了改进,它就会到来。

你期待 GIMP 3.0 吗?它看起来是一个有希望的下一代版本吗?


via: https://news.itsfoss.com/gimp-3-0-features/

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

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

使用 argparse 模块为应用程序设置命令行选项。

 title=

有一些第三方库用于命令行解析,但标准库 argparse 与之相比也毫不逊色。

无需添加很多依赖,你就可以编写带有实用参数解析功能的漂亮命令行工具。

Python 中的参数解析

使用 argparse 解析命令行参数时,第一步是配置一个 ArgumentParser 对象。这通常在全局模块内完成,因为单单\_配置\_一个解析器没有副作用。

import argparse

PARSER = argparse.ArgumentParser()

ArgumentParser 中最重要的方法是 .add_argument(),它有几个变体。默认情况下,它会添加一个参数,并期望一个值。

PARSER.add_argument("--value")

查看实际效果,调用 .parse_args()

PARSER.parse_args(["--value", "some-value"])
Namespace(value='some-value')

也可以使用 = 语法:

PARSER.parse_args(["--value=some-value"])
Namespace(value='some-value')

为了缩短在命令行输入的命令,你还可以为选项指定一个短“别名”:

PARSER.add_argument("--thing", "-t")

可以传入短选项:

PARSER.parse_args("-t some-thing".split())
Namespace(value=None, thing='some-thing')

或者长选项:

PARSER.parse_args("--thing some-thing".split())
Namespace(value=None, thing='some-thing')

类型

有很多类型的参数可供你使用。除了默认类型,最流行的两个是布尔类型和计数器。布尔类型有一个默认为 True 的变体和一个默认为 False 的变体。

PARSER.add_argument("--active", action="store_true")
PARSER.add_argument("--no-dry-run", action="store_false", dest="dry_run")
PARSER.add_argument("--verbose", "-v", action="count")

除非显式传入 --active,否则 active 就是 Falsedry-run 默认是 True,除非传入 --no-dry-run。无值的短选项可以并列。

传递所有参数会导致非默认状态:

PARSER.parse_args("--active --no-dry-run -vvvv".split())
Namespace(value=None, thing=None, active=True, dry_run=False, verbose=4)

默认值则比较单一:

PARSER.parse_args("".split())
Namespace(value=None, thing=None, active=False, dry_run=True, verbose=None)

子命令

经典的 Unix 命令秉承了“一次只做一件事,并做到极致”,但现代的趋势把“几个密切相关的操作”放在一起。

gitpodmankubectl 充分说明了这种范式的流行。argparse 库也可以做到:

MULTI_PARSER = argparse.ArgumentParser()
subparsers = MULTI_PARSER.add_subparsers()
get = subparsers.add_parser("get")
get.add_argument("--name")
get.set_defaults(command="get")
search = subparsers.add_parser("search")
search.add_argument("--query")
search.set_defaults(command="search")
MULTI_PARSER.parse_args("get --name awesome-name".split())
Namespace(name='awesome-name', command='get')
MULTI_PARSER.parse_args("search --query name~awesome".split())
Namespace(query='name~awesome', command='search')`

程序架构

使用 argparse 的一种方法是使用下面的结构:

## my_package/__main__.py
import argparse
import sys

from my_package import toplevel

parsed_arguments = toplevel.PARSER.parse_args(sys.argv[1:])
toplevel.main(parsed_arguments)
## my_package/toplevel.py

PARSER = argparse.ArgumentParser()
## .add_argument, etc.

def main(parsed_args):

    ...

    # do stuff with parsed_args

在这种情况下,使用 python -m my_package 运行。或者,你可以在包安装时使用 console\_scprits 入口点。

总结

argparse 模块是一个强大的命令行参数解析器,还有很多功能没能在这里介绍。它能实现你想象的一切。


via: https://opensource.com/article/21/8/python-argparse

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

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

现代的 Zstd 被并入 Linux 5.16,大幅提升性能

虽然 Zstd 被用于 Linux 内核的各个领域,从 Btrfs 透明文件系统压缩到允许内核模块用 Zstd 算法压缩,但内核内的 Zstd 代码已经过时多年了。内核中现有的 Zstd 代码已经有四年的历史了,而在这段时间里,Zstd 的上游已经有了许多错误的修正和性能的优化。本周六晚上合并到 Linux 5.16 的 Zstd 代码,经过了 全面的修改。使用 Linux 5.16 的新 Zstd 代码,Btrfs 和 SquasFS 中的 Zstd 的解压速度可以提高 15%,F2FS 和 zRAM 的解压速度可以提高 20% 到 30% 不等,内核 Zstd 镜像的解压速度可以提高 35%。因为它的影响巨大,Linus Torvalds 表示有意推迟 合并它,以便有时间自己亲自审查代码。

老王点评:这么重要的部分,居然内核等了 4 年才考虑合入。

智能电视厂商的主要收入是广告、订阅和数据

前段时间曾 被 FSF 起诉 的智能电视厂商 Vizio 透露在过去的三个月里,其广告和观众数据部门的毛利润为 5730 万美元。这是其销售电视等设备所获利润的 两倍多,尽管这些设备销售的收入要多得多。虽然其 2021 年电视的出货量下降到 140 万,下降了 36%。但其广告收入激增了 136%,该公司 77% 的收入直接来自广告。

老王点评:看来智能家电都是载体,真正挣钱的都是其上的订阅和广告,这就难怪前段时间有人买冰箱结果买了一台关不掉的家庭广告大屏,我有点担心哪天我家的扫地机器人也给我播放广告。

互联网档案馆庆祝 25 周年生日

位于一座前基督教科学派教堂内的 互联网档案馆 Internet Archive 是保存互联网、电视和广播历史的最大数字图书馆。它目前储存了 4750 亿个网页,2800 万份书籍和文本的扫描件,以及 1400 万份录音,加起来有 30PB 的数据。他们呼吁,“我们比以往任何时候都更需要你的帮助”。互联网档案馆已经收集了 1 亿多人的作品,目标是达到 10 亿人。他们目前正在与来自四家大型出版商的法律挑战作斗争,而电子前沿基金会正在帮助他们进行法律辩护。

老王点评:互联网档案馆非常有意义,我尤其喜欢它的时光机,在上面还能找到我 20 多年前的第一个个人网站。