分类 技术 下的文章

CyberDB,一个基于 Python 字典和列表的内存数据库。

概括

CyberDB 是一个轻量级的 Python 内存数据库。它旨在利用 Python 内置数据结构字典、列表作数据存储,通过 TCP 套接字高效通信,并提供了数据持久化。该数据库的亮点在于它使用了 Pythonic 的方式编程,你可以像使用字典和列表一样使用 CyberDB。

现在我们把 CyberDB 带到能发挥其作用的地方,在生产环境中将 CyberDB 作为 Flask 的内存数据库,使用 Gunicorn 运行,并实现多进程间的通信。

这篇文章通过一个尽可能精简的 Flask 实例讲解,不会涉及复杂的 Web 知识。核心思路为 CyberDB + Gunicorn + Gevent + Flask(多进程 + 协程),启动一个 CyberDB 服务器,使用 Gunicorn 多进程运行 Flask 实例,每个进程的实例通过 Gevent 运行,进程中使用 CyberDB 客户端连接至内存数据库,由此实现对 CyberDB 数据库的高并发访问。

源码解析

文章使用 PyPy 运行,同样适用 CPython。

运行环境: Debian 10, Python 3.8.12, PyPy 7.3.7

此项目的目录结构

.
├── app.py
├── cyberdb_init.py
├── cyberdb_serve.py
├── requirements.txt
└── venv

我们通过列举每个文件的内容顺序讲解 CyberDB 的核心操作。

文件 requirements.txt

CyberDB>=0.7.1
Flask==2.1.1
gevent==21.12.0
gunicorn==20.1.0

这是此项目的依赖。这篇文章不是 Python 基础教程,如果你不清楚,请查询相关文档创建虚拟环境 venv 目录并安装 requirements.txt 中的依赖。

生成 venv 目录并安装好依赖后,下面所有操作都在激活的虚拟环境中运行。

文件 cyberdb\_init.py

功能:初始化 CyberDB 的表结构,只在第一次运行时使用,后续不再使用。

import time

import cyberdb

db = cyberdb.Server()
# 配置 CyberDB 服务端的 地址、端口、密码。
db.start(host='127.0.0.1', port=9980, password='123456')

# 待服务端启动后,连接 CyberDB 服务端。
time.sleep(3)
client = cyberdb.connect(host='127.0.0.1', port=9980, password='123456')
# 生成 proxy 对象。
with client.get_proxy() as proxy:
    # 创建类型为 CyberDict 的表 centre,并初始化内容。
    proxy.create_cyberdict('centre')
    centre = proxy.get_cyberdict('centre')
    centre['content'] = 'Hello CyberDB!'

# 将 CyberDB 保存至 data.cdb 。
db.save_db('data.cdb')

在项目根目录执行

python cyberdb_init.py

以完成 CyberDB 数据库表的初始化。

它会在 CyberDB 中创建了一个名为 centre、类型为 CyberDict 的表;初始化 content 键的值为 Hello CyberDB!;最后将 CyberDB 数据库保存至硬盘(在项目根目录生成了名为 data.cdb 的文件)。

文件 cyberdb\_serve.py

功能:运行 CyberDB 服务端。

import cyberdb

def main():
    # 后台运行 CyberDB 服务端,设置相关信息。
    db = cyberdb.Server()
    # 从硬盘读取 data.cdb 至 CyberDB。
    db.load_db('data.cdb')
    # 每 300 秒备份一次数据库。
    db.set_backup('data.cdb', cycle=300)
    db.run(
        host='127.0.0.1', # TCP 运行地址
        port=9980, # TCP 监听端口
        password='hWjYvVdqRC', # 数据库连接密码
        max_con=10000, # 最大并发数
        encrypt=True, # 加密通信
        print_log=False # 不打印日志
    )


if __name__ == '__main__':
    main()

在项目根目录执行

python cyberdb_serve.py

以运行 CyberDB 服务端。

此处设置了 encrypt=True ,CyberDB 会将 TCP 通信内容使用 AES-256 算法加密。开启 encrypt=True 后,CyberDB 仅允许白名单中的 IP 通信,默认白名单为 ['127.0.0.1'](查看白名单 设置方法)。一般,若只需在本地进程间通信,无需开启 encrypt=True 和设置白名单,只有远程通信时需要此操作。

文件 app.py

功能:运行 Flask 实例和 CyberDB 客户端。

import cyberdb
from flask import Flask, g

# 连接 CyberDB 并生成客户端实例。
client = cyberdb.connect(
    host='127.0.0.1', 
    port=9980, 
    password='hWjYvVdqRC',
    # 服务端若加密,客户端必须加密,反之亦然。
    encrypt=True,
    # 每个连接若超过900秒无操作,将舍弃该连接。
    # 连接由连接池智能管理,无需关注细节。
    time_out=900
)

# 创建 Flask 实例,此部分请参考 
# Flask 文档 https://flask.palletsprojects.com/
app = Flask(__name__)

@app.before_request
def before_request():
    # 每次请求执行前生成 proxy 对象。
    g.proxy = client.get_proxy()
    # 从连接池获取连接。
    g.proxy.connect()

@app.get("/")
def hello_world():
    # 从数据库获取 centre 表。
    centre = g.proxy.get_cyberdict('centre')
    
    return {
        'code': 1,
        'content': centre['content']
    }

@app.teardown_request
def teardown_request(error):
    # 每次请求执行后归还连接至连接池。
    g.proxy.close()

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8000)

该模块会在每次请求执行前(before_request())使用 client.get_proxy() 获取 proxy 对象,每个获取的 proxy 对象可以绑定一个 TCP 连接,此处使用 proxy.connect() 从连接池获取连接。视图函数 hello_world() 中,由 proxy 获取的对象 centre,与 proxy 共用同一个连接,proxy 的连接释放后,centre 也会失去连接。在每次请求后(teardown_request())使用 proxy.close() 方法释放 proxy 绑定的连接,归还至连接池。

cyberdb.connecttime_out 参数表示连接池中每个连接的超时时间,此处每个连接超过 900 秒无操作将被舍弃。若不设置该参数,连接池的每个连接会维持到失效为止。

使用 Gunicorn 运行 Flask 实例

Gunicorn 是一个用于 UNIX 的 Python WSGI HTTP 服务器,通常在生产环境使用,可以利用多核 CPU 。

Gevent 是一个基于协程的 Python 网络库。Gevent 会更改 CyberDB 客户端的底层套接字通信,使之支持协程。

在项目根目录运行

gunicorn -w 4 -b 127.0.0.1:8000 -k gevent app:app

使用 4 进程、Gevent 启动 Flask 实例。

浏览器访问 127.0.0.1:8000 ,得到如下响应:

{"code":1,"content":"Hello CyberDB!"}

参考信息

CyberDB 源码: https://github.com/Cyberbolt/CyberDB

总结

通过此例,你可以把 CyberDB 部署到更复杂的 Web 环境中,充分享受内存的低延迟特性。CyberDB 的核心是以 Pythonic 的方式编程,你可以在任何 Python 代码中将 CyberDB 作为内存数据库。


作者简介:

Cyberbolt:一个自由的 Python 开发者。


via: https://www.cyberlight.xyz/static/cyberdb-chn/tutorial/flask/

作者:Cyberbolt 编辑:wxy

本文由贡献者投稿至 Linux 中国公开投稿计划,采用 CC-BY-SA 协议 发布,Linux中国 荣誉推出

如果你曾经使用过 Linux 桌面,你一定见过这个屏幕。这就是所谓的 GRUB 屏幕。是的,它的字母全部都是大写的。

Remember this screen? This is GRUB

在 “ Linux 黑话解释 Linux Jargon Buster ”系列的这一个章节中,我将告诉你 GRUB 是什么,以及它有什么用处。此外,我还会简要地介绍一下配置和定制的部分。

GRUB 是什么?

GRUB 是一个用于加载和管理系统启动的完整程序。它是 Linux 发行版中最常见的 引导程序 bootloader 。引导程序是计算机启动时运行的第一个软件。它加载 操作系统的内核,然后再由内核初始化操作系统的其他部分(包括 Shell、显示管理器桌面环境 等等)。

引导程序和引导管理器

我不想现在就把你搞糊涂,但是我认为这个话题是不可避免的。 引导程序 boot loader 引导管理器 boot manager 之间有着一条模糊的界限。

你已经知道了引导程序是什么。它会首先启动,然后将内核加载到内存中并执行它。引导管理器则允许你在不同的操作系统之间进行选择(如果你的电脑上不止一个操作系统的话)。引导管理器并不会直接加载系统。

随着 Linux 内核 3.3 版本的推出,Linux 内核包括了一个内置的 EFI 引导程序。事实上,任何一个支持 EFI 的系统都包括一个 EFI 引导程序。在支持 EFI 的系统中,固件会读取 EFI 系统分区 EFI System Partition (ESP)中的 EFI 文件,从而获得启动信息。

这里插入一张图片,图中显示了带有 ESP 分区的分区表:

GRUB 既是一个引导程序,也是一个引导管理器。一会儿我再来谈 GRUB。让我们先看看其他类似 GRUB 的程序。

小知识:GRUB 是 GRand Unified Bootloader(大一统引导程序) 的首字母缩写。

GRUB 屏幕上的那些行是什么意思?

你会在 GRUB 屏幕上看到几行字。这些行对于不同的设置、不同的发行版会有所不同。

通常情况下,第一行是你的 Linux 发行版。如果你看到类似高级选项的东西,你可以进入其中,找到一些以 “linux-generic-x-y-z” 等开头的行。

当你的 Linux 发行版更新内核版本时,它至少会保留一个旧版本。你可以选择启动到旧的 Linux 内核,以防你的系统遇到新更新的 Linux 内核的任何问题。

在基于 Ubuntu 的发行版中,你也可以看到一个恢复选项。

在高级选项下,通常有一个旧的内核版本和恢复选项

在最后,你可能会看到一个条目,如系统设置或 UEFI 设置,以访问系统的 BIOS 设置。

还有哪些类似 GRUB 的引导管理器?

GRUB 是 Linux 中最流行的引导管理器。但它并不是唯一的一个。有一个高度可定制的引导管理器,名字叫做 rEFInd 引导管理器,它同样受到了一些 Linux 用户的喜爱。

定制化的 rEFInd 引导管理器屏幕 | 图片来源:kofler.info/pop_os

还有一个基于文本的引导管理器,名字叫做 systemd-boot。你可以猜到这是专为基于 systemd 的 Linux 发行版准备的。有一些发行版正在使用 systemd-boot,比如 Pop OS。

Pop OS 中的 systemd-boot | 图片来源:kofler.info/pop_os

访问或编辑 GRUB

通常你看到的 GRUB 屏幕是它的菜单界面。如果你安装了一个以上的操作系统,它会允许你在其中选择一个来启动。如果你的 Linux 发行版安装了不止一个内核,你也可以选择加载不同的内核。

根据不同的 Linux 发行版的配置,你的 GRUB 菜单上可能会有一些其他选项。

你可以在 GRUB 菜单界面按 e 键来编辑菜单项。这样你就可以在内核加载前修改它的参数。例如,在某些情况下,禁用内核提供的图形驱动可以帮助你解决 Linux 系统在启动时卡住的问题

你也可以在 GRUB 菜单界面上按 c 键来进入 GRUB 的命令行菜单。

GRUB 配置文件

你在菜单界面里对 GRUB 所做的任何改变都是暂时的。如果你想对 GRUB 做一些永久性的改变,比如改变默认的超时时间,你可以在 Linux 系统启动后修改 GRUB 配置文件。

默认的 GRUB 配置文件是 /etc/default/grub。还有一个 /etc/default/grub.d 目录,里面也存放一些配置。你可以直接编辑 /etc/default/grub 文件,但是我还是建议通过在这个目录中添加配置文件(.cfg 文件)进行额外的修改。

默认的 GRUB 配置文件

你必须 更新 GRUB 才能使这些修改生效

使用 GRUB 定制器来定制 GRUB

如果你不太习惯 在终端里使用文本编辑器编辑文件,你可以 使用一个叫做 GRUB 定制器的图形工具

它允许你改变启动顺序、默认超时时间等等。你还可以用它来把 GRUB 的背景设置成一张自定义的墙纸。

GRUB 定制器可以在 Ubuntu 20.04 中从 Universe 仓库安装,在 Ubuntu 18.04 中 通过 PPA 安装。它可以 通过 AUR 在基于 Arch Linux 的发行版中使用。

总结

至此,本文几乎涉及到了所有与 GRUB 相关的简单内容。至于 EFI、引导加载和 GRUB 本身,它们都是详细而复杂的话题,因此不在本文的讨论范围之内。这篇文章旨在给你一个关于 GRUB 引导程序的总体概述。

或许我以后会写一篇关于 GRUB 的详细指南,解释它底层的一些细节。目前,如果你想了解更多关于 GRUB 的信息,你可以在你的 Linux 终端里使用 info grub 命令访问到 GRUB 文档。

你可以在终端中访问 GRUB 手册

我希望你现在对什么是 GRUB 有了一点点的了解。这里有一个 GIF 动图供你一乐。

什么是 GRUB? UEFI 再也伤害不到我了 :)

或许我没有回答你关于 GRUB 的所有疑问,但请随时在评论区告诉我。我可能会根据你的问题或建议来更新这篇文章。


via: https://itsfoss.com/what-is-grub/

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

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

Arch Linux 是那些希望对他们的操作系统有更多控制权的 Linux 用户的一个流行选择。

虽然许多有经验的用户对 Arch Linux 进行了定制,以提供一些最好的用户体验(就其用户界面而言),但对于新的 Linux 用户来说,这可能是一个挑战。

如果你不了解 Arch Linux 的具体情况,你可能想读一下这篇 Ubuntu 与 Arch Linux 比较 的文章。

然而,还有一些 基于 Arch 的发行版 旨在提供一个更容易上手的体验,而不会剥夺你的控制权。

XeroLinux 是我们最近遇到的其中一个。

XeroLinux:又一个基于 Arch 的发行版

XeroLinux 是 Steve(又名 TechXero)的个人项目,旨在提供一个“华丽”的 Arch Linux 版本。

请注意,这是一个充满激情的项目,而不是一个由庞大的贡献者团队支持的主流发行版(还没有)。在你替换你的主系统前,你应该先在虚拟机或测试机上试用它。

在这里,我们会为其愉快的开箱即用体验和一些令人更兴奋的地方,简单介绍一下 XeroLinux 的特色。

安装的简易性

XeroLinux 使用 Calamares 安装程序 来让你轻松地安装 Linux 发行版,而不需要依赖终端或 引导式 Arch 安装程序

虽然安装体验与流行的 Linux 发行版相似,但你可以在安装时选择图形驱动程序、特定的 Linux 内核和工具。

你可以安装 System76 的电源管理驱动,并启用对 Nvidia Optimus Manager 的支持,为你的笔记本电脑切换显卡。有趣!

你还可以在安装时选择密码管理器、主题、浏览器和各种不同的软件包,这应该会让使用变得很方便。

考虑到你可以以选择的形式设置所有基本选项,你在安装后没有太多可担心的。

当你选择了需要的东西,只需重新启动并开始使用桌面。

用户体验

XeroLinux 的开箱即用的体验令人印象深刻。桌面的整体外观和感觉包括许多新的功能补充,如显示 CPU 使用情况、网络速度等的小工具。

它还支持全局菜单,使应用程序窗口看起来更干净,为 macOS 用户切换到 Linux 提供了舒适的体验。

通过所有预装的应用,你可以轻松地安装新的软件,卸载现有的工具并进行各种操作。

它同时具有 pamac 和 Synaptic 包管理器(可在安装时选择)。因此,你可以获得大量的软件工具,你可以通过它们中的任何一个轻松安装。

其他产品包括两个文件管理器(Dolphin 和 Thunar)、Yakuake 终端、Spectacle 屏幕截图、KWrite、Konsole 等主要 KDE 版本中的其他 KDE 工具。

如果你不喜欢 Yakuake 终端仿真器,请参考我们的 终端仿真器列表,找到它的替代品。

另外不要忘了,你会得到一个定制的锁屏(登录屏),看起来很不错!

当你启动系统时,你还会注意到一个 XeroLinux 配置工具。它可以让你快速执行一些基本任务,比如检查 NVIDIA 显卡、安装 KVM/QEMU、禁用自动启动、安装 KDE 窗口平铺,以及其他一些配置,如下图所示。

可定制性

XeroLinux 在其主版本中采用了 KDE 桌面环境。因此,你自然会有无尽的定制选项。

最好是参考我们的 KDE 定制指南来获得帮助。

除此之外,你还可以看到 Latte Dock,你可以根据自己的喜好进行定制和调整。

有几个定制停靠区的选项,确保你仔细调整设置,以免看起来很奇怪。

此外,你会得到 Kvantum Manager,可以帮助你安装外部主题。

如果这还不够,开发者还提供了一些 RICE/主题和 Grub 主题,你可以在 官方网站GitHub 仓库 上找到所列的主题。

(LCTT 译注:RICE 不是指大米。它是 “ 受赛车启发的美容强化 Race Inspired Cosmetic Enhancements ” 的缩写。原意是指:给汽车增加的部件,使它们看起来很快,但其实内部调校,实际上一样慢。在 Linux 上指各种对桌面的粉饰,使其看起来花哨。)

换句话说,开发者提供的一些脚本可以帮助你进行改造,但请注意,最好是自己定制,这样就不会出现其他问题。

桌面环境选项

主版本使用的是 KDE,但如果你想尝试一下,你也有另一个 XFCE 变体。(LCTT 译注:由于项目作者实在无力维护两个 DE,因此放弃了 XFCE 变体。)

XFCE 版是为旧系统量身定做的(或者如果你需要节省系统资源)。

它最初还提供了一个 GNOME 版本,但由于每次更新都会出现扩展失效的问题,所以它放弃了对它的支持。如果你对桌面环境感到好奇,你可能想通过我们的 KDE Plasma 对比 GNOME 文章来了解它们的区别。

性能

考虑到它具有最新可用的 Linux 内核 5.16,它应该可以在各种硬件配置下正常工作。

但是,我还没有在裸机上测试过它。根据我虚拟机的使用经验,它运行良好,没有任何特殊问题。

以下是其 KDE 版本的资源使用情况:

使用它的 XFCE 变体时,你可能会注意到较低的资源使用率。

你应该试试 XeroLinux 吗?

我喜欢 XeroLinux 的外观和感觉。

不仅限于此,在安装时你还可以选择多种软件包和做出各种最好的选择。

尝试 XeroLinux

如果你在安装时就知道自己需要什么,那么它应该是一个有吸引力的基于 Arch 的 Linux 发行版。

你试过 XeroLinux 了吗? 在下面的评论中让我知道你的想法。


via: https://itsfoss.com/xerolinux/

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

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

自从我们报道将 Signal 作为即时通讯软件的理想选择以来,已经过去一年多了。虽然具有隐私意识的人和静态技术的人已经意识到了这个了不起的软件的存在,与此同时,在最近的 WhatsApp 隐私政策更新之后,Signal 更是得到了很多人的褒奖。

无论什么原因,如果你对 Signal 一无所知,想知道是否能在桌面上使用 Signal,那么答案是肯定的。你可以在 Linux、Windows 和 macOS 系统以及智能手机上安装 Signal。

Signal Messenger on Pop OS Linux distribution

我不打算强调 Signal 的功能,因为你可能已经有所了解。我只想向你展示在 Linux 桌面上安装 Signal 的不同方法:

  • 用 Snap 包在 Liunx 上安装 Signal(Snap 应用程序需要更长的时间来加载,但可以获得自动更新和轻松的安装)
  • 用 apt 包在基于 Debian 和 Ubuntu 的发行版上安装 Signal(添加软件库需要额外的操作,但已安装的应用程序会自动更新)
  • 用 AUR 在 Arch 和 Manjaro Linux 上安装 Signal
  • 用 Flatpak 包在 Fedora 等 Linux 系统上安装 Signal

你可以基于你的发行版和偏好来选择这些安装方法的其中一种:

方法 1:用 Snap 包在 Linux 上安装 Signal

如果你正在使用 Ubuntu,你可以在软件中心找到 Signal 桌面版程序的 Snap 格式的软件包。

或者,你可以在任何 有 Snap 包支持功能的 Linux 发行版使用 Snap 命令 安装 Signal。

sudo snap install signal-desktop

你可以使用 snap remove 命令或者从软件中心删除它。

有些人不喜欢 Snap 包是因为它们启动时间太长。好消息是你能够使用 apt 命令来安装 Signal。下一节我们讨论它。

方法 2:通过 apt 在基于 Debian 和 Ubuntu 的发行版上安装 Signal(使用官方 Signal 仓库)

这里是你在 Debian、Ubuntu、Linux Mint、elementary OS 和基于 Debian/Ubuntu 的其他发行版中安装 Signal 必须遵循的步骤。你可以 复制这些命令并将其粘贴到终端

第一件事是得到官方 Signal 仓库的 GPG 密钥,并且把它加入到你的 APT 包管理器可信任的密钥中。

wget -O- https://updates.signal.org/desktop/apt/keys.asc | sudo apt-key add -

密钥添加之后,你可以将仓库安全的添加的你的系统中。不要因为仓库名称使用了 xenial 就惊慌失措。它可以在 Ubuntu 18.04、20.04 和更新的版本以及 Debian、Mint 等系统中工作。

echo "deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main" | sudo tee -a /etc/apt/sources.list.d/signal-xenial.list

借助 Linux 的 tee 命令,在 /etc/apt/sources.list.d 目录下你将会有一个叫做 signal-xenial.list 的新文件。这个新文件有 Signal 仓库信息即 deb [arch=amd64] https://updates.signal.org/desktop/apt xenial main

既然你已经添加了仓库,那么来更新缓存并安装 Signal 桌面程序吧:

sudo apt update && sudo apt install signal-desktop

一旦安装成功,在程序菜单找到 Signal 然后启动它。

由于你已经添加了仓库,你安装的 Signal 程序将会伴随系统日常更新而自动更新。

享受在 Linux 桌面上使用 Signal 加密通讯的乐趣吧。

删除 Signal

如果我不分享给你删除的步骤,那么指南是不完整的。让我们看一下。

首先,删除该程序:

sudo apt remove signal-desktop

你可以留下它,也可以从系统中删除 Signal 仓库。对你来说是都是可以的。仓库继续在系统里的话,你可以轻松的再次安装 Signal。如果你删除了仓库的话,你得按照之前的步骤再次重新添加仓库。

如果你也想同时删除掉 Signal 仓库,你可以选择图形化方法,通过“软件和更新”工具,在那里删除它。

或者,你可以用 rm 命令来删除这个文件:

rm -i /etc/apt/sources.list.d/signal-xenial.list

方法 3:用 AUR 在 Arch 和 Manjaro Linux 上安装 Signal

通过 AUR基于 Arch 的 Linux 发行版 上安装 Signal 是有效的。如果你在 Manjaro 上使用 Pamac 并且启用了 AUR,在包管理器里你可以找到 Signal。

否则,你可以经常 使用 AUR 辅助工具

sudo yay -Ss <package-name>

我相信你能够在相似的功能中删除 Signal。

方法 4:用 Flatpak 包在 Fedora 等 Linux 系统上安装 Signal

Signal 没有 RPM 的安装文件。然而,Flatpak 包是有的,你可以在 Fedora 上用它来安装 Signal。

flatpak install flathub org.signal.Signal

一旦安装成功,你可以从菜单中运行它,或者在终端中输入以下命令:

flatpak run org.signal.Signal

Signal 和 Telegram 是抛弃掉 WhatsApp 的两个主流而可行的选择。这两个软件都提供原生的 Linux 桌面程序。


via: https://itsfoss.com/install-signal-ubuntu/

作者:Abhishek Prakash 选题:lujun9972 译者:hwlife 校对:wxy

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

Mabox Linux 是一个 Manjaro Linux 重制版,带有一个轻量级的 Openbox 窗口管理器,已经预配置了主题和实用程序。我们将在这篇文章中点评这个发行版。

如果你喜欢窗口管理器,也喜欢基于滚动发布的 Arch Linux,并且正在寻找一个具有这种组合的现成 Linux 发行版,可以试试 Mabox Linux。Mabox Linux 是建立在很棒的 Manjaro Linux 之上的,带有 Openbox 窗口管理器和一些原生实用程序。

由于采用了 Openbox,这个 Linux 发行版在维持超轻量级的资源消耗的同时,也提供了一个漂亮的桌面。改编自 BunsenLabs,并受 Crunchbang 启发的 Mabox Linux 工具也带来了他们的一些应用。

让我们来深入了解一下这个了不起的 Linux 发行版。

Mabox Linux 点评

安装和现场介质

Mabox .ISO 的优势之一是它在 现场介质 Live medium 启动过程中为你提供了自由和专有的驱动程序的两种选择。如果你的系统中有英伟达或其他硬件,这对你有帮助。

现场桌面 Live desktop 让你可以通过 Calamares 安装程序来安装 Mabox。在标准硬件上,安装大约需要 3 到 4 分钟,在我的测试中没有遇到错误。

安装程序也会检测测试设备中的其他操作系统。

具有自定义的外观和感受

Mabox 带来了一个预配置的 Openbox 窗口管理器。这个搭配的版本看起来不错,有深色外观和带面板的菜单。

顶部的面板是用 Tint2 构建的,分成两个部分。左边的面板为你提供了主菜单、文件管理器、网页浏览器的快捷方式。面板上的鼠标左键和右键有不同的菜单。右边的面板包含资源监视器、音量控制、截屏快捷方式和电源菜单。顶部面板不是连续的,在某些主题下,应用程序窗口会停留在顶部。

Mabox Linux with Nord Theme

在桌面的右边部分,预配置的 Conky 脚本可以给你提供系统信息,包括日期、时间、存储和其他显示。

欢迎窗口为你提供了关于设置、帮助和支持的快速启动快捷方式,并有文档链接。

窗口管理器适合于键盘操作,有时不便于用鼠标操作。但由于 Openbox 和预配置的 Mabox,你可以轻松地使用鼠标,同时通过灵巧的键盘快捷方式提高你的工作效率。

桌面上的右键菜单为你提供了轻松的搜索和启动选项。

Search and Launch from desktop

如果你不喜欢默认的外观,你可以通过 Openbox 和 Tint2 面板配置工具,只需点击几下就可以自行定制。

Main Application Menu

Mabox 预设有不同的主题,包括面板和 Concky 脚本。你可以点击并应用这些令人惊叹的 Mabox 主题。如果你不想陷入自己配置面板、颜色和 Conky 的麻烦中,这是一个很好的功能。

一套好的墙纸可以让你随时让它在短时间内看起来更加美妙。

Mabox Themes

应用

Mabox Linux 将所有必要的应用打包在其安装镜像中。以下是所包含的基本应用的简单列表。

  • Terminator 终端
  • Xpad 快速写字板
  • PCManFM 文件管理器
  • FSearch 桌面文件搜索
  • Flameshot 截图工具
  • Geany 文本编辑器
  • Audacious 音乐播放器
  • Firefox 网页浏览器

Mabox 还包括控制中心,以有效管理你的系统。Mabox 控制中心可以让你添加/删除应用、更新你的系统、启动窗口管理组件的几个配置窗口,诸如此类。

如果你找不到某个设置,你可以在 Mabox 控制中心通过其系统设置的逻辑分组轻松找到它们。

Mabox Control Center

性能如何?

Mabox Linux 的性能令人印象非常深刻。由于采用了 Openbox 窗口管理器,Mabox 只用了大约 350MB 多点的内存,而 CPU 在空闲状态下徘徊在 2% 到 3%。

默认安装需要大约 5.39GB 的磁盘空间,这对于预装的这些应用和设置程序来说是不可思议的。

在如此优化下,以至于它消耗内存最多的应用是 Xorg,有 90MB。

所以,我想尝试一下重度使用下的性能。而这个性能也是令人惊讶的。我打开了一个文件管理器、带三个标签的 Firefox、一个用于开发的文本编辑器、一个终端窗口和控制中心。在这样的工作负荷下,Mabox 只消耗了大约 920MB 的内存和 6% 到 7% 的 CPU。

Mabox Linux Heavy Workload Performance

点评几个发行版 的过程中,这是我第一次发现一个发行版在重度工作负荷下不超过 1GB 内存的情况。但在不同的使用情况下,结果可能有所不同。无论如何,这个指标还是令人印象深刻。

Mabox Linux 可以作为日常使用吗?

如果你对带有窗口管理器的 Arch Linux 比较熟悉和适应,你可以把 Mabox Linux 作为日常使用。有几个打包好的带有窗口管理器的 Arch Linux 发行版,而 Mabox 是其中最好的一个。

Mabox Linux Windows 95 pre-configured theme

总结

我认为 Mabox Linux 团队将所有组件与 Arch Linux 打包在一起,并呈现出一个漂亮的 Linux 发行版,做得非常好。它的外观惊艳,而消耗的系统资源却很少。有了基于 Arch Linux 的滚动发布功能,我认为你可以信赖这个发行版的长期使用。

你可以从它的 官方网页 下载 Mabox Linux。


via: https://www.debugpoint.com/2022/03/mabox-linux-2022/

作者:Arindam 选题:lujun9972 译者:geekpi 校对:wxy

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

本文介绍了几种端口转发最常见的使用场景。

 title=

端口转发就是把网络流量从一个网络监听者(称为一个“端口”)发送到另一个上,无论这两个端口是否属于同一台电脑。在这里,端口不是某个物理实体,而是一个监听网络活动的软件程序。

当流量被定向发往到某个特定的端口,它会先到达一个路由器或是防火墙,亦或是其他的网络程序。它最终收到的响应可能会根据它想要通讯的端口来定义。比如,当你使用端口转发时,你可以捕获到发往 8080 端口的流量,然后把它转发到 80 端口。对于接收信号的原端口来说,这个新的目标端口可能和它在同一台设备上,也可能是在另一台设备上。我们在很多情况下都会用到端口转发,实现的方式也有很多。本文将介绍其中最常见的几种使用场景。

使用路由器来进行端口转发

如果你在把服务器架设在家里,那么你通常是不需要转发端口的。你的家庭路由器(通常是你从 网络服务提供商 Internet Service Provider (ISP)获得的 WiFi 设备)有一个内置的防火墙,它的作用是阻止外面的世界访问到你的家庭网络。通过使用端口转发,你可以允许某个指定端口的流量穿过路由器的防火墙,并发送到局域网中的某个指定的 IP 地址。

比如说,你架设了一个 Minetest 服务,并想要邀请你的朋友们来试试。为了让他们能够“穿过”你的路由器,从而到达这个 Minetest 服务,你必须把路由器上的某个端口转发到托管 Minetest 服务的电脑上。Minetest 服务默认运行在 30000 端口。你可以把路由器的 30000 端口转发到你的电脑的 30000 端口上,或者你也可以随便转发到一个更简单的端口上,这样玩家们会更容易记住它。我发现,当使用 30000 端口的时候,人们时常会少数几个 0(特别是没有逗号分隔符的帮助时),所以我一般使用路由器的 1234 端口,然后把它转发到我内部的 30000 端口。

每个制造商的路由器接口都不一样,但是不管你用的是什么牌子的路由器,方法都是相同的。首先,你需要登录到你的路由器。

通常,路由器的 IP 地址和登录信息都会打印在路由器上,或者在是它的文档里。我有一个型号为 TP-Link GX90 的路由器,我在浏览器里访问 10.0.1.1 就可以登录它,但你的路由器可能是 192.168.0.1 或者其他的地址。

我的 GX90 路由器把端口转发功能称为“ 虚拟服务器 virtual servers ”,它是路由器的“NAT 转发”标签下的一个功能选项。NAT 的意思是 “ 网络地址转换 Network Address Translation ”。在其他路由器中,这个功能可能直接就叫做“端口转发”,或者叫“防火墙”、“服务”等。找到正确的功能选项可能需要花费一些时间,因此,你可能需要花点时间研究下你的路由器文档。

当你找到了路由器的端口转发设置,添加一个新规则,命名一个外部端口(在我的例子中是 1234)和一个内部端口(30000)。把外部端口转发到内部端口上,而内部端口绑定在你想要大家访问的电脑的 IP 地址上。如果你需要一些查询本机 IP 地址的帮助,你可以阅读 Archit Modi 写的 《在 Linux 上如何查询本地 IP 地址》。

 title=

一个简单端口转发规则

(图片提供者是 Seth Kenlon,遵循 署名-相同方式共享 4.0 国际 协议)

在这个例子中,访问家庭网络的 1234 端口的流量,都会被转发到了我的家庭服务器的 30000 端口上,后者的 IP 地址是 10.0.1.2。

在继续之前,先保存这个规则。

接下来,你需要知道你的家庭网络的公网 IP 地址是多少。你可以从 ifconfig.me 或者 icanhazip.com 上获得这个地址。你可以在浏览器中打开这两个网站的其中一个,也可以使用 curl 命令来获取到这个 IP。

$ curl ifconfig.me
93.184.216.34

现在,你的朋友们就可以在 Minetest 客户端里输入 169.169.23.49:1234,加入你的 Minetest 服务器啦。

使用防火墙来进行端口转发

系统管理员有时候需要转发访问服务器的流量。比如说,你可能想要接收来自 80 端口的流量,但是用户的服务却运行在 8065 端口。如果不进行端口转发的话,你的用户就不得不在输入浏览器的 URL 末尾,加上一个指定的端口号,例如 example.com:8065。大多数用户都不习惯于考虑端口的问题,所以你需要把访问网络通用的 80 端口的请求拦截下来,然后转发到你的网络应用的具体端口,这会给用户带来巨大的方便。

你可以在服务器上使用 firewall-cmd 来转发流量,它是访问 firewalld 后台进程的 前端 front-end 命令。

首先,设置好你想要转发的端口和协议:

$ sudo firewall-cmd \
    --add-forward-port \
    port=80:proto=tcp:toport=8065

为使修改永久生效,你需要加上 --runtime-to-permanent 选项:

$ sudo firewall-cmd --runtime-to-permanent

网络转发

在网络传输中,除了端口转发外,还有其他种类的 转发 forwarding 形式,例如 IP 转发和代理等。当你熟悉了网络信息在路由时是怎么被处理的之后,你可以试试不同的转发形式(然后使用 tcpdump 或类似的工具)来看看哪一种最好、最符合你的需求。


via: https://opensource.com/article/21/9/what-port-forwarding

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

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