2023年7月

getline() 提供了一种更灵活的方法,可以在不破坏系统的情况下将用户数据读入程序。

在 C 语言中读取字符串是一件非常危险的事情。当读取用户输入时,程序员可能会尝试使用 C 标准库中的 gets 函数。它的用法非常简单:

char *gets(char *string);

gets() 从标准输入读取数据,然后将结果存储在一个字符串变量中。它会返回一个指向字符串的指针,如果没有读取到内容,返回 NULL 值。

举一个简单的例子,我们可能会问用户一个问题,然后将结果读入字符串中:

#include <stdio.h>
#include <string.h>

int main()
{
  char city[10]; // 例如 "Chicago"

  // 这种方法很糟糕 .. 不要使用 gets

  puts("Where do you live?");
  gets(city);

  printf("<%s> is length %ld\n", city, strlen(city));

  return 0;
}

输入一个相对较短的值就可以:

Where do you live?
Chicago
<Chicago> is length 7

然而,gets() 函数非常简单,它会天真地读取数据,直到它认为用户完成为止。但是它不会检查字符串是否足够容纳用户的输入。输入一个非常长的值会导致 gets() 存储的数据超出字符串变量长度,从而导致覆盖其他部分内存。

Where do you live?
Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch
<Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch> is length 58
Segmentation fault (core dumped)

最好的情况是,覆盖部分只会破坏程序。最坏的情况是,这会引入一个严重的安全漏洞,恶意用户可以通过你的程序将任意数据插入计算机的内存中。

这就是为什么在程序中使用 gets() 函数是危险的。使用 gets(),你无法控制程序尝试从用户读取多少数据,这通常会导致缓冲区溢出。

安全的方法

fgets() 函数历来是安全读取字符串的推荐方法。此版本的 gets() 提供了一个安全检查,通过仅读取作为函数参数传递的特定数量的字符:

char *fgets(char *string, int size, FILE *stream);

fgets() 函数会从文件指针读取数据,然后将数据存储到字符串变量中,但最多只能达到 size 指定的长度。我们可以更新示例程序来测试这一点,使用 fgets() 而不是 gets()

#include <stdio.h>
#include <string.h>

int main()
{
    char city[10]; // 例如 "Chicago"

    puts("Where do you live?");

    // fgets 虽好但是并不完美
    fgets(city, 10, stdin);

    printf("<%s> is length %ld\n", city, strlen(city));

    return 0;
}

如果编译运行,你可以在提示符后输入任意长的城市名称。但是,程序只会读取 size = 10 数据存储到字符串变量中。因为 C 语言在字符串末尾会添加一个空(\0)字符,这意味着 fgets() 只会读取 9 个字符到字符串中。

Where do you live?
Minneapolis
<Minneapol> is length 9

虽然这肯定比 fgets() 读取用户输入更安全,但代价是如果用户输入过长,它会“切断”用户输入。

新的安全方法

更灵活的解决方案是,如果用户输入的数据比变量可能容纳的数据多,则允许字符串读取函数为字符串分配更多内存。根据需要调整字符串变量大小,确保程序始终有足够的空间来存储用户输入。

getline() 函数正是这样。它从输入流读取输入,例如键盘或文件,然后将数据存储在字符串变量中。但与 fgets()gets() 不同,getline() 使用 realloc() 调整字符串大小,确保有足够的内存来存储完整输入。

ssize_t getline(char **pstring, size_t *size, FILE *stream);

getline() 实际上是一个名为 getdelim() 的类似函数的装饰器,它会读取数据一直到特殊分隔符停止。本例中,getline() 使用换行符(\n)作为分隔符,因为当从键盘或文件读取用户输入时,数据行由换行符分隔。

结果证明这是一种更安全的方法读取任意数据,一次一行。要使用 getline(),首先定义一个字符串指针并将其设置为 NULL ,表示还没有预留内存,再定义一个 size_t 类型的“字符串大小” 的变量,并给它一个零值。当你调用 getline() 时,你需要传入字符串和字符串大小变量的指针,以及从何处读取数据。对于示例程序,我们可以从标准输入中读取:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  char *string = NULL;
  size_t size = 0;
  ssize_t chars_read;

  // 使用 getline 读取长字符串

  puts("Enter a really long string:");

  chars_read = getline(&string, &size, stdin);
  printf("getline returned %ld\n", chars_read);

  // 检查错误

  if (chars_read < 0) {
    puts("couldn't read the input");
    free(string);
    return 1;
  }

  // 打印字符串

  printf("<%s> is length %ld\n", string, strlen(string));

  // 释放字符串使用的内存

  free(string);

  return 0;
}

使用 getline() 读取数据时,它将根据需要自动为字符串变量重新分配内存。当函数读取一行的所有数据时,它通过指针更新字符串的大小,并返回读取的字符数,包括分隔符。

Enter a really long string:
Supercalifragilisticexpialidocious
getline returned 35
<Supercalifragilisticexpialidocious
> is length 35

注意,字符串包含分隔符。对于 getline(),分隔符是换行符,这就是为什么输出中有换行符的原因。 如果你不想在字符串值中使用分隔符,可以使用另一个函数将字符串中的分隔符更改为空字符。

通过 getline(),程序员可以安全地避免 C 编程的一个常见陷阱:你永远无法知道用户可能会输入哪些数据。这就是为什么使用 gets() 不安全,而 fgets() 又太笨拙的原因。相反,getline() 提供了一种更灵活的方法,可以在不破坏系统的情况下将用户数据读入程序。

(题图:MJ/4b23132f-8916-42ae-b2da-06fd2812bea8)


via: https://opensource.com/article/22/5/safely-read-user-input-getline

作者:Jim Hall 选题:lkxed 译者:MjSeven 校对:wxy

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

开源硬件公司正在向封闭转变

在过去 15 年里,创新型电子公司设计并发布了数以千计的开源硬件设计,创造了一个蓬勃发展的产业。他们还集体创作并签署了《开源硬件定义》,为这些产品给出了明确的定义和标准。然而,最近一些开源硬件公司要么封闭源代码,要么推迟发布源代码,要么要求签订 NDA 才能获得“开源”的硬件及其软件。去年悄悄完成 3200 万美元融资的开源硬件公司 Arduino 修改了自己的开源承诺,删除了 “所有 Arduino 板都是完全开源的,……软件也是开源的……” 的话语。SparkFun 采用了闭源固件,需要 NDA 才能查看其代码,并申请撤销其销售的一款产品的开源硬件认证。开源 3D 打印公司 Prusa 以开源名义销售的产品,由于担忧“克隆品”而一直没有发布相应的源代码,并指责中国制造商利用其设计和源代码制造专有的闭源产品,还对从他们的开源代码中获取的设计和算法申请专利。

消息来源:Adafruit
老王点评:无论是开源软件,还是开源硬件,资本一旦涉入,开源的味道就会变化。很多靠开源起家的公司,最后背离开源,或许无奈,或许是主动选择。开源的理念,可能他们自己也不一定真心相信。

人工智能检测器认为《美国宪法》是由人工智能编写的

尽管依靠人工智能工具来检测人工智能生成的作文很有诱惑力,但迄今为止的证据表明,这些工具并不可靠。由于存在假阳性,GPTZero、ZeroGPT 和 OpenAI 自己的文本分类器等人工智能写作检测器无法检测由 ChatGPT 等大型语言模型组成的文本。如果你将美国最重要的法律文件《美国宪法》输入这种检测工具中,它会告诉你该文件几乎肯定是由人工智能撰写的。同样的情况也发生在《圣经》选段中。

消息来源:Ars Technica
老王点评:简单来说,这些人工智能的模型就是基于这些成例的文本训练而成的,自然无法区别这些事实上由人撰写的文件,而认为这些文本和人工智能生成的非常相近。这篇来源详细介绍了更多细节,感兴趣的话可以看看。

出现用于网络犯罪的人工智能 WormGPT

以 OpenAI 聊天机器人 ChatGPT 为代表的生成式 AI 能生成类似人类的文本,网络罪犯可利用它自动创建高度可信的钓鱼邮件,对收件人高度定制,增加攻击的成功率。网络罪犯甚至创建了专门用于恶意目的的工具 WormGPT。WormGPT 是基于 2021 年开发的大模型 GPTJ,它的功能包括无限字符支持、聊天记忆保留和代码格式化等。开发者声称 WormGPT 使用了恶意程序相关的数据进行训练。

消息来源:Slash Next
老王点评:要是什么地方对新技术的利用最积极,那要数这些可以用来牟利的非法领域了。

电子邮件服务将会一直存在,即便去中心化技术会接管互联网。

然而,随着大型科技公司试图控制新兴技术的方方面面,你如何掌控自己的电子邮件服务呢?

无论是企业还是个人,自托管的开源 Web 邮件服务始终是值得考虑的选项。你自己的服务器、你自己的数字基础架构,上面搭上你自己的电子邮件服务平台。这样,你就无需依赖供应商或第三方来管理你的电子邮件服务。你可以按照自己的方式办事。

为什么应该自托管电子邮件服务?

best opensource web based email clients 1

自托管一个可用作基于 Web 的电子邮件客户端或与电子邮件应用程序同步的服务,这不是点击一下就完成的过程。

那么,为什么要这么费事呢?难道你不能使用一些诸如 Proton Mail 和 Tutanota 之类的 注重隐私的最佳电子邮件服务 吗?

当然可以。

但是对于企业来说,自托管 Web 邮件的一些优势包括:

  • 用户可以完全掌控电子邮件数据。
  • 你可以自己构建符合电子邮件服务要求的基础设施。
  • 它为个人、小型企业和企业提供了可扩展性。
  • 你可以创建无限数量的电子邮件帐户和邮件别名。
  • 用户可以轻松应用高级过滤器和其他保护机制,无需付费订阅。

在这里,我列出了一些你可以选择的最佳选项。

1、Roundcube

Roundcube 截图

主要亮点:

  • 适合桌面使用
  • 持续维护
  • 大多数服务器托管提供商都提供
  • 可自定义的用户界面
  • PGP 加密

Roundcube 是一款流行的基于 PHP 的 Webmail 软件,提供简单的用户界面和所有基本功能。

大多数服务器托管提供商都已预安装它。你只需为你的域名配置它或创建电子邮件帐户即可开始使用。

你还可以在自己的服务器上安装并自定义它。

Roundcube

2、Cypht

Cypht 收件箱界面

主要亮点:

  • 轻量级
  • 模块化

Cypht 是一种不错的 Webmail 解决方案,提供多个电子邮件帐户的综合视图。

它采用了模块化的方法,可以轻松通过插件为你的体验添加功能。

与其他解决方案不同,你还可以使用它添加 RSS 订阅,将其用作新闻阅读器。

Cypht

3、Squirrelmail

Squirrelmail

主要亮点:

  • 轻量级
  • 稳定
  • 支持 PGP 加密插件

Squirrelmail 是一款经典的基于 PHP 的、支持 IMAP 和 SMTP 协议的 Webmail 软件。它功能不算多,但如果你需要一个轻量级和稳定的 Webmail 软件来托管,它能满足基本需求。

尽管外观简单,但它已经存在很长时间,并具备一些功能,如通讯录、文件夹操作和 MIME 支持。

大多数 Web 托管提供商都已经预装了 Squirrelmail。

Squirrelmail

4、Rainloop

Rainloop

主要亮点:

  • 无需数据库
  • 简单用户界面
  • 轻量级

Rainloop 是一款简单的电子邮件解决方案,支持 IMAP 和 SMTP 协议。

它还支持 OpenPGP 加密。与其他一些解决方案不同,它不需要数据库。直接访问邮件服务器,无需在 Web 服务器上存储任何内容。

由于支持插件,你可以扩展某些功能。

Rainloop

5、Horde

Horde 截图

主要亮点:

  • 预装于 Web 托管提供商
  • 简单而功能丰富

Horde 是一款开源的群件 Webmail 软件,预装于各种 Web 服务器托管提供商。它支持 IMAP。

我通常使用 Horde 来访问我的域名下的 Webmail,从未让我失望过。它提供了简单而高效的用户界面和许多基本功能。

与其他软件类似,它基于 PHP 框架,开发人员可以轻松使用。

Horde

6、SOGo

SOGo

主要亮点:

  • Material Design 用户界面
  • 支持 Outlook
  • 提供在线演示

SOGo 是一款现代化的开源解决方案,采用了谷歌的 Material Design 用户界面和其电子邮件服务器。

它包括支持日历和通讯录,并提供友好的基于 AJAX 的 Web 界面。

你还可以获得对微软 Outlook 和 ActiveSync 的支持,这使你可以无缝同步电子邮件、联系人、事件和任务。你可以通过在线演示进行尝试。如果令人满意,你可以下载它到你的服务器上使用。

在其 GitHub 页面 可以了解更多信息。

SOGo

7、Afterlogic WebMail Lite

Afterlogic Webmail

主要亮点:

  • 可提供企业支持选项
  • 支持社交登录
  • OpenPGP 加密

Afterlogic WebMail Lite 是一个有趣的开源 Webmail,支持插件。

它还支持使用外部服务进行身份验证。例如,你可以使用谷歌帐户登录到你的电子邮件帐户。

虽然开源版本提供了所有功能和 OpenPGP 加密支持,但你也可以用于商业使用。

此外,你还可以选择专业版本以获得技术支持、优先修复、个人日历、移动版本和添加多个 IMAP 帐户的功能。

Afterlogic WebMail Lite

值得提及

有几个正在积极开发的开源项目可以供你尝试。

当然,我们不建议将它们用于商业或个人用途。你可以尝试它们,看看是否想以某种方式为它们的发展做出贡献。

我想提及几个此类邮件服务项目。

Mailpile

虽然它应该在上面的列表中占据一席之地,但是在用 Python 3 重写完成之前,Mailpile 的开发已经停止。

Mailpile

Mailpile 是一款快速且现代化的开源 Webmail,具备加密和隐私功能。

Cuttlefish

Cuttlefish

Cuttlefish 是一个自由开源的交易性电子邮件服务。它旨在成为 SendGrid 等专有服务的替代品。

它目前还处于早期开发阶段。

Pinbox

Pinbox 是一个自托管的 Webmail 解决方案,灵感来自于谷歌收件箱。

Pinbox 是一个正在进行中的工作,需要一些先决条件才能正常工作。

总结

Squirrelmail、Horde 和 Roundcube 仍然是最流行的选项之一,你可以在大多数托管提供商处轻松访问它们。

当然,这些选项并不总是外观时尚或具备像谷歌工作空间甚至 Zoho 那样的功能,但你足够进行基本的电子邮件工作。

(题图:MJ/603715d8-4562-4d7b-96f5-99ba76ad5a1b)


via: https://itsfoss.com/open-source-web-based-email-clients/

作者:Ankush Das 选题:lkxed 译者:ChatGPT 校对:wxy

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

在本系列的第四章,学习在 Bash 中使用基本数学运算。

你可以使用 Bash 脚本做很多事情。对变量执行简单的算术运算就是其中之一。

Bash shell 中算术运算的语法如下:

$((arithmetic_operation))

假设你必须计算两个变量的总和。你这样做:

sum=$(($num1 + $num2))

(()) 内空格的使用没有限制。你可以使用 $(( $num1+ $num2))$(( $num1+ $num2 )) 或者 $(( $num1+ $num2 ))。它们都一样。

在通过示例详细讨论之前,我先分享一下它支持的算术运算符。

Bash 中的基本算术运算符

以下是 Bash shell 中算术运算符的列表。

运算符描述
+加法
-减法
*乘法
/整数除法(不带小数)
%模除法(仅余数)
**求幂(a 的 b 次方)
? Bash 不支持浮点数(小数)。你必须使用其他命令(例如 bc)来处理它们。

Bash 中的加法和减法

让我们通过编写一个脚本来看看它,该脚本从用户那里获取两个数字,然后打印它们的总和和减法。

#!/bin/bash

read -p "Enter first number: " num1
read -p "Enter second number: " num2

sum=$(($num1+$num2))
sub=$(($num1-$num2))
echo "The summation of $num1 and $num2 is $sum"
echo "The substraction of $num2 from $num1 is $sub"

我相信你熟悉上一章中使用 read 命令来 在 Bash 中接受用户输入

你应该关注这两行:

sum=$(($num1+$num2))
sub=$(($num1-$num2))

将此脚本保存为 sum.sh 并运行它。给它一些输入并检查结果。

Example of addition and subtraction in Bash shell script

Bash 中的乘法

现在让我们转向乘法。

这是一个将公里转换为米的示例脚本(这给美国读者带来了麻烦 ?)。作为参考,1 公里等于 1000 米。

#!/bin/bash

read -p "Enter distance in kilometers: " km
meters=$(($km*1000))

echo "$km KM equals to $meters meters"

将脚本保存为 multi.sh,赋予其执行权限并运行它。这是一个示例输出:

Multiplication in bash script

看起来不错,不是吗? 让我们继续进行除法。

Bash 脚本中的除法

让我们用一个非常简单的脚本来看看除法:

#!/bin/bash

num1=50
num2=5

result=$(($num1/$num2))

echo "The result is $result"

你很容易猜到结果:

The result is 10

没关系。但是让我们更改数字并尝试将 50 除以 6。结果如下:

The result is 8

但这不正确。 正确答案应该是 8.33333。

这是因为 Bash 默认情况下只处理整数。你需要额外的命令行工具来处理浮点(小数)。

最流行的工具是 bc,它是一种处理数学运算的非常强大的计算器语言。不过,你现在不需要关注细节。

你必须通过管道将算术运算“回显”给 bc

echo "$num1/$num2" | bc -l

于是,将之前的脚本修改为:

#!/bin/bash

num1=50
num2=6

result=$(echo "$num1/$num2" | bc -l)

echo "The result is $result"

现在你得到结果:

The result is 8.33333333333333333333

请注意 result=$(echo "$num1/$num2" | bc -l),它现在使用你在 本系列第 2 章 中看到的命令替换。

-l 选项加载标准数学库。默认情况下,bc 最多保留 20 位小数。你可以通过以下方式将比例更改为较小的位数:

result=$(echo "scale=3; $num1/$num2" | bc -l)

让我们看看 Bash 中浮点的更多示例。

在 Bash 脚本中处理浮点

让我们修改 sum.sh 脚本来处理浮点。

#!/bin/bash

read -p "Enter first number: " num1
read -p "Enter second number: " num2

sum=$( echo "$num1+$num2" | bc -l)
sub=$( echo "scale=2; $num1-$num2" | bc -l)
echo "The summation of $num1 and $num2 is $sum"
echo "The substraction of $num2 from $num1 is $sub"

现在尝试运行它,看看是否可以正确处理浮点:

Floating points in bash script

?️? 练习时间

是时候一起做一些数学和 Bash 练习了。

练习 1:创建一个脚本,接受以 GB 为单位的输入并以 MB 和 KB 为单位输出其等效值。

练习 2:编写一个带有两个参数并以指数格式输出结果的脚本。因此,如果输入 2 和 3,输出将为 8,即 2 的 3 次方。

提示:使用幂运算符 **

练习 3:编写一个将摄氏度转换为华氏度的脚本。

提示:使用公式 F = C x (9/5) + 32。你必须在此处使用 bc 命令。

你可以在社区中讨论练习及其方案。

在下一章中,你将 了解 Bash 中的数组。敬请关注。

(题图:MJ/8a9dfb90-99a4-4203-bc44-d805d09bc16f)


via: https://itsfoss.com/bash-arithmetic-operation/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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

CentOS 项目发出一篇奇怪的博文

最近,在红帽限制其 RHEL 源代码的访问之后,整个社区围绕这件事发生了很多事情。周五,CentOS 项目董事会发出了一篇模糊不清的简短博文,文中称,“发展社区并让人们更容易做出贡献是成功的关键因素。我们对与 CentOS 项目合作的兴趣感到兴奋。”并说他们今年以来一直在制定一套指导方针,“以帮助定义 CentOS 及其交付成果的成功含义”,还表达了对新贡献者的欢迎。除了这篇模糊不清的博文外,未见到进一步的明确信息。

消息来源:CentOS
老王点评:CentOS 项目还活着?要不是这篇博文,我以为他们已经不存在了呢。这算是对社区的抗议的反击吗?

利用微软证书签发的恶意驱动多达数千个

微软本周早些时候警告称,Windows 硬件开发者计划认证的一些驱动程序正在被恶意利用。为了应对恶意驱动程序的威胁,从 Windows Vista 64 位开始,微软开始要求内核模式驱动程序使用经过验证的证书颁发机构颁发的证书进行数字签名。不过,也有例外情况,使用过期证书或 2015 年 7 月 29 日之前签发的证书签署的驱动程序,也被认为是合法的驱动。已经有多种利用这一漏洞的开源工具出现。思科称,他们观察到多个威胁行为者利用这一政策漏洞部署了数千个恶意签名驱动程序。作为回应,微软阻止了所有这些证书。

消息来源:E-Security Planet
老王点评:为了照顾临时性的特例,而开的一个“后门”,终究会引来更多麻烦。

印度开发商解雇 90% 的技术支持团队,将工作外包给人工智能

一家印度软件开发商初创公司难以负担其客户支持团队的费用,于是将其外包给一个人工智能聊天机器人,后者显然更高效、更便宜。他们反映,改用机器人服务后,首次响应时间从 1 分 44 秒降至 0 秒。解决时间也急剧下降,从人工服务时的 2 小时 13 分钟下降到人工智能服务时的 3 分 12 秒。总体客户支持成本下降了约 85%。

消息来源:The Register
老王点评:尽管印度一直被视为廉价 IT 人才的来源,也是很多公司的全球客户支持中心,但是看起来,人工智能更便宜、更好用。

你可能已经看到一些同事或 UP 主们在一个终端窗口中运行多个终端会话。

一些专业的 Linux 用户会使用 screentmux 命令 来分割多个窗格。这些命令可以在任何终端应用程序中使用,但需要较大的学习曲线。

如果你想要在同一应用窗口中拥有多个终端会话而不涉及 tmuxscreen 命令 的复杂性,“终结者” 是你的好帮手。

不,我指的不是那个“终结者”。是这个 ?

terminator htop neofetch cmatrix

你的系统上安装的 终端仿真器 可能具有多标签支持。而 Terminator 支持多个可调整大小的终端面板。

它模拟了类似平铺窗口管理器的功能,并将终端面板平铺在单个窗口中。

在本文中,我将向你展示如何在 Ubuntu 和其他 Linux 发行版中安装和使用 Terminator。

但在此之前,让我们快速了解一下 Terminator 提供的功能。

Terminator 可在同一窗口中提供多个终端会话

Terminator 是一个基于 GNOME 终端的 GTK 应用程序,使用了 VTE3(GTK3 虚拟终端仿真器小部件)。

作为一个基于 GNOME 终端的应用程序,它与 GNOME 桌面环境相关联,因此有一些依赖性。

然而,即使有 GNOME 的依赖性,我发现该应用程序相对轻巧。可能在其他桌面环境中使用它不会成为问题。

从外表上看,Terminator 可能与其他终端仿真器相似。但是,Terminator 具有无限可能性,我将在后面的章节中向你展示它们。

terminator htop multiple

功能特点

让我总结一下 Terminator 的一些主要功能:

  • 平铺布局的终端
  • 支持多个标签页
  • 拖拽终端面板(出色的鼠标支持)
  • 类似于平铺窗口管理器的键盘快捷键
  • 可以保存布局和配置文件,以便快速启动
  • 通过插件可扩展功能

安装 Terminator

安装 Terminator 就像安装其它软件包一样简单,因为它在你能想到的所有主流发行版的官方软件源中都可用。

为了方便起见,我在下面列出了一些主要发行版的命令。

对于基于 Ubuntu 和 Debian 的发行版,请执行以下命令安装 Terminator:

sudo apt install terminator

对于基于 Fedora 和红帽的发行版,请使用以下命令:

sudo dnf install terminator

对于基于 Arch 和 Manjaro 的发行版,请执行以下命令更新并安装 Terminator:

sudo pacman -Syu terminator

注意:某些长期支持版本的发行版软件源中可能没有最新版本的 Terminator。

你还可以使用发行版提供的图形包管理器来安装 Terminator。但是,通过图形界面安装终端仿真器是无趣的。

使用 Terminator

当你启动 Terminator 时,默认窗口看起来就像一个简单的终端窗口。但是,经过一些耐心,它可以在一个窗口内像平铺窗口管理器一样工作。

terminator default window

Terminator 允许你使用鼠标通过水平和垂直分割来创建新的面板。

terminator right click option

然而,使用键盘快捷键会更快。你需要一些时间来适应这些键,但最终你会掌握它们的。

在这里,我在第一个面板中打开了 htop,如下图所示。

terminator htop

要在右侧创建一个新的终端面板,只需按下 Ctrl + Shift + e 快捷键。其次,我在右侧面板中使用了 neofetch,如下图所示。

terminator htop neofetch

最后,我使用 Ctrl + Shift + o 快捷键在带有 neofetch 的面板下方创建了另一个面板,并在此处启动了 cmatrix。这是其中一个无用但 有趣的 Linux 命令

terminator htop neofetch cmatrix

上面是在本指导中完成的操作的最终屏幕截图。现在你明白我为什么说 Terminator 在一个窗口中创建了类似平铺窗口管理器的环境了吧。

如果你需要在不安装平铺窗口管理器的情况下打开多个终端,这种平铺功能将非常方便。Terminator 也支持标签页,但我认为平铺功能是该应用程序的特点。

Terminator 是少数几个配有出色文档的应用程序之一。如果你需要更多信息,请参阅其 文档

结论

我相信所有终端仿真器都支持标签页界面。但是,当你需要同时关注多个会话时,必须在标签之间切换并不方便。

Terminator 可能不像 BlackboxGNOME Console 那样好看。但它拥有老练的 Linux 用户喜爱的功能。

它提供的功能可能并不是每个 Linux 用户都需要或想要的。我将把决定权交给你,你来决定它是否值得你投入时间。

(题图:MJ/0b403aa1-810a-4f9f-9e52-1d42d8fe2b6a)


via: https://itsfoss.com/terminator/

作者:Anuj Sharma 选题:lkxed 译者:ChatGPT 校对:wxy

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