分类 技术 下的文章

Linux 内核很复杂。我说的甚至不是代码的问题。

Linux 内核的代码本身很复杂,但你不需要为这个问题而烦恼。我说的是 Linux 内核的发布时间表。

一年内多久发布一个新的内核版本?内核被支持多长时间?还有一些 LTS(长期支持)内核,LTS Linux 内核的支持时间有多长?

问题是,虽然这些问题看起来很简单,但答案却不简单。

这些问题没有一个直接明了的答案,需要做一些解释,这就是我在这篇文章中要做的。

Linux 内核发布时间表:有吗?

短的回答是,每两到三个月就有一个新的内核版本发布。长的回答是,这不是一个硬性规定。

这个意思是,你经常会看到每两到三个月就有一个新的内核版本发布。这是内核维护者团队的目标,但并没有规定新版本必须在前一个版本的 8 周后准时发布的期限。

新的内核版本(通常)是由 Linus Torvalds 在它准备好的时候发布的。通常是每 2 到 3 个月发布一次。该版本被宣布为“稳定”,一般以 X.Y 的格式编号。

但这并不是 X.Y 开发的结束。稳定版会有更多的小版本以进行错误的修复。这些小版本在稳定版的内核上又增加了一个点,就像是 X.Y.Z。

虽然 X.Y(通常)是由 Linux 创造者 Linus Torvalds 发布的,但是维护稳定的 X.Y 内核、合并错误修复和发布 X.Y.Z 版本的责任是由另外的内核开发者负责的。

一个内核版本支持多长时间?

和发布一样,一个内核版本支持多长时间也没有固定的日期和时间表。

一个普通的稳定内核版本通常会被支持两个半月到三个月,这取决于下一个稳定内核版本的发布时间。

例如,稳定版内核 5.14 会在稳定版内核 5.15 发布后的几周内达到 生命末期。结束支持是由该稳定内核版本的维护者在 Linux 内核邮件列表中宣布的。用户和贡献者会被要求切换到新发布的稳定版本。

但这只适用于正常的稳定内核版本,还有 LTS(长期支持)内核版本,它们的支持期要比 3 个月长得多。

LTS 内核:它支持多长时间?

LTS 内核也没有固定的发布时间表。通常,每年都有一个 LTS 内核版本,一般是当年的最后一个版本,它至少会被支持两年。但同样,这里也没有固定的规则。

LTS 内核的维护者可以同意某个 LTS 内核的维护时间超过通常的两年。这个协议是根据必要性和参与的人员来达成的。

这种情况经常发生在 Android 项目中。由于两年的时间不足以让制造商结束对他们的硬件和软件功能的支持,你经常会发现一些 LTS 内核会被支持六年之久。

Linux LTS 内核计划支持日期

你可以 在 Linux 内核网站上 找到这个信息。

你的发行版可能没有跟随通常的 Linux 内核版本

如果你检查你的 Linux 内核版本,你可能会发现 你的发行版使用了一个旧的内核。也有可能该发行版提供的内核已经在内核网站上被标记为到达了生命末期。

不要惊慌。你的发行版会负责修补内核的错误和漏洞。除非你真的在使用一个不知名的 Linux 发行版,否则你可以相信你的发行版会保持它的安全和健全。

如果你有足够的理由,比如为了支持更新的硬件,你可以自由地在你使用的任何发行版或 Ubuntu 中安装最新的 Linux 内核

如果你想了解更多细节,我已经 在这里解释了为什么你的发行版使用过时的 Linux 内核

没有直接明了的答案

正如你所看到的,对于 Linux 内核发布时间表的问题,没有直接明了的答案。一切都是暂定的。

在我看来,好的方面是,如果你使用一个常规的 Linux 发行版,你不需要为 Linux 内核版本的发布或终止而烦恼。那是由你的发行版处理的事情。

我希望你对 Linux 内核的发布周期有了更多的了解,或者是我把你搞糊涂了。无论是哪种情况,请在评论区告诉我你的观点。


via: https://itsfoss.com/linux-kernel-release-support/

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

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

情况是这样的。你用 Etcher 或者 Rufus 工具在 Windows 或者 Linux 中创建了一个可启动的、Live Linux USB。

你用它来安装 Linux,USB 的目的已经达到了。现在你想格式化这个 USB,用它来进行常规的数据传输或存储。

你把它插入你的 Windows 系统,令你吃惊的是,这个 USB 的磁盘容量只有 4MB。

你试图格式化它,但它可能不会让你这么做。即使你设法格式化它,USB 的大小现在也从通常的 8GB、16GB 或 32GB 缩减到只有 4MB。

你失去了你的 USB 吗?并非如此。你的 USB 并没有完全被破坏。你仍然可以用一个小技巧来格式化它,并舒适地使用它。

让我告诉你如何在 Windows 和 Linux 中把可启动的 USB 恢复到可用的状态。

格式化由 Rufus 或 Etcher 创建的 Live Linux USB (在 Windows 下)

你在 Windows 中看到只有 4MB 的磁盘空间。你知道为什么吗?因为在创建 Live Linux USB 时,该工具在 FAT32 文件系统中创建了一个 4MB 的 EFI 分区。其他的分区是在 Linux 的 Ext4 文件系统中,而这是不被 Windows 识别的。

这就是为什么你的 Windows 系统只看到 4MB 的 EFI 分区,并显示 USB 大小为 4MB。

Windows only see the EFI partition on the USB

总而言之,你需要做的是删除 USB 盘上的所有分区,用删除现有分区后得到的空闲空间创建一个新的 NTFS 或 FAT32 分区。这就行了。

让我展示一下详细的步骤。

步骤 1:

进入 Windows 菜单,寻找“磁盘管理”工具。

Start disk management tool

启动这个工具,它将显示你电脑上存在的所有磁盘。当然,这包括插入的 USB。

选择正确的磁盘是非常重要的。从 U 盘的大小或“可移动”的标签中辨别出它是哪一个。

步骤 2:

我们的想法是删除 U 盘上的任何现有分区。未分配的空间不能被删除,但这也没关系。

在该分区上点击右键,然后点击“ 删除卷 Delete Volume ”。

Delete partitions on the USB disk

当要求你确认时,按“ Yes ”。

Confirm deletion of partition

你的目标是只有一个未分配的空间块。当你看到它时,右击它并点击“ 新建简单卷…… New Simple Volume... ”来创建一个分区。

Create New Simple Volume

接下来的步骤很简单。点击“ 下一步 Next > ”,选择整个可用空间,给它分配一个字母,选择文件系统(FAT32 或 NTFS),并将其格式化。

Click Next

Use entire available space

Give it a drive letter

Use FAT 32 or NTFS, Name the USB if you want

Revise all the changes

完成后,你会看到 USB 已经恢复到正常状态,你可以开始向它复制粘贴数据。

USB is back to normal state

你现在可以像以前一样使用你的 USB 了。

这些步骤是针对 Windows 的。如果你使用 Linux 呢?

在 Linux 上格式化 Live USB

我注意到,由 Etcher 和这类工具创建的 Live USB 经常拒绝被文件管理器中的右键格式化选项正确格式化。

除此之外,你可以像在 Windows 中那样做:删除现有的分区,用整个可用空间创建一个新的分区。

这里使用 GNOME “磁盘” 工具。它已经安装在 Ubuntu 和许多其他 Linux 发行版上。

Start disk app

同样,确保你在这里选择了外部 USB 盘。

你会看到 U 盘上的各种分区。试着从上面的菜单中格式化该磁盘。

Format disk

如果这不起作用,逐个删除分区,然后把整个 USB 作为自由空间。

当你创建了整个自由空间后,点击 “+” 号,在上面创建一个 NTFS 或 FAT32 文件系统的分区。

用 NTFS(或 FAT32)创建分区,给它起个合适的名字,然后你就可以像以前一样使用这个 USB 了。

总结

像 Rufus 和 Etcher 这样的工具并没有真正破坏你的 USB。这就是它们的功能,通过在磁盘上创建一个不同的文件系统。但这样一来,Windows 操作系统就不能正确理解它。

好在只需付出一点努力就可以修复。我希望你也能够修复它。如果没有,请与我分享你的问题,我将尽力帮助你。


via: https://itsfoss.com/format-live-linux-usb/

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

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

使用 Python 或 Bash 将动态数据插入 Jekyll 静态网站中,并且避免创建一个 API 后端。

 title=

静态网站生成器 Jekyll 使用 _config.yml 进行配置。这些配置都是 Jekyll 特有的。但你也可以在这些文件中 用我们自己的内容定义变量,并在整个网站中使用它们。在本文中,我将重点介绍动态创建 Jekyll 配置文件的一些优势。

在我的本地笔记本电脑上,我使用以下命令来服务我的 Jekyll 网站进行测试:

bundle exec jekyll serve --incremental --config _config.yml

结合多个配置文件

在本地测试中,有时需要覆盖配置选项。我的网站的 当前 \_config.yml 有以下设置:

# Jekyll Configuration

# Site Settings
url: "https://notes.ayushsharma.in"
website_url: "https://notes.ayushsharma.in/"
title: ayush sharma's notes ☕ + ? + ?️
email: [email protected]
images-path: /static/images/
videos-path: /static/videos/
js-path: /static/js/
baseurl: "" # the subpath of your site, e.g. /blog

由于本地的 jekyll serve URL 是 http://localhost:4000,上面定义的 URL 就不能用了。我可以创建一个 _config.yml 的副本 _config-local.yml 并替换所有的值。但还有一个更简单的选择。

Jekyll 允许指定多个配置文件,后面的声明覆盖前面的声明。这意味着我可以用以下代码定义一个新的 _config-local.yml

url:""

然后我可以把上述文件和我的主 _config.yml 结合起来,像这样:

bundle exec jekyll serve --incremental --config _config.yml,_config-local.yml

通过合并这两个文件,这个 jekyll serveurl 的最终值将是空白。这就把我网站中定义的所有 URL 变成了相对的 URL,并使它们在我的本地笔记本电脑上工作。

C结合动态配置文件

一个简单的例子,假设你想在你的网站上显示当前日期。它的 bash 命令是:

> date '+%A, %d %B %Y'
Saturday, 16 October 2021

我知道我也可以 使用 Jekyll 的 \_config.yml 的自定义内容。我将上述日期输出到一个新的 Jekyll 配置文件中。

my_date=`date '+%A, %d %B %Y'`; echo 'my_date: "'$my_date'"' > _config-data.yml

现在 _config-data.yml 包含:

my_date: "Saturday, 16 October 2021"

我可以把我的新配置文件和其他文件结合起来,在我的网站上使用 my_date 变量。

bundle exec jekyll serve --incremental --config _config.yml,_config-local.yml,_config-data.yml

在运行上述命令时,{{ site.my_date }} 输出其配置的值。

结论

上面的例子很简单,但可能性是无穷的。Bash、Python 和其他编程语言可以动态地生成 Jekyll 配置文件。然后我可以在 buildserve 过程中结合这些文件。

对于 findmymastodon.com我使用 Python 来获取 Mastodon 的用户统计数据。然后我把这些写进一个新的 \_config-data.yml 文件(目前是手动)。最后,主页和其他页面从配置文件中显示这些。这样,我就可以利用一个动态的后台,并且仍然保持我所喜欢的所有静态网站的优点。

我希望这能为你自己的静态网站激发一些想法。Jamstack 对于静态网站是很好的,但你可以避免为动态内容创建整个 API 后台。为什么不使用一个构建作业来创建带有更新内容的配置文件呢?这可能不适合每一种情况,但少一个 API 意味着更少的基础设施移动部件。

我希望这能在你的下一个静态网站项目中给你一些帮助。继续阅读,并祝你编码愉快。

这篇文章最初发布在 作者的网站 上,并经授权转载。


via: https://opensource.com/article/21/11/jekyll-config-files

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

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

如果你 在 Ubuntu 上运行 Java 程序 ,使用 Eclipse、Maven 或 Netbeans 等等,你将需要将 JAVA_HOME 环境变量设置为正确的路径。否则,你的系统将会向你控诉 “java\_home 环境变量没有设置”。

在这篇初学者教程中,我将向你展示在 Ubuntu 上正确地设置 JAVA_HOME 变量的步骤。这些步骤应该也适用于大多数的其它的 Linux 发行版。

设置过程包含这些步骤:

  • 确保已安装 Java 开发工具包(JDK)。
  • 查找 JDK 可执行文件的正确的位置。
  • 设置 JAVA_HOME 环境变量,并永久更改它。

步骤 1: 核查 JDK 是否已经安装

核查 Java 开发工具包(JDK)是否已经安装在你的 Linux 系统上的最简单的方法是运行这个命令:

javac --version

上面的命令将核查 Java 编译器的版本。如果已经安装了 Java 编译器,它将显示 Java 版本:

Java Compiler is installed

如果上面的命令显示像这样未找到 javac 命令的错误信息,你得先安装 JDK :

Java Compiler is not installed

如果在你的系统上并没有安装 Java 编译器,使用这条命令来安装 Java 开发工具包 (JDK):

sudo apt install default-jdk

这将在你当前的 Ubuntu 版本中安装默认的 Java 版本。如果你需要一些其它版本的 Java 版本,那么你必须 在 Ubuntu 中安装 Java 时 具体指出它的版本。

在你确保 Java 编译器存在于你的系统之中后,接下来就到了查找其位置的时候了。

步骤 2: 获取 JDK 可执行文件(Java 编译器)的位置

可执行文件通常位于 /usr/lib/jvm 目录之中。但我不会让你来玩一个猜谜游戏,让我们来找出 Java 可执行文件的路径。

使用 which 命令 来获取 Java 编译器可执行文件的位置:

which javac

在这里的问题是,它给出的位置实际上是一个 符号链接 。你将需要按照下图执行几次:

最简单的方法是直接使用下面这条命令跟随符号链接来以获取实际的可执行文件:

readlink -f `which java`

readlink 命令会跟随一个符号链接。我在 which java 的外侧使用 readlink 将会使用 which java 的输出来替换要检查的符号链接,这被称之为命令替换。因此,在这个实例中,上面的命令大体上相当于 readlink -f /usr/bin/java

在我的示例中,可执行文件的位置是 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 。对你来说可能会不一样。在你的系统中,复制上述命令所获取的正确的路径。你知道,你可以 在 Ubuntu 的终端中复制和粘贴

步骤 3: 设置 JAVA\_HOME 变量

现在,你已经获取了位置,使用它来设置 JAVA_HOME 环境变量:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin/java

核查 JAVA_HOME 目录的值:

echo $JAVA_HOME

尝试在同一个终端中运行你的 Java 程序或工程,并查看它是否工作。

这尚未结束。你刚刚声明的 JAVA_HOME 环境变量是临时的。如果你关闭这个终端或开始一个新的会话,它将会再次变成空的。

为了“永久地”设置 JAVA_HOME 变量,你应该将其添加到你的家目录中的 .bashrc 文件中。

你可以 在 Linux 终端中使用 Nano 编辑器来编辑文件。 如果你不想使用它,并想采取一种简单的复制和粘贴的方法,使用下面的命令:

首先备份你的 .bashrc 文件(以防万一你把它弄坏了,你还可以将其再恢复回来):

cp ~/.bashrc ~/.bashrc.bak

接下来,使用 echo 命令来追加 在这一节开头使用的 export 命令。你应该适当地更改下面的命令,以便其正确地使用你的系统所显示的路径

echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/bin/java" >> ~/.bashrc

验证它已经被正确地添加到文件的结尾处:

tail -3 ~/.bashrc

上面的 tail 命令 将显示所具体指定文件的最后 3 行。

这里是上面的三个命令的全部的输出:

现在,即使你退出会话或重新启动系统,JAVA_HOME 环境变量都仍将设置为你所具体指定的值。这就是你所想要的,对吧?

注意,如果你将来更改默认的 Java 版本,你将需要更改 JAVA_HOME 环境变量的值并将其指向正确的可执行文件的路径。

我希望这篇教程不仅会帮助你设置 JAVA_HOME 环境变量,也会教会你如何完成这项工作。

如果你仍然面临难题或者有一些疑问或建议,请在评论区告诉我。


via: https://itsfoss.com/set-java-home-ubuntu/

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

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

这是一篇快速提示,旨在给 Ubuntu 的新用户解释构建基础包是什么、它的用处和安装步骤。

在 Ubuntu 中安装构建基础包(build-essential),只需要在终端中简单输入这个命令:

sudo apt update && sudo apt install build-essential

但围绕它有几个问题,你可能想知道答案:

  • 什么是构建基础包?
  • 它包含什么内容?
  • 为什么要安装它(如果安装的话)?
  • 如何安装它?
  • 如何删除它?

什么是 Ubuntu 中的构建基础包?

构建基础包(build-essential)实际上是属于 Debian 的。在它里面其实并不是一个软件。它包含了创建一个 Debian 包(.deb)所需的软件包列表。这些软件包包括 libcgccg++makedpkg-dev 等。构建基础包包含这些所需的软件包作为依赖,所以当你安装它时,你只需一个命令就能安装所有这些软件包。

请不要认为构建基础包是一个可以在一个命令中神奇地安装从 Ruby 到 Go 的所有开发工具的超级软件包。它包含一些开发工具,但不是全部。

你为什么要安装构建基础包?

它用来从应用的源代码创建 DEB 包。一个普通用户不会每天都去创建 DEB 包,对吗?

然而,有些用户可能会使用他们的 Ubuntu Linux 系统进行软件开发。如果你想 在 Ubuntu 中运行 c 程序,你需要 gcc 编译器。如果你想 在 Ubuntu 中运行 C++ 程序,你需要 g++ 编译器。如果你要使用一个不寻常的、只能从源代码中获得的软件,你的系统会抛出 “make 命令未找到的错误”,因为你需要先安装 make 工具。

当然,所有这些都可以单独安装。然而,利用构建基础包的优势,一次性安装所有这些开发工具要容易得多。这就是你得到的好处。

这就像 ubuntu-restricted-extras 包允许你一次安装几个媒体编解码器

现在你知道了这个包的好处,让我们看看如何安装它。

在 Ubuntu Linux 中安装构建基础包

在 Ubuntu 中按 Ctrl+Alt+T 快捷键打开终端,输入以下命令:

sudo apt update

使用 sudo 命令,你会被要求输入你的账户密码。当你输入时,屏幕上没有任何显示。这没问题。这在大多数 Linux 系统中都是这样的。盲打输入你的密码,然后按回车键。

apt update 命令刷新了本地软件包的缓存。这对于一个新安装的 Ubuntu 来说是必不可少的。

之后,运行下面的命令来安装构建基础包:

sudo apt install build-essential

它应该显示所有要安装的软件包。当要求确认时按 Y

等待安装完成。就好了。

从 Ubuntu 中删除构建基础包

保留这些开发工具不会损害你的系统。但如果你的磁盘空间不足,你可以考虑删除它。

在 Ubuntu 中,由于有 apt remove 命令,删除软件很容易:

sudo apt remove build-essential

运行 autoremove 命令来删除剩余的依赖包也是一个好主意:

sudo apt autoremove

你现在知道了所有关于构建基础包的基础(双关语)。请享受它吧~


via: https://itsfoss.com/build-essential-ubuntu/

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

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

让你的网站根据用户选择的主题进行调整的能力是一个很棒的辅助功能。

 title=

你可能已经熟悉 媒体查询 media query 了。它们被广泛地用于使网站具有响应性。widthheight 属性包含视区的尺寸。然后,你可以使用 CSS 在不同的尺寸下呈现不同的布局。

prefers-color-scheme 媒体查询 的工作方式与此相同。用户可以将他们的操作系统配置为使用浅色或深色主题。prefers-color-scheme 包含这个值。该值是 lightdark ,尽管 W3C 规范指出它可能支持未来的值,如 sepia。我为这两种模式指定不同的 CSS 变量值,让用户的操作系统来决定。

prefers-color-scheme 媒体查询

prefers-color-scheme 媒体查询的两种变化是:

/* Light mode */
@media (prefers-color-scheme: light) {
   :root {
       --body-bg: #FFFFFF;
       --body-color: #000000;
   }
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
   :root {
       --body-bg: #000000;
       --body-color: #FFFFFF;
   }
}

在上面的 CSS 中,--body-bg--body-colorCSS 变量。正如你所看到的,它们对两种模式都包含不同的值。在浅色主题中,我设置了一个白色背景和黑色文本。在深色主题中,我设置了黑色背景和白色文本。

因为规范说 W3C 可能会引入未来的值,所以把这个 CSS 转换为默认值是有意义的。

/* Light mode */
:root {
   --body-bg: #FFFFFF;
   --body-color: #000000;
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
   :root {
       --body-bg: #000000;
       --body-color: #FFFFFF;
   }
}

在上面的代码中,我默认定义了一个浅色主题,如果媒体查询是 dark,则将其转换为深色主题。这样一来,以后任何添加到媒体查询的值都会默认设置为浅色主题。

使用 CSS 变量

现在我为不同的主题设置了不同的值,我需要实际使用它们来设计页面。

body {
   background: var(--body-bg);
   color: var(--body-color);
}

var() 语法 是 CSS 使用变量的方式。在上面的代码中,我是说把 background 设置为 --body-bg 的值,把 color 设置为 --body-color 的值。注意,这些变量的值来自媒体查询。这意味着背景和前景的颜色是根据操作系统的设置而改变的!

这就是媒体查询的真正能力。提供一个从操作系统到网页的一致的用户体验。

如果你进入 findmymastodon.com,并切换你的操作系统的主题,你会看到从一个主题到另一个主题的过渡。

CSS 工作组 网站也使用同样的媒体查询。改变你的操作系统主题,网站就会切换主题来进行调整。

结论

请注意,使用 prefers-color-scheme 与使用普通的编程语言没有什么不同。我定义了一些变量,这些变量的值根据一些逻辑而改变。而这些变量然后被用于进一步的操作。

让你的网站根据用户选择的主题进行调整的能力是一个很棒的辅助功能。而且,为了用户的利益,它进一步模糊了桌面和网络之间的界限。最新的浏览器版本 支持 prefers-color-scheme,所以你今天就可以开始实验了。

编码愉快。

这篇文章最初发表在 作者的网站 上,经许可后重新发表。


via: https://opensource.com/article/21/10/dark-themes-websites

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

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