2022年3月

不再使用某个应用程序了?删除它吧。

卸载不再使用的应用是 最简单释放磁盘空间的方法 ,而且可以使系统保持整洁。

在此篇入门教程中,我会介绍几种不同在 Ubuntu 上卸载应用程序的方法。

在 Ubuntu 中有几种方法 安装应用 ,同意也有以下几种方法卸载应用:

  • 从 Ubuntu 软件中心 Software Center 卸载应用(桌面用户)
  • apt remove 命令卸载应用
  • 用命令行中删除 Snap 应用(中级到高级用户)

让我们来一个一个了解这些方法。

方法 1:用 Ubuntu 软件中心卸载应用

在左侧栏或者菜单中找到 Ubuntu 软件中心 Software Center ,打开它。

已安装 Installed 栏中列出了已安装的应用。

如果你要找的应用不在 已安装 Installed 栏中,可以使用搜索查找应用。

打开已经安装的应用,有一个 移除 Remove 选项,点击它。

这会请求输入账户密码,输入后应用会在几秒内删除。

方法2: Ubuntu 命令行卸载应用

安装应用时使用 apt-get install 或者 apt install 。 卸载应用时使用 apt-get remove 或者 apt remove ,而不是 apt-get uninstall

按照以下方式使用命令:

sudo apt remove program_name

执行此操作会请求你的账户密码。当输入密码时,屏幕上不会有提示。输入完后按下回车。

待删除的应用不会立刻被删除。你需要确认。当询问你的确认时,请输入回车或者按下 Y

请在命令行中输入准确的包的名字,不然会出现 “不能找到软件包的错误” 错误 。

不要担心记不住具体的应用名字,你可以使用超级有用的 Tab 补全应用名称。 Tab 是你必须知道的 Linux 命令行技巧 之一。

你只需要输入想要卸载应用的前几个字母,然后按下 tab ,会提示以这几个字母开头的已安装应用程序。

找到要卸载的应用名称,输入完整的应用名称然后卸载。

如果不知道具体的应用名称或者开头字母,你可以 列出 Ubuntu 中所有已安装的包 ,然后查找符合你记忆的应用名称。

比如,下图的命令会列出所有已安装的应用名称中包含 ‘my’ 的应用,不仅仅是以 ‘my’ 开头的应用。

apt list --installed | grep -i my

这非常酷炫对不对?在 Ubuntu 中使用卸载命令时请注意应用名。

补充:使用 apt purge 卸载应用(进阶用户)

当在 Ubuntu 中卸载应用时,应用程序会被卸载,但是会留下细小的、修改过的用户配置文件。这些文件是故意被留下的,因为当你再次安装同样的应用时,会使用这些遗留的配置文件。

如果你想完全卸载应用,你可以使用 apt purge 命令代替 apt remove 命令,或者在 apt remove 命令后再使用它。

sudo apt purge program_name

注意 apt purge 令不会删除保存在用户目录下的数据或者配置文件。

方法3: Ubuntu 中卸载 Snap 应用

前面的几种方式可用于使用 apt 命令、 软件中心 Software Center 或者直接使用 deb 文件安装的应用。

Ubuntu 也推出了一个名为 Snap 的包管理系统。在 软件中心 Software Center 中的大部分应用都是 Snap 包格式。

你可以使用 软件中心 Software Center 轻松地卸载这些应用,也可以使用命令行卸载。

列出所有已经安装的 Snap 包名字:

snap list

选择你想要卸载的应用,然后卸载,这不会要求你确认是否删除。

sudo snap remove package_name

妙招:用一个神奇的命令清理系统

到此你已经学会怎么卸载应用,现在使用一个简单的命令清理卸载残留,比如不再用到的依赖或 Linux 内核头文件。

在终端输入如下命令:

sudo apt autoremove

这条命令很安全,而且会释放几百 MB 的磁盘空间。

总结

本文一共介绍了三种卸载应用的方法,包括通过图形界面卸载、命令行卸载,以便你了解所有方式。

希望此篇教程对 Ubuntu 初学者有所帮助,欢迎提出问题和建议。


via: https://itsfoss.com/uninstall-programs-ubuntu/

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

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

一个为开发者量身定做的跨平台开源解决方案。你可以建立或加入现有的社区来进行协作和互动。

几乎每个网络用户都知道 Slack、Rocket.Chat、Trello、Nextcloud,以及其他一些用于工作沟通和协作的解决方案。

如果你喜欢用 FOSS 来进行团队协作,我们也有一个 Slack 的开源替代品列表

但是,作为一个软件开发者,如果你偶然发现了一个开发者社区怎么办?

与 Reddit 或其他社交媒体上的社区不同,你可以进入一个开源平台,在那里,开发者们遇见并就重要的开源项目进行合作。这对于社交协作和同行之间的互动来说,不是很令人兴奋吗?

Gitter(现在是 Element 的一部分,也是一个协作/聊天应用)的目标就是这样。它是一个由开源技术驱动的社区平台(Matrix 协议)。

Gitter:使用开源技术连接的开发者社区

Gitter 是一个令人兴奋的聊天和网络平台,有助于建立或加入现有社区。它可用于 Linux、macOS 和 Windows。

它是专门为开发者定制的,可以为他们各自的语言/项目,如 CSS、JavaScript、Bootstrap、NodeJS 等,进行合作/加入社区。

你也可以轻松地创建你的社区,而无需设置任何邀请服务。

该平台的关键亮点是,社区是完全开放的,可被搜索引擎索引。对于社区中的对话历史,你不会被任何定价计划所锁定,你所需要查看的是归档。

而且,你在 Gitter 获得的功能还有很多。

Gitter 的功能

虽然 Gitter 最初是为开发者定制的,但如果你认为它的功能符合你的要求,你可以用它来建立任何类型的社区。

  • 由一个去中心化的 Matrix 网络支持。
  • 可公开加入的社区。
  • 能够将你的社区限制在选定的用户中。
  • 深色模式主题。
  • 访问归档,轻松找到过去的对话。
  • 能够导出信息/房间信息。
  • 从你的网络中添加用户(例如,如果你使用 Twitter 登录,你可以选择从 Twitter 邀请用户到你的社区)。
  • 几个可用的集成(GitHub、Bitbucket、Trello、GitLab、Docker Hub、Discourse 等)。
  • 支持 GitHub 风格的 Markdown。
  • 在同一社区下创建更多的房间,以保持事情的条理性。
  • 轻松地分享/嵌入聊天室的链接。
  • 帖子系统,以保持对话的整齐。
  • 删除/报告信息的能力。

总之,Gitter 提供了适合不同社区的各种功能。

而且,通过 GitHub、GitLab 和其他一些网站的集成,它成为开发者和团队的一个完美的合作选择。

在 Linux 中安装 Gitter.im

开发人员主要专注于网络应用。因此,如果你想避免在你的 Linux 桌面上安装任何东西,请前往 Gitter.im 并注册/登录以开始使用。

如果你想让它成为一个桌面应用,你可以从其官方网站下载 DEB 包,或者可选择 Snap 包Flatpak 包

我在简短的测试中尝试了 Flatpak 包,它在 Ubuntu 20.04 LTS 上运行良好。你可以在你喜欢的任何一个 Linux 发行版上尝试 Flatpak/Snap。

你也可以在你的移动设备上使用它。不幸的是,官方的 Gitter 移动应用已经不再维护。但是,你可以使用 Element 应用来登录房间/社区,考虑到两者都是由同一个去中心化的网络(即Matrix)驱动的。

要了解更多信息,请浏览 GitLab 页面或前往其网站。

你试过 Gitter 吗?你对它有什么看法?它适合你这个开发者吗?你用它做什么?请在下面的评论中告诉我们你的想法。


via: https://itsfoss.com/gitter/

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

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

对齐部署镜像和描述符是很困难的,但是某些策略可以使整个过程更高效。

 title=

在软件架构中,当两个组件之间有某些概念性或技术上的差异时会出现 阻抗失配 impedance mismatch 。这个术语其实是从电子工程中借用的,表示电路中输入和输出的电子阻抗必须要匹配。

在软件开发中,存储在镜像仓库中的镜像与存储在源码控制管理系统(LCTT 译注:SCM,Source Code Management)中它的 部署描述符 deployment descriptor 之间存在阻抗失配。你如何确定存储在 SCM 中的部署描述符表示的是正确的镜像?两个仓库追踪数据的方式并不一致,因此将一个镜像(在镜像仓库中独立存储的不可修改的二进制)和它的部署描述符(Git 中以文本文件形式存储的一系列修改记录)相匹配并不那么直观。

注意:本文假定读者已经熟悉以下概念:

  • 源码控制管理 Source Control Management (SCM)系统和分支
  • Docker 或符合 OCI 标准的镜像和容器
  • 容器编排系统 Container Orchestration Platforms (COP),如 Kubernetes
  • 持续集成/持续交付 Continuous Integration/Continuous Delivery (CI/CD)
  • 软件开发生命周期 Software development lifecycle (SDLC)环境

阻抗失配:SCM 与镜像仓库

为了更好地理解阻抗失配在什么场景下会成为问题,请考虑任意项目中的软件开发生命周期环境(SDLC),如开发、测试或发布环境。

测试环境不会有阻抗失配。现在使用 CI/CD 的最佳实践中开发分支的最新提交都会对应开发环境中的最新部署。因此,一个典型的、成功的 CI/CD 开发流程如下:

  1. 向 SCM 的开发分支提交新的修改
  2. 新提交触发一次镜像构建
  3. 新生成的镜像被推送到镜像仓库,标记为开发中
  4. 镜像被部署到容器编排系统(COP)中的开发环境,该镜像的部署描述符也更新为从 SCM 拉取的最新描述符。

换句话说,开发环境中最新的镜像永远与最新的部署描述符匹配。回滚到前一个构建的版本也不是问题,因为 SCM 也会跟着回滚。

最终,随着开发流程继续推进,需要进行更多正式的测试,因此某个镜像 —— 镜像对应着 SCM 中的某次提交 —— 被推到测试环境。如果是一次成功的构建,那么不会有大问题,因为从开发环境推过来的镜像应该会与开发分支的最新提交相对应。

  1. 开发环境的最新部署被允许入库,触发入库过程
  2. 最新部署的镜像被标记为测试中
  3. 镜像在测试环境中被拉取和部署,(该镜像)对应从 SCM 拉取的最新部署描述符

到目前为止,一切都没有问题,对吗?如果出现下面的场景,会有什么问题?

场景 A:镜像被推到下游环境,如 用户验收测试 user acceptance testing (UAT),或者是生产环境。

场景 B:测试环境中发现了一个破坏性的 bug,镜像需要回滚到某个确定正常的版本。

在任一场景中,开发过程并没有停止,即开发分支上游有了一次或多次新的提交,而这意味着最新的部署描述符已经发生了变化,最新的镜像与之前部署在测试环境中的镜像不一致。对部署描述符的修改可能会也可能不会对之前版本的镜像起作用,但是它们一定是不可信任的。如果它们有了变化,那么它们就一定与目前为止你测试过的想要部署的镜像的部署描述符不一致。

问题的关键是:如果部署的镜像不是镜像库中的最新版本,你怎么确定与部署的镜像相对应的是 SCM 中的哪个部署描述符? 一言以蔽之,无法确定。两个库直接有阻抗失配。如果要详细阐述下,那么是有方法可以解决的,但是你需要做很多工作,这部分内容就是文章接下来的主题了。请注意,下面的方案并不是解决问题的唯一办法,但是已经投入到生产环境并已经对很多项目起了作用,而且已经被构建并部署到生产环境中运行了超过一年。

二进制与部署描述符

源码通常被构建成一个 Docker 镜像或符合 OCI 标准的镜像,该镜像通常被部署到一个容器编排平台(COP)上,如 Kubernetes。部署到 COP 需要部署描述符来定义镜像被如何部署以及作为容器运行,如 Kubernetes 部署CronJobs。这是因为在镜像和它的部署描述符之间有本质差异,在这里可以看到阻抗失配。在这次讨论中,我们认为镜像是存储在镜像仓库中不可修改的二进制。对源码的任何修改都不会修改镜像,而是用另一个新的镜像去替换它。

相比之下,部署描述符是文本文件,因而可以被认为是源码且可修改。如果遵循最佳实践,那么部署描述符是被存储在 SCM,所有修改都会提交,而这很容易回溯。

解决阻抗失配

建议的解决方案的第一部分,就是提供一个能匹配镜像仓库中的镜像与对保存部署描述符的 SCM 做的代码提交的方法。最直接的解决方案是用源提交的哈希值标记镜像。这个方法可以区分不同版本的镜像、容易分辨,并且提供足够的信息来查找正确的部署描述符,以便镜像更好地部署到 COP。

再回顾下上面的场景:

场景 A 镜像被推到下游环境: 当镜像被从测试环境推到 UAT 环境时,我们可以从镜像的标签中知道应该从 SCM 的哪一次源码提交拉取部署描述符。

场景 B 当一个镜像需要在某一环节中回滚:无论我们选择回滚到那个镜像版本,我们都可以知道从 SCM 的哪一次源码提交拉取正确的部署描述符。

在每一种情景中,无论在某个镜像被部署到测试环境后开发分支有多少次提交和构建,对于每一次升级的镜像,我们都可以找到它当初部署时对应的部署描述符。

然而,这并不是阻抗失配的完整解决方案。再考虑两个场景:

场景 C 在负载测试环境中,会尝试对不同的部署描述符进行多次部署,以此来验证某一次构建的表现。

场景 D 一个镜像被推送到下游环境,在该环境中部署描述符有一个错误。

在上面的所有场景中,我们都需要修改部署描述符,但是目前为止我们只有一个源码提交哈希。请记住,最佳实践要求我们所有对源码的修改都要先提交到 SCM。某次提交的哈希本身是无法修改的,因此我们需要一个比仅仅追踪原来的源码提交哈希更好地解决方案。

解决方案是基于原来的源码提交哈希新建一个分支。我们把这个分支称为部署分支。每当一个镜像被推到下游测试或发布环境时,你应该基于前一个 SDLC 环境的部署分支的最新提交创建一个新的部署分支。

这样同一个镜像可以重复多次部署到不同的 SDLC 环境,并在后面每个环境中可以感知前面发现的改动或对镜像做的修改。

注意: 在某个环境中做的修改是如何影响下一个环境的,是用可以共享数据的工具(如 Helm Charts)还是手动剪切、粘贴到其他目录,都不在本文讨论的范围内。

因此,当一个镜像被从一个 SDLC 环境中推到下一环境时:

  1. 创建一个部署分支

    1. 如果镜像是从开发环境中推过来的,那么部署分支就基于构建这个镜像的源码提交哈希创建
    2. 否则,部署分支基于当前部署分支的最新提交创建
  2. 镜像被部署到下一个 SDLC 环境,使用的部署描述符是该环境中新创建的部署分支的部署描述符

deployment branching tree

图 1:部署分支树

  1. 部署分支
  2. 下游环境的第一个部署分支,只有一次提交
  3. 下游环境的第二个部署分支,只有一次提交

有了部署分支这个解决方案,再回顾下上面的场景 C 和场景 D:

场景 C 修改已经部署到下游 SDLC 环境中的镜像的部署描述符

场景 D 修复某个 SDLC 环境中部署描述符的错误

两个场景中,工作流如下:

  1. 把对部署描述符做的修改提交到 SLDC 环境和镜像对应的部署分支
  2. 通过部署分支最新提交对应的部署描述符把镜像重新部署到 SLDC 环境

这样,部署分支彻底解决了(存储着代表一次独一无二的构建的单一的、不可修改的镜像的)镜像仓库与(存储着对应一个或多个 SDLC 环境的可修改的部署描述符的)SCM 仓库之间的阻抗失配。

实践中的思考

这看起来像是行得通的解决方案,但同时它也为开发者和运维人员带来了新的实践中的问题,比如:

A. 为了更好地管理部署分支,部署描述符作为资源应该保存在哪里,是否要与构建镜像的源码保存在同一个 SCM 仓库?

到目前为止,我们都在避免谈论应该把部署描述符放在哪个仓库里。在还没有太多细节需要处理时,我们推荐把所有 SDLC 环境的部署描述符与镜像源码放在同一个 SCM 仓库。当部署分支创建后,镜像的源码可以作为方便找到部署的容器中运行的镜像的引用来使用。

上面提到过,可以通过镜像的标签来关联镜像与原始的源码提交。在一个单独的仓库中查找某次提交的源码的引用,会给开发者带来更大的困难(即便借助工具),这就是没有必要把所有资源都分开存储的原因。

B. 应该在部署分支上修改构建镜像的源码吗?

简答:不应该

详细阐述:不应该,因为永远不要在部署分支上构建镜像,它们是在开发分支上构建的。修改部署分支上定义一个镜像的源码会破坏被部署的镜像的构建记录,而且这些修改并不会对镜像的功能生效。在对比两个部署分支的版本时这也会成为问题。这可能会导致两个版本的功能差异有错误的测试结果(这是使用部署分支的一个很小的额外好处)。

C. 为什么使用镜像 标签 tag 标记 label 不可以吗?

通过 标签 tag 可以在仓库中很容易地查找镜像,可读性也很好。在一组镜像中读取和查找 标记 label 的值需要拉取所有镜像的 清单文件 manifest ,而这会增加复杂度、降低性能。而且,考虑到历史记录的追踪和不同版本的查找,对不同版本的镜像添加 标签 tag 也很有必要,因此使用源码提交哈希是保证唯一性,以及保存能即时生效的有用信息的最简单的解决方案。

D. 创建部署分支的最佳实践是怎样的?

DevOps 最重要的三个原则:自动化、自动化、自动化。

依赖资源来持续地强迫遵循最佳实践,充其量只是碰运气,因此在实现镜像的升级、回滚等 CI/CD 流水线时,把自动化部署分支写到脚本里。

E. 对部署分支的命名规范有建议吗?

<部署分支标识>-<环境>-<源码提交哈希>

  • 部署分支标识: 所有部署分支范围内唯一的字符串;如 “deployment” 或 “deploy”
  • 环境: 部署分支适用的 SDLC 环境;如 “qa”(测试环境)、 “stg”(预生产环境)、 或 “prod”(生产环境)
  • 源码提交哈希: 源码提交哈希中包含原来构建被部署的镜像的源码,开发者可以通过它很容易地查找到创建镜像的原始提交,同时也能保证分支名唯一。

例如, deployment-qa-asdf78s 表示推到 QA 环境的部署分支, deployment-stg-asdf78s 表示推到 STG 环境的部署分支。

F. 你怎么识别环境中运行的哪个镜像版本?

我们的建议是把最新的部署分支提交哈希和源码提交哈希添加到 标记 中。开发者和运维人员可以通过这两个独一无二的标识符查找到部署的所有东西及其来源。在诸如执行回滚或前滚操作时,使用那些不同版本的部署的选择器也能清理资源碎片。

G. 什么时候应该把部署分支的修改合并回开发分支?

这完全取决于开发团队。

如果你修改的目的是为了做负载测试,只是想验证什么情况会让程序崩溃,那么这些修改不应该被合并回开发分支。另一方面,如果你发现和修复了一个错误,或者对下游环境的部署做了调整,那么就应该把部署分支的修改合并回开发分支。

H. 有现成的部署分支示例让我们试水吗?

el-CICD 已经在生产上使用这个策略持续一年半应用到超过一百个项目了,覆盖所有的 SDLC 环境,包括管理生产环境的部署。如果你可以访问 OKD、Red Hat OpenShift lab cluster 或 Red Hat CodeReady Containers,你可以下载el-CICD 的最新版本,参照 教程 来学习部署分支是何时以怎样的方式创建和使用的。

结语

通过实践上面的例子可以帮助你更好的理解开发过程中阻抗失配相关的问题。对齐镜像和部署描述符是成功管理部署的关键部分。


via: https://opensource.com/article/21/8/impedance-mismatch-cicd

作者:Evan "Hippy" Slatis 选题:lujun9972 译者:lxbwolf 校对:wxy

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

GitHub 测试新的算法推送遭到程序员们抗议

本周早些时候,GitHub 推送了一个新的 测试版主页,意图让开发者关注更多的受众并建立社区。在用户的主页中原来的“Follwing”旁边放了一个新的“For you”,其中充满了各种算法推荐的推送。但不是每个用户都喜欢,用户担心这些推荐把 GitHub 变成一个社交媒体平台。有用户说,“算法推送可能会转化为收集更多的数据,而且它与开源社区不一致。”甚至已经出现了一个 Chrome 扩展可以移除这个推送。不过,GitHub 也承诺将提供一个选项可以选择退出。

老王点评:GitHub 难道不是一个“交友社区”么 : D

Chrome 将允许用户在网页上添加评论

据爆料,Google 计划引入一项新功能:允许用户在网页上添加评论和注释。这个想法并不新鲜,Chrome Web Store 里有许多用于相同目的的扩展。但目前该功能还没有向 Chrome Canary 通道的早期采用者提供测试。另外,微软已经在 Edge 浏览器上支持对 PDF 文件添加评论。

老王点评:确实是不错的功能,不过可能我们用不了。

第 1 季度全球应用下载量同比增长 11%

根据 data.ai 的报告,2022 年第一季度全球 App Store 和 Google Play 的应用下载量达到 370 亿,同比增长 11%。另外,它也创造了有史以来最大的消费者支出记录,达到 330 亿美元。其中,iOS 占比 65%,其金额在过去两年中增长了 42%。

老王点评:看来移动应用生态还没发展到顶峰啊。

回音

  • 昨天报道称 Lapsus$ 黑客组织主谋是一名 16 岁英国少年,进一步消息表示,他就读于牛津的一所特殊教育学校,其净资产积累已超 300 个比特币。另外,伦敦警方已 逮捕了 7 名 涉及该团伙的年轻人。
  • 付费的 MDN Plus 已推出,有免费、5 美元、10 美元三档订阅选项,以及新引入的通知、收藏和离线访问功能。此外,MDN Web Docs 的内容没有变化,相关服务将继续免费提供。

“用户态 Linux” 是什么?它是一种可以在用户态运行的 Linux 内核。(用户态是什么,这里就不解释了)

它有什么用?它用于内核隔离、替代 QEMU/Bochs 来调试 Linux 内核,也可以在低性能设备上代替 KVM 进行虚拟化。

但它也存在一些缺陷,比如不支持 ARM 架构以及多核系统。

编译 Linux 内核

首先通过 git 下载 Linux 内核源代码:

git clone --depth 1 https://mirrors.tuna.tsinghua.edu.cn/git/linux.git

(这里使用了清华大学的镜像站,kernel.org 也是可以的。)

然后采用如下步骤编译它:

$ cd linux
$ export ARCH=um # 非常重要 设置架构为用户态
$ make defconfig
$ make -j8

 LD      .tmp_vmlinux.kallsyms1
 KSYMS   .tmp_vmlinux.kallsyms1.S
 AS      .tmp_vmlinux.kallsyms1.S
 LD      .tmp_vmlinux.kallsyms2
 KSYMS   .tmp_vmlinux.kallsyms2.S
 AS      .tmp_vmlinux.kallsyms2.S
 LD      vmlinux
 SYSMAP  System.map
 LINK linux
 MODPOST modules-only.symvers
 GEN     Module.symvers

经过漫长的编译之后,你获得了一个 vmlinux 文件。它和正常的 Linux 内核的区别是,这个 vmlinux 可以在用户态运行。

准备根文件系统

先别着急启动,先来准备内核所使用的根文件系统。

以下内容以 Debian Linux 为例。

首先安装 debootstrap 软件包:

sudo apt install debootstrap

以下命令皆需要 root 权限,先切换到 root 用户:

$ sudo su

然后构建根文件系统,存放在 rootfs 文件中:

# dd if=/dev/zero of=rootfs seek=2G # 创建一个 2GB 大小的空 rootfs 文件
 2000000000字节(2 GB,2 GB)已复制,0.137825 s,570 MB/s`

# mkfs.ext4 rootfs # 将其格式化为 ext4 格式
 mke2fs 1.46.5 (30-Dec-2021)
 Discarding device blocks: done                            
 Creating filesystem with 76748 1k blocks and 19200 inodes
 Filesystem UUID: 9dc7f1f6-8b16-4c64-9e22-94ede327c532
 Superblock backups stored on blocks: 
      8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done 

然后挂载 rootfs/mnt 下:

# mount rootfs /mnt

在其中创建 Debian Linux 的根文件系统(/):

# cd /mnt
# debootstrap sid ./ https://mirrors.tuna.tsinghua.edu.cn/debian
 I: Configuring python-central... 
 I: Configuring ubuntu-minimal... 
 I: Configuring libc-bin... 
 I: Configuring initramfs-tools... 
 I: Base system installed successfully.

通过 chroot 将其改变为根目录:

# chroot ./

设置 root 密码:

# passwd 
 New password: 
 Retype new password: 

然后退出 chroot 环境,并卸载:

# exit # 退出 chroot 环境
# cd ..
# umount /mnt
# exit # 退出 sudo 环境

设置 rootfs 的所有权为普通用户:

$ sudo chown `whoami` rootfs

这样,这个用户态 Linux 的根文件系统就准备好了。

测试用户态 Linux

然后就可以用这个内核启动了,只需要一行命令:

$ screen ./vmlinux mem=1G root=/dev/root rootfstype=hostfs hostfs=./rootfs  con=null con0=null,fd:2 con1=fd:0,fd:1

启动后,使用你前面设置的 root 用户/密码登录,便可以进入到用户态 Linux 容器中了。

有别于 Docker,这个容器的内核和宿主的内核是隔离的,可以使用这个容器作为一个调试内核的工具,如:

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

即可手动触发一个“ 内核恐慌 Kernel Panic ”错误。

延伸阅读:

作者简介:

calvinlin:一个普通的深圳初中生。


via: https://www.bilibili.com/read/cv15626523

作者:calvinlin 编辑:wxy

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

本教程为你提供了一些简单的步骤来自定义 GNOME 桌面,用最少的努力打造干净的外观。下面如何做的。

如果你对最喜欢的 GNOME 桌面的样子已经看厌烦了,那么你就来对了。让我们安装一些主题图标并进行一些调整以提升你的桌面格调。我们将转换如下桌面(GNOME 40.5 和 Ubuntu 21.10)。

Ubuntu Desktop with GNOME – Before Customization

这个定制教程将使用漂亮的 Colloid GTK 主题、Mkos-Big-Sur 图标、一个带有额外扩展的酷炫光标主题,以及 Conky。

自定义 GNOME 桌面,用简洁的外观提升它的形象

安装

首先,通过在终端运行以下命令来设置 GNOME Shell 扩展。

sudo apt install chrome-gnome-shell

然后 打开这个页面,将 GNOME 扩展的插件添加到你的浏览器(Chrome/Firefox)。

Add Browser Add-on for GNOME Shell Extension

安装“扩展”应用(Flatpak),你可能需要它来改变 GNOME 扩展的设置。

之后,从终端使用以下命令安装 GNOME 优化工具 GNOME Tweaks 。我们将使用这个工具来改变主题和其他设置。

sudo apt install gnome-tweaks

下载 Colloid GTK 主题。下载后解压文件。然后将解压后的文件夹复制到你主目录下的 ~/.themes。如果文件夹不存在,请创建它。完成这些后,打开终端,运行 install.sh 文件。

下载 Mkos-Big-Sur 图标主题。下载完成后,解压文件并将父文件夹复制到你的主目录中的 ~/.icons

下载 Vimix 光标主题,并按照上述步骤操作。将提取的文件夹复制到 ~/.icons 目录中。然后打开一个终端,运行 install.sh 文件。

现在,安装 Conky 和一些扩展,这些扩展最终会给你的 GNOME 桌面一个干净的外观。要安装 Conky 和 Conky 管理器,打开终端提示符并运行以下命令。

sudo apt install conky
sudo add-apt-repository ppa:tomtomtom/conky-manager
sudo apt update && sudo apt install conky-manager2

现在,打开下面每个扩展的链接,依次安装它们。要安装时,打开页面,点击 ON/OFF 切换开关(见下图)。它将要求你提供管理员密码和安装许可。

GNOME Extension – Page

配置

在你完成上述步骤后,做一些基本配置。你可能会看到在你安装上面的 GNOME 扩展时,有些变化已经生效了。例如,在安装上面的 Move Clock 扩展时,时钟应该已经被移到了右边。

优化工具

打开 优化 GNOME Tweaks 工具(从应用菜单中搜索“Tweaks”),进入“ 外观 Apperance ”。

将应用主题改为 “Colloid Dark”,光标主题为 “Vimix Cursors”,图标主题为 “Mkos-big-sur”,Shell 主题为 “Colloid Dark”。如果你愿意,你可以选择浅色主题和不同的选项。

Apply Themes

Arc 菜单

打开“ 扩展 Extension ”应用,进入 Arc 菜单设置 Arc Menu Settings

将菜单布局改为 “ 替代菜单布局 Alternative Menu Layout > Raven”。

将应用的菜单按钮改成你喜欢的一些图标。在本指南中,我从 这里 下载了一个 GNOME 图标。并通过 Arc 菜单的 “ 设置 Settings > 按钮外观 Button Appearance > 浏览图标 Browse Icon ”应用它。它应该看起来像这样。

Arc Menu – Raven

从“ 扩展 Extension ”程序中打开 “Dash to Dock” 设置。在“ 外观 Appearance ”选项卡中,改变以下项目:

  • 启用收缩到 Dash 的功能
  • 自定义窗口计数指示器为 Dash
  • 启用自定义 Dash 颜色
  • 自定义不透明度为固定
  • 不透明度为 12%

在位置和大小选项卡中,将停靠区位置改为底部,图标大小限制为 39px。

如果你喜欢,你可以启动 Conky,并下载一张与 Colloid 主题相配的漂亮墙纸。在这个演示中,我选择了一张漂亮的灰色墙纸,它与深色主题搭配看起来非常漂亮。

结果

在所有的配置之后,如果一切顺利,你的桌面应该是这样的。

GNOME Customization in Ubuntu with a simple look-1

GNOME Customization in Ubuntu with a simple look-2

GNOME Customization in Ubuntu with a simple look-3

你可以通过多种设置组合来玩转这个主题的不同变体。并创造一个更适合你的外观。

我希望这个指南能帮助你把你的 GNOME 桌面改造成简洁的外观。如果你喜欢这个设置,请在下面的评论中告诉我。


via: https://www.debugpoint.com/2022/03/customize-gnome-clean-look-2022-1/

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

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