Abhishek Prakash 发布的文章

了解 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中国 荣誉推出

这里有一些技巧和调整,通过将终端和文件管理器结合在一起,以节省你的时间。

Nautilus 是 GNOME 桌面环境中的图形化文件浏览器。你可以使用它来访问和管理系统中的文件和文件夹。

尽管并非所有人都喜欢使用终端来管理文件和目录,但你也可以通过终端进行文件和目录管理。

然而,你可能会遇到需要在终端和文件管理器之间切换的情况。

有多种方法可以在 Nautilus 文件管理器和终端之间进行交互。令人惊讶的是,并不是所有的 Linux 用户都知道这些方法。

例如,在 Nautilus 中,右键单击并选择“ 在终端中打开 Open in terminal ”选项,将在终端中打开当前目录位置。

在 Linux 中从 Nautilus 文件管理器中打开终端

这只是我在本文中要与你分享的众多示例之一。

1、拖放获取绝对路径

如果你将文件夹或文件拖放到终端中,其绝对路径将被粘贴到终端屏幕上。

将文件或文件夹从 Nautilus 拖放到终端会粘贴该项的绝对路径

当你在文件浏览器中深入目录结构并且不想在终端中键入整个路径时,这样做很有帮助。

2、进入目录

这与上面看到的类似。如果你在目录结构中深入进入,并且不想为 切换到该目录 键入整个路径,这个技巧很有帮助。

在终端中键入 cd 命令,然后拖放以进入目录。

在键入"cd"命令后,通过拖放将目录输入终端

3、在编辑器中打开文件

类似地,你可以使用 Nano 或 Vim 编辑器打开文件进行 编辑

将文件拖放到 nano 命令中以打开它进行编辑。

在键入"nano"后,将需要编辑的文件拖放到终端

4、使用 sudo 权限打开文件进行编辑

与上述相同,但这次你可以使用 sudo 权限打开文件进行编辑。

使用 sudo 权限打开 sources.list 文件进行编辑

5、拖放多个文件(如果命令支持多个参数)

你也可以拖放多个文件以获取它们的绝对路径。这可以与接受多个参数的命令一起使用。

例如,diff 命令用于检查两个文件之间的差异。输入 diff,然后拖放你想要检查差异的文件。

通过选择文件并将其拖放为 diff 命令参数来检查两个文件的差异

6、从文本文件复制粘贴

阅读文档并且需要在终端中运行其中提到的命令?你当然可以 在终端中复制粘贴

然而,更快捷的方法是选中文本并将其拖放到终端。

这个技巧也适用于 GNOME-Sushi 预览。

使用 GNOME-Sushi 从任何文件的预览中拖放一些文本

7、从浏览器中拖放

与上述的文本文件类似,你也可以从浏览器中拖放文本。这有助于在进行教程操作时同时查看教程。

从互联网拖放代码或网址到终端,无需复制或粘贴

8、在 Nautilus 中嵌入终端

无法离开终端?直接将其嵌入到文件管理器中。这样,你无需单独 打开一个终端

这里的关键是,如果你在文件浏览器中切换到另一个目录,嵌入的终端会自动切换到相应的目录。

你也可以在 Nautilus 嵌入的终端中执行大部分上述的拖放操作。例如,通过拖放 .bashrc 文件并使用 grep,在 .bashrc 中搜索特定文本。

通过在嵌入的终端中拖放 .bashrc 文件并使用 grep,在 bashrc 中搜索特定文本

9、在嵌入的终端之间拖放文件标签

终端和文件管理器都支持选项卡视图。你可以在选项卡之间拖放文件。

例如,要 检查 ISO 的 shasum 值,输入 shasum 命令,然后从另一个选项卡中拖放文件,如下所示。

检查 ISO 的 shasum 值,输入 shasum 命令,然后从另一个选项卡中拖放文件

更多关于 Nautilus 和终端的内容

喜欢这些技巧吗?也许你想学习更多类似的技巧。

如果你想更充分地利用 Nautilus 文件管理器,这里有一些技巧供你参考。

调整你的 Nautilus 文件管理器的 13 种办法

这里还有一些探索的终端技巧:

19 个你应该掌握的基本但重要的 Linux 终端技巧

? 你是否了解其他将终端和文件管理器结合使用的酷炫技巧?不妨在下方的评论区与我们分享一下!

(题图:MJ/ba1ee1c9-07e5-4fc8-bd2c-bde469ce095c)


via: https://itsfoss.com/terminal-nautilus-combination/

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

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

在大多数编程语言中,你都会找到字符串数据类型。字符串基本上是一组字符。

但 Bash Shell 有所不同。字符串没有单独的数据类型。这里一切都是变量。

但这并不意味着你不能像在 C 和其他编程语言中那样处理字符串。

在 Bash Shell 中可以查找子字符串、替换子字符串、连接字符串以及更多字符串操作。

在 Bash 基础知识系列的这一部分中,你将学习基本的字符串操作。

在 Bash 中获取字符串长度

让我们从最简单的选项开始。也就是获取字符串的长度。这很简单:

${#string}

让我们在示例中使用它。

Example of getting string length in bash

正如你所看到的,第二个示例中有两个单词,但由于它用引号引起来,因此它被视为单个单词。连空格都算作一个字符。

在 Bash 中连接字符串

用技术术语来说是字符串 连接 concatenation ,这是 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

在 Bash 中提取子字符串

假设你有一个包含多个字符的大字符串,并且你想要提取其中的一部分。

要提取子字符串,需要指定主字符串、子字符串的起始位置和子字符串的长度,如下所示:

${string:$pos:$len}
? 和数组一样,字符串中的定位也是从 0 开始。

这是一个例子:

Extracting substring in bash

即使你指定的子字符串长度大于字符串长度,它也只会到达字符串末尾。

替换 Bash 中的子字符串

假设你有一个大字符串,并且你想用另一个字符串替换其中的一部分。

在这种情况下,你可以使用这种语法:

${string/substr1/substr2}
✋ 只有第一次出现的子字符串才会以这种方式替换。如果要替换所有出现的地方,请使用 ${string//substr1/substr2}

这是一个例子:

Replace substring in bash

正如你在上面看到的,“good” 一词被替换为 “best”。我将替换的字符串保存到同一字符串中以更改原始字符串。

? 如果未找到子字符串,则不会替换任何内容。它不会导致错误。

在 Bash 中删除子字符串

我们来谈谈删除子字符串。假设你要删除字符串的一部分。在这种情况下,只需将子字符串提供给主字符串,如下所示:

${string/substring}
✋ 通过这种方式,仅删除第一次出现的子字符串。如果要删除所有出现的内容,请使用 ${string//substr}

如果找到子字符串,则将从字符串中删除它。

让我们通过一个例子来看看。

Delete substring in bash

不用说,如果没有找到子字符串,则不会删除它。它不会导致错误。

?️ 练习时间

现在是你通过简单练习来实践字符串操作的时候了。

练习 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 选题:lkxed 译者:geekpi 校对:wxy

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

Ubuntu 可能默认安装了 Snap,但你仍然可以使用 Flatpak 通用软件包。

Linux 世界有三种“通用”打包格式,允许在“任何” Linux 发行版上运行:Snap、Flatpak 和 AppImage。

Ubuntu 内置了 Snap,但大多数发行版和开发人员都避免使用它,因为它的闭源性质。他们更喜欢 Fedora 的 Flatpak 打包系统

作为 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” 错误。这是因为没有添加 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

安装并配置 Flatpak 后,重启你的系统。否则,已安装的 Flatpak 应用将不会在你的系统菜单上可见。

不过,你始终可以通过运行以下命令来运行 Flatpak 应用:

flatpak run <package-name>

常用 Flatpak 命令

现在你已经安装了 Flatpak 打包支持,是时候学习包管理所需的一些最常见的 Flatpak 命令了。

搜索包

如果你知道应用名称,请使用 Flathub 网站或使用以下命令:

flatpak search <package-name>

Search for a package using Flatpak Search command

? 除了搜索 Flatpak 包之外,在其他情况下, 指的是正确的 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

在极少数情况下,你可以直接从开发人员的仓库安装 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

从终端运行 Flatpak 应用

再说一遍,这是你不会经常做的事情。大多数情况下,你将在系统菜单中搜索安装应用并从那里运行该应用。

但是,你也可以使用以下命令从终端运行它们:

flatpak run <package-name>

列出已安装的 Flatpak 软件包

想要查看你的系统上安装了哪些 Flatpak 应用? 像这样列出它们:

flatpak list

List all the installed Flatpak packages on your system

卸载 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

它可能会帮助你 在 Ubuntu 上节省一些磁盘空间

Flatpak 命令总结

以下是你在上面学到的命令的快速摘要:

用途命令
搜索包flatpak search
安装包flatpak install
列出已安装的包flatpak list
从 flatpakref 安装flatpak install <package-name.flatpakref>
卸载软件包flatpak uninstall
卸载未使用的运行时和包flatpak uninstall --unused

使用 Flathub 探索 Flatpak 包

我知道通过命令行搜索 Flatpak 包并不是最好的体验,这就是 Flathub 网站 的用武之地。

你可以在 Flathub 上浏览 Flatpak 应用,它提供了更多详细信息,例如经过验证的发布商、下载总数等。

你还将在应用页面底部获得安装应用所需的命令。

额外信息:使用支持 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

sudo apt install gnome-software-plugin-flatpak

Installing GNOME Software Plugin in Ubuntu

总结

你在这里学到了很多东西。你学习了在 Ubuntu 中启用 Flatpak 支持并通过命令行管理 Flatpak 软件包。你还了解了与软件中心的集成。

我希望你现在对 Flatpaks 感觉更舒服一些。既然你发现了三个通用软件包之一,那么再 了解一下 Appimages 怎么样?

如果你有疑问或遇到任何问题,请告诉我。

(题图:MJ/d03886af-9b7f-401e-a964-da0e5d6531a2)


via: https://itsfoss.com/flatpak-ubuntu/

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

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

想在 Ubuntu 上运行仅限 Windows 的软件?Wine 就是你的朋友。学习在 Ubuntu Linux 中安装 Wine。

只要稍加努力,你可以使用 Wine 来 在 Linux 上运行 Windows 应用程序 。当你必须在 Linux 上运行一个仅有 Windows 版本的应用程序时,Wine 是一个你可以尝试的工具。

请注意:你不能使用 Wine 来运行每一个 Windows 游戏或软件。请浏览 已支持的应用程序的数据库。评估为白金级或黄金级的软件更有可能与 Wine 一起平稳的运行。

如果你已经找到一个仅有 Windows 版本的软件,并且 Wine 也很好地支持它,现在希望使用它,这篇教程将帮助你在 Ubuntu 上安装 Wine 。

? 如果你在此之前已经安装了 Wine ,你应该完全地移除它,以避免一些冲突。此外,你应该参考它的 下载页面 来获取特定 Linux 发行版的附加说明。

在 Ubuntu 上安装 Wine

这里有很多方法来在你的系统上安装 Wine 。几乎所有的 Linux 发行版都在它们的软件包存储库中提供 Wine 。

大多数的时候,Wine 的最新稳定版本都可以通过软件包存储库获得。

  • 从 Ubuntu 的存储库中安装 Wine(简单,但是可能不是最新的版本)
  • 从 Wine 的存储库中安装 Wine(稍微复杂一些,但是提供最新的版本)

请耐心等待,按照步骤逐步安装和 Wine 。这里有一些相关的步骤。

? 请记住,Wine 会安装很多很多的软件包。你将看到一份庞大的软件包列表,安装大小差不多 1.3 GB 。

Wine download and installed size

方法 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 版本Mint 版本 。在你掌握这些信息后,分别使用针对你的相对应的版本的命令。

针对 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-develwinehq-staging

初始化 Wine 配置

在 Wine 安装后,运行下面的命令:

winecfg

这将创建用于安装 Windows 应用程序的 虚拟的 C: 驱动器

C: Drive created by winecfg in Home directory

在按照这些步骤时,有时,你可能在文件管理器的邮件菜单中找不到 “ 使用 Wine Windows 程序加载器打开 Open With Wine Windows Program Loader ” 的选项。

在这种情况下,通过 创建软链接 到适当的目录来修复它:

sudo ln -s /usr/share/doc/wine/examples/wine.desktop /usr/share/applications/

然后,重新启动你的系统来获取更改。

使用 Wine 来运行 Windows 应用程序

在你安装 Wine 并通过运行 winecfg 将其配置后, 现在是安装 Windows 应用程序的时间了。

在这里,7Zip.exe 文件是用于演示目的的。我知道我应该使用一个更好的示例,因为 7Zip 在 Linux 上是可获得的。不过,对于其它的应用程序来说,接下来的流程是相同的。

首先,从它的 官方下载页面 下载 7Zip 文件。

现在,在该文件上右键单击,并选择“使用 Wine Windows 程序加载器打开”选项:

Open 7zip exe file using Wine WIndows Program Loader in Nemo file manager

这将提示我们安装该文件。单击 “ 安装 Install ” 并让其完成。在完成后,你可以像其它的一些原生应用程序一样打开 7zip 。

Open 7Zip from Ubuntu Activities Overview

你可以使用 wine uninstaller 命令来卸载任意已安装的应用程序。

这里是一篇关于在 Linux 上 使用 Wine 来运行 Windows 软件 的专业教程。

从 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

现在,使用 autocleanclean 命令来清理本地存储库中已检索取回的几乎不再有用的软件包文件。

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

如果你还有问题,你可以浏览 它们的维基 来查看详细的 文档 或者在 它们的论坛 中询问你的疑问。

或者,如果你不介意花一些钱,你可以选择 CrossOver 。它基本上就是 Wine ,但是有高级的支持。你也可以联系他们的团队来解决你的问题。

我的意见是,在你不能找到一款你必需使用的替换软件时,你应该求助于 Wine 。事实上,在这种情况下,不能保证与 Wine 一起工作。

但是,Wine 为从 Windows 迁移到 Linux 提供了一些希望。


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

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

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

本章将介绍如何在 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

? ${ 之后或 } 之前不能有任何空格。你不能像 ${ array[n] } 那样使用它。

一次访问所有数组元素

假设你要打印数组的所有元素。

你可以一一使用 echo ${array[n]} 但这确实没有必要。有一个更好更简单的方法:

${array[*]}

这将为你提供所有数组元素。

Accessing all array elements at once in bash shell

在 Bash 中获取数组长度

如何知道数组中有多少个元素? 有一个专门的方法 在 Bash 中获取数组长度

${#array_name[@]}

就这么简单,对吧?

Get array length in bash

在 Bash 中添加数组元素

如果必须向数组添加其他元素,请使用 += 运算符 将元素追加到 Bash 中的现有数组

array_name+=("new_value")

这是一个例子:

Append new element to array

? 追加元素时使用 () 很重要。

你还可以使用索引将元素设置在任何位置。

array_name[N]=new_value

但请记住使用正确的索引编号。 如果在现有索引上使用它,新值将替换该元素。

如果你使用“越界”索引,它仍会添加到最后一个元素之后。例如,如果数组长度为 6,并且你尝试在索引 9 处设置新值,则该值仍将作为最后一个元素添加到第 7 个位置(索引 6)。

删除数组元素

你可以使用 Shell 内置的 unset 通过提供索引号来删除数组元素:

unset array_name[N]

这是一个示例,我删除了数组的第四个元素。

Delete array element in bash

你还可以通过 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 选题:lkxed 译者:geekpi 校对:wxy

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