分类 技术 下的文章

Gherkin 语法可以帮助你思考技术事务的过程,然后帮助你将其转化为程序员逻辑的形式写下来。

与软件开发人员沟通通常是一项繁重的任务,尤其是当人们缺乏技术知识和技术词汇时。这就是为什么项目经理经常使用 用户故事 和多功能系统隐喻。

你可以利用旨在促进项目利益相关者和开发人员之间讨论的技术,进一步协助沟通。

Cucumber 框架

Cucumber 是一个开源框架,可以使用易于编写的通用语言创建自动化软件测试。它基于 行为驱动开发(BDD) 的概念,该概念规定创建软件应定义用户希望应用在特定条件成立时如何表现。

(LCTT 译注:Gherkin 和 Cucumber 都是黄瓜,其中 Gherkin 一种用来腌制的小黄瓜。顺便说一句,黄瓜原名胡瓜,因其由汉朝张骞出使西域时带回,后因石勒禁称“胡”字,更名为黄瓜。)

Cucumber 框架并不是现代意义上的“技术”。它不是位和字节的集合。相反,它是一种用自然语言(在本文中为英语,但到目前为止 Gherkin 已被翻译成 70 多种语言)的写作方式。使用 Cucumber 框架时,你不需要知道如何读取或编写代码。你只需要能够写下你对工作方式的想法即可。你还应该使用一组特定术语和指南来记录你希望技术如何为你服务。

Gherkin 语言是什么?

Cucumber 使用 Gherkin 作为定义用例的方法。它主要用于生成明确的项目需求。换句话说,其目的是允许用户准确地描述他们需要软件做什么,不留任何解释或例外的空间。它帮助你思考技术事务的过程,然后帮助你以可转化为程序员逻辑的形式将其写下来。

这是一个例子:

功能:活期账户持有人取款
场景:有关账户并不缺少资金
    假如账户余额为 200 英镑
    借记卡有效
    取款机里有足够的钱
    当活期账户持有人申请 50 英镑时
    则取款机支付 50 英镑
    账户余额为 150 英镑
    借记卡被退回

正如你所看到的,这是一个非常具体的场景,其中假设用户请求 50 英镑,取款机提供 50 英镑并相应地调整用户的帐户余额。此场景只是取款机用途的一部分,它仅代表人与取款机交互的特定组成部分。当程序员被赋予对机器进行编程以响应用户请求的任务时,这清楚地表明了涉及哪些因素。

Gherkin 关键字是什么?

Gherkin 语法使用五个不可或缺的语句来描述执行任务所需的操作:

  • 功能 Feature :表示任何给定软件功能的高层次描述
  • 场景 Scenario :描述具体\_示例\_
  • 假如 Given :解释系统的初始上下文
  • When :指定事件或操作
  • Then :描述预期输出或结果
  • 而且 And (或者 但是 But ):增加文本流畅性

(LCTT 译注:这些关键字可以使用任何语言,请参照:https://cucumber.io/docs/gherkin/languages/

通过使用这些简单的关键字,客户、分析师、测试人员和软件程序员能够使用所有人都能识别的术语来交换想法。

可执行的需求和自动化测试

更好的是,Gherkin 要求也是可执行的。这是通过将每个关键字映射到其预期(且明确说明)的功能来完成的。因此,为了与上面的示例保持一致,任何已经实现的内容都可以自动显示为绿色:

    当活期账户持有人申请 50 英镑时
    则取款机支付 50 英镑
    账户余额为 150 英镑
    借记卡被退回

通过扩展,Gherkin 使开发人员能够将需求转换为可测试的代码。在实践中,你可以使用特定的短语来检查你的软件方案!如果你当前的代码无法正常工作,或者新的更改意外导致软件错误(或两个或三个),那么你可以轻松查明问题,然后再继续修复它们。

结论

得益于 Gherkin 语法,你的客户将不再陷入困境。你可以弥合企业和开发人员之间的鸿沟,并比以往更有信心地交付出色的产品。

通过访问 Cucumber 网站 或其 Git 仓库 了解有关 Gherkin 的更多信息。

(题图:MJ/b717cd4f-0a6b-4b28-a895-b9688b289551)


via: https://opensource.com/article/23/2/gherkin-language-developers

作者:David Blackwood 选题:lkxed 译者:geekpi 校对:wxy

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

熟悉在 Linux 命令行中复制文件和目录的 cp 命令。

cp 命令是 Linux 中一个重要的命令,你可能经常会用到它。

正如名称所示,cp 代表 复制 copy ,它被用于 在 Linux 命令行中复制文件和目录

这是一个相对简单的命令,只有几个选项,但你仍有必要深入了解它。

在展示 cp 命令的实际示例之前,我更建议你先熟悉绝对路径和相对路径的概念,将文件从一个位置复制到另一个位置时,你需要用到它们。

Linux 中的绝对路径和相对路径的不同之处

复制单个文件

cp 命令最简单和最常见的用途是复制文件,只需指定源文件和要“粘贴”文件的目标目录即可。

cp 源文件 目标目录

将单个文件从源目录复制到目标目录。

在复制文件的同时重命名它

你将文件复制到另一个位置时可以同时进行 重命名。这有点类似于文本编辑器中的“另存为”选项。

为此,你必须在路径中给出新的文件名。

cp 源文件 目标目录/新文件名

在复制文件的同时重命名

复制多个文件

你还可以将多个文件复制到另一个位置。

cp 文件1 文件2 文件3 目标目录

复制多个文件时,将目标目录放在最后

在这种情况下,你无法重命名文件。

你还可以使用通配符扩展,将特定后缀的文件复制到另一个位置:

cp *.txt 目标目录

使用通配符扩展复制多个文件,比如所有 .txt 后缀的文件

复制文件时避免覆盖现有文件

如果你将 file1.txt 复制到一个已经存在名为 file1.txt 文件的目录中,它会将原有的文件覆盖掉。

如果你不希望这样,cp 命令还提供了几个选项来处理文件覆盖的情况。

首先是使用选项 -i 的交互模式。在交互模式下,它会询问是否确认或放弃覆盖目标文件。

cp -i 源文件 目标目录
cp:覆盖 '目标目录/源文件' ?

Y 覆盖文件,按 N 跳过复制该文件。

覆盖,但以交互方式询问(内容将被覆盖)

覆盖,但以交互方式询问(内容不会被覆盖)

选项 -n 代表完全取消覆盖。使用此选项时目标文件不会被覆盖。

cp -n 源文件 目标目录

取消覆盖(目录内文件的内容未更改)

还有一个选项 -b,在目标目录的文件将被覆盖时自动为其创建备份。我猜这里 b 代表 备份 backup

cp -b 源文件 目标目录

覆盖文件,但在备份文件后附加了“~”。

最后,还有一个“ 更新 update ”选项 -u,如果目标文件比源文件旧,或者目标文件不存在,就会被覆盖掉。

cp -u 源文件 目标目录

新文件会覆盖旧文件

复制目录(文件夹)

cp 命令也用来在 Linux 命令行中复制目录

在复制目录时,你需要使用递归选项 -r

cp -r 源目录 目标目录

在 Linux 中使用 cp 命令复制整个目录

你还可以将多个目录复制到另一个位置:

cp -r 目录1 目录2 目录3 目标目录

使用 cp 命令复制多个目录

在复制时保留属性

当你将文件复制到另一个位置时,它的 时间戳文件权限 甚至所有权都会发生变化。

这是正常的行为。但在某些情况下,你可能希望在复制文件时保留其原始属性。

要保留属性,请使用选项 -p

cp -p 源文件 目标目录

? 还有一个 -a 选项用于存档模式。它将连 ACL 也保留下来。

?️ 练习时间

想要练习一下 cp 命令吗?以下是一些简单的练习题供你尝试。

  • 打开终端并创建一个名为 practice_cp 的目录。
  • 现在,将 /etc/services 文件复制到这个新创建的目录中。
  • practice 目录中对复制的 services 文件进行一些小的更改。
  • 现在,使用更新模式再次复制 /etc/services 文件。有什么变化吗?观察一下。
  • 查看 /var/log 目录,并将以 mail 开头的日志文件复制到你的联系目录下。
  • 现在,返回到你的家目录,并创建一个名为 new_dir 的新目录(好吧,我想不出更好的名字)。
  • practice_cp 目录复制到 new_dir 目录中。

对你来说这些练习足够用了。希望你能喜欢在这里学习 Linux 命令。

(题图:MJ/07b35a39-826e-4904-9f85-25257831ce9d)


via: https://itsfoss.com/cp-command/

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

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

有时我与一些害怕使用命令行的朋友交谈,我感到自己给不出好的建议(我已经使用命令行太长时间了),因此我向一些 Mastodon 上的人提出了以下问题:

如果在过去一到三年内,你刚刚不再害怕使用命令行了,是什么帮助了你?

(如果你不记得,或者你已经使用命令行舒适地工作了 15 年,则无需回答——这个问题不适用于你 ?)

这个列表还不如我希望的那么长,但我希望通过发布它来收集更多的答案。显然,并没有一个单一的方法适用于所有人,不同的人会选择不同的路径。

我认为舒适使用命令行有三个方面:减少风险动机资源。我将先谈谈减少风险,然后是一些动机,并列出一些资源。

减少风险的方式

很多人(没错!)对在命令行上意外执行了一些无法撤销的破坏性操作感到担心。

以下是一些人们提到的帮助他们减少风险的策略:

  • 定期备份(有人提到他们在上周的一个命令行错误中意外删除了整个家目录,但很幸运他们有备份)。
  • 对于代码,尽可能多地使用 git
  • rm 设置为类似 safe-rmrmtrash 这样的工具的别名,这样你就不会意外删除不应删除的内容(或者就设置别名到 rm -i)。
  • 尽量避免使用通配符,使用制表符键补全代替(我的 Shell 会使用 TAB 键补全 rm *.txt 并显示我将要删除的内容)。
  • 使用精美的终端提示符,可以显示当前目录、计算机名称、git 分支和你是否具有 root 权限。
  • 如果你计划对文件运行未经测试或危险的命令,先备份文件副本。
  • 拥有一台专用的测试机器(如便宜的旧 Linux 计算机或树莓派)进行特别危险的测试,例如测试备份软件或分区。
  • 对于危险命令,如果有的话,使用 --dry-run 选项来查看执行结果而不实际执行操作。
  • 在你的 Shell 脚本中构建自己的 --dry-run 选项。

这些策略有助于降低在命令行上引发不可逆操作的风险。

杀手级应用程序

一些人提到了一个“杀手级命令行应用程序”,这激励他们开始花更多时间在命令行上。例如:

  • ripgrep
  • jq
  • wget / curl
  • git(一些人发现他们更喜欢使用 git 命令行界面而不是使用图形界面)
  • ffmpeg(用于视频处理)
  • yt-dlp
  • 硬盘数据恢复工具(来自 这个精彩的故事

还有一些人提到他们对图形界面工具感到失望(例如使用了所有内存,并使计算机崩溃的重型集成开发环境),并因此有动机用更轻量级的命令行工具替代它们。

激发人们的命令行技巧

有人提到被其他人在命令行上展示的酷炫功能所激励,例如:

explainshell

有几个人提到了 explainshell,它可以让你粘贴任何命令行指令,并将其分解成不同的部分解释。

命令历史、制表符补全等等

有很多小技巧和窍门可以使在命令行上工作更容易,例如:

  • 使用向上箭头查看先前的命令
  • 使用 Ctrl+R 搜索你的 Bash 历史记录
  • 使用快捷键在行内导航:Ctrl+w (删除一个单词)、Ctrl+a(跳转到行首)、Ctrl+e(跳转到行尾),以及 Ctrl+left arrow / Ctrl+right arrow(向前/向后跳转一个单词)
  • 将 Bash 历史记录设置为无限制
  • 使用 cd - 返回上一个目录
  • 文件名和命令名的制表符自动补全
  • 学习如何使用像 less 这样的分页工具阅读手册页或其他大型文本文件(如搜索、滚动等)
  • 在 macOS 上使用 pbcopy/pbpaste 将剪贴板内容复制/粘贴到 stdout/stdin
  • 在编辑配置文件之前备份它们

fzf

很多人提到使用 fzf 作为模糊搜索 Shell 历史记录的更好方法。除了作为更好的模糊搜索 Shell 历史记录的工具,人们还提到了一些其他用途:

  • 选择 git 分支(git checkout $(git for-each-ref --format='%(refname:short)' refs/heads/ | fzf)
  • 快速查找要编辑的文件(nvim $(fzf)
  • 切换 Kubernetes 上下文(kubectl config use-context $(kubectl config get-contexts -o name | fzf --height=10 --prompt="Kubernetes Context> ")
  • 从测试套件中选择要运行的特定测试

一般的模式是使用 fzf 来选择某个对象(文件、git 分支、命令行参数),fzf 将所选对象输出到标准输出,然后将其插入作为另一个命令的命令行参数。

你还可以将 fzf 用作工具,自动预览输出并快速迭代,例如:

  • 自动预览 jq 的输出(echo '' | fzf --preview "jq {q} < YOURFILE.json"
  • 自动预览 sed 的输出(echo '' | fzf --preview "sed {q} YOURFILE"
  • 自动预览 awk 的输出(echo '' | fzf --preview "awk {q} YOURFILE"

你可以参考这个思路。

通常,人们会为 fzf 的使用定义别名,比如输入 gcb 或其他命令,以快速选择要检出的 git 分支。

树莓派

一些人开始使用树莓派,这样可以更安全地进行实验,而不必担心损坏计算机(只需擦除 SD 卡然后重新开始即可!)。

漂亮的 Shell 环境

很多人说,当他们开始使用像 oh-my-zshFish 这样更用户友好的 Shell 环境时,他们在命令行上感到更舒适。我非常同意这一点 – 我已经使用 Fish 十年了,我非常喜欢它。

在这里还有一些其他的事情可以做:

  • 有些人说,让他们的终端更漂亮可以帮助他们感到更舒适(“让它变成粉色!”)。
  • 设置一个漂亮的 Shell 提示符来提供更多信息(例如,当命令失败时,可以将提示符设置为红色)。特别是 transient prompts(在当前命令设置一个非常花哨的提示符,但在之前的命令中设置一个简单得多的提示符)看起来非常好。

一些用于美化终端的工具:

  • 我使用 base16-shell
  • powerlevel10k 是一个流行的漂亮的 Zsh 主题,具有 transient prompts
  • starship 是一个漂亮的提示符工具
  • 在 Mac 上,我认为 iTerm2 比默认的终端更容易自定义。

漂亮的文件管理器

一些人提到了像 rangernnn 这样的漂亮的终端文件管理器,这是我之前没有听说过的。

一个有帮助的朋友或同事

一个可以回答初学者问题并给你指点的人是无价的。

通过肩并肩地观察学习

有人提到观察更有经验的人使用终端 - 有很多经验丰富的用户甚至没有意识到自己在做什么,你可以从中学到很多小技巧。

别名

很多人说,为常用任务创建自己的别名或脚本就像是一个神奇的“灵光一现”时刻,因为:

  • 他们不必记住语法
  • 然后他们就有了一份自己常用命令的列表,可以轻松调用

查找示例的备忘单

很多手册页没有示例,例如 openssl s\_client 的手册页就没有示例。这使得起步变得更加困难!

人们提到了一些备忘单工具,比如:

  • tldr.sh
  • cheat(还可以进行编辑 - 你可以添加自己的命令以供以后参考)
  • um(一个非常精简的需要自己构建的系统)

例如,openssl 的备忘单 非常棒 - 我认为它几乎包含了我在实际中使用 openssl 时用过的所有内容(除了 openssl s_client-servername 选项)。

有人说他们配置了他们的 .bash_profile,这样每次登录时都会打印出一张备忘单。

不要试图背诵

一些人说他们需要改变自己的方法 - 他们意识到不需要试图记住所有的命令,只需按需查找命令,随着时间的推移,他们会自然而然地记住最常用的命令。

(我最近对学习阅读 x86 汇编有了完全相同的体会 - 我正在上一门课程,讲师说“是的,刚开始时可以每次都查找,最终你会记住最常见的指令。”)

还有一些人说相反的观点 - 他们使用间隔重复应用程序(如 Anki)来记忆常用的命令。

Vim

有人提到他们开始在命令行上使用 Vim 编辑文件,一旦他们开始使用终端文本编辑器,使用命令行处理其他事情也变得更自然。

此外,显然有一个名为 micro 的新编辑器,像是更好的 pico/nano,适用于那些不想学习 Emacs 或 Vim 的人。

桌面上使用 Linux

有人说他们开始使用 Linux 作为他们的日常主力系统,而需要修复 Linux 问题可以帮助他们学习。这也是我在大约 2004 年熟悉命令行的方式(我非常喜欢安装各种不同的 Linux 发行版,以找到我最喜欢的那个),但我猜这不是如今最受欢迎的策略。

被迫仅使用终端

有些人说他们参加了一门大学课程,教授让他们在终端上做所有事情,或者他们自己制定了一个规则,一段时间内必须在终端上完成所有工作。

工作坊

有几个人说像 Software Carpentry 这样的工作坊(面向科学家的命令行、Git 和 Python/R 编程简介)帮助他们更熟悉命令行。

你可以在这里查看 Software Carpentry 课程

书籍和文章

一些提到的材料:

文章:

书籍:

视频:

(题图:MJ/c0dc082a-a477-434b-b826-77a42c8f61c3)


via: https://jvns.ca/blog/2023/08/08/what-helps-people-get-comfortable-on-the-command-line-/

作者:Julia Evans 选题:lujun9972 译者:ChatGPT 校对:wxy

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

如果这样,那就那样,否则就……。还不明白吗?了解了 Bash Shell 脚本中的 if-else 语句后就明白了。

Bash 支持 if-else 语句,以便你可以在 shell 脚本中使用逻辑推理。

通用的 if-else 语法如下:

if [ expression ]; then

  ## 如果条件为真则执行此块,否则转到下一个

elif [ expression ]; then

  ## 如果条件为真则执行此块,否则转到下一个

else 

  ## 如果以上条件都不成立,则执行此块

fi

正如你所注意到的:

  • elif 用于 “否则如果” 类型的条件。
  • if-else 条件始终以 fi 结尾。
  • 使用分号 ;then 关键字

在展示 if 和 else-if 的示例之前,我先分享一下常见的比较表达式(也称为测试条件)。

测试条件

以下是可用于数字比较的测试条件运算符:

条件当满足以下条件时为真
$a -lt $b$a < $b$a 小于 $b
$a -gt $b$a > $b$a 大于 $b
$a -le $b$a <= $b$a 小于等于 $b
$a -ge $b$a >= $b$a 大于等于 $b
$a -eq $b$a == $b
$a -ne $b$a != $b

如果你要比较字符串,可以使用以下测试条件:

条件当满足以下条件时为真
"$a" = "$b"$a$b 相同
"$a" == "$b"$a$b 相同
"$a" != "$b"$a$b 不同
-z "$a"$a 为空字符串

文件类型检查也有条件:

条件当满足以下条件时为真
-f $a$a 是一个文件
-d $a$a 是一个目录
-L $a$a 是一个链接

现在你已经了解了各种比较表达式,让我们在各种示例中看看它们的实际应用。

在 Bash 中使用 if 语句

让我们创建一个脚本来告诉你给定的数字是否为偶数。

这是我的脚本,名为 even.sh

#!/bin/bash

read -p "Enter the number: " num

mod=$(($num%2))

if [ $mod -eq 0 ]; then
    echo "Number $num is even"
fi

当模数运算(%)整除给定数字(本例中为 2)时,它返回零。

? 特别注意空格。左括号和右括号与条件之间必须有空格。同样,条件运算符(-le、== 等)前后必须有空格。

这是我运行脚本时显示的内容:

Running a script with if statement example in bash

你是否注意到,当数字为偶数时,脚本会告诉你,但当数字为奇数时,脚本不会显示任何内容? 让我们使用 else 来改进这个脚本。

使用 if else 语句

现在我在前面的脚本中添加了一条 else 语句。这样,当你得到一个非零模数(因为奇数不能除以 2)时,它将进入 else 块。

#!/bin/bash

read -p "Enter the number: " num

mod=$(($num%2))

if [ $mod -eq 0 ]; then
    echo "Number $num is even"
else
    echo "Number $num is odd"
fi

让我们用相同的数字再次运行它:

Running a bash script that checks odd even number

正如你所看到的,该脚本更好,因为它还告诉你该数字是否为奇数。

使用 elif(否则如果)语句

这是一个检查给定数字是正数还是负数的脚本。在数学中,0 既不是正数也不是负数。该脚本也检查了这一事实。

#!/bin/bash

read -p "Enter the number: " num

if [ $num -lt 0 ]; then
    echo "Number $num is negative"
elif [ $num -gt 0 ]; then
    echo "Number $num is positive"
else
    echo "Number $num is zero"
fi

让我运行它来涵盖这里的所有三种情况:

Running a script with bash elif statement

用逻辑运算符组合多个条件

到目前为止,一切都很好。但是你是否知道通过使用与(&&)、或(||)等逻辑运算符可以在一个条件中包含多个条件? 它使你能够编写复杂的条件。

让我们编写一个脚本来告诉你给定的年份是否是闰年。

你还记得闰年的条件吗? 它应该被 4 整除,但如果它能被 100 整除,那么它就不是闰年。但是,如果能被 400 整除,则为闰年。

这是我的脚本。

#!/bin/bash

read -p "Enter the year: " year

if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then
    echo "Year $year is leap year"
else
    echo "Year $year is normal year"
fi
? 注意上面双括号 [[ ]] 的使用。如果你使用逻辑运算符,则这是强制性的。

通过使用不同的数据运行脚本来验证脚本:

Example of running  bash script with logical operators in if statement

?️ 练习时间

让我们做一些练习吧 ?

练习 1:编写一个 Bash Shell 脚本,检查作为参数提供给它的字符串的长度。如果未提供参数,它将打印 “empty string”。

练习 2:编写一个 Shell 脚本来检查给定文件是否存在。你可以提供完整的文件路径作为参数或直接在脚本中使用它。

提示:文件使用 -f 选项

练习 3:通过检查给定文件是否是常规文件、目录或链接或者是否不存在来增强之前的脚本。

提示:使用 -f、-d 和 -L

练习 3:编写一个接受两个字符串参数的脚本。脚本应检查第一个字符串是否包含第二个参数的子串。

提示:请参阅上一章 Bash 字符串

我希望你喜欢 Bash 基础知识系列。在下一章中,你将了解如何在 Bash 中使用循环。继续编写 Bash!

(题图:MJ/1e8f2f5c-9e47-4c84-b8c1-072808e9cf70)


via: https://itsfoss.com/bash-if-else/

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

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

了解 Ubuntu 软件仓库系统的基本机制,更好地处理软件包管理问题,避免常见的更新错误。

当你开始使用 Ubuntu 或者其它基于 Ubuntu 的发行版时,你很快就会学会使用 apt 命令安装软件包:

sudo apt install package_name

你可能还会使用这三条 PPA 命令安装其它软件:

sudo add-apt-repository ppa:PPA_Name/ppa
sudo apt update
sudo apt install package_from_ppa

但当你添加一些外部的软件存储库时,很可能会遇到一些更新错误。

尽管你可以在互联网上搜索到同样的报错以及对应的解决方案,但在大多数情况下,你并不知道这些错误为什么会出现,也不知道它们是怎么被解决的。

如果你了解了 Ubuntu 软件存储库的运行机制,你就会很清楚这些问题的根源是什么,进而对症下药地给出处理方式。

在技术论坛上,你可以找到很多相关的零散内容,但那些碎片化的信息并不能让你对其产生一个全面的理解。

因此我写出了这篇文章,以便让你全面了解软件存储库是如何运作的。

本文的内容适用于 Linux Mint、Elementary OS 以及其它基于 Ubuntu 的发行版(Debian 或许也适用)。

本文主要面向终端用户而不是开发者,我只会介绍维护系统软件存储库所需要的知识,不会展示如何在 Ubuntu 中打包应用程序。

我们会先从关键部分开始,了解软件包管理器和软件存储库的基本概念。这可以为了解它们的底层运作方式奠定基础。

1、什么是包管理器?

简单地说,包管理器就是让用户在操作系统上安装、移除、升级、配置、管理软件包的工具。

Ubuntu 通过软件存储库为用户提供软件。软件存储库中包含了各种不同类型的软件包以及它们的元数据文件,元数据文件中记录了软件包的信息,包括软件包名称、版本号、软件包描述和软件存储库名称等。

软件包管理器与元数据进行交互,并在你的系统上创建本地的元数据缓存。当你需要安装软件时,软件包管理器会引用这些缓存来获取信息,通过互联网连接到对应的存储库下载软件包,然后再将软件包安装到系统上。

下面这篇文章详细介绍了软件包管理器的工作原理,欢迎查阅。

Linux 上的软件包管理器

2、Ubuntu 的默认软件存储库

在上一节中,你可能已经对软件存储库有了一些认识。

你可能已经猜到,没有哪个软件存储库会包含所有软件包。因为软件包会被分类放置在不同的软件存储库中,这样就可以方便地启用或禁用部分软件存储库。

每个 Ubuntu 版本都有自己的一组四个官方存储库:

  • Main – Canonical 支持的自由开源软件
  • Universe – 社区维护的自由开源软件
  • Restricted – 设备的专有驱动程序
  • Multiverse – 受版权或法律问题限制的软件

下面这篇文章介绍了如何在 Ubuntu 中启用 Universe 和 Multiverse 软件存储库。

如何启用 Universe 和 Multiverse 软件存储库

3、了解 sources.list

sources.list 是 Ubuntu 软件存储库机制的一个组成部分。sources.list 文件中存在的错误条目常常是引发一些与更新问题的根本原因。

因此,了解 sources.list 很重要。

sources.list 是一个记录了软件存储库信息的文本文件,每一行未被注释的内容都代表一个单独的软件存储库。

sources.list in Ubuntu

但这些内容需要遵循特定的格式,并且不应出现重复的行。下面这篇文章中介绍了 sources.list 的更多详细内容。

sources.list 的用法

4、深入了解 PPA

尽管 Ubuntu 最近在大力推广 Snap,但 PPA 仍然是获取 Ubuntu 最新软件的一个可靠途径。

然而很多 Ubuntu 用户都只是刻板地直接运行上面的三条命令来使用 PPA,自然很容易会遇到诸如“repository does not have release file”这样的问题。

下面这篇文章是一篇深入详尽的 PPA 指南。

PPA 详尽指南

5、添加外部软件存储库

除了默认软件存储库和 PPA,你还可以从第三方软件存储库中添加软件。比如 Brave 浏览器、Docker 等软件都专门为 Ubuntu 提供了软件存储库。

你可以通过下面这篇文章了解使用外部软件存储库的机制。

通过外部存储库安装软件

6、排查常见错误

现在你已经了解了底层机制,现在可以熟悉一下在使用 Ubuntu 时可能遇到的典型更新错误了。

当你看到出现错误之后,你会得到一些关于它的根本原因的提示。在了解根本原因后,你就能知道某个解决方案是如何解决问题的了。

这就是本文的目的。让你充分了解软件包管理系统的底层知识,从而避免常见错误或者直接有效修复这些错误。

你不仅要知其然,还要知其所以然。

下载软件存储库信息失败

如果遇到了这种情况,就可以开始调查了。

Failed to download repository information

在某些情况下,可能是网络连接的问题,但也有可能是因为你自行添加了某些软件存储库,或者 sources.list 中的条目有误。

这个时候应该在终端中尝试刷新软件包缓存。

sudo apt update

检查输出结果的最后几行,它会给出错误信息(也就是以 “E:” 开头的行)。有了错误信息之后,就可以开始故障排除了。

软件存储库中没有发布文件

如果 Ubuntu 用户未检查某个 PPA 是否支持其 Ubuntu 版本,就盲目向系统中添加该 PPA 时,就很可能会遇到这样的错误。

E: The repository ‘http://ppa.launchpad.net/numix/ppa/ubuntu focal Release’ does not have a Release file.

原因很可能就是这个软件存储库没有针对所使用的 Ubuntu 版本进行配置。

下面这篇文章对此做了详细解释。

软件存储库中没有发布文件

MergeList 问题

如果你看到这样的错误:

E:Encountered a section with no Package: header,
E:Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_precise_universe_binary-i386_Packages,
E:The package lists or status file could not be parsed or opened.

这表明第二行中提到的缓存文件已经损坏。对应的解决方法是清空缓存并重试。

下面这篇文章对此做了详细解释。

MergeList 问题

目标软件包被多次配置

好吧!严格来说,这不是一个错误。它只是一个警告。但它仍然很常见,可能会给许多 Ubuntu 新用户带来麻烦。

这是一个能让你把新学到的知识用在这里的好例子。

出现这个问题是因为 sources.list 文件中有重复的条目。解决办法是将所有重复的行删除至只保留一行。

下面这篇文章对此做了详细解释。

目标软件包被多次配置

7、继续学习

在读完这篇文章后,希望你对 Ubuntu 的软件存储库机制能有更深入的了解。下一次当你遇到错误并寻找解决方案时,你就更有可能理解发生了什么。

接下来,你应该学会使用 apt 的各种命令管理软件包,不仅仅只是 apt installapt remove

apt 命令详尽指南

你还可以详细了解一下关于软件包管理的其它知识。

完全指南:在 Ubuntu 安装和删除软件

由于 Ubuntu 比以往任何时候都更推崇 Snap,所以你也应该学习一些必要的 Snap 命令。

完全指南:在 Ubuntu 上使用 Snap 安装包

Flatpak 应用程序也越来越受欢迎,你也很可能会接触到它们。

在 Ubuntu 上安装和使用 Flatpak

希望你喜欢学习软件存储库的机制,并对软件包管理有更清晰的认识。欢迎在评论区分享你的想法。

(题图:MJ/6878226c-f6b0-40e7-aae7-d64932b36464)


via: https://itsfoss.com/ubuntu-repository-mechanism/

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

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

下面介绍如何在 Linux Mint 中安装 KDE Plasma 桌面环境,并进行了一些微调。

Linux Mint 是最流行的和用户友好的 Linux 发行版,以其易用性和稳定性而闻名。虽然 Linux Mint 中默认的 Cinnamon 桌面环境提供了友好愉快的体验,但也有一些用户可能想要探索其它的桌面环境,以进一步定制自己的 Linux 体验。KDE Plasma 是另一个著名的桌面环境,提供了一种现代化的特色功能丰富的界面。

然而,Linux Mint 从未正式提供过 KDE Plasma 。但是这里有一种在 Linux Mint 基础之上安装 KDE Plasma 桌面环境的方法。让我们一起尝试一下。

注意: 不要在你的有重要数据的稳定系统中尝试这些步骤。有风险。

Linux Mint with KDE Plasma

在 Linux Mint 中安装 KDE Plasma 桌面环境

在 Linux Mint 发行版中,有三种主要组件来安装 KDE Plasma 桌面环境。它们是 kde-fullkde-standardkde-plasma-desktop

kde-full 软件包集包含完整的 KDE Plasma 桌面环境。kde-standard 是最小的版本,kde-plasma-desktop 仅是桌面环境。

如果你将要尝试安装 KDE Plasma 桌面环境,我将建议安装 kde-full 软件包。

首先,打开一个终端,确保你的 Linux Mint 版本是已更新的。确保你执行了一次重新启动。

sudo apt update && sudo apt upgrade -y
reboot

其次,在终端中,运行下面的命令来安装完整的 KDE 软件包。由于 Linux Mint 是基于 Ubuntu LTS 版本的,所以,你应该会获取基于当前正在持续更新的 Kubuntu LTS Plasma 版本的 KDE Plasma 版本。

sudo apt install kde-full

完整的下载体积有点大。针对当前的 Linux Mint 版本,它大约是 1.5 GB ,整个安装过程可能需要 20 分钟。

Installing KDE Plasma in Linux Mint

在安装过程中,你需要选择显示管理器,因为 KDE Plasma 使用 SDDM 。出现提示时,在下面的屏幕中选择 SDDM 。

Selecting SDDM as display manager

在安装完成后,你需要在 SDDM 配置文件中修改其中一个备选项以阻止在登录过程中弹出一个空的联机键盘。为此,使用 nano 或任意一个编辑器来打开下面的文件。

sudo nano /etc/sddm.conf

接下来,添加下面的行。保存并退出。

[General]InputMethod=

最后,重新启动系统。

reboot

在登录期间,你应该会看到 SDDM 登录窗口,而不是 Linux Mint 的原来的登录提示窗口。在窗口顶部,选择 “Plasma” 会话并登录。

Choose Plasma as Session

移除 Cinnamon 、Xfce 或 MATE

在 KDE Plasma 安装后,你可以移除 Cinnamon 、Xfce 或 MATE 桌面环境组件。如果你看到你的 KDE Plasma 工作的很好,那么移除是安全的。使用下面的命令来移除它们,最后使用命令 reboot 来重新启动。

sudo apt purge cinnamon
sudo apt purge mate-desktop
sudo apt purge
    xfce4-session
    xfwm4
    xfdesktop4
    xfconf
    xfce4-utils
    exo-utils
    xfce4-panel
    xfce4-terminal
    thunar

几点注意事项

  • 你可能会发现:相比于 Cinnamon 桌面环境,KDE Plasma 的运行性能有一点慢,这是很明显的。
  • Linux Mint 的壁纸、主题、图标和光标文件可能会保留在系统中。如果你想的话,你可以移除它们。
  • Mint Plymouth 动画应该也会保留,你可以手动移除它。
  • 如果你在一个虚拟机中的系统中使用上述步骤,在从待机状态唤醒时,SDDM 可能会崩溃。

总结

热烈庆贺!你已经在你的 Linux Mint 系统上成功的安装 Plasma 桌面环境。通过执行这些步骤,你现在可以访问一个功能丰富的、视觉震撼的、可高度自定义的桌面环境。请谨慎使用!

(题图:MJ/8944ad54-b64c-4761-b848-801215c63b56)


via: https://www.debugpoint.com/kde-plasma-linux-mint/

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

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