分类 技术 下的文章

掌握这些极致实用的快捷键,让你的 Linux 终端操作效率大幅提升。

学习 Linux 命令无疑是你的首要任务,但当你能熟练 运用命令行 之后,有另一样东西值得你去关注。

那就是终端快捷键!

如果你不知道如何利用它们提升终端会话的效率,那你就无法真正理解它们的重要性。

在本教程中,我将为你详细讲解顶级的终端快捷键,并且举例说明它们的用法。

在我逐一解释快捷键之前,先来看一下这个备忘录,它对我将在本教程中讨论的内容进行了概览:

快捷键功能描述
Ctrl + A光标快速跳至行首。
Ctrl + E光标快速跳至行尾。
Ctrl + U删除光标至行首的所有内容。
Ctrl + K删除光标至行尾的所有内容。
Ctrl + W删除光标前的一个单词。
Ctrl + L清空整个终端屏幕。
Ctrl + C停止正在执行的进程或命令。
Ctrl + D注销或退出终端。
Ctrl + Z暂停正在执行的进程(之后可恢复执行)。
Ctrl + R在命令历史中进行逆向搜索。
上箭头 从命令历史中显示先前的命令。
下箭头 从命令历史中显示后续的命令。
!!重复执行最近的命令。
!n重复执行命令历史中的第 n 条命令。
Tab自动补全命令,文件名或目录名。
连续按 Tab 两次列出所有可能的补全选项。
Ctrl + Shift + C复制所选文本或命令。
Ctrl + Shift + V粘贴已复制的文本或命令。
Ctrl + Shift + N打开新的终端窗口。
Ctrl + Shift + T在当前终端中打开新的选项卡。
Ctrl + TabCtrl + PageDown在终端的选项卡之间切换。
? 虽然我在这篇文章中用的是大写字母,但实际上我们不需要使用大写来输入它们。比如 Ctrl+A,意思是同时按下 Ctrl 键和 A 键,并不意味着需要同时按下 Shift 键和 a 键来输入大写的 A

接下来,我们更详细地看看这些快捷键如何使用。

1、Ctrl + A:光标切换至行首

当你在终端中按下 Ctrl + A 组合键,光标就会迅速跳到命令的起始处。这个功能在你需要修改一条长命令序列起始部分的时候十分实用。

例如,在以下示例中,你可以看到无论光标处在何位置,只需按下 Ctrl + A,光标就会立刻跳转至行首:

使用 Ctrl + A 快捷键在 Linux 终端内前往行首

2、Ctrl + E:光标切换至行尾

在使用终端的过程中,如果你想迅速跳到当前行的末尾,直接按下 Ctrl + E 组合键就可以了。

在下面的示例中,我使用了一段样本文本,并按下 Ctrl + E 来快速移动到行尾:

使用 Ctrl + E 在 linux 终端内前往行尾

3、Ctrl + U:删除光标位置至行首的内容

有些时候,你可能需要删除从光标位置到行首的所有内容。

此时,你只需使用左箭头键将光标移动至你想要开始删除的位置,然后按下 Ctrl + U

使用 Ctrl+U 从光标位置删除到行首的内容

? 在输完 sudo 命令输入密码时,不确定是否输入正确?没必要用退格键一路删除,只需简单地使用 Ctrl+U 快捷键重新开始输入密码即可。

4、Ctrl + K:从光标删除至行尾

如你所猜想,当你按下 Ctrl + K ,它会移除光标至行尾的所有内容(光标位置右侧的所有)。

使用这种快捷操作时,你先要把光标放在你想从那里开始删除的位置,然后按下 Ctrl + K,如下图展示的那样:

在 Linux 终端利用 Ctrl + K 删除光标至行尾的内容

5、Ctrl + W:删除光标前的一个词

我日常常用该快捷键,因为我时常打错命令,需要删除命令的一部分,这个时候只需要简单地按 Ctrl + W 就可以了。

当你按下 Ctrl + W 键时,它只会删除光标前的一个词:

在 Linux 终端通过按 Ctrl + W 删除光标前的一个词

6、Ctrl + L:清理终端显示(或者理解为整理显示内容)

按下 Ctrl + L 并不会彻底地 清空终端显示,但它可以整理显示内容。如果你向上滚动,你还能找到之前的命令和执行记录。

它与 clear 命令有所不同。clear 命令会消除历史记录,而且你会在命令历史中找到 clear 命令的执行。

但是当你按下 Ctrl + L 时,它只是整理当前屏幕的显示内容,并不会出现在历史记录中,因为它本身并不是一条命令。

比如在这个示例中,我执行了历史命令,随后按下 Ctrl + L 键进行了屏幕清理:

利用 Ctrl+L 清理 Linux 终端屏幕显示

7、Ctrl + C:终止当前进程/执行

有没有想要 停止进行中的命令,却不知所措,最后只好关闭终端呢?解决办法其实很简单,按下 Ctrl + C 就行了。

当你按下这一组键时,它将发送 SIGINT 信号以终别过程。

例如,在这里,我结束了正在执行的命令进程:

利用 Ctrl+C 终端快捷键来中止运行中的命令

最后,你会看到 ^C 符号,表示你按下了 Ctrl + C 来中止当前执行。

但是,有些进程可能不会被 Ctrl + C 信号所中止,此时,你可以使用 Linux 中的其他 中止信号 来终止。

如何在 Linux 中使用 SIGINT 和其它中止信号

8、Ctrl + D:退出登录或者退出终端

你总是可以使用 exit 命令来关闭 Shell 会话和终端。你也可以选择使用 Ctrl+D 快捷键。

当你按 Ctrl + D 时,如果你正在 SSH 中使用,它会结束会话,如果再次按下,它将直接关闭终端:

利用 Ctrl+D 来关闭会话

9、Ctrl + Z:暂停当前进程

总是杀掉命令并不是个好主意,因为你有可能需要重新启动过程。

这种情况下,你可以按 Ctrl + Z 来暂停当前的进程,然后可以从之前暂停的地方继续。

例如,在这里,我暂停了更新进程:

利用 Ctrl+Z 挂起一个进程

你想更多地了解 如何暂停命令及如何恢复它们 吗?这里有一篇为此准备的详细指南:

如何在 Linux 中暂停并稍后恢复一个进程

10、Ctrl + R:搜索命令历史

当你按 Ctrl + R 时,它会打开一个搜索模式的提示,从中你可以键入命令的任何部分,并将找到匹配你输入的字符串的命令。

一旦你找到那个命令,只需按 Enter 键,它就会执行那个命令。

例如,在这里,我搜索了 update,返回的结果是在 Ubuntu 中的仓库更新命令(sudo apt update):

利用 Ctrl + R 快捷键从历史记录中搜索命令

? 如果你对历史记录中的任何建议都不满意,可以使用 Ctrl+C 退出搜索模式。

11、上箭头:呈现命令历史中的上一条

当你按下上箭头 键时,命令历史中之前执行过的命令将会按次序逐一显示:

使用箭头键向下遍历历史记录

12、下箭头:呈现命令历史中的下一条

当你按下上箭头 键时,它会展示先前的命令,但在有些情况下,你可能无意间点击了多次,这时你希望展示之前已显示过的命令。

这个时候,你可以使用下箭头 键。

在以下图示中,我首先多次按下了上箭头键,然后为了返回到先前显示的命令,我按下了下箭头键:

使用箭头键向下遍历历史记录

? Page UpPage Down 键也可以用于同样的目的。

13、!!:重复最后一条命令

有时候,你可能需要重复执行一次或多次最近的命令,此时你只需要输入 !!(两个感叹号)即可:

!!

比如,在这里,我执行了一个 echo 命令,随后我用了 !! 来重复执行相同的命令:

!! 命令能够重复执行你最近在终端输入的命令

但是,这个快捷键最常用且最实用的场景是,当你忘记给命令加上 sudo。这样你无需重新输入整个命令,只需使用 sudo !! 就可以了

在 Linux 终端中使用 !! 快捷键的实践应用

? 一个类似的键盘快捷键是 Alt+.,这个快捷键会给你提供上一条命令的最后一个参数或部分。假设你刚使用了 ls /etc/apt/sources.list.d,现在你想进入这个目录。只需输入 cd 然后使用 Alt+. 就可以。这就如同你输入 cd /etc/apt/sources.list.d 一样。

14、!n:重播历史中的第 n 条命令

你可以通过执行 Bash 的 history 命令来查看命令历史,每个命令都会有一个相应的索引号:

history

从历史中选择命令

现在,假设我想要执行倒数第二个 echo 命令,我会这样使用:

!1998

15、Tab:命令自动补全

我认为这应是终端快捷键列表的首个条目。

在输入长命令时,你可以输入一部分,然后点击 Tab 键,它将为你进行自动补全。

例如,这里,我通过 Tab 键来自动完成我的脚本执行:

点击 Tab 来查看命令,选项与参数建议

16、Tab(连击两次):列出所有可能的自动补全

如果按 Tab 键无效果,那可能是因为当前输入的命令存在多种可能。

在这种场合,你可以连击两次 Tab 键,以列出所有可能的补全选项:

连击两次 Tab 键可列出所有可能的自动补全建议

✋ 接下来的一些快捷键取决于终端的模拟器。虽然这些快捷键应该适用于大多数的终端应用,但不能完全确定。

17、Ctrl + Shift + C:复制所选文本

复制终端中的文本,你需要先用鼠标选取文本,然后按下 Ctrl + Shift + C 来复制选中的内容:

按下 Ctrl+Shift+C 进行复制

18、Ctrl + Shift + V:粘贴已复制的文本

当你通过选取和按下 Ctrl + Shift + C 复制了文本后,你可以通过按下 Ctrl + Shift + V 在任何地方粘贴:

在终端按下 Ctrl+Shift+V 进行粘贴

19、Ctrl + Shift + N:打开新的终端窗口

当你按下 Ctrl + Shift + N 时,会打开一个新的终端窗口,且新窗口的工作目录与之前那个窗口内的工作目录相同:

20、Ctrl + Shift + T:开启新的终端标签页

就像使用网络浏览器一样,终端也支持开启多个标签页来进行不同的任务。要开启一个新的标签页,只需按下 Ctrl + Shift + T 就可以了:

21、Ctrl + Tab 或 Ctrl + PageDown:切换标签页

如果你按照之前的方式创建了多个标签页,你或许需要在它们之间进行切换。

为此,你可以使用 Ctrl + TabCtrl + PageDown

? 这可能更多是 Ubuntu 的功能。你可以通过 按下 Ctrl+Alt+T 键来打开新的终端窗口

接下来:必知的 Linux 命令

你喜欢这个“必备”键盘快捷键列表吗?可能你会对 最基本却必备的 Linux 命令列表 也感兴趣:

31 个最基本却必备的 Ubuntu Linux 命令

我明白起初你可能不容易记住所有这些终端快捷键。但通过不断实践,它们会逐渐深入你的肌肉记忆。

另外,你有一些没有在这里列出的钟爱的快捷键吗?欢迎在评论区分享。

(题图:MJ/992e3559-4ed7-4529-9aea-85d52484cccf)


via: https://itsfoss.com/linux-terminal-shortcuts/

作者:Sagar Sharma 选题:lujun9972 译者:ChatGPT 校对:wxy

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

Doxygen 是一款广泛使用的开源文档生成工具,它通过代码注释来生成文档。

在试着熟悉别人的代码时,你总希望他们留下的代码注释能对你理解代码有所帮助。同理,无论为了自己还是其他人,编写代码时写注释是好习惯。所有编程语言都有专门的注释语法,注释可以是一个单词、一行文字、甚至是一整段话。编译器或解释器处理源代码时会忽略注释。

注释不能完全取代文档,但是有方法可以使用注释来生成文档。Doxygen 是一个开源的文档生成工具,它能够根据代码注释生成 HTML 或 LaTeX 格式的文档。Doxygen 让你在不用额外操作的情况下创建代码结构概览。尽管 Doxygen 主要是用来给 C++ 生成文档的,它对其它语言同样适用,比如 C、Objective-C、 C#、 PHP、Java 和 Python 等。

要使用 Doxygen,你只需要在源代码中使用 Doxygen 能够识别的语法来写注释。Doxygen 会扫描源码文件,然后根据这些特殊注释生成 HTML 或 LaTeX 文档。下面的示例项目会演示如何使用 Doxygen 注释,以及文档是如通过注释生成出来的。示例代码可从 GitHub 上获得,本文中也将引用 Doxygen 手册及文档 的相关章节。

在 Linux 上安装 Doxygen

在 Fedora 上可以通过软件包的形式安装 Doxygen。打开终端运行命令:

sudo dnf install doxygen

在基于 Debian 的操作系统上,可以通过以下命令来安装:

sudo apt-get install doxygen

使用

安装完 Doxygen 后,你需要在项目中按 Doxygen 可以识别的格式来注释代码,还要提供一个 Doxyfile 配置文件来控制 Doxygen 的一些行为。

注意:如果你用的是 GitHub 上的示例项目,你可以忽略下面一步。

如果 Doxyfile 文件不存在,你可以用 Doxygen 生成一个标准 Doxyfile 模板文件。切换到项目根目录下,运行:

doxygen -g

参数 -g 表示 生成 generate 。现在应该会出现一个名为 Doxyfile 的新文件。通过命令调用 Doxygen:

doxygen

现在应该能会有两个新文件夹:

  • html/
  • latex/

默认情况下,Doxygen 会同时输出 LaTeX 和 HTML 格式的文档。本文主要关注 HTML 文档。你可以在 Doxygen 官方文档的入门小节中找到关于 LaTeX 格式输出的更多信息。

双击 html/index.html 打开 HTML 文件。用空的配置文件生成的文档如下图:

A screenshot of a doxygen generated main page on Firefox. The content field under My Project Documentation is blank.

现在我们试着修改 Doxyfile 文件,并在源代码中添加特殊注释。

Doxyfile 文件

Doxyfile 文件中可以定义大量的可调选项,本文通过介绍示例项目的 Doxyfile 文件我只能覆盖其中很小的子集。

第 35 行:项目名称

你可以在这里指定项目名称,它最终会显示在 页眉 header 和浏览器标签上。

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.

PROJECT_NAME           = "My Project"

第 47 行:项目简介

项目简介会以略小的字号显示在页眉上。

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.

PROJECT_BRIEF          = "An example of using Doxygen in C++"

第 926 行:包含子目录

允许 Doxygen 查找源代码和文档文件时递归遍历子目录。

# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.

RECURSIVE = YES

第 1769 行:禁用 LaTeX 输出

如果你只想生成 HTML 文档,可以通过这个开关禁用 LaTeX 输出。

# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.

# The default value is: YES.

GENERATE_LATEX = NO

修改完成后,你可以再次运行 Doxygen 来检验修改是否生效了。可以在调用 Doxygen 时使用 -x 选项来查看 Doxyfile 文件的变更项:

A screenshot of the terminal showing the differences, Project Name, Project Brief, Recursive, and status of Generate Latex

通过调用 diff 命令,Doxygen 仅显示当前 Doxyfile 文件和模板文件的差异。

特殊注释

Doxygen 通过扫描源代码文件中的特殊注释和关键字来生成 HTML 文档。示例项目中的 ByteStream 类的头文件可以很好地解释特殊注释的用法。

下面用构造函数和析构函数作为示例:

/*! @brief Constructor which takes an external buffer to operate on
*
* The specified buffer already exist.
* Memory and size can be accessed by buffer() and size().
*
* @param[in] pBuf Pointer to existing buffer
* @param[in] size Size of the existing buffer
*/

ByteStream(char* pBuf, size_t size) noexcept;

特殊注释块有不同的格式风格。我倾向于使用 /*! 开头(Qt 风格),每行前添加 *,以 */ 结束注释块。你可以参考 Doxygen 手册的文档化代码小节,以大致了解不同的风格选项。

Doxygen 注释分两个部分:简要描述和详细描述。它们都是可选的。在上面的例子中的注释块是对紧跟其后的构造函数声明的描述。在 @brief 之后的文本会显示在类概览小节中:

A screenshot of the C++ example of using Doxygen showing the Byte Stream Class Reference. The categories in the list are public member functions, writing (operators for writing to the stream), and reading (operators for reading from the stream)

在空行(空行是段落分隔符)之后是构造函数的实际文档。用 @param[in/out] 关键字标注传递给构造函数的参数,Doxygen 基于此生成参数列表:

Screenshot of the Doxygen example showing the parameters under ByteStream

值得注意的是 Doxygen 为 buffer()size() 方法自动生成了链接。相反,Doxygen 忽略了析构函数前的注释,因为它并没有使用特殊注释:

// Destructor
~ByteStream();

现在你已经看到 Doxygen 的绝大部分功能了。通过使用一种稍微改良的注释格式,让 Doxygen 能够识别它们。通过使用一些关键字,你甚至可以进一步控制格式化。在下一节中,我会进一步介绍 Doxygen 的其它特性。

其它特性

现在几乎所有的工作都可以通过对源代码注释的方式完成。通过一些微调,你可以轻松地优化 Doxygen 的输出。

Markdown 格式

为了进阶的格式化,Doxygen 支持 Markdown 和 HTML 命令。Markdown 速查表可以在 这里 下载到。

项目主页

除了自定义页眉之外,html/index.html 几乎没有其它内容了。你可以通过使用关键字向其中添加一些有意义的内容。因为主页通常不是针对某个源代码文件的,你可以将要显示在主页的内容放到项目根目录下的一个单独文件中。示例项目中就是这样做的,其输出效果如下:

The Doxygen Example Documentation field now contains headings and documentation: Introduction, Running the example, System requirements, and Building the code, with step by step examples and code snippets (all can be found in the example on GitHub)

自动链接生成

上面已将提到了,当你引用代码的其它部分时,Doxygen 会自动识别并生成相应链接。但要注意,这要求被引用部分也有文档才行。

更多信息可以在官方文档的自动链接生成中找到。

分组

ByteStream 重载 overload 了的读写流操作符 (<<>>)。在类的概览中可以发现操作符被分为读和写两组。分组是在 ByteStream 的头文件中定义的。

分组的语法以标记 @{ 开始,以 }@ 结束。在标记范围中的内容都属于这个分组。在 ByteStream.h 中的实现如下:

/** @name Writing
* Operators for writing to the stream
* @{
*/

(...)

/** @}
* @name Reading
* Operators for reading from the stream
* @{
*/

(...)

/** @} */

你可以在官方文档的分组中找到更多相关信息。

LLVM 支持

如果你用 Clang 构建项目的话,可以通过使用 -Wdocumentation 选项让 Clang 对特殊注释进行检查。想了解该特性的更多信息,可以参考 LLVM 用户手册和 Dmitri Gribenko 的展示报告,它们可以在 Clang 网站上找到。

谁在用 Doxygen

Doxygen 是在 1997 年首次发布的。尽管有些年头了,现在仍然有很多项目在使用 Doxygen。比如 NASA 的飞行软件框架 F Prime、图像处理库 OpenCV、包管理器 RPM。你还可以在其它领域发现 Doxygen 语法标记的身影,比如内容管理平台 Drupal 的文档标准中。

注意:Doxygen 输出的 HTML 文档风格类似于九十年代网页。并且它也难以描绘元编程和模板编程架构。在这些情况下,你应该选择 Sphinx 而不是 Doxygen。

(题图:MJ/4d354094-397e-4ac5-a80d-25b9c736ede5)


via: https://opensource.com/article/22/5/document-source-code-doxygen-linux

作者:Stephan Avenwedde 选题:lkxed 译者:toknow-gh 校对:wxy

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

当涉及到 CPU 的时候,有许多术语:AArch64、x86\_64、amd64、arm 等等。了解它们是什么以及它们之间的区别。

当你查看数据表或软件下载页面时是否被 ARMAArch64x86_64i386 等术语混淆?这些被称为 CPU 架构,我会帮你深入了解这个计算话题。

以下的表将为你总结每个字符串所代表的意义:

CPU 架构描述
x86_64 /x86/amd6464 位 AMD/英特尔 CPU 的别称
AArch64 /arm64/ARMv8/ARMv964 位 ARM CPU 的别称
i38632 位 AMD/英特尔 CPU
AArch32 /arm/ARMv1ARMv732 位 ARM CPU 的别称
rv64gc /rv64g64 位 RISC-V CPU 的别称
ppc64le64 位 PowerPC CPU,小端字节序存储

从左到右是使用该术语来描述 CPU 架构超过其右侧其他可选用术语的偏好。

从左到右是使用该术语描述 CPU 架构的优先级,使用左侧的而不是其右侧的其他可供选择的术语。

如果你像我一样是个极客,并想要更深入地解释,请继续阅读!

概述:CPU 架构

通常来说,我之前列出的术语是描述 CPU 架构的。但严格讲,它们被计算机工程师视为 CPU 的 指令集架构 Instruction Set Architecture (ISA)。

CPU 的指令集架构定义了 CPU 如何解析二进制代码中的 1 和 0。

这些 CPU 的 ISA 有几个主要的类别:

  • x86(AMD/英特尔)
  • ARM
  • RISC-V
  • PowerPC(IBM 仍在使用)

当然,还有更多种类的 CPU ISA,比如 MIPS、SPARC、DEC Alpha 等等。但我列出的这些至今仍然被广泛使用(以某种形式)。

上述列出的 ISA 主要根据 内存总线的宽度 分为至少两个子集。内存总线的宽度指的是 CPU 和 RAM 一次能传输的位数。内存总线有很多种宽度,但最常见的是 32 位和 64 位。

? 32 位的 CPU ISA 要么是已经过时的历史产物,被留下来要么只是为了支持旧的系统,要么只运用在微控制器中。可以说,所有新的硬件都已经是 64 位的了,特别是那些面向消费者的硬件。

x86(AMD/英特尔)

x86 CPU 的指令集架构主要源于英特尔,因为英特尔是最初搭配 8085 微处理器创建了它。8085 微处理器的内存总线宽度为 16 位。而后来,AMD 加入了这个领域,并且一直紧随英特尔的步伐,直到 AMD 创建出了自己的超集 64 位架构,超过了英特尔。

x86 架构的子集如下:

  • i386:如果你拥有的是 2007 年之前的 CPU,那么这可能就是你的 CPU 架构。它是现在使用的 AMD/英特尔的 x86 架构的 32 位“版本”。
  • x86_64/x86/amd64:这三个术语在不同的项目中可能会被交替使用。 但它们都是指 x86 AMD/英特尔架构的 64 位“版本”。无论如何,x86_64 这个字符串比 x86amd64 使用得更广泛(也更受欢迎)。例如,FreeBSD 项目称 64 位的 x86 架构为 amd64,而 Linux 和 macOS 则称之为 x86_64
? 由于 AMD 在创造 64 位 ISA 上超越了英特尔,所以一些项目(比如 FreeBSD)把 x86 的 64 位版本称为 amd64但更被广泛接受的术语还是 x86\_64

对于 CPU ISA,“x86” 这个字符串是一种特殊的情况。你要知道,在从 32 位的 x86(i386)到 64 位的 x86(x86_64)的过渡过程中,CPU 制造商确保了 CPU 能够运行 32 位 64 位指令。所以,有时你可能会看到 x86 也被用来意指“这款产品只能运行在 64 位的计算机上,但如果该计算机能运行 32 位指令,那么你也可以在它上面运行 32 位的用户软件”。

这种 x86 的模糊性——也就是诸如能同时运行 32 位代码的 64 位处理器——其主要用于和存在于运行在 64 位处理器上的,但是允许用户运行 32 位软件的操作系统,Windows 就通过这种被称作“兼容模式”的特性运用了这种方式。

汇总一下,由 AMD 和 英特尔 设计的 CPU 有两种架构:32 位的(i386)和 64 位的(x86_84)。

其它的英特尔

x86_64 ISA 实际上有几个子集。这些子集都是 64 位,但它们新添加了诸如 SIMD( 单指令多数据 Single Instruction Multiple Data )指令等功能。

  • x86_64-v1:这是大多数人都熟知的基础 x86_64 ISA。当人们谈论 x86_64 时,他们通常指的就是 x86_64-v1 ISA。
  • x86_64-v2:此版本新增了更多如 SSE3( 流式 SIMD 扩展版本 3 Streaming SIMD Extensions 3 )之类的指令扩展。
  • x86_64-v3:除了基础指令外,还新增了像 AVX( 高级矢量扩展 Advance Vector eXtensions )和 AVX2 等指令。这些指令可以使用高达 256 位宽的 CPU 寄存器!如果你能够有效利用它们,就能大规模并行处理计算任务。
  • x86_64-v4:这个版本在 x86_64-v3 ISA 的基础上,迭代了更多的 SIMD 指令扩展,比如 AVX256 和 AVX512。其中,AVX512 可以使用高达 512 位宽的 CPU 寄存器

ARM

ARM 不仅是一家为 CPU ISA 制定规范的公司,它也设计并授权给其他厂商使用其 CPU 内核,甚至允许其他公司使用 ARM CPU ISA 设计自己的 CPU 内核。(最后那句话听起来就像是个 SQL 查询似的!)

你可能因为如树莓派这类的 单板计算机 Single Board Computer )(SBC)听说过 ARM。但其实 ARM 的 CPU 还广泛应用于手机中。最近,苹果从使用 x86_64 处理器转向了在其笔记本和台式机产品中使用自家设计的 ARM 处理器。

就像任一种 CPU 架构一样,ARM 基于内存总线宽度也有两个子集。

官方认定的 32 位和 64 位 ARM 架构的名称分别是 AArch32AArch64。这里的 AArch 字符串代表 “ Arm 架构 Arm Architecture ”。这些是 CPU 执行指令时可切换的模式

实际符合 ARM 的 CPU ISA 的指令规范被命名为 ARMvX,其中 X 是规范版本的代表数字。目前为止,已经有九个主要的规范版本。规范 ARMv1ARMv7 定义了适用于 32 位 CPU 的架构,而 ARMv8ARMv9 是适用于 64 位 ARM CPU 的规范。(更多信息在此

? 每个 ARM CPU 规范又有进一步的子规范。例如 ARMv8,我们有 ARMv8-R、ARMv8-A、ARMv8.1-A、ARMv8.2-A、ARMv8.3-A、ARMv8.4-A、ARMv8.5-A、ARMv8.6-A、ARMv8.7-A、ARMv8.8-A 和 ARMv8.9-A。 其中 -A 表示“应用核心”,-R 表示“实时核心”。

你可能会觉得困惑,为什么在 AArch64 正式被 ARM 认定为 64 位 ARM 架构后,有些人仍然称其为 arm64。原因主要有两点:

  1. arm64 这个名称在 ARM 决定采用 AArch64 之前就已经广为人知了。(ARM 的一些官方文档也将 64 位的 ARM 架构称为 arm64…… ?)
  2. Linus Torvalds 对 AArch64 这个名称表示不满。 因此,Linux 的代码库主要将 AArch64 称为 arm64。然而,当你在系统中运行 uname -m 时,输出仍然是 aarch64

因此,对于 32 位 ARM CPU,你应该寻找 AArch32 这个字符串,但有时也可能是 armarmv7。相似的,对于 64 位 ARM CPU,你应该找 AArch64 这个字符串,但有时也可能会是 arm64ARMv8ARMv9

RISC-V

RISC-V 是 CPU 指令集架构(ISA)的一个开源规范。**但这并不意味着 CPU 自身是开源的!**这有点像以太网的情况。以太网规范是开源的,但你需付费购买网线、路由器和交换器。同样,RISC-V CPU 也要花钱购买。 ?

尽管如此,这并没有阻止人们创建并在开源许可下提供免费获取(设计上的获取,并非物理核心/SoC)的 RISC-V 核心。这是其中的一项尝试

? 总结一下:如果你在寻找运行于 RISC-V 消费级 CPU 上的软件,你应该寻找 “rv64gc” 这一字符串。这是许多 Linux 发行版所公认的。

像所有 CPU 架构一样,RISC-V 拥有 32 位和 64 位 CPU 架构。但由于 RISC-V 是非常新的描述 CPU ISA 的方式,大部分主流消费端或客户端的 CPU 核心一般都是 64 位的。大部分 32 位的设计都是微控制器,用于非常具体的用例。

它们的区别在于 CPU 的扩展。被称为 RISC-V CPU 的最低要求即实现“ 基本整数指令集 Base Integer Instruction Set ”(rv64i)。

下表列出了一些扩展及其描述:

扩展名称描述
rv64i64 位基本整数指令集(必须的
m乘法和除法指令
a原子指令
f单精度浮点指令
d双精度浮点指令
g别名;一组运行通用操作系统所需的扩展集(包括 imafd
c压缩指令

rv64i 这一字符串中,rv 表示 RISC-V,64 指的是 64 位 CPU 架构,而 i 指的是强制性的基本整数指令集扩展。 rv64i 之所以是一体的,因为即使 i 被认为是一种“扩展”,但它是必须的

约定俗成的,扩展名称按上述特定顺序排列。因此,rv64g 展开为 rv64imafd,而不是 rv64adfim

? 还有其他一些像 Zicsr 和 Zifencei 这样的扩展,它们位于 dg 扩展之间,但我故意不列出,以避免令你感到害怕。

因此,严格说来,(在写这篇文章的时候)rv64g 实际上是 rv64imafdZicsrZifencei恶魔般的笑声

PowerPC

PowerPC 曾是苹果、IBM 以及,摩托罗拉早期合作时代的一种流行 CPU 架构。在苹果转向英特尔的 x86 架构之前,它一直被应用于苹果的全部消费品产品线。

最初,PowerPC 采取的是大端字节序的内存排序。后来随着 64 位架构的引入,增加了使用小端字节排序的选项。这么做的目的是为了与英特尔的内存排序保持兼容(以防止软件错误),因为英特尔自始至终都一直采用的是小端字节序。有关字节序的更多内容,我可以唠叨很久,不过你可以通过阅读 这篇 Mozilla 的文档 来了解更多。

由于字节序在此也起到了一定的作用,PowerPC 共有三种架构:

  • powerpc:表示 32 位的 PowerPC 架构。
  • ppc64:表示拥有大端字节序内存排序的 64 位 PowerPC 架构。
  • ppc64le:表示拥有小端字节序内存排序的 64 位 PowerPC 架构。

目前,ppc64le 是被广泛使用的架构

结论

市面上有各种各样的 CPU 架构。对于每一种架构,都有 32 位和 64 位的子集。在现有的 CPU 中,我们可以找到 x86、ARM、RISC-V 和 PowerPC 等架构。

其中,x86 是最广泛和易于获取的 CPU 架构,因为英特尔和 AMD 都采取了这种架构。此外,ARM 提供的产品几乎在手机和易于获取的单板计算机中被独占使用。

RISC-V 正在努力使硬件更广泛地被使用。我就有一款带有 RISC-V CPU 的单板计算机。 ?

而 PowerPC 主要用于服务器,至少当前如此。

(题图:MJ/634ac7ea-b344-443a-b041-3bb3b31a956f)


via: https://itsfoss.com/arm-aarch64-x86_64/

作者:Pratham Patel 选题:lujun9972 译者:ChatGPT 校对:wxy

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

你完全可以从虚拟机内部访问 USB 存储器。如果你使用的是 Linux 上的 VirtualBox,下面将介绍如何做到这一点。

当你插入 USB 时,你的宿主操作系统可以轻松访问它并使用其中的文件。这并不奇怪。

如果你在 Linux 上使用带有 VirtualBox 的虚拟机,那么可以付出一些努力并从虚拟机访问插入物理机的 USB。

让我逐步引导你了解如何在 VirtualBox VM 中访问 USB 磁盘。

如何在 VirtualBox VM 中访问 USB 驱动器

默认情况下,你无法使用 VirtualBox 访问 USB 驱动器,因为你必须安装扩展包管理器,此外,还有一些配置部分。

这就是我将本教程分为三个简单步骤的原因。那么让我们从第一步开始。

步骤 1:安装 VirtualBox 扩展包(在主机上)

这是本教程中最重要的一步,因为你将安装 VirtualBox 的扩展,这将使你能够在虚拟机中使用 USB 驱动器。

? 你应该安装与你安装的 VirtualBox 版本相同版本的扩展包。

要安装 VirtualBox 扩展包,只需访问 VirtualBox 官方下载页面,向下滚动一点,你将找到下载扩展包的选项:

下载完扩展包后,请执行 3 个简单步骤:

  • 转到 “ 文件 File ” > “ 工具 Tools ” > “ 扩展包管理器 Extension Pack Manager
  • 点击 “ 安装 Install ” 按钮
  • 从文件管理器中选择下载的文件:

它将打开一个新的提示来安装扩展包,你所要做的就是点击“安装”按钮并接受条款和条件:

我们就完成了扩展包的安装。

步骤 2:将用户添加到 vboxusers 组(在宿主机上)

要在 VirtualBox 中使用 USB 驱动器,你的当前用户需要位于 vboxusers 组中。

我知道这听起来有点复杂,但 将用户添加到组 是一个命令过程,将用户添加到 vboxusers 组可以通过以下方式完成:

sudo usermod -aG vboxusers $USER

完成这两个步骤后,重启系统以使这些步骤生效。

步骤 3:将 USB 驱动器添加到虚拟机

? 在为特定虚拟机添加 USB 之前,请确保其已关闭(未保存),否则你将无法按照给定的说明进行操作。

要为虚拟机添加 USB,你必须遵循以下简单步骤:

  • 选择你想要使用 USB 的虚拟机并点击 “ 设置 Settings
  • 转到 “USB” 选项卡
  • 选中 “ 启用 USB 控制器 Enable USB Controller ” 框并单击 “+” 按钮选择 “USB”:

这就好了!现在你可以启动虚拟机,并且 USB 驱动器应该出现在文件管理器中。就我而言,它是 Ubuntu,所以它看起来像这样:

更多 USB 和 VM 技巧

如果你在虚拟机中使用 USB 看起来很酷,那么在虚拟机中从 USB 启动就更酷了!这里有一个关于 如何在 VirtualBox 中从 USB 驱动器启动 的详细指南:

如何在 VirtualBox 中从 USB 驱动器启动

我希望本指南对你有所帮助。

(题图:MJ/d9a1b4b5-30ec-4019-979f-b258a1fc075f)


via: https://itsfoss.com/virtualbox-access-usb/

作者:Sagar Sharma 选题:lujun9972 译者:geekpi 校对:wxy

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

本文将详细介绍如何在 Ubuntu 和其他 Linux 发行版中转换和查看 WebP 图像,主题内容涵盖了你所需知道的全部信息。

WebP 图像格式的定义

2010 年 9 月,谷歌提出了 WebP 图像格式,其愿景是完全替代 JPEG、PNG 和 GIF 文件格式。就如你所见,WebP 是一个全能型的格式,继承了先前压缩算法的所有特性,支持有损和无损的动画以及透明度。

除此以外,WebP 基于块预测技术,它是互联网上推荐使用的图像格式。由于其文件大小明显更小、图象质量更好,WebP 已经成为了为网站提供图像的现代化标准。

现状简述

现在,几乎所有的主流 Web 浏览器都开始支持 WebP,也就是说你可以在包括 Chromium、Chrome、Firefox、Brave、Vivaldi、Safari 和 Edge 在内的热门浏览器中查看这种格式的图像。

然而,要从现有的 JPG 和 PNG 文件创建 WebP 图像,你需要安装谷歌开发的 WebP 库。另外,Linux 发行版的文件管理器暂时还不能直接显示该格式的图像。

为了与 WebP 实现无缝集成和提供良好的用户体验,各个组件必须协同工作。操作系统需要的是 WebP 的核心库。此外,文件管理器和图像查看器则需要能识别 *.webp 文件类型并进行加载。

这些为用户提供了一致的体验。由于 WebP 是新的标准,正在广泛施行和应用,你可能需要在 Linux 下执行一些额外的步骤以便运用这种技术。

另一方面,Windows 10 和 11 现在已经默认支持 WebP,包括其新的图像查看器功能。

因此,本篇文章将探讨如何在 Linux 系统下浏览、创建以及转换 WebP 图像的问题。

如何查看 WebP 图像

针对 Ubuntu、Linux Mint 及相关发行版

要查看图像,首先需要一个加载器。文件管理器或图像查看器会使用这个加载器库来实现 WebP 图像的显示。然而,在 Ubuntu Linux 中,默认情况下并未提供 WebP 图像加载器。因此,你需要通过下列指令安装 webp-pixbuf-loader 库,此库能帮助 Ubuntu 中的 GTK 应用程序显示 WebP 图像。

sudo add-apt-repository ppa:helkaluin/webp-pixbuf-loadersudo apt updatesudo apt install webp-pixbuf-loader

如果你有兴趣了解 GDK 库如何在显示服务器(例如 X.Org)和 GTK 组件间进行协作,可以参考 这个页面

openSUSE

Leap 和 Tumbleweed 的软件包在 这里 提供。访问页面并点击 “ 专家下载 Expert Download ” 进行安装即可。

Arch Linux

在 Arch Linux 中,这个软件包在 社区仓库 里有提供。因此,你可以通过以下的命令方便地进行安装:

sudo pacman -S webp-pixbuf-loader

Fedora Linux 以及 RHEL

对于 Fedora 以及其他相关的发行版,可以使用如下的指令进行安装:

sudo dnf install webp-pixbuf-loader

安装完成以后,你可以选择重新启动你的计算机

现在,我们来到了最有趣的部分。只要导航到任何包含 WebP 图像的目录,通过缩略图或者默认的图像查看器,你应该就能看到这些图像了。

以下是一个示例,展示了在 Ubuntu 22.04 LTS 中带有 WebP 图像的 Nautilus 文件管理器在之前和之后的界面。

GNOME Files (Nautilus) with WebP file - before

GNOME Files (Nautilus) with WebP file - after

在文件管理器/图像查看器中查看 WebP 图像

GNOME & Nautilus

对于 GNOME 桌面环境,Nautilus 文件管理器可以配合我在之前章节针对 Ubuntu/Fedora 等系统所解释的步骤正常工作。

Thunar 桌面(基于 Xfce 的发行版)下的 WebP 图像查看

尽管 Thunar 在 Xfce 桌面环境下默认就可展示缩略图,但默认的图像查看器 Ristretto 不能打开 WebP 格式的文件。因此,你首先需要安装我在先前章节中提及的一些软件包(例如针对 Ubuntu/Fedora 或 Arch 的包)并重启。然后,你可以通过改变默认的 .webp 文件类型关联,使用 Ristretto 查看器打开这些图像。

Thunar and Ristretto Image Viewer shows webp image

KDE Plasma - Dolphin 文件管理器及 Gwenview 图像查看器

KDE 默认的图像查看器 Gwenview 原生支持 WebP 格式,因此,你无需额外的安装步骤就可以查看 WebP 图像。另外,Dolphin 文件管理器也可以很好地展示 WebP 格式的缩略图。

Dolphin and Gwenview displaying a sample WebP image on KDE Plasma

PCManFMQt(基于 LXQt 的发行版)下的 WebP 图像查看

如果你使用的是 Lubuntu,那你应该可以使用 LXImage 查看器打开 WebP 图像,因为这款查看器默认就支持 WebP。同样,PCManFMQt 文件管理器也能默认展示 WebP 图像的缩略图。

PCManFM-Qt and LXImage

Nemo 文件管理器

Linux MintMint 21 “Vanessa” 版本开始,Nemo 文件管理器也将支持 WebP。你也可以通过上述的 PPA 方案在 Linux Mint 中查看 WebP 图像,直到新的 Mint 正式版本发布。

使用其它应用程序查看 WebP 图像(推荐方式)

首先,著名的光栅图形编辑器 GIMP 在 2.10 版本及以后的版本中,已经支持打开和保存 WebP 格式的图像(目前在所有的 Linux 发行版中都已经可用)。

其次,除了你的桌面环境自带的图像查看器外,还有一些其他支持 WebP 图像格式的查看器,如:

最后,LibreOffice 7.4 为其所有的组件(比如 Writer、Calc、Draw 和 Impress)带来 对 WebP 格式的原生支持,支持这类图像的导入和导出。

如何将 WebP 图像转换为 JPG 或 PNG 格式

现在,你已经知道了如何查看 .webp 格式的文件,再来学习如何转换这类文件应该会很有用。

首先,使用以下命令为 Ubuntu 或 Fedora Linux 系统,包括其他相关的发行版安装 webp 包。如果你需要一个不需要安装就能在所有发行版和操作系统上执行的预编译版本,可以访问 这个页面 并下载最新的 zip 文件。

对于 Ubuntu 和相关的发行版:

sudo apt install webp

对于 Fedora 和相关的发行版:

sudo dnf install libwebp

安装完成后,使用以下命令可以将 WebP 格式的图像转换为 JPG 或 PNG 格式。记得根据你的实际情况,修改文件名和路径。

dwebp image1.webp -o image1.png

把 JPEG 或 PNG 图像转换为 WebP 格式

如果需要把一张 JPEG 或 PNG 格式的图像转化为 WebP 格式,你可以使用 cwebp`(WebP 编码器)命令如下:

cwebp -q <压缩因数> <输入图像> -o <输出图像>

例如,你可以使用下面的示例命令,它将 image1.png 转换为使用 80 的压缩因子的 image1.webp

cwebp -q 80 image1.png -o image1.webp

把 GIF 图像转换为 WebP 图像

一个在 WebP 格式中常被忽视的特点是它支持动画。因此,可以轻松将 WebP 格式用来保存具有动画效果的 GIF 文件。使用下面的命令就能把一个已有的 GIF 文件转换为 WebP 文件。

gif2webp input_file.gif -o output_file.webp

你可以访问 这个页面 以获取更多关于上述工具和其他选项的信息。

结语

虽然 WebP 格式自首次发布以来已经有十年的时间了,Linux 桌面环境适应并支持 WebP 图像格式却并没有那么快。我相信以后 WebP 格式的支持应该会变成基本的,你甚至可能不需要进行额外的调整就能查看或保存 WebP 文件了。

我希望这篇文章可以帮你了解并掌握如何在工作流程中更好地使用 WebP 格式。

那么,你现在是怎么处理 WebP 格式图像的呢?欢迎在下方评论区分享你的经验。

(题图:MJ/2541dab1-f071-4836-a34e-81c085c4d1ff)


via: https://www.debugpoint.com/view-webp-ubuntu-linux/

作者:Arindam 选题:lkxed 译者:ChatGPT 校对:wxy

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

不满意 VS Code 中的遥测功能?安装 VSCodium,它是 VS Code 的 100% 开源克隆。

VSCodium 是微软 VS Code 的“完全开源版本”。

它基本上是 VS Code 的克隆,并去除了所有遥测痕迹。遥测是用于收集有关应用使用情况的数据。许多开发人员使用它来深入了解改进他们的应用。

从外观和功能来看,这两个编辑器是相同的。

VSCodium 与 VS Code 相同

在 Ubuntu 上安装 VSCodium 有三种方法:

  1. 从发布页面下载 deb 文件进行安装。缺点是你无法轻松更新它,因为你必须再次下载新的 deb 文件。
  2. 将第三方开发者仓库添加到你的系统中(VSCodium 推荐的方式)。这样,你还可以获得 VSCodium 新版本的定期更新。
  3. 使用 snap 版本。如果你不厌恶 Snap 软件包,这也许是最简单的方法。

我不会讨论第一种方法,因为它只是从 发布页面 下载并 安装 deb 文件

我们来看看另外两种方法。

方法 1:通过添加外部仓库来安装 VSCodium

VSCodium 官方文档引用了 Pavlo Rudy 的 GitLab 仓库,它为你提供了 VSCodium 的持续更新版本。

? 虽然我在这里使用 Ubuntu,但这些步骤应该适用于 Debian 和其他基于 Debian 和 Ubuntu 的发行版。

以下是步骤。

在 Ubuntu 中打开终端 并使用以下命令获取开发者的 GPG 签名密钥并将其添加到你的系统中。这样,你的 Ubuntu 系统将信任该开发人员签名的软件包。

sudo wget https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg -O /usr/share/keyrings/vscodium-archive-keyring.asc

Adding the GPG signature key for VSCodium repository

下一步是将仓库添加到 你系统的 sources.list 文件。这样,你的 Ubuntu 系统就会知道应该从哪里获取包。

echo 'deb [signed-by=/usr/share/keyrings/vscodium-archive-keyring.asc ] https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs vscodium main'| sudo tee /etc/apt/sources.list.d/vscodium.list

Adding the VSCodium repo to sources.list

正如你所看到的,该条目中的仓库是由你在其上方添加的密钥签名的。

更新本地包缓存,以便你的系统能够识别新添加的仓库中的包。

sudo apt update

现在你已准备好在 Ubuntu 上安装 VSCodium:

sudo apt install codium

是的,该软件包名为 codium,而不是 vscodium

很好! 现在你可以在菜单中查找 “VSCodium” 并从那里启动应用:

现在你可以在 VSCodium 中享受编码的乐趣。

更新 VSCodium

好处是你已将仓库添加到系统中。当新的 VSCodium 发布时,仓库维护者会将新版本推送到仓库,你应该在系统更新程序中看到新版本。

换句话说,保持你的 Ubuntu 系统更新,你就会拥有更新版本的 VSCodium。

删除 VSCodium

如果你出于某种原因不想再使用它,可以使用以下命令将其删除:

sudo apt remove codium

你可以将仓库和签名添加到你的系统中。

? 如果你对这些东西很在意,你也可以将它们从系统中删除。使用 sudo 在 Linux 终端中删除文件 时要小心一些。
sudo rm /usr/share/keyrings/vscodium-archive-keyring.asc

接下来,你还可以从 sources.list 中删除仓库:

sudo rm /etc/apt/sources.list.d/vscodium.list

你的主目录中应该有一些与应用相关的本地文件,你可能还想删除它们:

rm -r ~/.config/VSCodium

方法2:使用 Snap 安装 VSCodium

? Snap 方法适用于任何 Linux 发行版,而不仅仅是 Ubuntu,只要 你在系统上启用了 Snap 支持

Snap 安装方法比较简单,步骤也较少。

打开终端并使用以下命令安装 VSCodium Snap 包:

sudo snap install codium --classic

等待几秒钟,它会下载 Snap 软件包,然后进行安装。你将在屏幕上看到进度。

你如何 更新 Snap 版本的 VSCodium?Snap 应用每天自动更新多次。但是,如果应用正在运行,那么不会更新。

因此,你也可以关闭任何正在运行的 VSCodium 实例并运行此命令来强制更新(如果有任何新版本):

sudo snap refresh codium

如果你不喜欢它,可以使用以下命令轻松删除它:

sudo snap remove codium

VS Code VS. VSCodium

主要区别在于,VSCodium 从 VS Code 中移除了遥测部分。除此之外,它就是这个微软项目的克隆版,在外观和功能上与著名的 VS Code 完全相同。

对于某些人来说,遥测可能是一个障碍,因此这个项目在开源社区中颇受欢迎。

下面是一篇关于 VS Code 遥测问题的好文章。

VS Code - 遥测技术是怎么回事?

如果你能接受遥测部分,你可以 在 Ubuntu 上轻松安装 VS Code。这确实可以是你的选择。

希望本教程对你在 Ubuntu 和其他基于 Debian 的发行版上安装 VSCodium 有所帮助。请在评论区留下你的反馈意见。

(题图:MJ/352e50f1-3ae2-4fe2-9a32-b75d1b5f0c73)


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

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

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