归档 202307

This commit is contained in:
Xingyu Wang
2023-07-31 22:27:30 +08:00
parent a95c18d52f
commit e83a97da9d
58 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,156 @@
[#]: subject: "Create bookmarks for your PDF with pdftk"
[#]: via: "https://opensource.com/article/22/1/pdf-metadata-pdftk"
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
[#]: collector: "lujun9972"
[#]: translator: "toknow-gh"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15973-1.html"
使用 pdftk 为 PDF 文档创建书签
======
> 充分利用现有的技术,提供书签以帮助用户。
![][0]
在 [介绍 pdftk-java][2] 中, 我展示了如何在脚本中使用 `pdftk-java` 来快速修改 PDF 文件。
但是,`pdftk-java` 最有用的场景是处理那种动辄几百页的没有目录的大 PDF 文件。这里所谓的目录不是指文档前面供打印的目录,而是指显示在 PDF 阅读器侧边栏里的目录,它在 PDF 格式中的正式叫法是“<ruby>书签<rt>bookmarks</rt></ruby>”。
![Screenshot of a sidebar table of contents next to a PDF][3]
如果没有书签,就只能通过上下滚动或全局搜索文本来定位想要的章节,这非常麻烦。
PDF 文件的另一个恼人的小问题是缺乏元数据,比如标题和作者。如果你打开过一个标题栏上显示类似 “Microsoft Word - 04_Classics_Revisited.docx” 的 PDF 文件,你就能体会那种感觉了。
`pdftk-java` 让我能够创建自己的书签,我再也不面对这些问题了。
### 在 Linux 上安装 pdftk-java
正如 `pdftk-java` 的名称所示的,它是用 Java 编写的。它能够在所有主流操作系统上运行,只要你安装了 Java。
Linux 和 macOS 用户可以从 [AdoptOpenJDK.net][5] 安装 JavaLCTT 译注:原文为 Linux应为笔误
Windows 用户可以安装 [Red Hat's Windows build of OpenJDK][6]。
在 Linux 上安装 pdftk-java
1. 从 Gitlab 仓库下载 [pdftk-all.jar release][7],保存至 `~/.local/bin/` 或 [其它路径][8] 下.
2. 用文本编辑器打开 `~/.bashrc`,添加 `alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'`
3. 运行 `source ~/.bashrc` 使新的 Bash 设置生效。
### 数据转储
修改元数据的第一步是抽取 PDF 当前的数据文件。
现在的数据文件可能并没包含多少内容,但这也是一个不错的开端。
```
$ pdftk mybigfile.pdf \
data_dump \
output bookmarks.txt
```
生成的 `bookmarks.txt` 文件中包含了输入 PDF 文件 `mybigfile.pdf` 的所有元数据和一大堆无用数据。
### 编辑元数据
用文本编辑器(比如 [Atom][9] 或 [Gedit][10])打开 `bookmarks.txt` 以编辑 PDF 元数据。
元数据的格式和数据项直观易懂:
```
InfoBegin
InfoKey: Creator
InfoValue: Word
InfoBegin
InfoKey: ModDate
InfoValue: D:20151221203353Z00&amp;apos;00&amp;apos;
InfoBegin
InfoKey: CreationDate
InfoValue: D:20151221203353Z00&amp;apos;00&amp;apos;
InfoBegin
InfoKey: Producer
InfoValue: Mac OS X 10.10.4 Quartz PDFContext
InfoBegin
InfoKey: Title
InfoValue: Microsoft Word - 04_UA_Classics_Revisited.docx
PdfID0: f049e63eaf3b4061ddad16b455ca780f
PdfID1: f049e63eaf3b4061ddad16b455ca780f
NumberOfPages: 42
PageMediaBegin
PageMediaNumber: 1
PageMediaRotation: 0
PageMediaRect: 0 0 612 792
PageMediaDimensions: 612 792
[...]
```
你可以将 `InfoValue` 的值修改为对当前 PDF 有意义的内容。比如可以将 `Creator` 字段从 `Word` 修改为实际的作者或出版社名称。比起使用导出程序自动生成的标题,使用书籍的实际标题会更好。
你也可以做一些清理工作。在 `NumberOfPages` 之后的行都不是必需的,可以删除这些行的内容。
### 添加书签
PDF 书签的格式如下:
```
BookmarkBegin
BookmarkTitle: My first bookmark
BookmarkLevel: 1
BookmarkPageNumber: 2
```
* `BookmarkBegin` 表示这是一个书签。
* `BookmarkTitle` 书签在 PDF 阅读器中显示的文本。
* `BookmarkLevel` 书签层级。如果书签层级为 2它将出现在上一个书签的小三角下。如果设置为 3它会显示在上一个 2 级书签的小三角下。这让你能为章以及其中的节设置书签。
* `BookmarkPageNumber` 点击书签时转到的页码。
为你需要的章节创建书签,然后保存文件。
### 更新书签信息
现在已经准备好了元数据和书签,你可以将它们导入到 PDF 文件中。实际上是将这些信息导入到一个新的 PDF 文件中,它的内容与原 PDF 文件相同:
```
$ pdftk mybigfile.pdf \
update_info bookmarks.txt \
output mynewfile.pdf
```
生成的 `mynewfile.pdf` 包含了你设置的全部元数据和书签。
### 体现专业性
PDF 文件中是否包含定制化的元数据和书签可能并不会影响销售。
但是,关注元数据可以向用户表明你重视质量保证。增加书签可以为用户提供便利,同时亦是充分利用现有技术。
使用 `pdftk-java` 来简化这个过程,用户会感激不尽。
*题图MJ/f8869a66-562d-4ee4-9f2d-1949944d6a9c*
--------------------------------------------------------------------------------
via: https://opensource.com/article/22/1/pdf-metadata-pdftk
作者:[Seth Kenlon][a]
选题:[lujun9972][b]
译者:[toknow-gh](https://github.com/toknow-gh)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/seth
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-concentration-focus-windows-office.png?itok=-8E2ihcF (Woman using laptop concentrating)
[2]: https://opensource.com/article/21/12/edit-pdf-linux-pdftk
[3]: https://opensource.com/sites/default/files/uploads/pdtfk_update.jpeg (table of contents)
[4]: https://creativecommons.org/licenses/by-sa/4.0/
[5]: https://adoptopenjdk.net/releases.html
[6]: https://developers.redhat.com/products/openjdk/download
[7]: https://gitlab.com/pdftk-java/pdftk/-/jobs/1527259628/artifacts/raw/build/libs/pdftk-all.jar
[8]: https://opensource.com/article/17/6/set-path-linux
[9]: https://opensource.com/article/20/12/atom
[10]: https://opensource.com/article/20/12/gedit
[0]: https://img.linux.net.cn/data/attachment/album/202307/06/185044ioz6nw1jqkqnhx66.jpg

View File

@@ -0,0 +1,144 @@
[#]: subject: "What is CloudReady? Is it a Viable Open Source Alternative to Chrome OS?"
[#]: via: "https://itsfoss.com/cloudready/"
[#]: author: "Pratham Patel https://itsfoss.com/author/pratham/"
[#]: collector: "lujun9972"
[#]: translator: "toknow-gh"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15987-1.html"
什么是 CloudReady它是 Chrome OS 的开源替代品吗?
======
![][0]
> CloudReady 日趋流行,尤其是在使用低端硬件的用户中。我决定了解一下它并分享我的发现。
### 什么是 CloudReady
[CloudReady][1] 是一个基于谷歌的 Chromium OS 开源代码仓库的操作系统。Neverware 公司是 CloudReady 背后的组织,它开发的 CloudReady 可以部署到现有的 PC 和 Mac 上由于其对硬件的要求极低因此可以保证在上述硬件上的性能提升。大体上来说CloudReady 把你的旧计算机变成了 Chromebook。2020 年底 [Google 收购了 Neverware][2]。
在分享我的经验和想法之前,让我先进一步介绍以下它。
### 谁应该尝试 CloudReady
![CloudReady][3]
CloudReady 主要是面向那些能够从使用类 Chromebook 设备中获益,但是已经在硬件设备上进行了投入的机构。下面是我想到的一些例子:
* 经过 CloudReady 扩展的 Chromium OS 用户界面足够简单,用户从 macOS 或 Windows 转向使用 CloudReady 几乎不需要培训。
* 更好的安全性,用户不会被安装充斥于 macOS 和 Windows 上的恶意软件。
* Chromium OS 的硬件要求低,能够在老旧的硬件上良好运行。
* 通过“<ruby>谷歌管理控制台<rt>Google Admin Console</rt></ruby>”来管理计算机。
* 简单初始安装过程。
下面是运行 CloudReady 的最低硬件要求:
* **CPU**:任何 2008 年之后的 CPU (没有提及对 ARM 架构 CPU 的支持情况,暂且认为仅支持 x86 架构 CPU即英特尔和 AMD 的 CPU
* **内存**2 GB 及以上
* **存储**16GB 及以上
* 具备访问 BIOS 或 UEFI 的权限——为了能够从 USB 安装程序启动
如果你不确定自己的上网本是否能够运行 CloudReadyNeverware 公司发布了能够运行 CloudReady 的认证机型清单。目前该清单已包含超过 450 种机型。你可以通过 [这个官方链接来核查自己的机型][4]。
### CloudReady 与 Chrome OS 有什么不同?
如果你的主要使用目的是以下场景,那么 CloudReady 能够满足你的需要:
* 通过 “<ruby>Neverware 管理门户<rt>Neverware Admin Portal</rt></ruby>”([到 Google 完成收购为止][5])或 “<ruby>谷歌管理控制台<rt>Google Admin Console</rt></ruby>” 来管理 CloudReady 设备。
* 你的工作可以通过网页浏览器来完成(基于网络服务)。
当你了解到“CloudReady 是一个基于 Chrome OS 的操作系统”时,你一定认为它至少应该能够运行安卓应用。
遗憾的是,事实并非如此。开源的 Chromium OS 不支持安卓运行时框架/服务,因此在 CloudReady 中不可用。由于一些法律和技术上的原因Neverware 并没有将安卓运行时添加到 CloudReady 中。
另一方面它也阻止你<ruby>侧载<rt>side-loading</rt></ruby> APK因为根本没有运行安卓应用的东西。
当我试图从<ruby>应用抽屉<rt>app drawer</rt></ruby> 启动 Play Store 时,它在浏览器中打开了谷歌 Play Store 的网页。这真是个坏消息。然而得益于 CloudReady 是基于“<ruby>面向网络<rt></rt>web focused</ruby>”的操作系统的,我的 Chromium 浏览器扩展运行良好。
![A screenshot of the app drawer in CloudReady with the Google Play Store app icon \(which redirects you to the webpage in Chromium\) along with Chrome Extensions as “Apps”][6]
所以如果你想通过 CloudReady 把自己的旧笔记本变成一个非触屏的平板,那你就不太走运了。
### 为什么会有 CloudReady
你也许会疑惑,既然已经有了 Chrome OS为什么 Neverware 还要投入资源开发 CloudReady 这个 “克隆体” 呢?
仔细观察运行 Chrome OS 的设备,你就会发现它们都是预装设备。也就是说 Chrome OS 只适用于生产 Chromebook 的 OEM 厂商。
对于微软的 WindowsOEM 厂商可以预装 Windows用户也可以下载单独的 ISO。然而谷歌并不提供可用于在电脑上安装 Chrome OS 的 ISO。
所以需要开发一个基于 Chromium OS 的操作系统,让你能够将其安装到已有的 PC 或 Mac 上。
CloudReady 为你提供一种安装基于 Chromium OS企业用户也可以通过 Neverware 获得官方支持服务。
### 获取 CloudReady
![CloudReady screenshot][7]
**CloudReady 提供三个版本:家庭版(免费)、教育版(付费)和企业版(付费)**。如果你想先体验一下 CloudReady那就选家庭版。
Neverware 不提供 ISO 镜像但它提供一个启动 U 盘制作工具。这个工具仅限 Windows 操作系统。
Neverware 同时提供一个 RAW 文件,你可以用 [任何基于 Chromium 的浏览器][9] 的 [Chromebook 恢复扩展][8] 来制作启动 U 盘。
> **[下载 CloudReady 家庭版][10]**
如果你想要在虚拟机里体验 CloudReady 的话Neverware 提供了 “.ova” 文件。该 “.ova” 文件无法在 VirtualBox 上使用,它旨在与 VMware 一起使用。
> **[下载 CloudReady “.ova” 文件][11]**
### Ubuntu WebChromeOS 和 CloudReady 的替代品?
如果你想要在旧电脑上使用 CloudReady但是它缺少安卓运行时这点让你失望了也许你可以试试 [Ubuntu Web][12]。
![A screenshot of Ubuntu Web][13]
正如其名称所示Ubuntu Web 是面向寻找 Chrome OS 替代品的人群的 Linux 发行版。
Ubuntu Web 有与 Ubuntu 一样的同步能力,让你能够用 [/e/ Cloud][14](一个专注于隐私的 Google 云同步服务替代品)实现同步。
最重要的是 Ubuntu Web 默认附带了 [Waydroid][15]。
Waydroid 是一种“基于容器的方式,可以在 GNU/Linux 系统上运行一个完整的 Android 系统”。也就是说你可以在 Ubuntu Web 上运行安卓应用(不像 CloudReady
### 总结
尽管你可能会觉得 CloudReady 与 Chrome OS 相比并没有太多的优势,但对于那些想要部署集中管理的、基于 Chromium OS 的操作系统,但又不想在 Chromebook 上投资的组织来说,它似乎是一个不错的选择。
对于使用低端硬件的家庭用户来说,它也是一个不错的选择,但是我们 [已经有很多轻量级的 Linux 发行版][16]。
你是否已经使用过 CloudReady或者你是第一次在这里听说它你对这个项目的总体看法是什么呢
*题图MJ/5c18795b-6978-48a0-a6f7-baffde69ab48*
--------------------------------------------------------------------------------
via: https://itsfoss.com/cloudready/
作者:[Pratham Patel][a]
选题:[lujun9972][b]
译者:[toknow-gh](https://github.com/toknow-gh)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/pratham/
[b]: https://github.com/lujun9972
[1]: https://www.neverware.com/
[2]: https://9to5google.com/2020/12/15/google-acquires-cloudready-os/
[3]: https://itsfoss.com/content/images/wordpress/2022/01/neverware-cloudready.webp?resize=800%2C501&ssl=1
[4]: https://guide.neverware.com/supported-devices/
[5]: https://cloudreadykb.neverware.com/s/article/Neverware-is-now-part-of-Google-FAQ
[6]: https://itsfoss.com/content/images/wordpress/2021/12/07_app_drawer.webp?resize=800%2C599&ssl=1
[7]: https://itsfoss.com/content/images/wordpress/2022/01/cloudready-screenshot.webp?resize=800%2C500&ssl=1
[8]: https://chrome.google.com/webstore/detail/chromebook-recovery-utili/pocpnlppkickgojjlmhdmidojbmbodfm?hl=en
[9]: https://news.itsfoss.com/chrome-like-browsers-2021/
[10]: https://www.neverware.com/freedownload
[11]: https://cloudreadykb.neverware.com/s/article/Download-CloudReady-Image-For-VMware
[12]: https://ubuntu-web.org/
[13]: https://itsfoss.com/content/images/wordpress/2022/01/ubuntu-web-screenshot.jpeg?resize=800%2C500&ssl=1
[14]: https://e.foundation/ecloud/
[15]: https://waydro.id/
[16]: https://itsfoss.com/lightweight-linux-beginners/
[0]: https://img.linux.net.cn/data/attachment/album/202307/11/143146jtnntsf97x9039x9.jpg

View File

@@ -0,0 +1,164 @@
[#]: subject: "What is KDE Connect? How Do You Use It? [Beginners Guide]"
[#]: via: "https://www.debugpoint.com/2022/01/kde-connect-guide/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "yjacks"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16022-1.html"
什么是 KDE Connect怎么用
======
![][0]
> 什么是 KDE Connect它的主要特性是什么它应该如何安装本文提供了基本的使用指南。
科技日新月异。有各种软件、硬件和不同外形的设备。未来,不同设备之间将无缝集成,工作流程会跨越多个设备。每一天,我们都在向跨所有联网设备发送和接收数据的状态迈进。而 KDE Connect 就是引领 Linux 桌面系统向这一天进展的一面旗帜。
### 什么是 KDE Connect
[KDE Connect][1] 是由 KDE 桌面团队开发的,提供了 Linux 系统与其他系统,如 Windows、MacOS、Android 及 Linux的无缝连接。
KDE Connect 安装后会使你拥有接收电话的通知、发送或接受短信、浏览文件、发送或接受文件等许多功能。
此外KDE Connect 在无线网络上遵循安全协议以防止任何隐私泄露。它是自由开源的软件出现任何隐患的可能性微乎其微。组合了这些优良特性KDE Connect 是一款出色的工具。
下文介绍你如何安装和使用它。
### 安装 KDE Connect
本文将为你展示如何在 Linux 发行版和安卓智能手机之间连接。Windows 与安卓的连接也应是如此。
KDE Connect 的设置是一个双向过程。你必须在你的 Linux 发行版和你的安卓智能手机都安装 KDE Connect。
#### 在 Linux 发行版上安装
在你的 Linux 发行版上安装 KDE Connect 很简单。其在所有的主流 Linux 发行版的官方仓库中都可用。如果你在用 Ubuntu并且想在终端安装运行如下指令
```
sudo apt install kdeconnect
```
Fedora
```
sudo dnf install kdeconnect
```
Arch Linux
```
pacman -S kdeconnect
```
或在 “<ruby>软件<rt>Software</rt></ruby>” 应用中搜索并安装。
对于 Windows 和其他 Linux 发行版,请参考 [这个页面][3] 的其他几种下载安装方式。
#### 在安卓智能手机上安装
在安卓设备中,在谷歌 Play 商店中搜索 “KDE Connect” 并安装。
> **[谷歌 Play 商店中的 KDE Connect][4]**
如果你在使用某个自由版本的安卓,你可以用下面的链接来通过 F-droid 安装。(感谢我们的读者提出这一条)。
> **[F-droid 商店中的 KDE Connect][5]**
### 设置 KDE Connect
KDE Connect 可以连接相同网络中的设备。因此,确保你的 Linux 系统和安卓设备都连接到了同一个无线网络中。
打开你手机里的 KDE Connect。你应该可以见到你的 Linux 系统的名称。如果没有看到任何内容,确保你的设备和 Linux 都连接到了同一个网络后点击“<ruby>刷新<rt>Refresh</rt></ruby>”。
![安卓中的 KDE Connect 显示连接到了 Linux 系统][6]
打开 Linux 中的 KDE Connect你应当见到你的手机进入了下图展示的样子。
![配对前的 KDE Connect][7]
现在,点开你手机的名称然后点击 “<ruby>配对<rt>Pair</rt></ruby>”。
紧接着你的手机就会收到一个提醒:是否接受配对。选择 “<ruby>接受<rt>Accept</rt></ruby>”。
![KDE Connect 的配对请求][8]
代表你的手机的图标应当转为绿色 ,这表示你的手机和 Linux 系统都已经连接且配对。
![成功配对后的 KDE Connect][9]
默认情况下,程序会开启以下特性:
* 多媒体控制
* 远程输入
* 远程演示
* 搜寻设备
* 分享文件
以下的特性需要你的安卓设备的额外权限。因为它们与隐私相关,这意味着你需要手动启用它们。
* 短信发送及接收
* 控制媒体播放器
* 手机上接受电脑的键盘输入
* 提醒同步
* 来电提醒
* 联系人同步
* 接受鼠标操作
对于这些特性,你需要去手动打开选项,并在安卓手机中授予权限。然后你就可以在 Linux 设备中享受这些服务了。
### 示例:提醒同步
我将为你演示提醒同步选项应在何处打开。打开你安卓手机中的 KDE Connect 程序,进入 “<ruby>已连接设备<rt>Connected Device</rt></ruby>” 部分。打开 “<ruby>提醒同步<rt>Notification Sync</rt></ruby>” 并选择 “<ruby>打开设置应用<rt>OPEN SETTINGS</rt></ruby>”。
对 KDE Connect 启用通知访问,然后点击 “<ruby>允许<rt>Allow</rt></ruby>”。
![打开同步提醒中][10]
之后将展示你手机上的提醒到你的 Linux 设备。例如,下面的提醒是我在我的测试安卓设备中收到的。
![手机中的样例提醒][11]
同样的信息也展现在了 Linux 系统中的 KDE Connect。
![来自手机的样例信息在 KDE Connect 中][12]
同样地,在给 KDE Connect 权限后,你可以启动对你可用的其他服务。
### 总结
我希望这个指南可以帮助你在你的 Linux 系统和手机中设置 KDE Connect。
你可以在给与一些主要权限后,轻松地设置几个特性,以使 KDE Connect 应用程序发挥最大优势。配置完成后,你不再需要一直看你的手机。因为你可以在工作时轻易地在你的台式电脑或笔记本上阅读提示、回消息。
你觉得 KDE Connect 怎么样?发在下面的评论框来让我知道吧。
*题图MJ/5b09a037-14c3-4f62-a15a-dfd9fb2c7b3a*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/2022/01/kde-connect-guide/
作者:[Arindam][a]
选题:[lkxed][b]
译者:[yjacks](https://github.com/yjacks)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed
[1]: https://kdeconnect.kde.org/
[2]: https://www.debugpoint.com/tag/arch-linux
[3]: https://kdeconnect.kde.org/download.html
[4]: https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp&hl=en_IN&gl=US
[5]: https://f-droid.org/en/packages/org.kde.kdeconnect_tp/
[6]: https://www.debugpoint.com/wp-content/uploads/2022/01/KDE-Connect-in-Android-Device-showing-connected-Linux-System-1024x656.jpg
[7]: https://www.debugpoint.com/wp-content/uploads/2022/01/KDE-Connect-before-pairing-1024x368.jpg
[8]: https://www.debugpoint.com/wp-content/uploads/2022/01/Pairing-Request-for-KDE-Connect-1024x917.jpg
[9]: https://www.debugpoint.com/wp-content/uploads/2022/01/KDE-Connect-after-successful-pairing-1024x249.jpg
[10]: https://www.debugpoint.com/wp-content/uploads/2022/01/Enabling-Notification-Sync-1024x718.jpg
[11]: https://www.debugpoint.com/wp-content/uploads/2022/01/Sample-Notification-in-Mobile-Phone-914x1024.jpg
[12]: https://www.debugpoint.com/wp-content/uploads/2022/01/Sample-Notification-in-KDE-Connect-from-Mobile-Phone.jpg
[0]: https://img.linux.net.cn/data/attachment/album/202307/22/141943rzv64oapavv7aa4o.jpg

View File

@@ -0,0 +1,197 @@
[#]: subject: "Some ways DNS can break"
[#]: via: "https://jvns.ca/blog/2022/01/15/some-ways-dns-can-break/"
[#]: author: "Julia Evans https://jvns.ca/"
[#]: collector: "lujun9972"
[#]: translator: "toknow-gh"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16020-1.html"
DNS 故障集锦
======
![][0]
当我第一次知道 DNS 时,我想它应该不会很复杂。不就是一些存储在服务器上的 DNS 记录罢了。有什么大不了的?
但是教科书上只是介绍了 DNS 的原理,并没有告诉你实际使用中 DNS 可能会以多少种方式破坏你的系统。这可不仅仅是缓存问题!
所以我 [在 Twitter 上发起了一个提问][1],征集人们遇到的 DNS 问题,尤其是那些一开始看起来与 DNS 没什么关系的问题。(“总是 DNS 问题”这个梗)
我不打算在这篇文章中讨论如何解决或避免这些问题,但我会放一些讨论这些问题的链接,在那里可以找到解决问题的方法。
### 问题:网络请求缓慢
如果你的网络比预期的要慢,这是因为某些原因导致 DNS 解析器变慢了。这可能是解析器负载过大或者存在内存泄漏等原因导致的。
我的路由器的 DNS 转发器曾遇到过这个问题,导致我的所有 DNS 请求很慢。我通过重启路由器解决了这个问题。
### 问题DNS 超时
一些网友提到由于 DNS 查询超时,他们的网络请求需要耗时 2 秒多甚至 30 秒。这跟“网络请求缓慢”问题类似,但情况要更糟糕,因为 DNS 请求就会消耗掉几秒钟时间。
Sophie Haskins 有一篇关于 Kubernete DNS 超时的博客文章 [一次 Kube DNS 踩坑经历][2]。
### 问题ndots 设置
一些网友提到在 `/etc/resolv.conf` 中设置 `ndots:5` 时会出现问题。
下面是从 [这篇][3]《Kubernetes 容器荚中 `/etc/resolv.conf` 里设置 `ndots:5` 为什么会拖慢你的程序性能》中引用的 `/etc/resolv.conf `文件。
```
nameserver 100.64.0.10
search namespace.svc.cluster.local svc.cluster.local cluster.local eu-west-1.compute.internal
options ndots:5
```
如果你用上面的配置文件,想要查询得域名是 `google.com`,那么你的程序会调用 `getaddrinfo` 函数,而它会依次查询以下域名:
1. `google.com.namespace.svc.cluster.local.`
2. `google.com.svc.cluster.local.`
3. `google.com.cluster.local.`
4. `google.com.eu-west-1.compute.internal.`
5. `google.com.`
简单来说,它会检查 `google.com` 是不是 `search` 这一行中的某个子域名。
所以每发起一次 DNS 查询,你都得先等待前 4 次查询失败后才能获取到最终查询结果。
### 问题:难以判断系统使用的 DNS 解析器
这本身并不是一个问题,但当你遇到 DNS 问题时,一般都会跟 DNS 解析器有关。我没有一种判断 DNS 解析器的万能方法。
下面是我知道的方法:
* 在 Linux 系统上,最常见的是通过 `/etc/resolv.conf` 来选择 DNS 解析器。但是也有例外,比如浏览器可能会忽略 `/etc/resolv.conf`,而是使用 <ruby>基于 HTTPS 的 DNS <rt>DNS-over-HTTPS</rt></ruby> 服务。
* 如果你使用的是 UDP DNS你可以通过 `sudo tcpdump port 53` 来查看 DNS 请求被发送到了哪里。但如果你使用的是基于 HTTPS 的 DNS 或 <ruby>基于 TLS 的 DNS <rt>DNS over TLS</rt></ruby>,这个方法就不行了。
我依稀记得这在 MacOS 系统上会更加令人迷惑,我也不清楚原因。
### 问题DNS 服务器返回 NXDOMAIN 而不是 NOERROR
这是我曾经遇到过的一个 Nginx 不能解析域名的问题。
* 我设置 Nginx 使用一个特定的 DNS 服务器来解析 DNS 查询
* 当访问这个域名时Nginx 做了两次查询,第一次是对 `A` 的,第二次是对 `AAAA`
* 对于 `A` 的查询DNS 服务器返回 `NXDOMAIN`
* Nginx 认为这个域名不存在,然后放弃查询
* 对于 `AAAA` 的查询 DNS 服务器返回了成功
* 但 Nginx 忽略了对 `AAAA` 返回的查询结果,因为它前面已经放弃查询了
问题出在 DNS 服务器本应该返回 `NOERROR` 的——那个域名确实存在,只是没有关于 `A` 的记录罢了。我报告了这个问题,然后他们修复了这个问题。
我自己也写出过这个问题,所以我理解为什么会发生这种情况——很容易想当然地认为“没有要查询的记录,就应该返回 `NXDOMAIN` 错误码”。
### 问题:自动生效的 DNS 缓存
如果你在生成一个域名的 DNS 记录之前就访问这个域名,那么这个记录的缺失会被缓存起来。当你第一次遇到这个问题时一定会非常吃惊——我也是去年才知道有这个问题。
缓存的 TTL 就是域名的 <ruby>起始权限记录<rt>Start of Authority</rt></ruby>SOA 记录的 TTL ——比如对于 `jvns.ca` ,这个值是一个小时。
### 问题Nginx 永久缓存 DNS 记录
如果你在 Nginx 中使用下面的配置:
```
location / {
proxy_pass https://some.domain.com;
}
```
Nginx 只会在启动的时候解析一次 `some.domain.com`,以后不会再对其进行解析。这是非常危险的操作,尤其是对于那些 IP 地址经常变动的域名。它可能平安无事地运行几个月,然后突然在某个凌晨两点把你从床上纠起来。
针对这个问题已经有很多众所周知的方法了,但由于本文不是关于 Nginx 的,所以我不打算深入探讨它。但你第一次遇到它时一定会很惊讶。
这是一篇关于这个问题发生在 AWS 负载均衡器上的 [博客文章][4]。
### 问题Java 永久缓存 DNS 记录
跟上面类似的问题,只是出现在 Java 上:[据说][5] 这与你 Java 的配置有关。“JVM 的默认 TTL 设置可能会导致只有 JVM 重启时才会刷新 DNS 记录。”
我还没有遇到过这个问题,不过我那些经常写 Java 的朋友遇到过这个问题。
当然,任何软件都可能存在永久缓存 DNS 的问题,但据我所知它经常出现在 Nginx 和 Java 上。
### 问题:被遗忘的 /etc/hosts 记录
这是另一种缓存问题:`/etc/hosts` 中的记录会覆盖你的常规 DNS 设置!
让人迷惑的是 `dig` 命令会忽略 `/etc/hosts` 文件。所以当你使用 `dig whatever.com` 来查询 DNS 信息时,它会告诉你一切正常。
### 问题:电子邮件未发送 / 将成为垃圾邮件
电子邮件是通过 DNSMX 记录, SPF 记录, DKIM 记录)来发送和验证的,所以有些电子邮件问题其实是 DNS 问题。
### 问题:对国际化域名无效
你可以使用非 ASCII 字符甚至是表情符来注册域名,比如 [拉屎网 https://💩.la][6]。
DNS 能够处理国际化域名是因为 `💩.la` 会被用 punycode 编码将转换为 `xn--ls8h.la`
尽管已经有了 DNS 处理国际化域名的标准很多软件并不能很好地处理国际化域名。Julian Squires 的 [干掉 Chrome 浏览器的表情符!!][7] 就是一个非常有趣的例子。
### 问题TCP DNS 被防火墙拦截
有人提到一些防火墙会允许在 53 端口上使用 UDP 协议,但是禁止 TCP 协议。然而很多 DNS 查询需要在 53 端口上使用 TCP这可能会导致很难排查的间歇性的问题。
### 问题musl 不支持 TCP DNS
很多应用程序使用 `libc``getaddrinfo` 来做 DNS 查询。`musl` 是用在 Alpine Docker 容器上的 `glibc` 替代品。而它不支持 TCP DNS。如果你的 DNS 查询的响应数据超过 DNS UDP 数据包的大小512 字节)就会出现问题。
我对此仍然不太清楚,我下面我的理解也可能是错的:
1. `musl``getaddrinfo` 发起一个 DNS 请求
2. DNS 服务器发现请求的响应数据太大了,没法放入一个 DNS 数据包中
3. DNS 服务器返回一个<ruby>空截断响应<rt>empty truncated response</rt></ruby>,并期望客户端通过 TCP DNS 重新用发起查询
4.`musl` 不支持 TCP DNS所以根本不会重试
关于这个问题的文章:[在 Alpine Linux 上的 DNS 解析问题][8]。
### 问题getaddrinfo 不支持轮询 DNS
<ruby>轮询<rt>round robin</rt></ruby> DNS 是一种 <ruby>负载均衡<rt>load balancing</rt></ruby> 技术,每次 DNS 查询都会获得一个不同的 IP 地址。显然如果你使用 `gethostbyname` 做 DNS 查询不会有任何问题,但是用 `getaddrinfo` 就不行了。因为 `getaddrinfo` 会对获得的 IP 地址进行排序。
在你从 `gethostbyname` 切换到 `getaddrinfo` 时可能完全不会意识到这可能会引起负载均衡问题。
这个问题可能会非常隐蔽,如果你不是用 C 语言编程的话,这些函数调用被隐藏在各种调用库背后,你可能完全意识不到发生了这种改变。所以某次看似人畜无害的升级就可能导致你的 DNS 负载均衡失效。
下面是讨论这个的一些文章:
* [getaddrinfo 导致轮询 DNS 失效][9]
* [getaddrinfo轮询 DNS 和 happy eyeballs 算法][10]
### 问题:启动服务时的竞争条件
有人 [提到][11] 使用 Kubernete DNS 时遇到的问题:他们有两个同时启动的容器,一旦启动就会立即尝试解析对方的地址。由于 Kubernete DNS 还没有改变,所以 DNS 查询会失败。这个失败会被缓存起来,所以后续的查询会一直失败。
### 写在最后
我所列举的不过是 DNS 问题的冰山一角,期待大家告诉我那些我没有提到的问题和相关链接。我希望了解这些问题在实际中是如何发生的以及如何被解决的。
*题图MJ/f512f18e-2e1d-4614-bed1-b0a0c373e14d*
--------------------------------------------------------------------------------
via: https://jvns.ca/blog/2022/01/15/some-ways-dns-can-break/
作者:[Julia Evans][a]
选题:[lujun9972][b]
译者:[toknow-gh](https://github.com/toknow-gh)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://jvns.ca/
[b]: https://github.com/lujun9972
[1]: https://twitter.com/b0rk/status/1481265429897261058
[2]: https://blog.sophaskins.net/blog/misadventures-with-kube-dns/
[3]: https://pracucci.com/kubernetes-dns-resolution-ndots-options-and-why-it-may-affect-application-performances.html
[4]: https://medium.com/driven-by-code/dynamic-dns-resolution-in-nginx-22133c22e3ab
[5]: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-jvm-ttl.html
[6]: https://💩.la/
[7]: https://www.youtube.com/watch?v=UE-fJjMasec
[8]: https://christoph.luppri.ch/fixing-dns-resolution-for-ruby-on-alpine-linux
[9]: https://groups.google.com/g/consul-tool/c/AGgPjrrkw3g
[10]: https://daniel.haxx.se/blog/2012/01/03/getaddrinfo-with-round-robin-dns-and-happy-eyeballs/
[11]: https://mobile.twitter.com/omatskiv/status/1481305175440646148
[0]: https://img.linux.net.cn/data/attachment/album/202307/21/122322a5gd2ff1ffagfbnr.jpg

View File

@@ -0,0 +1,106 @@
[#]: subject: "Should You Use a New, Obscure Linux Distro or Stick With the Mainstream Ones?"
[#]: via: "https://news.itsfoss.com/obscure-or-maintsream-distro/"
[#]: author: "Abhishek https://news.itsfoss.com/author/root/"
[#]: collector: "lujun9972"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16013-1.html"
你应该使用新的、较为冷门的 Linux 发行版,还是坚持使用主流的发行版?
======
![][0]
当你开始在桌面上使用 Linux 时,你可能会选择像 Ubuntu 或者 Linux Mint 这样的 [对初学者友好的发行版][1]。
随着你逐渐熟悉 Linux 并且开始喜欢上它,你会加入各种社交渠道上的 Linux 相关社区,关注分享 Linux 内容的网站。而当你这样做的时候,你也会发现一些新的、相对不知名的发行版。
因为你对这个领域还比较陌生,你可能会被诱惑尝试一个接一个的发行版,从而陷入“[发行版快闪][1a]”的陷阱。
![让人心动的发行版][2]
于是你开始问自己这个问题:“我应该使用一个未知的发行版,还是像大多数人那样使用流行的发行版呢”?
简单的答案是坚持使用主流的发行版,但真正的答案需要你自己思考。
### 使用新的、较为冷门的发行版存在的问题
使用“全新的、个人开发者的发行版”存在一个主要问题,那就是不确定性。你无法确定这个项目将会存在多久。可能是一年,也可能是一个月。
我曾经见过几个发行版出现这种情况。比如,[SemiCode OS][3] 由于为程序员而创建而变得流行。类似的发行版 Emperor OS 最近消失了。这只是被停止开发的发行版长列表中的几个例子。
你可能会说,一个有一定用户基础的旧发行版也可能出现同样的情况。这是对的,但通常情况下,有一个社区和多个开发者参与项目。这样你就有一定的保证。
由于开发者的经验不足,新的发行版可能会缺失关键功能。例如,在撰写本文时,看起来令人惊艳的 Garuda Linux 官方并不推荐双启动。
![][4]
尽管 Garuda Linux 拥有相当数量的支持者和几名开发者参与项目,但仍存在这个问题。
### 大多数新的发行版没有提供实质性的内容
你经常会遇到一些全新的发行版,它们基于一些其他流行的发行版,比如 Ubuntu 或 Arch Linux。唯一的不同可能只在于默认的应用程序、主题和壁纸。
如果它是一个“面向程序员的发行版”,它可能会默认安装一些编程应用程序。如果它是一个“游戏发行版”,它可能会默认安装一些工具,如 Steam、Wine 和 [Lutris][5]。你不太可能在图形或硬件方面看到真正的优化。
这就是为什么很多人说,已经有了数百个发行版的拥挤空间中,我们不需要更多的发行版。毕竟,在主流发行版中安装所需的应用程序并不难。
### 我反对这些新的发行版吗?
绝对不是。
你可能会觉得几乎没有提供任何价值的新发行版是多余的。你可能是对的,因为这些项目可能对你来说无关紧要,但对于开发它的人来说,它们是重要的。
你有没有试过学习一门编程语言第一个教程通常是一个“Hello World”的程序。即便是高级程序员也是从“Hello World”开始的。
婴儿不会直接开始跑步。到达那个阶段需要时间。
我对这些项目的看法也是一样的。如果有人热爱 Linux 并且对创建自己的“操作系统”感到兴奋,就让他们去做吧。如果你不想鼓励他们,也不要泼冷水。
大多数项目都是从相同的方式开始的。Linux Mint 是一款非常受欢迎的 Linux 发行版。它于 2006 年开始,并以 Kubuntu 为基础。
真的需要“一个基于 Ubuntu 的类似发行版”吗?实际上并不需要。但看看 Linux Mint 如今的地位。
### 那么,你应该使用新的发行版还是不应该使用呢?
总体而言,这取决于你自己。
如果你不喜欢频繁格式化你的系统,并且希望继续正常生活,那就坚持使用主流的发行版。
如果你喜欢实验,不介意频繁更换操作系统并且愿意冒着搞乱系统的风险,那么你可以尝试新的发行版。就个人而言,我建议你在虚拟机中尝试它们。如果你能有一台空闲的系统专门用于实验,那就更好了。
你也可以使用那些在社区中存在多年,但不如 Ubuntu、Mint、Fedora 和 Debian 等发行版流行的发行版。像 [PCLinuxOS][6]、[Puppy Linux][7]、Peppermint OS 等项目拥有一个较小但活跃的社区。它们绝对是一个可靠的选择,即使用于你的主系统也没有问题。
在选择发行版时,除了基础发行版外,你还应该看看该发行版是否经常更新,并拥有一个活跃的社区。你只需要查看该项目的论坛,看看社区中是否有足够的活动即可。
### 你更喜欢哪种类型的发行版?
这是我在选择新的较为冷门发行版和流行的主流发行版之间提出的想法和建议。
那你呢?你更喜欢哪种类型的发行版?
*题图MJ/930988c0-443d-4d61-a603-1466a5e33d85*
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/obscure-or-maintsream-distro/
作者:[Abhishek][a]
选题:[lujun9972][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/root/
[b]: https://github.com/lujun9972
[1]: https://itsfoss.com/best-linux-beginners/
[1a]: https://linux.cn/article-15949-1.html
[2]: https://news.itsfoss.com/content/images/wordpress/2021/12/cutefishos.png
[3]: https://itsfoss.com/semicode-os-linux/
[4]: https://news.itsfoss.com/content/images/wordpress/2022/02/garuda-linux-dual-boot-warning.png
[5]: https://lutris.net/
[6]: http://www.pclinuxos.com/
[7]: https://puppylinux.com/
[0]: https://img.linux.net.cn/data/attachment/album/202307/19/153022p9kfk11iiecwdi1w.jpg

View File

@@ -0,0 +1,189 @@
[#]: subject: "How to (safely) read user input with the getline function"
[#]: via: "https://opensource.com/article/22/5/safely-read-user-input-getline"
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
[#]: collector: "lkxed"
[#]: translator: "MjSeven"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16009-1.html"
如何在 C 语言中安全地读取用户输入
======
![][0]
> `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][a]
选题:[lkxed][b]
译者:[MjSeven](https://github.com/MjSeven)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/jim-hall
[b]: https://github.com/lkxed
[1]: https://opensource.com/sites/default/files/lead-images/lenovo-thinkpad-laptop-concentration-focus-windows-office.png
[2]: https://creativecommons.org/licenses/by/3.0/us/
[0]: https://img.linux.net.cn/data/attachment/album/202307/18/104358pr5ergummii3f3le.jpg

View File

@@ -0,0 +1,203 @@
[#]: subject: "Shell Scripting is Still Going Strong"
[#]: via: "https://www.opensourceforu.com/2022/05/shell-scripting-is-still-going-strong/"
[#]: author: "Bipin Patwardhan https://www.opensourceforu.com/author/bipin-patwardhan/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16049-1.html"
探索 Shell 脚本的威力
======
> 本文章向你介绍了 Shell 脚本的基础知识以及其在日常生活中的重要性。
![][0]
当我们登录到一个 UNIX/Linux 系统时,我们首先注意到的是闪烁的光标和 `$` 符号之间的空格。这就是 Shell交互界面。多年来它一直是一种无处不在有时甚至是唯一的与计算机交互的界面。在图形用户界面GUI出现和流行之前终端和 Shell 是唯一的机制,可以让计算机按照我们的意图进行操作。乍一看,我们可能会想知道 Shell 的作用,除了将命令传递给底层操作系统以进行执行之外。我们中的大多数人熟悉像 `ls`(用于列出目录内容),`cd`(用于更改当前目录)等命令。通过 Shell我们可以执行这些命令。Shell 理解我们输入的文本 - 将其转换为标记 - 然后在操作系统上执行这些标记。
### 不同的 Shell 变种
最初,终端使用了朴素的 Bourne Shell即 Sh。多年来许多不同的 Shell 变种被开发出来和使用。其中一些流行的包括 C ShellCsh 和 Korn ShellKsh。Sh 在一段时间内不再受欢迎,但通过其最新的化身 —— Bourne Again ShellBash它再次流行起来。
### Shell 实际上是做什么的?
Shell 是操作系统OS和用户之间的直接接口。通过使用命令和应用程序来使用计算机上安装的工具我们可以使计算机按照我们的意愿工作。一些命令是安装在操作系统上的应用程序而某些命令则是直接内置在 Shell 中的。在 Bash 中内置的一些命令包括 `clear``cd``eval``exec`,还有 `ls``mkdir` 这样的应用程序。内置在 Shell 中的命令因 Shell 而异。
在本文中,我们将涵盖与 Bash 相关的几个方面。
### 更多关于 Shell 的内容
我们中的大多数人都用过像 `ls``cd``mkdir` 这样的命令。当我们在一个目录上运行 `ls -l` 命令时,该目录中的所有子目录和文件都会在屏幕上列出。如果数量很大,屏幕会滚动。如果终端不支持滚动条(在很多年里都是如此),则无法查看已滚动过的条目。为了克服这个问题,我们使用像 `more``less` 这样的命令。它们允许我们逐页查看输出。通常使用的命令是:
```
ls -l | less
```
在这里 Shell 是在做什么?看起来像是单个命令,实际上是 `ls``less` 两个命令依次执行。管道符(`|`)将这两个程序连接起来,但连接由 Shell 管理。由于有了管道符Shell 连接了这两个程序——它将 `ls` 命令的标准输出连接到 `less` 的标准输入stdin。管道功能使我们能够将任何程序的输出作为另一个程序的输入提供而无需对程序进行任何更改。这是许多 UNIX/Linux 应用程序的理念——保持应用程序简单,然后将许多应用程序组合在一起以实现最终结果,而不是让一个程序做很多事情。
如果需要,我们可以将 `ls` 的输出重定向到文件中,然后使用 `vi` 查看它。为此,我们使用以下命令:
```
ls -l > /tmp/my_file.txt
vi /tmp/my_file.txt
```
在这种情况下,`ls` 的输出被重定向到一个文件中。这由 Shell 进行管理,它理解 `>` 符号表示重定向。它将其后面的标记视为文件。
### 使用 Shell 自动化
结合命令的能力是使用 Shell 命令创建自动化脚本的关键要素之一。在我最近的项目中,我们使用集群模式执行 Python/SparkPySpark应用程序。每个应用程序执行了许多结构化查询语言SQL语句 - SparkSQL。为了跟踪应用程序的进展我们会打印有关正在执行的 SQL 的详细信息。这样可以让我们保留应用程序中正在发生的情况的日志。由于应用程序在集群模式下执行,要查看日志,我们必须使用以下 `yarn` 命令:
```
yarn log applicationId [application_id]
```
在大多数情况下,应用程序生成的日志非常大。因此,我们通常将日志导入到 `less` 中,或将其重定向到一个文件中。我们使用的命令是:
```
yarn log aplicationId [application_id] | less
```
我们的开发团队有 40 人。每个人都必须记住这个命令。为了简化操作,我将这个命令转换成了一个 Bash 脚本。为此,我创建了一个以 `.sh` 为扩展名的文件。在 UNIX 和 Linux 系统上,文件扩展名并不重要。只要文件是可执行的,它就能工作。扩展名在 MS Windows 上有意义。
### 需要记住的重要事项
Shell 是一个解释器。这意味着它会逐行读取程序并执行它。这种方法的限制在于错误(如果有)在事先无法被识别。直到解释器读取和执行它们时,错误才会被识别出来。简而言之,假如我们有一个在前 20 行完美执行,但在第 21 行由于语法错误而失败的 Shell 程序。当脚本在第 21 行失败时Shell 不会回滚/撤销之前的步骤。当发生这样的情况时,我们必须纠正脚本并从第一行开始执行。因此,例如,如果在遇到错误之前删除了几个文件,脚本的执行将停止,而文件将永远消失。
我创建的脚本是:
```
#!/bin/bash
yarn log applicationId 123 | less
```
…其中 123 是应用程序的 ID。
第一行的前两个字符是特殊字符(“释伴”)。它们告诉脚本这是一个可执行文件,并且该行包含要用于执行的程序的名称。脚本的其余行传递给所提到的程序。在这个例子中,我们将执行 Bash。即使包含了第一行我们仍然必须使用以下命令对文件应用执行权限
```
chmod +x my_file.sh
```
在给文件设置了执行权限之后,我们可以如下执行它:
```
./my_file.sh
```
如果我们没有给文件设置执行权限,我们可以使用以下命令执行该脚本:
```
sh ./my_file.sh
```
### 传递参数
你很快就会意识到,这样的脚本很方便,但立即变得无用。每次执行 Python/Spark 应用程序时,都会生成一个新的 ID。因此对于每次运行我们都必须编辑文件并添加新的应用程序 ID。这无疑降低了脚本的可用性。为了提高其可用性我们应该将应用程序 ID 作为参数传递:
```
#!/bin/bash
yarn log -applicationId ${1} | less
```
我们需要这样执行脚本:
```
./show_log.sh 123
```
脚本将执行 `yarn` 命令,获取应用程序的日志并允许我们查看它。
如果我们想将输出重定向到一个文件中怎么办?没问题。我们可以将输出重定向到一个文件而不是发送给 `less`
```
#!/bin/bash
ls l ${1} > ${2}
view ${2}
```
要运行脚本,我们需要提供两个参数,命令变为:
```
./my_file.sh /tmp /tmp/listing.txt
```
当执行时,`$1` 将绑定到 `/tmp``$2` 将绑定到 `/tmp/listing.txt`。对于 Shell参数从一到九命名。这并不意味着我们不能将超过九个参数传递给脚本。我们可以但这是另一篇文章的主题。你会注意到我将参数命名为 `${1}``${2}`,而不是 `$1``$2`。将参数名称封闭在花括号中是一个好习惯,因为它使我们能够无歧义地将参数作为较长变量的一部分组合起来。例如,我们可以要求用户将文件名作为参数,并使用它来形成一个更大的文件名。例如,我们可以将 `$1` 作为参数,创建一个新的文件名为 `${1}_student_names.txt`
### 使脚本更健壮
如果用户忘记提供参数怎么办Shell 允许我们检查这种情况。我们将脚本修改如下:
```
#!/bin/bash
if [ -z "${2}" ]; then
echo "file name not provided"
exit 1
fi
if [ -z "${1}" ]; then
echo "directory name not provided"
exit 1
fi
DIR_NAME=${1}
FILE_NAME=${2}
ls -l ${DIR_NAME} > /tmp/${FILE_NAME}
view /tmp/${FILE_NAME}
```
在这个程序中,我们检查是否传递了正确的参数。如果未传递参数,我们将退出脚本。你会注意到,我以相反的顺序检查参数。如果我们在检查第一个参数存在之前检查第二个参数的存在,如果只传递了一个参数,脚本将进行到下一步。虽然可以按递增顺序检查参数的存在,但我最近意识到,从九到一检查会更好,因为我们可以提供适当的错误消息。你还会注意到,参数已分配给变量。参数一到九是位置参数。将位置参数分配给具名参数可以在出现问题时更容易调试脚本。
### 自动化备份
我自动化的另一个任务是备份。在开发的初期阶段,我们没有使用版本控制系统。但我们需要有一个机制来定期备份。因此,最好的方法是编写一个 Shell 脚本,在执行时将所有代码文件复制到一个单独的目录中,将它们压缩,并使用日期和时间作为后缀来上传到 HDFS。我知道这种方法不如使用版本控制系统那样清晰因为我们存储了完整的文件查找差异仍然需要使用像 `diff` 这样的程序;但它总比没有好。尽管我们最终没有删除代码文件,但团队确实删除了存储助手脚本的 `bin` 目录!!!而且对于这个目录,我没有备份。我别无选择,只能重新创建所有的脚本。
一旦建立了源代码控制系统,我很容易将备份脚本扩展到除了之前上传到 HDFS 的方法之外,还可以将文件上传到版本控制系统。
### 总结
如今,像 Python、Spark、Scala 和 Java 这样的编程语言很受欢迎,因为它们用于开发与人工智能和机器学习相关的应用程序。尽管与 Shell 相比,这些语言更强大,但“不起眼”的 Shell 提供了一个即用即得的平台让我们能够创建辅助脚本来简化我们的日常任务。Shell 是相当强大的尤其是因为我们可以结合操作系统上安装的所有应用程序的功能。正如我在我的项目中发现的那样即使经过了几十年Shell 脚本仍然非常强大。我希望我已经说服你尝试一下了。
### 最后一个例子
Shell 脚本确实非常方便。考虑以下命令:
```
spark3-submit --queue pyspark --conf "spark.yarn.principal=abcd@abcd.com" --conf "spark.yarn.keytab=/keytabs/abcd.keytab" --jars /opt/custom_jars/abcd_1.jar --deploy-mode cluster --master yarn $*
```
我们要求在执行 Python/Spark 应用程序时使用此命令。现在想象一下,这个命令必须每天被一个由 40 个人组成的团队多次使用。大多数人会在记事本中复制这个命令,每次需要使用时,会将其从记事本中复制并粘贴到终端中。如果复制粘贴过程中出现错误怎么办?如果有人错误使用了参数怎么办?我们如何调试使用的是哪个命令?查看历史记录并没有太多帮助。
为了让团队能够简单地执行 Python/Spark 应用程序,我们可以创建一个 Bash Shell 脚本,如下所示:
```
#!/bin/bash
SERVICE_PRINCIPAL=abcd@abcd.com
KEYTAB_PATH=/keytabs/abcd.keytab
MY_JARS=/opt/custom_jars/abcd_1.jar
MAX_RETRIES=128
QUEUE=pyspark
MASTER=yarn
MODE=cluster
spark3-submit --queue ${QUEUE} --conf "spark.yarn.principal=${SERVICE_PRINCIPAL}" --conf "spark.yarn.keytab=${KEYTAB_PATH}" --jars ${MY_JARS} --deploy-mode ${MODE} --master ${MASTER} $*
```
这展示了一个 Shell 脚本的强大之处,让我们的生活变得简单。根据你的需求,你可以尝试更多的命令和脚本,并进一步探索。
*题图MJ/f32880e8-0cdc-4897-8a1c-242c131111bf*
--------------------------------------------------------------------------------
via: https://www.opensourceforu.com/2022/05/shell-scripting-is-still-going-strong/
作者:[Bipin Patwardhan][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.opensourceforu.com/author/bipin-patwardhan/
[b]: https://github.com/lkxed
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/05/Penguin-with-linux-command.jpg
[0]: https://img.linux.net.cn/data/attachment/album/202307/31/070953kv0kdvld33h55uk5.jpg

View File

@@ -0,0 +1,93 @@
[#]: subject: "Fedora Linux editions part 1: Official Editions"
[#]: via: "https://fedoramagazine.org/fedora-linux-editions-part-1-official-editions/"
[#]: author: "Arman Arisman https://fedoramagazine.org/author/armanwu/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16050-1.html"
Fedora Linux 的家族(一):官方版本
======
![][0]
Fedora Linux 提供了多个变体以满足你的需求。你可以在我之前的文章《[Fedora Linux 的各种版本][4]》中找到所有 Fedora Linux 变体的概述。本文将对 Fedora Linux 官方版本进行更详细的介绍。共有五个 <ruby>版本<rt>Edition</rt></ruby> Fedora Workstation、Fedora Server、Fedora IoT、Fedora CoreOS 和 Fedora Silverblue。Fedora Linux 下载页面目前显示其中三个为 *官方* 版本,另外两个为 *新兴* 版本。本文将涵盖所有五个版本。
### Fedora Workstation
如果你是笔记本电脑或台式计算机用户,则 Fedora Workstation 是适合你的操作系统。Fedora Workstation 非常易于使用。你可以用它满足日常工作、教育、爱好等需求。例如,你可以使用它创建文档,制作演示文稿,上网冲浪,处理图像,编辑视频等等。
这个 Fedora Linux 版本默认使用 GNOME 桌面环境。你可以使用这种环境舒适地工作和进行各种活动。你还可以根据个人喜好自定义 Fedora Workstation 的外观,让你在使用过程中更加舒适。如果你是 Fedora Workstation 的新用户,你可以阅读我之前的文章 [在安装 Fedora Workstation 之后要做的事][5]。通过该文章,你将更容易上手 Fedora Workstation。
更多信息请参阅以下链接:
> **[Fedora Workstation][6]**
### Fedora Server
许多公司需要自己的服务器来支持基础设施。Fedora Server 版操作系统配备了一个强大的基于 Web 的管理界面称为 Cockpit具有现代化的外观。Cockpit 可以让你轻松查看和监控系统性能和状态。
Fedora Server 包含一些开源世界中的最新技术,并得到一个活跃的社区的支持。它非常稳定可靠。然而,并不保证 Fedora 社区中的任何人都能够在你遇到问题时提供帮助。如果你运行的是关键任务的应用程序,并且可能需要技术支持,你可能要考虑使用 [Red Hat Enterprise Linux][7]。
更多信息请访问以下链接:
> **[Fedora Server][9]**
### Fedora IoT
为物联网设备专门设计的操作系统越来越受欢迎。Fedora IoT 就是为了应对这一需求而创建的操作系统。Fedora IoT 是一个不可变操作系统,使用 OSTree 技术来进行原子更新。该操作系统专注于物联网设备的安全性这非常重要。Fedora IoT 支持多种架构。它还配备了一个基于 Web 的配置控制台,因此可以在不需要键盘、鼠标或监视器物理连接到设备的情况下进行远程配置。
更多信息请访问以下链接:
> **[Fedora IoT][10]**
### Fedora CoreOS
Fedora CoreOS 是一个面向容器的操作系统。该操作系统用于在任何环境中安全可靠地运行应用程序。它设计用于集群,但也可以作为独立系统运行。该操作系统与 Linux 容器配置具有高度兼容性。
更多信息请访问以下链接:
> **[Fedora CoreOS][11]**
### Fedora Silverblue
这个版本是 Fedora Workstation 的一个变体界面并没有太大区别。但是Fedora Silverblue 是一个不可变的操作系统,采用以容器为中心的工作流程。这意味着每个安装的副本与同一版本的其他副本完全相同。其目标是使其更加稳定,更少出现错误,并更容易进行测试和开发。
更多信息请访问以下链接:
> **[Fedora Silverblue][12]**
### 结论
Fedora Linux 的每个版本都有不同的目的。多个版本的可用性可以帮助你获得适合你需求的操作系统。本文讨论的 Fedora Linux 版本是在 Fedora Linux 的主要下载页面上提供的操作系统。你可以在 [https://getfedora.org/][13] 找到下载链接和更完整的文档说明。
*题图MJ/90ffba71-aee2-4429-a846-41f06997792c*
--------------------------------------------------------------------------------
via: https://fedoramagazine.org/fedora-linux-editions-part-1-official-editions/
作者:[Arman Arisman][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://fedoramagazine.org/author/armanwu/
[b]: https://github.com/lkxed
[1]: https://fedoramagazine.org/wp-content/uploads/2022/04/FedoraMagz-FedoraEditions-1-Official-816x345.png
[2]: https://unsplash.com/@fredericp?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
[3]: https://unsplash.com/s/photos/blue-abstract?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
[4]: https://fedoramagazine.org/introduce-the-different-fedora-linux-editions/
[5]: https://fedoramagazine.org/things-to-do-after-installing-fedora-34-workstation/
[6]: https://getfedora.org/en/workstation/
[7]: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux
[8]: https://getfedora.org/en/server/
[9]: https://getfedora.org/en/server/
[10]: https://getfedora.org/en/iot/
[11]: https://getfedora.org/en/coreos?stream=stable
[12]: https://silverblue.fedoraproject.org/
[13]: https://getfedora.org/
[0]: https://img.linux.net.cn/data/attachment/album/202307/31/091317uqdzd48u2nuqdt26.jpg

View File

@@ -0,0 +1,143 @@
[#]: subject: "A Complete Guide to Cloud Service Architectures"
[#]: via: "https://www.opensourceforu.com/2022/09/a-complete-guide-to-cloud-service-architectures/"
[#]: author: "Mir H.S. Quadri https://www.opensourceforu.com/author/shah-quadri/"
[#]: collector: "lkxed"
[#]: translator: "cool-summer-021"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15979-1.html"
云服务架构完全指南
======
![][0]
> 经过大约 16 年的演变,云计算已经成为一种几乎所有网民都在使用的技术。它可以作为一种服务,用于满足各类企业和消费者的需求。因此,在云计算中正在使用多种服务架构,旨在根据最新的需求来定制所需技术。本文就如今使用的所有服务架构,提供一份完全指南。
尽管在全球范围内建立互相协同的计算机网络的构想在 20 世纪 60 年代初就提出了,但直到 2006 年,谷歌的首席执行官 <ruby>埃里克·施密特<rt>Eric Schmidt</rt></ruby> 在当时的背景下引入了“<ruby>云计算<rt>cloud computing</rt></ruby>”一词,这种构想才成为一种正式的概念。
云计算可以简单理解为遍布于世界各地的远程服务器网络,通过互联网共享数据和协同工作,从而为企业和消费者提供服务。虽然这样的定义比较武断,但它包含了云计算背后的核心思想。促成这项技术发展的主要因素是对“数据粘性”的需求,就是令数据更容易被各种设备访问,同时也要减少数据丢失的风险。如果用户甲只在一台服务器上保存了数据,对于用户甲来说,只要有一台服务器中断,数据就很有可能永久性丢失。这种做法无异于“把所有鸡蛋放在同一个篮子里”,从来都不是一个好办法,特别是当你在处理对公司和消费者具有重要意义的数据时。但如果你在多台服务器上备份了用户甲的数据,将有两个主要好处:其一,即使一台服务器中断,用户甲仍然可以正常获取数据;其二,云服务可以从负荷最小的、离他最近的那台正常运作的服务器获取数据。这使用户甲可以在不同设备上更快、更容易地获取数据。
历经大约 16 年的发展,云计算从起初只是一种用于备份图片的工具,变为了互联网的骨干。如今几乎所有的应用,从 Office 到 Asana 以及 Todolist都利用云计算来实现实时访问和数据共享。几乎任意一款你能想像到的应用都在使用云计算。从 Gmail 和 YouTube到Instagram一切都使用云计算以提供快速、便捷、可靠的数据访问功能。
提供云计算服务的公司称为云服务提供商。亚马逊、谷歌、微软、Salesforce、Cloud9 等都是 B2B 和 B2C 领域的云服务提供商。
在早期,云服务供应商通常指提供三类服务:
* <ruby>软件即服务<rt>Software as a Service</rt></ruby>SaaS
* <ruby>平台即服务<rt>Platform as a Service</rt></ruby>PaaS
* <ruby>基础设施即服务<rt>Infrastructure as a Service</rt></ruby>IaaS
然而,随着行业需求不断发展,区块链和 AI 等新技术的出现,云服务提供商也开发了新的模式,用于更好地满足客户的各种需求。本文将详细论述如今大众普遍使用的那些云计算模式。
### 云端的架构
我们已经了解了什么是云计算,以及它是如何发展成一个高达 4450 亿美元产值的行业,现在我们从技术视角来理解云计算。通常一个云端架构都由两个主要部件组成 —— <ruby>前台<rt>front-end</rt></ruby>和 <ruby>后台<rt>back-end</rt></ruby>。
![Figure 1: The architecture of a cloud (Courtesy: TechVidvan)][1]
前台包含客户端基础设施,有终端设备和用于与云端通信的应用程序界面。在现实世界里,你的智能手机和谷歌云端硬盘就是前台,它们用于访问谷歌云。
后台包含云端基础设施,包括运行云计算服务所需的一切设备。服务器、虚拟机、服务和存储都是由云端基础设施提供的。为了对它们有个全局的概念,现在我们来了解一下后台的每个组件。
* <ruby>应用<rt>Application</rt></ruby>:用户或企业使用的、通过互联网与云端互动的任何应用程序的后台。
* <ruby>服务<rt>Service</rt></ruby>:云端提供的服务型基础设施。本文将详细论述各种不同的服务。
* <ruby>运行时<rt>Runtime</rt></ruby>:提供给虚拟机的运行时和执行系统。
* <ruby>存储<rt>Storage</rt></ruby>:具有灵活的伸缩性的用户/企业数据获取和管理系统。
* <ruby>基础设施<rt>Infrastructure</rt></ruby>:运行云端所需的硬件和软件。
* <ruby>安全<rt>Security</rt></ruby>和<ruby>管理<rt>Management</rt></ruby>:建立安全机制,保护用户/企业数据,管理各个云服务单元,避免过载和服务停机。
### 软件即服务SaaS
“软件即服务”是一种云计算模式通过互联网将软件和应用程序作为一种服务提供。谷歌云端硬盘或谷歌工作空间都是比较典型的例子。谷歌云端硬盘内的所有应用例如文档、工作表、幻灯片、表格等它们都可以通过使用浏览器访问并自动保存于云端。你可以在任意设备上获取文件的最新版本。你唯一需要做的就是登录你的账户。这就是“软件即服务”模式的优点。你不需要在你的设备上安装任何东西也不需要使用你的本地存储空间你可以直接访问云端的应用程序并省略了使用本地软件时的很多繁杂操作。SaaS 一般遵循“按需付费”法则,你只要为你需要的服务支付费用。你总是可以通过支付更多的费用来购买更多的存储和/或功能,或者根据你的要求来降低你的套餐。
#### SaaS 的好处
1. SaaS 具有高度的可伸缩性,这归功于它的“按需付费”思想。你可以根据自身需求增加/减少存储空间或程序功能。
2. 考虑到它提供的特性,如通过任何操作系统的任何设备进行实时访问,它是非常合算的。
3. 它在客户端涉及的工作很少。不需要安装或进行复杂的步骤,就可以完成软件的初始化。你可以从你的浏览器和/或应用程序中舒适地使用它。
4. 不必手动安装,软件会自动更新,而且更新过程中你也不必等待。
### 平台即服务PaaS
并不是每家科技初创公司都有必要的资源来维护自己的基础设施以便在云端运行他们的应用程序。公司尤其是创业型公司通常更倾向于把应用部署于云端这样就不必处理后台基础设施了。这就是“平台即服务”这种模式的用武之地了。Heroku 等公司提供了基于“平台即服务”的云端解决方案,令公司和个人可以在不需要直接与硬件交互的情况下就能部署并运行他们的应用程序。跟“软件即服务”类似,这种模式也提供了灵活性,你只需选择所需的服务,同时也从基础设施的角度提供了可伸缩性和安全性。
#### PaaS 的好处
1. 省去了操作云端基础设施的麻烦。你将其外包给在其云中托管你的应用程序的公司。这令你能专注于应用程序开发工作的各个生命周期。
2. PaaS 是可扩展的。你可以根据需要增加或减少存储需求、附加服务等。
3. 你设置的唯一安全参数是针对你自己的应用程序。云安全是由你的云服务提供商处理的。
4. 对公司和个人来说,把应用程序托管在云端,在时间和成本上都是合算的,特别是那些无法承担基础设施建设成本的创业型公司。
### 基础设施即服务IaaS
IaaS 相对于 PaaS 更进一步,给予用户更多的自主权。在 IaaS 模式中,云服务提供商让你对云端的底层基础设施进行操控。简而言之就是你可以根据公司需要自行设计云端环境,从专用服务器和虚拟机,到运行于服务器的操作系统,你还可以设置带宽,创建自己的安全协议,以及创建云基础设施所需的其他项目。亚马逊 AWS 和谷歌计算引擎GCE都是使用 IaaS 模式的很好的例子。鉴于此模式还可以实现用户对硬件的自主操控它也被称为硬件即服务HaaS
#### IaaS 的好处
1. “按需付费”模式中的细粒度灵活性。你可以自行决定运行多少台虚拟机以及使用多少时间。你还可以按小时付费。
2. 以“按需付费”为核心思想,它具有高度的可伸缩性。
3. 完全的自主权,对基础设施中的一切事项的控制,省去了在公司所在地点驻场维护服务器的麻烦。
4. 大多数公司保证正常运行时间、安全性和 24/7 的现场技术支持,这对企业来说非常重要。
### 存储即服务StaaS
谷歌云端硬盘、OneDrive、Dropbox 和 iCloud 是 <ruby>存储即服务<rt>Storage as a Service</rt></ruby> 行业内大名鼎鼎的产品。StaaS 就像它听起来那么简单。如果你需要的只是通过任意设备可以实时访问的云端存储空间StaaS 就是可用的选项之一。很多公司和个人都使用这样的服务来备份自己的数据。
#### StaaS 的好处
1. 借助内置的版本控制系统,实时访问最新数据。
2. 可以使用安装任意操作系统的任何设备访问数据。
3. 随着你创建、编辑和删除文件,实时备份你的数据。
4. 遵循“按需付费”模式,你可以根据需要自行确定存储空间大小。
### 一切即服务XaaS
IaaS、PaaS、SaaS 和 StaaS 的混合版,就是所谓的“<ruby>一切即服务<rt>Anything/Everything as a Service</rt></ruby>”模式,它在云计算相关社区内快速引发关注。客户可能有多种多样的需求,这些需求可能是各种不同模式的混合。在这种场景下,应当为用户提供自由选择所需服务的功能,让他们从各种不同的层级选择服务,从而创建自定义的“按需付费”模式。这种方式的好处在于,让用户根据自身需求自由选择相应的云服务。
#### XaaS 的好处
1. 可以选择你喜欢的东西和你喜欢的方式。
2. 只需要为你需要的服务支付费用,而且不需要支付任何基于层级系统的基本费用。
3. 选择你的基础设施、平台和功能的粒度水平。
4. 只要使用得当无论在时间、成本、效用上XaaS 都是非常有效的。
### 功能即服务FaaS
在某些情况下,公司或个人需要 PaaS但不是所有的功能都需要。例如基于触发器的系统如定时任务只需要在无服务器系统上运行一段代码或一个函数就可以实现一个特定的目标。例如某客户需要创建一个网站的流量监测系统在页面下载量达到一定数量时发送通知。这样的需求简而言之就是在云端运行一段持续检查要执行的触发器的代码。使用 PaaS 的成本较高。此时就是“<ruby>功能即服务<rt>Function as a Service</rt></ruby>”发挥作用的时候了。许多公司,例如 Heroku向客户提供 FaaS它只存储一段代码或一个方法只会在被触发的情况下运行。
#### FaaS 的好处
1. 你只需要支付代码运行的费用。托管代码通常是不收费的,除非计算成本很高。
2. 它不会有使用 PaaS 的那些麻烦,却让你享受所有好处。
3. 无论如何,你都不必关心底层基础设施。因此,你只需要上传代码,而不必关心任何虚拟机维护相关事宜。
4. FaaS 让你的开发更加敏捷,即编写函数式代码。
### 区块链平台即服务BPaaS
近年来,区块链席卷了科技行业。它是目前最受欢迎的技术之一,比它更受欢迎的只有人工智能和数据科学相关技术。区块链如此吸引人的原因是它提供了安全、可伸缩和透明的开放式账本架构。这些功能对于许多应用程序都是必要的,例如银行、选举系统,甚至社交媒体也需要这些功能。随着如此广泛的应用,有必要能够在云上托管这样的产品,其模式专门满足这种技术的需求。这就是<ruby>区块链平台即服务<rt>Blockchain Platform as a Service</rt></ruby>BPaaS发挥作用的地方。如今包括亚马逊 AWS 和微软 Azure 在内的许多公司都在为专门寻求在云中托管基于区块链的应用程序的客户提供BPaaS解决方案。
#### BPaaS 的好处
1. 它满足了区块链行业的特定需求,例如支持用于编写智能合约的专用语言。
2. 通过提供 API 桥接,支持与区块链(如以太坊)集成。
3. 支持在区块链技术的应用中使用自定义数据库。
4. 云的所有优点它也同样具备,即“按需付费”功能、可扩展性、安全性和访问便捷性。
*题图MJ/db8225c1-e970-4bc4-80db-514368955af2*
--------------------------------------------------------------------------------
via: https://www.opensourceforu.com/2022/09/a-complete-guide-to-cloud-service-architectures/
作者:[Mir H.S. Quadri][a]
选题:[lkxed][b]
译者:[cool-summer-021](https://github.com/cool-summer-021)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.opensourceforu.com/author/shah-quadri/
[b]: https://github.com/lkxed
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/08/Figure-1-The-architecture-of-a-cloud-2.jpg
[0]: https://img.linux.net.cn/data/attachment/album/202307/08/203631cnch79wfocbwtwhh.jpg

View File

@@ -0,0 +1,138 @@
[#]: subject: "Build an open source project using this essential advice"
[#]: via: "https://opensource.com/article/22/9/build-open-source-project"
[#]: author: "Bolaji Ayodeji https://opensource.com/users/bolajiayodeji"
[#]: collector: "lkxed"
[#]: translator: "wcjjdlhws"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15999-1.html"
构建成功的开源项目的重要建议
======
![][0]
> 使用这些步骤来为你的第一个或接下来的项目打下坚实的基础。
[开源][2] 是一个蓬勃发展且有益的生态系统,它通过分散模式和社区贡献开发的软件,公开解决社区和行业问题。
随着这个生态系统的爆炸式发展,许多开发者想要参与并且构建新的开源项目。问题是:如何成功实现这一目标呢?
这篇文章将会揭秘开源项目的生命周期与结构。给你一个对开源项目内部运作的概述,并根据我个人的经验,向你展示如何构建一个成功和可持续发展的项目。
### 对开源的简单概述
<ruby>[开源促进会][3]<rt>Open Source Initiative</rt></ruby>OSI提供了对“<ruby>开源<rt>Open Source</rt></ruby>”的正式、详细的定义,但是维基百科提供了一个很好的总结:
> 开源软件是指根据许可证发布的计算机软件,版权持有人授予用户使用、研究、更改和向任何人、为了任何目的分发软件和它的源代码的权利。
开源软件通常在网络上有公开的代码,它由多人合作或一人开发。这就需要与来自不同地区、不同文化和不同技术背景的人合作,而且往往是远程合作。
### 开源项目的构成
就像人类的身体,一个开源项目由多个结构组成,这些结构构成了整个系统。我认为它们是两个分支:人员(微观)和文档(宏观)。
#### 分支一:人员
通常,一个开源项目包括以下人群:
* 创建者:创建项目的人
* 维护者:积极管理整个项目的人
* 贡献者:为项目做贡献的人(像你一样的人!)
* 用户:使用这个项目的人,包括开发者和非技术客户
* 工作组将贡献者分成特定领域的小组专注于围绕特定主题领域如文档、指引、测试、DevOps、代码审查、性能、研究等的集合。
* 赞助人:为项目提供资金支持的人
当你准备构建一个新项目时,你需要考虑以上列表中的每一个群组。你对他们每个人有什么计划?
* 对于维护者,请确定任用维护者的标准。通常,积极的贡献者就是最适合的维护者。
* 对于用户和贡献者,你需要准备可靠的文档、引导流程和他们使用你的项目取得成功所需的一切。
* 对于工作组,请确定你是否需要它们,以及你的项目将来如何有逻辑地拆分。
* 最后,对于赞助人,你必须提供足够的数据和有关你项目的信息,以便他们选择赞助你。
你不必在你项目的起始阶段解决上面所有问题。然而,在早期阶段思考它们是很明智的,这样你就能打下正确的基础,确保未来的扩建项目能够站稳脚跟并取得成功。
#### 分支二:文档
开源项目通常包括下列文档,通常为纯文本或 markdown 格式:
* 许可证(`License` 这份法律文件解释了如何以及在何种程度上可以自由使用、修改和共享本项目。OSI 网站上有 OSI 认可的许可证列表。如果没有明确的许可证,你的项目在法律上就不是开源的!
* 行为准则:该文件概述了任何决定以任何方式参与项目的人的规则、规范、可接受做法和责任(包括当有人违反任何规则时会发生什么)。[贡献者公约][4] 是一个很好的示例,它是开源的(采用知识共享许可协议)。
* 自述文件(`README`):这个文件向新用户介绍你的项目。在很多 Git 托管网站上,比如 GitLab、GitHub 和 Codeberg自述文件会显示在仓库的初始文件列表下。这里通常会提供文档以及其他必要文档的链接。
* 文档(`Documentation`这是一个包含所有本项目文件资源的文件或目录包括指南、API 参考、教程等。
* 贡献指南(`Contributing`):包含一份说明如何为项目做出贡献的文件,包括安装指南、配置等。
* 安全(`Security`):包括一个解释如何提交漏洞报告或安全问题的文件。
此外,一个项目通常有用于议题、支持和协作的网页。
大致包括:
* 议题或错误报告:用户可以报告错误的地方。该页面还为开发人员提供了一个地方,让他们可以分配自己的任务来修复一个或多个错误。
* 拉取或合并请求:提供功能增强建议和错误解决方案的地方。这些补丁可以由任何人创建,由维护者审核,然后合并到项目代码中。
* 讨论:维护者、贡献者和用户讨论开源项目的地方。它可以是一个专门的网站,也可以是协作编码网站中的一个论坛。
大多数项目还通过在线聊天的形式为社区成员之间的对话和互动提供交流渠道。
### 许可证
[许可证][5] 也许是创建开源项前需要考虑的最简单但也是最重要的标准。许可证定义了允许使用、修改和共享项目源代码和其他组件的条款和条件。
许可证包含大量的法律术语,很多人并不完全理解。我使用 [choosealicense.com][6],它可以帮助你根据你的目标社区、你从使用你的代码的人那里获得补丁的愿望,或者你允许别人使用你的代码而不分享他们对你的代码所做的改进来选择许可证。
![图片由: (Bolaji Ayodeji, CC BY-SA 4.0)][7]
这为何时使用 MIT 许可或 GNU GPLv3 许可提供了指导。它还建议为社区做出贡献的人们使用该社区所偏好的许可证。该图表还指出,还有更多许可证可供选择。网站 choosealicense.com 有一个基于文本的版本,可以链接到更详细的信息。
### 创建一个开源项目的 13 个阶段
现在是关键问题:如何开始开源软件项目?
以下是我所认为的开源项目的各个阶段。
1. 集思广益,撰写提纲,妥善记录。
2. 开始根据你的想法进行开发。这通常包括确定要使用的正确工具和技术栈、编写一些代码、对代码进行版本控制、调试、喝点咖啡、在 StackOverflow 上闲逛、使用其他开源项目、睡觉、构建一些东西来解决确定的问题 —— 或者只是为了好玩!
3. 在本地测试项目,根据需要编写一些单元测试和集成测试,根据需要设置 [CI/CD 管道][8],创建一个暂存分支(在合并到主分支之前测试代码的测试分支),并完成部署项目所需的其他工作。
4. 编写 [良好有效的文档][9]。这应该包括你的项目是做什么的,为什么它是有用的,如何开始使用它(使用、安装、配置、贡献),以及人们在哪里可以得到支持。
5. 确保记录所有你希望使用的代码约定。使用诸如 <ruby>代码检查工具<rt>Linter</rt></ruby>、代码格式化工具、Git 钩子和 <ruby>注释规范化工具<rt>Commitizen</rt></ruby> 命令行工具等工具来执行这些约定。
6. 选择合适的许可证并创建自述文件。
7. 在互联网上发布项目(可能最初是一个私有的资源库,在这一步将其公开)。
8. 建立发布和记录更新日志的流程(你可以使用 Changesets 等工具)。
9. 向全世界推广项目!你可以在社交媒体上发帖、创办新闻简讯、私下与朋友分享、进行产品发布、现场直播或其他任何你知道的传统营销策略。
10. 使用任何可用的融资平台寻求资金支持,如 Open Collective、GitHub Sponsors、Patreon、Buy me a Coffee、LiberaPay 等。当你在这些平台上创建账户时,请在项目文档和网站中添加相关链接。
11. 围绕你的项目建立一个社区。
12. 在必要时,考虑引入工作组,将项目管理分成合理的部分。
13. 不断实施新理念,维持项目背后的资源和人员。
随着项目的进展,对项目的不同部分进行评估非常重要。这将为你提供可用于评估和未来发展战略的数据。
### 现在开始一个项目吧!
我希望这篇文章能帮助你推进你一直在考虑的项目。
你可以将其用作指南,并在构建你的一流开源软件项目时填补我遗漏的任何空白。
*题图MJ/a22b4011-9b1e-41e6-a73f-bdeac4858007*
--------------------------------------------------------------------------------
via: https://opensource.com/article/22/9/build-open-source-project
作者:[Bolaji Ayodeji][a]
选题:[lkxed][b]
译者:[wcjjdlhws](https://github.com/wcjjdlhws)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/bolajiayodeji
[b]: https://github.com/lkxed
[1]: https://opensource.com/sites/default/files/lead-images/BUSINESS_buildtogether.png
[2]: https://opensource.com/resources/what-open-source
[3]: https://opensource.org
[4]: https://www.contributor-covenant.org/version/2/1/code_of_conduct
[5]: https://opensource.com/tags/licensing
[6]: https://choosealicense.com
[7]: https://opensource.com/sites/default/files/2022-09/choosealicense.png
[8]: https://opensource.com/article/19/9/intro-building-cicd-pipelines-jenkins
[9]: https://slides.com/bolajiayodeji/effective-oss-docs
[0]: https://img.linux.net.cn/data/attachment/album/202307/14/145640gqnqawqqqhqqh65w.jpg

View File

@@ -0,0 +1,246 @@
[#]: subject: "7 Best Open Source Web-based Email Clients"
[#]: via: "https://itsfoss.com/open-source-web-based-email-clients/"
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16007-1.html"
7 个最佳的开源基于 Web 的电子邮件客户端
======
![][0]
电子邮件服务将会一直存在,即便去中心化技术会接管互联网。
然而,随着大型科技公司试图控制新兴技术的方方面面,你如何掌控自己的电子邮件服务呢?
无论是企业还是个人,自托管的开源 Web 邮件服务始终是值得考虑的选项。你自己的服务器、你自己的数字基础架构,上面搭上你自己的电子邮件服务平台。这样,你就无需依赖供应商或第三方来管理你的电子邮件服务。你可以按照自己的方式办事。
### 为什么应该自托管电子邮件服务?
![best opensource web based email clients 1][1]
自托管一个可用作基于 Web 的电子邮件客户端或与电子邮件应用程序同步的服务,这不是点击一下就完成的过程。
那么,为什么要这么费事呢?难道你不能使用一些诸如 [Proton Mail][3] 和 Tutanota 之类的 [注重隐私的最佳电子邮件服务][2] 吗?
当然可以。
但是对于企业来说,自托管 Web 邮件的一些优势包括:
- 用户可以完全掌控电子邮件数据。
- 你可以自己构建符合电子邮件服务要求的基础设施。
- 它为个人、小型企业和企业提供了可扩展性。
- 你可以创建无限数量的电子邮件帐户和邮件别名。
- 用户可以轻松应用高级过滤器和其他保护机制,无需付费订阅。
在这里,我列出了一些你可以选择的最佳选项。
### 1、Roundcube
![Roundcube 截图][4]
主要亮点:
- 适合桌面使用
- 持续维护
- 大多数服务器托管提供商都提供
- 可自定义的用户界面
- PGP 加密
Roundcube 是一款流行的基于 PHP 的 Webmail 软件,提供简单的用户界面和所有基本功能。
大多数服务器托管提供商都已预安装它。你只需为你的域名配置它或创建电子邮件帐户即可开始使用。
你还可以在自己的服务器上安装并自定义它。
> **[Roundcube][5]**
### 2、Cypht
![Cypht 收件箱界面][6]
主要亮点:
- 轻量级
- 模块化
Cypht 是一种不错的 Webmail 解决方案,提供多个电子邮件帐户的综合视图。
它采用了模块化的方法,可以轻松通过插件为你的体验添加功能。
与其他解决方案不同,你还可以使用它添加 RSS 订阅,将其用作新闻阅读器。
> **[Cypht][7]**
### 3、Squirrelmail
![Squirrelmail][8]
主要亮点:
- 轻量级
- 稳定
- 支持 PGP 加密插件
Squirrelmail 是一款经典的基于 PHP 的、支持 IMAP 和 SMTP 协议的 Webmail 软件。它功能不算多,但如果你需要一个轻量级和稳定的 Webmail 软件来托管,它能满足基本需求。
尽管外观简单,但它已经存在很长时间,并具备一些功能,如通讯录、文件夹操作和 MIME 支持。
大多数 Web 托管提供商都已经预装了 Squirrelmail。
> **[Squirrelmail][9]**
### 4、Rainloop
![Rainloop][10]
主要亮点:
- 无需数据库
- 简单用户界面
- 轻量级
Rainloop 是一款简单的电子邮件解决方案,支持 IMAP 和 SMTP 协议。
它还支持 OpenPGP 加密。与其他一些解决方案不同,它不需要数据库。直接访问邮件服务器,无需在 Web 服务器上存储任何内容。
由于支持插件,你可以扩展某些功能。
> **[Rainloop][11]**
### 5、Horde
![Horde 截图][12]
主要亮点:
- 预装于 Web 托管提供商
- 简单而功能丰富
Horde 是一款开源的群件 Webmail 软件,预装于各种 Web 服务器托管提供商。它支持 IMAP。
我通常使用 Horde 来访问我的域名下的 Webmail从未让我失望过。它提供了简单而高效的用户界面和许多基本功能。
与其他软件类似,它基于 PHP 框架,开发人员可以轻松使用。
> **[Horde][13]**
### 6、SOGo
![SOGo][14]
主要亮点:
- Material Design 用户界面
- 支持 Outlook
- 提供在线演示
SOGo 是一款现代化的开源解决方案,采用了谷歌的 Material Design 用户界面和其电子邮件服务器。
它包括支持日历和通讯录,并提供友好的基于 AJAX 的 Web 界面。
你还可以获得对微软 Outlook 和 ActiveSync 的支持,这使你可以无缝同步电子邮件、联系人、事件和任务。你可以通过在线演示进行尝试。如果令人满意,你可以下载它到你的服务器上使用。
在其 [GitHub 页面][15] 可以了解更多信息。
> **[SOGo][16]**
### 7、Afterlogic WebMail Lite
![Afterlogic Webmail][17]
主要亮点:
- 可提供企业支持选项
- 支持社交登录
- OpenPGP 加密
Afterlogic WebMail Lite 是一个有趣的开源 Webmail支持插件。
它还支持使用外部服务进行身份验证。例如,你可以使用谷歌帐户登录到你的电子邮件帐户。
虽然开源版本提供了所有功能和 OpenPGP 加密支持,但你也可以用于商业使用。
此外,你还可以选择专业版本以获得技术支持、优先修复、个人日历、移动版本和添加多个 IMAP 帐户的功能。
> **[Afterlogic WebMail Lite][18]**
### 值得提及
有几个正在积极开发的开源项目可以供你尝试。
当然,我们不建议将它们用于商业或个人用途。你可以尝试它们,看看是否想以某种方式为它们的发展做出贡献。
我想提及几个此类邮件服务项目。
#### Mailpile
虽然它应该在上面的列表中占据一席之地,但是在用 Python 3 重写完成之前,[Mailpile][19] 的开发已经停止。
![Mailpile][20]
Mailpile 是一款快速且现代化的开源 Webmail具备加密和隐私功能。
#### Cuttlefish
![Cuttlefish][21]
[Cuttlefish][22] 是一个自由开源的交易性电子邮件服务。它旨在成为 [SendGrid][23] 等专有服务的替代品。
它目前还处于早期开发阶段。
#### Pinbox
Pinbox 是一个自托管的 Webmail 解决方案,灵感来自于谷歌收件箱。
[Pinbox][24] 是一个正在进行中的工作,需要一些先决条件才能正常工作。
### 总结
Squirrelmail、Horde 和 Roundcube 仍然是最流行的选项之一,你可以在大多数托管提供商处轻松访问它们。
当然,这些选项并不总是外观时尚或具备像谷歌工作空间甚至 Zoho 那样的功能,但你足够进行基本的电子邮件工作。
*题图MJ/603715d8-4562-4d7b-96f5-99ba76ad5a1b*
--------------------------------------------------------------------------------
via: https://itsfoss.com/open-source-web-based-email-clients/
作者:[Ankush Das][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/ankush/
[b]: https://github.com/lkxed
[1]: https://itsfoss.com/content/images/wordpress/2022/10/best-opensource-web-based-email-clients-1.png
[2]: https://itsfoss.com/secure-private-email-services/
[3]: https://itsfoss.com/recommends/protonmail
[4]: https://itsfoss.com/content/images/wordpress/2022/10/roundcube-screenshot.png
[5]: https://roundcube.net
[6]: https://itsfoss.com/content/images/wordpress/2022/10/cypht_inbox_interface.png
[7]: https://cypht.org/index.html
[8]: https://itsfoss.com/content/images/wordpress/2022/10/squirrelmail.jpg
[9]: https://www.squirrelmail.org/
[10]: https://itsfoss.com/content/images/wordpress/2022/10/rainloop.png
[11]: https://www.rainloop.net
[12]: https://itsfoss.com/content/images/wordpress/2022/10/horde-screeshot.png
[13]: https://www.horde.org
[14]: https://itsfoss.com/content/images/wordpress/2022/10/sogo.png
[15]: https://github.com/Alinto/sogo/
[16]: https://www.sogo.nu
[17]: https://itsfoss.com/content/images/wordpress/2022/10/afterlogic-webmail.jpg
[18]: https://afterlogic.org/webmail-lite
[19]: https://www.mailpile.is
[20]: https://itsfoss.com/content/images/wordpress/2022/10/mailpile.png
[21]: https://itsfoss.com/content/images/wordpress/2022/10/cuttlefish.png
[22]: https://cuttlefish.io
[23]: https://sendgrid.com
[24]: https://github.com/msp301/pinbox
[0]: https://img.linux.net.cn/data/attachment/album/202307/17/134939av491mgn4ddzh4c1.jpg

View File

@@ -0,0 +1,263 @@
[#]: subject: "20 technology horror stories about learning the hard way"
[#]: via: "https://opensource.com/article/22/10/technology-horror-stories"
[#]: author: "AmyJune Hineline https://opensource.com/users/amyjune"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16010-1.html"
20 个恐怖传说:在技术上犯过的最糟糕错误
======
![][0]
> 一些系统管理员、网页设计师、工程师和程序员分享了他们在命令行上经历的最可怕的经历。
每个开发人员内心最害怕的事情是什么?在你的代码开始运行前的宁静时刻,什么最让你感到恐怖?你见过或写过最可怕的代码是什么?
### 错误的权限
我负责一台服务器,然后我通过 FTP 上传了一些东西。显示了一些奇怪的东西,所以我想权限可能需要改变一下。
不用说,我愚蠢地关闭了读取权限并使网站瘫痪了。(当没有人能访问时,网站就没啥用了。)
我花了几个小时才修复好。这是很多年前我在一个机构担任唯一的网页开发人员时的事情。
— [Miriam Goldman][1]
### 混乱的 HTML
我曾经因 WordPress 的默认主题有可用的更新而使一个客户的网站瘫痪,这个客户当时是《华尔街日报》畅销书榜上的一位作者。
他的开发人员在主题中硬编码了 HTML而不是创建一个子主题。而我运行了更新操作。
那个年代,人们不容易实现每晚备份,所以我花了几个小时打电话给托管提供商。像分阶段发布、子主题、每晚备份或手动备份这样的东西现在都很常见,还有自动更新和手动回滚的能力。但在那个时代并不常见。
— [Courtney Robertson][2]
### 密钥不再秘密
我想我们中的许多人在公共代码中看到过密钥。或者另一个经典案例:我的一个朋友从开发服务器向 10 万个用户发送电子邮件。
— [John E. Picozzi][3]
### Unix 混乱
这是一个 Unix 的故事。今天在 [Linux][4] 中已经修复了这个问题。
在我要向管理层进行一个重要的新组件演示的前一天,我需要更新我的代码(这是在 [Git][5] 存在之前的年代)。我进入我的主目录,找到项目目录,然后删掉了一切。不幸的是,在那个版本的 Unix 中,该命令会跟随符号链接进行删除,并且我有一个链接指向代码的最新版本(并不是所有代码都在源代码系统中,因为它还处于测试阶段)。
好在一天后,大楼里出现了网络问题,因此演示推迟了一天,我们设法恢复了代码。那是三十多年前的事情。即使现在我也不知道网络问题是巧合,还是我们的系统管理员试图帮助我们(如果是这样,那确实奏效了!)
— [Josh Salomon][6]
### 命令式编程
看到 CSS 文件中到处都是 `!important;` 而不是正确使用特异性。
我曾经不得不覆盖和定制一个 WordPress 主题几乎所有的 CSS因为该网站的所有者坚持不换一个更接近他想要的设计的新主题。
那个主题开发者最后一次更新是在 2018 年,但网站至今仍在使用。
— [Christi Nickerson][7]
### 错误引用
在我以前的职位上,我的前任在代码注释中引用了 Journey 的《Any Way You Want It》歌词错误。
— [Ben Cotton][8]
### Algol68 的幽灵
在上世纪 60 年代末到 70 年代初Algol68 的复杂性使许多有影响力的人望而却步,包括 Niklaus Wirth 在内。我记得当时最常见的抱怨之一是:“谁能为这样一个复杂的怪物写一个编译器呢?” 但是事实上,许多人都开发过。此外,许多在 [Algol68][9] 中发展出来的或至少以形式化的概念出现在后来的其他语言中,尤其是在 C 语言和 Bourne shell 中(感谢 Steve Bourne
Algol68 的一些概念并没有经过很好的演化。例如,处理“书”和“章节”等的 I/O 概念在今天有些奇怪。像将字符集等问题留给实现本身处理似乎相当过时。
但是其中一些概念在今天仍然极为重要例如产生值的表达式、强类型化Algol68 中称为“模式”的类型)、[堆内存和垃圾回收][10]、运算符的定义和重载等等。
有好的地方,也有不好的地方。
Algol68 是一门值得学习的语言,即使只是为了了解现代计算中的许多想法的来源以及在路上丢失了多少。
— [Chris Hermansen][11]
### 密码暴露
我为一个新的支持客户进行技术审计时,发现之前的开发人员将密码以明文形式存储在整个主题中,并使用了糟糕的方式连接到远程数据库。他们的 composer 文件也异常庞大。每次我尝试在本地运行网站时,需要花费五分钟的时间。过时的依赖项、我无法访问的仓库,问题还有很多。
— [Miriam Goldman][1]
### 迷宫般的代码
我见过的最可怕的代码是一段 PDP-11 汇编语言,位于一个名为 RSTS 的操作系统的内核中,今天已经没有人记得它了。当时源代码记录在胶片上,我跟随这段代码路径经过几个转折,试图弄清楚正在发生的事情。然后,我遇到了这条指令:
```
MOV R5,PC
```
我举起双手尖叫了起来。真的,我尖叫了。办公室里的人以为我撞到头了,或者心脏病发作了。
那个年代,内存是宝贵的,`MOV` 指令使用的内存比 `BR`(即“分支”)指令稍微少一点。将寄存器 5 的内容复制到程序计数器实际上是一个廉价的无条件跳转,跳转到寄存器 5 中存储的地址。但是,我不知道寄存器 5 中存储了什么,也不知道如何找到它。
时至今日,将近 40 年过去了,我仍然想知道是谁写出这样的代码,以及如何调试它。
— [Greg Scott][12]
### 差一个
我在自动化行业工作其中的可编程逻辑控制器PLC使用一些相当奇怪的语言进行编程。
让我印象深刻的一个例子是,在 [ST][13] 语言中,你可以定义数组从索引 1 开始。这意味着第一个元素在位置 1 而不是 0。每当我看到这个时我都会抓狂。
— [Stephan Avenwedde][14]
### 分歧
有一次在一个从测试环境到生产环境的发布期间,我让 MongoDB 实例停机了 40 分钟。我们的测试环境与生产环境有所分歧。只是一个数据库配置的差异,没什么太激动人心的东西。但这是一个很好的教训,要确保你的测试和生产环境保持同步!
— [Em Nouveau][15]
### 神秘的低语
这是一个仍在运行且正常的项目,但我已经修改了代码以隐藏源代码。
```
for(int c =0; y < yyy && c < ccc; y++, c++){// some code here}
```
乍看起来,它似乎是一个无害的循环。但也许你会问为什么有两个变量、两个停止条件以及两个增量。然后你会意识到只有一个初始化器,第二个变量(`y`)在这个循环之前在不同的代码块中被初始化。
当我意识到这一点时,我花了大约一个小时的时间来理解为什么代码是这样编写的,以及它应该如何工作。显然,代码中没有 `c` 的注释,并且变量名是无意义的(代码中被称为 `c``y` 有一个稍微具有意义的名称,但不足以解释它的意义,即使是今天我也不知道它的作用)。
— [Josh Salomon][6]
### 关键数据
大约在 1980 年,我在大学毕业后得到了我的第一份工作。我是印第安那州一所工程学院的计算中心副主管。这是一个两人 IT 部门的辅助职位。我在 PDP-11/40 上处理行政计算,使用 RK05 可移动的“披萨碟”磁盘驱动器(每个驱动器容量为 2.5 MB。每个行政办公室都有一个驱动器而我工作的一部分就是每周进行磁盘对磁盘的备份。但是那个夏天我很忙连续四周没有备份过注册办公室的数据。然后我意识到了风险所以我确保开始进行每月的磁盘到磁带备份。
我从 11/40 上卸载了注册办公室的磁盘驱动器,然后装在了带有一台 9 磁道磁带驱动器的 11/70 上,并开始进行备份。几分钟后,我听到磁盘驱动器里传来一阵刮擦的声音。是的,磁头撞上了磁盘。在短短几分钟内,我摧毁了所有注册办公室的数据,以及最新的备份 —— 一个四周前的 9 磁道磁带。
当我不得不面对注册办公室主任,并告诉他我已经摧毁了他所有的数据时,那一刻真的很尴尬。
如今,我告诉新的 IT 人员,只有在你摧毁了某人的关键数据,而且无法恢复时,你才算是专业人士。永远记住你胃里的那种感觉。
— [Greg Scott][12]
### 愤怒的暴民
一个客户篡改了 WordPress 核心代码以添加后续在常规更新中发布的功能,但他们却不明白为什么在每次尝试更新 LearnDash 时网站都会崩溃。(他们也不喜欢我们的报告指出了他们糟糕的开发实践。)于是他们赶我们走,称我们是骗子和无能之辈。但直到今天,我仍然具有他们域名的委派访问权限,以及两个域名的生产和开发环境的 wp-admin 访问权限。
此外,尽管我们给了一个加密位置的链接用于共享访问凭据,他们却通过电子邮件发送了我们的登录信息。
— [Laura Byrne][16]
### 不要忘记备份
我在企业网络上的工作经验不多,所以我没有使任何服务器崩溃过。然而,作为一个年轻人,我曾经试图帮助一个人解决 IT 问题,不知何故导致 Windows 95 崩溃,并不得不免费重新安装。
作为一个非常年轻的 Amiga 用户,我最悲伤的时刻之一是我的保存磁盘坏掉了,里面装满了所有我的文件,原因是某种机械故障。如今,我已经学会更好地备份我的重要个人文件。
— [Rikard Grossman-Nielsen][17]
### 万恶之源
当时我刚开始接触 Linux之前我用的是 DOS借助 Norton Commander 进行操作。后来Midnight Commander 发布了,我非常喜欢它。当时我使用的 Linux 发行版Jurix没有打包 Midnight Commander所以我自己从源代码编译了它就像我那个时候使用的其他软件一样。它完美地运行了突然间我在 Linux 上感到更亲切了。
这不是一个恐怖的故事。
我的同事告诉我不要以 root 身份运行 Midnight Commander无论它有多么让人舒适。但是 root 权限很方便,感觉更像 DOS所以我无视了他们的建议。结果就是我意外地删除了整个 `/etc` 目录的内容。在那之前,我从来没有用过备份功能,但是那一天我意识到备份实际上是有用的。
27 年过去了,我仍然记得这个故事,并定期进行备份。
— [Peter Czanik][18]
### 幻觉
最糟糕的项目是一家代理机构让我做的一个一屏的页面,一开始看起来很简单。我说我可以用一些 HTML、CSS也许加点 JavaScript将其组合起来。但他们特别要求我不要这样做。他们希望我将设计图剪切下来然后使用 CSS 在页面中定位这些元素。他们还要求我将所有的 CSS 内嵌到 HTML 文件中,因为他们真的只想要**一个页面**。
其中的文本都不是真实的文本。
除了定位这些图片所需的元素之外,其他都不是真正的 HTML 元素。
我告诉他们,设计足够简单,我可以用实际的代码将其组合起来,但他们不想要那样。他们只想让我花时间将这些碎片拼凑在一起,然后转而做其他项目。他们让我做了两个类似的一屏网站。
这实在伤害了我的前端灵魂。为我来说,这个项目在身体上是痛苦的。这是一个试用合同职位,当他们给我提供全职工作时,我礼貌地拒绝了。
— [Rachel Vasquez][19]
### 内存破坏
对我来说,最可怕的事情就是 ANSI C99 中可能发生的内存破坏。在一个屏幕录像中,我捕捉到了这个(不完全是)超自然现象,可以在这个 [YouTube 视频片段][20] 中观看到。
![Image of gseqencer before memory corruption.][21]
标有 `file` 的 GtkEntry 显示了一些随机的符号。我检查了一下 [代码][22],但没有发现任何问题。
`ags_export_soundcard_open_response_callback()` 函数是一个回调函数,用于处理 `GtkFileChooserDialog``response` 事件。(顺便说一句,用于解决这个问题的工具是 [valgrind][23]。)
![Image of gsequencer after memory corruption.][24]
— [Joël Krähemann][25]
### Python 的恐怖之处
我见过的最可怕的编程特性是 Python 中对 `dict` 的访问权限。在运行时改变对象的类型违背了我的编程行为准则。
— [Josh Salomon][6]
### 缝合怪网络
在 2006 年,我用 Fedora 和一些脚本构建了一台防火墙,并说服了一家托管在合作数据中心的大型网站的客户,将其专有的防火墙替换为我的防火墙。我建立了系统并在一个清晨的 4 点到达现场进行安装。那时我才发现(饱受痛苦地)他在防火墙后面有一个带有公共 IP 地址的负载均衡器。客户经历了一个 5 分钟的停机时间,但我重新连接了一切恢复到原来的状态。
我发现了一种通过使用代理 ARP 来处理他复杂的网络配置的方法。这个想法是,当外部世界的任何人发出负载均衡器的 ARP 请求时,我会进行回应。几天后,我再次在凌晨 4 点出现并安装了我的系统。这次,我把整个数据中心的所有设备都给搞宕了。我设置了我的代理 ARP 来回应所有请求,因此局域网上的所有流量最终都找到了我并消失在黑洞中。
当我意识到我做了什么时,我把一切都恢复到原来的状态。但是损害已经造成。如果有人在 2006 年的一个清晨美国中部时间大约 4 点钟尝试浏览你最喜欢的网站,它没有响应,那可能是我的错。我通过在机架上安装并启动一个系统,让整个数据中心的网站都宕机了。
网站运营商愤怒地抗议,而我则黯然离开。他们再也没有邀请我回去再试。真是遗憾,我觉得再试试桥接可能会起作用。
— [Greg Scott][12]
### 你的恐怖故事
你最喜欢的与技术相关的恐怖故事是什么?在评论中告诉我们(但要友善,并更改项目名称以保护无辜者!)
--------------------------------------------------------------------------------
via: https://opensource.com/article/22/10/technology-horror-stories
作者:[AmyJune Hineline][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/amyjune
[b]: https://github.com/lkxed
[1]: https://opensource.com/users/miriamgoldman
[2]: https://opensource.com/users/courtneyrdev
[3]: https://opensource.com/users/johnpicozzi
[4]: https://opensource.com/tags/linux
[5]: https://opensource.com/downloads/cheat-sheet-git
[6]: https://opensource.com/users/joshs
[7]: http://cnickerson.com
[8]: https://opensource.com/users/bcotton
[9]: https://opensource.com/article/20/12/learn-algol-68
[10]: https://opensource.com/article/22/6/garbage-collection-java-virtual-machine
[11]: https://opensource.com/users/clhermansen
[12]: https://opensource.com/users/greg-scott
[13]: https://en.wikipedia.org/wiki/Structured_text
[14]: https://opensource.com/users/hansic99
[15]: https://opensource.com/users/nouveau
[16]: http://twitter.com/@NewYorkerLaura
[17]: https://opensource.com/users/rikardgn
[18]: https://opensource.com/users/czanik
[19]: https://opensource.com/users/rachievee
[20]: https://youtu.be/Go6r-CT06zc?t=103
[21]: https://opensource.com/sites/default/files/2022-10/gsequencer-before-memory-corruption.png
[22]: https://git.savannah.nongnu.org/cgit/gsequencer.git/tree/ags/app/ags_export_soundcard_callbacks.c?h=4.4.x#n397
[23]: https://opensource.com/article/21/8/memory-programming-c
[24]: https://opensource.com/sites/default/files/2022-10/scarygsequencer-after-memory-corruption.png
[25]: https://opensource.com/users/joel2001k
[0]: https://img.linux.net.cn/data/attachment/album/202307/18/145614vx7pqwwkkrsx6zxv.jpg

View File

@@ -0,0 +1,265 @@
[#]: subject: "7 Git tips for technical writers"
[#]: via: "https://opensource.com/article/22/11/git-tips-technical-writers"
[#]: author: "Maximilian Kolb https://opensource.com/users/kolb"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16044-1.html"
专为技术写作人员提供的 7 条 Git 技巧
=====
![][0]
> 跟随这个演示来了解我如何使用 Git 为 Foreman 编写文档。
作为 [ATIX][1] 的技术作家,我的任务包括为 [Foreman][2] 创建和维护存放在 [github.com/theforeman/foreman-documentation][3] 的文档。Git 帮助我跟踪内容的版本,并与开源社区进行协作。它是我存储工作成果、共享和讨论改进的重要工具。我主要使用的工具包括浏览器、用 OpenSSH 连接 Foreman 实例、用 [Vim][4] 编辑源文件,以及使用 Git 进行版本控制。
本文重点介绍在开始使用 Git 和为 Foreman 文档做贡献时经常遇到的挑战。适用于中级 Git 用户。
### 先决条件
- 你已在系统上安装和配置了 Git。你至少需要设置用户名和电子邮件地址。
- 你在 [github.com][5] 上拥有一个帐户。GitHub 本身并不是一个开源项目,但它是许多开源 Git 存储库的托管站点(包括 Foreman 的文档)。
- 你已将 [foreman-documentation][3] 存储库复刻到你自己的账户或组织(例如,`github.com/<My_User_Account>/foreman-documentation`,这里 `<My_User_Account>` 是你的 GitHub 用户名)。有关更多信息,请参阅 Kedar Vijay Kulkarni 的 [Kedar Vijay Kulkarni 的 Git 逐步指南][6]。
- 你已将你的 SSH 公钥添加到 GitHub。这是将你的更改推送到 GitHub 所必需的。有关更多信息,请参阅 Nicole C. Baratta 的《[GitHub 简单指引][7]》。
### 对 Foreman 文档做出贡献
Foreman 是一个开源项目,依靠社区的贡献而发展壮大。该项目欢迎所有人的参与,并且只有一些要求才能做出有意义的贡献。这些要求和惯例在 [README.md][8] 和 [CONTRIBUTING.md][9] 文件中有详细记录。
以下是在处理 Foreman 文档时最常见的一些任务。
#### 我想开始贡献 Foreman 文档
1、从 github.com 克隆存储库:
```
$ git clone git@github.com:theforeman/foreman-documentation.git
$ cd foreman-documentation/
```
2、重命名远程存储库
```
$ git remote rename origin upstream
```
3、可选确保你的本地主分支跟踪 theforeman 组织的 `foreman-documentation` 存储库的 `master` 分支:
```
$ git status
```
这将自动将你置于默认分支(本例中为 `master`)的最新提交上。
4、如果你的账户或组织中尚未有该存储库的 <ruby>复刻<rt>Fork</rt></ruby>,请创建一个。前往 [github.com/theforeman/foreman-documentation][3] 并点击 “<ruby>复刻<rt>Fork</rt></ruby>” 按钮。
5、将你的复刻添加到你的存储库中
```
$ git remote add github git@github.com:<My_User_Account>/foreman-documentation.git
```
你的本地存储库现在有两个远程存储库:`upstream``github`
#### 我想扩展 Foreman 文档
对于简单的更改比如修正拼写错误你可以直接创建一个拉取请求PR
1、创建一个分支例如 `fix_spelling``git switch` 命令用于切换当前所在的分支,`-c` 参数用于创建分支:
```
$ git switch -c fix_spelling
```
2、进行你的更改。
3、添加你的更改并进行提交
```
$ git add guides/common/modules/abc.adoc
$ git commit -m "Fix spelling of existing"
```
良好的 Git 提交消息的重要性无需再强调。提交消息告诉贡献者你做了哪些工作,因为它与代码库的其余部分一起保存,所以它在查看代码时起到历史注释的作用,帮助了解代码的演化过程。有关优秀的 Git 提交消息的更多信息,请参阅由 cbeams 撰写的 《[创建完美的 Git 提交信息的 7 条规则][10]》。
4、可选但建议的操作查看并验证与默认分支的差异。`foreman-documentation` 的默认分支称为 `master`,但其他项目可能有不同的命名(例如 `main``dev``devel`)。
```
$ git diff master
```
5、将分支推送到 GitHub。这将发布你的更改到你的代码库副本
```
$ git push --set-upstream github fix_spelling
```
6、点击终端中 Git 提供的链接来创建一个拉取请求PR
```
remote: Create a pull request for 'fix_spelling' on Github by visiting:
remote: https://github.com/_My_User_Account_/foreman-documentation/pull/new/fix_spelling
```
7、在解释中说明社区*为什么*应该接受你的更改。对于修正拼写错误等简单 PR这并不是必需的但对于重大更改则很重要。
#### 我想将我的分支变基到 master
1、确保你的本地 `master` 分支跟踪的是 [github.com/theforeman/foreman-documentation][3] 的 `master` 分支,而不是你自己命名空间下的 `foreman-documentation`
```
$ git switch master
```
此时应该显示 `Your branch is up to date with 'upstream/master'`,其中 `upstream` 是指向 `github.com/theforeman/foreman-documentation` 的远程存储库的名称。你可以通过运行 `git remote -v` 来查看远程存储库设置情况。
2、从远程获取可能的更改。`git fetch` 命令会从远程下载被跟踪的分支,并且使用 `--all` 选项可以同时更新所有分支。在使用其他分支时这是必要的。`--prune` 选项会删除对已不存在的分支的引用。
```
$ git fetch --all --prune
```
3、将可能的更改从 `upstream/master` 拉取到你的本地 `master` 分支。`git pull` 命令将跟踪的分支上的提交复制到当前分支。这用于将你的本地 `master` 分支“更新”为远程(在本例中为 GitHub`master` 分支的最新状态。
```
$ git pull
```
4、将你的分支 <ruby>变基<rt>rebase</rt></ruby> 到 `master`
```
$ git switch my_branch
$ git rebase -i master
```
#### 我在 master 分支上意外地提交了代码
1、创建一个分支来保存你的工作
```
$ git switch -c my_feature
```
2、切换回 `master` 分支:
```
$ git switch master
```
3、回退 `master` 分支上的最后一次提交:
```
$ git reset --soft HEAD~1
```
4、切换回 `my_feature` 分支并继续工作:
```
$ git switch my_feature
```
#### 我想修改我的提交消息
1、如果你的分支只有一次提交可以使用 `git amend` 来修改你的最后一次提交:
```
$ git commit --amend
```
这假设你没有将其他文件添加到暂存区(即,没有运行过 `git add My_File`,并且没有进行提交)。
2、使用 `--force` 选项将你的 “更改” 推送到 GitHub因为 Git 提交消息是你现有提交的一部分,所以你正在更改分支上的历史记录:
```
$ git push --force
```
#### 我想重新整理单个分支上的多个更改
1、可选但强烈推荐从 GitHub 获取更改。
```
$ git switch master
$ git fetch
$ git pull
```
这确保你将其他更改按照它们被合并到 `master` 中的顺序直接合并到你的分支中。
2、若要重新整理你的工作请对你的分支进行变基并根据需要进行更改。对于将分支变基到 `master`,这意味着你需要更改你的分支上第一个提交的父提交:
```
$ git rebase --interactive master
```
使用你喜欢的编辑器打开变基交互界面,将第一个单词 `pick` 替换为你要修改的提交。
- 使用 `e` 来对你的提交进行实际更改。这会中断你的变基操作!
- 使用 `f` 将一个提交与其父提交合并。
- 使用 `d` 完全删除一个提交。
- 移动行以改变你更改的顺序。
成功进行变基后,你自己的提交将位于 `master` 上最后一个提交的顶部。
#### 我想从其他分支复制一个提交
1、从稳定分支例如名为 `3.3` 的分支)获取提交的 ID请使用 `-n` 选项限制提交数量:
```
$ git log -n 5 3.3
```
2、通过挑选提交来复制更改到你的分支。`-x` 选项将提交的 ID 添加到你的提交消息中。这仅建议在从稳定分支挑选提交时使用:
```
$ git switch My_Branch
$ git cherry-pick -x Commit_ID
```
### 更多技巧
在 ATIX我们运行一个 [GitLab][11] 实例,用于内部共享代码、协作以及自动化测试和构建。对于围绕 Foreman 生态系统的开源社区,我们依赖于 GitHub。
我建议你始终将名为 `origin` 的远程指向你的*内部的*版本控制系统。这样做可以防止在纯粹凭记忆进行 `git push` 时向外部服务泄露信息。
此外,我建议使用固定的命名方案来命名远程。我总是将指向自己的 GitLab 实例的远程命名为 `origin`,将指向开源项目的远程命名为 `upstream`,将指向我在 Github 上的复刻的远程命名为 `github`
对于 `foreman-documentation`,该存储库具有相对较平的历史记录。当处理更复杂结构时,我倾向于以非常可视化的方式思考 Git 存储库,其中节点(提交)指向线上的节点(分支),这些分支可以交织在一起。图形化工具如 `gitk` 或 [Git Cola][12] 可以帮助可视化你的 Git 历史记录。一旦你完全掌握了 Git 的工作原理,如果你更喜欢命令行,可以使用别名。
在进行具有大量预期合并冲突的大型变基之前,我建议创建一个“备份”分支,以便你可以快速查看差异。请注意,要永久删除提交是相当困难的,因此在进行重大更改之前,请在本地 Git 存储库中进行测试。
### Git 对技术文档编写者的帮助
Git 对技术文档编写者来说是一个巨大的帮助。不仅可以使用 Git 对文档进行版本控制,还可以与他人积极地进行协作。
*题图MJ/1fb1dd43-e460-4e76-9ff6-b6ef76570f7e*
--------------------------------------------------------------------------------
via: https://opensource.com/article/22/11/git-tips-technical-writers
作者:[Maximilian Kolb][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/kolb
[b]: https://github.com/lkxed
[1]: https://atix.de/en/
[2]: https://opensource.com/article/17/8/system-management-foreman
[3]: https://github.com/theforeman/foreman-documentation
[4]: https://opensource.com/resources/what-vim
[5]: https://github.com/
[6]: https://opensource.com/article/18/1/step-step-guide-git
[7]: https://opensource.com/life/15/11/short-introduction-github
[8]: https://github.com/theforeman/foreman-documentation/blob/master/guides/README.md#contribution-guidelines
[9]: https://github.com/theforeman/foreman-documentation/blob/master/CONTRIBUTING.md#contributing-to-foreman-documentation
[10]: https://cbea.ms/git-commit/#seven-rules
[11]: https://about.gitlab.com/
[12]: https://opensource.com/article/20/3/git-cola
[0]: https://img.linux.net.cn/data/attachment/album/202307/29/082043e587yilezk45ayin.jpg

View File

@@ -0,0 +1,158 @@
[#]: subject: "Terminator: The Tiling Terminal Emulator for Linux Pros"
[#]: via: "https://itsfoss.com/terminator/"
[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16004-1.html"
Terminator适用于 Linux 专业人员的平铺终端仿真器
======
> 你可能已经看到一些同事或 UP 主们在一个终端窗口中运行多个终端会话。
![][0]
一些专业的 Linux 用户会使用 `screen` 或 [tmux 命令][2] 来分割多个窗格。这些命令可以在任何终端应用程序中使用,但需要较大的学习曲线。
如果你想要在同一应用窗口中拥有多个终端会话而不涉及 `tmux` 或 [screen 命令][3] 的复杂性,“终结者” 是你的好帮手。
![][3a]
不,我指的不是那个“终结者”。是这个 👇
![terminator htop neofetch cmatrix][4]
你的系统上安装的 [终端仿真器][5] 可能具有多标签支持。而 Terminator 支持多个可调整大小的终端面板。
它模拟了类似平铺窗口管理器的功能,并将终端面板平铺在单个窗口中。
在本文中,我将向你展示如何在 Ubuntu 和其他 Linux 发行版中安装和使用 Terminator。
但在此之前,让我们快速了解一下 Terminator 提供的功能。
### Terminator 可在同一窗口中提供多个终端会话
[Terminator][6] 是一个基于 GNOME 终端的 GTK 应用程序,使用了 VTE3GTK3 虚拟终端仿真器小部件)。
作为一个基于 GNOME 终端的应用程序,它与 GNOME 桌面环境相关联,因此有一些依赖性。
然而,即使有 GNOME 的依赖性,我发现该应用程序相对轻巧。可能在其他桌面环境中使用它不会成为问题。
从外表上看Terminator 可能与其他终端仿真器相似。但是Terminator 具有无限可能性,我将在后面的章节中向你展示它们。
![terminator htop multiple][7]
#### 功能特点
让我总结一下 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][8]
Terminator 允许你使用鼠标通过水平和垂直分割来创建新的面板。
![terminator right click option][9]
然而,使用键盘快捷键会更快。你需要一些时间来适应这些键,但最终你会掌握它们的。
在这里,我在第一个面板中打开了 [htop][10],如下图所示。
![terminator htop][11]
要在右侧创建一个新的终端面板,只需按下 `Ctrl + Shift + e` 快捷键。其次,我在右侧面板中使用了 [neofetch][12],如下图所示。
![terminator htop neofetch][13]
最后,我使用 `Ctrl + Shift + o` 快捷键在带有 `neofetch` 的面板下方创建了另一个面板,并在此处启动了 `cmatrix`。这是其中一个无用但 [有趣的 Linux 命令][14]。
![terminator htop neofetch cmatrix][15]
上面是在本指导中完成的操作的最终屏幕截图。现在你明白我为什么说 Terminator 在一个窗口中创建了类似平铺窗口管理器的环境了吧。
如果你需要在不安装平铺窗口管理器的情况下打开多个终端这种平铺功能将非常方便。Terminator 也支持标签页,但我认为平铺功能是该应用程序的特点。
Terminator 是少数几个配有出色文档的应用程序之一。如果你需要更多信息,请参阅其 [文档][16]。
### 结论
我相信所有终端仿真器都支持标签页界面。但是,当你需要同时关注多个会话时,必须在标签之间切换并不方便。
Terminator 可能不像 [Blackbox][17] 或 [GNOME Console][18] 那样好看。但它拥有老练的 Linux 用户喜爱的功能。
它提供的功能可能并不是每个 Linux 用户都需要或想要的。我将把决定权交给你,你来决定它是否值得你投入时间。
*题图MJ/0b403aa1-810a-4f9f-9e52-1d42d8fe2b6a*
--------------------------------------------------------------------------------
via: https://itsfoss.com/terminator/
作者:[Anuj Sharma][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/anuj/
[b]: https://github.com/lkxed
[1]: https://itsfoss.com/content/images/wordpress/2022/11/gnu-screen.webp
[2]: https://linuxhandbook.com/tmux/
[3]: https://linuxhandbook.com/screen-command/
[3a]: https://media0.giphy.com/media/v1.Y2lkPTc5MGI3NjExcnJnbmdsNGF6anlxNWNvY21sNnpqNGF3ZDg5c2JhemliZ240Z3p1dSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/13CfqebsPMctjO/giphy.gif
[4]: https://itsfoss.com/content/images/wordpress/2022/11/terminator-htop-neofetch-cmatrix.png
[5]: https://itsfoss.com/linux-terminal-emulators/
[6]: https://github.com/gnome-terminator/terminator
[7]: https://itsfoss.com/content/images/wordpress/2022/11/terminator-htop-multiple.png
[8]: https://itsfoss.com/content/images/wordpress/2022/11/terminator-default-window.png
[9]: https://itsfoss.com/content/images/wordpress/2022/11/terminator-right-click-option.png
[10]: https://itsfoss.com/use-htop/
[11]: https://itsfoss.com/content/images/wordpress/2022/11/terminator-htop.png
[12]: https://itsfoss.com/using-neofetch/
[13]: https://itsfoss.com/content/images/wordpress/2022/11/terminator-htop-neofetch.png
[14]: https://itsfoss.com/funny-linux-commands/
[15]: https://itsfoss.com/content/images/wordpress/2022/11/terminator-htop-neofetch-cmatrix.png
[16]: https://gnome-terminator.readthedocs.io/en/latest/
[17]: https://itsfoss.com/blackbox-terminal/
[18]: https://itsfoss.com/gnome-console/
[0]: https://img.linux.net.cn/data/attachment/album/202307/16/170144b06hhei2yjzyjz55.jpg

View File

@@ -0,0 +1,255 @@
[#]: subject: "True Lightweight Notepad for Ubuntu and Other Linux"
[#]: via: "https://www.debugpoint.com/lightweight-notepad-linux/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15957-1.html"
真正轻量级的 Linux 记事本
======
> 轻量级、资源友好的基于 GUI 的基本记事本列表,适用于 Ubuntu 和其他 Linux。
![][1]
Linux 是一个因其速度、稳定性和灵活性而广受欢迎的操作系统。Linux 的一个关键特点是能够根据你的需求自定义和配置系统。这包括选择适合你系统的正确应用程序和工具。本教程将介绍一些适用于 Linux 的最佳轻量级记事本。我们将查看它们的特点、优缺点,并提供选择适合你需求的正确记事本的建议。无论你是学生、程序员,还是喜欢做笔记的普通用户,一款优秀的记事本对于任何 Linux 用户来说都是必不可少的工具。
### Ubuntu 和其他发行版的最佳轻量级记事本
#### 1、Mousepad
该列表中的第一个是流行的文本编辑器 - Mousepad。它是 Xfce 桌面环境的默认文本编辑器,使用 GTK 开发。它简单轻便,但与本列表中的 Leafpad 相比,它具有更多的设置和功能。
你可以将其视为具有一些额外功能的 Leafpad。
其关键特点包括深浅色主题、标签式编辑、字体和插件功能。你可以在安装后和使用过程中发现更多类似的设置。
下面是其外观示例:
![在 Ubuntu 上运行的 mousepad][3]
由于 Mousepad 在所有主要的 Linux 发行版仓库中都可用,所以安装非常简单。
对于 Ubuntu、Linux Mint 和相关发行版,使用以下命令进行安装。
```
sudo apt install mousepad
```
对于 Fedora Linux请使用以下命令
```
sudo dnf install mousepad
```
而 Arch Linux 用户可以使用以下命令进行安装:
```
sudo pacman -S mousepad
```
#### 2、Featherpad
[FeatherPad][4] 是一个独立于桌面环境的基于 Qt 的轻量级文本编辑器,适用于 Ubuntu 和其他 Linux 发行版。它的一些关键特性包括拖放支持、分离和附加标签、虚拟桌面感知,以及一个可选的固定搜索栏,并有每个标签的入口。
此外,它可以在搜索时立即突出显示找到的匹配项,提供了一个停靠窗口用于文本替换,并支持显示行号和跳转到特定行。
此外Featherpad 可以检测文本编码,为常见的编程语言提供语法高亮,并支持会话管理。它还具有拼写检查(使用 Hunspell、文本缩放、打印和自动保存等功能。
![在 Ubuntu 上运行的 Featherpad][5]
安装 Featherpad 很简单。
对于 Ubuntu 和相关的发行版,你可以使用终端中的以下命令进行安装:
```
sudo apt install featherpad
```
对于 Fedora Linux请使用以下命令进行安装
```
sudo dnf install featherpad
```
Arch Linux 用户可以使用以下命令进行安装:
```
sudo pacman -S featherpad
```
#### 3、Leafpad
[Leafpad][6] 是一个基于 GTK 的简单的轻量级 Linux 文本编辑器。它旨在快速、易于使用并且需要最少的资源。Leafpad 具有干净直观的用户界面,提供了你所需的所有基本文本编辑工具,如剪切、复制和粘贴,并支持撤消和重做。此外,它还支持多种编程语言的语法高亮,使其成为程序员的有用工具。
由于其简单和高效性Leafpad 是 Linux 用户的热门选择。它可能是 Windows 记事本应用程序的完美替代品。它具有所有基本功能,包括自动换行、行号、字体选择和自动缩进。
下面是它的外观示例。这是列表中最简单和轻量级的记事本。
![leafpad - 在 Ubuntu 上运行的简易记事本][7]
但是,在 Ubuntu 上安装 Leafpad 有些棘手。不幸的是,它在 Universe 仓库中不可用,只能作为 Snap 软件包而不是 Flatpak 软件包使用。
但是,你可以从 Debian 仓库中获取并在 Ubuntu 中安装它。
从 Debian 仓库下载 deb 文件,并使用以下命令进行安装。
```
wget http://ftp.us.debian.org/debian/pool/main/l/leafpad/leafpad_0.8.18.1-5_amd64.deb
```
```
sudo dpkg -i leafpad_0.8.18.1-5_amd64.deb
```
Fedora 用户可以使用以下命令进行安装:
```
sudo dnf install leafpad
```
Arch Linux 用户可以使用以下命令进行安装:
```
sudo pacman -S leafpad
```
#### 4、Beaver 编辑器
[Beaver][8] 编辑器是一个轻量级、启动快速的文本编辑器,具有极少的依赖性。它是基于 GTK+2 库构建的,不需要额外安装的库,非常适合在较旧的计算机和小型 Linux 发行版上使用。Beaver 的核心功能包括基本功能和语法高亮,还可以通过插件添加额外功能。其界面简洁高效,并包含高质量的 Tango 美术作品。
![Beaver 编辑器在 Ubuntu 上运行][9]
这是一个有些老旧的应用程序,但它仍然正常工作。目前,它仅适用于 Ubuntu 和相关的发行版。你可以下载预编译的 deb 文件,并使用以下命令进行安装:
```
wget https://www.bristolwatch.com/debian/packages/beaver_amd64.deb
```
```
sudo dpkg -i beaver_amd64.deb
```
#### 5、Gedit
[Gedit 文本编辑器][10] 是 GNOME 桌面环境的默认文本编辑器,被数百万用户在诸如 Ubuntu 和 Fedora 等各种 Linux 发行版上使用。它是核心 GNOME 应用程序的一部分旨在成为一个轻量级的通用文本编辑器。然而通过其设置和已安装的插件Gedit 也包含许多增强生产力的功能,使得它能够与其他流行的文本编辑器竞争。
尽管如此,它最近已经从 GNOME 桌面的默认编辑器标签中“降级”。基于现代 GTK4 的 [GNOME 文本编辑器][11] 已取而代之。
但它仍然是最好的编辑器之一,你可以通过插件和 [各种技巧][12] 将其从简单的编辑器扩展为更高级的编辑器。
![Gedit 文本编辑器][13]
要安装它,请使用以下命令(针对 Ubuntu 和相关发行版):
```
sudo apt install gedit
```
对于 Fedora Linux 用户,请使用以下命令进行安装。
```
sudo dnf install gedit
```
最后Arch Linux 用户可以使用以下命令进行安装:
```
sudo pacman -S gedit
```
#### 6. Xed
如果你使用 Linux Mint那么你可能听说过 Xed。Xed 是 Linux Mint 的默认文本编辑器,它非常轻量级。作为一个 “Xapp” 应用程序,它遵循 Linux Mint 的设计和功能指南,提供简单的用户界面、强大的菜单、工具栏和功能。
Xed 的一些主要特点包括:
- 传统的用户界面,保持简洁易用
- 强大的工具栏和上下文菜单选项,增强功能的能力
- 语法高亮显示
- 配置选项,如标签、编码等
- 支持 UTF-8 文本
- 编辑远程服务器文件
- 广泛的插件支持,可根据需要添加更多高级功能
- 支持概览地图
- 可缩放的编辑窗口
Xed 是最好的编辑器之一,可作为 Linux 系统上轻量级记事本的替代品。
![Xed 编辑器来自 Linux Mint 团队][14]
如果你使用的是 Linux Mint它应该是默认安装的。然而在 Ubuntu 中安装它需要运行一系列命令。打开终端并运行以下命令来在 Ubuntu 中安装 Xed。
```
wget http://packages.linuxmint.com/pool/import/i/inxi/inxi_3.0.32-1-1_all.deb
wget http://packages.linuxmint.com/pool/backport/x/xapp/xapps-common_2.4.2+vera_all.deb
wget http://packages.linuxmint.com/pool/backport/x/xapp/libxapp1_2.4.2+vera_amd64.deb
wget http://packages.linuxmint.com/pool/backport/x/xed/xed-common_3.2.8+vera_all.deb
wget http://packages.linuxmint.com/pool/backport/x/xed/xed_3.2.8+vera_amd64.deb
```
```
sudo dpkg -i inxi_3.0.32-1-1_all.deb
sudo dpkg -i xapps-common_2.4.2+vera_all.deb
sudo dpkg -i libxapp1_2.4.2+vera_amd64.deb
sudo dpkg -i xed-common_3.2.8+vera_all.deb
sudo dpkg -i xed_3.2.8+vera_amd64.deb
```
有关更多详情,请访问 [Xed 的 GitHub 存储库][15]。
### 内存和资源比较
由于我们在讨论性能,这是比较的关键,我们列出了上述所有应用程序在最新的 Ubuntu 安装中消耗的内存。
正如你所看到的Xfce 的 Mousepad 最轻量级,而 Gedit 最占资源。
| 应用程序名称 | Ubuntu 闲置时消耗的内存 |
| :- | :- |
| Mousepad | 303 KB |
| Featherpad | 1.7 MB |
| Leafpad | 7.7 MB |
| Beaver pad | 11.1 MB |
| Gedit | 30.2 MB |
| Xed | 32.1 MB |
### 总结
总之,在 Linux 上选择一个轻量级的记事本对于各种用途至关重要。无论你是需要记笔记、编写代码还是编辑文本轻量级记事本可以让你的工作更快、更轻松、更高效。Linux 操作系统提供了各种记事本应用程序,每个应用程序都具有其独特的功能和能力。
这份轻量级 Linux 记事本的前几名(应用程序)列表探讨了一些应用程序,包括 Leafpad、Gedit、Mousepad 和其他应用程序。
无论你选择哪个记事本,你可以确信它将提供你在 Linux 系统上完成工作所需的功能。
你最喜欢哪个?在评论框里告诉我吧。
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/lightweight-notepad-linux/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed
[1]: https://www.debugpoint.com/wp-content/uploads/2022/12/notepad-1head.jpg
[2]: https://www.debugpoint.com/notepad-replacement-ubuntu/
[3]: https://www.debugpoint.com/wp-content/uploads/2022/12/mousepad-running-in-Ubuntu.jpg
[4]: https://github.com/tsujan/FeatherPad
[5]: https://www.debugpoint.com/wp-content/uploads/2022/12/featherpad-running-in-Ubuntu.jpg
[6]: http://tarot.freeshell.org/leafpad/v
[7]: https://www.debugpoint.com/wp-content/uploads/2022/12/leafpad-a-simple-notepad-running-in-Ubuntu.jpg
[8]: https://sourceforge.net/projects/beaver-editor/
[9]: https://www.debugpoint.com/wp-content/uploads/2022/12/Beaver-editor-running-in-Ubuntu.jpg
[10]: https://wiki.gnome.org/Apps/Gedit
[11]: https://www.debugpoint.com/gnome-text-editor/
[12]: https://www.debugpoint.com/gedit-features/
[13]: https://www.debugpoint.com/wp-content/uploads/2022/12/gedit-text-editor.jpg
[14]: https://www.debugpoint.com/wp-content/uploads/2022/12/Xed-editor-from-Linux-Mint-team.jpg
[15]: https://github.com/linuxmint/xed

View File

@@ -0,0 +1,162 @@
[#]: subject: "A 10-minute guide to the Linux ABI"
[#]: via: "https://opensource.com/article/22/12/linux-abi"
[#]: author: "Alison Chaiken https://opensource.com/users/chaiken"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16002-1.html"
10 分钟让你了解 Linux ABI
======
![][0]
> 熟悉 ABI 的概念、ABI 稳定性的重要性以及 Linux 稳定 ABI 中包含的内容。
> LCTT 译注昨天AlmaLinux 称将 [放弃](https://linux.cn/article-16000-1.html) 对 RHEL 的 1:1 兼容性,但将保持对 RHEL 的 ABI 兼容,以便在 RHEL 上运行的软件可以无缝地运行在 AlmaLinux 上。可能有的同学对 ABI 的概念还不是很清楚,因此翻译此文供大家了解。
许多 Linux 爱好者都熟悉 Linus Torvalds 的 [著名告诫][1]:“我们不破坏用户空间”,但可能并非每个听到这句话的人都清楚其含义。
这个“第一规则”提醒开发人员关于应用程序的二进制接口ABI的稳定性该接口用于应用程序与内核之间的通信和配置。接下来的内容旨在使读者熟悉 ABI 的概念,阐述为什么 ABI 的稳定性很重要,并讨论 Linux 稳定 ABI 中包含了哪些内容。Linux 的持续增长和演进需要对 ABI 进行变更,其中一些变更引起了争议。
### 什么是 ABI
ABI 表示 <ruby>应用程序二进制接口<rt>Applications Binary Interface</rt></ruby>。理解 ABI 概念的一种方式是考虑它与其他概念的区别。对于许多开发人员来说,<ruby>应用程序编程接口<rt>Applications Programming Interface</rt></ruby>API更为熟悉。通常库的头文件和文档被认为是其 API以及还有像 [HTML5][2] 这样的标准文档。调用库或交换字符串格式数据的程序必须遵守 API 中所描述的约定,否则可能得到意外的结果。
ABI 类似于 API因为它们规定了命令的解释和二进制数据的交换方式。对于 C 程序ABI 通常包括函数的返回类型和参数列表、结构体的布局,以及枚举类型的含义、顺序和范围。截至 2022 年Linux 内核仍然几乎完全是 C 程序,因此必须遵守这些规范。
“[内核系统调用接口][3]” 的描述可以在《[Linux 手册第 2 节][4]》中找到,并包括了可从中间件应用程序调用的类似 `mount``sync` 的 C 版本函数。这些函数的二进制布局是 Linux ABI 的第一个重要组成部分。对于问题 “Linux 的稳定 ABI 包括哪些内容?”,许多用户和开发人员的回答是 “sysfs`/sys`)和 procfs`/proc`)的内容”。而实际上,[官方 Linux ABI 文档][5] 确实主要集中在这些 [虚拟文件系统][6] 上。
前面着重介绍了 Linux ABI 在程序中的应用方式但未涵盖同等重要的人为因素。正如下图所示ABI 的功能需要内核社区、C 编译器(如 [GCC][7] 或 [clang][8])、创建用户空间 C 库(通常是 [glibc][9])的开发人员,以及按照 [可执行与链接格式ELF][10] 布局的二进制应用程序之间的合作努力。
![开发社区内的合作][11]
### 为什么我们关注 ABI
来自 Torvalds 本人的 Linux ABI 的稳定性保证,使得 Linux 发行版和个人用户能够独立更新内核,而不受操作系统的影响。
如果 Linux 没有稳定的 ABI那么每次内核需要修补以解决安全问题时操作系统的大部分甚至全部内容都需要重新安装。显然二进制接口的稳定性是 Linux 的可用性和广泛采用的重要因素之一。
![Terminal output][12]
如上图所示,内核(在 `linux-libc-dev` 中)和 Glibc`libc6-dev` 中)都提供了定义文件权限的位掩码。显然,这两个定义集必须一致!`apt` 软件包管理器会识别软件包提供每个文件。Glibc ABI 的潜在不稳定部分位于 `bits/` 目录中。
在大部分情况下Linux ABI 的稳定性保证运作良好。按照 <ruby>[康韦定律][13]<rt>Conway's Law</rt></ruby>,在开发过程中出现的烦人技术问题往往是由于不同软件开发社区之间的误解或分歧所致,而这些社区都为 Linux 做出了贡献。不同社区之间的接口可以通过 Linux 包管理器的元数据轻松地进行想象,如上图所示。
### Y2038一个 ABI 破坏的例子
通过考虑当前正在进行的、[缓慢发生][14] 的 “Y2038” ABI 破坏的例子,可以更好地理解 Linux ABI。在 2038 年 1 月32 位时间计数器将回滚到全零就像较旧车辆的里程表一样。2038 年 1 月听起来还很遥远,但可以肯定的是,如今销售的许多物联网设备仍将处于运行状态。像今年安装的 [智能电表][15] 和 [智能停车系统][16] 这样的普通产品可能采用的是 32 位处理器架构,而且也可能不支持软件更新。
Linux 内核已经在内部转向使用 64 位的 `time_t` 不透明数据类型来表示更晚的时间点。这意味着像 `time()` 这样的系统调用在 64 位系统上已经变更了它们的函数签名。这些努力的艰难程度可以在内核头文件中(例如 [time_types.h][17])清楚地看到,在那里放着新的和 `_old` 版本的数据结构。
![里程表翻转][18]
Glibc 项目也 [支持 64 位时间][19],那么就大功告成了,对吗?不幸的是,根据 [Debian 邮件列表中的讨论][20] 来看,情况并非如此。发行版面临难以选择的问题,要么为 32 位系统提供所有二进制软件包的两个版本要么为安装介质提供两个版本。在后一种情况下32 位时间的用户将不得不重新编译其应用程序并重新安装。正如往常一样,专有应用程序才是一个真正的头疼问题。
### Linux 稳定 ABI 里到底包括什么内容?
理解稳定 ABI 有些微妙。需要考虑的是,尽管大部分 sysfs 是稳定 ABI但调试接口肯定是不稳定的因为它们将内核内部暴露给用户空间。Linus Torvalds 曾表示,“不要破坏用户空间”,通常情况下,他是指保护那些 “只想它能工作” 的普通用户,而不是系统程序员和内核工程师,后者应该能够阅读内核文档和源代码,以了解不同版本之间发生了什么变化。下图展示了这个区别。
![稳定性保证][21]
普通用户不太可能与 Linux ABI 的不稳定部分进行交互,但系统程序员可能无意中这样做。除了 `/sys/kernel/debug` 以外sysfs`/sys`)和 procfs`/proc`)的所有部分都是稳定的。
那么其他对用户空间可见的二进制接口如何呢,包括 `/dev` 中的设备文件、内核日志文件(可通过 `dmesg` 命令读取)、文件系统元数据或在内核的 “命令行” 中提供的 “引导参数”(在引导加载程序如 GRUB 或 u-boot 中可见)呢?当然,“这要视情况而定”。
### 挂载旧文件系统
除了 Linux 系统在引导过程中出现挂起之外,文件系统无法挂载是最令人失望的事情。如果文件系统位于付费客户的固态硬盘上,那么问题确实十分严重。当内核升级时,一个能够在旧内核版本下挂载的 Linux 文件系统应该仍然能够挂载,对吗?实际上,“这要视情况而定”。
在 2020 年,一位受到伤害的 Linux 开发人员在内核的邮件列表上 [抱怨道][23]
> 内核已经接受这个作为一个有效的可挂载文件系统格式,没有任何错误或任何类型的警告,而且已经这样稳定地工作了多年……我一直普遍地以为,挂载现有的根文件系统属于内核<->用户空间或内核<->现有系统边界的范围,由内核接受并被现有用户空间成功使用的内容所定义,升级内核应该与现有用户空间和系统兼容。
但是有一个问题:这些无法挂载的文件系统是使用一种依赖于内核定义,但并未被内核使用的标志的专有工具创建的。该标志未出现在 Linux 的 API 头文件或 procfs/sysfs 中,而是一种 [实现细节][24]。因此,在用户空间代码中解释该标志意味着依赖于“[未定义行为][25]”,这是个几乎会让每个软件开发人员都感到战栗的短语。当内核社区改进其内部测试并开始进行新的一致性检查时,“[man 2 mount][26]” 系统调用突然开始拒绝具有专有格式的文件系统。由于该格式的创建者明确是一位软件开发人员,因此他未能得到内核文件系统维护者的同情。
![施工标志上写着工作人员在树上进行工作][27]
### 线程化内核的 dmesg 日志
`/dev` 目录中的文件格式是否保证稳定或不稳定?[dmesg 命令][28] 会从文件 `/dev/kmsg` 中读取内容。2018 年,一位开发人员 [为 dmesg 输出实现了线程化][29],使内核能够“在打印一系列 `printk()` 消息到控制台时,不会被中断和/或被其他线程的并发 `printk()` 干扰”。听起来很棒!通过在 `/dev/kmsg` 输出的每一行添加线程 ID实现了线程化。密切关注的读者将意识到这个改动改变了 `/dev/kmsg` 的 ABI这意味着解析该文件的应用程序也需要进行相应的修改。由于许多发行版没有编译启用新功能的内核大多数使用 `/bin/dmesg` 的用户可能没有注意到这件事,但这个改动破坏了 [GDB 调试器][30] 读取内核日志的能力。
确实,敏锐的读者会认为 GDB 的用户运气不佳,因为调试器是开发人员工具。实际上并非如此,因为需要更新以支持新的 `/dev/kmsg` 格式的代码位于内核自己的 Git 源代码库的 “树内” 部分。对于一个正常的项目来说,单个代码库内的程序无法协同工作就是一个明显的错误,因此已经合并了一份 [使 GDB 能够与线程化的 /dev/kmsg 一起工作的补丁][32]。
### 那么 BPF 程序呢?
[BPF][33] 是一种强大的工具可以在运行的内核中监控甚至实时进行配置。BPF 最初的目的是通过允许系统管理员即时从命令行修改数据包过滤器,从而支持实时网络配置。[Alexei Starovoitov 和其他人极大地扩展了 BPF][34],使其能够跟踪任意内核函数。跟踪明显是开发人员的领域,而不是普通用户,因此它显然不受任何 ABI 保证的约束(尽管 [bpf() 系统调用][35] 具有与其他系统调用相同的稳定性承诺)。另一方面,创建新功能的 BPF 程序为“[取代内核模块成为扩展内核的事实标准手段][36]”提供了可能性。内核模块使设备、文件系统、加密、网络等工作正常因此明显是“只希望它工作”的普通用户所依赖的设施。问题是与大多数开源内核模块不同BPF 程序传统上不在内核源代码中。
2022 年春季,[一个提案][37] 成为了焦点,该提案提议使用微型 BPF 程序而不是设备驱动程序补丁,对广泛的人机接口设备(如鼠标和键盘)提供支持。
随后进行了一场激烈的讨论,但这个问题显然在 [Torvalds 在开源峰会上的评论][38] 中得到解决:
> 他指出,如果你破坏了“普通(非内核开发人员)用户使用的真实用户空间工具”,那么你需要修复它,无论是否使用了 eBPF。
一致意见似乎正在形成,即希望其 BPF 程序在内核更新后仍能正常工作的开发人员 [将需要将其提交到内核源代码库中一个尚未指定的位置][39]。敬请关注后继发展,以了解内核社区对于 BPF 和 ABI 稳定性将采取什么样的政策。
### 结论
内核的 ABI 稳定性保证适用于 procfs、sysfs 和系统调用接口,但也存在重要的例外情况。当内核变更破坏了“树内”代码或用户空间应用程序时,通常会迅速回滚有问题的补丁。对于依赖内核实现细节的专有代码,尽管这些细节可以从用户空间访问,但它并没有受到保护,并且在出现问题时得到的同情有限。当像 Y2038 这样的问题无法避免 ABI 破坏时,会以尽可能慎重和系统化的方式进行过渡。而像 BPF 程序这样的新功能提出了关于 ABI 稳定性边界的尚未解答的问题。
### 致谢
感谢 [Akkana Peck][40]、[Sarah R. Newman][41] 和 [Luke S. Crawford][42] 对早期版本材料的有益评论。
*题图MJ/da788385-ca24-4be5-bc27-ad7e7ef75973*
--------------------------------------------------------------------------------
via: https://opensource.com/article/22/12/linux-abi
作者:[Alison Chaiken][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/chaiken
[b]: https://github.com/lkxed
[1]: https://lkml.org/lkml/2018/12/22/232
[2]: https://www.w3.org/TR/2014/REC-html5-20141028/
[3]: https://www.kernel.org/doc/html/v6.0/admin-guide/abi-stable.html#the-kernel-syscall-interface
[4]: https://www.man7.org/linux/man-pages/dir_section_2.html
[5]: https://www.kernel.org/doc/html/v6.0/admin-guide/abi.html
[6]: https://opensource.com/article/19/3/virtual-filesystems-linux
[7]: https://gcc.gnu.org/
[8]: https://clang.llvm.org/get_started.html
[9]: https://www.gnu.org/software/libc/
[10]: https://www.man7.org/linux/man-pages/man5/elf.5.html
[11]: https://opensource.com/sites/default/files/2022-11/1cooperation.png
[12]: https://opensource.com/sites/default/files/2022-12/better_apt-file-find_ABI-boundary.png
[13]: https://en.wikipedia.org/wiki/Conway's_law
[14]: https://www.phoronix.com/news/MTc2Mjg
[15]: https://www.lfenergy.org/projects/super-advanced-meter-sam/
[16]: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7506899/
[17]: https://github.com/torvalds/linux/blob/master/include/uapi/linux/time_types.h
[18]: https://opensource.com/sites/default/files/2022-11/3speedometerrollingover_0.jpg
[19]: https://www.phoronix.com/scan.php?page=news_item&px=Glibc-More-Y2038-Work
[20]: https://groups.google.com/g/linux.debian.ports.arm/c/_KBFSz4YRZs
[21]: https://opensource.com/sites/default/files/2022-11/4stability.png
[22]: https://lwn.net/Articles/833696/
[23]: https://lwn.net/ml/linux-kernel/20201006050306.GA8098@localhost/
[24]: https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)
[25]: https://en.wikipedia.org/wiki/Undefined_behavior
[26]: https://www.man7.org/linux/man-pages/man2/mount.2.html
[27]: https://opensource.com/sites/default/files/2022-11/5crewworkingintrees.jpg
[28]: https://www.man7.org/linux/man-pages/man1/dmesg.1.html
[29]: https://lkml.org/lkml/2018/11/24/180
[30]: https://sourceware.org/gdb/current/onlinedocs/gdb/
[31]: https://unix.stackexchange.com/questions/208638/linux-kernel-meaning-of-source-tree-in-tree-and-out-of-tree
[32]: https://lore.kernel.org/all/20191011142500.2339-1-joel.colledge@linbit.com/
[33]: https://opensource.com/article/19/8/introduction-bpftrace
[34]: https://lwn.net/Articles/740157/
[35]: https://www.man7.org/linux/man-pages/man2/bpf.2.html
[36]: https://lwn.net/Articles/909095/
[37]: https://lwn.net/ml/ksummit-discuss/CAO-hwJJxCteD_BHZTeqQ1f7gWOHoj+05qP8bmFsRYVfMc_3FxQ@mail.gmail.com/
[38]: https://lwn.net/ml/ksummit-discuss/20220621110514.6ef174d0@rorschach.local.home/
[39]: https://lwn.net/ml/ksummit-discuss/20220616125128.68151432@gandalf.local.home/
[40]: https://shallowsky.com/blog/
[41]: https://www.socallinuxexpo.org/scale/19x/presentations/live-patching-down-trenches-view
[42]: https://www.amazon.com/Book-Xen-Practical-System-Administrator/dp/1593271867
[0]: https://img.linux.net.cn/data/attachment/album/202307/15/114240eo7her2zbdqqp448.jpg

View File

@@ -0,0 +1,192 @@
[#]: subject: "5 Best PDF editors for Ubuntu and Other Linux"
[#]: via: "https://www.debugpoint.com/pdf-editors-ubuntu/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15972-1.html"
适用于 Linux 的 5 个最佳 PDF 编辑器
======
![][0]
> 我们列出了适用于 Ubuntu 和其他 Linux 发行版的最佳自由及开源的 PDF 编辑器。并根据它们的 PDF 编辑功能进行比较。
正在寻找适用于 Ubuntu 的自由及开源 PDF 编辑器?继续阅读本文以了解 Ubuntu 的最佳 PDF 编辑器以及如何使用它们编辑 PDF 文件的分步指南。
Ubuntu 是深受开发人员、学生和专业人士欢迎的操作系统。编辑 PDF 文件是许多用户的常见任务,但找到适合该工作的工具可能很困难。在本文中,我们将介绍一些最好的免费和开源的 PDF 编辑器及其功能。
### 适用于 Ubuntu 和其他发行版的最佳免费 PDF 编辑器
#### LibreOffice Draw
LibreOffice 是一款流行的开源办公生产力套件。它的绘图组件名为 “LibreOffice Draw”能够编辑 PDF。在此列表中的所有应用中LibreOffice Draw 是在 Linux 中编辑 PDF 文件的最佳选择。
让我们看看如何编辑示例 PDF 和选项。
- 打开 LibreOffice Draw 并单击“<ruby>文件<rt>File</rt></ruby>”>“<ruby>打开<rt>Open</rt></ruby>”
- 选择你要编辑的 PDF 文件
- 根据需要编辑 PDF 文件
- 保存编辑后的 PDF 文件
这是正在编辑文本的示例图片。
![LibreOffice Draw 中的 pdf 编辑示例][1]
关于 LibreOffice Draw 的一些使用说明:
- LibreOffice Draw 本身将 PDF 组件检测为小的文本或图像块。例如,如果 PDF 文件中有一个段落,它会将其检测为单独的文本块。请参见下图。
- 这可能有点棘手,但你仍然可以仔细编辑它。
- 此外,你还可以在 PDF 文件中添加文本框和其他组件。
![LibreOffice Draw edits PDF texts block wise][2]
#### Inkscape
流行的 [Inkscape][3] 图形编辑器可以编辑和修改 PDF 文件。它提供的读取单个 PDF 组件的功能是无与伦比的,而且完全被低估了。
Inkscape 允许你通过外部库的 “Popller/Cairo 导入”或内置的内部 PDF 导入工具来导入 PDF 文件。你也可以告诉 Inkscape 将 PDF 字体与你系统中任何最接近的字体相匹配。
![Inkscape PDF 导入选项][4]
打开 PDF 时,你可以单独编辑 PDF 中的章节、单词、线条、段落或绘图。每个组件都会被识别并表示为单独的层,以进行更高级的编辑。
编辑完成后,你可以再次将其导出成 PDF。
![在 Ubuntu 中使用 Inkscape 编辑 PDF][5]
如果你想要高级 PDF 编辑Inkscape 是最好的选择。步骤概述如下。
- 打开 Inkscape 并单击“<ruby>文件<rt>File</rt></ruby>”>“<ruby>打开<rt>Open</rt></ruby>”
- 选择你要编辑的 PDF 文件
- 根据需要编辑 PDF 文件
- 导出编辑后的 PDF 文件
你可以[在 Linux 系统安装 Flatpak][6] 和 Flathub并使用以下命令安装 Inkscape。
```
flatpak install org.inkscape.Inkscape
```
#### GIMP
许多人不知道流行的光栅图形编辑器 [GIMP][7] 也可以打开并允许你编辑 PDF。在 GIMP 中打开 PDF 文件会提示你将每个 PDF 页面分别作为图像文件的图层打开。你现在可以编辑图像并最终从 GIMP 将它们导出为 PDF。
![File open dialog in GIMP which shows prompts for advanced PDF import settings][8]
但有一个问题。每个 PDF 页面都成为 GIMP 中的静态图像。其中包括文本、图表、图标等。因此,如果你想修改它,你可能需要匹配字体大小、通过 GIMP 选择删除部分等等。
因此,总的来说,你可以进行高级编辑,但无法修改其上的现有文本。
使用方法很简单。
- 打开 GIMP 并单击“<ruby>文件<rt>File</rt></ruby>”>“<ruby>打开<rt>Open</rt></ruby>”
- 选择你要编辑的 PDF 文件
- 根据需要编辑 PDF 文件。
- 另存为编辑后的 PDF 文件
你可以 [在 Linux 系统安装 Flatpak][6] 和 Flathub并使用以下命令安装 GIMP。
```
flatpak install org.gimp.GIMP
```
![使用 GIMP 编辑 PDF][9]
#### Okular
KDE 社区流行的文档查看器应用 [Okular][10] 的 PDF 编辑功能有限。它没有加载一整套 PDF 编辑功能。不过,你可以在 Okular 中执行一些高级注释。
因此,我认为它在这个列表中占有一席之地是当之无愧的。
在 PDF 中使用 Okular 可以执行以下操作:
- 添加文本作为注释
- 使用各种颜色高亮显示 PDF 中的文本
- 添加注释、箭头和手绘图。
**但是,你无法使用 Okular 修改现有 PDF 内容。**
注释完成后,你可以将文件另存为 PDF。
你可以 [在 Linux 系统安装 Flatpak][6] 和 Flathub并使用以下命令安装 Okular。
```
flatpak install org.kde.okular
```
![使用 Okular 进行基本 PDF 注释][11]
#### Scribus
[Scribus][12] 是最古老的开源桌面出版程序之一,它以 PDF 和 Postscript 格式生成商业级输出,主要(但不限于)用于 Linux。
虽然主要用于设计,但它可以打开 PDF 文件并提供有限的编辑选项。
导入选项允许你选择将 PDF 文本导入为矢量图像还是文本。此外,你还可以调整 PDF 组件的大小、将其分组/取消分组、更改文本等。
完成后,你可以将其保存回 PDF 文件。它是被低估的程序之一,你可以尝试使用它在 Ubuntu 和其他发行版中编辑 PDF。
你可以 [在 Linux 系统安装 Flatpak][6] 和 Flathub并使用以下命令安装 Scribus。
```
flatpak install net.scribus.Scribus
```
![用于导入 PDF 文件的 Scribus 选项][13]
![在 Ubuntu 中编辑 pdf 的 Scribus 选项][14]
### 其他商业和非自由及开源替代品
你可能想尝试一些商业的、非自由及开源软件的选项。这里是其中的一些。
- [Sejda PDF Desktop][15](最多免费 3 个任务200 页,每天 50 MB
- [PDFedit当前未维护使用旧库][16]
- [Master PDF editor商业][17]
### 总结
我们推荐的免费 PDF 编辑器是 Inkscape 和 LibreOffice Draw。它们都能够满足从基本到高级的使用水平并且效果良好。
你可以尝试其他选项,但结果可能会根据 PDF 文件的复杂程度而有所不同。
此外,你始终可以选择商业选项以获得更多功能。
我希望本指南可以帮助你为 Ubuntu 和其他 Linux 发行版选择最好的免费 PDF 编辑器。
*题图MJ/3ea2b1da-87e4-4839-97e9-5937f93c64eb*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/pdf-editors-ubuntu/
作者:[Arindam][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://www.debugpoint.com/wp-content/uploads/2023/03/Sample-pdf-editing-in-LibreOffice-Draw.jpg
[2]: https://www.debugpoint.com/wp-content/uploads/2023/03/LibreOffice-Draw-edits-PDF-texts-block-wise.jpg
[3]: https://inkscape.org/
[4]: https://www.debugpoint.com/wp-content/uploads/2023/03/Inkscape-PDF-import-options.jpg
[5]: https://www.debugpoint.com/wp-content/uploads/2023/03/Edit-PDF-using-Inkscape-in-Ubuntu.jpg
[6]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
[7]: https://www.gimp.org/
[8]: https://www.debugpoint.com/wp-content/uploads/2023/03/File-open-dialog-in-GIMP-which-shows-prompts-for-advanced-PDF-import-settings.jpg
[9]: https://www.debugpoint.com/wp-content/uploads/2023/03/Editing-PDF-using-GIMP.jpg
[10]: https://okular.kde.org/
[11]: https://www.debugpoint.com/wp-content/uploads/2023/03/Basic-PDF-annotation-using-Okular.jpg
[12]: http://www.scribus.net/
[13]: https://www.debugpoint.com/wp-content/uploads/2023/03/Scribus-options-to-import-PDF-files.jpg
[14]: https://www.debugpoint.com/wp-content/uploads/2023/03/Scribus-options-to-edit-pdf-in-Ubuntu.jpg
[15]: https://www.sejda.com/desktop
[16]: https://sourceforge.net/projects/pdfedit/
[17]: https://code-industry.net/masterpdfeditor/
[0]: https://img.linux.net.cn/data/attachment/album/202307/06/183239nz7t4ab2zb690a9a.jpg

View File

@@ -0,0 +1,498 @@
[#]: subject: "Build a Raspberry Pi monitoring dashboard in under 30 minutes"
[#]: via: "https://opensource.com/article/23/3/build-raspberry-pi-dashboard-appsmith"
[#]: author: "Keyur Paralkar https://opensource.com/users/keyur-paralkar"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15984-1.html"
在不到 30 分钟内构建一个树莓派监控仪表盘
======
![][0]
> 使用 Python 制作一个 API 来监控你的树莓派硬件,并使用 Appsmith 建立一个仪表盘。
如果你想知道你的树莓派的性能如何,那么你可能需要一个树莓派的仪表盘。在本文中,我将演示如何快速构建一个按需监控仪表盘,以实时查看你的树莓派的 CPU 性能、内存和磁盘使用情况,并根据需要随时添加更多视图和操作。
如果你已经使用 Appsmith你还可以直接导入 [示例应用程序][1] 并开始使用。
### Appsmith
Appsmith 是一个开源的 [低代码][2] 应用构建工具,帮助开发人员轻松快速地构建内部应用,如仪表盘和管理面板。它是一个用于仪表盘的很好选择,并减少了传统编码方法所需的时间和复杂性。
在此示例的仪表盘中,我显示以下统计信息:
- CPU
- 占用百分比
- 频率或时钟速度
- 计数
- 温度
- 内存
- 占用百分比
- 可用内存百分比
- 总内存
- 空闲内存
- 磁盘
- 磁盘使用百分比
- 绝对磁盘空间使用量
- 可用磁盘空间
- 总磁盘空间
### 创建一个端点
你需要一种从树莓派获取这些数据并传递给 Appsmith 的方法。[psutil][3] 是一个用于监控和分析的 Python 库,而 [Flask-RESTful][4] 是一个创建 [REST API][5] 的 Flask 扩展。
Appsmith 每隔几秒钟调用 REST API 以自动刷新数据,并以 JSON 对象作为响应,其中包含所有所需的统计信息,如下所示:
```
{ "cpu_count": 4,
"cpu_freq": [
600.0,
600.0,
1200.0 ],
"cpu_mem_avail": 463953920,
"cpu_mem_free": 115789824,
"cpu_mem_total": 971063296,
"cpu_mem_used": 436252672,
"cpu_percent": 1.8,
"disk_usage_free": 24678121472,
"disk_usage_percent": 17.7,
"disk_usage_total": 31307206656,
"disk_usage_used": 5292728320,
"sensor_temperatures": 52.616 }
```
#### 1、设置 REST API
如果你的树莓派尚未安装 Python请在树莓派上打开终端并运行此安装命令
```
$ sudo apt install python3
```
现在为你的开发设置一个 [Python 虚拟环境][6]
```
$ python -m venv PiData
```
接下来,激活该环境。你必须在重新启动树莓派后执行此操作。
```
$ source PiData/bin/activate
$ cd PiData
```
为了安装 Flask、Flask-RESTful 和以后需要的依赖项,请在你的 Python 虚拟环境中创建一个名为 `requirements.txt` 的文件,并将以下内容添加到其中:
```
flask
flask-restful
gunicorn
```
保存文件,然后使用 `pip` 一次性安装它们。你必须在重新启动树莓派后执行此操作。
```
(PyData)$ python -m pip install -r requirements.txt
```
接下来,创建一个名为 `pi_stats.py` 的文件来存放使用 `psutil` 检索树莓派系统统计信息的逻辑。将以下代码粘贴到 `pi_stats.py` 文件中:
```
from flask import Flask
from flask_restful import Resource, Api
import psutil
app = Flask(__name__)
api = Api(app)
class PiData(Resource):
def get(self):
return "RPI Stat dashboard"
api.add_resource(PiData, '/get-stats')
if __name__ == '__main__':
app.run(debug=True)
```
这段代码的作用如下:
- 使用 `app = Flask(name)` 来定义嵌套 API 对象的应用程序。
- 使用 Flask-RESTful 的 [API 方法][7] 来定义 API 对象。
- 在 Flask-RESTful 中将 `PiData` 定义为具体的 [Resource 类][8] ,以公开每个支持的 HTTP 方法。
- 使用 `api.add_resource(PiData, '/get-stats')` 将资源 `PiData` 附加到 API 对象 `api`
- 每当你访问 URL `/get-stats` 时,将返回 `PiData` 作为响应。
#### 2、使用 psutil 读取统计信息
要从你的树莓派获取统计信息,你可以使用 `psutil` 提供的这些内置函数:
- `cpu_percentage``cpu_count``cpu_freq``sensors_temperatures` 函数分别用于获取 CPU 的占用百分比、计数、时钟速度和温度。`sensors_temperatures` 报告了与树莓派连接的所有设备的温度。要仅获取 CPU 的温度,请使用键 `cpu-thermal`
- `virtual_memory` 函数可返回总内存、可用内存、已使用内存和空闲内存的统计信息(以字节为单位)。
- `disk_usage` 函数可返回总磁盘空间、已使用空间和可用空间的统计信息(以字节为单位)。
将所有函数组合到一个 Python 字典中的示例如下:
```
system_info_data = {
'cpu_percent': psutil.cpu_percent(1),
'cpu_count': psutil.cpu_count(),
'cpu_freq': psutil.cpu_freq(),
'cpu_mem_total': memory.total,
'cpu_mem_avail': memory.available,
'cpu_mem_used': memory.used,
'cpu_mem_free': memory.free,
'disk_usage_total': disk.total,
'disk_usage_used': disk.used,
'disk_usage_free': disk.free,
'disk_usage_percent': disk.percent,
'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current,
}
```
下一节将使用该字典。
#### 3、从 Flask-RESTful API 获取数据
为了在 API 响应中看到来自树莓派的数据,请更新 `pi_stats.py` 文件,将字典 `system_info_data` 包含在 `PiData` 类中:
```
from flask import Flask
from flask_restful import Resource, Api
import psutil
app = Flask(__name__)
api = Api(app)
class PiData(Resource):
def get(self):
memory = psutil.virtual_memory()
disk = psutil.disk_usage('/')
system_info_data = {
'cpu_percent': psutil.cpu_percent(1),
'cpu_count': psutil.cpu_count(),
'cpu_freq': psutil.cpu_freq(),
'cpu_mem_total': memory.total,
'cpu_mem_avail': memory.available,
'cpu_mem_used': memory.used,
'cpu_mem_free': memory.free,
'disk_usage_total': disk.total,
'disk_usage_used': disk.used,
'disk_usage_free': disk.free,
'disk_usage_percent': disk.percent,
'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current, }
return system_info_data
api.add_resource(PiData, '/get-stats')
if __name__ == '__main__':
app.run(debug=True)
```
你的脚本已经就绪,下面运行 `PiData.py`
```
$ python PyData.py
* Serving Flask app "PiData" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not run this in a production environment.
* Debug mode: on
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
```
你有了一个可以工作的 API。
#### 4、将 API 提供给互联网
你可以在本地网络中与 API 进行交互。然而,要在互联网上访问它,你必须在防火墙中打开一个端口,并将传入的流量转发到由 Flask 提供的端口。然而,正如你的测试输出建议的那样,在 Flask 中运行 Flask 应用程序仅适用于开发,而不适用于生产。为了安全地将 API 提供给互联网,你可以使用安装过程中安装的 `gunicorn` 生产服务器。
现在,你可以启动 Flask API。每次重新启动树莓派时都需要执行此操作。
```
$ gunicorn -w 4 'PyData:app'
Serving on http://0.0.0.0:8000
```
要从外部世界访问你的树莓派,请在网络防火墙中打开一个端口,并将流量定向到你树莓派的 IP 地址,端口为 8000。
首先,获取树莓派的内部 IP 地址:
```
$ ip addr show | grep inet
```
内部 IP 地址通常以 10 或 192 或 172 开头。
接下来你必须配置防火墙。通常你从互联网服务提供商ISP获取的路由器中嵌入了防火墙。通常你可以通过网络浏览器访问家用路由器。路由器的地址有时会打印在路由器的底部它以 192.168 或 10 开头。不过,每个设备都不同,因此我无法告诉你需要点击哪些选项来调整设置。关于如何配置防火墙的完整描述,请阅读 Seth Kenlon 的文章 《[打开端口并通过你的防火墙路由流量][9]》。
或者,你可以使用 [localtunnel][10] 来使用动态端口转发服务。
一旦你的流量到达树莓派,你就可以查询你的 API
```
$ curl https://example.com/get-stats
{
"cpu_count": 4,
"cpu_freq": [
600.0,
600.0,
1200.0 ],
"cpu_mem_avail": 386273280,
...
```
如果你已经执行到这一步,那么最困难的部分已经过去了。
#### 5、重复步骤
如果你重新启动了树莓派,你必须按照以下步骤进行操作:
- 使用 `source` 重新激活 Python 环境
- 使用 `pip` 刷新应用程序的依赖项
- 使用 `gunicorn` 启动 Flask 应用程序
你的防火墙设置是持久的,但如果你使用了 localtunnel则必须在重新启动后启动新的隧道。
如果你愿意,可以自动化这些任务,但那是另一个教程的内容。本教程的最后一部分是在 Appsmith 上构建一个用户界面,使用拖放式小部件和一些 JavaScript将你的树莓派数据绑定到用户界面。相信我从现在开始很容易
### 在 Appsmith 上构建仪表盘
![硬件监控仪表盘][11]
要制作一个像这样的仪表盘,你需要将公开的 API 端点连接到 Appsmith使用 Appsmith 的小部件库构建用户界面,并将 API 的响应绑定到小部件上。如果你已经使用 Appsmith你可以直接导入 [示例应用程序][1] 并开始使用。
如果你还没有,请 [注册][12] 一个免费的 Appsmith 帐户。或者,你可以选择 [自托管 Appsmith][13]。
### 将 API 作为 Appsmith 数据源连接
登录到你的 Appsmith 帐户。
- 在左侧导航栏中找到并点击 “<ruby>查询或 JS<rt>QUERIES/JS</rt></ruby>” 旁边的 “+” 按钮。
- 点击 “<ruby>创建一个空白 API<rt>Create a blank API</rt></ruby>”。
- 在页面顶部,将你的项目命名为 “PiData”。
- 获取你的 API 的 URL。如果你使用的是 localtunnel则是一个 `localtunnel.me` 地址,总是在末尾添加 `/get-stats` 以获取统计数据。将其粘贴到页面的第一个空白字段中,然后点击 “RUN” 按钮。
确保在 “<ruby>响应<rt>Response</rt></ruby>” 面板中看到成功的响应。
![Appsmith 界面][14]
### 构建用户界面
Appsmith 的界面非常直观,但如果你感到迷失,我建议你查看 [在 Appsmith 上构建你的第一个应用程序][15] 教程。
对于标题,将 “<ruby>文本<rt>Text</rt></ruby>”、“<ruby>图像<rt>Image</rt></ruby>” 和 “<ruby>分隔线<rt>Divider</rt></ruby>” 小部件拖放到画布上。将它们排列如下:
![设置项目标题][16]
“<ruby>文本<rt>Text</rt></ruby>” 小部件包含你页面的实际标题。键入比“Raspberry Pi Stats”更酷的内容。
“<ruby>图像<rt>Image</rt></ruby>” 小部件用于展示仪表盘的独特标志。你可以使用你喜欢的任何标志。
使用 “<ruby>开关<rt>Switch</rt></ruby>” 小部件来切换实时数据模式。在 “<ruby>属性<rt>Property</rt></ruby>” 面板中进行配置,以从你构建的 API 获取数据。
对于主体部分,使用来自左侧的小部件库的以下小部件创建一个 CPU 统计信息区域,使用以下小部件:
- <ruby>进度条<rt>Progress Bar</rt></ruby>
- <ruby>统计框<rt>Stat Box</rt></ruby>
- <ruby>图表<rt>Chart</rt></ruby>
对于内存和磁盘统计信息部分,重复相同的步骤。磁盘统计信息部分不需要图表,但如果你能找到用途,那也可以使用它。
你的最终小部件布局应该类似于以下:
![Appsmith 中的属性设置][17]
最后一步是将 API 的数据绑定到你的小部件上。
### 将数据绑定到小部件上
返回到画布,并在三个类别的部分中找到你的小部件。首先设置 CPU 统计信息。
要将数据绑定到 “<ruby>进度条<rt>Progress Bar</rt></ruby>” 小部件:
- 单击 “<ruby>进度条<rt>Progress Bar</rt></ruby>” 小部件,以打开右侧的 “<ruby>属性<rt>Property</rt></ruby>” 面板。
- 查找 “<ruby>进度<rt>Progress</rt></ruby>” 属性。
- 单击 “JS” 按钮以激活 JavaScript。
- 在 “<ruby>进度<rt>Progress</rt></ruby>” 字段中粘贴 `{{PiData.data.cpu_percent ?? 0}}`。此代码引用了你的 API 的数据流,名为 `PiData`。Appsmith 将响应数据缓存在 `PiData``.data` 运算符内。键 `cpu_percent` 包含了 Appsmith 用来显示 CPU 利用率百分比的数据。
- 在 “<ruby>进度条<rt>Progress Bar</rt></ruby>” 小部件下方添加一个 “<ruby>文本<rt>Text</rt></ruby>” 小部件作为标签。
![在配置屏幕中绑定数据][18]
在 CPU 部分有三个 “<ruby>统计框<rt>Stat Box</rt></ruby>” 小部件。将数据绑定到每个小部件的步骤与绑定 “<ruby>进度条<rt>Progress Bar</rt></ruby>” 小部件的步骤完全相同,只是你需要从 `.data` 运算符中绑定不同的数据属性。按照相同的步骤进行操作,但有以下例外:
- 使用 `{{${PiData.data.cpu_freq[0]} ?? 0 }}` 来显示时钟速度。
- 使用 `{{${PiData.data.cpu_count} ?? 0 }}` 来显示 CPU 计数。
- 使用 `{{${(PiData.data.sensor_temperatures).toPrecision(3)} ?? 0 }}` 来显示 CPU 温度数据。
如果一切顺利,你将得到一个漂亮的仪表盘,如下所示:
![树莓派的仪表盘][19]
### CPU 利用率趋势图
你可以使用 “<ruby>图表<rt>Chart</rt></ruby>” 小部件将 CPU 利用率显示为趋势线,并使其随时间自动更新。
首先,单击小部件,在右侧找到 “<ruby>图表类型<rt>Chart Type</rt></ruby>” 属性,并将其更改为 “<ruby>折线图<rt>LINE CHART</rt></ruby>”。为了显示趋势线,需要将 `cpu_percent` 存储在数据点数组中。你的 API 目前将其作为单个时间数据点返回,因此可以使用 Appsmith 的 `storeValue` 函数Appsmith 内置的 `setItem` 方法的一个原生实现)来获取一个数组。
在 “<ruby>查询或 JS<rt>QUERIES/JS</rt></ruby>” 旁边单击 “+” 按钮,并将其命名为 “utils”。
将以下 JavaScript 代码粘贴到 “<ruby>代码<rt>Code</rt></ruby>” 字段中:
```
export default {
getLiveData: () => {
//When switch is on:
if (Switch1.isSwitchedOn) {
setInterval(() => {
let utilData = appsmith.store.cpu_util_data;
PiData.run()
storeValue("cpu_util_data", [...utilData, {
x: PiData.data.cpu_percent,
y: PiData.data.cpu_percent
}]);
}, 1500, 'timerId')
} else {
clearInterval('timerId');
}
},
initialOnPageLoad: () => {
storeValue("cpu_util_data", []);
}
}
```
为了初始化 `Store`,你在 `initialOnPageLoad` 对象中创建了一个 JavaScript 函数,并将 `storeValue` 函数放在其中。
你使用 `storeValue("cpu_util_data", []);``cpu_util_data` 中的值存储到 `storeValue` 函数中。此函数在页面加载时运行。
到目前为止,每次刷新页面时,代码都会将 `cpu_util_data` 中的一个数据点存储到 `Store` 中。为了存储一个数组,你使用了 `x``y` 的下标变量,两者都存储了来自 `cpu_percent` 数据属性的值。
你还希望通过设定存储值之间的固定时间间隔来自动存储这些数据。当执行 [setInterval][20] 函数时:
- 获取存储在 `cpu_util_data` 中的值。
- 调用 API `PiData`
- 使用返回的最新 `cpu_percent` 数据将 `cpu_util_data` 更新为 `x``y` 变量。
-`cpu_util_data` 的值存储在键 `utilData` 中。
- 仅当设置为自动执行函数时,才重复执行步骤 1 到 4。你使用 Switch 小部件将其设置为自动执行,这就解释了为什么有一个 `getLiveData` 父函数。
在 “<ruby>设置<rt>Settings</rt></ruby>” 选项卡中,找到对象中的所有父函数,并在 “<ruby>页面加载时运行<rt>RUN ON PAGE LOAD</rt></ruby>” 选项中将 `initialOnPageLoad` 设置为 “Yes”。
![设置页面加载时要执行的函数][21]
现在刷新页面进行确认。
返回到画布。单击 “<ruby>图表<rt>Chart</rt></ruby>” 小部件,并找到 “<ruby>图表数据<rt>Chart Data</rt></ruby>” 属性。将绑定 `{{ appsmith.store.disk_util_data }}` 粘贴到其中。这样,如果你自己多次运行对象 `utils`,就可以获得图表数据。要自动运行此操作:
- 查找并单击仪表盘标题中的 “<ruby>实时数据开关<rt>Live Data Switch</rt></ruby>” 小部件。
- 查找 `onChange` 事件。
- 将其绑定到 `{{ utils.getLiveData() }}`。JavaScript 对象是 `utils`,而 `getLiveData` 是在你切换开关时激活的函数,它会从你的树莓派获取实时数据。但是还有其他实时数据,因此同一开关也适用于它们。继续阅读以了解详情。
将数据绑定到内存和磁盘部分的小部件与你在 CPU 统计信息部分所做的方式类似。
对于内存部分,绑定如下所示:
- 进度条中的绑定为:`{{( PiData.data.cpu_mem_avail/1000000000).toPrecision(2) \* 100 ?? 0 }}`
- 三个统计框小部件的绑定分别为:`{{ \${(PiData.data.cpu_mem_used/1000000000).toPrecision(2)} ?? 0 }} GB``{{ \${(PiData.data.cpu_mem_free/1000000000).toPrecision(2)} ?? 0}} GB``{{ \${(PiData.data.cpu_mem_total/1000000000).toPrecision(2)} ?? 0 }} GB`
对于磁盘部分,进度条和统计框小部件的绑定分别变为:
- 进度条的绑定为:`{{ PiData.data.disk_usage_percent ?? 0 }}`
- 三个统计框小部件的绑定分别为:`{{ \${(PiData.data.disk_usage_used/1000000000).toPrecision(2)} ?? 0 }} GB``{{ \${(PiData.data.disk_usage_free/1000000000).toPrecision(2)} ?? 0 }} GB``{{ \${(PiData.data.disk_usage_total/1000000000).toPrecision(2)} ?? 0 }} GB`
这里的图表需要更新你为 CPU 统计信息创建的 `utils` 对象,使用 `storeValue` 键名为 `disk_util_data`,嵌套在 `getLiveData` 下面,其逻辑与 `cpu_util_data` 类似。对于磁盘利用率图表,我们存储的 `disk_util_data` 的逻辑与 CPU 利用率趋势图的逻辑相同。
```
export default {
getLiveData: () => {
//When switch is on:
if (Switch1.isSwitchedOn) {
setInterval(() => {
const cpuUtilData = appsmith.store.cpu_util_data;
const diskUtilData = appsmith.store.disk_util_data;
PiData.run();
storeValue("cpu_util_data", [...cpuUtilData, { x: PiData.data.cpu_percent,y: PiData.data.cpu_percent }]);
storeValue("disk_util_data", [...diskUtilData, { x: PiData.data.disk_usage_percent,y: PiData.data.disk_usage_percent }]);
}, 1500, 'timerId')
} else {
clearInterval('timerId');
}
},
initialOnPageLoad: () => {
storeValue("cpu_util_data", []);
storeValue("disk_util_data", []);
}
}
```
通过使用 `utils` JavaScript 对象在打开和关闭真实数据开关时触发的数据流可视化如下所示:
![切换][22]
在打开实时数据开关时,图表会变成这样:
![显示实时数据][23]
整体上,它既漂亮,又简约,而且非常有用。
### 祝你使用愉快!
当你对 `psutils`、JavaScript 和 Appsmith 更加熟悉时,我相信你会发现可以轻松无限地调整你的仪表板,实现非常酷的功能,例如:
- 查看先前一周、一个月、一个季度、一年或根据你的树莓派数据允许的任何自定义范围的趋势
- 为任何统计数据的阈值违规构建报警机制
- 监控连接到你的树莓派的其他设备
-`psutils` 扩展到另一台安装有 Python 的计算机上
- 使用其他库监控你家庭或办公室的网络
- 监控你的花园
- 跟踪你自己的生活习惯
在下一个令人兴奋的项目中,祝你玩得愉快!
*题图MJ/9754eb1f-1722-4897-9c35-3f20c285c332*
--------------------------------------------------------------------------------
via: https://opensource.com/article/23/3/build-raspberry-pi-dashboard-appsmith
作者:[Keyur Paralkar][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/keyur-paralkar
[b]: https://github.com/lkxed/
[1]: https://github.com/appsmithorg/foundry/tree/main/resources/blogs/Raspberry%20Pi%20Dashboard
[2]: https://www.redhat.com/architect/low-code-platform?intcmp=7013a000002qLH8AAM
[3]: https://psutil.readthedocs.io/en/latest/
[4]: https://flask-restful.readthedocs.io/en/latest/
[5]: https://www.redhat.com/en/topics/api/what-is-a-rest-api?intcmp=7013a000002qLH8AAM
[6]: https://opensource.com/article/20/10/venv-python
[7]: https://flask-restful.readthedocs.io/en/latest/api.html#id1
[8]: https://flask-restful.readthedocs.io/en/latest/api.html#flask_restful.Resource
[9]: https://opensource.com/article/20/9/firewall
[10]: https://theboroer.github.io/localtunnel-www/
[11]: https://opensource.com/sites/default/files/2023-02/dashboard.png
[12]: https://appsmith.com/sign-up
[13]: https://docs.appsmith.com/getting-started/setup
[14]: https://opensource.com/sites/default/files/2023-02/success.webp
[15]: https://docs.appsmith.com/getting-started/start-building
[16]: https://opensource.com/sites/default/files/2023-02/TITLE.webp
[17]: https://opensource.com/sites/default/files/2023-02/property.webp
[18]: https://opensource.com/sites/default/files/2023-02/config.webp
[19]: https://opensource.com/sites/default/files/2023-02/final.webp
[20]: https://docs.appsmith.com/reference/appsmith-framework/widget-actions/intervals-time-events#setinterval
[21]: https://opensource.com/sites/default/files/2023-02/load-on-page.webp
[22]: https://opensource.com/sites/default/files/2023-02/toggle.gif
[23]: https://opensource.com/sites/default/files/2023-02/final.gif
[0]: https://img.linux.net.cn/data/attachment/album/202307/10/102705vfe3pb0wbqnf0see.jpg

View File

@@ -0,0 +1,254 @@
[#]: subject: "How the GDB debugger and other tools use call frame information to determine the active function calls"
[#]: via: "https://opensource.com/article/23/3/gdb-debugger-call-frame-active-function-calls"
[#]: author: "Will Cohen https://opensource.com/users/wcohen"
[#]: collector: "lkxed"
[#]: translator: "jrglinux"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16033-1.html"
GDB 调试器如何通过调用帧信息来确定函数调用关系
======
![][0]
> 从调试器中获取函数调用关系。
在我的 [上一篇文章][1] 中,我展示了如何使用 `debuginfo` 在当前指令指针IP和包含它的函数或行之间进行映射。该信息对于显示 CPU 当前正在执行的代码很有帮助。不过,如果能显示更多的有关当前函数调用栈及其正在执行语句的上下文对我们定位问题来说也是十分有助的。
例如,将空指针作为参数传递到函数中而导致非法内存访问的问题,只需查看当前执行函数行,即可发现该错误是由尝试通过空指针进行访问而触发的。但是,你真正想知道的是导致空指针访问的函数调用的完整上下文,以便确定该空指针最初是如何传递到该函数中的。此上下文信息由回溯提供,可以让你确定哪些函数可能对空指针参数负责。
有一点是肯定的:确定当前活动的函数调用栈不是一项简单的操作。
### 函数激活记录
现代编程语言具有局部变量,并允许函数可以调用自身的递归。此外,并发程序具有多个线程,这些线程可能同时运行相同的函数。在这些情况下,局部变量不能存储在全局位置。对于函数的每次调用,局部变量的位置必须是唯一的。它的工作原理如下:
- 每次调用函数时,编译器都会生成函数激活记录,以将局部变量存储在唯一位置。
- 为了提高效率,处理器堆栈用于存储函数激活记录。
- 当函数被调用时,会在处理器堆栈的顶部为该函数创建一条新的函数激活记录。
- 如果该函数调用另一个函数,则新的函数激活记录将放置在现有函数激活记录之上。
- 每次函数返回时,其函数激活记录都会从堆栈中删除。
函数激活记录的创建是由函数中称为“<ruby>序言<rt>prologue</rt></ruby>”的代码创建的。函数激活记录的删除由函数“<ruby>尾声<rt>epilogue</rt></ruby>”处理。函数体可以利用堆栈上为其预留的内存来存储临时值和局部变量。
函数激活记录的大小可以是可变的。对于某些函数,不需要空间来存储局部变量。理想情况下,函数激活记录只需要存储调用 __ 函数的函数的返回地址。对于其他函数,除了返回地址之外,可能还需要大量空间来存储函数的本地数据结构。帧大小的可变导致编译器使用帧指针来跟踪函数激活帧的开始。函数序言代码具有在为当前函数创建新帧指针之前存储旧帧指针的额外任务,并且函数尾声必须恢复旧帧指针值。
函数激活记录的布局方式、调用函数的返回地址和旧帧指针是相对于当前帧指针的恒定偏移量。通过旧的帧指针,可以定位堆栈上下一个函数的激活帧。重复此过程,直到检查完所有函数激活记录为止。
### 优化复杂性
在代码中使用显式帧指针有几个缺点。在某些处理器上,可用的寄存器相对较少。具有显式帧指针会导致使用更多内存操作。生成的代码速度较慢,因为帧指针必须位于寄存器中。具有显式帧指针可能会限制编译器可以生成的代码,因为编译器可能不会将函数序言和尾声代码与函数体混合。
编译器的目标是尽可能生成快速代码,因此编译器通常会从生成的代码中省略帧指针。正如 [Phoronix 的基准测试][2] 所示,保留帧指针会显着降低性能。不过省略帧指针也有缺点,查找前一个调用函数的激活帧和返回地址不再是相对于帧指针的简单偏移。
### 调用帧信息
为了帮助生成函数回溯,编译器包含 DWARF 调用帧信息CFI来重建帧指针并查找返回地址。此补充信息存储在执行的 `.eh_frame` 部分中。与传统的函数和行位置信息的 `debuginfo` 不同,即使生成的可执行文件没有调试信息,或者调试信息已从文件中删除,`.eh_frame` 部分也位于可执行文件中。 调用帧信息对于 C++ 中的 `throw-catch` 等语言结构的操作至关重要。
CFI 的每个功能都有一个帧描述条目FDE。作为其步骤之一回溯生成过程为当前正在检查的激活帧找到适当的 FDE。将 FDE 视为一张表,每一行代表一个或多个指令,并具有以下列:
- 规范帧地址CFA帧指针指向的位置
- 返回地址
- 有关其他寄存器的信息
FDE 的编码旨在最大限度地减少所需的空间量。FDE 描述了行之间的变化,而不是完全指定每一行。为了进一步压缩数据,多个 FDE 共有的起始信息被分解出来并放置在通用信息条目CIE中。 这使得 FDE 更加紧凑,但也需要更多的工作来计算实际的 CFA 并找到返回地址位置。该工具必须从未初始化状态启动。它逐步遍历 CIE 中的条目以获取函数条目的初始状态,然后从 FDE 的第一个条目开始继续处理 FDE并处理操作直到到达覆盖当前正在分析的指令指针的行。
### 调用帧信息使用实例
从一个简单的示例开始,其中包含将华氏温度转换为摄氏度的函数。 内联函数在 CFI 中没有条目,因此 `f2c` 函数的 `__attribute__((noinline))` 确保编译器将 `f2c` 保留为真实函数。
```
#include <stdio.h>
int __attribute__ ((noinline)) f2c(int f)
{
int c;
printf("converting\n");
c = (f-32.0) * 5.0 /9.0;
return c;
}
int main (int argc, char *argv[])
{
int f;
scanf("%d", &f);
printf ("%d Fahrenheit = %d Celsius\n",
f, f2c(f));
return 0;
}
```
编译代码:
```
$ gcc -O2 -g -o f2c f2c.c
```
`.eh_frame` 部分展示如下:
```
$ eu-readelf -S f2c |grep eh_frame
[17] .eh_frame_hdr PROGBITS 0000000000402058 00002058 00000034 0 A 0 0 4
[18] .eh_frame PROGBITS 0000000000402090 00002090 000000a0 0 A 0 0 8
```
我们可以通过以下方式获取 CFI 信息:
```
$ readelf --debug-dump=frames f2c > f2c.cfi
```
生成 `f2c` 可执行文件的反汇编代码,这样你可以查找 `f2c``main` 函数:
```
$ objdump -d f2c > f2c.dis
```
`f2c.dis` 中找到以下信息来看看 `f2c``main` 函数的执行位置:
```
0000000000401060 <main>:
0000000000401190 <f2c>:
```
在许多情况下,二进制文件中的所有函数在执行函数的第一条指令之前都使用相同的 CIE 来定义初始条件。 在此示例中, `f2c``main` 都使用以下 CIE
```
00000000 0000000000000014 00000000 CIE
Version: 1
Augmentation: "zR"
Code alignment factor: 1
Data alignment factor: -8
Return address column: 16
Augmentation data: 1b
DW_CFA_def_cfa: r7 (rsp) ofs 8
DW_CFA_offset: r16 (rip) at cfa-8
DW_CFA_nop
DW_CFA_nop
```
本示例中,不必担心增强或增强数据条目。由于 x86_64 处理器具有 1 到 15 字节大小的可变长度指令,因此 “代码对齐因子” 设置为 1。在只有 32 位4 字节指令)的处理器上,“代码对齐因子” 设置为 4并且允许对一行状态信息适用的字节数进行更紧凑的编码。类似地还有 “数据对齐因子” 来使 CFA 所在位置的调整更加紧凑。在 x86_64 上,堆栈槽的大小为 8 个字节。
虚拟表中保存返回地址的列是 16。这在 CIE 尾部的指令中使用。 有四个 `DW_CFA` 指令。第一条指令 `DW_CFA_def_cfa` 描述了如果代码具有帧指针如何计算帧指针将指向的规范帧地址CFA。 在这种情况下CFA 是根据 `r7 (rsp)``CFA=rsp+8` 计算的。
第二条指令 `DW_CFA_offset` 定义从哪里获取返回地址 `CFA-8` 。在这种情况下,返回地址当前由堆栈指针 `(rsp+8)-8` 指向。CFA 从堆栈返回地址的正上方开始。
CIE 末尾的 `DW_CFA_nop` 进行填充以保持 DWARF 信息的对齐。 FDE 还可以在末尾添加填充以进行对齐。
`f2c.cfi` 中找到 `main` 的 FDE它涵盖了从 `0x40160` 到(但不包括)`0x401097``main` 函数:
```
00000084 0000000000000014 00000088 FDE cie=00000000 pc=0000000000401060..0000000000401097
DW_CFA_advance_loc: 4 to 0000000000401064
DW_CFA_def_cfa_offset: 32
DW_CFA_advance_loc: 50 to 0000000000401096
DW_CFA_def_cfa_offset: 8
DW_CFA_nop
```
在执行函数中的第一条指令之前CIE 描述调用帧状态。然而,当处理器执行函数中的指令时,细节将会改变。 首先,指令 `DW_CFA_advance_loc``DW_CFA_def_cfa_offset``main``401060` 处的第一条指令匹配。 这会将堆栈指针向下调整 `0x18`24 个字节)。 CFA 没有改变位置,但堆栈指针改变了,因此 CFA 在 `401064` 处的正确计算是 `rsp+32`。 这就是这段代码中序言指令的范围。 以下是 `main` 中的前几条指令:
```
0000000000401060 <main>:
401060: 48 83 ec 18 sub $0x18,%rsp
401064: bf 1b 20 40 00 mov $0x40201b,%edi
```
`DW_CFA_advance_loc` 使当前行应用于函数中接下来的 50 个字节的代码,直到 `401096`。CFA 位于 `rsp+32`,直到 `401092` 处的堆栈调整指令完成执行。`DW_CFA_def_cfa_offset` 将 CFA 的计算更新为与函数入口相同。这是预期之中的,因为 `401096` 处的下一条指令是返回指令 `ret`,并将返回值从堆栈中弹出。
```
401090: 31 c0 xor %eax,%eax
401092: 48 83 c4 18 add $0x18,%rsp
401096: c3 ret
```
`f2c` 函数的 FDE 使用与 `main` 函数相同的 CIE并覆盖 `0x41190``0x4011c3` 的范围:
```
00000068 0000000000000018 0000006c FDE cie=00000000 pc=0000000000401190..00000000004011c3
DW_CFA_advance_loc: 1 to 0000000000401191
DW_CFA_def_cfa_offset: 16
DW_CFA_offset: r3 (rbx) at cfa-16
DW_CFA_advance_loc: 29 to 00000000004011ae
DW_CFA_def_cfa_offset: 8
DW_CFA_nop
DW_CFA_nop
DW_CFA_nop
```
可执行文件中 `f2c` 函数的 `objdump` 输出:
```
0000000000401190 <f2c>:
401190: 53 push %rbx
401191: 89 fb mov %edi,%ebx
401193: bf 10 20 40 00 mov $0x402010,%edi
401198: e8 93 fe ff ff call 401030 <puts@plt>
40119d: 66 0f ef c0 pxor %xmm0,%xmm0
4011a1: f2 0f 2a c3 cvtsi2sd %ebx,%xmm0
4011a5: f2 0f 5c 05 93 0e 00 subsd 0xe93(%rip),%xmm0 # 402040 <__dso_handle+0x38>
4011ac: 00
4011ad: 5b pop %rbx
4011ae: f2 0f 59 05 92 0e 00 mulsd 0xe92(%rip),%xmm0 # 402048 <__dso_handle+0x40>
4011b5: 00
4011b6: f2 0f 5e 05 92 0e 00 divsd 0xe92(%rip),%xmm0 # 402050 <__dso_handle+0x48>
4011bd: 00
4011be: f2 0f 2c c0 cvttsd2si %xmm0,%eax
4011c2: c3 ret
```
`f2c` 的 FDE 中,函数开头有一个带有 `DW_CFA_advance_loc` 的单字节指令。在高级操作之后,还有两个附加操作。`DW_CFA_def_cfa_offset` 将 CFA 更改为 `%rsp+16``DW_CFA_offset` 表示 `%rbx` 中的初始值现在位于 `CFA-16`(堆栈顶部)。
查看这个 `fc2` 反汇编代码,可以看到 `push` 用于将 `%rbx` 保存到堆栈中。 在代码生成中省略帧指针的优点之一是可以使用 `push``pop` 等紧凑指令在堆栈中存储和检索值。 在这种情况下,保存 `%rbx` 是因为 `%rbx` 用于向 `printf` 函数传递参数(实际上转换为 `puts` 调用),但需要保存传递到函数中的 `f` 初始值以供后面的计算使用。`4011ae``DW_CFA_advance_loc` 29字节显示了 `pop %rbx` 之后的下一个状态变化,它恢复了 `%rbx` 的原始值。 `DW_CFA_def_cfa_offset` 指出 pop 将 CFA 更改为 `%rsp+8`
### GDB 使用调用帧信息
有了 CFI 信息,[GNU 调试器GDB][3] 和其他工具就可以生成准确的回溯。如果没有 CFI 信息GDB 将很难找到返回地址。如果在 `f2c.c` 的第 7 行设置断点,可以看到 GDB 使用此信息。GDB在 `f2c` 函数中的 `pop %rbx` 完成且返回值不在栈顶之前放置了断点。
GDB 能够展开堆栈,并且作为额外收获还能够获取当前保存在堆栈上的参数 `f`
```
$ gdb f2c
[...]
(gdb) break f2c.c:7
Breakpoint 1 at 0x40119d: file f2c.c, line 7.
(gdb) run
Starting program: /home/wcohen/present/202207youarehere/f2c
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
98
converting
Breakpoint 1, f2c (f=98) at f2c.c:8
8 return c;
(gdb) where
#0 f2c (f=98) at f2c.c:8
#1 0x000000000040107e in main (argc=<optimized out>, argv=<optimized out>)
at f2c.c:15
```
### 调用帧信息
DWARF 调用帧信息为编译器提供了一种灵活的方式来包含用于准确展开堆栈的信息。这使得可以确定当前活动的函数调用。我在本文中提供了简要介绍,但有关 DWARF 如何实现此机制的更多详细信息,请参阅 [DWARF 规范][4]。
*题图MJ/4004d7c7-8407-40bd-8aa8-92404601dba0*
--------------------------------------------------------------------------------
via: https://opensource.com/article/23/3/gdb-debugger-call-frame-active-function-calls
作者:[Will Cohen][a]
选题:[lkxed][b]
译者:[jrglinux](https://github.com/jrglinux)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/wcohen
[b]: https://github.com/lkxed/
[1]: https://opensource.com/article/23/2/compiler-optimization-debugger-line-information
[2]: https://www.phoronix.com/review/fedora-frame-pointer
[3]: https://opensource.com/article/21/3/debug-code-gdb
[4]: https://dwarfstd.org/Download.php
[0]: https://img.linux.net.cn/data/attachment/album/202307/26/062542j0picgf1fs6nd8qn.jpg

View File

@@ -0,0 +1,91 @@
[#]: subject: "5 of the most curious uses of the Raspberry Pi"
[#]: via: "https://opensource.com/article/23/3/most-curious-uses-raspberry-pi"
[#]: author: "AmyJune Hineline https://opensource.com/users/amyjune"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15970-1.html"
树莓派的五种最奇特的用途
======
![][0]
> 人们使用树莓派做各种各样的事情。有哪些用途让你特别好奇的吗?
最近,我在一个电话会议上听到有人说开源社区是好奇心和解决问题的文化的结合。好奇心是我们解决问题的基础。在解决各种规模的问题时,我们使用了大量的开源工具,其中包括在功能极为方便的树莓派上运行的 [Linux][1]。
我们每个人都有各种不同的生活经历,所以我向我们的作者社区询问了他们所遇到的最奇特的树莓派用途。我有一种预感,这些令人惊奇的构建将会为其他人激发灵感。
### 使用树莓派进行实验
对我来说,树莓派是在家庭网络中增加额外开发资源的绝佳工具。如果我想要创建一个新的网站或者尝试一个新的软件工具,我不必让我的桌面 Linux 机器因为一堆我可能只在实验时使用一次的软件包而变得笨重。相反,我会将它设置在我的树莓派上。
如果我认为我将要做一些冒险的事情,我会使用备份的启动环境。我有两张 microSD 卡,这样我就可以在树莓派上插一张卡,同时设置第二张卡进行任何我想要的实验。额外的 microSD 卡成本并不高,但在我想要在第二个镜像上进行实验的时候,它能节省大量时间。只需关机,换下 microSD 卡,重新启动,立即就可以在专用的测试系统上工作。
当我不进行实验时,我的树莓派充当打印服务器,将我的非 WiFi 打印机连接到家庭网络上。它还是一个方便的 SSH 文件服务器,让我可以快速备份重要文件。
— [Jim Hall][3]
### 树莓派的流行
我见过的树莓派最令人惊讶的事情是它使小型单板计算机的概念变得流行和通俗化,并使其真正实用于大众。
在树莓派出现之前,我们有类似的小型单板计算机,但它们往往是小众的、昂贵的,并且从软件角度来看让人拒之千里。树莓派价格便宜,便宜到任何人都可以轻松为一个项目获得一台(不考虑目前难以获得的情况)。一旦它变得便宜,人们就会克服软件挑战,使其足够好以解决许多基本的计算任务,甚至可以将完整的真正的计算机用于特定任务,而不仅仅是微控制器。
我们拥有大量好的、相对廉价的小型单板计算机,这促进了各种调试、玩耍和 [实验][4]。人们愿意尝试新的想法,甚至推动了更多业余爱好者的硬件开发来支持这些想法。
老实说,这是我从树莓派看到的最令人惊奇和激进的事情:它根本性地改变了人们对计算的认知,尤其是树莓派擅长的领域,并不仅仅催生了自己的生态系统,现在还催生了无数其他多样化的生态系统。
— [John Warthog9' Hawley][5]
### 蜜蜂的树莓派
在 2018 年,我和我的弟弟曾经养过几个蜂箱,并使用树莓派和各种传感器来监测蜂箱的温度和湿度。我们还计划在夏天实施蜂箱秤,以观察蜜蜂的产蜜情况,并在冬天测量重量,以查看蜜蜂是否有足够的食物。不过我们最终没有实施这个计划。
我们的小型监测解决方案基于树莓派 2B运行 Raspbian Stretch基于 Debian 9并连接了一个温湿度传感器DHT11。在蜂箱内我们有三到四个这样的传感器用于测量蜂箱入口孔、盖子下方和最低框架的温度。我们直接将传感器连接到树莓派并使用 Python_DHT 传感器库读取数据。我们还建立了 [InfluxDB][6]、Telegraf并最终设置了 [Grafana][7] 来可视化数据。
如果你想了解更多关于我们的设置的信息,我们在 [Linux Magazine][8] 上发表了一篇关于我们小型监测解决方案的文章。
— [Heike Jurzik][9]
### 树莓派的复古计算
我希望用树莓派创建一个模拟如何使用“开关和指示灯”将机器语言编程到旧式计算机的项目。使用树莓派的 GPIO 引脚,这看起来相当简单。例如,他们的在线手册上展示了如何使用 GPIO 开关控制 LED 的开关,或者使用按钮进行输入。我认为只需一些 LED 和开关,再加上在树莓派上运行的小程序,就可以模拟旧式计算机。不过,我缺乏空闲时间来从事这样的项目,这就是为什么我编写了 [Toy CPU][10] 来模拟它。
— [Jim Hall][3]
### 使用树莓派打造玩具
当我女儿四岁的时候,她要求圣诞节时给她买一个“巨齿鲨音乐盒”。她能在脑海中完美地想像出来。它会是粉红色的、闪闪发光的,上面有她的名字。当她打开盒子时,会播放这部热门电影的主题曲。她可以将巨齿鲨和其他宝贝都放在盒子里。在网上和商店里到处搜索后,我发现没有一个能与她的想象相媲美。于是我和丈夫决定,在我们自己的玩具店(也就是他的家庭办公室)自己动手制作一个。而这一切的核心当然是树莓派。他使用光传感器和 Python 脚本,让音乐在恰当的时刻播放。我们将科技设备谨慎地放置在音乐盒的底部,并根据她的审美进行装饰。那一年,开源技术让圣诞魔法成为了可能!
— [Lauren Pritchett][11]
*题图MJ/aa8f1412-0f1d-4780-99db-22d6522010b7*
--------------------------------------------------------------------------------
via: https://opensource.com/article/23/3/most-curious-uses-raspberry-pi
作者:[AmyJune Hineline][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/amyjune
[b]: https://github.com/lkxed/
[1]: https://opensource.com/article/19/3/learn-linux-raspberry-pi
[2]: https://opensource.com/article/22/3/run-drupal-raspberry-pi
[3]: https://opensource.com/users/jim-hall
[4]: https://opensource.com/article/20/8/kubernetes-raspberry-pi
[5]: https://opensource.com/users/warthog9
[6]: https://opensource.com/article/17/8/influxdb-time-series-database-stack
[7]: https://opensource.com/article/21/3/raspberry-pi-grafana-cloud
[8]: https://www.linux-magazine.com/index.php/layout/set/print/Issues/2018/214/Monitoring-Beehives
[9]: https://opensource.com/users/hej
[10]: https://opensource.com/article/23/1/learn-machine-language-retro-computer
[11]: https://opensource.com/users/lauren-pritchett
[0]: https://img.linux.net.cn/data/attachment/album/202307/05/165343at95f5gf954lfll6.jpg

View File

@@ -0,0 +1,224 @@
[#]: subject: "Linux Terminal Basics #7: Copy Files and Directories in Linux"
[#]: via: "https://itsfoss.com/copy-files-directory-linux/"
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16053-1.html"
终端基础:在 Linux 中复制文件和目录
======
![][0]
> 在终端基础知识系列的这一部分中,学习如何在 Linux 中使用命令行复制文件和目录。
复制文件是你经常执行的最基本但最重要的任务之一。
Linux 有一个专门的 `cp` 命令用于复制文件和目录(文件夹)。
在终端基础知识系列的这一部分中,你将学习在终端中复制文件和文件夹。
> 📋 回想一下,以下是你迄今为止在本终端基础知识系列中所学到的内容:
> - [更改目录][2]
> - [创建新目录][3]
> - [列出目录内容][4]
> - [创建文件][5]
> - [读取文件][6]
> - [删除文件和目录][7]
让我们继续该系列的第七章。
### 在 Linux 命令行中复制文件
让我向你展示一些复制文件的示例。
#### 将文件复制到另一个目录
要将一个文件复制到另一目录,你所要做的就是遵循给定的命令语法:
```
cp 源文件 目标目录
```
例如,在这里,我将名为 `Hello.txt` 的文件复制到名为 `Tux` 的目录中:
![copy file to another directory in linux command line][8]
正如你所看到的,文件已成功复制到 `Tux` 目录中。
#### 复制文件但重命名
你可以选择在复制文件时重命名该文件。只需为“目标文件”指定一个不同的名称即可。
```
cp 源文件 改名的文件
```
作为参考,在这里,我将名为 `Hello.txt` 的文件复制到同一目录,并将其重命名为 `Renamed_Hello.txt`
![rename a file while copying in a same directory in linux terminal][9]
为什么要这么做? 比如说,你必须编辑配置文件。一个好的做法是在编辑配置文件之前在同一位置对其进行备份。这样,如果事情没有按计划进行,你可以恢复到旧配置。
#### 将多个文件复制到另一个位置
要将多个文件复制到另一个目录,请按以下方式执行命令:
```
cp File1 File2 File3 FileN Target_directory
```
在这里,我将多个文件复制到新位置。
![copy multiple files using the cp command in linux][10]
> 📋 当你复制多个文件时,仅使用 `cp` 命令无法重命名它们。
#### 复制时处理重复文件
默认情况下,如果目标目录中存在同名文件,`cp` 命令将覆盖该文件。
为了避免覆盖,你可以在 cp 命令中使用 `-n` 选项,它不会覆盖现有文件:
```
cp -n 源文件 目标目录
```
例如,在这里,我尝试复制目标目录中已有的两个文件,并使用 `-v` 选项来展示该命令正在执行的操作:
```
cp -n -v itsFOSS.txt LHB.txt LU.txt ~/Tux
```
![how not to override files while copying in linux using the cp command][11]
#### 交互式复制文件
但是,当你想要覆盖某些文件,而某些文件应该保持不变时该怎么办?
好吧,你可以使用 `-i` 选项在交互模式下使用 `cp` 命令,它每次都会询问你是否应该覆盖该文件:
```
cp -i 源文件 目标目录
```
![how to use cp command in interactive mode][12]
> 🖥️ 自己练习上述所有示例。你已经了解如何创建文件和文件夹,因此请重新创建所有内容。
### 在 Linux 命令行中复制目录
`mkdir` 命令用于创建新目录,`rmdir` 命令用于删除(空)目录。但没有用于复制目录的 `cpdir` 命令。
你必须使用相同的 `cp` 命令,但使用递归选项 `-r` 将目录及其所有内容复制到另一个位置:
```
cp -r 源目录 目标目录
```
例如,在这里,我将名为 `IF` 的目录复制到 `LHB`
![how to copy a directory in linux command line][13]
但它复制了整个目录。🤨
那么,当你只想复制目录内容而不是目录本身时该怎么办?
你可以执行以下操作:
#### 仅复制目录的内容(不是目录)
要仅复制目录的内容,而不复制目录本身,请在源目录名称的末尾附加 `/.`
```
cp -r 源目录/. 目标目录
```
在这里,我想复制名为 `IF` 的目录的内容,其中包含以下三个文件:
![check the file contents of directory using the tree command][14]
我将执行以下命令将 `IF` 目录的文件内容复制到 `LHB`
```
cp -r IF/. LHB
```
![copy the file contents of directory not a directory itself in linux command line][15]
你还可以在此处使用 `源目录/*`
#### 复制多个目录
要复制多个目录,你必须按以下方式执行命令:
```
cp -r 目录1 目录2 目录3 目录N 目标目录
```
例如,在这里,我将两个名为 `IF``LU` 的目录复制到 `LHB`
```
cp -r IF LU ~/LHB
```
![copy multiple directories using the cp command in linux command line][16]
当你想要从多个目录复制文件但不复制目录本身时,你可以执行相同的操作:
```
cp -r 目录1/. 目录2/. 目录3/. 目录N/. 目标目录
```
![copy files from multiple directories but not directories their self using the cp command][17]
> 🖥️ 你还可以像重命名文件一样重命名目录。
### 测试你的知识
现在,让我们看看你对到目前为止所学到的知识还记得多少。
- 创建一个名为 `copy_practice` 的目录。
- 将文件 `/etc/services` 复制到这个新创建的文件夹。
- 在此目录下创建一个名为 `secrets` 的文件夹,并将文件 `/etc/passwd``/etc/services` 复制到其中。
-`copy_practice` 中的 `services` 文件复制到 `secrets` 文件夹中,但不要覆盖它。
-`secrets` 文件夹复制到你的主目录。
- 删除 `secrets``copy_practice` 目录。
这会给你一些练习。
到目前为止进展顺利。你已经学到了很多东西。在下一章中,你将了解如何使用 `mv` 命令移动文件和文件夹。
--------------------------------------------------------------------------------
via: https://itsfoss.com/copy-files-directory-linux/
作者:[Sagar Sharma][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/sagar/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp
[2]: https://itsfoss.com/change-directories/
[3]: https://linux.cn/article-15595-1.html
[4]: https://itsfoss.com/list-directory-content/
[5]: https://linux.cn/article-15643-1.html
[6]: https://itsfoss.com/view-file-contents/
[7]: https://linux.cn/article-15809-1.html
[8]: https://itsfoss.com/content/images/2023/02/copy-file-to-another-directory-in-linux-command-line.png
[9]: https://itsfoss.com/content/images/2023/02/rename-a-file-while-copying-in-a-same-directory-in-linux-terminal.png
[10]: https://itsfoss.com/content/images/2023/02/copy-multiple-files-using-the-cp-command-in-linux.png
[11]: https://itsfoss.com/content/images/2023/02/how-not-to-override-files-while-copying-in-linux-using-the-cp-command.png
[12]: https://itsfoss.com/content/images/2023/02/how-to-use-cp-command-in-interactive-mode.png
[13]: https://itsfoss.com/content/images/2023/02/how-to-copy-a-directory-in-linux-command-line.png
[14]: https://itsfoss.com/content/images/2023/02/check-the-file-contents-of-directory-using-the-tree-command.png
[15]: https://itsfoss.com/content/images/2023/02/copy-the-file-contents-of-directory-not-a-directory-itself-in-linux-command-line.png
[16]: https://itsfoss.com/content/images/2023/02/copy-multiple-directories-using-the-cp-command-in-linux-command-line.png
[17]: https://itsfoss.com/content/images/2023/02/copy-files-from-multiple-directories-but-not-directories-their-self-using-the-cp-command.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/31/220802ozpf3gt9gpj2pp0f.jpg

View File

@@ -0,0 +1,317 @@
[#]: subject: "Run a virtual conference using only open source tools"
[#]: via: "https://opensource.com/article/23/4/open-source-tools-virtual-conference"
[#]: author: "Máirín Duffy https://opensource.com/users/mairin"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16046-1.html"
使用开源工具来举办线上大会
======
![][0]
> 下面是使用开源工具来举办一场线上活动的方法。
在 2023 年 1 月举办了首届 <ruby>[创意自由峰会][2]<rt>Creative Freedom Summit</rt></ruby> 后,[Fedora 设计团队][1] 发现使用开源工具来举办线上大会非常有效。
在本文中,我将分享一些关于这场大会的背景信息,为什么对我们来说使用开源工具来举办大会很重要,以及为实现这一目标我们的团队所使用的具体工具和配置。我还会谈谈哪些工作做的很好,在以及我们 2024 年下一届峰会中需要改进的地方。
### 创意自由峰会
创意自由峰会是 Marie Nordin 在审查了 [Fedora 用户与贡献者年度大会Flock][3] 的演讲提交后提出的一个想法。在 2022 年 8 月的 Flock 大会上,她收到了大量与开源设计和创意相关的演讲提交,远远超出我们能够接受的数量。由于存在许多关于开源设计的优秀想法,她想知道是否有机会举办一个独立的开源创意大会,专门面向在创作中使用开源工具的创意人士。
Marie 在 2022 年秋季向 Fedora 设计团队提出了这个想法,我们开始筹划这个会议,会议于 2023 年 1 月 17 日至 19 日举行。由于这是我们第一次举办这样一场新的会议,我们决定首先基于 Flock 提交的演讲和我们自己的开源创意人士网络,邀请其中一些人士担任演讲嘉宾。几乎每位我们邀请的演讲者都答应演讲,所以我们没有接受其他人的提交。明年我们需要找到更好的解决办法,所以目前我们还没有开源的投稿管理工具可供介绍。
### 在开源大会中使用开源工具
自从最初的大流行封锁以来Fedora 的 Flock 大会一直使用 Hopin 虚拟平台在线举办,尽管 Hopin 不是开源的但对开源工具很友好。Fedora 几年前开始使用 Hopin它确实提供了专业的会议体验包括内置的赞助商展位/博览厅、分会场、大厅聊天对话和管理工具。通过 Hopin 来举办创意自由峰会对我们来说可行,因为作为 Fedora 赞助的活动,我们可以使用 Fedora 的 Hopin 环境。再次强调Hopin 不是开源的。
作为一个长期(约 20 年)的开源贡献者,我可以告诉你,做出这样的决定总是很困难的。如果你的大会专注于开源,使用专有平台来举办你的活动可能会有些奇怪。然而,随着我们社区和活动的规模和复杂性不断增长,开发一个集成的开源会议系统变得更具挑战性。
并不存在正确或错误的答案。在做出这个决定时,你必须权衡很多因素:
- 预算
- 人力资源
- 基础设施
- 技术能力
- 活动的复杂性/正式性/文化
我们没有为这次活动安排任何预算。我们有一支志愿者团队可以投入一些工作时间。我们有 Fedora Matrix 服务器作为可以加入的支持基础设施,并且有一个托管的 WordPress 系统用于网站。我和队友 Madeline Peck 在举办每周的 Fedora 设计团队的 [视频会议][4] 方面具有一定的技术能力和经验。我们希望这次活动是低调、单一会场和非正式的,所以对于一些小故障或瑕疵我们有一定的容忍度。我们对尝试使用开源工具组合也有很大的热情。
现在你了解了我们在做出这个决定时的一些考虑因素,这可能有助于你在为自己的活动做决策时参考。
### 一个开源会议技术栈
以下是会议技术栈的工作方式。
#### 概述
直播组件:
- **直播流**: 我们通过 PeerTube 频道将主舞台和社交活动进行实时直播。会议参与者可以从我们的 PeerTube 频道观看直播。PeerTube 提供了一些注重隐私的分析功能,可以跟踪直播观众和活动后观看次数。
- **直播舞台 + 社交活动房间**: 我们设有一个用于演讲者和主持人的直播舞台,使用 Jitsi 确保只有有权限的人可以上镜。我们额外设有一个 Jitsi 会议室,用于社交活动,允许任何希望参与社交活动的人上镜。
- **后台**: 我们有一个名为“后台”的 Matrix 频道,用于在活动期间与演讲者、主持人和志愿者协调工作。
- **公告和问答**: 我们通过共享的 Etherpad后来转移到 Hackmd.io来管理问答和每日议程。
- **集成和集中化的会议体验**: 使用 Matrix 的 Element 客户端,我们将直播视频和 Etherpad 嵌入到一个公共的 Matrix 频道中,供会议使用。我们根据频道中的参与人数来监控整体会议出席情况。我们在整个会议期间设有实时聊天,并从聊天和嵌入的用于问答的 Etherpad 中接受观众提问。
- **会议网站**: 我们有一个由 Ryan Gorley 设计精美的网站,托管在 WordPress 上,网站提供了基本信息和链接,包括如何参加会议、日期/时间和议程。
活动后组件:
- **活动后调查**: 我们使用开源的 LimeSurvey 系统向参会者发送了一份活动后的调查,以了解他们的参会体验。我在这篇文章中使用了该调查的一些数据。
- **活动后的视频编辑和字幕**: 我们的会议没有实时字幕系统,但在我能做到的情况下,我在频道中即时记录了演讲的笔记,与会者对此表示非常感激。活动后,我们使用了 Kdenlive活动中演讲中展示的工具之一来编辑视频并生成字幕。
- **活动录像**: PeerTube 会自动将直播录像发布到频道,从而使参会者可以看到他们可能错过的演讲的几乎即时录像。
接下来,我将介绍一些细节。
### 使用 PeerTube 进行直播
![创意自由峰会的 PeerTube 频道截图,显示了标志、事件描述和一组视频缩略图][5]
我们在创意自由峰会的直播中使用了由 [LinuxRocks.online][7] 慷慨提供的 [LinuxRocks PeerTube 平台][6]。PeerTube 是一个自由开源的去中心化视频平台,也是 <ruby>联邦宇宙<rt>Fediverse</rt></ruby> 的一部分。
PeerTube 最好的特点之一(我所了解的其他平台所没有的)是,在直播结束后,你会在 PeerTube 上的频道上获得一个几乎即时的重播录像。我们的聊天室用户将这视为该平台的主要优点。如果某位参与者错过了他们非常感兴趣的一个会议他们可以在该演讲结束后的几分钟内观看到它。这不需要志愿者组织团队进行手动干预、上传或协调PeerTube 会自动完成。
以下是使用 PeerTube 进行直播的工作方式:你在频道上创建一个新的直播流,它会给你一个直播流 URL 和一个用于授权流媒体的密钥。这个 URL 和密钥可以反复使用。我们进行配置,使得录像会在直播结束后立即发布到我们创建直播流 URL 的频道上。接下来,在开始直播时将 URL 和密钥复制/粘贴到 Jitsi 中。这意味着你不必为会议期间的每个演讲生成新的 URL 和密钥,组织者管理这些将会带来相当大的工作量。相反,我们可以重复使用相同的 URL 和密钥,将其共享在会议组织者之间的共同文档中(我们每个人都有不同的演讲托管时间段)。团队中任何具有该文档访问权限的人都可以启动直播。
#### 如何生成 PeerTube 中的直播流 URL 和密钥
以下部分逐步介绍了如何在 PeerTube 中生成直播流的 URL 和密钥。
##### 1、创建 PeerTube 上的直播视频
登录到 PeerTube并点击右上角的 “<ruby>发布<rt>Publish</rt></ruby>” 按钮:
![PeerTube 发布按钮的截图][8]
##### 2、设置选项
点击 “<ruby>进行直播<rt>Go live</rt></ruby>” 选项卡(从左数第四个),并设置以下选项:
- <ruby>频道<rt>Channel</rt></ruby>:(你希望直播发布在的频道名称)
- <ruby>隐私<rt>Privacy</rt></ruby>:公开
- 单选按钮:<ruby>普通直播<rt>Normal live</rt></ruby>
然后选择 “<ruby>进行直播<rt>Go live</rt></ruby>” 。 (不用担心,你还不会真正开始直播,还有更多数据需要填写。)
![PeerTube 中的 Go Live 按钮的截图][9]
##### 3. 基本信息(暂时不要点击更新按钮)
首先,在 <ruby>基本信息<rt>Basic info</rt></ruby> 选项卡中填写信息,然后在下一步选择 <ruby>高级设置<rt>Advanced settings</rt></ruby> 选项卡。填写直播流的名称、描述、标签、类别、许可证等。在转码复选框启用后记得发布。
这样一来,一旦直播结束,录制视频将自动发布到你的频道上。
##### 4. 高级设置
你可以上传一个“待机”图像,当观看直播流 URL 并等待开始时,该图像会显示在所有人面前。
![PeerTube 高级设置的截图][10]
这是我们在创意自由峰会上使用的待机图像:
![创意自由峰会横幅的截图][11]
##### 5. 在 PeerTube 上开始直播
选择右下角的 “<ruby>更新<rt>Update” 按钮。直播流将显示如下,直到你从 Jitsi 开始直播:
![在 PeerTube 上开始直播的截图][12]
##### 6. 将直播流的 URL 复制粘贴到 Jitsi
这是 PeerTube 的最后一步。一旦直播流启动,点击视频下方右侧的 “...” 图标:
![复制并粘贴 URL][13]
选择 “<ruby>显示直播信息<rt>Display live information</rt></ruby>”。你将看到如下对话框:
![显示直播信息选项的截图][14]
你需要复制直播的 RTMP URL 和直播流密钥。将它们合并成一个 URL然后将其复制粘贴到 Jitsi。
以下是我测试运行时的这两个文本块示例,可供复制:
- 直播的 RTMP URL`rtmp://peertube.linuxrocks.online:1935/live`
- 直播流密钥:`8b940f96-c46d-46aa-81a0-701de3c43c8f`
你需要将这两个文本块合并,并在它们之间加上 `/`,如下所示:
```
rtmp://peertube.linuxrocks.online:1935/live/8b940f96-c46d-46aa-81a0-701de3c43c8f
```
### Jitsi 的直播舞台 + 社交活动室
我们在我们的 “直播舞台” 上使用了自由开源的托管平台 [Jitsi Meet][15] 视频会议平台。我们在 [https://meet.jit.si][16] 上创建了一个自定义 URL 的 Jitsi 会议室,并只与演讲者和会议组织者共享了该 URL。
我们配置了会议室的等候室(该功能在你加入新创建的会议室后在会议设置中可用),这样演讲者可以在他们的演讲前几分钟加入而不用担心打断前一个演讲。我们的主持人志愿者在前一个会话结束后让他们进入。另一个选项是给会议室添加密码。我们只是配置了一个等候室就行了。在测试时似乎发现,会议室中的管理状态并不是持久的。如果一个管理员离开了会议室,他们似乎会失去管理员状态和设置,比如等候室的设置。我通过让我的电脑保持打开的状态,使 Jitsi 会议室在整个会议期间可用和活动。(在这方面,你的情况可能会有所不同。)
Jitsi 提供了内置的直播选项,你可以将视频服务的 URL 发布到 Jitsi 中,它会将你的视频流式传输到该服务。我们对这种方法有信心,因为这是我们主办和直播每周举行的 [Fedora 设计团队会议][17] 的方式。对于创意自由峰会,我们将我们的 Jitsi 直播舞台(用于演讲者和主持人)连接到 [Linux Rocks PeerTube 上的一个频道][6]。
Jitsi 允许演讲者共享屏幕来展示幻灯片或进行实时演示。
#### 将 Jitsi 直播到 PeerTube
1、加入会议并点击屏幕底部红色挂断按钮旁边的 “...” 图标。
![加入 Jitsi 会议][18]
2、从弹出菜单中选择 “<ruby>开始直播<rt>Start live stream</rt></ruby>”。
![在 Jitsi 中开始直播的截图][19]
3、复制并粘贴 PeerTube 的 URL + 密钥文本
![复制并粘贴直播流密钥的截图][20]
4、倾听 Jitsi 机器人朋友的声音
几秒钟后会出现一个女性声音告诉你“Live streaming is on.”(直播已开启)。一旦听到这个声音,微笑吧!你正在进行直播。
5、停止直播
这将停止你设置的 PeerTube URL 的工作,所以重复这些步骤可以重新启动直播。
#### Jitsi 技巧
##### 通过开关 Jitsi 的流来管理录制
我们在会议中认识到,在演讲之间关闭 Jitsi 的直播流会更好,这样你将在 PeerTube 上针对每个演讲发布一个原始录制文件。第一天我们让它一直运行,因此一些录制中包含了多个演讲的视频,这使得那些试图赶上进度的人使用即时回放功能更困难。他们需要在视频中寻找他们想观看的演讲,或者等待我们在几天或几周后发布编辑过的版本。
#### 避免音频回音
我们在活动期间实时发现的另一个问题是音频回音。这在我们的测试中并没有出现,这完全是我的错(对所有参加的人道歉)。我负责设置 Jitsi/PeerTube 的链接、监控流和协助主持活动。尽管我知道一旦直播开始,我需要关闭所有已打开的 PeerTube 浏览器标签,但我可能打开了比我想象中更多的 PeerTube 标签,或者直播会在我可用于监控聊天的 Element 客户端中自动开始播放。我没有很方便地静音 Element 的方法。在我进行的一些演讲者介绍中,你会注意到我知道在音频回音开始之前大约有 30 秒的时间,因此我做的介绍非常匆忙/急促。
我认为有更简单的方法来避免这种情况:
- 尽量确保主持人/活动主持人不是负责设置/监控流和聊天的同一个人。(根据你每次拥有多少义工人员的情况,这并不总是可能的。)
- 如果可能,使用一台电脑监控流,另一台电脑担任主持人角色。这样,你在用于监控的电脑上只需按一下静音按钮,简化了你在另一个电脑上的主持体验。
这是一件值得提前练习和完善的事情。
### 后台Element
![以下是 Element 中显示的三个聊天室列表的截图Creative Freedom Summit白色徽标、Creative Freedom Summit Backstage黑色徽标和 Creative Freedom Summit Hosts橙色徽标][21]
我们在会议开始前大约一周设置了一个 “后台” 邀请制聊天室,并邀请了所有的演讲者加入。这有助于确保以下几点:
- 我们的演讲者在活动开始之前就加入了 Element/Matrix并有机会在注册遇到任何问题时都可以获得帮助实际上没有人遇到问题
- 在活动开始之前,我们与所有演讲者建立了一个实时的交流渠道,以便我们能够轻松地发送公告和更新。
在活动期间,这个聊天室成为一个有用的地方,用于协调演讲者之间的过渡,提醒日程是否延迟,以及在一个情况下,当我们的演讲者出现紧急情况无法按原定时间发言时,迅速重新安排演讲时间。
我们还为主持人设置了一个房间,但在我们的情况下,它是多余的。我们只是使用后台频道进行协调。我们发现两个频道很容易监控,但三个频道对于方便起见有点太多了。
### 公告和问答Etherpad/Hackmd.io
![这是一个名为 “General information” 的 Etherpad 的截图,其中包含有关创意自由峰会的一些信息][22]
我们在 Element 主频道中设置了一个固定的小部件,提供有关活动的一般信息,包括每日日程安排、行为准则等。我们还为每个演讲设置了一个问答部分,让与会者可以在其中提出问题,主持人会为演讲者朗读这些问题。
在开始的一两天中,我们发现一些与会者在加载 Etherpad 小部件时遇到问题,因此我们改为在频道中固定一个内嵌的 hackmd.io 文档作为小部件,那似乎效果更好一些。我们并不 100% 确定小部件加载问题的具体原因,但我们可以在频道主题中发布一个原始(非内嵌)链接,这样参与者就可以绕过通过小部件访问时可能遇到的任何问题。
### 综合和集中的会议体验
![在左上角是一个视频直播,右上角是一个 hackmd.io 的公告页面,下方是一个活跃的聊天窗口][23]
通过 Fedora 的 Element 服务器使用 Matrix 是参加会议的关键地方。Element 中的 Matrix 聊天室具有小部件系统,可以将网站嵌入到聊天室中,成为体验的一部分。这个功能对于将我们的 Matrix 聊天室作为集中参会的地方非常重要。
我们将 PeerTube 的直播嵌入到了聊天频道中,在上面的截图中左上角可以看到。会议结束后,我们可以分享未编辑的视频回放的播放列表。现在,我们志愿者项目编辑视频的工作已经完成,该频道中有按顺序排列的编辑演讲的播放列表。
如前一节所讨论的,我们在右上角嵌入了一个 hackmd.io 笔记,用于发布当天的日程安排、公告以及一个用于问答的区域。我本来想设置一个 Matrix 机器人来处理问答,但我在运行时遇到了一些困难。不过,这可能是明年一个很酷的项目。
在会议期间,与会者直接在主要聊天窗口下方进行交流,同时与小部件进行互动。
在将 Matrix/Element 聊天室作为在线会议的中心地点时,有几个要考虑的因素,例如:
- 在 Element 桌面客户端或桌面系统的 Web 浏览器上会有最佳体验。但是,你也可以在 Element 移动客户端中查看小部件(尽管一些参与者在发现此功能时遇到了困难,其用户界面不太明显)。其他 Matrix 客户端可能无法查看小部件。
- 如果需要,与会者可以根据自己的喜好自行组合体验。那些不使用 Element 客户端参加会议的用户报告称加入聊天并直接查看 PeerTube 直播 URL 没有问题。我们在频道主题中分享了直播 URL 和 hackmd URL以便那些不想使用 Element 的用户也可以访问。
### 网站
[Ryan Gorley][25] 使用 [WordPress][27] 开发了 [创意自由峰会网站][26]。该网站由 WPengine 托管,是一个单页网站,其中嵌入了来自 sched.org 的会议日程安排。在网站顶部,有一个标题为 “Create. Learn. Connect.” 的屏幕截图,背景是蓝色和紫色的渐变效果。
### 后续活动
#### 后续调查
我们使用开源调查工具 LimeSurvey。在会议结束后的一两周内我们通过 Element 聊天频道和 PeerTube 视频频道向与会者发送了调查,以了解他们对我们活动的看法。活动组织者们继续定期开会。在这些会议的其中一个议题是共同撰写 hackmd.io 文档,以制定调查问题。以下是我们从活动中学到的一些对你计划自己的开源线上会议可能有兴趣的事项:
- 绝大多数与会者(共 70% 的受访者)是通过 Mastodon 和 Twitter 得知本次活动的。
- 33% 的与会者使用 Element 桌面应用程序参加会议30% 使用 Element 聊天 Web 应用程序。因此,大约有 63% 的与会者使用了集成的 Matrix/Element 体验。其他与会者直接在 PeerTube 上观看或在会后观看了回放。
- 35% 的与会者表示他们通过聊天与其他创意人建立了联系,因此如果你的目标是促进人际交流和连接,聊天体验对于活动来说非常重要。
#### 字幕
在活动期间,我们收到了与会者的积极反馈,他们对其他与会者在聊天中实时添加的演讲字幕表示赞赏,并希望能够提供实时字幕以提升可访问性。虽然本文未提及实时字幕的相关软件,但有一些开源解决方案可供选择。其中一个工具是 Live Captions在 Seth Kenlon 撰写的一篇文章《[在 Linux 上的开源视频字幕][28]》中进行了介绍。虽然这个工具主要用于本地观看视频内容的与会者,但我们有可能让会议主持人在 Jitsi 中运行它并与直播共享。其中一种方法是使用开源广播工具 [OBS][29],这样每个观看直播的人都能受益于字幕功能。
在会后编辑视频时,我们发现了内置于我们首选的开源视频编辑软件 [Kdenlive][30] 中的一项功能,它能够自动生成字幕并自动放置到视频中。在 [Kdenlive 手册][31] 中有关于如何使用这个功能的基本说明。Fedora 设计团队成员 Kyle Conway 在协助会后视频编辑时,制作了一份 [详细教程(包括视频指导):如何在 Kdenlive 中自动生成并添加字幕][32]。如果你对这个功能感兴趣,阅读和观看这个教程会非常有帮助。
#### 视频编辑志愿者工作
活动结束后,我们在会议的 Element 频道中召集了一组志愿者,共同进行视频编辑工作,包括添加标题卡、片头/片尾音乐以及进行整体清理。我们自动生成的一些重播录像可能会分为两个文件,或者与其他多个演讲合并在一个文件中,因此需要重新组装或裁剪。
我们使用 [GitLab Epic][33] 来组织这项工作,其中包含常见问题和寻找按技能组织的志愿者的帮助,每个视频工作都附加有相应的议题。我们为每个视频设置了一系列自定义标签,以明确该视频的状态以及需要何种帮助。所有视频的编辑工作都已完成,其中一些视频需要为其在 [创意自由峰会频道][6] 上的描述区域撰写内容。许多视频都有自动生成的字幕,但字幕中可能存在拼写错误和其他常见的自动生成文本错误,还需要进行编辑修正。
![GitLab 上需要编辑帮助的视频清单的截图][34]
我们通过让志愿者从创意自由峰会的 PeerTube 主频道的未编辑录像中下载原始视频来传递这些视频文件(由于文件大小可能相当大)。当志愿者准备好分享编辑好的视频时,我们有一个私人的 PeerTube 账户他们可以将视频上传到该账户。具有主频道账户访问权限的管理员会定期从私人账户中获取视频并将其上传到主账户中。请注意PeerTube 并没有一个多个账户访问同一频道的系统,因此我们不得不进行密码共享,这可能有些令人紧张。我们认为这是一个合理的妥协,可以限制掌握主要密码的人数,同时仍然可以让志愿者提交编辑好的视频而不会太过麻烦。
### 准备尝试一下吗?
我希望这个对于我们如何使用开源工具集来举办创意自由峰会的全面描述能够激发你尝试在你的开源活动中使用这些方法。让我们知道进展如何,并随时联系我们如果你有问题或改进建议!我们的频道链接为:[https://matrix.to/#/#creativefreedom:fedora.im][35]
*题图MJ/cb6a4ea4-95ed-40cb-9e78-85f8676219f2*
--------------------------------------------------------------------------------
via: https://opensource.com/article/23/4/open-source-tools-virtual-conference
作者:[Máirín Duffy][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/mairin
[b]: https://github.com/lkxed/
[1]: https://fedoraproject.org/wiki/Design
[2]: http://creativefreedomsummit.com/
[3]: http://flocktofedora.org/
[4]: https://opensource.com/article/23/3/video-templates-inkscape
[5]: https://opensource.com/sites/default/files/2023-04/homepage.webp
[6]: https://peertube.linuxrocks.online/c/creativefreedom/videos
[7]: https://linuxrocks.online/
[8]: https://opensource.com/sites/default/files/2023-04/publish.png
[9]: https://opensource.com/sites/default/files/2023-04/go-live.png
[10]: https://opensource.com/sites/default/files/2023-04/advdsettings.png
[11]: https://opensource.com/sites/default/files/2023-04/cfsbanner.png
[12]: https://opensource.com/sites/default/files/2023-04/startlivestream.jpg
[13]: https://opensource.com/sites/default/files/2023-04/pasteURL.png
[14]: https://opensource.com/sites/default/files/2023-04/liveinformation.png
[15]: https://meet.jit.si/
[16]: https://meet.jit.si
[17]: https://peertube.linuxrocks.online/c/fedora_design_live/videos
[18]: https://opensource.com/sites/default/files/2023-04/moreactions.png
[19]: https://opensource.com/sites/default/files/2023-04/startlivestream.png
[20]: https://opensource.com/sites/default/files/2023-04/copypastekey.png
[21]: https://opensource.com/sites/default/files/2023-04/backstage.webp
[22]: https://opensource.com/sites/default/files/2023-04/hackmd.webp
[23]: https://opensource.com/sites/default/files/2023-04/integratedexperience.webp
[24]: https://opensource.com/sites/default/files/2023-04/website.webp
[25]: https://mastodon.social/@ryangorley
[26]: https://creativefreedomsummit.com/
[27]: https://wordpress.com/
[28]: https://opensource.com/article/23/2/live-captions-linux
[29]: https://obsproject.com/
[30]: https://kdenlive.org/
[31]: https://docs.kdenlive.org/en/effects_and_compositions/speech_to_text.html
[32]: https://gitlab.com/groups/fedora/design/-/epics/23#video-captioning-and-handoff
[33]: https://gitlab.com/groups/fedora/design/-/epics/23
[34]: https://opensource.com/sites/default/files/2023-04/availablevideos_0.webp
[35]: https://matrix.to/#/#creativefreedom:fedora.im
[36]: https://blog.linuxgrrl.com/2023/04/10/run-an-open-source-powered-virtual-conference/
[0]: https://img.linux.net.cn/data/attachment/album/202307/30/073728saabpgnjtz5ankgb.jpg

View File

@@ -0,0 +1,112 @@
[#]: subject: "3 key open source challenges in developing countries"
[#]: via: "https://opensource.com/article/23/4/challenges-open-source-developing-countries"
[#]: author: "Ahmed Sobeh https://opensource.com/users/ahmed-sobeh"
[#]: collector: "lkxed"
[#]: translator: "wcjjdlhws"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16037-1.html"
发展中国家面临的三个关键开源挑战
======
![][0]
> 开源在发展中国家面临着许多困难,这些困难使人们对开源的看法以及与开源的联系变得不准确、不贴切。
> 编者按:本文作者 Ahmed Sobeh 是 Aiven 开源项目办公室的开源工程经理。他来自埃及,在开源领域有各种经验。本文是他对埃及的开源文化的见解。
当我回国,和科技行业或其他行业的人谈起我的工作和我每天参与的话题时,我通常会对 <ruby>[开源计划办公室][1]<rt>Open Source Programs Office</rt></ruby>OSPO这个想法感到困惑。一家公司在没有明显的直接经济利益的情况下为开源项目做出贡献这种概念在文化上很难理解或解释。
作为一个在发展中国家出生并成长的人,我理解并赞同这个观点。曾几何时,我对开源软件的唯一理解是,它是一种无需付费、无需等待特定问题或附加功能发布即可使用的软件。我可以自己在本地做任何我需要的事情。
在发展中国家,开源面临着许多困难,这些困难使人们对它的看法和相关印象变得不准确和脱节。我将在本文中讨论这些问题。
### 发展中国家的开源挑战
开源在这些地区面临的挑战主要分为三个部分:
- 社会与文化
- 资源与基础设施
- 政府管理
### 社会与文化
众所周知,科技中的文化,特别是其中的开源部分,源自它所存在的社会文化。这就是为什么在当今世界,开源更有可能在世界较发达地区得到维持和维护。
但是,试想一个完美的社会,一个最适合开源发展、维持和维护的社会。这个社会的文化是什么样的?其主要特征是什么?
#### 开放和透明
开源想要发展,社会文化必须尽可能开放和透明。信息必须可以自由公开地获取,这在许多欠发达地区是一个巨大的问题。信息往往受到繁文缛节的制约,普通公民难以获取,更不用说那些试图为开源做出贡献的人了。
#### 自由
“自由”这个词有许多不同的含义与解释。有言论自由、表达自由、选择自由、信仰自由、宗教自由等等。在本文中,我最关心的自由方面是在没有更高层机构干预的情况下建立新社区和组织的能力。这是开源的本质。分布式协作模式是一种高效的协作模式,在这种模式下,大型团体在没有强大的中央权威指挥的情况下开展合作。这是大多数这些地区面临的另一个重大挑战。新的社区和组织往往会受到质疑、密切监视,不幸的是,在某些情况下,甚至会因为害怕可能出现的新思想或其他原因而遭到起诉并最终被关闭。
#### 充满活力
充满活力的文化对开源的发展至关重要。准备接受和实行新想法的文化是发展开源最理想的地方。抵制改变和倾向于固守传统方法会阻止社会接受新的技术和方法,这是大部分发展中国家中的主要问题。
这些地区抵制改变背后最重要也是最常见的原因是对未知的恐惧。把对未知的恐惧作为“发展中国家”的问题来讨论是不公平的。这是在哪里都常见问题,甚至在发达国家。但是恐惧背后的一些原因是发展中国家特有的。主要原因有两个,一是对科技行业的能力缺乏信心,二是缺乏责任感。企业和个人都不信任现有软件解决方案的功能,更不用说开源解决方案了。有一种观点认为,开源软件不安全、不可靠。当人们不相信软件开发者的能力时这种担忧会被放大。其次,人们不相信该系统会对使用软件或法律冲突中可能出现的错误或问题追究责任。
### 资源、基础设施和经济
经济挑战是发展中国家开源面临的最明显的困难,影响着这些地区的开源开发者和社区。
#### 供应和资金
开源开发人员在发展中国家努力解决供应问题。无论是上网还是使用设备,当你每天都在努力获取资源时,就很难成为一名固定的开源贡献者。这些国家的数字鸿沟十分巨大。依然有许多地区没有正常、稳定和高速的互联网连接。在设备方面,这些地区也与世界其他地区存在市场差距。没有足够的资金购买最新、最强大的机器始终是个难题,但同时也存在供应问题。在这些地区,建立和运行最大的开源项目所需的现代化、功能强大的技术设备并不总能提供。
这些问题使得自我教育和学习具有挑战性。由于这些供应问题,开源开发人员很难选择一个开源项目,自行学习所有相关知识,并开始为其做出贡献。
在这种情况下,如何建立开源社区呢?项目最终只能由少数拥有稳定高速互联网连接和最新设备的特权人士来维护。剩下的将是零星的、偶尔来自他人的贡献,很难被视为一个社区。一旦出现有偿工作的机会,即使是这些人也会消失。我亲眼见过多次这种情况。有人会开始了解一个开源项目,研究特定的堆栈或提高自己的技能,并开始为其做出贡献。但一旦出现了有偿工作的机会,即使是作为第二份工作,他们也会完全放弃开源项目。这是有道理的。任何个人都必须优先考虑自己和家人的生存手段。
这种资源匮乏和对少数特权人群的依赖,也使其几乎不可能为营销活动、社区建设活动以及最后但并非最不重要的文献本地化尝试提供资金。
#### 本地化
英语是互联网语言,但对许多国家来说并非如此。虽然几乎所有的开发人员都会说基本的英语,但并不是每个人都有能力理解文档、架构资源和技术规范,使他们能够有意义地 [为开源项目做出贡献][3]。由于没有相应的文档,发展中国家的开发人员很难找到进入开源项目的切入点。为此所需的时间和资源通常会使这些地区的潜在贡献者望而却步。
#### 员工合同
几乎所有的软件员工合同都旨在将开发人员的每一行代码、贡献或想法货币化。任何参与外部项目的行为都会受到雇佣公司的质疑,而雇佣公司往往会阻止开发人员为开源做贡献,以避免法律问题。法律偏向于公司和组织,阻止软件开发人员做出外部贡献。
#### 知识产权法
发展中国家的法律框架往往不具备处理知识产权和开源许可细微差别的能力。与发达国家相比,发展中国家的知识产权法律可能较弱或不够全面,执法效力也可能较低。这可能使创作者和贡献者难以保护自己的作品,并防止他人在未经许可的情况下使用。
此外,开源许可证可能很复杂。许多发展中国家可能不具备有效驾驭这些许可的法律专业知识或资源。这可能使开发人员很难在不无意中违反许可证条款的情况下为开源项目做出贡献。
另一个问题是,知识产权法和开源许可证有时被视为发展中国家创新和发展的障碍。批评者认为,这些法律和许可会扼杀创造力,阻碍知识和技术的传播,尤其是在资源和技术有限的地区。
总体而言,发展中国家围绕知识产权法和开源贡献所面临的挑战是复杂的、多方面的,需要采取细致入微的方法来应对这些国家所面临的独特情况和挑战。
### 专有软件交易
美国和欧洲的科技巨头与发展中地区的政府签订了价值数十亿美元、长达数十年的软件供应协议。一旦有人当选,并决定开始采用开源软件,他们就会发现摆脱这些交易需要付出巨大的代价。
### 开源并非一帆风顺
这些只是开放源代码在发展中国家面临的一些困难。要改善这种状况,使开源技术的采用和发展变得可行,还有许多工作要做。在今后的文章中,我将深入探讨具体的解决方案,但现在,我想说的是,任何事情都要从个人做起。当我们每个人都 “众包” 开放文化时,我们生活和工作所在地区的文化也会随之改变。尽你所能,将开放源代码带入你的社区,看看它会带来什么。
*题图MJ/e9f5a8be-b0bd-425a-8199-248f5c0abe16*
--------------------------------------------------------------------------------
via: https://opensource.com/article/23/4/challenges-open-source-developing-countries
作者:[Ahmed Sobeh][a]
选题:[lkxed][b]
译者:[wcjjdlhws](https://github.com/wcjjdlhws)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/ahmed-sobeh
[b]: https://github.com/lkxed/
[1]: https://opensource.com/article/20/5/open-source-program-office
[2]: https://opensource.com/article/21/10/global-communication-open-source
[3]: https://opensource.com/article/22/3/contribute-open-source-2022
[4]: https://opensource.com/article/22/11/open-source-weaves-connections-between-countries
[0]: https://img.linux.net.cn/data/attachment/album/202307/27/073634a244fon440y25kug.jpg

View File

@@ -0,0 +1,194 @@
[#]: subject: "Share Folder Between Windows Guest and Linux Host in KVM using virtiofs"
[#]: via: "https://www.debugpoint.com/kvm-share-folder-windows-guest/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16023-1.html"
如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹
======
![][0]
> 在本指南中,你将了解如何在 Linux 主机(例如使用 KVM 的 Fedora、Ubuntu 或 Linux Mint下运行的 Windows 客户机之间共享文件夹。
[virt-manager][1] 应用(带有 [libvirt][2])和软件包提供了一组灵活的工具来管理 Linux 中的虚拟机。它是自由开源的,用于 KVM 虚拟机和其他虚拟机管理程序。
在上一篇文章中,我解释了 [如何在 Linux 客户机和 Linux 主机之间共享文件夹][3]。然而,当你尝试使用 Windows 客户机和 Linux 主机创建共享文件夹时,这是一个有点困难和复杂的过程。因为两种操作系统的工作方式不同,需要进行大量配置。
按照下面提到的说明在 Windows 客户机和 Linux 主机之间共享文件夹。
### 关于 virtiofs 的说明
共享文件和文件夹由名为 virtiofs 的 libvirt 共享文件系统提供支持。它提供了访问主机上目录树的所有功能和参数。由于大多数 virt-manager 虚拟机配置都会转换为 XML因此共享文件/文件夹也可以由 XML 文件指定。
注意:如果你正在寻求在**两台 Linux 计算机**(客户机和主机)之间使用 KVM 进行文件共享,请 [阅读此文][3]。
### 使用 KVM 在 Windows 客户机和 Linux 主机之间共享文件夹
以下说明假设你已在任何 Linux 主机的 virt-manager 中安装了 Windows。如果没有你可以阅读有关如何在 Linux 中安装 Windows 的完整指南。
#### 在 virt-manager 中设置挂载标签
首先,确保你的客户虚拟机已关闭。从 virt-manager GUI 中,选择虚拟机并单击“<ruby>打开<rt>Open</rt></ruby>”以调出控制台设置。
![打开控制台设置][4]
单击工具栏中显示虚拟硬件详细信息的图标。然后单击左侧面板上的“<ruby>内存<rt>Memory</rt></ruby>”。
选择选项“<ruby>启用共享内存<rt>Enable shared memory</rt></ruby>”。单击“<ruby>应用<rt>Apply</rt></ruby>”。
确保 XML 在 XML 选项卡中显示 `<access mode="shared"/>`,如下所示。
```
<memoryBacking>
<source type="memfd"/>
<access mode="shared"/>
</memoryBacking>
```
![启用共享内存][5]
单击底部的“<ruby>添加硬件<rt>Add hardware</rt></ruby>”。
从添加新硬件窗口的左侧面板中选择“<ruby>文件系统<rt>Filesystem</rt></ruby>”。
然后在详细信息选项卡中选择 “<ruby>驱动<rt>Driver</rt></ruby>” 为 “virtiofs”。单击“<ruby>浏览<rt>browse</rt></ruby> > <ruby>浏览本地<rt>browse local</rt></ruby>”并从 Linux 系统中**选择主机路径**。
在“<ruby>目标路径<rt>Target path</rt></ruby>”中,输入你想要的任何名称。它只是一个文件标签,将在挂载过程中使用。目标路径中的此名称将作为 Windows 中的驱动器挂载,即资源管理器中的我的电脑。
我已添加 “linux_pictures” 作为目标挂载标签。
因此,如果我想访问图片文件夹(`/home/debugpoint/Pictures`),示例设置可能如下:
![为 Windows 添加文件系统挂载][6]
单击“<ruby>完成<rt>Finish</rt></ruby>”。
上述配置的 XML 设置如下。你可以在 XML 选项卡中找到它。
```
<filesystem type="mount" accessmode="passthrough">
<driver type="virtiofs"/>
<source dir="/home/debugpoint/Pictures"/>
<target dir="linux_pictures"/>
<address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
</filesystem>
```
在 virt-manager 主窗口中,右键单击 Windows 虚拟机,然后单击“<ruby>运行<rt>Run</rt></ruby>”启动虚拟机。如果未显示虚拟机,请单击“显示图形控制台”(工具栏中的监视器图标)。
#### 设置 WinFSP 适用于 Windows 的 FUSE
确保 Windows 虚拟机(客户机)正在运行。
首先,我们需要安装 WinFSPWindows File System Proxy FUSE for Windows。这使你能够毫无困难地挂载任何类 UNIX 文件系统。
从客户 Windows 计算机打开 WinFSP 的 GitHub 页面。
> **[下载 WinFSP 安装程序][7]**
下载 WinFSP .msi 安装程序。
在 Windows 虚拟机上安装软件包。安装软件包时请确保选择 “Core”。完成安装。
![WinFSP 设置][8]
#### 创建 VirtIO-FS 服务
进入 `stable-virtio` 文件夹,从以下地址下载 `virtio-win-guest-tools.exe`
> **[下载 virtio-win-guest-tools][9]**
![下载客户机工具][10]
在 Windows 虚拟机上安装软件包。
![Virtio-Win-driver 安装][11]
安装完成后,**重启** Windows 虚拟机。
重启后,在开始菜单中搜索打开“设备管理器”。
进入系统设备并查找 “VirtIO FS 设备”。它应该被识别并且驱动程序应该由 Red Hat 签名。
**注意**:(可选)如果你看到感叹号,即未检测到驱动程序,请按照 [此处][12] 说明下载 ISO 文件、安装它并手动检测驱动程序。
![Make sure the Virt IO driver is signed and installed][13]
打开开始菜单并搜索“服务”。
向下滚动找到 “VirtIO-FS Service”。右键单击并单击“开始”启动该服务。
或者,你可以以管理员身份从 PowerShell/命令提示符运行以下命令来启动服务。
```
sc create VirtioFsSvc binpath="C:\Program Files\Virtio-Win\VioFS\virtiofs.exe" start=auto depend="WinFsp.Launcher/VirtioFsDrv" DisplayName="Virtio FS Service"
```
```
sc start VirtioFsSvc
```
![启动 Virt IO 服务][14]
服务启动后,打开资源管理器,你应该看到你在上面第一步中创建的挂载标签,该标签应映射为 Z 驱动器。见下图。
![挂载标签在 Windows 中映射为 Z 驱动器][15]
你现在可以根据需要使用修改后的权限访问整个 Linux 文件夹。
以下是在 Linux Mint 和 Windows 客户虚拟机中访问的同一文件夹的并排比较。
![访问和共享 Windows 客户机和 Linux 主机中的文件夹][16]
### 总结
我希望你现在能够在 Windows 客户机和 Linux 主机系统之间共享文件夹。本文在 Linux Mint 中测试了上述方法。它应该也适用于 Ubuntu、Fedora。
如果上述方法有效,请在下面发表评论以造福他人。
### 参考
- [https://virtio-fs.gitlab.io/howto-windows.html][12]
- [https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/][17]
- [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md][18]
- [https://github.com/virtio-win/kvm-guest-drivers-windows/issues/473][19]
*题图MJ/91c30453-5939-4368-b885-c4cb84e732bf*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/kvm-share-folder-windows-guest/
作者:[Arindam][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://virt-manager.org/
[2]: https://libvirt.org/manpages/libvirtd.html
[3]: https://www.debugpoint.com/share-folder-virt-manager/
[4]: https://www.debugpoint.com/wp-content/uploads/2023/06/Open-the-console-settings.jpg
[5]: https://www.debugpoint.com/wp-content/uploads/2023/06/Enable-shared-memory.jpg
[6]: https://www.debugpoint.com/wp-content/uploads/2023/06/Add-a-file-system-mount-for-windows.jpg
[7]: https://github.com/winfsp/winfsp/releases/
[8]: https://www.debugpoint.com/wp-content/uploads/2023/06/WinFSP-set-up.jpg
[9]: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/
[10]: https://www.debugpoint.com/wp-content/uploads/2023/06/Download-guest-tools.jpg
[11]: https://www.debugpoint.com/wp-content/uploads/2023/06/Virtio-Win-driver-installation.jpg
[12]: https://virtio-fs.gitlab.io/howto-windows.html
[13]: https://www.debugpoint.com/wp-content/uploads/2023/06/Make-sure-the-Virt-IO-driver-is-signed-and-installed.jpg
[14]: https://www.debugpoint.com/wp-content/uploads/2023/06/Start-the-Virt-IO-Service.jpg
[15]: https://www.debugpoint.com/wp-content/uploads/2023/06/The-mount-tag-is-mapped-as-Z-drive-in-windows.jpg
[16]: https://www.debugpoint.com/wp-content/uploads/2023/06/Access-and-share-folder-in-Windows-guest-and-Linux-host-2048x1280.jpg
[17]: https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/
[18]: https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md
[19]: https://github.com/virtio-win/kvm-guest-drivers-windows/issues/473
[0]: https://img.linux.net.cn/data/attachment/album/202307/22/155908ypin2xpzoxsrsx4n.jpg

View File

@@ -0,0 +1,242 @@
[#]: subject: "How to Setup Dynamic NFS Provisioning in Kubernetes Cluster"
[#]: via: "https://www.linuxtechi.com/dynamic-nfs-provisioning-kubernetes/"
[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16043-1.html"
如何在 Kubernetes 集群中设置动态 NFS 配置
======
![][0]
> 在这篇文章中,我们将向你展示如何在 Kubernetesk8s集群中设置动态 NFS 配置。
Kubernetes 中的动态 NFS 存储配置允许你按需自动为 Kubernetes 应用配置和管理 NFS网络文件系统卷。它允许创建持久卷PV和持久卷声明PVC而无需手动干预或预配置存储。
NFS 配置程序负责动态创建 PV 并将其绑定到 PVC。它与 NFS 服务器交互,为每个 PVC 创建目录或卷。
### 先决条件
- 预装 Kubernetes 集群
- 具有 Kubernetes 集群管理员权限的普通用户
- 互联网连接
事不宜迟,让我们深入探讨步骤:
### 步骤 1、准备 NFS 服务器
就我而言,我将在 Kubernetes 主节点Ubuntu 22.04)上安装 NFS 服务器。登录主节点并运行以下命令:
```
$ sudo apt update
$ sudo apt install nfs-kernel-server -y
```
创建以下文件夹并使用 NFS 共享它:
```
$ sudo mkdir /opt/dynamic-storage
$ sudo chown -R nobody:nogroup /opt/dynamic-storage
$ sudo chmod 777 /opt/dynamic-storage
```
`/etc/exports` 文件中添加以下条目:
```
$ sudo vi /etc/exports
/opt/dynamic-storage 192.168.1.0/24(rw,sync,no_subtree_check)
```
保存并关闭文件。
注意:不要忘记更改导出文件中适合你的部署的网络。
要使上述更改生效,请运行:
```
$ sudo exportfs -a
$ sudo systemctl restart nfs-kernel-server
$ sudo systemctl status nfs-kernel-server
```
![NFS-Service-Status-Kubernetes-Master-Ubuntu][1]
在工作节点上,使用以下 `apt` 命令安装 `nfs-common` 包。
```
$ sudo apt install nfs-common -y
```
### 步骤 2、安装和配置 NFS 客户端配置程序
NFS 子目录外部配置程序在 Kubernetes 集群中部署 NFS 客户端配置程序。配置程序负责动态创建和管理由 NFS 存储支持的持久卷PV和持久卷声明PVC
因此,要安装 NFS 子目录外部配置程序,首先使用以下命令集安装 `helm`
```
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
```
运行以下命令来启用 `helm` 仓库:
```
$ helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner
```
使用以下 `helm` 命令部署配置程序:
```
$ helm install -n nfs-provisioning --create-namespace nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=192.168.1.139 --set nfs.path=/opt/dynamic-storage
```
![helm-install-nfs-provisioning-kubernetes-cluster][2]
上面的 `helm` 命令将自动创建 `nfs-provisioning` 命名空间,并安装 NFS 配置程序的容器荚/部署、名称为 `nfs-client` 的存储类,并将创建所需的 rbac。
```
$ kubectl get all -n nfs-provisioning
$ kubectl get sc -n nfs-provisioning
```
![kubectl-get-all-nfs-provisioning-kubernetes-cluster][3]
完美,上面的输出确认了配置程序容器荚和存储类已成功创建。
### 步骤 3、创建持久卷声明PVC
让我们创建 PVC 来为你的容器荚或部署请求存储。PVC 将从存储类 `nfs-client` 请求特定数量的存储:
```
$ vi demo-pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: demo-claim
namespace: nfs-provisioning
spec:
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
```
保存并关闭文件。
![PVC-Yaml-Dynamic-NFS-Kubernetes][4]
运行以下 `kubectl` 命令以使用上面创建的 YML 文件创建 PVC
```
$ kubectl create -f demo-pvc.yml
```
验证 PVC 和 PV 是否创建:
```
$ kubectl get pv,pvc -n nfs-provisioning
```
![Verify-pv-pvc-dynamic-nfs-kubernetes-cluster][5]
太好了,上面的输出表明 PV 和 PVC 创建成功。
### 步骤 4、测试并验证动态 NFS 配置
为了测试和验证动态 NFS 配置,请使用以下 YML 文件启动测试容器荚:
```
$ vi test-pod.yml
kind: Pod
apiVersion: v1
metadata:
name: test-pod
namespace: nfs-provisioning
spec:
containers:
- name: test-pod
image: busybox:latest
command:
- "/bin/sh"
args:
- "-c"
- "touch /mnt/SUCCESS && sleep 600"
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
restartPolicy: "Never"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: demo-claim
```
![Pod-Yml-Dynamic-NFS-kubernetes][6]
使用以下 `kubectl` 命令部署容器荚:
```
$ kubectl create -f test-pod.yml
```
验证 `test-pod` 的状态:
```
$ kubectl get pods -n nfs-provisioning
```
![Verify-Test-Pod-Using-NFS-Volume-Kubernetes][7]
登录到容器荚并验证 NFS 卷是否已安装。
```
$ kubectl exec -it test-pod -n nfs-provisioning /bin/sh
```
![Access-Dynamic-NFS-Inside-Pod-Kubernetes][8]
太棒了,上面容器荚的输出确认了动态 NFS 卷已安装且可访问。
最后删除容器荚和 PVC查看 PV 是否自动删除。
```
$ kubectl delete -f test-pod.yml
$ kubectl delete -f demo-pvc.yml
$ kubectl get pv,pvc -n nfs-provisioning
```
![Delete-Pod-PVC-Dynamic-NFS][9]
这就是这篇文章的全部内容,希望对你有所帮助。请随时在下面的评论部分发表你的疑问和反馈。
*题图MJ/75dae36f-ff68-4c63-81e8-281e2c239356*
--------------------------------------------------------------------------------
via: https://www.linuxtechi.com/dynamic-nfs-provisioning-kubernetes/
作者:[Pradeep Kumar][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.linuxtechi.com/author/pradeep/
[b]: https://github.com/lkxed/
[1]: https://www.linuxtechi.com/wp-content/uploads/2023/06/NFS-Service-Status-Kubernetes-Master-Ubuntu.png
[2]: https://www.linuxtechi.com/wp-content/uploads/2023/06/helm-install-nfs-provisioning-kubernetes-cluster.png
[3]: https://www.linuxtechi.com/wp-content/uploads/2023/06/kubectl-get-all-nfs-provisioning-kubernetes-cluster.png
[4]: https://www.linuxtechi.com/wp-content/uploads/2023/06/PVC-Yaml-Dynamic-NFS-Kubernetes.png
[5]: https://www.linuxtechi.com/wp-content/uploads/2023/06/Verify-pv-pvc-dynamic-nfs-kubernetes-cluster.png
[6]: https://www.linuxtechi.com/wp-content/uploads/2023/06/Pod-Yml-Dynamic-NFS-kubernetes.png
[7]: https://www.linuxtechi.com/wp-content/uploads/2023/06/Verify-Test-Pod-Using-NFS-Volume-Kubernetes.png
[8]: https://www.linuxtechi.com/wp-content/uploads/2023/06/Access-Dynamic-NFS-Inside-Pod-Kubernetes.png
[9]: https://www.linuxtechi.com/wp-content/uploads/2023/06/Delete-Pod-PVC-Dynamic-NFS.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/28/222834togtruhoeuh3gtr1.jpg

View File

@@ -0,0 +1,207 @@
[#]: subject: "Get Organized and Stylish: 7 Best Docks for Ubuntu Linux"
[#]: via: "https://www.debugpoint.com/best-docks-linux/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15988-1.html"
Ubuntu Linux 的 7 个最佳应用坞
======
![][0]
> 看看以下哪个 Linux 应用坞最适合你。
<ruby>应用坞<rt>Dock</rt></ruby> 在提升 Ubuntu 或其他 Linux 发行版上的用户体验和生产力方面起着至关重要的作用。凭借其流线型和直观的设计,应用坞可快速访问经常使用的应用程序、系统设置和工作区管理。
应用坞是个复杂的应用程序,在 Linux 生态系统中仅有少数活跃项目可用。这可能是因为桌面环境提供了将相应的默认面板转换为应用坞的内置功能。
然而,以下是适用于 Ubuntu 和其他 Linux 发行版的 7 个最佳应用坞。
### Linux 的最佳应用坞
#### Plank
最受欢迎和知名的应用坞是 [Plank][1]许多发行版将其作为默认应用坞。例如elementary OS 使用 Plank 做为其 Pantheon 桌面环境的应用坞。
Plank 的最佳特性是其完备性,无需进行任何自定义。它在默认设置下外观出色,并能适应任何发行版。
![Plank 应用坞][2]
你可以使用以下命令在 Ubuntu、Linux Mint 及相关发行版上安装 Plank
```
sudo apt install plank
```
安装完成后,你可以通过命令提示符中输入 `plank`,或通过应用程序菜单启动它。如果你在 Ubuntu 上使用它,请确保使用任何 [GNOME 扩展][3](例如 Just Perfection隐藏默认的左侧 <ruby>启动器<rt>Dash</rt></ruby>。
**注意:** Plank 在 Wayland 上无法工作。你需要使用 X.Org 会话。
#### Dash to Dock 扩展
如果你正在使用最新的 Ubuntu GNOME 桌面环境,则可以尝试 “Dash to Dock” 扩展。它不是独立的应用程序,但可以将你的启动器转换为简单的应用坞。
![Dash to Dock 扩展][4]
该扩展还提供了几个功能,如在多个监视器上显示应用坞、设置大小/图标大小和位置。你还可以自定义其不透明度,使用内置主题并更改应用坞的颜色。
要安装此扩展,先安装 [扩展管理器][5],然后搜索 “[Dash to Dock][6]” 并安装。
#### Dock from Dash 扩展
还有另一个 GNOME 扩展,称为 “Dock from Dash”。乍一看它与 “Dash to Dock” 看起来可能完全相同,但存在一些区别。
与 “Dash to Dock” 相比,此扩展轻量,使用的资源较少。它也仅提供了一些选项,只提供简单的应用坞功能。
此外,它还可以自动隐藏应用坞,并可自定义延迟和行为。
因此,如果你想要一个轻量级的 GNOME 扩展,仅具有应用坞功能,请选择它。
要安装此扩展,先安装 [扩展管理器][5],然后搜索 “[Dock from Dash][7]” 并安装。
![Dock from Dash][8]
#### Latte Dock
[Latte Dock][9] 以其庞大的自定义选项而闻名。它是 KDE 系统的一部分,并带有许多依赖项。我将其添加到此列表的主要原因是它是目前最好的应用坞。
然而问题在于该项目目前没有在维护。Latte Dock 的开发者已经 [离开了该项目][10]。KDE 的自动化机制使该项目保持维护模式。因此,如果需要,只需进行少量调整,它就能正常工作。
许多发行版,如 Garuda Linux曾将其作为默认选项的一部分。但现在已经不再使用 Latte Dock。
![Latte Dock][11]
你可以使用以下命令安装 Latte Dock。如果你在 Ubuntu 上安装它,请记住它将下载大量的 KDE 生态系统的软件包。因此,建议你在任何 [基于 KDE Plasma 的 Linux 发行版][12] 上使用 Latte 应用坞以获得最佳体验。
```
sudo apt install latte-dock
```
#### Docky
如果你想要一个类似 macOS 风格的应用坞,可以尝试使用 Docky。[Docky][13] 是一个简单易用的应用坞,与 GNOME 桌面环境紧密集成。它是一个轻量、快速和可自定义的应用坞,可用于启动应用程序、访问文件和管理窗口。
总体而言Docky 提供了一个视觉吸引力强、可自定义且高效的解决方案,可用于管理应用程序并提升桌面体验。
![Docky 和设置][14]
但是有一个问题。
Docky 的开发已经停滞。其最后一次发布是在 2015 年,目前它处于最低限度的维护模式。但是,你仍然可以在 Ubuntu 上安装它,需要进行一些额外的步骤,因为你需要手动下载依赖项并安装它们。
在 Ubuntu 中打开终端,并按顺序运行以下命令以安装 Docky。
```
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/g/gnome-sharp2/libgconf2.0-cil_2.24.2-4_all.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/multiarch-support_2.27-3ubuntu1_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgnome-keyring/libgnome-keyring-common_3.12.0-1build1_all.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1build1_amd64.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/g/gnome-keyring-sharp/libgnome-keyring1.0-cil_1.0.0-5_amd64.deb
sudo apt install *.deb
wget -c http://archive.ubuntu.com/ubuntu/pool/universe/d/docky/docky_2.2.1.1-1_all.deb
sudo apt install ./docky_2.2.1.1-1_all.deb
```
安装之后,你可以在应用菜单中找到它。
#### DockbarX
如果你是 Xfce 桌面的忠实用户,可能听说过 [DockbarX][15]。它在 Xfce 上运行得很好,但你也可以在 Ubuntu、Linux Mint 或 Arch Linux 上安装它。
DockbarX 带有大量的自定义选项和调整,可以让你的桌面看起来令人惊艳。此外,它还支持内置主题,省去了你调整应用坞的功夫。
DockbarX 的一个独特功能是从应用坞直接显示正在运行应用程序的窗口预览。
![DockBarX][16]
以下是在 Ubuntu 中安装的步骤:
```
sudo add-apt-repository ppa:xuzhen666/dockbarx
sudo apt update
sudo apt install dockbarx
sudo apt install dockbarx-themes-extra
```
如果你使用的是 Arch Linux你可以设置任何 [AUR 辅助工具,如 Yay][17],并使用以下命令安装它。
```
yay -S dockbarx
```
#### KSmoothDock
如果你喜欢在应用坞中显示更多的界面动画效果,那么你可以考虑使用 [KSmoothDock][18]。它具备所有常见的应用坞功能,并附加了一些额外的特性。
KSmoothDock 的主要吸引力在于“抛物线缩放效果”,如果你喜欢动画效果,这是一种非常不错的体验。
![KSmoothDock][19]
![KSmoothDock - 动画效果][20]
此外,它还提供了图标和面板大小、透明度等自定义选项。它是一个构建良好的应用坞,在 KDE Plasma 系列的发行版中应该非常完美。
它提供了一个预编译的 deb 文件进行安装,你可以从 KDE 商店下载:
> **[下载 KSmoothDock][21]**
### 一些不活跃的 Linux 应用坞
除了上述的选项外,还有一些非常受欢迎的应用坞已经停止了开发。这些应用坞当前已经无法正常工作,并且安装它们需要很多努力。你可以查看它们的源代码进行实验。
[Cairo Dock][22]: 对于最新的 Ubuntu 发行版,目前已不可用。[最后一个稳定版本][23]发布于 2015 年。
[Avant Window Navigator][24]: 目前无法正常工作。[最后一个发布版][25] 发布于 2013 年。
### 总结
无论你是喜欢简约的应用坞还是喜欢带有动画效果的重型应用坞,希望上述列表可以帮助你选择最适合你需求的应用坞。不幸的是,几乎大多数应用坞都没有积极的开发,而且也没有新的应用坞在开发。
探索这些选项,尝试不同的应用坞,并找到一个能够增强你的 Ubuntu 或其他 Linux 桌面体验的应用坞。请在评论中告诉我你使用和喜欢的 Linux 应用坞!
*题图MJ/5a640365-8b47-43cc-8d72-2f0af8fc9099*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/best-docks-linux/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://launchpad.net/plank
[2]: https://www.debugpoint.com/wp-content/uploads/2023/06/Plank-Dock.jpg
[3]: https://www.debugpoint.com/gnome-extensions-2022/
[4]: https://www.debugpoint.com/wp-content/uploads/2023/06/Dash-to-dock-extension.jpg
[5]: https://www.debugpoint.com/how-to-install-and-use-gnome-shell-extensions-in-ubuntu/
[6]: https://extensions.gnome.org/extension/307/dash-to-dock/
[7]: https://extensions.gnome.org/extension/4703/dock-from-dash/
[8]: https://www.debugpoint.com/wp-content/uploads/2023/06/Dock-from-dash.jpg
[9]: https://invent.kde.org/plasma/latte-dock
[10]: https://psifidotos.blogspot.com/2022/07/latte-dock-farewell.html
[11]: https://www.debugpoint.com/wp-content/uploads/2023/06/Latte-dock.jpg
[12]: https://www.debugpoint.com/top-linux-distributions-kde-plasma/
[13]: https://launchpad.net/~docky-core/+archive/ubuntu/stable
[14]: https://www.debugpoint.com/wp-content/uploads/2023/06/Docky-and-settings.jpg
[15]: https://github.com/M7S/dockbarx
[16]: https://www.debugpoint.com/wp-content/uploads/2023/06/DockBarX.jpg
[17]: https://www.debugpoint.com/install-yay-arch/
[18]: https://dangvd.github.io/ksmoothdock/
[19]: https://www.debugpoint.com/wp-content/uploads/2023/06/KSmoothDock.jpg
[20]: https://www.debugpoint.com/wp-content/uploads/2023/06/Kooha-2023-06-09-12-32-19.gif
[21]: https://store.kde.org/p/1081169
[22]: https://glx-dock.org/
[23]: https://launchpad.net/~cairo-dock-team/+archive/ubuntu/ppa
[24]: https://github.com/p12tic/awn
[25]: https://launchpad.net/~awn-testing/+archive/ubuntu/ppa
[0]: https://img.linux.net.cn/data/attachment/album/202307/11/162636bc9c2l20spzlj89y.jpg

View File

@@ -0,0 +1,274 @@
[#]: subject: "Best Open Source Email Servers"
[#]: via: "https://itsfoss.com/open-source-email-servers/"
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15982-1.html"
最佳开源电子邮件服务器
======
![][0]
> 这是一份可以用于发送/接收电子邮件并存储邮件的开源邮件服务器列表。
无论你使用何种 [电子邮件客户端][1],使用像 Gmail、Proton Mail 和 Outlook 这样的电子邮件服务非常方便。
为了实现这一切,你利用的是它们的邮件服务器进行电子邮件传输。因此,你的电子邮件的安全性、可靠性和隐私性取决于他人。
但是,如果你希望拥有自己的电子邮件基础设施并控制数据,那么你需要一个开源电子邮件服务器来解决这个问题。
让我解释得更清楚一些,电子邮件服务器可以让你:
- 构建自己的邮件后端以存储电子邮件帐户
- 通过自托管来掌控安全性和可靠性
- 在你首选的服务器架构上进行托管
- 让你能够创建无限数量的帐户
当然,这些并不适用于终端用户。中小型企业的系统管理员和自托管者才能用得上这些软件。
考虑到你现在对开源电子邮件服务器的好处有了一定了解,下面是一些你可以找到的最佳选项:
> 📋 这个列表包括邮件服务器和一些能够构建/创建邮件服务器的解决方案。其中一些可能提供托管服务,而另一些可以进行自托管。
### 1、Postal
[Postal][3] 是一个功能丰富的邮件服务器,可供网站和服务器使用。它专为**出站邮件**而设计没有邮箱管理功能。LCTT 译注:出站邮件指外发邮件,入站邮件指接收邮件供邮件客户端收取。)
它的 [文档][4] 对于入门非常有帮助。你可以使用 Docker 在服务器上配置 Postal。
使用 Postal你可以为多个组织创建邮件服务器/用户,访问出站/入站消息队列,实时的递交信息,并使用内置功能确保电子邮件能够传递。
主要亮点:
- 实时的递交信息
- 点击和打开追踪
- 专为出站邮件设计
> 🚧 维护和配置你的电子邮件服务器并非易事。只有在全面了解可靠地发送/接收电子邮件所需的一切情况下,才应继续设置邮件服务器。
### 2、mailcow
![mailcow 用户界面][5]
[mailcow][6] 是一个邮件服务器套件,其中包含帮助你构建 Web 服务器、管理邮箱等工具。
如果你不打算发送交易性电子邮件mailcow 可以助你一臂之力。你可以将其视为一个团队协作工具。
LCTT 译注:交易性电子邮件是指促进商业交易或关系的电子邮件,或提供关于正在进行的商业交易的最新信息。常见的例子包括: 订单确认、通知电子邮件等,例如,运输确认和更新,或订单退款。)
与其他邮件服务器一样,它与 Docker 搭配使用,每个容器是一个应用程序,它们之间相互连接。
mailcow 的 Web 用户界面可让你在一个地方完成所有操作。你可以在其 [GitHub 页面][7] 或 [文档][8] 中了解更多关于该项目的信息。
主要亮点:
- 易于管理和更新
- 可提供经济实惠的付费支持
- 如果需要,可以与其他邮件服务器配合使用
### 3、Cuttlefish
![Cuttlefish][9]
想要一个简单的交易性邮件服务器吗?[Cuttlefish][10] 是一个简单易用的开源邮件服务器。
你可以通过简单的 Web 用户界面查看统计数据,监控出站邮件。
与一些完整的电子邮件服务(如 SendGrid 或 Mailgun相比Cuttlefish 在功能方面可能没有那么全面,**它目前仍处于测试阶段beta**。如果你需要超级简单且可靠的解决方案,可以选择它。
在其 [GitHub 页面][11] 上了解更多信息。
主要亮点:
- 简单的交易性邮件服务器
- 简单易用
### 4、Apache James
![Apache James][12]
[James][13] 是 “Java Apache Mail Enterprise Server” 的缩写。
顾名思义James 是一个使用 Java 构建的面向企业的开源邮件服务器。根据需求,你可以将该邮件服务器用作 SMTP 中继或 IMAP 服务器。
与其他邮件服务器相比James 可能不是最容易配置或安装的。但是,你可以查看其 [文档][14] 或 [GitHub 页面][15] 来自行评判。
主要亮点:
- 配置完成后易于管理
- 可靠,并被开源企业使用
- 分布式服务器
### 5、Haraka
[Haraka][16] 是一个使用 Node.js 构建的现代开源 SMTP 服务器。如果你可以为你的业务/网站构建它,你就不需要寻找其他 [SMTP 服务][17]。
这个邮件服务器专为提供最佳性能而设计。Haraka 的一个亮点是,它具有模块化插件系统,允许程序员根据需要更改服务器的行为。
你可以将其视为一款出色的可扩展的出站邮件递交服务器。一些知名的网站如 Craigslist 和 DuckDuckGo Email Protection 就使用了 Haraka。
在其 [GitHub 页面][18] 上可以了解更多信息。
主要亮点:
- 使用 Node.js 构建
- 插件系统以扩展功能
### 6、Modoboa
![][19]
[Modoboa][20] 是一个多合一的开源解决方案。
它可以帮助你构建邮件服务器,并为你管理电子邮件帐户。你可以创建日历,无限制添加域名,创建过滤规则和访问 Webmail。如果你希望获得专业帮助来设置和管理系统Modoboa 还提供付费维护选项。
除了是一个多功能解决方案外,它还提供了一种快速入门的方式来构建你的电子邮件基础架构。
主要亮点:
- 全能选项
- 提供付费帮助
- 内置监控功能
### 7、Postfix
Postfix 是一种 <ruby>邮件传输代理<rt>Mail Transfer Agent</rt></ruby>MTA。它本身可能不是一个独立的服务器但它可以与其他一些解决方案配合使用来构建电子邮件服务器。
虽然 mailcow 包含了 [Postfix][21](你可以将其配置与类似的解决方案一起使用),但你也可以根据你的使用情况选择单独使用它。在 Ubuntu 服务器中Postfix 也是默认的邮件传输代理。
Postfix 可以用作外部 SMTP。不要忘记你还可以设置 Postfix 与 Gmail [配合使用][22]。Postfix 容易配置,并且其文档对于使用它非常有用。
主要亮点:
- 易于配置
- 灵活
### 8、Maddy
[Maddy][23] 是一个轻量级邮件服务器实现的不错选择。官方描述称它是一款“_可组合的一体化邮件服务器_”。
与 mailcow 相比较,你会发现 Maddy 提供了一些与 mailcow 相同的功能,也就是说它不仅仅局限于出站邮件等功能。
Maddy 在使用场景上非常受欢迎,它可以用单一实现替代多个选项,如 Postfix。你可以通过 SMTP 和 IMAP 使用 Maddy 进行发送、接收和存储消息。文章撰写时存储功能仍处于测试阶段beta
主要亮点:
- 轻量级
- 替代多种用例,比如 Postfix 等选项
- 不依赖 Docker
### 9、Dovecot
[Dovecot][24] 是一个开源的 IMAP 服务器,作为 <ruby>邮件传递代理<rt>Mail Delivery Agent</rt></ruby>MDA发挥作用。它可以与 Postfix 一起工作,因为它们执行不同的任务。
与其他解决方案相比Dovecot 提供了易于管理、可靠的电子邮件发送功能和自我修复能力。
对于大型基础设施Dovecot 提供了专业支持的高级方案。
主要亮点:
- 易于管理
- 自我修复能力
- 专注于性能
### 10、Poste.io
![Poste.io 邮件服务器][25]
[Poste.io][26] 使用了邮件服务器解决方案,如 Haraku、Dovecot 和其他开源组件。从垃圾邮件过滤工具到防病毒引擎,应有尽有。
如果你想使用其中一些组件设置一个开源邮件服务器并能够轻松管理和保护系统Poste.io 是一个很好的选择。
主要亮点:
- 使用多个开源邮件服务器组件进行易管理和构建
- 管理面板界面
### 11、iRedMail
[iRedMail][27] 类似于 mailcow它帮助你使用各种开源组件构建邮件服务器。你还可以使用创建的邮件服务器管理你的日历。
尽管你可以自行设置,但如果需要,它也提供付费的专业支持。
你将获得一个 Web 面板,在支持的 Linux 发行版上进行托管,并能够创建无限数量的账户。
主要亮点:
- 简单易用
- Web 面板进行易管理
### 12、Mailu
![Mailu 邮件服务器][28]
[Mailu][29] 是一个基于 Docker 的邮件服务器,可以为你提供最好的服务,同时限制了一些功能。
这并不意味着它不好Mailu 的目标是专注于必要功能,而不添加对大多数人无用的许多功能。即便如此,它仍然通过添加 ARM 支持、Kubernetes 支持和其他一些功能而脱颖而出。
你将获得一个标准的邮件服务器、高级电子邮件功能、Web 管理界面和注重隐私的功能。
主要亮点:
- 简单的界面
- 关注于功能而不是花俏的解决方案
- ARM 支持
### 准备构建和管理你的邮件服务器了吗?
使用开源工具和邮件服务器,你可以掌握你的数据,并为你的业务或网站管理/优化电子邮件通信。
正如我所提到的,这需要很多工作。因此,如果你希望拥有定制化的体验并且有一个可以负责的团队,那么开源自托管的邮件服务器是可行的选择。
💬 当然,还有很多其他选项可供选择,比如 [mail in a box][30],可以帮助你快速部署邮件服务器。
在这里,我们尝试为你挑选最佳选择以供参考。你最喜欢的开源邮件服务器是什么?
*题图MJ/f85c5c41-a598-4382-8821-73c701fc842b*
--------------------------------------------------------------------------------
via: https://itsfoss.com/open-source-email-servers/
作者:[Ankush Das][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/ankush/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/best-email-clients-linux/
[2]: https://www.youtube.com/embed/d1Lzw_Q_fJQ?feature=oembed
[3]: https://github.com/postalserver/postal
[4]: https://docs.postalserver.io/
[5]: https://itsfoss.com/content/images/2023/06/mailcow-ui.jpg
[6]: https://mailcow.email/
[7]: https://github.com/mailcow/mailcow-dockerized
[8]: https://docs.mailcow.email/
[9]: https://itsfoss.com/content/images/2023/06/cuttlefish-ui.png
[10]: https://cuttlefish.io/
[11]: https://github.com/mlandauer/cuttlefish
[12]: https://itsfoss.com/content/images/2023/06/james.jpg
[13]: https://james.apache.org/
[14]: https://james.apache.org/server/install.html
[15]: https://github.com/apache/james-project
[16]: https://haraka.github.io/
[17]: https://linuxhandbook.com/smtp-services/
[18]: https://github.com/haraka/Haraka
[19]: https://itsfoss.com/content/images/2023/06/modoboa.jpg
[20]: https://modoboa.org/en/
[21]: https://www.postfix.org/
[22]: https://www.linode.com/docs/guides/configure-postfix-to-send-mail-using-gmail-and-google-workspace-on-debian-or-ubuntu/
[23]: https://maddy.email/
[24]: https://www.dovecot.org/
[25]: https://itsfoss.com/content/images/2023/06/poste-mailserver.png
[26]: https://poste.io/
[27]: https://www.iredmail.org/
[28]: https://itsfoss.com/content/images/2023/06/mailu.png
[29]: https://mailu.io/2.0/
[30]: https://mailinabox.email/
[0]: https://img.linux.net.cn/data/attachment/album/202307/09/191748lhcbs9syshhdszbg.jpg

View File

@@ -0,0 +1,112 @@
[#]: subject: "Meet 'Clipboard': An Open-Source App That Aims to Turn Up Your Productivity"
[#]: via: "https://news.itsfoss.com/clipboard/"
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15964-1.html"
Clipboard一款旨在提高你的工作效率的开源应用
======
> Clipboard 是一个有用的开源工具,具有许多可提高你的工作效率的功能。
![][0]
想要一个新的智能剪贴板管理器吗? 🤔
这就是 **Clipboard 项目** 背后的人们对其剪贴板管理器的看法。他们称之为“第二大脑”,可以随时随地记住任何事情。
你认为呢? 让我们看一下:
### Clipboard概述 ⭐
![a screenshot of clipboard's about info][2]
[Clipboard][3] 主要用古老的 **C++ 编程语言**编写,提供了许多功能,例如复制/粘贴文本、文件、目录、二进制数据、无限剪贴板等等!
此外,它 **与主要的 GUI 剪贴板系统无缝集成** 并支持西班牙语、葡萄牙语和土耳其语等语言。
让我向你展示它是如何工作的。
> 📋 由于这是一个基于终端的应用,因此你必须使用各种命令来操作 Clipboard。
因此,你要做的第一件事是使用以下命令复制文件的内容:
```
cb copy 'filename'
```
![a screenshot of the cb copy command on clipboard][4]
然后进行粘贴,你可以使用以下命令:
```
cb paste
```
![a screenshot of the cb paste command on clipboard][5]
要加载所有剪贴板,你可以使用以下命令:
```
cb show
```
![a screenshot of the cb show command on clipboard][6]
最后,最吸引我们注意的功能是最近添加的 **无限剪贴板历史记录** 功能。
你可以使用此命令访问完整的剪贴板历史记录:
```
cb hs
```
![a screenshot of the unlimited clipboard history feature on clipboard][7]
这个剪贴板应该会 **吸引那些更喜欢使用基于终端的应用** 而不是基于 GUI 的应用的用户。它提供了非常简单的用户体验以及所有合适的工具。
不要忘了,它包含的功能比我讨论的更多,其中包括:
- 制作脚本来自动化你的工作流程
- 能够粘贴你拥有的每种类型的数据,包括二进制数据
那些喜欢图形界面的应用的人可以选择 [Pano 剪贴板管理器][8]。它是一个轻量级的剪贴板管理器,与 GNOME 集成得很好。
### 📥 获取 Clipboard
你可以通过从 [GitHub][9] 获取或浏览其 [官方网站][10] 开始你的剪贴板之旅。它还包含所有必要的安装指南和文档。
> **[Clipboard (GitHub)][11]**
💬 你对 Clipboard 有何看法? 你会尝试一下吗? 你还有其他值得推荐的吗? 在下面的评论中分享你的想法。
*题图MJ/fc3f6192-b073-49e4-8ba5-d72d820ff8a7*
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/clipboard/
作者:[Sourav Rudra][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/sourav/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/06/clipboard-first-look.jpg
[2]: https://news.itsfoss.com/content/images/2023/06/1-cb-info.png
[3]: https://getclipboard.app/
[4]: https://news.itsfoss.com/content/images/2023/06/2-cb-copy.png
[5]: https://news.itsfoss.com/content/images/2023/06/3-cb-paste.png
[6]: https://news.itsfoss.com/content/images/2023/06/4-cb-show.png
[7]: https://news.itsfoss.com/content/images/2023/06/5-cb-hs.png
[8]: https://news.itsfoss.com/pano-clipboard-manager/
[9]: https://github.com/Slackadays/Clipboard
[10]: https://getclipboard.app/
[11]: https://github.com/Slackadays/Clipboard
[0]: https://img.linux.net.cn/data/attachment/album/202307/03/153059djgnaajlms3nz7n3.jpg

View File

@@ -0,0 +1,189 @@
[#]: subject: "Bash Basics Series #2: Using Variables in Bash"
[#]: via: "https://itsfoss.com/bash-use-variables/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15991-1.html"
Bash 基础知识系列 #2:在 Bash 中使用变量
======
![][0]
> 在本章的 Bash 基础知识系列中,学习在 Bash 脚本中使用变量。
在 Bash 基础知识系列的第一部分中,我简要提到了变量。现在是时候在本章中详细了解它们了。
如果你曾经进行过任何类型的编码,你一定熟悉术语“变量”。
如果没有,请将变量视为保存信息的盒子,并且该信息可以随着时间的推移而改变。
让我们看看如何使用它们。
### 在 Bash shell 中使用变量
打开终端并使用一个随机的数字 4 初始化变量:
```
var=4
```
现在你有一个名为 `var` 的变量,它的值为 `4`。想验证一下吗? **通过在变量名前添加 `$` 来访问变量的值**。这称为参数扩展。
```
[abhishek@itsfoss]:~$ echo The value of var is $var
The value of var is 4
```
> 🚧 变量初始化时 `=` 前后不能有空格。
如果需要,你可以将该值更改为其他值:
![Using variables in shell][1]
在 Bash shell 中,变量可以是数字、字符或字符串(包括空格在内的字符)。
![Different variable types in Bash shell][2]
> 💡 与 Linux 中的其他事物一样,变量名称也区分大小写。它们可以由字母、数字和下划线 “`_`” 组成。
### 在 Bash 脚本中使用变量
你是否注意到我没有运行 shell 脚本来显示变量示例? 你可以直接在 shell 中做很多事情.当你关闭终端时,你创建的那些变量将不再存在。
但是,你的发行版通常会添加全局变量,以便可以在所有脚本和 shell 中访问它们。
让我们再写一些脚本.你应该之前创建了脚本目录,但无论哪种情况,此命令都会处理该目录:
```
mkdir -p bash_scripts && cd bash_scripts
```
基本上,如果 `bash_scripts` 目录尚不存在,它将创建它,然后切换到该目录。
这里让我们使用以下文本创建一个名为 `knock.sh` 的新脚本。
```
#!/bin/bash
echo knock, knock
echo "Who's there?"
echo "It's me, $USER"
```
更改文件权限并运行脚本。你在上一章中已经学到了。
这是它为我生成的内容:
![Using global variable in Bahs script][3]
**你是否注意到它如何自动将我的名字添加到其中?** 这就是包含用户名的全局变量 `$USER` 的魔力。
你可能还注意到,我有时将 `"``echo` 一起使用,但其他时候则不使用。这是故意的。[bash 中的引号][4] 有特殊含义。它们可用于处理空格和其他特殊字符。让我展示一个例子。
### 处理变量中的空格
假设你必须使用一个名为 `greetings` 的变量,其值为 `hello and welcome`
如果你尝试像这样初始化变量:
```
greetings=Hello and Welcome
```
你会得到这样的错误:
```
Command 'and' not found, but can be installed with:
sudo apt install and
```
这就是为什么你需要使用单引号或双引号:
```
greetings="Hello and Welcome"
```
现在你可以根据需要使用该变量。
![Using spaces in variable names in bash][5]
### 将命令输出分配给变量
是的!你可以将命令的输出存储在变量中并在脚本中使用它们。这称为命令替换。
```
var=$(command)
```
这是一个例子:
```
[abhishek@itsfoss]:~$ today=$(date +%D)
[abhishek@itsfoss]:~$ echo "Today's date is $today"
Today's date is 06/19/23
[abhishek@itsfoss]:~$
```
![Command substitution in bash][6]
旧语法使用反引号而不是 `$()` 进行命令替换。虽然它可能仍然有效,但你应该使用新的推荐符号。
> 💡 变量会更改值,除非你声明一个“常量”变量,如下所示:`readonly pi=3.14`。在这种情况下,变量 `pi` 的值无法更改,因为它被声明为 `readlonly`。
### 🏋️ 练习时间
是时候练习你所学到的东西了。这里有一些练习来测试你的学习情况。
**练习 1**:编写一个 bash 脚本,以以下格式打印你的用户名、当前工作目录、主目录和默认 shell。
```
Hello, there
My name is XYZ
My current location is XYZ
My home directory is XYZ
My default shell is XYZ
```
**提示**:使用全局变量 `$USER``$PWD``$HOME``$SHELL`
**练习 2** 编写一个 bash 脚本,声明一个名为 `price` 的变量.使用它来获取以下格式的输出:
```
Today's price is $X
Tomorrow's price is $Y
```
其中 X 是变量 `price` 的初始值,并且明天价格翻倍。
**提示**:使用 `\` 转义特殊字符 `$`
练习的答案可以在社区的这个专用帖子中讨论。
在 Bash 基础知识系列的下一章中,你将了解如何通过传递参数和接受用户输入来使 bash 脚本具有交互性。
*题图MJ/37c5c26e-3289-4ebd-b8ae-88eb8a3b2eb1*
--------------------------------------------------------------------------------
via: https://itsfoss.com/bash-use-variables/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/content/images/2023/06/Using-variables-in-shell.png
[2]: https://itsfoss.com/content/images/2023/06/bash-variables-types.png
[3]: https://itsfoss.com/content/images/2023/06/using-global-variable-bash-script.png
[4]: https://linuxhandbook.com:443/quotes-in-bash/
[5]: https://itsfoss.com/content/images/2023/06/using-spaces-in-bash-variable.png
[6]: https://itsfoss.com/content/images/2023/06/command-substitue-bash-variable.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/12/111750bzruv9jiako6j694.jpg

View File

@@ -0,0 +1,201 @@
[#]: subject: "Using cd Command in Linux"
[#]: via: "https://itsfoss.com/cd-command/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15967-1.html"
在 Linux 中使用 cd 命令
======
![][0]
> 了解如何使用用于切换目录的一个基本但必不可少的 Linux 命令。
Linux 中的 `cd` 命令用于更改目录。`cd` 实际上是“<ruby>更改目录<rt>change directories</rt></ruby>”的缩写。
这是你必须了解的 [基本 Linux 命令][1]之一。
使用 `cd` 命令非常简单:
```
cd path_to_directory
```
不可能比这更简单了,对吧。
然而,你应该理解它的路径部分,以便轻松地浏览 [文件系统][2] 而不会感到困惑。
这是绝对路径和相对路径的快速回顾:
![Absolute vs relative path in Linux][3]
如果你需要更多细节,我建议你阅读这篇文章:
> **[Linux 上的绝对路径和相对路径有什么不同][3a]**
让我们看一些使用 `cd` 命令的示例。
### 使用绝对路径更改目录
从视觉上看会更容易理解。看下图。
![Absolute path travel to the python directory][4]
我当前的位置是我的主目录(`/home/abhishek`),我必须进入 `scripts` 目录中的 `python` 目录。
假设我想使用绝对路径。`python` 目录的绝对路径是 `/home/abhishek/scripts/python`
```
cd /home/abhishek/scripts/python
```
![cd command with absolute path][5]
### 使用相对路径更改目录
让我们举同样的例子,但这次我将采用相对路径。
![Relative path example][6]
我的主目录到 `python` 目录的相对路径是 `scripts/python`。让我们用这个:
```
cd scripts/python
```
![cd command with relative path][7]
### 进入上级目录
到目前为止,你一直在进入下级。如果你必须进入上级目录怎么办?
假设你位于 `/home/abhishek/scripts/python` 中,并且必须将目录添加到 `scripts`
![][8]
使用绝对路径始终是一种选择,但它相当冗长。相反,你可以使用特殊的目录符号 `..`。双点 `..`)表示父目录或上一级目录。单点(`.`)表示当前目录。
```
cd ..
```
这是一个例子:
![cd up a directory][9]
你可以使用 `..` 在 Linux 文件系统层次结构中向上移动路径。
假设我在上图中的 `python` 目录中,想要进入 `code` 目录。这是我能做的:
```
cd ../../code
```
![Go up the directory using cd command][10]
### 进入主目录
如果你在所有这些目录切换中感到迷失并想回到主目录,有很多简单的快捷方式。
事实上,最简单的就是使用不带任何选项的 `cd` 命令。
```
cd
```
这将使你从文件系统上的任何位置返回主目录。
或者,你可以使用 `~` 符号,表示主目录。
```
cd ~
```
![Use cd to go back home][11]
### 进入根目录
尽管你不会像前一个那样经常使用它,但了解一下仍然有好处。
如果你想返回文件系统开始的根目录,请使用以下命令:
```
cd /
```
这里不涉及“魔法”。当放在路径开头使用时,`/` 表示根。不要将它与路径分隔符混淆。
![Paths in Linux][12]
### 切换回上一级目录
这是一个救命稻草,或者我应该说是“省时稻草”。当你深入目录结构,然后转到另一个目录,然后你觉得需要返回到以前的位置时,此快捷方式会有所帮助。
```
cd -
```
还不清楚吗? 让我举个例子。
我位于 `/etc/apt/sources.list.d`。从这里,进入 `/home/abhishek/scripts/python` 来处理我的代码。然后我意识到我必须再次检查 `/etc/apt/sources.list.d` 目录中的某些内容。
通常的方法是这样做,这让我再次输入所有路径:
![Go back to previous directory][13]
但聪明的方法是使用这个:
![Use cd - to go back to previous directory][14]
看吧,无需再次输入冗长的路径。如期工作!
### 🏋️ 练习时间
如果你想练习 `cd` 命令,这里有一些练习供你使用。
- 打开终端并进入 `/var/log` 目录。[检查目录内容][15]。你看到了什么?
- 现在,进入 `/var` 目录。这是一个上级目录。
- 从这里返回你的主目录。
这些内容足以让你熟悉 `cd` 命令。以下是你应该了解的其他一些重要命令。
> **[每个 Ubuntu 用户都应该知道的 31 条 Linux 命令][16]**
如果你有疑问或建议,请告诉我。
*题图MJ/6fbaa345-651a-4cb9-a752-130eda922790*
--------------------------------------------------------------------------------
via: https://itsfoss.com/cd-command/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/essential-ubuntu-commands/
[2]: https://linuxhandbook.com:443/linux-directory-structure/
[3]: https://linuxhandbook.com/content/images/2021/04/absolute-vs-relative-path-linux.png
[3a]: https://linuxhandbook.com/absolute-vs-relative-path/?ref=itsfoss.com
[4]: https://itsfoss.com/content/images/2023/06/absolute-path-cd-1.png
[5]: https://itsfoss.com/content/images/2023/06/cd-absolute-path.png
[6]: https://itsfoss.com/content/images/2023/06/absolute-path-cd-2.png
[7]: https://itsfoss.com/content/images/2023/06/cd-relative-path.png
[8]: https://itsfoss.com/content/images/2023/06/relative-path-cd.png
[9]: https://itsfoss.com/content/images/2023/06/cd-up-directory.png
[10]: https://itsfoss.com/content/images/2023/06/go-up-directory-cd-command.png
[11]: https://itsfoss.com/content/images/2023/06/cd-go-back-home.png
[12]: https://linuxhandbook.com/content/images/2021/04/path-linux.png
[13]: https://itsfoss.com/content/images/2023/06/cd-previous-directory.png
[14]: https://itsfoss.com/content/images/2023/06/use-cd-shortcut-to-previous-directory-1.png
[15]: https://itsfoss.com/list-directory-content/
[16]: https://itsfoss.com/essential-ubuntu-commands/
[0]: https://img.linux.net.cn/data/attachment/album/202307/04/154137kxcv8y8z854555mp.jpg

View File

@@ -0,0 +1,92 @@
[#]: subject: "SparkyLinux 7 “Orion Belt” Review: Blending Stability and Freshness"
[#]: via: "https://www.debugpoint.com/sparkylinux-7-review/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15976-1.html"
SparkyLinux 7 “Orion Belt” 评测:稳定性与新鲜感的结合
======
![][0]
> 我们评测了最新的 SparkyLinux 7 “Orion Belt”它带来了最新、最好的 Debian 12 软件包。
SparkyLinux 是著名的基于 Debian 的桌面 Linux 发行版,又推出了它的最新版本 SparkyLinux 7 “Orion Belt”。自 [SparkyLinux 6.0][1] 以来,经过近两年的开发,这个主要版本已经发布。这个备受期待的版本结合了 Debian 12 的稳定性优势和 SparkyLinux 的尖端功能,承诺提供卓越的用户体验。
让我们深入研究这个主要版本的细节,并了解它的性能和其他发行版方面。
### SparkyLinux 7 “Orion Belt”
#### 核心更新
SparkyLinux 以其多样化的桌面风格而脱颖而出,确保适合每个用户。无论你喜欢视觉上令人惊叹的 KDE Plasma、轻量级 LXQt、经典 MATE、可定制的 Xfce 还是简约的 OpenboxSparkyLinux 7 都提供了令人印象深刻的选择,以满足各种喜好和要求。
SparkyLinux 7 的核心是 Debian 12 “Bookworm”为稳定性和可靠性提供了坚实的基础。Debian 12 几天前发布,作为该项目的一个重要里程碑,它是历史上最好的 Debian 版本之一。也就是说,在 SparkyLinux 7 中,用户可以期望从 Debian “Bookworm” 和 Sparky “Orion Belt” 仓库更新所有软件包,确保最新的软件版本随时可用。
此版本默认由 Linux 内核 6.1 LTS 提供支持。但是,如果你更喜欢前沿的主线内核,那么你可以在不稳定的仓库中获取 6.3 和 5.15 LTS。
![SparkyLinux 7 Xfce 桌面][2]
#### 增强的应用和软件
内置应用堆栈已更新,包括基本应用。你可以使用稳定的 Firefox 102.12 ESR、Thunderbird 102.12、VLC 3.0 和 LibreOffice 7.4 作为关键应用。如果你更喜欢最新的 Firefox那么可以使用 Firefox 114它可以在单独的 Sparky 仓库中找到。
Sparky APTus AppCenter 是一款用于管理软件安装和更新的集成工具,已更新至版本 20230530增强了用户的便利性。在一项重大更改中systemd-timesyncd 取代了 ntp 以简化时间同步。
SparkyLinux 的旗舰产品 Xfce 桌面版本为 4.18,这是这款轻量级桌面的最新更新版本。此外,你还可以找到其他版本,例如 KDE Plasma 5.27、LXQt 1.2 和 MATE 1.26。
该团队还投入了大量精力来改进 amd64 ISO 映像,使其能够在具有 UEFI 主板和启用安全启动的机器上启动,从而扩展了对现代系统的兼容性。
那么,关于这个版本的更新就到这里了。我们来看看性能吧。
![APTUS Appcenter for SparkyLinux][3]
#### 安装和性能
我使用 SparkyLinux Xfce 版本进行了本次评测的测试。Calamares 3.2.61 的安装很顺利,没有任何错误。如果你正在安装,你应该注意<ruby>立付<rt>live</rt></ruby>介质的密码是 “live”这是启动安装程序所必需的。
所有更新脚本(包括欢迎应用)在安装后运行良好。欢迎程序可让你快速访问所有系统信息和桌面功能。
我通过 Firefox运行 YouTube 的 4 个以上选项卡、文件管理器、绘图应用、终端、VLC、Synaptic 包管理器和 AppCenter 来运行这个版本。资源占用稍高一些。
此负载的内存消耗约为 2 GBCPU 使用率平均约为 2%。SparkyLinux 7Xfce默认安装占用 5.2 GB 磁盘空间。
所以,总的来说,我相信它运行得相当好,但考虑到 Xfce 桌面,内存消耗似乎有点高。
![SparkyLinux 7 性能][4]
### 总结
SparkyLinux 7 “Orion Belt” 带来了 Debian 的精华为用户提供稳定性和多功能性的平衡组合。SparkyLinux 凭借其广泛的桌面风格、精选应用和专业版本,可以满足广泛的用户需求。
该版本将持续近两年的维护和安全更新。因此,你可以放心地采用它作为你的日常使用。
你可以从其 [官方网站][5] 下载 SparkyLinux。
参考自 [发布公告][6]
*题图MJ/2be08f20-13c3-4c3c-bb84-0bf5be77f86c/*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/sparkylinux-7-review/
作者:[Arindam][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://www.debugpoint.com/sparky-linux-6-review/
[2]: https://www.debugpoint.com/wp-content/uploads/2023/06/SparkyLinux-7-Xfce-Desktop.jpg
[3]: https://www.debugpoint.com/wp-content/uploads/2023/06/APTUS-Appcenter-for-SparkyLinux.jpg
[4]: https://www.debugpoint.com/wp-content/uploads/2023/06/SparkyLinux-7-performance.jpg
[5]: https://sparkylinux.org/download/
[6]: https://sparkylinux.org/sparky-7-0-orion-belt/
[0]: https://img.linux.net.cn/data/attachment/album/202307/07/071756oh146361967g94y9.jpg

View File

@@ -0,0 +1,237 @@
[#]: subject: "Install and Use Flatpak on Ubuntu"
[#]: via: "https://itsfoss.com/flatpak-ubuntu/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16031-1.html"
在 Ubuntu 上安装和使用 Flatpak
======
![][0]
> Ubuntu 可能默认安装了 Snap但你仍然可以使用 Flatpak 通用软件包。
Linux 世界有三种“通用”打包格式,允许在“任何” Linux 发行版上运行Snap、Flatpak 和 AppImage。
Ubuntu 内置了 Snap但大多数发行版和开发人员都避免使用它因为它的闭源性质。他们更喜欢 [Fedora 的 Flatpak 打包系统][1]。
作为 Ubuntu 用户,你并不局限于 Snap。你还可以在 Ubuntu 系统上使用 Flatpak。
在本教程中,我将讨论以下内容:
- 在 Ubuntu 上启用 Flatpak 支持
- 使用 Flatpak 命令来管理包
- 从 Flathub 获取包
- 将 Flatpak 软件包添加到软件中心
听起来很令人兴奋? 让我们一一看看。
### 在 Ubuntu 上安装 Flatpak
你可以使用以下命令轻松安装 Flatpak
```
sudo apt install flatpak
```
对于 **Ubuntu 18.04 或更早版本**,请使用 PPA
```
sudo add-apt-repository ppa:flatpak/stable
sudo apt update
sudo apt install flatpak
```
#### 添加 Flathub 仓库
你已在 Ubuntu 系统中安装了 Flatpak 支持。但是,如果你尝试安装 Flatpak 软件包,你将收到 [“No remote refs found”][2] 错误。这是因为没有添加 Flatpak 仓库,因此 Flatpak 甚至不知道应该从哪里获取应用。
Flatpak 有一个名为 “Flathub” 的集中仓库,可以从此处找到并下载许多 Flatpak 应用。
你应该添加 Flathub 仓库来访问这些应用。
```
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
```
![Install Flatpak in latest versions of Ubuntu and then add Flathub repo][3]
安装并配置 Flatpak 后,**重启你的系统**。否则,已安装的 Flatpak 应用将不会在你的系统菜单上可见。
不过,你始终可以通过运行以下命令来运行 Flatpak 应用:
```
flatpak run <package-name>
```
### 常用 Flatpak 命令
现在你已经安装了 Flatpak 打包支持,是时候学习包管理所需的一些最常见的 Flatpak 命令了。
#### 搜索包
如果你知道应用名称,请使用 Flathub 网站或使用以下命令:
```
flatpak search <package-name>
```
![Search for a package using Flatpak Search command][4]
> 🚧 除了搜索 Flatpak 包之外,在其他情况下,<package-name> 指的是正确的 Flatpak 包名称,例如 `com.raggesilver.BlackBox`(上面截图中的应用 ID。你还可以使用应用 ID 的最后一个词 `Blackbox`。
#### 安装 Flatpak 包
以下是安装 Flatpak 包的语法:
```
flatpak install <remote-repo> <package-name>
```
由于几乎所有时候你都会从 Flathub 获取应用,因此远程仓库将是 `flathub`
```
flatpak install flathub <package-name>
```
![Install a package after searching for its name][5]
在极少数情况下,你可以直接从开发人员的仓库安装 Flatpak 包,而不是 Flathub。在这种情况下你可以使用如下语法
```
flatpak install --from https://flathub.org/repo/appstream/com.spotify.Client.flatpakref
```
#### 从 flatpakref 安装包
这是可选的,也很少见。但有时,你会获得应用的 `.flatpakref` 文件。这**不是离线安装**。.flatpakref 包含有关从何处获取包的必要详细信息。
要从此类文件安装,请打开终端并运行:
```
flatpak install <path-to-flatpakref file>
```
![Install a Flatpak package from Flatpakref file][6]
#### 从终端运行 Flatpak 应用
再说一遍,这是你不会经常做的事情。大多数情况下,你将在系统菜单中搜索安装应用并从那里运行该应用。
但是,你也可以使用以下命令从终端运行它们:
```
flatpak run <package-name>
```
#### 列出已安装的 Flatpak 软件包
想要查看你的系统上安装了哪些 Flatpak 应用? 像这样列出它们:
```
flatpak list
```
![List all the installed Flatpak packages on your system][7]
#### 卸载 Flatpak 包
你可以通过以下方式删除已安装的 Flatpak 包:
```
flatpak uninstall <package-name>
```
如果你想**清除不再需要的剩余包和运行时**,请使用:
```
flatpak uninstall --unused
```
![Remove a Flatpak package and later, if there is any unused runtimes or packages, remove them][8]
它可能会帮助你 [在 Ubuntu 上节省一些磁盘空间][9]。
### Flatpak 命令总结
以下是你在上面学到的命令的快速摘要:
| 用途 | 命令 |
|:--:|:--:|
| 搜索包 | `flatpak search` |
| 安装包 | `flatpak install` |
| 列出已安装的包 | `flatpak list` |
| 从 flatpakref 安装 | `flatpak install <package-name.flatpakref>` |
| 卸载软件包 | `flatpak uninstall` |
| 卸载未使用的运行时和包 | `flatpak uninstall --unused` |
### 使用 Flathub 探索 Flatpak 包
我知道通过命令行搜索 Flatpak 包并不是最好的体验,这就是 [Flathub 网站][10] 的用武之地。
你可以在 Flathub 上浏览 Flatpak 应用,它提供了更多详细信息,例如经过验证的发布商、下载总数等。
你还将在应用页面底部获得安装应用所需的命令。
![][11]
![][12]
### 额外信息:使用支持 Flatpak 软件包的软件中心
你可以将 Flatpak 包添加到 GNOME 软件中心,并使用它以图形方式安装软件包。
有一个专用插件可以将 Flatpak 添加到 GNOME 软件中心。
> 🚧 从 Ubuntu 20.04 开始Ubuntu 默认的软件中心是 Snap Store并且不支持 Flatpak 集成。因此,安装以下软件包将产生两个软件中心:一个 Snap 和另一个 DEB。
![When you install GNOME Software Flatpak plugin in Ubuntu, a DEB version of GNOME Software is installed. So you will have two software center application][13]
```
sudo apt install gnome-software-plugin-flatpak
```
![Installing GNOME Software Plugin in Ubuntu][14]
### 总结
你在这里学到了很多东西。你学习了在 Ubuntu 中启用 Flatpak 支持并通过命令行管理 Flatpak 软件包。你还了解了与软件中心的集成。
我希望你现在对 Flatpaks 感觉更舒服一些。既然你发现了三个通用软件包之一,那么再 [了解一下 Appimages][15] 怎么样?
如果你有疑问或遇到任何问题,请告诉我。
*题图MJ/d03886af-9b7f-401e-a964-da0e5d6531a2*
--------------------------------------------------------------------------------
via: https://itsfoss.com/flatpak-ubuntu/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/what-is-flatpak/
[2]: https://itsfoss.com/no-remote-ref-found-flatpak/
[3]: https://itsfoss.com/content/images/2023/06/install-flatpak-1.svg
[4]: https://itsfoss.com/content/images/2023/06/flatpak-search.svg
[5]: https://itsfoss.com/content/images/2023/06/flatpak-install-package.svg
[6]: https://itsfoss.com/content/images/2023/06/install-flatpak-ref.svg
[7]: https://itsfoss.com/content/images/2023/06/flatpak-list.svg
[8]: https://itsfoss.com/content/images/2023/06/flatpak-uninstall-package-with-removal-of-unused.svg
[9]: https://itsfoss.com/free-up-space-ubuntu-linux/
[10]: https://flathub.org:443/en-GB
[11]: https://itsfoss.com/content/images/2023/06/Flathub-apps-page-2.png
[12]: https://itsfoss.com/content/images/2023/06/application-details-in-flathub-website-2.png
[13]: https://itsfoss.com/content/images/2023/06/two-software-centers-in-Ubuntu.png
[14]: https://itsfoss.com/content/images/2023/06/install-gnome-flatpak-plugin.svg
[15]: https://itsfoss.com/use-appimage-linux/
[0]: https://img.linux.net.cn/data/attachment/album/202307/24/230017g1qhhwfzhhhcyz13.jpg

View File

@@ -0,0 +1,114 @@
[#]: subject: "2 Ways to Add Users to SUDOERS Group in Debian"
[#]: via: "https://www.debugpoint.com/add-users-sudoers/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15958-1.html"
在 Debian 中将用户添加到 SUDOERS 组的 2 种方法
======
![][0]
> 以下是如何将用户添加到 Debian Linux 中的 SUDOERS 组的方法。
在 Debian Linux 中SUDOERS 组在向用户授予管理权限方面发挥着至关重要的作用。将用户添加到 SUDOERS 组使他们能够以 root 权限执行命令,从而为他们提供必要的管理访问权限以在 Debian 系统上执行各种任务。
在安装 Debian Linux 的过程中,如果你将 `root` 帐户的密码保留为空,那么系统中的 [创建的第一个用户][1] 将拥有管理权限。但是,如果你设置了 `root` 密码,那么用户名将不具有 sudo 权限。因此,在使用用户帐户执行管理任务时,你可能会遇到以下类似的错误。
```
<username> is not in the sudoers file. This incident will be reported.
```
![将用户添加到 SUDOERS 组之前][2]
本文旨在提供有关在 Debian 中向 SUDOERS 组添加用户的分步指南,确保你可以有效地管理用户权限和系统安全。
### 如何将用户添加到 Debian 中的 SUDOERS 组
要将用户添加到 Debian 中的 SUDOERS 组,请按照以下简单步骤操作:
- 单击“终端”图标或使用快捷键 `Ctrl+Alt+T`,打开 Debian 系统上的终端。
- 使用以下命令切换到 root 用户:
```
su -
```
系统将提示你提供 root 密码。输入 root 密码并按回车键。
以 root 用户身份登录后,输入以下命令。确保根据你的用户名进行更改。在此示例中,将 `arindam` 替换为你的用户名。
```
/sbin/addgroup arindam sudo
```
如果上面的命令无效,还可以使用下面的命令:
```
usermod -aG sudo arindam
```
按退出离开 root 提示符。注销并重新登录。现在你可以使用你的用户名执行任何管理操作。
### 另一种方法
你可以使用与下面相同的命令进入 root 帐户。使用 root 账号登录:
```
su -
```
然后使用 `nano``visudo` 或任何编辑器打开 `/etc/sudoers` 文件。
```
nano /etc/sudoers
```
添加以下行和用户名。根据你的用户名替换 `arindam`
```
arindam ALL=(ALL) ALL
```
保存并关闭文件。然后,注销并重新登录。这应该会给用户名 root 权限。
### 验证 SUDOERS 组成员
要验证用户是否已成功添加到 SUDOERS 组,你可以打开一个新的终端窗口并输入以下命令。将 `arindam` 替换为你添加到 SUDOERS 组的用户的实际用户名。
```
sudo -l -U arindam
```
如果用户是 SUDOERS 组的成员,你将看到他们拥有的权限列表。这是一个示例,你可以看到我的用户名具有所有访问权限。
![授予权限后][3]
### 结束语
将用户添加到 SUDOERS 组将授予他们重要的管理权限。在授予用户此类访问权限之前仔细考虑用户的可信度和责任非常重要。sudo 使用不当可能会导致系统意外损坏或受损。
请记住在委派管理权限时要小心谨慎,并定期检查用户权限以维护安全的 Debian 系统。
*题图MJ/c71c2f28-51c7-44c7-87be-af88088bf459*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/add-users-sudoers/
作者:[Arindam][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://www.debian.org/releases/stable/amd64/ch06s03.en.html#user-setup-root
[2]: https://www.debugpoint.com/wp-content/uploads/2023/06/Before-adding-a-user-to-SUDOERS-group.png
[3]: https://www.debugpoint.com/wp-content/uploads/2023/06/After-granting-priviledges.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/01/174031t6p74rx6ixlmyjr7.jpg

View File

@@ -0,0 +1,167 @@
[#]: subject: "How to Install and Use Wireshark in Ubuntu 22.04"
[#]: via: "https://www.linuxtechi.com/install-use-wireshark-ubuntu/"
[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15969-1.html"
如何在 Ubuntu 22.04 中安装和使用 Wireshark
======
![][0]
> 技术兄弟们,大家好,在这篇文章中我们将介绍如何在 Ubuntu 22.04 中安装和使用 Wireshark。
Wireshark 是自由开源的、跨平台的、基于 GUI 的网络数据包分析器,可用于 Linux、Windows、MacOS、Solaris 等。它实时捕获网络数据包并以人类可读的格式呈现它们。它使我们能够监控微观层面的网络数据包。它还有一个名为 `tshark` 的命令行程序,它执行与 Wireshark 相同的功能,但通过终端而不是通过 GUI。
Wireshark 可用于网络故障排除、分析、软件和通信协议开发也可用于教育目的。Wireshark 使用名为 `pcap` 的库来捕获网络数据包。
### Wireshark 的功能
- 支持检查数百种协议
- 能够实时捕获数据包并保存它们以供以后离线分析
- 一些用于分析数据的过滤器
- 捕获的数据可以动态压缩和解压缩
- 支持多种数据分析文件格式,输出也可以保存为 XML、CSV、纯文本格式
- 可以从以太网、WiFi、蓝牙、USB、帧中继、令牌环等多种接口捕获数据
### 先决条件
- 预装 Ubuntu 22.04
- 具有 sudo 权限的本地用户
- 互联网连接
### Wireshark 安装步骤
#### 从 Ubuntu 仓库安装
Wireshark 包可在默认的 Ubuntu 仓库中找到,并且可以使用以下命令简单地安装。但你可能无法获得最新版本的 wireshark。
```
$ sudo apt update
$ sudo apt install wireshark
```
![Apt-Command-Install-Wireshark-Ubuntu][1]
选择 “Yes” 允许非超级用户使用 Wireshark 捕获数据包:
![Allow-Non-SuperUsers-To-Capture-Packets-Wireshark-Ubuntu][2]
安装成功后,访问 Wireshare UI。从“<ruby>活动<rt>Activities</rt></ruby>”中搜索 “wireshark”然后单击其图标。
![Wireshark-UI-Ubuntu-Linux-Desktop][3]
以上确认你的 Wireshark 安装已成功完成。
#### 安装最新的版本
如果要安装最新版本的 Wireshark我们必须使用以下 `apt` 命令启用官方 Wireshark 仓库:
```
$ sudo add-apt-repository ppa:wireshark-dev/stable
$ sudo apt update
```
现在,安装最新版本的 Wireshark运行
```
$ sudo apt install wireshark -y
```
安装 Wireshark 后,验证其版本:
```
$ wireshark --version
```
![Wireshark-Version-Check-Ubuntu-Linux][4]
要允许普通用户使用 Wireshark 使用和捕获数据包,请运行以下命令:
```
$ sudo dpkg-reconfigure wireshark-common
```
选择 “Yes” 并按回车键。
![Allow-Regular-User-Use-Wireshark-Ubuntu][5]
使用 `usermod` 命令将本地用户添加到 `wireshark` 组:
```
$ sudo usermod -aG wireshark $USER
$ newgrp wireshark
```
要使上述更改生效,请重新启动系统。
```
$ sudo reboot
```
### 使用 Wireshark 捕获数据包
启动 Wireshark从“活动”->搜索 “wireshark”。
![Access-Wireshark-Ubuntu-Desktop][6]
单击 Wireshark 图标,
![Choose-Interface-Wireshark-UI-Ubuntu][7]
所有这些都是我们可以捕获网络数据包的接口。根据你系统上的界面,此页面可能会有所不同。
我们选择 “enp0s3” 来捕获该接口的网络流量。选择接口后,我们网络上所有设备的网络数据包开始填充(请参阅下面的截图):
![Capturing-Packets-WireShark-UI-Ubuntu][8]
第一次看到此页面时我们可能会被此屏幕中显示的数据淹没并且可能会想到如何整理这些数据但不用担心Wireshark 的最佳功能之一就是它的过滤器。
我们可以根据 IP 地址、端口号对数据进行排序/过滤,还可以使用源和目标过滤器、数据包大小等,还可以将 2 个或更多过滤器组合在一起以创建更全面的搜索。我们可以在“<ruby>应用显示过滤器<rt>Apply a Display Filter</rt></ruby>”选项卡中编写过滤器,也可以选择已创建的规则之一。要选择预建过滤器,请单击“旗帜”图标,然后点击“应用显示过滤器”选项卡。
![IP-Based-Filtering-WireShark-UI-Ubuntu][9]
我们还可以根据颜色代码来过滤数据,默认情况下,浅紫色是 TCP 流量,浅蓝色是 UDP 流量,黑色标识有错误的数据包,要查看这些代码的含义,请单击“<ruby>查看<rt>View</rt></ruby>”->“<ruby>颜色规则<rt>Coloring Rules</rt></ruby>”,我们也可以更改这些代码。
![Coloring-Rules-WireShark-Ubuntu][10]
获得所需的结果后,我们可以单击任何捕获的数据包以获取有关该数据包的更多详细信息,这将显示有关该网络数据包的所有数据。
要停止捕获数据包,请单击红色停止按钮,然后将捕获的数据包保存到文件中。
![Save-Captured-Packets-Wireshark-Ubuntu][11]
### 总结
Wireshark 是一款非常强大的工具,需要一些时间来适应和掌握它,这篇文章将帮助你开始使用。请随时在下面的评论栏中提出你的疑问或建议。
*题图MJ/63c09e75-a3e7-4dbf-ac6f-0233bdd34ad8*
--------------------------------------------------------------------------------
via: https://www.linuxtechi.com/install-use-wireshark-ubuntu/
作者:[Pradeep Kumar][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.linuxtechi.com/author/pradeep/
[b]: https://github.com/lkxed/
[1]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Apt-Command-Install-Wireshark-Ubuntu.png
[2]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Allow-Non-SuperUsers-To-Capture-Packets-Wireshark-Ubuntu.png
[3]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Wireshark-UI-Ubuntu-Linux-Desktop.png
[4]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Wireshark-Version-Check-Ubuntu-Linux.png
[5]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Allow-Regular-User-Use-Wireshark-Ubuntu.png
[6]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Access-Wireshark-Ubuntu-Desktop.png
[7]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Choose-Interface-Wireshark-UI-Ubuntu.png
[8]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Capturing-Packets-WireShark-UI-Ubuntu.png
[9]: https://www.linuxtechi.com/wp-content/uploads/2017/11/IP-Based-Filtering-WireShark-UI-Ubuntu.png
[10]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Coloring-Rules-WireShark-Ubuntu.png
[11]: https://www.linuxtechi.com/wp-content/uploads/2017/11/Save-Captured-Packets-Wireshark-Ubuntu.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/05/154817pj3jx0jl03levzu9.jpg

View File

@@ -0,0 +1,178 @@
[#]: subject: "Bash Basics Series #3: Passing Arguments and Accepting User Inputs"
[#]: via: "https://itsfoss.com/bash-pass-arguments/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16001-1.html"
Bash 基础知识系列 #3:传递参数和接受用户输入
======
![][0]
> 在 Bash 基础系列的这一章中,学习如何向 Bash 脚本传递参数并使它们具有交互性。
来让 Bash 脚本有参数吧 😉
你可以通过向 Bash 脚本传递变量来使其更加有用和更具交互性。
让我通过示例详细向你展示这一点。
### 将参数传递给 Shell 脚本
当你运行 Shell 脚本时,你可以按以下方式向其中添加其他变量:
```
./my_script.sh var1 var2
```
在脚本内部,你可以使用 `$1` 作为第一个参数,`$2` 作为第二个参数,依此类推。
> 💡 `$0` 是一个特殊变量,保存正在执行的脚本的名称。
让我们通过一个实际的例子来看看。切换到保存练习 Bash 脚本的目录。
```
mkdir -p bash_scripts && cd bash_scripts
```
现在,创建一个名为 `arguments.sh` (我想不出更好的名称)的新 Shell 脚本,并向其中添加以下行:
```
#!/bin/bash
echo "Script name is: $0"
echo "First argument is: $1"
echo "Second argument is: $2"
```
保存文件并使其可执行。现在像往常一样运行脚本,但这次向其中添加任意两个字符串。你将看到屏幕上打印的详细信息。
> 🚧 参数由空格(空格、制表符)分隔。如果参数中有空格,请使用(英文)双引号将其引起来,否则它将被视为单独的参数。
![Pass arguments to the bash scripting][1]
> 💡 Bash 脚本最多支持 255 个参数。但对于参数 10 及以上,你必须使用花括号 `${10}`、`${11}`...`${n}`。
正如你所看到的,`$0` 代表脚本名称,而其余参数存储在编号变量中。你还可以在脚本中使用一些其他特殊变量。
| 特殊变量 | 变量描述 |
| :- | :- |
| `$0` | 脚本名称 |
| `$1``$2`、……`$9` | 脚本参数 |
| `${n}` | 脚本参数从 10 到 255 |
| `$#` | 参数数量 |
| `$@` | 所有参数 |
| `$$` | 当前 Shell 的进程 ID |
| `$!` | 最后执行的命令的进程 ID |
| `$?` | 最后执行命令的退出状态 |
> 🏋️‍♀️ 修改上面的脚本以显示参数数量。
#### 如果参数数量不匹配怎么办?
在上面的示例中,你为 Bash 脚本提供了两个参数并在脚本中使用了它们。
但是,如果你只提供一个参数或三个参数怎么办?
让我们实际做一下吧。
![Passing fewer or more arguments to bash script][3]
正如你在上面所看到的,当你提供的参数超出预期时,结果仍然是一样的。不使用其他参数,因此不会产生问题。
但是,当你提供的参数少于预期时,脚本将显示空白。如果脚本的一部分依赖于缺少的参数,这可能会出现问题。
### 接受用户输入并制作交互式 Bash 脚本
你还可以创建提示用户通过键盘提供输入的 Bash 脚本。这使你的脚本具有交互性。
`read` 命令提供了此功能。你可以这样使用它:
```
echo "Enter something"
read var
```
上面的 `echo` 命令不是必需的,但最终用户不会知道他们必须提供输入。然后用户在按回车键之前输入的所有内容都存储在 `var` 变量中。
你还可以显示提示消息并在单行中获取值,如下所示:
```
read -p "Enter something? " var
```
让我们看看它的实际效果。创建一个新的 `interactive.sh` Shell 脚本,内容如下:
```
#!/bin/bash
echo "What is your name, stranger?"
read name
read -p "What's your full name, $name? " full_name
echo "Welcome, $full_name"
```
在上面的示例中,我使用 `name` 变量来获取名称。然后我在提示中使用 `name` 变量,并在 `full_name` 变量中获取用户输入。我使用了两种使用 `read` 命令的方法。
现在,如果你授予执行权限,然后运行此脚本,你会注意到该脚本显示 `What is your name, stranger?`,然后等待你从键盘输入内容。你提供输入,然后它会显示 `What's your full name` 消息,并再次等待输入。
以下是供你参考的示例输出:
![Interactive bash shell script][4]
### 🏋️ 练习时间
是时候练习你所学到的东西了。尝试为以下场景编写简单的 Bash 脚本。
**练习 1**:编写一个带有三个参数的脚本。你必须使脚本以相反的顺序显示参数。
预期输出:
```
abhishek@itsfoss:~/bash_scripts$ ./reverse.sh ubuntu fedora arch
Arguments in reverse order:
arch fedora ubuntu
```
**练习 2**:编写一个脚本,显示传递给它的参数数量。
提示:使用特殊变量 `$#`
预期输出:
```
abhishek@itsfoss:~/bash_scripts$ ./arguments.sh one and two and three
Total number of arguments: 5
```
**练习 3**:编写一个脚本,将文件名作为参数并显示其行号。
提示:使用 `wc` 命令来计算行号。
你可以在社区中讨论你的解决方案。
很好! 现在你可以(传递)参数了 :) 在下一章中,你将学习在 Bash 中执行基本数学运算。
*题图MJ/5a75aa2f-1cb1-4009-a4e6-683cf61bc892*
--------------------------------------------------------------------------------
via: https://itsfoss.com/bash-pass-arguments/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/content/images/2023/06/run-bash-script-with-arguments.png
[2]: https://itsfoss.com/cdn-cgi/l/email-protection
[3]: https://itsfoss.com/content/images/2023/06/passing-non-matching-arguments-bash-shell.png
[4]: https://itsfoss.com/content/images/2023/06/interactive-bash-shell-script.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/15/094330dzt3s3ygshsst39t.jpg

View File

@@ -0,0 +1,70 @@
[#]: subject: "Nobara 38 Released, Offering Enhanced Gaming and Content Creation Experience"
[#]: via: "https://debugpointnews.com/nobara-38/"
[#]: author: "arindam https://debugpointnews.com/author/dpicubegmail-com/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15981-1.html"
Nobara 38 发布,提供增强的游戏和内容创作体验
======
> 探索 Nobara 38 版本的新功能,该版本随 Fedora 38 一起发布。
基于 [Fedora 38][1] 的预期版本 Nobara 38 终于发布了它带来了一系列用户友好的修复和功能增强。Nobara 是 Fedora Linux 的修改版本旨在解决用户面临的常见问题并提供开箱即用的顺滑的游戏、流媒体和内容创建体验。凭借一系列附加软件包和自定义功能Nobara 38 将 Fedora 提升到了新的高度。
Nobara 38 中值得注意的改进之一是为视频调色软件 Davinci Resolve 实施了一个临时方案。当 Davinci Resolve 的安装程序从终端运行时,会提示用户执行一个向导,执行必要的操作以确保顺利运行。这包括将它的 glib2 库移动到一个备份文件夹中,详见官方 Davinci Resolve 论坛。
![Nobara 38 桌面][2]
在游戏领域Nobara 38 引入了 Payday 2 原生 Linux 版本的临时方案。鉴于 OpenGL 实现目前已损坏且对原生版本的官方支持已被放弃,该版本利用 zink 驱动程序来确保无缝游戏。据 GamingOnLinux 报道,这确保了 Linux 用户可以继续使用 Payday 2不会出现任何问题。
此外Nobara 38 合并了 Udev 规则来增强控制器支持。具体来说,添加了一条规则,强制对 045e:028e “Xbox 360” 控制器设备使用内核 xpad 驱动程序。这使得 GPD Win Max 2 和 GPD Win 4 等在报告为该设备的控制时,能够保持控制器兼容性,同时仍然允许安装可选的 xone/xpadneo 驱动程序以实现无线适配器,并改进对 Xbox One 控制器的蓝牙支持。
为了优化不同设备类型的性能Nobara 38 引入了特定的 I/O 调度程序。NVMe 设备将使用 “none”SSD 将使用 “mq-deadline”HDD/机械驱动器将使用 “bfq”。这些规则可确保每种设备类型以其最佳效率运行。
在桌面环境方面Nobara 38 默认提供自定义主题的 GNOME 桌面,但用户也可以选择标准 GNOME 和 KDE 版本。这种灵活性允许用户根据自己的喜好个性化他们的计算体验。
Nobara 38 还对几个关键组件进行了更新。值得注意的是GNOME 44 融入了基于 Mutter 44 更新和重新构建的可变刷新率VRR补丁提供了更流畅的视觉体验。GStreamer 1.22 已修补了 AV1 支持,可实现更好的多媒体播放,并且 OBS-VAAPI 和 AMF AV1 支持也已启用,尽管后者需要 AMD 的专业编码器。
Mesa 图形库基于 LLVM 15 构建,而不是 Fedora 当前的 LLVM 16以避免与 Team Fortress 2 的兼容性问题。此外Mesa 还进行了修补以启用 VAAPI AV1 编码支持,从而增强了视频编码功能。
Nobara Package Manager现在称为 yumex在 Nobara 38 中得到了重大改进。它现在拥有管理 Flatpak 的能力,为用户提供了更全面的软件管理解决方案。此外,软件包更新也得到了简化,引入了“更新系统”按钮,方便系统更新。
Blender 是流行的开源 3D 创建套件,已在 Nobara 38 中进行了修补,以使用 `WAYLAND_DISPLAY=""` 环境变量启动。这解决了菜单在 Wayland 下渲染不正确并妨碍可用性的问题,确保用户获得流畅的 Blender 体验。
Nautilus 是 GNOME 中的默认文件管理器,现在允许用户直接从右键菜单中以管理员身份执行文件和打开文件夹。此功能提供了一种执行管理任务的便捷方法,无需执行其他步骤。
在 Flatpak 方面Nobara 38 删除了 Fedora Flatpak 仓库,因为它们基本上未使用。建议升级到 Nobara 38 的用户删除从 Fedora 仓库安装的所有 Flatpak然后从 Flathub 仓库重新安装它们。Flathub flatpak 仓库现在是 Nobara 38 中的默认仓库,为系统和用户安装提供了更广泛的应用选择。此外,还实施了一种临时方案来解决最近与用户更新相关的崩溃问题。
为了增强整体用户体验Nobara 欢迎应用现在将 Davinci Resolve 向导作为可选步骤提供。这简化了 Davinci Resolve 的设置过程,并确保用户可以轻松地将软件集成到他们的工作流程中。
除了这些显著的变化之外Nobara 38 还包括 Fedora 38 中存在的所有其他软件包更新和改进。
要下载 Nobara 38 并探索其新功能,请访问 Nobara Project 官方网站。
> **[下载 Nobara 38 KDE][3]**
> **[下载 Nobara 38 GNOME][4]**
参考自官方 [通告][5]。
--------------------------------------------------------------------------------
via: https://debugpointnews.com/nobara-38/
作者:[arindam][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://debugpointnews.com/author/dpicubegmail-com/
[b]: https://github.com/lkxed/
[1]: https://debugpointnews.com/fedora-38-release/
[2]: https://debugpointnews.com/wp-content/uploads/2023/06/Nobara-38-Desktop.jpg
[3]: https://nobara-images.nobaraproject.org/Nobara-38-KDE-2023-06-25.iso
[4]: https://nobara-images.nobaraproject.org/Nobara-38-GNOME-2023-06-25.iso
[5]: https://nobaraproject.org/2023/06/25/june-25-2023/

View File

@@ -0,0 +1,360 @@
[#]: subject: "15 Best GTK Themes for Ubuntu and Other Distros"
[#]: via: "https://www.debugpoint.com/best-gtk-themes/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15977-1.html"
15 个最佳 GTK 主题
======
![][0]
> 我们为各种 Linux 发行版提供了一个全新的最佳 GTK 主题列表。
桌面外观在你的 Linux 整体体验中起着重要作用。GTK 主题提供了一种简单而强大的方式来定制你的桌面环境的外观。应用 GTK 主题使你可以更改颜色、窗口装饰和整体样式,以适应你的喜好。
除了 KDE Plasma 和 LXQt 之外,大多数受欢迎的桌面环境都基于 GTK。因此了解当今最好的 GTK 主题是很重要的。
在 Linux 上安装 GTK 主题相对简单。安装说明通常在主题的官方网站上。通常,它包括下载主题文件并将它们(提取后)放置在主目录下的 `~/.themes` 文件夹中。
让我们深入了解在 2023 年最流行的前 15 个 GTK 主题。
### 2023 年最佳 GTK 主题
#### Orchis
Orchis 是一款备受推崇的 GTK 主题,因其清新独特的设计而广受欢迎。受到 macOS Big Sur 外观的启发Orchis 为 Linux 桌面带来了流畅而现代的外观。
Orchis 因其将 macOS Big Sur 的优雅引入 Linux 生态系统而受到认可。通过结合现代设计和 Fluent Design 语言的元素Orchis 提供了一个视觉吸引力和一致性的用户界面增强了整体桌面体验。无论你喜欢浅色还是深色变体Orchis 都为你的 Linux 桌面提供了一种清新而精致的外观。
![Orchis 主题][1]
> **注意**:该主题支持 libadwaita/GTK4 主题。因此,适用于 GNOME 40+ 桌面。
你可以从下面的页面下载并获取安装说明。
> **[下载 Orchis 主题][2]**
#### WhiteSur
WhiteSur 是一个受到 macOS Big Sur 流畅设计启发的 GTK 主题。以下是其主要特点:
- 采用了 macOS Big Sur 的美学设计,带有圆角和半透明窗口。
- 提供了浅色和深色模式以满足不同偏好。
- 在基于 GTK 的应用程序中保持一致的设计。
- 注重细节,具有平滑动画和清晰的阴影。
- 可自定义选项,包括强调色、窗口装饰和按钮样式。
![WhiteSur GTK 主题][3]
WhiteSur 兼容多种 Linux 桌面环境,如 GNOME、Xfce 和 Cinnamon使其能够受到广大用户的喜爱。通过 WhiteSur 干净统一的界面,在你的 Linux 桌面上体验 macOS Big Sur 的优雅。
> **注意**:该主题还支持 GTK4/libadwaita 主题。
你可以从下面的页面下载主题并获取安装说明。
> **[下载 WhiteSur 主题][4]**
#### Vimix
Vimix 是一款受欢迎的 GTK 主题,为 Linux 桌面环境提供时尚现代的外观。以下是它的主要特点:
- Vimix 采用了时尚现代的设计风格,具有扁平界面、简洁线条和细微渐变。
- 该主题提供了多种颜色变体,包括浅色的 Vimix Light 和深色的 Vimix Dark。
- Vimix 兼容多种 Linux 桌面环境,包括 GNOME、Xfce、Cinnamon 等,适用于各种 Linux 用户。
![Vimix 主题][5]
Vimix 通过现代设计元素的结合、颜色的多样性以及与各种桌面环境的兼容性而受到欢迎。其时尚的外观和自定义选项使其成为寻求视觉上愉悦和一致用户界面的 Linux 用户的绝佳选择。
> **注意**:它支持现代的 GTK4/libadwaita 主题。
你可以从下面的页面下载 Vimix 主题。
> **[下载 Vimix 主题][6]**
#### Prof-GNOME-theme
Prof-GNOME-theme 是一个著名的 GTK 主题,为 Linux 桌面环境(特别是 GNOME带来了专业而精致的外观。以下是其主要特点
- Prof-GNOME-theme 采用了简洁而专业的设计,呈现出极简主义的风格、优雅的线条和精致的美学。
- 该主题采用了细腻而优雅的调色板,专注于中性色调和柔和的变化,营造出宁静而专业的氛围。
- 该主题确保在基于 GTK 的应用程序中保持一致,为整个桌面环境提供了协调和和谐的体验。
![Prof-GNOME 主题 - 2022 年 GNOME 主题][7]
Prof-GNOME-theme 受到专业人士和欣赏干净精致桌面环境的用户的青睐。它注重细节,专注于专业主义,使它成为那些寻求精致而优雅外观的 Linux 桌面用户的绝佳选择。
你可以从下面的页面下载该主题并获取安装说明:
> **[下载 Prof-GNOME 主题][8]**
#### Ant
Ant 是一款受欢迎的 GTK 主题,以其简洁和极简主义的设计而闻名。其主要特点包括:
- 清爽而扁平的美学,带有微妙的阴影。
- 一致且清晰的图标。
- 色彩平衡而悦目。
- 支持浅色和深色变体。
- 与 GNOME 桌面环境无缝集成。
![Ant 主题][9]
用户可以在其 Linux 系统上享受到 Ant 主题带来的现代且视觉上愉悦的体验。其简约和优雅外观,使其成为寻求 GTK 应用程序和桌面的精致外观的人士的首选。
你可以从下面的页面下载 Ant 主题。
> **注意**:该主题**不支持** GTK4/libadwaita。
> **[下载 Ant 主题][10]**
#### Flat Remix
Flat Remix 是一款备受赞誉的 GTK 主题,为 Linux 桌面提供了清新现代的外观。它的主要特点包括:
- 扁平和极简主义的设计,色彩鲜明。
- 在基于 GTK 的应用程序中保持一致和统一的外观。
- 全面的图标集,提供精细的视觉体验。
- 支持浅色和深色变体。
![Flat Remix 主题][11]
Flat Remix 为 Linux 桌面环境带来了愉悦的触感,提升了整体美学和用户体验。其鲜明的色彩和协调的设计使其受到喜欢清洁和现代界面的用户的欢迎。
> **注意**:该主题**不支持** GTK4/libadwaita。
你可以从下面的页面下载 Flat Remix 主题。
> **[下载 Flat Remix 主题][12]**
#### Fluent
Fluent GTK 主题是一款现代时尚的主题,受到了微软的 Fluent Design System 的启发。以下是其主要特点:
- 光滑和精致的外观,融入了 Fluent Design 的深度、动态和透明度原则。
- 基于 Fluent 的图标提供了一致和统一的外观。
- 与基于 GTK 的应用程序无缝集成,提供一致的用户体验。
- 支持浅色和深色模式,允许用户个性化他们的桌面。
- 持续开发和定期更新,确保与最新的 GTK 版本兼容。
![Fluent GTK 主题][13]
Fluent GTK 主题为 Linux 桌面带来了微软设计的优雅风采,吸引了欣赏现代和精致视觉体验的用户。其遵循 Fluent Design 指南并持续发展,使其成为寻求现代和精致 GTK 主题的人士的理想选择。
> **注意**:该主题支持 GTK4/libadwaita 主题。
你可以从下面的页面下载 Fluent GTK 主题并获取安装说明。
> **[下载 Fluent GTK 主题][14]**
#### Grvbox
Grvbox 是一款受 Vim 著名配色方案 [gruvbox][15] 启发的热门 GTK 主题。以下是其主要特点:
- 温暖复古的调色板让人想起老式终端界面。
- 经过精心设计,提供舒适和愉悦的视觉体验。
- 提供浅色和深色变体,让用户选择其喜好的风格。
- 与基于 GTK 的应用程序无缝集成,确保一致和统一的外观。
- 定期更新和社区支持,确保与最新的 GTK 版本兼容。
![Gruvbox GTK 主题][16]
Grvbox 主题为 Linux 桌面带来了怀旧的魅力,唤起了熟悉和简约的感觉。其精心选择的颜色和注重细节,使其受到那些欣赏基于 GTK 的应用程序和桌面环境的复古魅力的爱好者的喜爱。
> **注意**:该主题支持 GTK4/libadwaita 主题。
你可以从下面的页面获取 Grvbox 主题的下载和安装说明:
> **[下载 Grvbox 主题][17]**
#### Graphite
Graphite 是适用于基于 GTK 的桌面环境的深色主题。它旨在简约而优雅,非常适合希望拥有干净、无干扰界面的用户。
Graphite 主题基于 Adwaita 主题并拥有许多相同的功能。但是Graphite 具有更暗的色彩调色板和更加简约的设计。
![Graphite GTK 主题][18]
如果你正在寻找一款既简约又优雅的深色主题,那么 Graphite 主题是一个很好的选择。它易于安装和使用,并与许多桌面环境兼容。
几个月前,我对该主题进行了评估,你可能会对此感兴趣:[Graphite 主题概述][19]。
**注意**:该主题支持 GTK4/libadwaita。
你可以使用下面页面上的说明安装此主题。
> **[Graphite GTK 主题][20]**
#### Material
Material 是一款受到 Material for Neovim 和 Graphite 主题(上面有提到)启发的广为人知的 GTK 主题。以下是其主要特点:
- 清爽现代的美学,采用扁平设计元素和鲜明色彩。
- 一致且协调的图标设计,符合 Material Design 的指南。
- 提供浅色和深色变体,让用户自定义视觉体验。
- 与基于 GTK 的应用程序无缝集成,确保统一的外观和感觉。
- 定期更新和社区支持,确保与最新的 GTK 版本兼容。
![Material GTK 主题][21]
Material 主题将流行的 Material Design 风格带到了 Linux 桌面,提供了视觉上令人愉悦且直观的用户体验。凭借其时尚的设计和与各种 GTK 环境的兼容性Material 主题受到喜欢现代和和谐界面的用户的欢迎。
> **注意**:该主题支持现代的 GTK4/libadwaita 主题。
你可以从下面的页面下载并安装 Material 主题:
> **[下载 Material 主题][22]**
#### Arc
Arc 主题是 Linux 社区中受欢迎的 GTK 主题,以其流线型和现代的设计而闻名。它提供了干净、简约的外观,与各种桌面环境(特别是 GNOME相得益彰。以下是 Arc 主题的一些主要特点:
- 美观的设计,拥有平滑曲线和扁平界面
- 多种颜色变体,包括 Arc、Arc-Darker 和 Arc-Dark
- 可更改按钮样式、标题栏布局和窗口边框的选项
Arc 主题将美学和功能性融为一体,成为许多寻求视觉上愉快和一致用户界面的 Linux 用户的首选。
![Ubuntu GNOME 中的 Arc Darker 主题][23]
> 然而,当前版本的主题**不支持**现代的 GTK4/libadwaita。
你可以从下面的官方仓库中下载 Arc 主题(这是原始 Arc 主题的另一个分支):
> **[下载 Arc 主题][25]**
此外,在 Ubuntu 及相关发行版上,你可以使用以下命令进行安装:
```
sudo apt install arc-theme
```
#### Nordic
Nordic 是一款备受赞誉的 GTK 主题,受到北欧地区宁静景色的启发。以下是其主要特点:
- 细腻而舒缓的调色板让人想起极光和雪景。
- 浅色和深色元素的和谐组合,提供最佳的对比度和可读性。
- 高度精心设计的图标完美地补充了整体美学。
- 跨平台兼容,使用户可以在各种基于 GTK 的环境中享受 Nord 主题。
- 定期更新和社区支持,确保持续的改进和兼容性。
![Nordic 主题][26]
Nordic 主题为 Linux 桌面带来了宁静和优雅的氛围,让用户沉浸在一个视觉上迷人的环境中。其精心选择的颜色和对细节的关注,使其在寻求视觉上愉快和放松的 GTK 主题的 Linux 系统用户中广受欢迎。
它还附带了一个适用于 Firefox 的主题,以获得更好的外观和集成。
> **注意**:该主题支持现代的 GTK4/libadwaita 主题。
你可以从下面的页面下载 Nordic 主题:
> **[下载 Nordic 主题][27]**
#### Adapta
Adapta 是一款备受赞誉的 GTK 主题,以其多功能性和现代设计而闻名。
Adapta 主题增强了 Linux 桌面的时尚和适应性风格,允许用户在保持精致和统一外观的同时个性化他们的界面。它的灵活性和持续发展使其成为那些寻求现代且可定制的 GTK 主题的人们的首选。
然而,这个优秀主题的开发已经**停止**了多年。你仍然可以从下面的官方页面下载并使用该主题:
> **[下载 Adapta 主题][28]**
#### Equilux
Equilux 是一款适用于基于 GTK+ 的桌面环境的暗色主题。它的设计旨在中性且不分散注意力,非常适合在低光环境下使用或对亮色敏感的人士。
Equilux 主题基于 Materia 主题并拥有许多相同的功能。然而Equilux 使用了更柔和的调色板,使其更适合于暗环境。
![Equilux 主题][29]
如果你正在寻找一款既中性又不分散注意力的暗色主题,那么 Equilux 主题是一个很好的选择。它易于安装和使用,并且与各种桌面环境兼容。
> **注意**:该主题的开发已经 [停止][30]。不会有进一步的更新。
你可以在下面的页面上找到该主题的当前版本:
> **[下载 Equilux 主题][31]**
#### Paper
Paper 是一款广为人知的 GTK 主题,以其简约而优雅的设计而闻名。以下是其主要特点:
- 干净而扁平的视觉风格,具有微妙的阴影效果。
- 精心设计的图标提供了一致且精致的外观。
- 提供多种颜色变体,包括浅色和深色主题。
- 维护良好且积极开发,确保与最新的 GTK 版本兼容。
- 支持 GNOME、Xfce 和 Unity 等流行的桌面环境。
![GNOME 中的 Paper 主题][32]
Paper 以其极简的风格和注重细节的特点,为用户提供了视觉上愉悦和和谐的桌面体验。其多样的颜色选项和与多种桌面环境的兼容性,使其成为寻求时尚和现代外观的 Linux 爱好者的热门选择。
> **注意**:该主题的开发在 2016 年已**结束**。不支持现代的 GTK4+。
> **[下载 Paper 主题][33]**
### 关于 Adwaita 的说明
流行的 Adwaita 主题是最好和最稳定的 GTK 主题之一。我之前没有将其列入上述列表的原因是它已经作为默认主题包含在许多发行版中,用户已经在其系统中安装了该主题。
### 总结
上述 GTK 主题代表了各种风格的不同口味,从现代设计到充满活力和丰富多彩的美学。无论你偏好极简的外观还是视觉上惊艳的界面,都可以找到适合你口味的 GTK 主题。我鼓励你尝试上述主题并搭配各种图标和鼠标主题,以获得更好的体验。
部分图片来源归属于各自的作者。
*题图MJ/cf5c27f6-ea23-4d9b-a311-168c45d9ea92*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/best-gtk-themes/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://www.debugpoint.com/wp-content/uploads/2023/06/Orchis-Theme.jpg
[2]: https://github.com/vinceliuice/Orchis-theme
[3]: https://www.debugpoint.com/wp-content/uploads/2023/06/WhiteSur-GTK-Theme.jpg
[4]: https://github.com/vinceliuice/WhiteSur-gtk-theme
[5]: https://www.debugpoint.com/wp-content/uploads/2023/06/Vimix-Theme.jpg
[6]: https://github.com/vinceliuice/vimix-gtk-themes
[7]: https://www.debugpoint.com/wp-content/uploads/2022/05/Prof-GNOME-Theme.jpg
[8]: https://www.gnome-look.org/p/1334194
[9]: https://www.debugpoint.com/wp-content/uploads/2023/06/Ant-Theme.jpg
[10]: https://www.gnome-look.org/p/1099856/
[11]: https://www.debugpoint.com/wp-content/uploads/2023/06/Flat-Remix-Theme-scaled.jpg
[12]: https://drasite.com/flat-remix-gnome
[13]: https://www.debugpoint.com/wp-content/uploads/2023/06/Fluent-GTK-Theme.jpg
[14]: https://github.com/vinceliuice/Fluent-gtk-theme
[15]: https://github.com/morhetz/gruvbox
[16]: https://www.debugpoint.com/wp-content/uploads/2023/06/Gruvbox-GTK-Theme-1600x3187.jpg
[17]: https://github.com/Fausto-Korpsvart/Gruvbox-GTK-Theme
[18]: https://www.debugpoint.com/wp-content/uploads/2023/06/Graphite-gtk-theme-1669x2048.jpg
[19]: https://www.debugpoint.com/graphite-theme-gnome/
[20]: https://github.com/vinceliuice/Graphite-gtk-theme
[21]: https://www.debugpoint.com/wp-content/uploads/2023/06/Material-GTK-Theme-1600x3205.jpg
[22]: https://github.com/Fausto-Korpsvart/Material-GTK-Themes
[23]: https://www.debugpoint.com/wp-content/uploads/2022/05/Arc-Darker-Theme-in-Ubuntu-GNOME-1.jpg
[24]: https://github.com/horst3180/arc-theme
[25]: https://github.com/jnsh/arc-theme
[26]: https://www.debugpoint.com/wp-content/uploads/2023/06/Nordic-theme.jpg
[27]: https://github.com/EliverLara/Nordic
[28]: https://github.com/adapta-project/adapta-gtk-theme
[29]: https://www.debugpoint.com/wp-content/uploads/2023/06/Equilux-Theme.jpg
[30]: https://github.com/ddnexus/equilux-theme
[31]: https://www.gnome-look.org/p/1182169/
[32]: https://www.debugpoint.com/wp-content/uploads/2018/09/Paper-Theme-in-GNOME.png
[33]: https://github.com/snwh/paper-gtk-theme
[0]: https://img.linux.net.cn/data/attachment/album/202307/07/183102d63s364i225tpwho.jpg

View File

@@ -0,0 +1,256 @@
[#]: subject: "Using cat Command in Linux"
[#]: via: "https://itsfoss.com/cat-command/"
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16025-1.html"
在 Linux 中使用 cat 命令
======
![][0]
> `cat` 命令的用途不仅仅是显示文件内容。
`cat` 命令用于打印文本文件的文件内容。至少,大多数 Linux 用户都是这么做的,而且没有什么问题。
`cat` 实际上代表 “<ruby>连接<rt>concatenate</rt></ruby>”,创建它是为了 [合并文本文件][1]。但只要有一个参数,它就会打印文件内容。因此,它是用户在终端中读取文件而无需任何其他选项的首选。
### 在 Linux 中使用 cat 命令
要使用 `cat` 命令,你必须遵循给定的命令语法:
```
cat [options] Filename(s)
```
这里:
- `[options]` 用于修改 `cat` 命令的默认行为,例如使用 `-n` 选项获取每行的数字。
- `Filename` 是你输入要使用的文件的文件名的位置。
为了简单起见,我将在本指南中使用名为 `Haruki.txt` 的文本文件,其中包含以下文本行:
```
Hear the Wind Sing (1979)
Pinball, 1973 (1980)
A Wild Sheep Chase (1982)
Hard-Boiled Wonderland and the End of the World (1985)
Norwegian Wood (1987)
Dance Dance Dance (1990)
South of the Border, West of the Sun (1992)
The Wind-Up Bird Chronicle (1994)
Sputnik Sweetheart (1999)
Kafka on the Shore (2002)
After Dark (2004)
1Q84 (2009-2010)
Colorless Tsukuru Tazaki and His Years of Pilgrimage (2013)
Men Without Women (2014)
Killing Commendatore (2017)
```
那么,在没有任何选项的情况下使用时,输出会是什么? 好吧,让我们看一下:
```
cat Haruki.txt
```
![use cat command in Linux][2]
正如你所看到的,它打印了整个文本文件!
但你可以做的远不止这些。让我向你展示一些实际例子。
#### 1、创建新文件
大多数 Linux 用户使用 `touch` 命令来 [创建新文件][3],但使用 `cat` 命令也可以完成相同的操作!
在这种场景下,`cat` 命令比 `touch` 命令有一个优势,因为你可以在创建文件时向文件添加文本。听起来很酷。不是吗?
为此,你需要使用 `cat` 命令,将文件名附加到 `>` 后面,如下所示:
```
cat > Filename
```
例如,在这里,我创建了一个名为 `NewFile.txt` 的文件:
```
cat > NewFile.txt
```
当你这样做了,就会有一个闪烁的光标要求你写一些东西,最后,你可以使用 `Ctrl + d` 来保存更改。
**如果你想创建一个空文件,则只需按 `Ctrl + d` 而不进行任何更改。**
![Using cat command][4]
这就好了!现在,你可以使用 `ls` 命令来显示 [当前工作目录的内容][5]
![use the ls command to list the contents of the current working directory][6]
#### 2、将文件内容复制到另一个文件
考虑一个场景,你要将 `FileA` 的文件内容重定向到 `FileB`
当然,你可以复制和粘贴。但是如果有几百或几千行怎么办?
简单。你可以使用 `cat` 命令来重定向数据流。为此,你必须遵循给定的命令语法:
```
cat FileA > FileB
```
> 🚧 如果使用上述语法重定向文件内容,它将删除 `FileB` 的文件内容,然后重定向 `FileA` 的文件内容。
例如,我将使用两个文本文件 `FileA``FileB`,其中包含以下内容:
![check the file contents using the cat command][7]
现在,如果我使用从 `FileA``FileB` 的重定向,它将删除 `FileB` 的数据,然后重定向 `FileA` 的数据:
```
cat FileA > FileB
```
![redirect the file content using the cat command][8]
同样,你可以对多个文件执行相同的操作:
```
cat FileA FileB > FileC
```
![redirect file content of multiple files using the cat command][9]
可以看到,上面的命令删除了 `FileC` 的数据,然后重定向了 `FileA``FileB` 的数据。
#### 3、将一个文件的内容附加到另一个文件
有时你想要将数据附加到现有数据,在这种情况下,你必须使用 `>>` 而不是单个 `>`
```
cat FileA >> FileB
```
例如,在这里,我将把两个文件 `FileA``FileB` 重定向到 `FileC`
```
cat FileA.txt FileB.txt >> FileC.txt
```
![redirect file content without overriding using the cat command][10]
如你所见,它保留了 `FileC.txt` 的数据,并将数据附加在末尾。
> 💡 你可以使用 `>>` 向现有文件添加新行。使用 `cat >> filename` 并开始添加所需的文本,最后使用 `Ctrl+D` 保存更改。
#### 4、显示行数
你可能会遇到这样的情况,你想查看行数,这可以使用 `-n` 选项来实现:
```
cat -n File
```
例如,在这里,我将 `-n` 选项与 `Haruki.txt` 一起使用:
![get the number of the lines in the cat command][11]
#### 5、删除空行
在文本文档中留下多个空白行? `cat` 命令将为你修复它!
为此,你所要做的就是使用 `-s` 标志。
但使用 `-s` 标志有一个缺点。你仍然留有一行空白:
![remove blank lines with the cat command][12]
正如你所看到的,它有效,但结果接近预期。
那么如何删除所有空行呢? 通过管道将其传递给 `grep` 命令:
```
cat File | grep -v '^$'
```
这里,`-v` 标志将根据指定的模式过滤掉结果,`'^$'` 是匹配空行的正则表达式。
以下是我在 `Haruki.txt` 上使用它时的结果:
```
cat Haruki.txt | grep -v '^$'
```
![remove all the blank lines in text files using the cat command piped with grep regular expression][13]
当获得完美的输出,你可以将其重定向到文件以保存输出:
```
cat Haruki.txt | grep -v '^$' > File
```
![save output of cat command by redirection][14]
### 这就是你到目前为止所学到的
以下是我在本教程中解释的内容的快速摘要:
| 命令 | 描述 |
| :- | :- |
| `cat <Filename>` | 将文件内容打印到终端。 |
| `cat >File` | 创建一个新文件。 |
| `cat FileA > FileB` | `FileB` 的文件内容将被 `FileA` 覆盖。|
| `cat FileA >> FileB` | `FileA` 的文件内容将附加到 `FileB` 的末尾。|
| `cat -n File` | 显示行数,同时省略文件的文件内容。 |
| `cat File | more` | 将 `cat` 命令通过管道连接到 `more` 命令以处理大文件。请记住,它不能让你向上滚动! |
| `cat File | less` | 将 `cat` 命令通过管道传输到 `less` 命令,这与上面类似,但它允许你双向滚动。|
| `cat File | grep -v '^$'` | 从文件中删除所有空行。|
### 🏋️ 练习时间
如果你学到了新东西,用不同的可能性来执行它是最好的记忆方式。
为此,你可以使用 `cat` 命令进行一些简单的练习。它们将是超级基本的,就像 `cat` 一样是[最基本的命令之一][15]。
出于练习目的,你可以 [使用 GitHub 上的文本文件][16]。
- 如何使用 `cat` 命令创建空文件?
-`cat` 命令生成的输出重定向到新文件 `IF.txt`
- 能否将三个或更多文件输入重定向到一个文件? 如果是,该如何做?
*题图MJ/f06c9b9c-689e-4a67-abe9-0487e26bd34b*
--------------------------------------------------------------------------------
via: https://itsfoss.com/cat-command/
作者:[Sagar Sharma][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/sagar/
[b]: https://github.com/lkxed/
[1]: https://linuxhandbook.com:443/merge-files/
[2]: https://itsfoss.com/content/images/2023/06/use-cat-command-in-Linux.png
[3]: https://itsfoss.com/create-files/
[4]: https://itsfoss.com/content/images/2023/06/Cat.svg
[5]: https://itsfoss.com/list-directory-content/
[6]: https://itsfoss.com/content/images/2023/06/use-the-ls-command-to-list-the-contents-of-the-current-working-directory.png
[7]: https://itsfoss.com/content/images/2023/06/check-the-file-contents-using-the-cat-command.png
[8]: https://itsfoss.com/content/images/2023/06/redirect-the-file-content-using-the-cat-command.png
[9]: https://itsfoss.com/content/images/2023/06/redirect-file-content-of-multiple-files-using-the-cat-command.png
[10]: https://itsfoss.com/content/images/2023/06/redirect-file-content-without-overriding-using-the-cat-command.png
[11]: https://itsfoss.com/content/images/2023/06/get-the-number-of-the-lines-in-the-cat-command.png
[12]: https://itsfoss.com/content/images/2023/06/remove-blank-lines-with-the-cat-command.png
[13]: https://itsfoss.com/content/images/2023/06/remove-all-the-blank-lines-in-text-files-using-the-cat-command-piped-with-grep-regular-expression.png
[14]: https://itsfoss.com/content/images/2023/06/save-output-of-cat-command-by-redirection.png
[15]: https://learnubuntu.com:443/top-ubuntu-commands/
[16]: https://github.com:443/itsfoss/text-files
[0]: https://img.linux.net.cn/data/attachment/album/202307/23/144250ljc3zwgjt7llznxj.jpg

View File

@@ -0,0 +1,83 @@
[#]: subject: "Fedora Workstation 39 May Feature Anaconda Web UI Installer by Default"
[#]: via: "https://news.itsfoss.com/fedora-workstation-39-webui/"
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15963-1.html"
Fedora 工作站 39 可能会默认使用 Anaconda Web UI 安装程序
======
> 新的 Anaconda Web UI 安装程序可能会随 Fedora 工作站 39 一同推出。
![fedora 39 anaconda][1]
长期以来Fedora 的安装体验一直未曾改变。
然而,这个新的 Web UI 安装程序已经开发了一年多的时间,现在离正式实现的目标更近了。
**为什么现在是时候了?**
在我们上次 [了解][2] 即将到来的 **Anaconda WebUI 安装程序**时,它的进展相当不错。
而现在,它已经提交了一份 **变更提案**,旨在将这个安装程序添加到 Fedora 工作站中,以提供现代化的用户体验。该提案正等待 Fedora 工程和指导委员会FESCo的审查。
让我们再次来看看即将到来的安装程序和提案,以及可以期待在 Fedora 发布中看到它的时间。
### Anaconda WebUI概述 ⭐
![anaconda webui 安装程序的预发布屏幕截图][3]
**目前 Fedora 使用的旧的安装程序是基于 GTK3 的**,在许多情况下已被证明效率低下和不安全。新的 Anaconda WebUI 安装程序旨在解决这个问题。
它使用了一个由 Anaconda 团队开发的 **基于 PatternFly 的现代后端和用户界面**
后端由 [Python][4]、[DBus][5]、[Cockpit][6]、[React][7] 和 [PatternFly][8] 组成,旨在从一开始解决许多已知的用户体验问题,并为一致的安装体验铺平了道路。
变更提案还提到了新 UI 的一些关键亮点,包括:
- 向导式解决方案而非中心轮毂式。
- 新的欢迎屏幕用于选择语言(将从系统中配置的语言预先选择)。
- 时区和日期配置。
- 磁盘选择。
- 引导式分区。
- 配置审核。
- 安装进度。
- 内置帮助。
主要关注的重点是向用户提供类似向导的体验,提供更多信息,并帮助他们更好地完成安装过程。
这个新安装程序添加了很多功能,听起来是一个很好的用户体验改变! 😃
**那么,我们可以期待什么时候呢?**
由于这个变更需要经过 FESCo 的批准,一切取决于投票过程的进行。
但是,我相当有信心这个变更会得到批准,因为 [变更提案][9] 已经设定了 **在 Fedora 39 中发布新的 Anaconda WebUI 安装程序** 的目标。
💬 这个变更批准只是时间问题;您对此有什么看法?
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/fedora-workstation-39-webui/
作者:[Sourav Rudra][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/sourav/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/06/fedora-new-anaconda-webui-default.png
[2]: https://news.itsfoss.com/fedora-new-web-ui-install-dev/
[3]: https://news.itsfoss.com/content/images/2023/06/Anaconda_Web_UI_Installer.jpg
[4]: https://www.python.org:443/
[5]: https://www.freedesktop.org:443/wiki/Software/dbus/
[6]: https://cockpit-project.org:443/
[7]: https://reactjs.org:443/
[8]: https://www.patternfly.org:443/
[9]: https://fedoraproject.org:443/wiki/Changes/AnacondaWebUIforFedoraWorkstation

View File

@@ -0,0 +1,123 @@
[#]: subject: "Zorin OS Upgrader is Now Available to Give You Hassle-Free Update Experience"
[#]: via: "https://news.itsfoss.com/zorin-os-upgrader/"
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15994-1.html"
Zorin OS 升级程序现已推出,为你提供无忧的更新体验
======
> 你终于可以升级 Zorin OS 版本而无需重新安装。虽迟但到。
![zorin OS][1]
Zorin OS 无疑是 [最美丽的 Linux 发行版][2] 之一。它基于 Ubuntu LTS以全面的软件包为用户提供类似但不限于 Windows 的体验。
然而,它缺乏无缝升级方式。
在最近的一份公告中Zorin OS 背后的人们终于推出了一个新的更新程序来处理该操作系统的所有升级工作! 🤩
考虑为什么它是初学者的不错选择之一的另一个原因是什么? 我想是这样...
> **[Zorin OS 是初学者理想选择的 5 个原因][2a]**
因此,事不宜迟,让我们简单地看一下。
### Zorin OS 更新程序:初步印象 ⭐
![a picture of the zorin os updater banner][3]
Zorin OS 更新程序的到来是理所当然的,因为多年来开发人员**收到了来自用户的许多请求**,希望能有这样一个的**一站式**解决方案。
以前,想要切换到较新版本或更改变体的用户必须完全重新安装 Zorin OS并且必须从头开始设置系统。
现在,不用了!
Zorin OS 更新程序是一个简洁的解决方案,允许用户**轻松执行主要版本或变体升级**,而无需全新安装 Zorin OS。
**例如:** 假设你使用的是 Zorin OS 15 Core。你可以使用此应用升级到 Zorin OS 16 Core 甚至 Zorin OS 16 Pro。
好了,继续。
让我们看看更新程序及其工作原理。我们还在本文的底部向你展示了如何使用它。
当你启动该应用时,你将看到一个页面,其中包含 Zorin OS 安装的当前版本/变体以及可用升级的列表。
![a screenshot of the zorin os updater home screen][4]
当你继续操作时,你可以选择包含所有附加功能的正常安装,也可以选择包含核心程序的最小安装。
![a screenshot of the zorin os updater's installation type selection screen][5]
**如果你要升级到 Zorin OS Pro**,你必须输入你的电子邮件地址和支持代码才能继续升级。
![a screenshot of the zorin os updater's order details screen][6]
之后,你将看到开始升级的最终提示页面。
他们建议你提前备份数据。如果在升级过程中出现问题,你可以回退。
![a screenshot of the zorin os updater's start the upgrade screen][7]
升级过程开始时,会显示一个进度页面,其中所有重要的升级阶段都会高亮显示。
![a screenshot of the zorin os updater's upgrade progress screen][8]
一切设置完毕后,你可以重启系统以完成操作系统升级过程。
![a screenshot of the zorin os updater's final reboot system screen][9]
### 📖 如何访问 Zorin OS 更新程序
你所需要做的就是**更新你的系统**以安装新的 Zorin OS 升级工具。
但是,它**目前处于 Beta 测试**,尚未作为稳定的工具提供。你可以在接下来的几周内期待它。
> 通过 Zorin 菜单 → <ruby>系统工具<rt>System Tools</rt></ruby> → <ruby>软件更新程序<rt>Software Updater</rt></ruby> 更新你的系统
你可以尝试手动安装测试版,但需要自行承担风险。
打开终端并输入以下命令:
```
sudo apt update
sudo apt install zorin-os-upgrader
```
然后,要开始升级过程,请启动“<ruby>升级 Zorin OS<rt>Upgrade Zorin OS</rt></ruby>”应用,然后按照屏幕上的说明进行操作。
**对于 Zorin OS 15 的用户:** 如果你在首次启动升级应用时没有看到任何升级选项,那么需要在终端中运行以下命令:
```
gsettings set com.zorin.desktop.upgrader show-test-upgrades true
```
你可以阅读 [官方帮助指南][10] 以获取更多信息。
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/zorin-os-upgrader/
作者:[Sourav Rudra][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/sourav/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/06/zorin-os-updater.jpg
[2]: https://itsfoss.com:443/beautiful-linux-distributions/
[2a]: https://news.itsfoss.com/why-zorin-os-beginners/
[3]: https://news.itsfoss.com/content/images/2023/06/Zorin_OS_Updater_1.png
[4]: https://news.itsfoss.com/content/images/2023/06/Zorin_OS_Updater_2.jpg
[5]: https://news.itsfoss.com/content/images/2023/06/Zorin_OS_Updater_3.jpg
[6]: https://news.itsfoss.com/content/images/2023/06/Zorin_OS_Updater_4.jpg
[7]: https://news.itsfoss.com/content/images/2023/06/Zorin_OS_Updater_5.jpg
[8]: https://news.itsfoss.com/content/images/2023/06/Zorin_OS_Updater_6.jpg
[9]: https://news.itsfoss.com/content/images/2023/06/Zorin_OS_Updater_7.jpg
[10]: https://help.zorin.com:443/docs/getting-started/upgrade-zorin-os/#upgrading-from-zorin-os-15-or-newer

View File

@@ -0,0 +1,178 @@
[#]: subject: "Why is Kali Linux Preferred by Hackers?"
[#]: via: "https://www.debugpoint.com/why-kali-linux/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15966-1.html"
为什么黑客更喜欢使用 Kali Linux
======
![][0]
> 以下是为什么大多数黑客和渗透测试人员喜欢使用 Kali Linux 的几个原因。
Kali Linux 是一个基于 Debian “测试版” 的 Linux 操作系统,创建于近十年前。在过去几年里,它在黑客和网络安全专业人员中非常流行。随着对数字基础设施的越来越多的依赖和网络威胁的不断增长,网络安全对于普通用户和企业来说变得更加重要。
道德黑客和渗透测试人员在识别漏洞和加强系统安全方面发挥着重要作用。由于 Kali Linux 具备为安全测试和分析而量身定制的全面工具和功能,因此成为他们的首选操作系统。
![带有 Xfce 桌面环境的 Kali Linux][1]
### 概述
[Kali Linux][2] 由 Offensive Security一家美国信息安全公司维护并得到社区中数千名贡献者的支持。它跟随 Debian 的 “测试版” 分支的发展,保持与最新软件包的同步,为黑客们提供了最新模块来进行工作。
此外Kali Linux 支持多种架构,例如 x86、x86-64、armel 和 armhf这有助于黑客在广泛的硬件范围内使用。
使用此发行版的最大优势之一是它适用于多个技术平台,你可以下载和使用。以下是其中一些平台:
- 32 位和 64 位的安装镜像ISO
- 预构建的虚拟机镜像
- ARM 架构镜像
- 用于移动设备的安卓镜像
- Docker 和 LXD 镜像
- 可在各个厂商提供的云中使用
- 只读的 LIVE ISO 镜像
- 可在 Windows 的 Linux 子系统WSL上使用
### 为何它备受青睐
#### 强大的渗透测试工具
Kali Linux 提供了丰富的渗透测试工具,使黑客能够识别并利用漏洞。这些工具包括网络扫描器、密码破解器、无线攻击框架和 Web 应用程序评估工具。这个操作系统内置了如此之多的工具,极大地简化了黑客的工作流程,使他们能够有效专注于目标。
#### 全面的安全评估
使用这个发行版,黑客可以对各种目标进行全面的安全评估。他们可以模拟真实攻击,分析系统弱点,制定有效的安全策略。该操作系统提供了漏洞扫描、网络映射和系统指纹识别等工具,使黑客能够从不同角度评估目标系统的安全状况。
#### 反取证分析和事件响应
Kali Linux 还包括用于数字取证和事件响应的工具。黑客可以利用这些工具来调查安全漏洞,收集证据和分析受损系统。该操作系统支持数据恢复、内存分析和网络取证,有助于进行彻底的调查,并帮助恢复遭受损害的系统。
#### 无线网络审计
由于其固有的弱点无线网络往往是黑客的主要目标。Kali Linux 提供了全面的用于审计和保护无线网络的工具。黑客可以使用这些工具来识别弱加密协议,发现隐藏网络,并进行数据包分析以检测恶意活动。这使得他们能够评估无线网络的安全性并提出缓解策略。
### 大量的工具
以下是默认情况下截至最新版本Kali Linux 提供的一些工具类别的简要列表:
- **信息收集**
- DNS 分析
- IDS/IPS 识别
- 活动主机识别
- 网络和端口扫描器
- OSINT 分析
- 路由分析
- SMB 分析
- SMTP 分析
- SNMP 分析
- SSL 分析
- **漏洞分析**
- 模糊测试工具
- VoIP 工具
- **Web 应用程序分析**
- CMS 和框架识别
- Web 应用程序代理
- Web 爬虫和目录暴力破解
- Web 漏洞扫描器
- **数据库评估**
- SQLite 数据库浏览器
- **密码攻击**
- 离线攻击工具
- 在线攻击工具
- 哈希传递工具
- 密码分析和密码列表
- **无线网络攻击**
- 802.11 无线工具
- 蓝牙攻击工具
- **逆向工程工具**
- Clang
- NASM shell
- **利用工具**
- Metasploit
- Searchsploit
- MSF 载荷生成器
- 社会工程学工具包
- **嗅探和欺骗**
- 网络嗅探器
- 欺骗和中间人攻击
- 后渗透
- **取证**
- 反取证工具
- 取证镜像工具
- PDF 取证工具
- Sleuth Kit 套件
- **报告工具**
- Cutycapt
- Faraday start
- Pipal
- **社会工程学工具**
你可以在详尽的工具门户网站了解更多信息:
> **[访问 Kali Linux 工具门户网站][3]**
![Kali Linux Tools][4]
### 开源特性
黑客偏爱 Kali Linux 的主要原因之一是它的开源特性。作为一款开源操作系统Kali Linux 允许黑客访问和修改源代码以满足其需求。这使得他们可以自由定制系统并添加自己的工具或功能。开源社区还积极参与开发和改进 Kali Linux以确保其与最新的安全技术保持同步。
### 社区支持与合作
Kali Linux 拥有一个庞大的安全专业人员、黑客和爱好者社区。这个社区通过分享知识、开发新工具和为其他用户提供支持来积极合作,以增强操作系统的功能。
可通过论坛、在线教程和社区驱动的文档获取宝贵资源并在需要时寻求帮助,确保使用 Kali Linux 的黑客能够获得支持。
团队还提供了多种培训和学习方式。其中也包括了一个学习路径,供希望在网络安全领域追求职业发展的学生参考,并提供相关认证。
### 定制和灵活性
另一个优点是 Kali Linux 高度的定制和灵活性。黑客可以根据自己的特定需求和喜好来定制操作系统。他们可以按照自己的要求安装和配置工具,创建自定义脚本并构建个性化的工作流程。这种定制水平使得黑客可以优化自己的生产力并简化渗透测试过程。
### 持续更新和改进
Kali Linux 是一个不断更新和改进的操作系统。开发人员和社区成员积极致力于增强现有工具、添加新功能并解决任何安全漏洞。这些更新确保使用 Kali Linux 的黑客可以获得最新的工具和技术,使他们始终处于网络安全进展的前沿。
![Kali Linux 从其自己的源分发软件包][5]
### 道德使用
重要的是要注意Kali Linux 旨在用于道德黑客和安全测试目的。道德黑客利用他们的技能来发现漏洞并保护系统,而不是从事恶意活动。
Kali Linux 倡导对黑客工具的负责和合法使用,强调获得适当授权和遵守道德准则的重要性。该操作系统是网络安全专业人员增强组织安全性、促进更安全的数字环境的强大工具。
简而言之,**请勿将** Kali Linux 用于非法或未经授权的用途。
### 结论
我希望这份概述介绍了 Kali Linux 及其为全球安全专业人员所偏爱的免费开源操作系统的原因。它以 Debian 为基础,配备了数千种工具和便捷的访问方式,使它成为每个人都值得考虑的选择。
你可以在 [官方网站][7] 上下载 Kali Linux。
*题图MJ/95d89a95-50fe-4fdf-a06a-e4287092cee9*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/why-kali-linux/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://www.debugpoint.com/wp-content/uploads/2023/05/Kali-Linux-with-Xfce-Desktop-Environment.jpg
[2]: https://www.kali.org/
[3]: https://www.kali.org/tools/
[4]: https://www.debugpoint.com/wp-content/uploads/2023/05/Kali-Linux-Tools.jpg
[5]: https://www.debugpoint.com/wp-content/uploads/2023/06/Kali-Linux-distribute-packages-from-its-own-sources.jpg
[6]: https://www.debugpoint.com/kali-linux-introduction/
[7]: https://www.kali.org/get-kali/
[0]: https://img.linux.net.cn/data/attachment/album/202307/04/151945ol68v2ez28e6exzq.jpg

View File

@@ -0,0 +1,277 @@
[#]: subject: "How to Install Wine in Ubuntu"
[#]: via: "https://itsfoss.com/install-wine-ubuntu/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "robsean"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16028-1.html"
如何在 Ubuntu 中安装 Wine
======
![][0]
> 想在 Ubuntu 上运行仅限 Windows 的软件Wine 就是你的朋友。学习在 Ubuntu Linux 中安装 Wine。
只要稍加努力,你可以使用 Wine 来 [在 Linux 上运行 Windows 应用程序][1] 。当你必须在 Linux 上运行一个仅有 Windows 版本的应用程序时Wine 是一个你可以尝试的工具。
请注意:**你不能使用 Wine 来运行每一个 Windows 游戏或软件**。请浏览 [已支持的应用程序的数据库][2]。评估为白金级或黄金级的软件更有可能与 Wine 一起平稳的运行。
如果你已经找到一个仅有 Windows 版本的软件,并且 [Wine][3] 也很好地支持它,现在希望使用它,这篇教程将帮助你在 Ubuntu 上安装 Wine 。
> 💡 如果你在此之前已经安装了 Wine ,你应该完全地移除它,以避免一些冲突。此外,你应该参考它的 [下载页面][4] 来获取特定 Linux 发行版的附加说明。
### 在 Ubuntu 上安装 Wine
这里有很多方法来在你的系统上安装 Wine 。几乎所有的 Linux 发行版都在它们的软件包存储库中提供 Wine 。
大多数的时候Wine 的最新稳定版本都可以通过软件包存储库获得。
- 从 Ubuntu 的存储库中安装 Wine简单但是可能不是最新的版本
- 从 Wine 的存储库中安装 Wine稍微复杂一些但是提供最新的版本
请耐心等待,按照步骤逐步安装和 Wine 。这里有一些相关的步骤。
> 🚧 请记住Wine 会安装很多很多的软件包。你将看到一份庞大的软件包列表,安装大小差不多 1.3 GB 。
![Wine download and installed size][5]
#### 方法 1. 从 Ubuntu 安装 Wine简单
Wine 可以在 Ubuntu 的官方存储库中获得,你可以在那里简单地安装它。不过,这种方法获取的版本可能不能最新的。
即使你正在使用一个 64 位的 Ubuntu 安装,你也想要在你的发行版上添加 32 位架构的支持,这将有利于你安装特殊的软件。
输入下面的命令:
```
sudo dpkg --add-architecture i386
```
接下来,安装 Wine 使用:
```
sudo apt update
sudo apt install wine
```
#### 方法 2: 从 Wine 的存储库安装最新的版本
Wine 是一个日新月异的程序。因此,始终建议安装 Wine 的最新稳定版本,以获取更多软件的支持。
首先,移除已存在的 Wine 安装。
步骤 1: 确保添加 32 位架构支持:
```
sudo dpkg --add-architecture i386
```
步骤 2: 下载和添加存储库密钥:
```
sudo mkdir -pm755 /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key
```
步骤 3: 现在,下载 WineHQ 源文件文件。
> 🚧 这个步骤取决于你正在使用的 Ubuntu 或 Mint 的版本。请 [检查你的 Ubuntu 版本][6] 或 [Mint 版本][7] 。在你掌握这些信息后,分别使用针对你的相对应的版本的命令。
针对 **Ubuntu 23.04 Lunar Lobster** ,使用下面的命令:
```
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/lunar/winehq-lunar.sources
```
如果你持有 **Ubuntu 22.04 或 Linux Mint 21.X 系列**,使用下面的命令:
```
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/jammy/winehq-jammy.sources
```
如果你正在运行 **Ubuntu 20.04 或 Linux Mint 20.X 系列**,使用:
```
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/focal/winehq-focal.sources
```
**Ubuntu 18.04 或 Linux Mint 19.X 系列**用户,可以使用下面的命令来添加源文件文件:
```
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/bionic/winehq-bionic.sources
```
在完成后,更新软件包信息和安装 Wine 的稳定版本软件包。
```
sudo apt install --install-recommends winehq-stable
```
如果你现有开发版本或暂存版本,相应地使用 `winehq-devel``winehq-staging`
### 初始化 Wine 配置
在 Wine 安装后,运行下面的命令:
```
winecfg
```
这将创建用于安装 Windows 应用程序的 **虚拟的 C: 驱动器**
![C: Drive created by winecfg in Home directory][8]
在按照这些步骤时,有时,你可能在文件管理器的邮件菜单中找不到 “<ruby>使用 Wine Windows 程序加载器打开<rt> Open With Wine Windows Program Loader</rt></ruby>” 的选项。
在这种情况下,通过 [创建软链接][9] 到适当的目录来修复它:
```
sudo ln -s /usr/share/doc/wine/examples/wine.desktop /usr/share/applications/
```
然后,重新启动你的系统来获取更改。
### 使用 Wine 来运行 Windows 应用程序
在你安装 Wine 并通过运行 `winecfg` 将其配置后, 现在是安装 Windows 应用程序的时间了。
在这里7Zip.exe 文件是用于演示目的的。我知道我应该使用一个更好的示例,因为 7Zip 在 Linux 上是可获得的。不过,对于其它的应用程序来说,接下来的流程是相同的。
首先,从它的 [官方下载页面][10] 下载 7Zip 文件。
现在,在该文件上右键单击,并选择“使用 Wine Windows 程序加载器打开”选项:
![Open 7zip exe file using Wine WIndows Program Loader in Nemo file manager][11]
这将提示我们安装该文件。单击 “<ruby>安装<rt>**Install**</rt></ruby>” 并让其完成。在完成后,你可以像其它的一些原生应用程序一样打开 7zip 。
![Open 7Zip from Ubuntu Activities Overview][12]
你可以使用 `wine uninstaller` 命令来卸载任意已安装的应用程序。
这里是一篇关于在 Linux 上 [使用 Wine 来运行 Windows 软件][1] 的专业教程。
### 从 Ubuntu 中移除 Wine
如果你没有发现 Wine 有趣,或者,如果 Wine 不能正确地运行你想要的应用程序,你可能需要卸载 Wine 。为此,按照下面的步骤。
#### 通过 Ubuntu 存储库移除已安装的 Wine
为通过存储库移除已安装的 Wine ,首先运行:
```
sudo apt remove --purge wine
```
更新你的软件包信息:
```
sudo apt update
```
现在,使用 `autoclean` 命令来清理本地存储库中已检索取回的几乎不再有用的软件包文件。
```
sudo apt-get autoclean
sudo apt-get clean
```
移除那些已安装但不再需要的软件包:
```
sudo apt autoremove
```
现在,重新启动系统。
#### 如果 Wine 存储库移除 Wine 安装
移除已安装的 `wine-stable` 软件包。
```
sudo apt remove --purge wine-stable
```
更新你的软件包信息:
```
sudo apt update
```
现在,使用 `autoclean``clean` 命令来清理本地存储库中已检索取回的几乎不再有用的软件包文件。
```
sudo apt-get autoclean
sudo apt-get clean
```
移除先前添加的源文件文件。使用你的相对应的发行版文件夹。在这里,使用的是 Ubuntu 22.04 。
```
sudo rm /etc/apt/sources.list.d/winehq-jammy.sources
```
在这移除后,更新你的系统信息:
```
sudo apt update
```
可选,如果你希望的话,移除你先前添加的密钥文件。
```
sudo rm /etc/apt/keyrings/winehq-archive.key
```
现在,手动移除剩余的一些的文件。
### 还有一些关于使用 Wine 的问题?
你也可以翻阅我们关于使用 Wine 的教程。它应该能回答你可能想要解决的问题。
没有比 Wine 工程的网站更好的地方了。它们有一个专业的常见问题解答页面:
> **[Wine 的 FAQ][13]**
如果你还有问题,你可以浏览 [它们的维基][14] 来查看详细的 [文档][15] 或者在 [它们的论坛][16] 中询问你的疑问。
或者,如果你不介意花一些钱,你可以选择 CrossOver 。它基本上就是 Wine ,但是有高级的支持。你也可以联系他们的团队来解决你的问题。
我的意见是,在你不能找到一款你必需使用的替换软件时,你应该求助于 Wine 。事实上,在这种情况下,不能保证与 Wine 一起工作。
但是Wine 为从 Windows 迁移到 Linux 提供了一些希望。
--------------------------------------------------------------------------------
via: https://itsfoss.com/install-wine-ubuntu/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[robsean](https://github.com/robsean)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/use-windows-applications-linux/
[2]: https://appdb.winehq.org/
[3]: https://www.winehq.org/
[4]: https://wiki.winehq.org/Download
[5]: https://itsfoss.com/content/images/2023/01/WINE-download-and-install-size.png
[6]: https://itsfoss.com/how-to-know-ubuntu-unity-version/
[7]: https://itsfoss.com/check-linux-mint-version/
[8]: https://itsfoss.com/content/images/2023/01/CDrive-in-nautilus.png
[9]: https://learnubuntu.com/ln-command/
[10]: https://www.7-zip.org/download.html
[11]: https://itsfoss.com/content/images/2023/01/open-exe-file-with-wine.png
[12]: https://itsfoss.com/content/images/2023/01/7-zip-in-Ubuntu-activities-overview.webp
[13]: https://wiki.winehq.org/FAQ
[14]: https://wiki.winehq.org/Main_Page
[15]: https://www.winehq.org:443/documentation
[16]: https://forum.winehq.org/
[17]: https://media.codeweavers.com/pub/crossover/website/images/cw_logo_128.png
[18]: https://www.codeweavers.com/images/og-images/og-default.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/24/091940obced5d6hj8ozy7p.jpg

View File

@@ -0,0 +1,261 @@
[#]: subject: "The Suicide Attempt by Red Hat [Opinion]"
[#]: via: "https://news.itsfoss.com/red-hat-fiasco/"
[#]: author: "Community https://news.itsfoss.com/author/team/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15961-1.html"
观点:红帽公司的自杀企图
======
> 红帽公司将其源代码放在付费墙后面的最新决定,今天可能会对其直接竞争对手造成一定伤害,但对红帽公司自身而言,这将对之后产生负面影响。
![红帽关闭源代码][1]
基于我对 RHEL 和其他红帽产品的热爱,我不得不现在表达一些严厉的看法。**我**之所以这样做,是因为我希望 RHEL [及/或其克隆版] 对每个人都是 *可获得的*
请原谅这次我用词有些激烈,因为我从内心不希望 RHEL 成为 **对业余爱好者不可及** 的产品。免费的 RHEL 开发者许可证只是转移话题而已,相比于 **真正的 RHEL 克隆版存在的时候**,它削弱了 **广大动手爱好者社区** 的热情。
> 🗒️ 对于我的使用场景来说,使用免费订阅的 RHEL 使我感到满意。实际上,我正在使用的就是免费订阅。本文是关于如果保持这种状态会对 RHEL 产生怎样的影响。
### 快速回顾:事情是如何走到这一步的
我相信你现在都已经知道为什么红帽公司最近频频出现在新闻中:
但是,如果你对正在发生的事情一无所知,让我给你一个快速时间线的指引,帮助你理解:
1. 红帽公司拥有一个**出色**的 Linux 发行版,名为 <ruby>红帽企业 Linux<rt>Red Hat Enterprise Linux</rt></ruby>RHEL支持周期长达 **10** 年。
2. 与其他任何 Linux 发行版一样,用于构建 RHEL或 RHEL 的 **克隆版**)的源代码是公开可用的。
3. CentOS 利用上述源代码,去除商标,并创建了一个几乎 1 比 1 的 RHEL 拷贝。(我说“几乎”是因为 RHEL 的商标 **必须** 被删除。)
4. 那些不愿意支付费用只是为了第一次尝试 RHEL 的爱好者社区,现在可以使用 CentOS 来看看是否喜欢它。
5. 这个人中的一部分人随后向他们的高层管理人员介绍了 RHEL 及其 **通过 CentOS 初步体验** 到的卓越表现,他们很可能转向在 RHEL 上支持他们的产品或在部署中使用 RHEL。
6. 由于 CentOS 是免费的,爱好者社区得以扩大。像 [Jeff Geerling][2] 这样的人使用 CentOS 来教授对 **扮演系统管理员感兴趣** 的新一代爱好者,让他们了解他的 [开源存储库][3] 中诸如 Ansible 之类的很棒的内容。
7. CentOS 的二进制文件在 RHEL 更新后几周才发布。因此,[红帽收购了 CentOS][4],以确保 CentOS 不会落后于 RHEL 的更新。
8. 几年后,[CentOS Stream][5] 的惨淡出场,导致了 CentOS 的消亡。
9. [Rocky Linux][6] 和 [Alma Linux][7] 出现填补了 CentOS 留下的空白。它们使用的是公开可用的 RHEL 源代码。
10. 红帽公司开始限制源代码的访问,只允许其付费客户以及任何拥有免费的开发者订阅的人访问。
> 📋 我特意没有提到 IBM 收购红帽的事情,因为如果红帽的某个人有勇气在 [官方场合][9] 公开说,“**只是简单地重建代码,没有增加价值或以任何方式改变代码,对开源公司来说都是真正的威胁。**”,他们肯定也可以直承 IBM 参与了这些决定。但几乎每个红帽员工都公开否认了这种指责。所以我也不相信 IBM 自己搬起石头砸自己的脚。但你可以根据自己的心来决定是否相信。
> 不,当我说 IBM 可能没有参与这个决定时,我并不是在讽刺。他们 **有可能参与**,但我不这么认为。
### 亲爱的红帽公司,你刚刚做了什么?
你向社区提供一款免费的产品CentOS。然后你在提供这个免费产品的过程中CentOS改变它的的支持周期并将其“替代品”CentOS Stream用作你闪亮的企业产品RHEL的“测试场”。
然后那些水蛭们拿起你闪亮产品的源代码,创建了一个 CentOS 的接替者Rocky Linux 和 Alma Linux。你不喜欢这样所以对它们进行了 “软付费墙” 的限制。
现在,虽然 **你有权利这样做**(因为你从为 RHEL 提供支持而不是 RHEL 本身赚钱),但我会解释为什么这对 **你自己来说** 是一个糟糕的举动。
- **问题:** RHEL 在企业环境中为什么如此受欢迎?
- **答案:** CentOS ~~Stream~~
- **问题:** 在线教程用什么来教授 RHEL
- **答案:** CentOS ~~Stream~~
- **问题:** 那些跟随上述在线教程的学习者用什么来学习 RHEL
- **答案:** CentOS ~~Stream~~
- **问题:** 当这些学生成为老师时,他们会向询问如何入门 Linux 系统管理员的人推荐什么?
- **答案:** CentOS ~~Stream~~
- **问题:** 如果有人愿意购买 RHEL 的许可证,但因为没有公开的软件仓库而犹豫不决,他们会用什么?
- **答案:** CentOS ~~Stream~~
简而言之,如果红帽公司继续对 RHEL 的克隆产品制造麻烦,以下是可能出现的情况:
- 许多参与企业部署的客户和专业人士将考虑放弃 RHEL并且不再对其提供支持。
- 新用户将开始考虑使用 **Ubuntu、Debian、openSUSE** 或其他长期存在的替代产品。
- 大学和 IT 培训也将转向替代方案,例如 Ubuntu 或 openSUSE而不再纠结于 RHEL 克隆、CentOS Stream 和 Fedora 之间。
此外,根据他们的 [FAQ][10],小型企业和大学无法使用免费的红帽开发者订阅:
> 无费用的、无支持的红帽开发者订阅是为个人和个人帐户设计的。
**除非红帽公司友好对待 RHEL 克隆产品,否则我无法再看到这个生态系统中会有任何新的参与者了。** 这实在令人沮丧,因为 RHEL 是一款出色的产品。是的,它可能不像 Fedora 那样前沿,但是使用起来仍然很有乐趣!
我会引用 Brian Stevens 的 [一句话][11] 来阐述观点:
> 我们的信仰核心是,当有共同目标或问题的人们可以自由地联结和合作时,他们汇集起来的创新可以改变世界。我们相信开源的开发过程能够产生更好的代码,而用户社区会创造出一个让代码具有影响力的受众。
RHEL 是一款企业级发行版,因此红帽公司几乎不会致力于为在树莓派上运行 RHEL 提供支持。猜猜是哪些发行版为树莓派提供了企业级 Linux 镜像。提示一下,它们是 [Rocky Linux][12] 和 [Alma Linux][13]。我敢打赌,红帽公司并没有统计出有多少人使用 RHEL 是因为他们先在树莓派上尝试使用 Rocky/Alma Linux然后转而使用 RHEL。**我就是其中之一**(使用免费的 RHEL 许可证,也就那点价值)。
那么对于 RHEL 来说,这意味着什么?我不是 **先知**(此处双关 “Oracle”哈哈所以无法预测 RHEL 的未来。
我远不是一个“引领潮流者”,也不知道有多少人受到我 [关于 Podman 的报道][14] 的积极影响。尝试使用 Podman 并非没有原因。我先在 Fedora 上试用,然后通过使用 Rocky Linux 在一个“生产级”环境中进行 **大量实验**,最后在 RHEL 上部署了一些我自己的服务。这并不是说“如果我没有这么做,其他人就不会这样做”,但你不能否认,从我和 **许多其他人** 这样的多方共同努力中产生的内容所带来的 **影响**。顺便说一下,是我促使 [Abhishek][15] 去报道 Podman而不是相反。
当然,上述提到的“贡献”有些可能对红帽公司没有帮助,但它们对于 **红帽公司的客户群体** 来说是有帮助的。
### 所以,我们应该感到担忧吗?也是,也不是。
红帽公司做出的决定,从商业角度来看是有道理的。但也不完全是。从短期目标来看是有道理的,但从长期来看则不然。
红帽公司作为一家自豪地向上游贡献的公司,他们不会停止继续贡献。即使通过“软付费墙”来限制 RHEL 的代码,**红帽公司仍将继续向上游贡献**。红帽公司将继续在 [新的][16] [发展][17] 上 [进行][18] [创新][19]。
他们只是不再像以前那样将 RHEL 的“秘密配方”(在你期望的意义上)开放了。这个秘密的配方本身并不是“专有的”。红帽在 RHEL 中提供的几乎所有东西都是开源的。
他们的秘密在于 **将补丁向后移植到 RHEL 稳定包** 中。将这些补丁仅提供给 RHEL 的客户,这是一个非常公平的 **商业决策**。这些补丁也可以公开用于同一软件包的 **不同版本**。将补丁应用于使“旧版本”软件包保持最新状态的任务非常困难。
**所以,我理解他们为什么做出这个决定。**
**红帽并没有将 RHEL 变为闭源**(至少从技术上来说)。
红帽依然是一家出色的公司,其拥有经过验证的开源产品组合。我每天都在使用其中一些产品,比如:**在树莓派 4 上运行 RHEL[是的,这是可能的!][20])、(无需 root 的Podman、Cockpit、Ansible、systemd 等等!**
### 以下你应该感到担忧的原因
如果 RHEL 不是自由提供的 —— 不是指免费,而是像 Debian、Ubuntu 甚至 Fedora 那样无需账户即可下载 —— 那么对于想要进入企业 Linux 生态系统的新人来说,他们的数量将继续减少。我认为是这样……
如果这个数量减少了,实际上推荐企业使用和支付 RHEL 的人数也会减少。你知道这会引发什么样的循环。
- 对 RHEL 感兴趣的新人变少 → 购买的 RHEL 订阅变少
- 红帽的收入减少 → 对上游项目的贡献减少(如 systemd、Podman、Linux 内核、GNOME、Wayland、英伟达合作等
- 最终 → Linux 生态系统的总体改进变少
当然,红帽并不是唯一向 Linux 生态系统做出贡献的公司,但你不能否认它对推动生态系统全面向前 **流动** 所产生的巨大影响!
### 我对红帽声明的回应
> ✋ 我并不是在攻击 Mike McGrath。这只是对他的陈述的直接回应。我相信作为一个 RHEL 用户,我有权利表达自己的观点,因为我非常喜欢它,以至于通过树莓派 4B 上的 RHEL 部署了个人博客。
除非另有说明,以下所有引文均摘自 [这篇博文][21]。
#### 引文 1
> 我感觉大部分对我们近期对下游源代码的决策所引发的愤怒,大部分来自 **那些不愿意为 RHEL 所付出时间、精力和资源买单的人**,或者那些想要将其重新打包以谋取自己利益的人。
是的,这完全公平,但我要一直强调这一点,直到你意识到,如果没有广大社区在 CentOS 及其后续产品上的培训RHEL 就什么都不是。
**现在的 IT 专业人员中包括曾经在这个群体中的人,而你现在给他们打上了 “那些不愿意为所付出时间...”的标签。** 😒
通过展示这样的立场,你会让更少的人接触企业级 Linux并且之后使用 RHEL 的人数显著减少。
#### 引文 2
> 我们必须为从事这项工作的人支付报酬 —— 那些在漫长的工作时间和夜晚中辛勤工作、相信开源价值观的热情贡献者。简单地将这些个人产生的代码重新打包并原样转售,而没有增加任何价值,会导致这个开源软件的生产不可持续。这包括关键的向后移植工作和 [上游正在开发的未来功能和技术][22]。如果这项工作变得不可持续,它将停止,这对任何人来说都不好。
这不仅是一个完全合理的观点,而且也是残酷的现实。开源软件的资金不足。当任何人都可以无需付出实际回报就使用你的产品时,为开源软件筹集资金也变得非常困难。
但是,如果社区没有免费获得 RHEL在限制源代码之前那么它可能不会像今天这样取得巨大的成功。社区通过自由探索 RHEL并使其成为更为壮大。
我不是让红帽公司做慈善事业,只是白白地免费提供。我希望红帽公司有足够的资金来改进上游。但是应该在 **某个地方** 找到一种折中方案。
再次强调,免费订阅并不等同于 RHEL 的克隆。当然,我写过关于如何 [免费获取红帽企业版 Linux][23] 的文章。然而,这并不是相同的精神。我在这里 [引用 Jeff Geerling 的话][24]:
> “不,请不要说‘但你可以使用你的红帽开发者订阅!’我在 Debian、Ubuntu、Arch 等系统上可以不使用它。你明白我的意思。”
#### 引文 3
> 最近,我们已经确定,拥有一个下游的重构者没有价值。
绝对是有价值的!我不会在这里重复我是如何通过 RHEL 的重构版本进入 RHEL 的这一点。
Windows 之所以受欢迎,只是因为微软允许盗版存在(和更便宜的许可证密钥)。
如果他们加强了控制,没有一个家庭会在 Vista 的继任者上花一分钱。我并不是要将 Vista一款灾难性的操作系统与 RHEL 进行比较,但这个类比大多数人应该有共鸣,你可以想想没有得到 Windows 许可证退款时的那种不甘。
#### 引文 4
> 通常公认的观点是,这些免费重构就是产生 RHEL 专家并转化为销售的渠道,这并不是现实情况。我希望我们生活在那样的世界,但实际情况并非如此。相反,我们发现了一群用户,其中许多用户属于大型或非常大型的 IT 组织,他们希望获得 RHEL 的稳定性、周期和硬件生态系统,而无需实际支持维护者、工程师、编写人员和许多其他角色。
**...你确定吗?** 😮
当然,从免费用户转化为 RHEL 客户的转化率可能不是很高,但我敢打赌,这个比例不会低于 30%。如果你坚持这样做,新客户的数量将不到当前新“注册”用户的 10%。
**对于利用免费的 RHEL 开发者许可证也可以提出同样的论点。** 对于那些不愿意支付 RHEL 费用的人来说,使用临时电子邮件 ID 创建新的红帽账户以便利用免费的开发者订阅是一项不容忽视的任务。
当我们谈论转化率时,有多少专业人士正是使用 RHEL 的克隆版本进行内部产品开发(以便与 RHEL 进行适配),但实际上为使用 RHEL 的客户提供支持呢?
**你如何衡量由第三方支持提供给客户的价值?** **你不能**,它不是一种可以衡量的有形物质。
我想扯远了,但这确实是真实发生的事件。我目前所使用的 [小镇当地的] ISP 使用 RHEL 对用户进行身份验证,因为他从一个向他出租互联网线路的公司获得了一个可以在 ~~CentOS 和~~ RHEL 上部署的身份验证产品。
猜猜他们在内部是用什么开发来与 RHEL 对接? 😊
#### 引文 5
> 仅仅是重建代码,不添加价值,也不以任何方式进行更改,对开源公司来说是一个真正的威胁。这是对开源的真正威胁,这可能将开源重新变成只有业余爱好者和黑客参与的活动。
那么像 Rocky Linux 和 Alma Linux 这样的 RHEL 克隆做的工作还不够重要,不足以与“仅仅重建代码,**不添加价值,也不以任何方式进行更改**”相区分吗?
> 💡 我不知道如何更礼貌地重新表述这句话,所以请不要往心里去。这来自于对 RHEL 的热爱,而不是对红帽(管理层)的误导性愤怒。
- [Rocky Linux][25] 和 [Alma Linux][26] 都为树莓派提供镜像,这使得在沉浸于企业级 Linux 这个隐喻的幸福海洋之前,可以更容易、更便宜地试水。
- Alma Linux 有一个名为 [Elevate][27] 的工具,允许 **所有用户**(这显然包括 RHEL甚至是 Alma 的“竞争对手” Rocky Linux升级到主要版本例如从 7.x 到 8.x等等。我相信红帽公司的客户会喜欢这样的工具。
- Rocky Linux 有一个名为 [Peridot][28] 的构建工具。它使任何人都可以拥有一个**自定义构建的 RHEL**。这个构建可以基于 Rocky Linux或者甚至可以是公司的内部 RHEL 克隆,以防止供应链攻击。
这个回答也涉及到前面引用中的以下子引用:
> 仅仅将这些个人创造的代码重新打包,并原样转售,而不添加任何价值,会导致这个开源软件的生产无法持续下去。
它们正在为企业 Linux 生态系统增加价值,*而不是直接为 RHEL* 增加价值。
### 关于 CentOS Stream……
CentOS Stream 是一个奇怪的产品。在任何意义都不算糟糕(至少我个人是这么认为的),但是很奇怪。它与 RHEL 在以下关键方面存在差异,其中之一肯定会成为某些人的绝对禁忌:
- 它是 RHEL 的测试组,这使得对于 RHEL 和特别兴趣小组SIG来说更加便利但是对于你的使用情况而言可能会有帮助也可能没有。
- CentOS Stream 不使用数字版本号的命名方案。这样一个微小的变化,在 CentOS Stream 上的测试时,可能会破坏为 RHEL 设计的脚本。同样的情况也可能出现在安全更新方面,正如 [一位 Twitter 用户所描述的][29]。
- 正如我之前提到的,安全修复在 CentOS Stream 上发布较晚。虽然这可能有一些原因,但对于依靠 RHEL 克隆版本的小企业来说,并没有帮助,因为它们仍然容易受到威胁。
### 结论
现在 CentOS Stream 已经存在RHEL 的 **开发** 比以往更加开放。但巧合的是,**RHEL 的源代码** 却被置于一个软性付费墙之后,受制于 [Red Hat 的最终用户许可协议EULA][30]。
目前这可能对红帽有所帮助。但如果保持这种立场,甚至不需要采取其他措施打击 RHEL 克隆产品,我相信围绕企业级 Linux 的用户、开发者和支持社区将会逐渐衰落...
我认为从长远来看,这将会伤害到红帽,因为随着周围的社区消亡,只有疲惫不堪的 IT 专业人员(意思是:**被迫使用它的人,就像使用 Oracle 产品一样**)才会继续使用 RHEL甚至更糟糕的是使用 Oracle Linux。
我在这里并不是在抨击红帽的员工。而是希望让你知道,如果继续这样发展下去,热爱 RHEL 的社区将会消亡。
我不愿意看到那种局面 😔
我真心地祝愿红帽在推动 Linux 生态系统前进方面一切顺利!真心的 ❤️
> ✍️ 此观点来自 Pratham Patel一位热爱红帽的开源爱好者和探索者。
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/red-hat-fiasco/
作者:[Pratham Patel][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/team/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/07/suicide-attempt-redhat.png
[2]: https://www.jeffgeerling.com:443/
[3]: https://github.com:443/geerlingguy?tab=repositories&q=ansible&type=&language=&sort=
[4]: https://www.redhat.com:443/en/about/press-releases/red-hat-and-centos-join-forces
[5]: https://itsfoss.com:443/centos-stream-faq/
[6]: https://rockylinux.org:443/about
[7]: https://almalinux.org:443/blog/introducing-almalinux-beta-a-community-driven-replacement-for-centos/
[8]: https://news.itsfoss.com/red-hat-restricts-source-code/
[9]: https://www.redhat.com:443/en/blog/red-hats-commitment-open-source-response-gitcentosorg-changes
[10]: https://developers.redhat.com:443/articles/faqs-no-cost-red-hat-enterprise-linux
[11]: https://www.redhat.com:443/en/about/press-releases/red-hat-and-centos-join-forces
[12]: https://rockylinux.org:443/alternative-images/
[13]: https://almalinux.org:443/blog/almalinux-for-raspberry-pi-updates-october-2021/
[14]: https://linuxhandbook.com:443/tag/podman/
[15]: https://itsfoss.com:443/team/
[16]: https://fedoramagazine.org:443/announcing-the-display-hdr-hackfest/
[17]: https://news.itsfoss.com/red-hat-accessibility-gnome/
[18]: https://developer.nvidia.com:443/blog/nvidia-releases-open-source-gpu-kernel-modules/
[19]: https://lists.fedoraproject.org:443/archives/list/devel@lists.fedoraproject.org/thread/IXNTPGKHWTW7H7XVMZICSJRUDOHO2KJC/
[20]: https://nitter.net:443/thefossguy/status/1527935333899583488
[21]: https://www.redhat.com:443/en/blog/red-hats-commitment-open-source-response-gitcentosorg-changes
[22]: https://www.redhat.com:443/en/about/our-community-contributions
[23]: https://linuxhandbook.com:443/get-red-hat-linux-free/
[24]: https://www.jeffgeerling.com:443/blog/2023/dear-red-hat-are-you-dumb
[25]: https://rockylinux.org:443/alternative-images/
[26]: https://almalinux.org:443/blog/almalinux-for-raspberry-pi-updates-october-2021/
[27]: https://almalinux.org:443/elevate/
[28]: https://github.com:443/rocky-linux/peridot
[29]: https://nitter.net:443/opdroid1234/status/1672067314789888000
[30]: https://www.jeffgeerling.com:443/blog/2023/gplv2-red-hat-and-you

View File

@@ -0,0 +1,230 @@
[#]: subject: "How to Remove Software Repositories from Ubuntu"
[#]: via: "https://itsfoss.com/remove-software-repositories-ubuntu/"
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15985-1.html"
如何从 Ubuntu 中删除软件仓库
======
![][0]
> 从 `apt-add-repository` 到“软件及更新”工具,这里有几种从 Ubuntu 移除软件仓库的方法。
你可以 [在 Ubuntu 中添加外部仓库][1] 来访问官方仓库中不可用的软件包。
例如,如果你 [在 Ubuntu 中安装 Brave 浏览器][2],则将其仓库添加到你的系统中。如果你添加了一个 PPA它也会添加为外部仓库。
当你不需要特定软件时,请将其删除。但是,外部仓库仍然存在。你还可以也应该将其删除以保持系统原始状态。
Ubuntu 可以让你轻松删除软件仓库。有不同的方法可以做到这一点:
- 使用 `apt-add-repository` 命令删除仓库
- 使用 GUI 删除仓库(对于桌面用户)
- 通过修改 `/etc/apt/sources.list` 文件的文件内容(针对专家)
但在此之前,如果你对这个概念不熟悉,我强烈建议你 [熟悉包管理器的概念][3] 和仓库。
### 方法 1、使用 apt 删除仓库🤖
你知道你还可以使用 [apt 命令][4] 来删除仓库吗? 嗯,从技术上讲,它不是核心 `apt` 命令的一部分,但它的工作方式类似。
在处理外部仓库时,你可以使用 `add-apt-repository` 或者 `apt-add-repository` 命令(两者是同一命令)。
首先,使用以下命令列出添加的仓库:
```
apt-add-repository --list
```
![list enabled repositories in Ubuntu][5]
完成后,你可以按所示方式使用带有 `-r` 标志的 `apt-add-repository` 命令来从列表中删除:
```
sudo apt-add-repository -r repo_name
```
例如,如果我想删除 `yarn` 仓库,我必须使用以下命令:
```
sudo add-apt-repository -r deb https://dl.yarnpkg.com/debian/ stable main
```
![Remove repository using the apt-add-repository command in Ubuntu][6]
按回车键进行确认。
接下来,使用以下命令更新仓库:
```
sudo apt update
```
现在,如果你列出已启用的仓库,你将不会在此处找到已删除的仓库:
```
apt-add-repository --list
```
![confirm repository removal process by listing enabled repositories in Ubuntu][7]
这就完成了!
### 方法 2、使用 GUI 删除 Ubuntu 中的软件仓库🖥️
> 🚧 不建议删除你一无所知的仓库,因为它可能会限制你将来安装你最喜欢的软件包,因此请确保你知道自己在做什么。
作为 [最适合初学者的发行版之一][8],你可以使用 GUI 来删除仓库,而无需使用终端。
为此,首先从系统菜单打开“<ruby>软件及更新<rt>software & updates</rt></ruby>”应用:
![search for software and updates from the system menu][9]
现在,单击“<ruby>其他软件<rt>Other Software</rt></ruby>”部分,它将列出系统中的 PPA 和外部仓库。
列出中勾选的 ✅ 是已启用的。
要删除仓库,你必须遵循**三个简单的步骤**
- 选择需要删除的仓库
- 点击“<ruby>删除<rt>Remove</rt></ruby>”按钮
- 最后,点击“<ruby>关闭<rt>Close</rt></ruby>”按钮
![Disable repository from Ubuntu][10]
单击关闭按钮后,它将打开一个提示,要求你在进行更改时更新信息。
只需单击 “<ruby>重新载入<rt>Reload</rt></ruby>” 按钮即可:
![Click on reload to after removing repository from Ubuntu and save changes][11]
或者,你可以从命令行更新仓库以使更改生效:
```
sudo apt update
```
### 方法 3、通过目录来删除仓库对于专家🧑💻
之前我解释了如何使用工具GUI 和 CLI来删除仓库。在这里你将修改负责管理仓库的系统目录`/etc/apt/sources.list.d`)。
首先,将工作目录更改为 `sources.list.d` 并列出其内容:
```
cd /etc/apt/sources.list.d/ && ls
```
![list contents of sources.list.d directory][12]
在这里,你将找到所有仓库的列表。
如果你仔细观察,一个仓库将有两个文件。一个带有 `.list` 扩展名,另一个带有 `.save` 扩展名。
你必须删除具有 `.list` 扩展名的文件:
```
sudo rm Repo_name.list
```
例如,在这里,我使用以下命令删除了 **node 仓库**
```
sudo rm nodesource.list
```
![remove repository by removing the repository directory in Ubuntu][13]
要使更改生效,请使用以下命令更新仓库索引:
```
sudo apt update
```
想了解更多有关 [sources.list][14] 的信息吗?阅读 [这篇文章][14]。
### 附加步骤:删除仓库后删除 GPG 密钥(对于高级用户)
如果你希望在删除仓库后删除 GPG 密钥,请按以下步骤操作。
首先,使用以下命令列出现有的 GPG 密钥:
```
apt-key list
```
现在,输出可能会让某些用户感到困惑。
以下是要记住的事情:
- GPG 密钥名称将放置在虚线(`----`)上方
- 公钥在第二行
例如,以下是 Chrome GPG 密钥的相关数据:
![list GPG keys in Ubuntu][15]
要删除 GPG 密钥,你可以使用公钥的最后两个字符串(不带任何空格)。
例如,以下是我将如何使用 Chrome 浏览器公钥的最后两个字符串D38B 4796删除其 GPG 密钥:
```
sudo apt-key del D38B4796
```
![remove GPG key in Ubuntu][16]
同样,你也可以使用整个公钥。但这一次,你必须在两个字符串之间包含空格,如下所示:
```
sudo apt-key del "72EC F46A 56B4 AD39 C907 BBB7 1646 B01B 86E5 0310"
```
### 小心添加和删除的内容
特别是当你是 Linux 新用户时,你会遇到许多感兴趣的软件,对仓库添加了又删除。
虽然尝试是件好事,但你应该始终小心添加/删除到系统中的任何内容。你应该记住一些事情例如_它包含更新的软件包吗 它是受信任或维护的仓库吗_
保持谨慎将使你的系统免受不必要的仓库和软件包的影响。
**我希望本指南可以帮助你删除不需要的仓库!**
如果你遇到任何问题请在下面评论。
*题图MJ/3d436ed6-76fc-47ef-88c3-b5f3e2862c7d*
--------------------------------------------------------------------------------
via: https://itsfoss.com/remove-software-repositories-ubuntu/
作者:[Sagar Sharma][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/sagar/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/adding-external-repositories-ubuntu/
[2]: https://itsfoss.com/brave-web-browser/
[3]: https://itsfoss.com/package-manager/
[4]: https://itsfoss.com/apt-command-guide/
[5]: https://itsfoss.com/content/images/2023/06/list-enabled-repositories-in-Ubuntu.png
[6]: https://itsfoss.com/content/images/2023/06/Remove-repository-using-the-apt-add-repository-command-in-Ubuntu.png
[7]: https://itsfoss.com/content/images/2023/06/confirm-repository-removal-process-by-listing-enabled-repositories-in-Ubuntu.png
[8]: https://itsfoss.com/best-linux-beginners/
[9]: https://itsfoss.com/content/images/2023/06/search-for-software-and-updates-from-the-system-menu.png
[10]: https://itsfoss.com/content/images/2023/06/remove-the-repository-from-Ubuntu-using-GUI-1.png
[11]: https://itsfoss.com/content/images/2023/06/Click-on-reload-to-after-removing-repository-from-Ubuntu-and-save-changes.png
[12]: https://itsfoss.com/content/images/2023/06/list-contents-of-sources.list.d-directory.png
[13]: https://itsfoss.com/content/images/2023/06/remove-repository-by-removing-the-repository-directory-in-Ubuntu.png
[14]: https://itsfoss.com/sources-list-ubuntu/
[15]: https://itsfoss.com/content/images/2023/06/list-GPG-keys-in-Ubuntu.png
[16]: https://itsfoss.com/content/images/2023/06/remove-GPG-key-in-Ubuntu.png
[17]: https://itsfoss.community:443/
[0]: https://img.linux.net.cn/data/attachment/album/202307/10/164855dgguejdcbv5uqkj6.jpg

View File

@@ -0,0 +1,228 @@
[#]: subject: "Bash Basics Series #4: Arithmetic Operations"
[#]: via: "https://itsfoss.com/bash-arithmetic-operation/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16006-1.html"
Bash 基础知识系列 #4:算术运算
======
![][0]
> 在本系列的第四章,学习在 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 中接受用户输入][1]。
你应该关注这两行:
```
sum=$(($num1+$num2))
sub=$(($num1-$num2))
```
将此脚本保存为 `sum.sh` 并运行它。给它一些输入并检查结果。
![Example of addition and subtraction in Bash shell script][2]
### Bash 中的乘法
现在让我们转向乘法。
这是一个将公里转换为米的示例脚本(这给美国读者带来了麻烦 :D。作为参考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][3]
看起来不错,不是吗? 让我们继续进行除法。
### 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][4],它是一种处理数学运算的非常强大的计算器语言。不过,你现在不需要关注细节。
你必须通过管道将算术运算“回显”给 `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 章][5] 中看到的命令替换。
`-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][6]
### 🏋️🤸 练习时间
是时候一起做一些数学和 Bash 练习了。
**练习 1**:创建一个脚本,接受以 GB 为单位的输入并以 MB 和 KB 为单位输出其等效值。
**练习 2**:编写一个带有两个参数并以指数格式输出结果的脚本。因此,如果输入 2 和 3输出将为 8即 2 的 3 次方。
**提示**:使用幂运算符 `**`
**练习 3**:编写一个将摄氏度转换为华氏度的脚本。
**提示**:使用公式 F = C x (9/5) + 32。你必须在此处使用 `bc` 命令。
你可以在社区中讨论练习及其方案。
在下一章中,你将 [了解 Bash 中的数组][7]。敬请关注。
*题图MJ/8a9dfb90-99a4-4203-bc44-d805d09bc16f*
--------------------------------------------------------------------------------
via: https://itsfoss.com/bash-arithmetic-operation/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/bash-pass-arguments/
[2]: https://itsfoss.com/content/images/2023/07/addition-substraction-bash-script.png
[3]: https://itsfoss.com/content/images/2023/07/multiplication-bash-script.png
[4]: https://www.gnu.org/software/bc/manual/html_mono/bc.html
[5]: https://itsfoss.com/bash-use-variables/
[6]: https://itsfoss.com/content/images/2023/07/floating-point-bash.png
[7]: https://itsfoss.com/bash-arrays/
[0]: https://img.linux.net.cn/data/attachment/album/202307/17/110316dmpou87g8ibhzb8t.jpg

View File

@@ -0,0 +1,208 @@
[#]: subject: "Display Animated ASCII Birthday Wish in Linux Terminal 🎂"
[#]: via: "https://itsfoss.com/birthday-wish-linux-terminal/"
[#]: author: "Sreenath https://itsfoss.com/author/sreenath/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15995-1.html"
在 Linux 终端显示动画式 ASCII 生日祝福 🎂
======
![][0]
> 通过在 Linux 终端创建 ASCII 生日动画,让你所爱的人的特殊日子更加特别。
生日是特殊的日子,从亲朋好友那里收到生日祝福是非常令人满足和愉悦的。
作为 Linux 用户,你可以通过终端给朋友和家人带来一些酷炫的生日祝福。
这是我为 Abhishek 先生的生日制作的生日卡片(或者说动画)。
<video src="https://img.linux.net.cn/static/video/birthday-wish-linux-terminal.mp4" autoplay></video>
我们团队的每个人都非常喜欢它,所以我受到请求要按照它做一个教程。我很乐意满足请求,因为这可能对我们的读者有所帮助 :)
> ✋ 这个教程需要在终端中编辑配置文件。熟练使用 Linux 终端和命令会更容易理解和跟随本教程。
### 安装 PyBirthdayWish
PyBirthdayWish 是一个小型的 Python 程序,通过它你可以创建漂亮的终端生日祝福,还可以播放音乐!
这个程序本身在 Ubuntu 的默认软件仓库中不可用,你需要使用 Pip 进行安装。
> **[PyBirthdayWish GitHub][1]**
首先,使用以下命令在 Ubuntu 中 [安装 Pip][2]
```
sudo apt install python3-pip
```
安装完 Pip 后,你可以克隆该存储库并安装该程序:
```
git clone https://github.com/hemantapkh/PyBirthdayWish.git && cd PyBirthdayWish && pip install -r requirements.txt
```
在他们的存储库中,你可以查看 `.requirements.txt` 文件,了解上述命令中所需的依赖项。
安装完成后,在你克隆的 `PyBirthdayWish` 目录中运行以下命令:
```
python3 PyBirthdayWish.py
```
这将要求你按下 `F11` 键,然后按回车键进入全屏模式,然后播放动画。
![][3]
![][4]
这里还有音乐,但这里没有展示。
它非常可定制化。**让我展示一下你可以通过这个工具进行的各种级别的可选定制。**
### 创建默认的生日祝福动画
在上述程序中,有三个用于动画的 Python 文件。它们是 `example`(默认)、`art``artwithstars`。你可以打开这三个文件来了解其内容。
![arts 目录的内容,其中包含默认和用户创建的 art 文件][5]
现在,如果你想使用 `artwithstars` 文件代替默认的 `example` 文件,在 [任何可用的文本编辑器][6] 中打开 `config.py`,将 `arts` 的条目替换为所需的名称,然后保存,如下面的截图所示:
![在配置文件中将动画设计文件更改为 "art with stars"][7]
之后,在 `PyBirthdayWish` 目录中运行:
```
python3 PyBirthdayWish.py
```
你将得到新的动画效果。
### 创建自定义的生日祝福
如果你想打印你所爱的人的名字,而不是默认的文字,这需要一点耐心,因为你需要在不破坏原文件的情况下编辑 art 文件。
首先,备份你想要的设计 art 文件。即在同一个 `arts` 目录中将文件复制一份,并给它一个不同的名称,比如 `friend.py`
现在,用你选择的文本编辑器打开设计 art 文件。将文件中的文字替换为你需要的内容。最好使用符号 `| _ \ /` 等来创建文本和设计。你可以使用一个 [在线工具将文字转换为 ASCII 艺术][8]。
![复制了一个现有的设计文件,并添加了一个新的文字 "Friend"][9]
> 💡 输入一个字符将使动画的其余部分向前移动一个字符。同样,删除一个字符会使设计的其余部分向后移动一个字符。因此,如果删除一个字符,请添加一个空格。同样地,如果在某一行上添加了一个新字符,请删除一个空格。这应该实时进行,这样你就可以查看更改。这样,你就可以使剩余的设计匹配,并在完成时保持外观不变。
编辑完成后保存文件。现在,打开 `config.py` 并将 art 文件更改为你的文件,以显示你所做的更改。
![在配置文件中更改设计文件以反映我们所做的更改][10]
现在你可以运行程序,以获得你所需的文字出现在动画中:
```
python3 PyBirthdayWish.py
```
### 使用自己的音乐文件
你可以使用自己的音乐文件作为这个动画的一部分。
> 🚧 如果你计划在 YouTube 或其他网站上上传视频,请使用无版权的音乐以避免问题。
将你的音乐文件复制到克隆的目录中。
![自定义的音乐文件被复制到克隆的目录中][11]
编辑 `config.py` 文件以添加新的音乐,如下面的截图所示:
![在配置文件中添加自定义音乐文件以在动画中播放][12]
完成!现在,如果执行运行命令 `python3 PyBirthdayWish.py`,自定义音乐将与动画一起播放。
### 创建一个可执行文件
**如果你想将上述祝福消息作为可执行文件发送给朋友,这也是可行的。**
关联的 `pyinstaller` 将安装到 `.local/bin` 目录中,它不在你的路径中。
所以使用以下命令将该目录添加到你的路径中,[添加到你的路径中][15]
```
export PATH=$PATH:/home/team/.local/bin
```
要使其永久生效,将其添加到你的 `~/.bashrc` 文件中。
当你完成 art 文件的编辑并更改配置文件以反映更改后,使用以下命令创建一个可执行文件:
```
pyinstaller --noconfirm --onefile --console --icon "icon.ico" --no-embed-manifest --add-data "arts:arts/" --add-data "config.py:." --add-data "HappyBirthday.mp3:." --add-data "PyBirthdayWish.py:." "PyBirthdayWish.py"
```
它将在 `PyBirthdayWish/dist` 目录下创建一个名为 `PyBirthdayWish` 的可执行文件。
![程序创建的自定义可执行文件在文件管理器中显示][16]
将此可执行文件复制并发送给任何想查看它的人。他们可以使用以下命令执行它:
```
./PyBirthdayWish
```
> 🚧 请始终谨慎运行来自未知外部来源的可执行文件。
### 更多终端乐趣
像生日一样,圣诞节也是一个特殊的时刻。如果你愿意,你可以给你的 Linux 桌面增添一些节日气氛。
> **[用 Linux 的方式庆祝圣诞节:为你的 Linux 系统增添圣诞气氛][16a]**
如果你喜欢 ASCII 动画,你可能也会喜欢 ASCII 艺术。
> **[在 Linux 终端将图像转换为 ASCII 艺术图像][16b]**
为什么就止步于此呢?探索更多 ASCII 工具吧。
> **[在 Linux 终端生成 ASCII 艺术并从中获得乐趣的 10 个工具][16c]**
享受以这种有趣的方式使用 Linux :)
🗨 如果你在使用这个工具时遇到任何问题,请告诉我,我会尽力在我所能的范围内提供帮助。
*题图MJ/dfa0185d-e9f9-4c1a-886e-e42c9bb8d687*
--------------------------------------------------------------------------------
via: https://itsfoss.com/birthday-wish-linux-terminal/
作者:[Sreenath][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/sreenath/
[b]: https://github.com/lkxed/
[1]: https://github.com:443/hemantapkh/PyBirthdayWish
[2]: https://itsfoss.com/install-pip-ubuntu/
[3]: https://itsfoss.com/content/images/2023/07/animation-page-1.png
[4]: https://itsfoss.com/content/images/2023/07/animation-page-2.png
[5]: https://itsfoss.com/content/images/2023/07/arts-directory-contents.png
[6]: https://itsfoss.com/command-line-text-editors-linux/
[7]: https://itsfoss.com/content/images/2023/07/add-art-with-stars.png
[8]: https://patorjk.com:443/software/taag/#p=display&f=Big&t=Friend
[9]: https://itsfoss.com/content/images/2023/07/new-text-added-to-art-file-friend.png
[10]: https://itsfoss.com/content/images/2023/07/edit-config-file-to-add-custom-py-file.png
[11]: https://itsfoss.com/content/images/2023/07/showing-mymusic-file-in-directory.png
[12]: https://itsfoss.com/content/images/2023/07/custom-music-file.png
[13]: https://itsfoss.com/content/images/2023/04/efficient-at-linux-command-line-horizontal.png
[14]: https://amzn.to:443/3MPjiHw
[15]: https://itsfoss.com/add-directory-to-path-linux/
[16]: https://itsfoss.com/content/images/2023/07/PyBirthdayWish-executable-location.png
[16a]: https://itsfoss.com/christmas-linux-wallpaper/
[16b]: https://itsfoss.com/ascii-image-converter/
[16c]: https://itsfoss.com/ascii-art-linux-terminal/
[0]: https://img.linux.net.cn/data/attachment/album/202307/13/162413kvclclvgvhj8qqbz.jpg

View File

@@ -0,0 +1,143 @@
[#]: subject: "blendOS v3: The Latest Version of the Immutable Distro is Here!"
[#]: via: "https://news.itsfoss.com/blendOS-v3-released/"
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16012-1.html"
不可变发行版 blendOS 发布最新版本
======
> blendOS v3 已经来到,并带来了重大升级!
![blendOS][1]
blendOS 是一个 [不可变发行版][2],它的目标(野心)是取代所有 Linux 发行版。我们最近 [介绍了它][3] 之前的版本。该项目由 [Ubuntu Unity][4] 的首席开发者 Rudra Saraswat 领导,其进展一直良好。
在最近的公告中,他们推出了一个带来了许多改进的新版本,使 **blendOS** 更加接近其目标。
让我们看看这个版本有什么内容。
### 🆕 blendOS v3 “Bhatura”有什么新内容
![a screenshot of blendOS v3's desktop][5]
作为一个支持大多数软件包的 **基于 Arch 的发行版**,最新版本的 blendOS 的名字来源于印度美食中的一道美味佳肴 “[印度炸麦饼][6]”。
这个版本提供了很多东西,值得注意的亮点包括:
- 更好的桌面环境支持
- 直观的应用安装
- 支持附加发行版
- 改进的系统更新
- 新的命令行程序
#### 更好的桌面环境支持
![a banner showing the new desktop environment support on blendOS v3][7]
blendOS 现在 **支持 7 种桌面环境**,其中包括:
- [GNOME][8]
- [KDE Plasma][9]
- [Cinnamon][10]
- [XFCE][11]
- [Deepin][12]
- [MATE][13]
- [LXQt][14]
**现在支持的太多啦!** 🤯
你可以通过在终端中运行 `system track` 命令轻松地在这些之间切换。
#### 直观的应用安装
![a banner showcasing the updated application install experience on blendOS v3][15]
此版本的 blendOS 现在提供了双击 **DEB**、**RPM**、**pkg.tar.zst** 甚至 **APK** 包将它们安装到容器中的功能。
> 📋 对于 APK你需要从设置启用安卓应用支持。
#### 支持附加发行版
![][16]
blendOS 现在**支持在容器中运行十个发行版**,并且能够通过单用户/多用户安装 [运行 NixOS][17]。以下是支持的发行版:
- Arch Linux
- AlmaLinux 9
- Crystal Linux
- Debian
- Fedora 38
- Kali Linux (滚动版)
- Neurodebian Bookworm
- Rocky Linux
- Ubuntu 22.04
- Ubuntu 23.04
#### 改进的系统更新
![a banner showing the new system update flow chart on blendOS v3][18]
**blendOS v3 使用 ISO 进行系统更新。** 与传统发行版不同,它允许重建系统,更新大小在 **10-100 MB** 范围内。
多亏了 [zsync][19],更新下载的大小才如此之小。更新在后台下载,下次启动时,当前的根文件系统将被替换,同时保持任何自定义系统包完好无损。
**根据开发者的说法**,此更新系统解决了 Arch Linux 等滚动发行版的重大缺陷,防止任何数据丢失或系统故障,提供了出色的稳定性。
#### 新的命令行程序
![a banner showing the new cli utilities on blendOS v3][20]
最后,它引入了**两个新的命令行程序** 一个是 `system`,另一个是 `user`
`system` 将允许你安装软件包,甚至切换桌面。而 `user` 将使你能够创建/管理容器及其关联。
就是这样。对于此版本的亮点,你可以通过 [发布公告][21] 博客来了解有关此精彩版本的更多信息。
### 📥 下载 blendOS v3 “Bhatura”
blendOS v3 **有七个不同的版本**,从 GNOME 版本一直到 Deepin 版本。
你可以从 [官方网站][22] 获取它们,你也可以在其中查看安装指南。
> **[blendOS v3 “Bhatura”][23]**
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/blendOS-v3-released/
作者:[Sourav Rudra][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/sourav/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/07/blendos-vs3-release.jpg
[2]: https://itsfoss.com/immutable-linux-distros/
[3]: https://linux.cn/article-15684-1.html
[4]: https://news.itsfoss.com/unity-remix-official-flavor/
[5]: https://news.itsfoss.com/content/images/2023/07/blendOSv3_1.jpg
[6]: https://en.wikipedia.org/wiki/Bhatura
[7]: https://news.itsfoss.com/content/images/2023/07/blendOSv3_2.jpg
[8]: https://www.gnome.org/
[9]: https://kde.org/plasma-desktop/
[10]: https://github.com/linuxmint/Cinnamon
[11]: https://www.xfce.org/
[12]: https://www.deepin.org/en/dde/
[13]: https://mate-desktop.org/
[14]: https://lxqt-project.org/
[15]: https://news.itsfoss.com/content/images/2023/07/blendOSv3_3.jpg
[16]: https://news.itsfoss.com/content/images/2023/07/blendOSv3_4.jpg
[17]: https://itsfoss.com/why-use-nixos/
[18]: https://news.itsfoss.com/content/images/size/w2400/2023/07/blendOSv3_5.jpg
[19]: https://github.com/AppImageCommunity/zsync2
[20]: https://news.itsfoss.com/content/images/2023/07/blendOSv3_6.jpg
[21]: https://blendOS.co/blend-os-v3/
[22]: https://docs.blendOS.co/guides/installation-guide/#mirror-list
[23]: https://docs.blendOS.co/guides/installation-guide/#mirror-list

View File

@@ -0,0 +1,77 @@
[#]: subject: "Geary 44 Email App for Linux Adds Two Nifty Enhancements"
[#]: via: "https://news.itsfoss.com/geary-44-release/"
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16019-1.html"
Geary 44 电子邮件应用添加了两项实用增强功能
======
> Geary 44 听起来是一个有趣的版本,有一些有用的变化。
![geary email app][1]
Geary 是 [Linux 上最好的电子邮件客户端][2] 之一,多年来增加了一些相当不错的更新。
它是 GNOME 项目下的一个电子邮件应用,**为 GNOME 桌面**(不限于)量身定制,支持 IMAP 和 SMTP 协议,使其能够与大多数网络邮件服务完美集成。
几天前,它发布了具有重要改进的新版本。让我们快速浏览一下这些内容。
### 🆕 Geary 44有什么新内容
![a screenshot of geary 44's about page][3]
Geary 44 是一个相对较小的版本,有两个重要的补充。第一个是**重新设计的标题栏**,第二个是**重新设计的对话列表。**
新的“选择”按钮已添加到搜索按钮附近的标题栏中,并且消息视图工具栏图标的位置已更改。
![a screenshot of the inbox view on geary 44][4]
当我们上次查看 Geary 时,它有不同的对话列表布局。但现在,**重新设计的对话列表让邮件阅读体验变得更好**。
你知道,这让我想知道 Geary 的这个版本与即将重新设计的 Thunderbird 相比会如何。你可能需要做出一些选择,是吗?🤩
#### 🛠️ 其他更改和改进
除了上面提到的之外,还有一些值得注意的变化:
- 修复网络检测问题。
- 各种用户界面翻译改进。
- 系统挂起时使用挂起引擎。
- 多个错误修复和用户界面调整。
你可以浏览 [发行说明][5] 以了解有关此版本的更多信息。
### 📥 获取 Geary 44
你可以从 [GitLab][6] 上提供的源代码构建 Geary也可以从 [Flathub 商店][7] 获取它。
> **[Geary 44 (Flathub)][8]**
💬 如果你要尝试此版本的 Geary请告诉我们
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/geary-44-release/
作者:[Sourav Rudra][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/sourav/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/07/geary-44-release.jpg
[2]: https://itsfoss.com:443/best-email-clients-linux/
[3]: https://news.itsfoss.com/content/images/2023/07/Geary_44_1.jpg
[4]: https://news.itsfoss.com/content/images/2023/07/Geary_44_2.jpg
[5]: https://gitlab.gnome.org:443/GNOME/geary/-/tags/44.0
[6]: https://gitlab.gnome.org:443/GNOME/geary
[7]: https://flathub.org:443/apps/org.gnome.Geary
[8]: https://flathub.org:443/apps/org.gnome.Geary
[9]: https://www.omglinux.com:443/geary-44-is-out-with-conversation-list-headerbar-tweaks/

View File

@@ -0,0 +1,176 @@
[#]: subject: "Bash Basics Series #5: Using Arrays in Bash"
[#]: via: "https://itsfoss.com/bash-arrays/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16016-1.html"
Bash 基础知识系列 #5:在 Bash 中使用数组
======
![][0]
> 本章将介绍如何在 Bash Shell 脚本中使用数组。学习添加元素、删除元素和获取数组长度。
在本系列的前面部分中,你了解了变量。变量中可以有单个值。
数组内部可以有多个值。当你必须一次处理多个变量时,这会使事情变得更容易。你不必将各个值存储在新变量中。
因此,不要像这样声明五个变量:
```
distro1=Ubuntu
distro2=Fedora
distro3=SUSE
distro4=Arch Linux
distro5=Nix
```
你可以在单个数组中初始化它们所有:
```
distros=(Ubuntu Fedora SUSE "Arch Linux" Nix)
```
与其他一些编程语言不同,你不使用逗号作为数组元素分隔符。
那挺好的。让我们看看如何访问数组元素。
### 在 Bash 中访问数组元素
使用索引(数组中的位置)访问数组元素。要访问索引 N 处的数组元素,请使用:
```
${array_name[N]}
```
> 💡 与大多数其他编程语言一样Bash Shell 中的数组从索引 0 开始。这意味着第一个元素的索引为 0第二个元素的索引为 1第 n 个元素的索引为 `n-1`。
因此,如果你想打印 SUSE你将使用
```
echo ${distros[2]}
```
![Example of accessing array elements in bash shell][1]
> 🚧 `${` 之后或 `}` 之前不能有任何空格。你不能像 `${ array[n] }` 那样使用它。
### 一次访问所有数组元素
假设你要打印数组的所有元素。
你可以一一使用 `echo ${array[n]}` 但这确实没有必要。有一个更好更简单的方法:
```
${array[*]}
```
这将为你提供所有数组元素。
![Accessing all array elements at once in bash shell][2]
### 在 Bash 中获取数组长度
如何知道数组中有多少个元素? 有一个专门的方法 [在 Bash 中获取数组长度][3]
```
${#array_name[@]}
```
就这么简单,对吧?
![Get array length in bash][4]
### 在 Bash 中添加数组元素
如果必须向数组添加其他元素,请使用 `+=` 运算符 [将元素追加到 Bash 中的现有数组][5]
```
array_name+=("new_value")
```
这是一个例子:
![Append new element to array][6]
> 🚧 追加元素时使用 `()` 很重要。
你还可以使用索引将元素设置在任何位置。
```
array_name[N]=new_value
```
**但请记住使用正确的索引编号。** 如果在现有索引上使用它,新值将替换该元素。
如果你使用“越界”索引,它仍会添加到最后一个元素之后。例如,如果数组长度为 6并且你尝试在索引 9 处设置新值,则该值仍将作为最后一个元素添加到第 7 个位置(索引 6
![][7]
### 删除数组元素
你可以使用 Shell 内置的 `unset` 通过提供索引号来删除数组元素:
```
unset array_name[N]
```
这是一个示例,我删除了数组的第四个元素。
![Delete array element in bash][8]
你还可以通过 unset 来删除整个数组:
```
unset array_name
```
> 💡 Bash 中没有严格的数据类型规则。你可以创建一个同时包含整数和字符串的数组。
### 🏋️ 练习时间
让我们练习一下你所学到的有关 Bash 数组的知识。
**练习 1**:创建一个 Bash 脚本,其中包含五个最佳 Linux 发行版的数组。全部打印出来。
现在,用 “Hannah Montanna Linux” 替换中间的选择。
**练习 2**:创建一个 Bash 脚本,该脚本接受用户提供的三个数字,然后以相反的顺序打印它们。
预期输出:
```
Enter three numbers and press enter
12 23 44
Numbers in reverse order are: 44 23 12
```
我希望你喜欢通过本系列学习 Bash Shell 脚本。在下一章中,你将学习如何使用 `if-else`。敬请关注。
*题图MJ/09477e2f-2bf9-4fdf-bc1e-c894a068adf2*
--------------------------------------------------------------------------------
via: https://itsfoss.com/bash-arrays/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/content/images/2023/07/accessing-array-elements-bash.png
[2]: https://itsfoss.com/content/images/2023/07/accessing-all-array-elements-bash.png
[3]: https://linuxhandbook.com:443/array-length-bash/
[4]: https://itsfoss.com/content/images/2023/07/get-array-length-bash.png
[5]: https://linuxhandbook.com:443/bash-append-array/
[6]: https://itsfoss.com/content/images/2023/07/append-element-to-array.png
[7]: https://itsfoss.com/content/images/2023/07/add-array-element-bash-1.png
[8]: https://itsfoss.com/content/images/2023/07/delete-array-element-bash.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/20/150302ttfmzchutthfcncm.jpg

View File

@@ -0,0 +1,140 @@
[#]: subject: "Solus 4.4 Releases With Useful Upgrades and Plans to Ditch MATE Edition"
[#]: via: "https://news.itsfoss.com/solus-4-4-released/"
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15993-1.html"
Solus 4.4 发布,带来实用的升级并计划放弃 MATE 版本
======
> Solus 4.4 有了一些令人印象深刻的升级,不久以后将推出一款新版本。
![solus 4.4][1]
Solus 是一个许久没有出现在新闻中的名字,我们上一次听说它是今年 4 月份它经历了 [又一次动荡][2]。
幸运的是,新的组织重组似乎奏效了,因为现在我们在近两年后迎来了新发布!
Solus 是最棒的 [独立 Linux 发行版][3] 之一,提供了非常适合初学者的用户体验。
和它的上一个版本 Solus 4.3 相比,它带来了许多改进,这个新版本的目标是超越之前的版本。
让我们看看 Solus 最新版本有什么新特性。
### 🆕 Solus 4.4: 有什么新内容?
![solus plasma 版本的系统菜单截图][4]
Solus 4.4 带来了许多改进,其中一些最显著的包括以下内容:
- 更好的硬件支持
- 桌面环境升级
- 更新的应用程序套件
#### 更好的硬件支持
前所未有的Solus 4.4 使用 **Linux 内核 6.3.8** 作为强大的基础来支持各种硬件。硬件支持包括:
- 安全启动
- 英特尔 Arc 显卡
- 英伟达 40 系列显卡
- AMD Radeon RX 7600、7900 XT 和 7900 XTX 显卡
- 增强对各种光传感器和加速度计的支持
- 以及更多
#### 桌面环境升级
这是你将找到 Solus 中最关键的错误修复和提升用户体验的改进之处。由于提供了四个不同的版本,我们将介绍每个版本中的新功能。
##### GNOME 43.5
![solus 4.4 运行 GNOME 的截图][5]
Solus 4.4 **采用了最新的 [GNOME 43.5][6] 版本**,带来了许多调整。默认的窗口主题切换到了 Adwaita且默认启用了深色模式。
此外,更新了系统用户界面的样式,重新设计了系统状态菜单,方便快速更改常用设置。
##### MATE 将被 XFCE 取代
![solus 4.4 运行 MATE 的截图][7]
而对于 MATE 版本Solus 4.4 **采用了最新的 [MATE 1.27.1][8] 版本**。它包括**各种可靠性和可访问性的修复****更改了键盘驱动程序**,以及将 **qxl 视频驱动程序设为处理虚拟化视频驱动程序支持的默认驱动程序**
遗憾的是Solus 开发团队决定在未来的版本中 **淘汰 MATE 版本**,并采用 XFCE 版本。这其中的关键原因是 MATE 项目处于非常 **衰败的状态**,并且 **没有计划支持 Wayland**
#### Budgie 10.7.2
![solus 4.4 运行 Budgie 的截图][9]
对于 Budgie 版本Solus 4.4 **采用了 [Budgie 10.7.2][10] 版本**,使 Solus 能够利用**新的应用索引器**、**重新设计的设置菜单**、**可访问性改进**等功能。
此外Solus 现在**默认使用 Nemo 文件管理器**,不再使用 Nautilus。原因是 Nautilus 被更改为 GTK4 和 libadwaita不再符合系统其他部分的外观和感觉。
#### KDE Plasma
![solus 运行 Plasma 的截图][11]
同样,在 Plasma 版本中Solus 4.4 **采用了最新的 [Plasma 5.27.5][12] 版本**,以及 **KDE Frameworks 5.106.0**、**KDE Gear 23.04.2** 和 **KDE 分支的 QT 5.15.9**
这带来了许多新功能;其中一些亮点包括:
- 默认应用启动器被 [Kickoff][13] 替换
- Wayland 会话默认提供
- [KSysGuard][14] 被 [System Monitor][15] 替换
- 新的“总览视图”,可用于管理所有活动的桌面/应用程序
- 支持大屏幕模式
#### 更新的应用套件
除了上述更改之外Solus 4.4 还包括更新的应用套件,其中包括:
- Firefox 114.0.1
- LibreOffice 7.5.3.2
- Thunderbird 102.12.0
- Budgie、GNOME 和 MATE 版本的默认音乐播放器为 Rhythmbox
- Budgie 和 GNOME 上的视频播放使用 Celluloid
- MATE 上的视频播放使用 VLC Player
- Plasma 上的音频播放使用 Elisa视频播放使用 Haruna
你可以查看 [发布公告][16] 以深入了解这个重大版本更新。
### 📥 下载 Solus 4.4
Solus 的此版本有 **四个不同的版本**,你可以从 [官方网站][17] 获取它们。
> **[Solus 4.4][18]**
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/solus-4-4-released/
作者:[Sourav Rudra][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/sourav/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/07/solus-4-4-released.jpg
[2]: https://news.itsfoss.com/solus-revival/
[3]: https://itsfoss.com/independent-linux-distros/
[4]: https://news.itsfoss.com/content/images/2023/07/Solus_4.4.jpg
[5]: https://news.itsfoss.com/content/images/2023/07/Solus_4.4_GNOME.jpg
[6]: https://gitlab.gnome.org/GNOME/gnome-software/-/releases/43.5
[7]: https://news.itsfoss.com/content/images/2023/07/Solus_4.4_MATE.jpg
[8]: https://github.com/mate-desktop/mate-desktop/releases/tag/v1.27.1
[9]: https://news.itsfoss.com/content/images/2023/07/Solus_4.4_Budgie.jpg
[10]: https://blog.buddiesofbudgie.org/budgie-10-7-2/
[11]: https://news.itsfoss.com/content/images/2023/07/Solus_4.4_Plasma.jpg
[12]: https://kde.org/announcements/plasma/5/5.27.5/
[13]: https://userbase.kde.org/Plasma/Kickoff
[14]: https://apps.kde.org/ksysguard/
[15]: https://apps.kde.org/plasma-systemmonitor/
[16]: https://getsol.us/2023/07/08/solus-4-4-released/
[17]: https://getsol.us/download/
[18]: https://getsol.us/download/

View File

@@ -0,0 +1,224 @@
[#]: subject: "10 Best Cursor Themes for Linux Desktops"
[#]: via: "https://www.debugpoint.com/best-cursor-themes/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15998-1.html"
Linux 桌面的十个最佳光标主题
======
![][0]
> 一个用于各种 Linux 桌面的最佳光标主题的混合列表。
在 [定制 Linux 桌面][1] 时,我们经常忽视光标主题。一个经过深思熟虑选择的光标主题可以提升你的 Linux 桌面,增添个性化的风格并提升整体美感。从简约而精致的设计到奇妙而有趣的动画,这里是十个适合每个人的最佳光标主题。
### 如何在 Linux 桌面下载和安装光标主题
对于下面列出的所有主题,在相应页面上找到下载链接。下载压缩文件并解压缩。然后,将顶层的主题文件夹复制到 Linux 发行版中的 `~/.icons``/usr/share/icons` 目录中。然后按照下面的步骤进行相应桌面的设置。
#### Xfce
从应用菜单中选择 “<ruby>设置<rt>Settings</rt></ruby> > <ruby>设置管理<rt>Settings manager</rt></ruby> > <ruby>鼠标和触摸板<rt>Mouse and Touchpad</rt></ruby>”。然后转到 “<ruby>主题<rt>Themes</rt></ruby>” 选项卡并选择相应的光标主题。你还可以选择光标大小。
![在 Xfce 桌面设置光标主题][2]
#### KDE Plasma
从 KDE 应用菜单打开 “<ruby>系统设置<rt>System Settings</rt></ruby>”。然后选择 “<ruby>工作空间主题<rt>Workspace theme</rt></ruby> > <ruby>光标<rt>Cursors</rt></ruby>”。选择主题并点击 “<ruby>应用<rt>Apply</rt></ruby>”。
![在 KDE Plasma 桌面设置光标主题][3]
#### GNOME
对于 GNOME 桌面,请安装 GNOME “<ruby>调整<rt>Tweaks</rt></ruby>” 工具。你可以在基于 Debian 的系统上使用以下命令进行安装。
```
sudo apt install gnome-tweak-tool
```
安装后,你可以打开 GNOME 调整工具并选择 “<ruby>外观<rt>Appearance</rt></ruby>”。然后从下拉菜单中选择光标。
![GNOME Tweaks][4]
### Linux 的最佳光标主题
#### Bibata
Bibata 是一套备受赞誉的光标主题,已成为寻求个性化体验的用户的最爱。这个主题因其独特的圆角外观和各种颜色选项而最近变得流行起来。
这个多功能主题有各种变体,包括 Bibata Original Amber 和 Bibata Modern Amber分别具有带有黄色调的尖锐或圆角边缘。同样Bibata Original Classic 和 Bibata Modern Classic 提供带有尖锐或圆角边缘的黑色光标。而 Bibata Original Ice 和 Bibata Modern Ice 提供带有尖锐或圆角边缘的白色光标。
![Bibata Ice][5]
![Bibata Classic][6]
![Bibata Amber][7]
你可以从下面的页面下载这个主题。
> **[下载 Bibata 光标Ice][8]**
#### Phinger
Phinger 光标以其复杂的设计和精心的工程而闻名,是最复杂和“过度设计”的光标主题之一。它与 GNOME、MATE 和 Xfce 桌面环境兼容,并为不同 Linux 发行版的用户提供了多功能选项。该主题拥有黑白两种变体,确保简约而精致的光标体验。
![Phinger 光标][9]
你可以从下面的页面下载它,并按照上面给出的说明进行安装。
> **[下载 Phinger 光标][10]**
#### Comix
Comix 光标是个早期的光标主题,为你的 Linux 桌面注入了令人愉悦的漫画风格。这个 X11 鼠标主题包含 12 个独特的光标主题,每个主题都设计成在提升桌面工作流程的同时唤起一种活泼有趣的氛围。
![Comix 光标][11]
Comix 光标提供了六种颜色选择黑色、蓝色、绿色、橙色、红色和白色为用户提供了一系列选择以适应他们的个人风格和桌面美学。Comix 主题中的每个光标都具有微妙的阴影效果,为其注入活力和深度。这种动态元素增强了光标的视觉吸引力,并为桌面工作流程增添了一种动感。
你可以从下面的页面下载这个光标主题。
> **[下载 Comix 光标][12]**
#### McMojave
McMojave 光标从 macOS 获得灵感,是一个 x-cursor 主题,它基于流行的 capitaine-cursors 主题。这个主题旨在重新创建在 macOS 中找到的熟悉的光标样式,让 Linux 用户在他们的桌面上享受一丝 Mac 的体验。
LCTT 译注x-cursor 是一种标准用于描述和命名光标主题的文件格式和规范。x-cursor 主题通常用于 Linux 操作系统中的桌面环境,如 GNOME、KDE 和 Xfce。
![McMojave 光标][13]
尽管 McMojave 光标旨在重现 macOS 的光标体验,但它也为喜欢添加个人特色的用户提供了自定义选项。用户可以根据自己的喜好进行调整和修改,从而在 Linux 上实现个性化的光标体验。
你可以从下面的页面下载 McMojave 光标。
> **[下载 McMojave 光标][14]**
#### Layan
Layan 光标是一个 x-cursor 主题,灵感来自受欢迎的 Layan GTK 主题,并融入了成熟的 capitaine-cursors 的元素。这个独特的光标主题给 Linux 桌面体验增添了一丝时髦感。
与传统的箭头形状光标不同Layan 光标采用了独特的椭圆形状设计。这种非传统的形状为整体光标体验增添了一种活泼和时髦的元素,使它与更传统的主题有所区别。
![Layan 光标][15]
你可以使用下面的链接进行下载。
> **[下载 Layan 光标][16]**
#### Material
Material 光标是 Linux 用户长期以来的最爱,提供了一个视觉上吸引人的光标主题,得到了无数忠实用户的认可。该光标主题有三种颜色变体,即 Material蓝灰、Dark 和 Light以及从 24 像素到 64 像素的多种尺寸选项,适应了各种偏好和桌面环境。
![Material 光标][17]
成千上万的人每天都依赖于这个光标主题,展示了它持久的吸引力和可靠性。
凭借其三种颜色变体、多样的尺寸选项和广泛的采用,这个光标主题旨在提升你 Linux 桌面的美学,提供令人愉悦和沉浸式的光标体验。
你可以使用下面的链接下载这个光标主题。
> **[下载 Material 光标][18]**
#### Oreo
Oreo 光标以其丰富多彩的材质设计和迷人的动画为你的 Linux 桌面增添了令人愉悦的元素。这些光标旨在为你的光标体验增添一丝奇趣和个性。
![Oreo 光标][19]
Oreo 光标的独特之处在于其迷人的动画效果。这些动画光标注入了一种活泼和生动的元素,使你与桌面的交互感觉更具吸引力和愉悦感。
此外,这个主题通过提供自定义颜色生成器更进一步。用户可以使用配置文件创建自己的光标颜色方案,为光标设计带来无限的可能性和个性化。
你可以使用下面的链接下载这个主题。
> **[下载 Oreo 光标][20]**
#### Bibata Rainbow
Bibata Rainbow 光标扩展自受欢迎的 Bibata 光标主题,引入了半动画的彩虹颜色,增强了你的 Linux 桌面体验。这些光标是使用 clickgen 精心制作,并用 puppeteer 渲染的,确保高质量的视觉效果和平滑的动画。
![Bibata Rainbow][21]
Bibata Rainbow 中的每个光标包含大约 23 个帧,即使在 HiDPI高像素密度环境下也能实现平滑的动画效果。这确保了具有高分辨率显示屏的用户可以享受无缝和视觉上令人愉悦的光标体验。
你可以使用下面的链接下载 Bibata Rainbow 光标主题。
> **[下载 Bibata Rainbow 光标][22]**
#### Miniature
Miniature 光标是从一个同名 Windows 光标主题移植的,它提供了一种以小尺寸为特点的独特光标体验。顾名思义,这些光标被设计成紧凑型,可能非常适合各种用途。该主题整体采用清晰的白色,并提供了一个扁平设计和一个带有微妙阴影效果的变体。
![Miniature 光标][23]
你可以从下面的链接下载这个光标主题。
> **[下载 Miniature 光标][24]**
#### Capitaine
Capitaine 光标是一个 x-cursor 主题,灵感来自 macOS基于 KDE Breeze 图标包,提供了一种视觉上协调的光标体验。这个光标主题旨在与 La Capitaine 图标包完美配合,为你的 Linux 桌面创建一个统一的视觉风格。
![Capitaine Cursors][25]
Capitaine 光标提供了白色和黑色两种变体让用户可以根据自己的桌面环境或个人偏好选择最合适的颜色。无论你喜欢浅色还是深色光标Capitaine 光标都能满足你的需求。
你可以使用下面的链接下载这个主题。
> **[下载 Capitaine 光标][26]**
### 结论
在本文中,我们介绍了一些令人着迷的 Linux 光标主题,展示了一系列受欢迎的选择,可以改变你与桌面的交互方式。我希望你能找适合你 Linux 桌面上喜爱的主题或图标包的完美光标。
以上所有的光标主题都在最新的发行版和桌面版本中进行了测试。你可以尝试它们!
图片来源:各个主题作者。
*题图MJ/35aaca9e-9ff3-49f2-b311-20e7fcfb5c9d*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/best-cursor-themes/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://www.debugpoint.com/category/themes
[2]: https://www.debugpoint.com/wp-content/uploads/2023/07/Setting-up-cursor-theme-in-Xfce-desktop.jpg
[3]: https://www.debugpoint.com/wp-content/uploads/2023/07/Set-up-cursor-in-KDE-Plasma-desktop.jpg
[4]: https://www.debugpoint.com/wp-content/uploads/2018/05/GNOME-Tweaks.png
[5]: https://www.debugpoint.com/wp-content/uploads/2023/07/Bibata-Ice.jpg
[6]: https://www.debugpoint.com/wp-content/uploads/2023/07/Bibata-Classic.jpg
[7]: https://www.debugpoint.com/wp-content/uploads/2023/07/Bibata-Amber.jpg
[8]: https://www.gnome-look.org/p/1197198/
[9]: https://www.debugpoint.com/wp-content/uploads/2023/07/Phinger-cursor.jpg
[10]: https://github.com/phisch/phinger-cursors
[11]: https://www.debugpoint.com/wp-content/uploads/2023/07/Comix-cursor.jpg
[12]: https://www.gnome-look.org/p/999996
[13]: https://www.debugpoint.com/wp-content/uploads/2023/07/McMojave-cursors.jpg
[14]: https://github.com/vinceliuice/McMojave-cursors
[15]: https://www.debugpoint.com/wp-content/uploads/2023/07/Layan-Cursor.jpg
[16]: https://www.gnome-look.org/p/1365214/
[17]: https://www.debugpoint.com/wp-content/uploads/2023/07/MAterial-Cursor.jpg
[18]: https://www.gnome-look.org/p/1346778/
[19]: https://www.debugpoint.com/wp-content/uploads/2023/07/Oreo-Cursor-themes.jpg
[20]: https://www.gnome-look.org/p/1360254/
[21]: https://www.debugpoint.com/wp-content/uploads/2023/07/Bibata-Rainbow.gif
[22]: https://www.gnome-look.org/p/1445634/
[23]: https://www.debugpoint.com/wp-content/uploads/2023/07/Miniature-cursor-theme.jpg
[24]: https://github.com/nxll/miniature
[25]: https://www.debugpoint.com/wp-content/uploads/2023/07/Capitaine-Cursors.jpg
[26]: https://github.com/keeferrourke/capitaine-cursors
[0]: https://img.linux.net.cn/data/attachment/album/202307/14/134252egg40xxdg33vvr3r.jpg

View File

@@ -0,0 +1,95 @@
[#]: subject: "EndeavourOS Artemis Released with Better ARM Support and Updates"
[#]: via: "https://debugpointnews.com/endeavouros-artemis/"
[#]: author: "arindam https://debugpointnews.com/author/dpicubegmail-com/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-15990-1.html"
EndeavourOS Artemis 22.06 发布,带来更好的 ARM 支持
======
> EndeavourOS 团队发布了 6 月份的 22.06 版本“Artemis”带来了更好的 ARM 支持,最新内核等功能。我们在本文中总结发布内容。
![EndeavourOS Artemis 22.06 桌面Xfce][1]
### EndeavourOS Artemis 发布22.06
[EndeavourOS][2] Artemis 版本22.06)以 NASA 即将进行的月球任务 “<ruby>阿尔忒弥斯<rt>Artemis</rt></ruby>” 命名,为这个出色的 Linux 发行版带来了定期的 Arch Linux 更新。
#### ARM 更新
EndeavourOS 的 ARM 版本首次发布于 2020 年,成为了该团队的长期目标。这个目标是为用户提供一种稳定的基于 Arch Linux 的 ARM 变体发行版,注重 “友好性” 和 “功能性”。在 22.06 中ARM ISO 被称为 “更接近主要发布版本”。
这次月度更新中的重要改变是在 ARM 安装过程中引入了 Calamares 安装程序。此外ARM 安装的快捷方式被放置在其标志性的 “<ruby>欢迎<rt>Welcome</rt></ruby>” 应用程序中。
![EndeavourOS Artemis 提供更好的 ARM 可访问性][3]
然而ARM 中的 Calamares 安装程序仍处于 BETA 阶段。这意味着在安装时需要谨慎目前支持的设备有Odroid N2/N2+ 和树莓派。
此外ARM 安装中的桌面环境和软件包已经更加精细调整以与上游同步。因此,你可以在树莓派设备上获得最新和最优秀的软件。
#### 其他变化
除了上述变更外EndeavourOS 22.06 版本还带来了 Linux 内核 5.18.5。截至撰写本文时Linux 内核 5.19 尚未发布。因此,在这个出色发行版的下一个 ISO 更新中可能会包含该版本。
此次发布中的其他值得注意的变更包括将 pipewire-media-session 替换为 wireplumber并对 Xfce 离线安装进行了代码清理。此外,著名的 Budgie 控制中心现在在该发行版的 Budgie 版本中已经可用,以提供原生 Budgie 的体验。
总结起来,这个版本的主要变更如下:
- ARM ISO 更接近主要发布版本
- ARM 安装中可使用 Calamares 安装程序
- Linux 内核 5.18.5
- Xfce 4.16 版本(旗舰版)进行了安装程序代码清理
- Budgie 控制中心现在在 EndeavourOS 存储库中可用
- 在在线安装之前提供更好的密钥环同步问题控制
- 添加了降级软件包的支持 - eos-downgrade
- Firefox 101.x
### 简单测评
我们在虚拟机环境中测试了这个发行版。Xfce 离线安装的下载大小为 1.8 GB并且安装过程很顺利。镜像下周速度非常快。
首先,<ruby>立付<rt>Live</rt></ruby> 桌面可以让你启动安装 - 支持离线和在线两种。离线安装将安装 Xfce 桌面环境。此外,如果你有互联网连接,可以使用在线安装选项安装其他桌面环境和窗口管理器。
其次,通过 Calamares 安装非常顺利。尽管最近发布了 “archinstall”它使 Arch Linux 的安装变得非常容易。我必须说EndeavourOS 正在成为 Arch Linux 世界中的 “Linux Mint”。
安装完成后,桌面将通过 “欢迎” 应用程序向你表示欢迎。如果你是新用户,“欢迎” 应用程序为你提供一个入口点,用于执行各种桌面任务。
性能经过了良好优化。在空闲状态下,此版本在 Xfce 桌面上使用 2% 到 3% 的 CPU 和约 900 MB 的 RAM。这是一个不错的指标。
![EndeavourOS Artemis 性能][4]
此外,如果你打开更多应用程序进行工作,资源消耗可能会增加。
最后EndeavourOS Artemis Xfce 版默认安装占用 4.2 GB 的磁盘空间。
### 下载
你可以在此页面下载官方发布版本,其中包含镜像和种子文件。
> **[下载 EndeavourOS][5]**
参考自官方 [发布公告][6]。
--------------------------------------------------------------------------------
via: https://debugpointnews.com/endeavouros-artemis/
作者:[arindam][a]
选题:[lkxed][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://debugpointnews.com/author/dpicubegmail-com/
[b]: https://github.com/lkxed/
[1]: https://debugpointnews.com/wp-content/uploads/2022/06/EndeavourOS-Artemis-22.06-Desktop-Xfce.jpg
[2]: https://debugpointnews.com/tag/endeavouros/
[3]: https://debugpointnews.com/wp-content/uploads/2022/06/EndeavourOS-Artemis-brings-better-accessibility-for-ARM.jpg
[4]: https://debugpointnews.com/wp-content/uploads/2022/06/EndeavourOS-Artemis-Performance.jpg
[5]: https://endeavouros.com/latest-release/
[6]: https://endeavouros.com/news/artemis-is-launched/
[7]: https://floss.social/@debugpoint

View File

@@ -0,0 +1,192 @@
[#]: subject: "Every Year is Someone's Year of Linux Desktop"
[#]: via: "https://news.itsfoss.com/filiming-with-foss-tech/"
[#]: author: "Community https://news.itsfoss.com/author/team/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16041-1.html"
每年都是某个人的 “Linux 桌面之年”
======
当我的第一部特别电影获得批准时,我正处于为期两年的 Linux 实验中。我是如何使用(大多数)开源软件技术制作我的电影的呢?
![][0]
我在 2020 年爱上了 Linux。时机不可能更尴尬了。
世界卫生组织宣布我们这一生中的第一次大流行病降临。我刚刚从工作中休假,打算利用这段时间完成硕士学位,并完成我处女作《第一次言辞》的续集。
但作家是一群善变的人。有时我们的注意力可以持续数周,锐利无比。有时,我们的注意力却像金鱼一样短暂。
那时我处在金鱼模式中。
我需要一些东西来逃离我日复一日的生活:醒来,写几个小时,开始学习,完成课程作业,重复。
互联网上的某个地方有人提到,大流行病为人们提供了在日常计算中尝试 Linux 的最佳机会。
立刻,金鱼般的大脑被吸引住了。
这是有充分理由的:
20 年前,我放弃了电影学院,选择攻读计算机科学学士学位。
令我惊讶的是我发现自己喜欢上了大部分课程直到我们学习《Java 编程入门》时,我因此退学了,但这是另外一个故事);《计算机体系结构》、《网络》和《系统管理》模块真的引起了我的兴趣,我发现自己在学校实验室里花更多时间在安装了 Linux 的机器上。
关键是我和 Linux 之间有历史。
而在 2020 年,时机刚刚好。
### 疫情期间的技术爱好者生活
在我退学后的几年里,我远离了计算机引发我内心的那些好奇心。
作为对电影学院的替代,我成为了一名小说家。
我从信息技术转向了市场营销,并花费了 20 多年的时间为平面、电视、广播和数字平台撰写广告文案。
我创办了自己的广告代理公司。
在这 20 年里,我们目睹了社交媒体与互联网变得同义。
到了 2020 年,我决定永远离开广告界,其中很大一部分原因是我对技术的幻想破灭,尤其是对社交媒体的失望,特别是社交媒体以冷漠的方式伤害我们,无论是个人还是整个社会。
虽然我知道社交媒体并不等同于互联网,但在我的脑海中很难将它们分开。作为一个广告人,我也觉得自己在使社交媒体无处不在方面起到了一定的作用。
**拥有自己的 Linux 桌面之年,在整个大流行期间让我保持理智。**
### 2022 年:我首部特别电影
到了 2022 年,我已经在我的笔记本电脑上日常使用 Linux。我还买了一台旧的 ThinkPad T420安装了 Ubuntu Server并开始运行 Plex 和 NextCloud 的实例。
我在 Linux 上感到很自在,几乎将所有的写作工作都从 MS Word 和云存储转移到了 Vim 和 GitHub 上。
就在这时,我接到了一位制片人的电话,批准了我的首部特别电影。
此时我需要做一个决定。在片场剪辑镜头时我需要使用行业标准的非线性编辑器NLE。我对 Adobe Premiere 很熟悉,但我知道没有 Linux 版本。我已经尝试过 Kden Live 和其他几个自由开源软件的替代品,包括内置 NLE 的 Blender但都不太满意。
更重要的是,我担心我的写作流程 —— 完全基于NeoVim 和 Git ——对我的合作作者来说太陌生。
### 你好Windows
此时,我不得不问自己 Linux 是否准备好应对我未来的电影工作。为了回答这个问题,我提醒自己以下几点:
#### Linux 对非技术人员/非程序员来说是开放的(且易于接触)
我已经足够老了,记得当年 Ubuntu Linux 免费向世界上的任何人寄送安装光盘。那时我遇到了一系列我无法解决的硬件问题而且在我主要工具MS Word的高质量替代品方面非常匮乏。
到了 2020 年代Linux 已经变得截然不同。安装过程非常简单,帮助文档非常详尽,还有 Linux 的 YouTube 资源,使过渡变得更加顺利,我所有的硬件都完美地工作,我准备彻底放弃 MS Word。
#### Git 是作家的(秘密)好朋友
自从我第一次理解了 Git 的含义和它的用途以来,我就一直这样认为:不向作家教授 Git 是一种罪过。Linus Torvalds 无意间创造了作家的好朋友。
是的,我知道当 Git 无法正常工作时会有多么令人沮丧,但是将软件工程师处理大型代码库、多人贡献的复杂 Git 工作流程剥离后,你会发现它核心的功能似乎刚好为数字时代的作家量身定制。
与此同时,我和我的合作作者面临两个问题。由于我们位于不同的大陆,我们需要一个满足以下条件的系统:
以一种不会将文件弄得一团糟而无法阅读的方式追踪更改(这样在 MS Word、谷歌文档上进行协作会非常痛苦
以行业标准格式格式化剧本,而无需购买 Final Draft 等剧本撰写软件。
Git 和 GitHub 满足了第一个要求。而专门为剧本撰写创建的标记语法 [Fountain][5] 解决了第二个问题。
#### Linux 和好莱坞
这可能会让很多人感到惊讶,但自上世纪 90 年代以来Linux 已经牢固地融入了好莱坞的后期制作工作流程中。
早在 1998 年《泰坦尼克号》这样具有标志性的电影的后期制作中Linux 就扮演了至关重要的角色。BlackMagic 的 <ruby>[达芬奇调色软件][7]<rt>aVinci Resolve</rt></ruby> 最初是一款在基于 CentOS 或 RHEL 的系统上运行的首选色彩分级工具。
如今,达芬奇调色软件已成为一款功能完备的编辑器,是电影制片人和 YouTuber 们的首选工具。对我们 Linux 用户而言,该公司继续提供其软件的免费版本以供 Fedora 和基于 Debian 的系统使用。对于 Arch 用户AUR 中也提供了一个达芬奇调色软件版本,尽管我没有亲自测试过。具体效果可能因人而异。
### 如何在大部分 FOSS 技术的支持下完成我的电影
让我分享一下我的电影制作工作流程。
#### 前期制作
##### 影片概念说明
我使用 NeoVim 和 Org 模式语法编写了 [影片概念说明][8]。Org 模式对于编写类似报告的文档结构非常有用。[Vim-org][10] 能够轻松将文档导出为 PDF、LaTeX、HTML 和 doc 格式。我喜欢将我的文档保存为开放文件标准,以确保在各种设备间的可移植性,所以我选择了 PDF 格式。下面的截图是电影拍摄前的最终影片概念说明:
![影片概念说明][11]
##### 剧本
我与合作作者商定了一种简单的工作流程。我在一天的时间里向她介绍了 VSCode、Fountain、Git 和 GitHub 的基本知识,之后她就得心应手了。此后的合作过程基本上是无缝的,基于 Git 的工作流程对我们两个人来说几乎成为自然而然的事情。请记住,我们两个人都不具备软件背景。下面的图片显示了 NeoVim 上正在编辑的 Fountain 剧本文件,而右侧的屏幕上是 [Zathura PDF 阅读器][12] 即时渲染的剧本。
![使用自由开源软件技术进行剧本创作][13]
#### 制作
##### 每日镜头回顾
我们在锡哈拉加雨林进行了主要拍摄,这是该国最古老的森林之一。我们在那里待了一个星期。我带上了我的日常使用机(一台运行 Ubuntu Studio 20.04 的 Dell XPS 9750在一天的拍摄结束后使用达芬奇调色软件来回顾当天的镜头。
##### 使用 Rsync 进行备份
负责备份每日镜头素材的工作人员会在主硬盘上进行备份,然后在其他外部存储设备上进行二次备份。由于我也带了我的 ThinkPad 服务器,我使用 [Rsync][14] 自动化进行备份。
#### 后期制作
##### 编辑
尽管我的 XPS 笔记本内部配置足以处理这个项目,但我并不打算在上面进行影片编辑。最初,我是在工作室的一台运行达芬奇调色软件的 Windows 机器上进行编辑的。不幸的是2022 年第二季度,斯里兰卡经济陷入了自由落体,该国已经无法偿还债务。燃料短缺和停电使得我无法前往工作室进行编辑工作,增加了我的困扰。
就在这时,我的调色师建议我们将项目转移到我的笔记本电脑上,这样我就可以在家工作。他多年来一直在 CentOS 上运行达芬奇调色软件,他认为在 Ubuntu 机器上做同样的工作没有问题。为了确保我可以进行快速编辑,他将代理素材转码为 [ProRes 422][15] 720p。
一旦我们克服了这些小问题,编辑本身就是非常稳定和无压力的操作。完成后,我的电影制作人朋友们都在问我一台运行 Linux 的笔记本电脑是如何处理这个项目的。
### 结论:我们到达目的地了吗?
在某个时刻,每个最近转向 Linux 的人都会参与到“Linux 桌面之年”的辩论中。
三年过去了,我的观念发生了变化:从理想主义(大约在 2030 年左右到现实主义永远不会发生再到我目前的立场《Linux 桌面之年》掌握在“技术探索者”的手中。
“技术探索者”被技术所吸引,有时超出主流的范畴。
而作为对社交媒体技术和大型科技公司感到幻灭的人,我正好处于尝试 Linux 桌面的理想状态。
如果以我的经验为例,大多数精通技术的人都可以实现 “Linux 桌面之年”。通过使用其他自由开源软件工具(如 Git、Fountain、Markdown、LaTeX、Org 模式和NeoVim我相信像我这样的小说家和电影制片人类型的人有足够的理由转向 Linux。
当然,如果 Black Magic 没有推出达芬奇调色软件的 Linux 版本,我就不能说这番话,但幸运的是,他们不是 Adobe 或微软。
要让人们接受 Linux 桌面,关键是专有软件的开发者们也要加入进来,承认 Linux 领域有一些用户需要与 Windows 和 Mac 领域同样的工具。如果这种情况发生,我们可能会看到 “Linux 桌面” 从梗成为现实。
> 📋 由斯里兰卡的小说家/电影制片人 [Theena Kumaragurunathan][17] 撰写。他的首部小说已在 [亚马逊 Kindle][18] 上发售,并且他的第一部长片正在筹备发行中。
*题图MJ/1bace6a9-5d11-4cae-921c-18a850b7bff1*
--------------------------------------------------------------------------------
via: https://news.itsfoss.com/filiming-with-foss-tech/
作者:[Theena Kumaragurunathan][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://news.itsfoss.com/author/team/
[b]: https://github.com/lkxed/
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/07/year-of-linux-desktop-1.png
[2]: https://www.amazon.com/First-Utterance-Miragian-Cycles-Book-ebook/dp/B08MBX8GRZ
[3]: https://www.cambridge.org/core/journals/law-and-social-inquiry/article/abs/is-facebook-the-internet-ethnographic-perspectives-on-open-internet-governance-in-brazil/CF7526E09C0E05DCD587DC8E0E01D9C1
[4]: https://news.itsfoss.com/configuring-vim-writing/
[5]: https://fountain.io/
[6]: https://www.linuxjournal.com/article/2494
[7]: https://www.blackmagicdesign.com/products/davinciresolve
[8]: https://www.studiobinder.com/blog/what-is-a-film-treatment-definition/#:~:text=A%20film%20treatment%20is%20a,or%20even%20purchasing%20your%20idea.
[9]: https://orgmode.org/
[10]: https://www.vim.org/scripts/script.php?script_id=3642
[11]: https://news.itsfoss.com/content/images/2023/07/filming-with-foss-tech.jpg
[12]: https://pwmt.org/projects/zathura/
[13]: https://news.itsfoss.com/content/images/size/w2400/2023/07/film-scripting-with-foss.jpg
[14]: https://www.wikiwand.com/en/Rsync
[15]: https://support.apple.com/en-us/HT202410
[16]: https://www.google.com/search?q=year+of+linux+desktop&sourceid=chrome&ie=UTF-8
[17]: https://theena.net/
[18]: https://www.amazon.com/First-Utterance-Miragian-Cycles-Book-ebook/dp/B08MBX8GRZ
[0]: https://img.linux.net.cn/data/attachment/album/202307/28/073821x1krrwlm1081jk8k.jpg

View File

@@ -0,0 +1,140 @@
[#]: subject: "How to Install Jupyter Notebook in Debian or Ubuntu Linux"
[#]: via: "https://www.debugpoint.com/install-jupyter-ubuntu/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16040-1.html"
如何在 Linux 中安装 Jupyter Notebook
======
![][0]
> 如何在 Ubuntu 或 Debian Linux 中安装 Jupyter Notebook 的简单教程。
[Jupyter][1] Notebook 是一款功能强大的基于 Web 的交互式开发工具,可让你创建和共享实时代码、可视化和交互式数据。其笔记本格式结合了代码和文本,使其成为数据探索、分析和协作项目的绝佳选择。
在本教程中,我们将逐步指导你在基于 Ubuntu 或 Debian 的系统上安装 Jupyter Notebook使你能够利用其多功能性并扩展编程能力。
### 安装 pip
在开始之前,请确保你的系统上已安装 `pip`Python 包安装程序)。如果你已经安装了 `pip`,则可以跳过此步骤。否则,请按照以下说明进行安装。你还可以访问 [此页面][2] 获取详细说明。
打开终端窗口(`Ctrl+Alt+T`)并输入以下命令,按回车键:
```
sudo apt updatesudo apt install python3-pip
```
系统可能会提示你输入密码。提供它并等待安装完成。
### 安装 virtualenv
尽管不是强制性的,但建议在 Jupyter Notebook 安装中通过此工具隔离你的工作环境。这可以确保你安装的任何更改或软件包都不会干扰系统的 Python 环境。要设置虚拟环境,请按照以下步骤操作:
在终端中,输入以下命令:
```
sudo apt install python3-virtualenv
```
等待安装完成。完成后,继续下一步。
### 创建虚拟环境
创建虚拟环境是一个简单的过程。以下是专门为 Jupyter Notebook 设置新虚拟环境的方法:
进入到要在其中创建虚拟环境的目录。在终端中运行以下命令:
```
virtualenv my-jupyter-env
```
此命令创建一个名为 `my-jupyter-env` 的新目录,其中将包含虚拟环境文件。
![create jupyter environment][3]
你还可以通过任何文件管理器验证该目录是否在你的主文件夹下创建成功。
![jupyter env folders][4]
输入以下命令激活虚拟环境:
```
source my-jupyter-env/bin/activate
```
你会注意到终端提示符发生变化,表明你现在位于虚拟环境中。
![activate the environment][5]
### 安装 Jupyter Notebook
激活虚拟环境后,你现在可以继续安装 Jupyter Notebook
在终端中,输入以下命令:
```
pip install jupyter
```
此命令会获取必要的包并在虚拟环境中安装 Jupyter Notebook。
![Installing jupyter using pip][6]
### 启动 Jupyter Notebook
安装完成后,你就可以启动 Jupyter Notebook
在终端中,输入以下命令:
```
jupyter notebook
```
执行命令后Jupyter Notebook 将启动,你应该看到类似于以下内容的输出:
![running jupyter notebook in Debian][7]
你的默认 Web 浏览器将打开,显示 Jupyter Notebook 界面。
![Jupyter notebook running in browser][8]
### 关闭并重新启动
如果要关闭 Notebook 服务器,请确保关闭并保存所有笔记。关闭浏览器。然后在终端窗口中按 `CTRL+C`。它会提示你是否要关闭服务器。输入 `Yes` 并按回车键。最后,关闭终端窗口。
要再次重新启动服务器,你需要按上面的描述运行 `virtualenv my-jupyter-env` 等所有命令
### 总结
恭喜! 你已在 Ubuntu 或 Debian 系统上成功安装 Jupyter Notebook。通过执行上述步骤你现在可以利用 Jupyter 的交互式开发环境轻松编写代码、创建可视化并探索数据。
请记住Jupyter Notebook 支持各种编程语言,包括 Python并提供大量插件来进一步扩展其功能。
*题图MJ/e3436c7f-435d-491e-9032-b945730cb000*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/install-jupyter-ubuntu/
作者:[Arindam][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://jupyter.org/
[2]: https://www.debugpoint.com/pip-command-not-found/
[3]: https://www.debugpoint.com/wp-content/uploads/2023/07/create-jupyter-environment.jpg
[4]: https://www.debugpoint.com/wp-content/uploads/2023/07/jupyter-env-folders.jpg
[5]: https://www.debugpoint.com/wp-content/uploads/2023/07/active-the-environment.jpg
[6]: https://www.debugpoint.com/wp-content/uploads/2023/07/Installing-jupyter-using-pip.jpg
[7]: https://www.debugpoint.com/wp-content/uploads/2023/07/running-jupyter-notebook-in-Debian.jpg
[8]: https://www.debugpoint.com/wp-content/uploads/2023/07/Jupyter-notebook-running-in-browser.jpg
[0]: https://img.linux.net.cn/data/attachment/album/202307/28/063430e6lz9elvz4pw55l4.jpg

View File

@@ -0,0 +1,154 @@
[#]: subject: "Bash Basics Series #6: Handling String Operations"
[#]: via: "https://itsfoss.com/bash-strings/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lkxed"
[#]: translator: "geekpi"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16047-1.html"
Bash 基础知识系列 #6:处理字符串操作
======
![][0]
在大多数编程语言中,你都会找到字符串数据类型。字符串基本上是一组字符。
但 Bash shell 有所不同。字符串没有单独的数据类型。这里一切都是变量。
但这并不意味着你不能像在 C 和其他编程语言中那样处理字符串。
在 Bash Shell 中可以查找子字符串、替换子字符串、连接字符串以及更多字符串操作。
在 Bash 基础知识系列的这一部分中,你将学习基本的字符串操作。
### 在 Bash 中获取字符串长度
让我们从最简单的选项开始。也就是获取字符串的长度。这很简单:
```
${#string}
```
让我们在示例中使用它。
![Example of getting string length in bash][1]
正如你所看到的,第二个示例中有两个单词,但由于它用引号引起来,因此它被视为单个单词。连空格都算作一个字符。
### 在 Bash 中连接字符串
用技术术语来说是字符串 <ruby>连接<rt>concatenation</rt></ruby>,这是 Bash 中最简单的字符串操作之一。
你只需像这样一个接一个地使用字符串变量:
```
str3=$str1$str2
```
还能比这更简单吗?我觉得不能。
让我们看一个例子。这是我的示例脚本,名为 `join.sh`
```
#!/bin/bash
read -p "Enter first string: " str1
read -p "Enter second string: " str2
joined=$str1$str2
echo "The joined string is: $joined"
```
以下是该脚本的运行示例:
![Join two strings in bash][2]
### 在 Bash 中提取子字符串
假设你有一个包含多个字符的大字符串,并且你想要提取其中的一部分。
要提取子字符串,需要指定主字符串、子字符串的起始位置和子字符串的长度,如下所示:
```
${string:$pos:$len}
```
> 💡 和数组一样,字符串中的定位也是从 0 开始。
这是一个例子:
![Extracting substring in bash][3]
即使你指定的子字符串长度大于字符串长度,它也只会到达字符串末尾。
### 替换 Bash 中的子字符串
假设你有一个大字符串,并且你想用另一个字符串替换其中的一部分。
在这种情况下,你可以使用这种语法:
```
${string/substr1/substr2}
```
> ✋ 只有第一次出现的子字符串才会以这种方式替换。如果要替换所有出现的地方,请使用 `${string//substr1/substr2}`
这是一个例子:
![Replace substring in bash][4]
正如你在上面看到的“good” 一词被替换为 “best”。我将替换的字符串保存到同一字符串中以更改原始字符串。
> 💡 如果未找到子字符串,则不会替换任何内容。它不会导致错误。
### 在 Bash 中删除子字符串
我们来谈谈删除子字符串。假设你要删除字符串的一部分。在这种情况下,只需将子字符串提供给主字符串,如下所示:
```
${string/substring}
```
> ✋ 通过这种方式,仅删除第一次出现的子字符串。如果要删除所有出现的内容,请使用 `${string//substr}`
如果找到子字符串,则将从字符串中删除它。
让我们通过一个例子来看看。
![Delete substring in bash][5]
不用说,如果没有找到子字符串,则不会删除它。它不会导致错误。
### 🏋️ 练习时间
现在是你通过简单练习来实践字符串操作的时候了。
**练习 1**:声明一个字符串 “I am all wet”。现在通过用 “set” 替换单词 “wet” 来更改此字符串。
**练习 2**:创建一个字符串,以 `112-123-1234` 格式保存电话号码。现在,你必须删除所有 `-`
这应该会给你一些在 Bash 中使用字符串的不错的练习。在下一章中,你将学习如何在 Bash 中使用 `if-else` 语句。敬请关注。
*题图MJ/aa73b2c9-6d2f-42e2-972d-94fab56d30cc*
--------------------------------------------------------------------------------
via: https://itsfoss.com/bash-strings/
作者:[Abhishek Prakash][a]
选题:[lkxed][b]
译者:[geekpi](https://github.com/geekpi)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lkxed/
[1]: https://itsfoss.com/content/images/2023/07/bash-string-length-example.png
[2]: https://itsfoss.com/content/images/2023/07/join-strings-bash.png
[3]: https://itsfoss.com/content/images/2023/07/extract-substring-bash.png
[4]: https://itsfoss.com/content/images/2023/07/replace-substring-bash.png
[5]: https://itsfoss.com/content/images/2023/07/bash-delete-substring.png
[0]: https://img.linux.net.cn/data/attachment/album/202307/30/090030gvm6pgutlvzll4zg.jpg

View File

@@ -0,0 +1,159 @@
[#]: subject: "Linux Shells: Bash, Zsh, and Fish Explained"
[#]: via: "https://www.debugpoint.com/linux-shells/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16038-1.html"
Linux Shell 介绍Bash、Zsh 和 Fish
======
![][0]
> 关于著名的 Linux Shell - Bash、Zsh 和 Fish 的一些注释和特性。
Linux 之所以强大是因为它提供了用于与系统进行交互的多功能的命令行界面。在这中情况下Shell 扮演了用户和 Linux 内核之间的桥梁。本文将探讨三种流行的 Linux Shell - Bash、Zsh 和 Fish并深入了解它们的独特特性和功能。
### 理解 Linux Shell
#### 什么是 Shell
Shell 是一个命令行解释器,允许你通过文本命令与操作系统进行交互。它接收你的输入,处理它,并与 Linux 内核通信以执行所请求的操作。最后,它会给你一个输出。
LCTT 译注“Shell” 一词大约取自其“界面”、“外壳”的含义。)
Shell 在 Linux 中起着至关重要的作用,因为它们使用户能够执行各种任务,从简单的文件导航到复杂的系统管理任务。不同的 Shell 提供各种功能,因此选择适合你工作流程的 Shell 至关重要。
### Bash
[Bash][1],全称 “Bourne Again SHell”是 Linux 发行版中最广泛使用的默认 Shell 之一。它以其简洁和兼容性而闻名,是初学者的优秀选择。
#### Bash 的特点
Bash 具有众多特性,包括:
- 命令历史:使用箭头键轻松访问先前执行的命令。
- `Tab` 键补全:节省时间,让 Bash 为你自动完成文件名和命令。
- 脚本编写:编写和运行 Shell 脚本以自动化重复任务。从这个角度来看,它也是一个程序。
- Bash 在大多数 GNU/Linux 系统中默认安装。
- 配置设置存储在家目录下的 `.bashrc` 文件中。
和其他 Shell 一样Bash 有其优点和缺点。使用 Bash 的一些优势包括广泛的使用性、详尽的文档以及庞大的社区支持。然而Bash 可能缺乏其他 Shell 中存在的一些现代化特性。
![Linux 中的 Bash shell][2]
#### 安装
- 在 Linux 发行版中打开终端。
- 输入 `bash --version` 检查是否已安装 Bash。
- 若尚未安装,使用软件包管理器安装 Bash。例如在 Ubuntu 上,输入 `sudo apt-get install bash`
- 对于 Fedora 和基于 RPM 的 Linux请使用 `sudo dnf install bash`
### Zsh
[Zsh][3],全称 “Z Shell”是一种强大且功能丰富的 Shell深受经验丰富的用户欢迎。它吸取了 Bash 和其他 Shell 的优点,提升了用户体验。
#### Zsh 的优势
Zsh 提供了几个优势,包括:
- 高级自动补全Zsh 在 Bash 的基础上提供了更多上下文感知的建议,超越了简单的 `Tab` 键补全。
- 当你按下 `Tab` 键时Zsh 会显示可能的值以供选择,同时进行自动补全。
- 插件支持:通过社区中提供的各种插件,扩展 Zsh 的功能。
- 这里有一个 [庞大的 Zsh 主题集合][4]。
- 你还可以使用 [Oh My Zsh 脚本][5] 进行广泛的自定义。
![应用 powerlevel10k zsh 主题后的效果][6]
Zsh 的复杂性可能使新手感到不知所措,其丰富的配置选项可能会使初学者感到困惑。
以下是安装 Zsh 的方法:
- 在 Linux 发行版中打开终端。
- 输入 `zsh --version` 检查是否已安装 Zsh。
- 如果尚未安装,请使用软件包管理器安装 Zsh。
- 例如,在 Ubuntu 上,输入 `sudo apt-get install zsh`
- 对于 Fedora 和基于 RPM 的发行版,输入 `sudo dnf install zsh`
### Fish Shell
[Fish][7],全称 “Friendly Interactive SHell”着重于用户友好性和易用性。它拥有现代、直观的界面特别适合新的 Linux 用户。
#### Fish 的独特特性
Fish 的独特之处在于:
- 语法高亮:使用彩色标记文本来区分命令、选项和参数。
- 自动建议Fish 根据你的历史记录和当前输入智能地建议命令。
- Fish 被设计为开箱即用的高效工具。但是,你可以通过创建 `~/.config/fish/config.fish` 文件并添加自定义配置来进一步个性化它。
虽然 Fish 在用户友好性方面表现出色,但其独特的设计可能并不适合所有人。一些高级用户可能会发现某些功能在高级使用方面有所限制。
![Fish Shell][8]
#### Fish Shell 的安装
- 在 Linux 发行版中打开终端。
- 输入 `fish --version` 检查是否已安装 Fish。
- 如果尚未安装,请使用软件包管理器安装 Fish。例如在 Ubuntu 上,输入 `sudo apt-get install fish`
- 对于 Fedora 和其他基于 RPM 的发行版,输入 `sudo dnf install fish`
### Bash、Zsh 和 Fish 的比较
为了帮助你决定哪种 Shell 适合你的需求,让我们从各个方面比较这三个流行选择:
#### 性能与速度
Bash 以其速度和高效性而闻名适用于资源受限的系统。Zsh 虽然稍慢一些,但其广泛的功能和能力弥补了这一点。作为更具交互性的 ShellFish Shell 可能会略微降低性能,但提供了愉快的用户体验。
#### 用户界面和体验
Bash 的界面简单明了,非常适合初学者,而 Zsh 和 Fish 提供了更引人注目和交互式的界面。Zsh 的高级自动补全和 Fish 的语法高亮为用户创造了视觉上的吸引力。
#### 可定制性和插件
Zsh 在可定制性方面表现出色,允许用户对其 Shell 环境进行微调。通过庞大的插件集合Zsh 提供了无与伦比的可扩展性。Fish 则采取了更有主见的方式,专注于开箱即用的可用性,这可能对某些用户有所限制。
### 选择合适的 Shell
选择合适的 Shell 与你的具体需求和经验水平密切相关。
如果你是 Linux 的新手并且更喜欢简单、无花俏的体验Bash 是一个极好的起点。它的易用性和详尽的文档使其非常适合初学者。
对于希望更多掌握控制权并愿意花时间进行定制的经验丰富的用户来说Zsh 强大的功能和插件提供了一个令人兴奋和动态的环境。
如果你对自动化任务和编写复杂的 Shell 脚本感兴趣Bash 在 Linux 生态系统中的广泛应用和全面支持使其成为一个可靠的选择。
### 结论
Bash、Zsh 和 Fish 各有其优势,满足不同用户偏好。如果你刚接触 LinuxBash 的简单性使其成为一个极好的起点。精通用户和那些寻求定制化的用户可能会觉得 Zsh 更吸引人,而 Fish 的用户友好设计则适合寻求直观界面的初学者。最终,选择权在你手中,探索这些 Shell 将带来更高效和愉悦的 Linux 使用体验。
你最喜欢的 Shell 是什么?在下方的评论框中告诉我。
*题图MJ/b6490b57-63bd-4fdd-bd3f-bf6d4aef1c4a*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/linux-shells/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://www.gnu.org/software/bash/
[2]: https://www.debugpoint.com/wp-content/uploads/2023/07/Bash-shell-in-Linux.jpg
[3]: https://www.zsh.org/
[4]: https://github.com/unixorn/awesome-zsh-plugins
[5]: https://www.debugpoint.com/oh-my-zsh-powerlevel10k/
[6]: https://www.debugpoint.com/wp-content/uploads/2022/12/After-applying-settings-in-powerlevel10k-zsh-theme.jpg
[7]: https://fishshell.com/
[8]: https://www.debugpoint.com/wp-content/uploads/2023/07/Fish-Shell.jpg
[9]: https://pixabay.com/users/julesroman-359800/
[0]: https://img.linux.net.cn/data/attachment/album/202307/27/152721rd48wwn7xxfkngdw.jpg

View File

@@ -0,0 +1,113 @@
[#]: subject: "LLaMA 2 vs GPT-4: What are the Differences?"
[#]: via: "https://www.debugpoint.com/llama-2-vs-gpt-4/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16030-1.html"
Llama 2 vs GPT-4有何区别
======
![][0]
> 了解 Llama 2 和 GPT-4 之间的主要区别,它们是自然语言处理的领先巨头。揭示它们的优势、劣势以及它们如何塑造语言技术的未来。
在撰写内容时,有两个关键因素至关重要,“<ruby>困惑度<rt>perplexity</rt></ruby>”和“<ruby>爆发性<rt>burstiness</rt></ruby>”。困惑度衡量文本的复杂程度。而爆发性则比较句子的变化程度。人类倾向于以较大的爆发性写作,例如长句或复杂句与短句并存。人工智能生成的句子往往更加均一。
在自然语言处理领域Llama 2 和 GPT-4 是两个杰出的参与者,吸引了研究人员和爱好者的关注。这些大型语言模型展示出独特的功能和特点。
虽然 GPT-4 由 OpenAI 已经发布一段时间,但 Meta 与微软合作推出了 Llama 2这是 LLaMa 扩展语言模型的改进版本。
让我们深入探讨这两个模型之间的关键区别,以了解它们的特点之所在。
### Llama 2简单易用
Llama 2 是其前身 LLaMa 的升级版本,以其简洁高效的特点震撼了科技界。尽管它支持的语言范围较窄,仅包括 20 种语言,但其性能令人印象深刻,可以与 GPT-4、Claude 或 Bard 等重量级模型相媲美。令人惊讶的是,尽管参数比 GPT-3 模型少,但 Llama 2 可以在单个 GPU 上高效运行,使其成为各种应用的更便捷选择。
Llama 2 真正的特点是它专门训练于公开可获得的数据集,使其对研究人员和开发人员更加可用。更为引人注目的是,尽管仅在 1,000 个精确提示的相对较小数据集上进行训练,它依然实现了有竞争力的结果。
### GPT-4
在 2023 年 3 月OpenAI 自豪地推出了其最新的创作——GPT-4这一力作轰动了语言模型领域。GPT-4 在许多任务中表现卓越,包括专业医学和法律考试,展示了其多功能和高水平的能力。
GPT-4 的一个显著特点是相对于之前的版本,它能够扩展最大输入长度。这个增强功能使其能够处理更加广泛和复杂的语言数据,为自然语言理解和生成开辟了新的可能性。
此外GPT-4 拥有广泛的语言支持,支持 26 种语言。这种多样的语言能力扩大了其在全球范围内的覆盖和适用性,使其成为多语言项目和应用的首选。
### 区别Llama 2 与 GPT-4
在比较 Llama 2 和 GPT-4 时我们可以看到两个模型都有各自独特的优缺点。Llama 2 以其简洁高效的特点脱颖而出,尽管其数据集较小且语言支持有限,但其表现卓越。其易用性和有竞争力的结果使其成为某些应用的有力选择。
另一方面GPT-4 在各种任务上的出色表现和广泛的语言支持使其成为更复杂和多样化项目的强大选择。然而,关于其模型架构和训练数据集的详细信息缺乏,还有一些问题尚待回答。
下表显示了两个模型的一些基准分数(以及其他热门模型):
| 基准测试 | <ruby>样本数<rt>Shot</rt></ruby> | GPT-3.5 | GPT-4 | PaLM | PaLM-2-L | Llama 2 |
| :- | :- | :- | :- | :- | :- | :- |
| MMLU 5 样本) | 70 | 78.3 | 86.1 | | | 86.4 |
| TriviaQA 1 样本) | 69.3 | 33 | 37.5 | | | 81.4 |
| Natural Questions 1 样本) | 68.9 | 37.5 | 52.3 | | | 85 |
| GSM8K 8 样本) | 85 | 56.5 | 56.8 | | | 87 |
| HumanEval 0 样本) | 48.1 | 92 | 56.7 | | | 51.2 |
| BIG-Bench Hard 3 样本) | 29.3 | 56.8 | 26.2 | | | 29.9 |
### 常见问题解答
1、Llama 2 和 GPT-4 的主要区别是什么?
主要区别在于设计和性能。Llama 2 注重简洁高效,而 GPT-4 具有扩展的输入长度和广泛的语言支持。
2、哪个模型更适合多语言模型
GPT-4 适用于多语言项目,因为它支持 26 种语言,为全球应用提供了更广泛的范围。
3、Llama 2 可以运行在单个 GPU 上吗?
是的Llama 2 可以在单个 GPU 上有效运行,使其成为各种应用的实用选择。
4、Llama 2 支持多少种语言?
Llama 2 支持 20 种语言,虽然比 GPT-4 稍少,但仍覆盖了相当广泛的语言范围。
5、GPT-4 是否有可用的基准测试?
不幸的是,没有提及 GPT-4 的具体基准测试,因此对其性能还有一些问题没有答案。
### 结论
Llama 2 和 GPT-4 代表了自然语言处理领域的前沿进展。尽管数据集较小Llama 2 以其简洁性、易用性和有竞争力的性能令人印象深刻。另一方面GPT-4 的多功能性、高水平和广泛的语言支持使其成为处理复杂项目的杰出选择。这两个模型对自然语言处理的发展做出了重要贡献,为语言技术在我们生活中发挥更加重要的作用铺平了道路。
基准测试参考:
- MMLU Benchmark (Multi-task Language Understanding): [https://arxiv.org/abs/2009.03300][1]
- Papers With Code: [https://paperswithcode.com/paper/measuring-massive-multitask-language][2]
- GPT-4 Technical Report: [https://arxiv.org/abs/2303.08774][3]
- PaLM: Scaling Language Modeling with Pathways: [https://www.marktechpost.com/2022/04/04/google-ais-latest-540-billion-parameter-model-pathways-language-model-called-palm-unlocks-new-tasks-proportional-to-scale/][4]
- Llama 2: Open Foundation and Fine-Tuned Chat Models: [https://www.youtube.com/watch?v=Xdl_zC1ChRs][5]
*题图MJ/60e112f7-3399-49fd-9157-c6b03de5efea*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/llama-2-vs-gpt-4/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://arxiv.org/abs/2009.03300
[2]: https://paperswithcode.com/paper/measuring-massive-multitask-language
[3]: https://arxiv.org/abs/2303.08774
[4]: https://www.marktechpost.com/2022/04/04/google-ais-latest-540-billion-parameter-model-pathways-language-model-called-palm-unlocks-new-tasks-proportional-to-scale/
[5]: https://www.youtube.com:443/watch?v=Xdl_zC1ChRs
[6]: https://pixabay.com/users/pezibear-526143/
[0]: https://img.linux.net.cn/data/attachment/album/202307/24/223302fj41272110s7df4c.jpg

View File

@@ -0,0 +1,189 @@
[#]: subject: "Top 5 Privacy Focused Linux Distributions [Compared]"
[#]: via: "https://www.debugpoint.com/privacy-linux-distributions-2022/"
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
[#]: collector: "lkxed"
[#]: translator: "ChatGPT"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-16034-1.html"
5 个专注于隐私保护的 Linux 发行版
======
![][0]
> 我们在这篇文章中列出了 2023 年排名前 5 的专注于隐私保护的 Linux 发行版,旨在提供给你在选择之前的参考。
随着疫情和远程办公的普及,网络隐私成为一个主要关注点。随着我们越深入数字世界,网络安全和隐私变得对每个人的日常生活都至关重要。几乎每天都会看到 [公共漏洞CVE][1],一个月中也会爆出几个 [零日漏洞][2] 和勒索软件攻击。
幸运的是,与 Windows 相比Linux 通常在设计上就相对安全。此外,如果你在日常工作中使用 Linux 发行版时遵循一些最佳实践,大多数 Linux 发行版也是安全的。
此外,一些特定的 [Linux 发行版][3] 为你的工作和个人使用提供了额外的安全层和工具。例如,如果你想在互联网上实现完全匿名,或者你是网络安全专家,你可能会考虑一些区别于普及的主流 Linux 发行版,如 Ubuntu 或 Fedora 的其他发行版。
以下是提供更好隐私保护和安全性的 5 个 Linux 发行版的列表。
### 2023年度最佳隐私专用 Linux 发行版
#### 1、Tails
<ruby>匿名隐私系统<rt>The Amnesic Incognito Live System</rt></ruby>(简称 Tails是一种基于 Debian 的 Linux 发行版,让你在浏览网页时完全匿名。它主要使用 Tor 网络,通过其网络重定向流量以隐藏你的位置和其他私密信息。此外,它还配备了处理电子邮件、浏览器和其他工具所需的所有必要安全应用程序。
如果你需要一种内置完全隐私功能的 Linux 发行版,请选择 Tails。
![Tails][4]
优点:
- 与 Tor 网络完美集成
- 预配置了 NoScript、HTTPS anywhere 和其他相关插件的浏览器Firefox
- 内置比特币钱包、无线网络审计工具,并配备 Onion Circuits
- <ruby>立付介质<rt>Live medium</rt></ruby>
更多详情:
- 主页:[https://tails.boum.org/][5]
- 发行频率:每年 5 到 6 次发布
- 发行类型Debian稳定版、GNOME、LIVE 图像、仅支持 64 位、x86_64
- 下载:[https://tails.boum.org/install/index.en.html][6]
#### 2、Parrot OS
Parrot OS以前称为 Parrot Security OS也是一种基于 Debian 的 Linux 发行版,主要面向网络安全专业人员和渗透测试人员,为他们提供了一种完整的 Linux 发行版,提供了他们所需的所有工具。
此外,你还可以将其用作日常使用,具有用于数字取证工作的内置沙盒选项。此外,它可以使用其容器化技术连接到其他设备。
![Parrot OS 隐私专用 Linux 发行版][7]
优点:
- 基于 Debian 的立付系统
- 提供多种桌面风格选择
- 运行的应用程序都被隔离在沙盒中
- 非常适合数字取证工作
更多详情:
- 主页:[https://parrotsec.org/][8]
- 发行频率:每年 2 到 3 次发布
- 发行类型Debian测试版、MATE 和 KDE Plasma、LIVE 图像、仅支持 64 位、x86_64
- 下载:[https://parrotsec.org/download/][9]
#### 3、Qubes OS
Qubes OS 是一种基于 Fedora Linux 的独特 Linux 发行版。Qubes 提供多个“虚拟机”被称为“Qubes”用于托管应用程序。该方法有效地将“个人”、“工作”或其他用户定义的工作流程隔离开来。
此外,为了区分不同的“虚拟机”,该发行版为配置文件提供了色彩代码,以便你知道哪个正在运行哪个应用程序。
使用这种方法,如果你在一个“虚拟机”中遭受身份泄露或下载了恶意软件,系统的其他部分都是安全的。这种方法被称为“安全隔离”,非常适合需要在互联网上保护隐私的科技爱好者和普通用户。
![Qubes OS 隐私专用 Linux 发行版][10]
优点:
- 通过独立的“虚拟机”实现“安全隔离”
- 内置沙盒支持
- 提供完全磁盘加密
- 通过色彩代码标记的“Qubes”方便进行工作流程导航
更多详情:
- 主页:[http://qubes-os.org/][11]
- 发行频率:每年 2 到 3 次发布
- 发行类型Fedora、Xfce、桌面版、仅支持 64 位、x86_64
- 下载:[https://www.qubes-os.org/downloads/][12]
#### 4、Kali Linux
Kali Linux 是基于 Debian 测试分支的最受欢迎的渗透测试 Linux 发行版。以印度教女神“卡利”命名,这个 Linux 发行版提供了适用于树莓派和其他设备的 32 位、64 位和 ARM 版本。此外,它搭载了大量的工具,使安全研究人员和网络安全专家能够在其他发行版上拥有优势。
![Kali Linux 隐私专用 Linux 发行版][13]
优点:
- Kali Linux 几乎成为安全研究人员的“行业标准”发行版
- 提供完全磁盘加密
- 支持 i686、x86 和 ARM
- LIVE 系统
- 提供完善的文档,以及用于自定义 Kali Linux 进行特定研究的培训套件
- Kali Linux 提供付费的渗透测试认证课程
更多详情:
- 主页:[http://www.kali.org/][14]
- 发行频率:每年 3 到 4 次发布
- 发行类型Debian测试版、GNOME、KDE Plasma 等等、桌面版和 LIVE 等等、32 位和 64 位、x86_64、i686、ARM
- 下载:[http://www.kali.org/downloads/][15]
#### 5、Whonix Linux
Whonix 是另一种基于 Debian 的独特设计的 Linux 发行版。它作为虚拟机在 VirtualBox 中运行,从而提供了一个不能驻留在磁盘上、在多次重启后不会丢失的操作系统。
此外,其独特的设计提供了一个连接到 Tor 网络的网关组件,以及一个名为“工作站”的第二个组件,负责运行所有用户应用程序。这些用户应用程序连接到网关,为应用程序和用户提供完全匿名性。最后,这种独特的两阶段隔离方法在确保完全隐私的同时,减轻了多种风险。
![Whonix 隐私专用 Linux 发行版][16]
优点:
- 两阶段隔离,分离网络和用户应用程序
- 支持 Tor 网络,提供 Tor 浏览器和即时通讯等应用程序
- 预装了主要应用程序
- 支持 Linux 内核运行时保护
更多详情:
- 主页:[https://www.whonix.org/][17]
- 发行频率:每年发布 1 次
- 发行类型Debian、桌面版、Xfce、64 位、x86_64
- 下载:[https://www.whonix.org/][17]
### 其它
除了上述列表,我们还要提到 Linux Kodachi 和 BlackArch Linux它们与上述发行版本类似。
首先,[Linux Kodachi][18] 也是一个基于 Debian 的发行版,使用 Tor 网络为用户提供隐私保护。它配备了 Xfce 桌面环境并提供仅支持64位的安装程序。
除了 Kodachi还有 [BlackArch Linux][19],它是本列表中唯一基于 Arch Linux 的发行版。它采用了窗口管理器(如 Fluxbox、Openbox而不是桌面环境并提供了 1000 多个适用于渗透测试和安全分析的应用程序。
### 总结
最后,我希望这个 2023 年顶级隐私专注的 Linux 发行版列表能给你保护自己和你在互联网上的隐私提供一个起点。
最后但并非最不重要的是,我要提醒你,如果你将上述发行版与 Tor 网络一起使用,请不要使用这些发行版进行任何银行或金融交易(尤其是那些使用手机验证的多因素身份验证的交易)。因为 Tor 会通过不同的国家路由你的流量,因此最好不要在这些发行版上进行金融工作。
图像来自各个发行版及维基百科。
*题图MJ/0603df83-3221-4a15-9312-011325786414*
--------------------------------------------------------------------------------
via: https://www.debugpoint.com/privacy-linux-distributions-2022/
作者:[Arindam][a]
选题:[lkxed][b]
译者ChatGPT
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.debugpoint.com/author/admin1/
[b]: https://github.com/lkxed/
[1]: https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures
[2]: https://en.wikipedia.org/wiki/Zero-day_(computing)
[3]: https://www.debugpoint.com/category/distributions
[4]: https://www.debugpoint.com/wp-content/uploads/2022/04/Tails.jpg
[5]: https://tails.boum.org/
[6]: https://tails.boum.org/install/index.en.html
[7]: https://www.debugpoint.com/wp-content/uploads/2022/04/Parrot-OS.jpg
[8]: https://parrotsec.org/
[9]: https://parrotsec.org/download/
[10]: https://www.debugpoint.com/wp-content/uploads/2022/04/Qubes-OS.jpg
[11]: http://qubes-os.org/
[12]: https://www.qubes-os.org/downloads/
[13]: https://www.debugpoint.com/wp-content/uploads/2022/04/Kali-Linux.jpg
[14]: http://www.kali.org/
[15]: http://www.kali.org/downloads/
[16]: https://www.debugpoint.com/wp-content/uploads/2022/04/Whonix.jpg
[17]: https://www.whonix.org/
[18]: https://www.digi77.com/linux-kodachi/
[19]: http://blackarch.org/
[0]: https://img.linux.net.cn/data/attachment/album/202307/26/065805uggn1zamz3ztt11i.jpg