“Linux 中国” 开源社区,停止运营

这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个决定确实艰难。

在写这篇告别信之前,我久久停笔不前。然而,要说的话,其实在我心里已经反复思考了好几遍。

从即日起,“Linux 中国” 这个社区,包括它的主网( https://linux.cn/ )、公众号、视频号,以及下属的《硬核观察》栏目,将无限期停止更新和运营。

停止运营的原因其实很平常,大抵包括以下几个方面:

“Linux 中国” 已经完成了其历史使命

最初,我们的愿望是想把 “Linux 中国” 建设成一个传播开源技术的公益型社区。但是经过十几年的发展,目前开源文化和 Linux 相关的开源技术已经得到了广泛传播(在这期间,我们或许也做了一些小小的贡献)。因此,继续运营所能起到的作用并没有那么大了。

出于偶然原因,“Linux 中国” 其实并未按照我们的最初设想发展,这么多年下来,真正坚持下来的项目也就是一个翻译团队 LCTT,翻译了数千篇文章,引导数百人参与了开源贡献。然而,近年来,随着计算机翻译技术的进步,尤其是 ChatGPT 的出现,翻译工作的必要性大为降低。自去年以来,我一直使用 ChatGPT 来翻译一些文章,尽管还需要一至两次校对,但基本没什么大问题。所以,LCTT 的存在也显得不那么重要了。

事实上,LCTT 已经陷入了一种半死亡状态,数百名贡献者基本上都处于休眠了状态,甚至由于技术原因,连自动化选题工作都难以维持。唯一能持续翻译的,除了我,就是我们的首席译者 geekpi 了。从这个角度来看,这已经不再是一个社区化的翻译组织了。

最初的方向选择和理想主义无法避免的结果

2003 年,在创立 “Linux 中国” 之前,我还创立过另外一个叫做 “炎黄角马(CNGNU)” 的开源技术社区。但后来因为我创业失败,这个社区就关闭了。随后,我的弟弟王兴江利用我手中闲置的域名 linux.cn 建立了一个新的网站,我们给它起了一个狂妄的名字 “Linux 中国” —— 实际上,需要澄清的是,我们和 Linux 的官方机构没有任何关联,也不代表 Linux 官方。

建立这个网站(社区)的初衷是为了传播知识和文化,并没有考虑过未来的盈利模式,这也导致我们后来排斥将社区变成一个商业网站,去做一些培训、会议之类的商业活动。

但这带来了巨大的资金压力,尤其是在托管服务器价格高昂的那段时期。幸运的是,我们得到了七牛云在 CDN 方面的赞助、阿里云在 PR 方面的投放,让我们得以发展。当然,还有一些其它的广告主和朋友的赞助,稍后容我一一致谢。

2015 年,我离开了中国电信,成为了一名自由人,没有人再给我发工资了。这些年,“Linux 中国” 有一些收入,主要是为广告商撰写和发布的一些文章,但是收入不太稳定。而在众所周知的那三年里,收入状况甚至更惨淡。说实话,过去几年,我大致处于一种个人经济上的慢性失血状态。

所以,现在,当整体经济不佳时,压力更大。

个人疲惫和人生的交叉路口

近些年,“Linux 中国” 越来越像是一个 “个人” 网站,几乎所有的流程都需要我亲自来完成。“Linux 中国” 的公众号自从开设的第一天起,就没有任何一天停止过更新 —— 无论是年三十还是我的身体抱恙,无论是在出差路上还是带家人出游。这两年,我又开始了《硬核观察》栏目,这需要我每天花费数小时采编、录制和发布视频,如今也有了 1263 期,从未停歇。

累吗?累,但更累的是,没有尽头的累。

我今年正好五十岁了,对我来说,这个年龄是我需要重新定位人生的一个标志点。当我三十岁时,我颇有一种 “顿觉昨日非” 的感觉,从此改变了人生轨迹;当我四十岁时,经历了父亲去世、稍后几年弟弟及其他亲人陆续去世的打击;今年,我再次站在人生的交叉口,我想我应该有所改变了。

幸运的是,我一直非常担心的身体健康,目前还算还没有出现大问题。前段时间去做了好几年没敢做的体检,基本上没太大的问题。

没有别的选择了吗?

坦白说,我认真反复想过。

但是,我没有找到合适托付 “Linux 中国” 的人或机构。一个不盈利、持续亏损的社区,很难找到能保持其独立性和原则的托付人。

我也不愿意将 “Linux 中国” 所有的资产都卖给商业机构。有人曾经愿意出高价买我们的域名,但是,他们出的价远远买不起我为此出售良心和名誉的代价。

总的来说,就是因为这些大大小小的原因,我做出了艰难的决定,结束这些年的坚持。对不起了,大家。

对不起

做这个决定前,我最无法放下的不是我投入的那么多精力,而是那些始终坚定支持 “Linux 中国” 的朋友们。包括那 174 位在微信公众号上“几乎看过你所有的内容”的读者,也包括经常在 B 站上给《硬核观察》留言数百字、期期不落都观看和点评的观众,以及 “Linux 中国” 主网上那些熟悉的评论者的 ID 和定位,他们让我倍感感动和内疚。对不起,是我让你们失望了,辜负了大家的期待和支持。

感谢

除了道歉,我还需要感谢很多人。

首先,我要感谢参与过社区的许多人,包括 LCTT 的五百多位贡献者和社区的朋友们。特别要感谢 bestony、geekpi、oska874、lujun9976、vizv、lkxed 等主要贡献者。“Linux 中国” 开源社区,其实是你们的,是大家的,而不是我的。能与大家共同拥有这样一段美好回忆,是我的荣幸。在此,我不能一一尽数所有贡献者,你可以在 https://linux.cn/lctt-list 看到 LCTT 全部贡献者的名单和贡献量。

其次,要感谢在 “Linux 中国” 成长过程中帮助过我们的许多公司。这包括七牛云、阿里云、UCloud、腾讯云、EasyStack、华为、字节跳动、青云、马哥教育、刘遄老师等等,以及我一时无法全部记起的朋友们。他们都是我们这些年得以一路走来的助力。

最后,我要感谢那些我可能完全不知道名字的支持过 “Linux 中国” 的人,就像我说的,“你的每次点击和分享都是对我们的支持” 的读者,以及那些在社区活动中总能认出来我的人。

接下来

这篇告别信发出后,除非有特殊情况,我将停止在 “Linux 中国” 的主网、公众号、视频号、B 站等所有渠道的内容发布。

我会在春节期间将 “Linux 中国” 所有发布的文章都打包成一份电子书,供大家收藏留用,所以大家不必自己用网络爬虫来抓取了。当然,我们的主网和公众号都会保持相当长的时间的访问,只是我可能不再更新了。

至于我个人呢?

我今年计划躺平几个月,然后准备一个人出门走走,或许是自驾,或许是摩旅,去寻找一下人生的意义。我可能会在我的视频号 “硬核老王” 中发布我的行程,也可能会停留在某个地方,可能会经过你的城市,也许我们可以把(水)言欢。

江湖再见,诸位。

(题图:DA/c42007de-fab5-48c9-9976-3c4ca97bcf6e)


“Linux 中国” 创始人 硬核老王

2024/2/1

硬核观察 #1263 德国铁路公司招聘 Windows for Workgroups 3.11 管理员

#1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员

该职位要求了解 Windows for Workgroups 3.11;有 MS-DOS 经验者优先。该职位将负责管理运行在 166MHz 处理器和 8MB 内存上的对铁路运营至关重要的旧系统。据称,招聘该职位的公司负责 “几乎整个德国的铁路显示板”,这些用于列车的司机室的显示系统看起来运行在旧的 MS-DOS 和 Windows 3.11 上。Windows 3.11 是微软早在 1992 年推出的,并于 2001 年底终止了对它的支持。目前该招聘启事已被删除。

(插图:DA/fd30a683-1e72-424f-b078-085ffab6d0bf)

消息来源:Tom's Hardware

老王点评:我觉得这个职位我能胜任,毕竟我是用过它们的。?

#2 带弹幕的盗版《武林外传》视频被上传到 NPM

一些滥用攻击者将 NPM 当成了一个视频和电子书托管平台,他们在上面上传了电影、视频和电子书。安全研究团队在 NPM 上发现了 748 个软件包,每个大小约为 54.5 MB,内容显示它们是国内流行的 《武林外传》电视剧,而且还包括了字幕和弹幕。这些垃圾是由名叫 wlwz 的用户于去年 12 月 4 日上传,目前该账号已被删除。

(插图:DA/89ba5b56-a7c3-40b8-86b4-f5a1af257361)

消息来源:Sonatype

老王点评:简直太恶劣了。

#3 由于法律原因,连 CentOS SIG 都无法为 RHEL 制作软件包

按照红帽的说法,CentOS 社区将通过特别兴趣小组(SIG)为 CentOS Stream 做出贡献而改进 RHEL。但这些 SIG 发现,由于红帽限制访问 RHEL 源代码带来的法律问题,他们无法为 RHEL 制作软件包。为 CentOS Stream 和 RHEL 维护额外内核模块的 Kmods SIG 发布的状态更新中称,“由于红帽发布 RHEL 源代码的方式发生了变化,Kmods SIG 目前由于法律原因无法为 RHEL 制作软件包。”为 Facebook、X 这个级别的大型基础设施提供增强的 Hyperscale SIG 也有类似的问题,他们的新内核现在只能基于 Fedora 发布的上游内核,而不是 CentOS/RHEL 内核树。

(插图:DA/d0b746b5-b2a9-4782-9dfa-2f7e3fce3f9b)

消息来源:Phoronix

老王点评:毕竟你都不是 RHEL 的合法用户,没有资格为 RHEL 做贡献。

人工智能教程(七):Scikit-learn 和训练第一个模型

在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Keras 接触了第一个数据集。在本系列的第七篇文章中,我们将继续探索神经网络,并使用数据集来训练模型。我们还将介绍另一个强大的机器学习 Python 库 scikit-learn。不过在进入正题之前,我要介绍两个轰动性的人工智能应用:ChatGPT 和 DALL-E 2。(LCTT 译注:此文原文发表于 2023 年初,恰值以 ChatGPT 为代表的 AI 热潮开始掀起。)

OpenAI 是一个人工智能研究实验室,它在人工智能和机器学习领域做了很多研究。 埃隆·马斯克 Elon Musk 是该组织的联合创始人之一。2022 年 11 月,该实验室推出了一款名为 ChatGPT 的在线工具。它是一个可以像人类一样聊天的人工智能聊天机器人。它是使用监督学习和强化学习技术训练的 大型语言模型 large language model (LLM)。ChatGPT 使用了 OpenAI 的 GPT-3.5 语言模型,这是 GPT-3( 生成式预训练变换器 Generative Pre-trained Transformer )的改进版本,GPT-3 是一种使用深度学习来生成类似人类文本的语言模型。(LCTT 译注:OpenAI 已于 2023 年 3 月 14 日 发布了 GPT-4.0,它支持图文混合的输入输出,并大幅提升了推理能力和准确性。)我仍然记得第一次使用 ChatGPT 时的兴奋。它清楚地展现了人工智能的能力。ChatGPT 的回答质量很高,通常与人类给出的答案没有区别。你可以使用它来纠正语法错误、改写句子、总结段落、编写程序等。实际上,我就用 ChatGPT 改写了本文中的许多句子。此外,我还故意使用有语法错误的文本测试了 ChatGPT,它纠正后的句子非常准确。它重新措辞和总结段落的能力也很惊人。

程序员甚至有可能使用 ChatGPT 在短时间内解决编程难题。在 编程探险挑战赛 2022 Advent of Code 2022 中,就有人这样宣称(LCTT 译注:比赛官方只是没有完全禁止使用人工智能作为辅助,但是并不很推崇这样的作法。消息来源)。事实上在 2022 年 12 月,也就是 ChatGPT 发布的一个月后,Stack Overflow 发布了一条新的规定,禁止提交 GPT 或 ChatGPT 生成答案。(LCTT 译注:消息来源:Temporary policy Generative AI (e.g., ChatGPT) is banned - Meta Stack Overflow

图 1:ChatGPT 生成的程序

图 1 显示了 ChatGPT 编写的将两个矩阵相加的 Python 程序。我要求用 BASIC、FORTRAN、Pascal、Haskell、Lua、Pawn、C、c++、Java 等语言编写程序,ChatGPT 总能给出答案,甚至对于像 Brainfuck 和 Ook! 这样生僻的编程语言也是如此。我很确定 ChatGPT 没有从互联网上复制程序代码。更确切地说,我认为 ChatGPT 是基于对上述编程语言的语法知识生成了这些答案的,这些知识是从训练它的大量数据中获得的。许多专家和观察人士认为,随着 ChatGPT 的发展,人工智能已经成为主流。ChatGPT 的真正力量将在未来几个月或几年里被看到。

OpenAI 的另一个令人惊叹的在线人工智能工具是 DALL-E 2,它以卡通机器人 WALL-E(LCTT 译注:电源《机器人总动员》中的主角)和著名画家/艺术家 萨尔瓦多·达利 Salvador Dalí 的名字命名。DALL-E 2 是一个可以根据英文描述来生成绘画的人工智能系统。该工具支持丰富的图像风格,如油画、卡通、漫画、现实主义、超现实主义、壁画等。它还可以模仿著名画家的风格,如达利、毕加索、梵高等。由 DALL-E 2 生成的图像质量非常高。我用下面的描述测试了这个工具:“一个快乐的人在海滩旁看日出的立体主义画作”。图 2 是 DALL-E 2 根据我的描述生成的图像之一。立体主义是毕加索推广的一种绘画风格。问问你的任何一个画家朋友,他/她都会说这确实是一幅立体主义风格的画。令人惊讶的是软件——它也许很复杂——能够模仿像毕加索、梵高、达利这样的大师。我强烈建议你体验一下它。这种体验将非常有趣,同时也体现了人工智能的威力。但请记住,像 ChatGPT 和 DALL-E 2 这样的工具也会带来很多问题,比如版权侵犯、学生的作业抄袭等。(LCTT 译注:本文的题图就是 DALL-E 3 生成的。)

图 2: DALL-E 2 生成的立体主义画作

介绍 scikit-learn

scikit-learn 是一个非常强大的机器学习 Python 库。它是一个采用 新 BSD 许可协议 new BSD licence (LCTT 译注:即三句版 BSD 许可证) 的自由开源软件。scikit-learn 提供了回归、分类、聚类和降维等当面的算法,如 支持向量机 Support Vector Machine (SVM)、随机森林、k-means 聚类等。

在下面关于 scikit-learn 的介绍中,我们将通过代码讨论支持向量机。支持向量机是机器学习中的一个重要的监督学习模型,可以用于分类和回归分析。支持向量机的发明人 Vladimir Vapnik 和 Alexey Chervonenkis。他们还一起提出了 VC 维 Vapnik–Chervonenkis dimension 概念,这是一个评估模型分类能力的理论框架。

图 3 是使用支持向量机对数据进行分类的程序。第 1 行从 scikit-learn 导入 svm 模块。跟前面几篇中介绍的 python 库一样,scikit-learn 也可以通过 Anaconda Navigator 轻松安装。第 2 行定义了一个名为 X 的列表,其中包含训练数据。X 中的所有元素都是大小为 3 的列表。第 3 行定义了一个列表 y,其中包含列表 X 中数据的类别标签。在本例中,数据属于两个类别,标签只有 0 和 1 两种。但是使用该技术可以对多个类别的数据进行分类。第 4 行使用 svm 模块的 SVC() 方法生成一个支持向量分类器。第 5 行使用 svm 模块的 fit() 方法,根据给定的训练数据(本例中为数组 Xy)拟合 svm 分类器模型。最后,第 6 行和第 7 行基于该分类器进行预测。预测的结果也显示在图 3 中。可以看到,分类器能够正确区分我们提供的测试数据。

图 3: 使用 SVM 进行分类

图 4 中的代码是一个使用 SVM 进行回归的例子。第 1 行次从 scikit-learn 导入 svm 模块。第 2 行定义了一个名为 X 的列表,其中包含训练数据。注意,X 中的所有元素都是大小为 2 的列表。第 3 行定义了一个列表 y,其中包含与列表 X 中的数据相关的值。第 4 行使用 svm 模块的 SVR() 方法生成支持向量回归模型。第 5 行使用 svm 模块的 fit() 方法,根据给定的训练数据(本例中为数 Xy)拟合 svm 回归模型。最后,第 6 行根据该 svm 回归模型进行预测。此预测的结果显示在图 4 中。除了 SVR() 之外,还有 LinearSVR()NuSVR() 两种支持向量回归模型。将第 4 行替换为 regr = svm.LinearSVR()regr = svm.NuSVR(),并执行代码来查看这些支持向量回归模型的效果。

图 4:使用 SVM 进行回归

现在让我们把注意力转到神经网络和 TensorFlow 上。但在下一篇讲无监督学习和聚类时,我们还会学习 scikit-learn 提供的其他方法。

神经网络和 TensorFlow

在上一篇中我们已经看到了 TensorFlow 的 nn 模块提供的 ReLU ( 整流线性单元 rectified linear unit )和 Leaky ReLU 两个激活函数,下面再介绍两个其他激活函数。tf.nn.crelu() 是串联 ReLU 激活函数。tf.nn.elu() 指数线性单元 exponential linear unit 激活函数。我们将在后续用 TensorFlow 和 Keras 训练我们的第一个模型时用到其中一个激活函数。

在开始训练模型之前,我想向你分享 TensorFlow 的提供的“神经网络实验场”工具。它通过可视化的方式帮助你理解神经网络的工作原理。你可以直观地向神经网络中添加神经元和隐藏层,然后训练该模型。你可以选择 Tanh、Sigmoid、Linear 和 ReLU 等激活函数。分类模型和回归模型都可以使用该工具进行分析。训练的效果以动画的形式显示。图 5 显示了一个示例神经网络和它的输出。你可以通过 https://playground.tensorflow.org 访问它。

图 5:神经网络实验场

训练第一个模型

现在,我们使用 上一篇 提到的 MNIST 手写数字数据集来训练模型,然后使用手写数字图像对其进行测试。完整的程序 digital.py 相对较大,为了便于理解,我将程序拆分成几个部分来解释,并且添加了额外的行号。

import numpy as np
from tensorflow import keras, expand_dims
from tensorflow.keras import layers
num_classes = 10
input_shape = (28, 28, 1)
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data( )

第 1 行到第 3 行加载必要的包和模块。第 4 行将类别的数量定义为 10,因为我们试图对 0 到 9 进行分类。第 5 行将输入维度定义为 (28,28,1),这表明我们使用是 28 x 28 像素的灰度图像数据。第 6 行加载该数据集,并将其分为训练数据和测试数据。关于该数据集的更多信息可以参考 上一篇 的相关介绍。

x_train = x_train.astype("float32") / 255
x_test = x_test.astype("float32") / 255
x_train = np.expand_dims(x_train, 3)
x_test = np.expand_dims(x_test, 3)
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

第 7 行和第 8 行将图像像素值从 [0,255] 转换到 [0,1]。其中 astype() 方法用于将整数值类型转换为浮点值。第 9 行和第 10 行将数组 x_testx_train 的维度从 (60000,28,28) 扩展为 (60000,28,28,1)。列表 y_trainy_test 包含从 0 到 9 的 10 个数字的标签。第 11 行和第 12 行将列表 y_trainy_test 转换为二进制类别矩阵。

   try:
      model = keras.models.load_model(existing_model)
   except IOError:
      model = keras.Sequential(
        [
        keras.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation=relu),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation=relu),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten( ),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation=softmax),
        ]
      )
      batch_size = 64
      epochs = 25
      model.compile(loss=categorical_crossentropy, optimizer=adam, metrics=[accuracy])
      model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.1)
      model.save(existing_model)

训练模型是一个处理器密集和高内存消耗的操作,我们可不希望每次运行程序时都要重新训练一遍模型。因此,在第 13 行和第 14 行中,我们先尝试从 existing_model 目录加载模型。第一次执行此代码时,没有模型存在,因此会引发异常。第 16 到 21 行通过定义、训练和保存模型来处理这个异常。第 16 行代码(跨越多行)定义了模型的结构。这一行的参数决定了模型的行为。我们使用的是一个序列模型,它有一系列顺序连接的层,每一层都有一个输入张量和一个输出张量。我们将在下一篇文章中讨论这些定义模型的参数。在此之前,将这个神经网络看作一个黑箱就可以了。

第 17 行将批大小定义为 64,它决定每批计算的样本数量。第 18 行将 epoch 设置为 25,它决定了整个数据集将被学习算法处理的次数。第 19 行对模型的训练行为进行了配置。第 20 行根据给定的数据和参数训练模型。对这两行代码的详细解释将推迟到下一篇文章中。最后,第 21 行将训练好的模型保存到 existing_model 目录中。模型会以多个 .pb 文件的形式保存在该目录中。注意,第 16 到 21 行位于 except 块中。

print(model.summary( ))
score = model.evaluate(x_test, y_test, verbose=0)
print(“Test loss:”, score[0])
print(“Test accuracy:”, score[1])

第 22 行打印我们训练的模型的摘要信息(见图 6)。回想一下,在加载数据集时将其分为了训练数据和测试数据。第 23 行使用测试数据来测试我们训练的模型的准确性。第 24 行和第 25 行打印测试的详细信息(见图 8)。

图 6:模型的细节信息

img = keras.utils.load_img("sample1.png").resize((28, 28)).convert('L')
img = keras.utils.img_to_array(img)
img = img.reshape((1, 28, 28, 1))
img = img.astype('float32')/255
score = model.predict(img)
print(score)
print("Number is", np.argmax(score))
print("Accuracy", np.max(score) * 100.0)

现在,是时候用实际数据来测试我们训练的模型了。我在纸上写了几个数字,并扫描了它们。图 7 是我用来测试模型的一个图像。第 26 行加载图像,然后将其大小调整为 28 x 28 像素,最后将其转换为灰度图像。第 27 到 29 行对图像进行必要的预处理,以便将它输入到我们训练好的模型中。第 30 行预测图像所属的类别。第 31 到 33 行打印该预测的详细信息。图 8 显示了程序 digital.py 的这部分输出。从图中可以看出,虽然图像被正确识别为 7,但置信度只有 23.77%。进一步,从图 8 中可以看到它被识别为 1 的置信度为 12.86%,被识别为 8 或 9 的置信度约为 11%。此外,该模型甚至在某些情况下会是分类错误。虽然我找不到导致性能低于标准的准确原因,但我认为相对较低的训练图像分辨率以及测试图像的质量可能是主要的影响因素。这虽然不是最好的模型,但我们现在有了第一个基于人工智能和机器学习原理的训练模型。希望在本系列的后续文章中,我们能构建出可以处理更困难任务的模型。

图 7:测试手写数字样例

在本文介绍了 scikit-learn,在下一篇文章中我们还会继续用到它。然后介绍了一些加深对神经网络的理解的知识和工具。我们还使用 Keras 训练了第一个模型,并用这个模型进行预测。下一篇文章将继续探索神经网络和模型训练。我们还将了解 PyTorch,这是一个基于 Torch 库的机器学习框架。PyTorch 可以用于开发 计算机视觉 computer vision (CV) 和 自然语言处理 natural language processing (NLP) 相关的应用程序。

图 8:digit.py 脚本的输出

致谢:感谢我的学生 Sreyas S. 在撰写本文过程中提出的创造性建议。

(题图:DA/c8e10cac-a5a5-4d53-b5eb-db06f448e60e)


via: https://www.opensourceforu.com/2023/02/ai-an-introduction-to-scikit-learn-and-our-first-trained-model/

作者:Deepu Benson 选题:lujun9972 译者:toknow-gh 校对:wxy

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

关闭 WSL 中正在运行的 Linux 发行版

以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。

你使用 WSL 在 Windows 内运行 Linux 吗?你想知道如何关闭在 WSL 中运行的 Linux 发行版吗?

你当然可以在 WSL 中运行的 Linux 系统中 执行 shutdown 命令

sudo shutdown now

你还可以使用 wsl 命令关闭 Linux 系统。如果你有多个发行版在 WSL 中运行,这是一种极好的方法。

在 WSL 中使用 Windows 终端关闭 Linux 系统

在这个方法中,我假设通常的 shutdown 命令在 WSL Linux 系统中不起作用。

首先,在 Windows 中打开一个终端。在这里,我使用的是 Windows 11,并在 WSL 2 下安装了 Ubuntu。

打开 Windows 终端

? 你可以在标准的 Windows 终端上使用 wsl 命令。在运行的 Linux 发行版中也可以访问该命令。这里,命令的名称是 wsl.exe

现在,你需要列出已安装的发行版及其状态。为此,请输入

wsl --list --verbose
或
wsl -l -v

列出已安装的发行版

在这里,你可以看到,我已经安装了一个 WSL Ubuntu,它目前正在运行。

关闭所有正在运行的 Linux 发行版

有时,你可能想一次性停止正在运行的 WSL 实例。

在 Powershell 或 Windows 终端中,使用以下命令:

wsl --shutdown

这将关闭所有会话。

此外,你还可以在任何正在运行的 WSL Linux 发行版终端中执行相同的功能。在发行版中时,你只需要使用 wsl.exe 而不是 wsl

wsl.exe --shutdown

关闭所有正在运行的 WSL 发行版

运行此命令后,所有正在运行的 WSL 发行版都将终止。WSL 2 轻量级虚拟机也被终止。因此,如果你想重新启动 WSL 2 虚拟机环境,它将很有用。

终止特定的 Linux 发行版

要终止特定正在运行的 WSL 发行版,请打开单独的 Windows 终端并运行:

wsl --terminate <发行版名称>

此处,发行版名称是你使用 wsl -l -v ⁣ 命令列出所有已安装的 WSL 发行版时获得的名称。

列出 WSL 发行版

wsl --terminate Ubuntu

执行后,指定的 Linux 发行版将被终止。

如果你在另一个发行版中,请使用以下命令列出系统上安装的所有 WSL 发行版:

wsl.exe -l -v

现在,使用以下命令终止所需的发行版:

wsl.exe --terminate <发行版名称>

从另一个 WSL 发行版中关闭 WSL 发行版

总结

有些人直接关闭正在运行的 Linux 应用,但我认为这不太优雅。

另外,就像 Linux 终端一样,你可以使用:

  • logout 命令,用于关闭该发行版。
  • exit 命令用于退出运行 Linux 发行版的终端。
  • 或者,按 CTRL+D 执行与 exit 命令相同的操作。

但关闭 Linux 系统的 WSL 方式还有一个额外的优势,即可以针对多个 Linux 系统执行此操作。

我希望它对你有帮助。

(题图:DA/615fd564-a02c-4340-9c8f-ebabcc7c0e0c)


via: https://itsfoss.com/shut-down-wsl-distros/

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

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

MX Linux 23.2 “Libretto” 已来!

最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。

MX Linux 推出了 2024 年的第一个主要版本,作为 23.x 版本的延续。上一版本 MX Linux 23 采用了新徽标,并进行了其他重大更改。

新版本 MX Linux 23.2 旨在继续沿着这条道路前进。

如果你正在寻找一款不含 systemd 的发行版,而且在使用时不会碍手碍脚,那么你可以看看这款基于 Debian 的发行版是否是一个极佳的选择。

如果你很好奇,如果你正在寻找一个在使用时不会妨碍的 无 systemd 发行版,那么这个基于 Debian 的发行版是一个绝佳的选择。

所以,话不多说,让我们开始吧。

? MX Linux 23.2:有什么新变化?

MX Linux 23.2 基于 Debian 12.4 “Bookworm” 基础构建,标准版使用 Linux 内核 6.1,“高级硬件支持”(AHS)版使用 Linux 内核 6.6 “liquix”,用于更新的硬件。

至于此版本的亮点,安装程序现在为 “toram” 实时功能的用户提供了修复,更新了 fstab 的生成,并提供了更好的图形用户界面。

各种应用和工具也得到升级,对于音频/视频处理,使用了 PipeWire 1.0,引入了新工具 “MX Locale” 来管理系统区域设置信息,默认语言等等。

在 UI/UX 部分,“mx-comfort-themes” 已修复,因为某些应用无法很好地配合它,并且引入了名为 “MX Linux Desert Landscape” 的新壁纸

这里还提供了一个名为 “papirus-folder-colors” 的新工具,它允许你尝试不同的文件夹颜色

然后是 新的相机应用。在 MX Linux 的 KDE Plasma 版本中,Webcamoid 取代了 Kamoso,同样,对于 Xfce 和 Fluxbox,Webcamoid 被替换为 Guvcview

最后,MX Linux 的旗舰桌面(Xfce)的 AHS 版本现在更新了固件和 Mesa 库**,并在 MX-Packageinstaller 菜单下新增了启用自动更新的可选设置。

如需进一步了解,你可以浏览 发行说明

? 获取 MX Linux 23.2

要获取最新的 MX 版本,你可以访问其 官方网站,其中包含各种下载镜像并可使用 torrent 文件。

MX Linux 23.2

?对此版本有什么想法吗? 请在下面告诉我!


via: https://news.itsfoss.com/mx-linux-23-2-release/

作者:Sourav Rudra 选题:lujun9972 译者:geekpi 校对:校对者ID

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

硬核观察 #1262 网络上最古老的软件存档库之一即将关闭

#1 网络上最古老的软件存档库之一即将关闭

美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024 年 4 月 15 日关闭其 OS/2 存档库,此举标志着一个时代的终结。三十多年来,该存档库一直是 IBM OS/2 操作系统及其后继系统用户的重要资源。他们在公告中没有透露做出这个“艰难的决定”的具体细节,只是表示“不得不”做出次决定。该存档库拥有至少 32 年的历史,是互联网上历史最悠久的软件存档库之一,与密歇根大学的存档库和 UNC 的 ibiblio 类似。

(插图:DA/21cc8173-ec2f-4546-b452-da588b187e14)

消息来源:Ars Technica

老王点评:我也感同身受啊。

#2 日本的部分官方文件将不再需要使用软盘提交

早在 2022 年,日本数字事务大臣就敦促政府各部门停止要求企业通过过时的物理介质提交信息。日本经济产业省上周表示:“根据现行法律,在申请和通知方法方面,有许多条款规定使用软盘等特定记录媒体。今年之后,经济产业省将不再要求企业根据 34 条法令提交软盘数据。”在日本多个政府部门中,约有 1900 项协议仍然需要使用软盘、光盘甚至迷你光盘。

(插图:DA/5bd5033f-c570-430f-8963-51979e7849a8)

消息来源:Engadget

老王点评:日本的 IT 基础设施处于一种奇怪的落后状况。

#3 GPS 干扰已成为航空业的主要飞行安全问题之一

欧洲航空安全局称,近年来,GPS 干扰和欺骗事件日益威胁着东欧和中东地区定位服务的完整性。他们针对最近就有人欺骗和干扰卫星导航系统的事件举行了一次研讨会,认为这些事件对飞行安全构成了“重大挑战”。他们希望通过信息共享、保留传统导航辅助设备作为备份、以及向航空公司提供指导来应对。

(插图:DA/600c9434-8413-47f7-8368-2c1fbd953114)

消息来源:The Register

老王点评:GPS 这样定位服务也将变成战争武器。

如何在 RHEL 上通过绑定配置 VLAN 标记

在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bonding 网卡聚合 NIC teaming 、VLAN 标记和桥接。这些高级功能可以提高网络连接的效率和可靠性。

你可以在以太网、绑定、聚合或桥接设备等其他接口上创建 VLAN 接口。

在本文中,我们将学习如何在 RHEL 系统中通过网络绑定配置 VLAN 标记,它允许来自不同网络的流量共享共同的物理链接。

通过绑定对 VLAN 进行标记的先决条件

  • 网络聚合需要在网络交换机端口上启用 LACP(802.3ad),以聚合链路。
  • 网络聚合需要将网络端口配置为中继端口,这样可以在同一端口上添加多个 VLAN。此外,还要从它们那里获取 VLAN ID,以便在操作系统层面进行配置。
  • Linux 系统应该有两个接口。
  • 如果是物理服务器,我们建议在板载接口和 PCI 接口之间配置绑定,以避免主机端的网卡出现单点故障。
绑定内核模块

使用 lsmod 命令检查 Linux 系统是否已加载绑定模块。

lsmod | grep -i bonding
bonding 12451 0

默认情况下已加载。否则,请使用 modprobe 命令加载它。

modprobe bonding

1) LACP 绑定配置

我们将配置基于 LACP(Mode 4 – 802.3ad)的链路聚合绑定,通过组合名为 em1p7p1 的两个接口,为绑定接口提供更大的带宽。

1a) 创建 Bond 接口

在目录 /etc/sysconfig/network-scripts/ 下创建绑定接口文件 ifcfg-bond0

vi /etc/sysconfig/network-scripts/ifcfg-bond0

TYPE=Bond
DEVICE=bond0
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=none
ONBOOT=yes
BONDING_OPTS="mode=4 miimon=100 lacp_rate=1"
NM_CONTROLLED=no
1b) 配置第一个从接口

配置你想要进行绑定的第一个从属接口 em1。请根据你的环境使用正确的接口名称。

vi /etc/sysconfig/network-scripts/ifcfg-em1

TYPE=Ethernet
BOOTPROTO=none
DEVICE=em1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
1c) 配置第二个从接口

配置你想要进行绑定的第二个从属接口 p7p1。 请根据你的环境使用正确的接口名称。

vi /etc/sysconfig/network-scripts/ifcfg-p7p1

TYPE=Ethernet
BOOTPROTO=none
DEVICE=p7p1
ONBOOT=yes
MASTER=bond0
SLAVE=yes
重启网络服务

重启网络服务以启用绑定接口或使用 ifup 命令启动它们。

systemctl restart network

2) 通过绑定接口进行 VLAN 标记

LACP 绑定配置已完成,所有接口现已启动并运行。让我们按照以下步骤配置绑定接口上的 VLAN 标记。

正如先决条件中所讨论的,以下是映射到相应以太网卡端口(em1p7p1)和网络交换机端口的 VLAN。

  • VLAN ID (221), VLAN N/W = 192.168.10.0/24
  • VLAN ID (331), VLAN N/W = 192.168.20.0/24
2a) 将 VLAN 221 配置到 Bond0

为 VLAN id 221 创建标记接口文件 /etc/sysconfig/network-scripts/ifcfg-bond0.221 并添加以下内容。

vi /etc/sysconfig/network-scripts/ifcfg-bond0.221

DEVICE=bond0.221
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.10.100
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
VLAN=yes
NM_CONTROLLED=no
2b) 将 VLAN 331 配置到 Bond0

为 VLAN id 331 创建标记接口文件 /etc/sysconfig/network-scripts/ifcfg-bond0.331 并添加以下内容。

vi /etc/sysconfig/network-scripts/ifcfg-bond0.331

DEVICE=bond0.331
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.20.100
NETMASK=255.255.255.0
GATEWAY=192.168.20.1
VLAN=yes
NM_CONTROLLED=no
重启网络服务

重启网络服务以启用绑定接口或使用 ifup 命令启动它们。

systemctl restart network

验证 VLAN 标记配置

最后使用 ip 命令 验证 VLAN 标记接口是否已配置并启动和运行。

是的,我可以看到 bondo.221@bond0bon0.331@bond0 有两个不同的 IP,并且能够通过 ssh 访问系统,没有任何问题。因此,VLAN 标记按预期工作。

结论

恭喜,你已经了解了如何在 RHEL 系统上通过 LACP 绑定配置 VLAN 标记,该系统监听两个 VLAN。VLAN 标记不限于两个 VLAN,支持多个 VLAN,你可以根据该 VLAN 的网络配置添加 VLAN 标记。

(题图:DA/2854516d-4d19-4008-a421-05f9a2a78368)


via: https://www.2daygeek.com/configure-vlan-tagging-over-network-bonding-rhel/

作者:Jayabal Thiyagarajan 选题:lujun9972 译者:geekpi 校对:wxy

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

Linux Matrix 消息应用 Fractal 6 发布

Matrix 用户可以升级 Fractal 6 了!

Fractal 是目前 最好的 Matrix 客户端 之一,近来一直在不断更新。

根据他们在 Fractal 5 发布时 宣布的计划,开发人员已经兑现了承诺,改进了应用程序的方方面面。

现在,Fractal 的下一次升级已经到来,并进行了进一步的改进。

? Fractal 6:有什么新内容?

乍一看,你可能没有发现任何重大变化。然而,底层有许多重要的变化。

以通知设置为例,它们已得到更新,现在用户可以设置全局和每个房间的通知。还有一个选项可以选择获取特定关键字的通知。

对于加密房间,用户可以轻松访问媒体历史记录,以查找以前上传的照片和视频。现在,当你输入标识符或 URI 时,“加入房间” 对话框会显示有用的预览。

既然谈到了这个话题,那么现在就可以用 Fractal 打开 Matrix URI 了**。它也是**Matrix 方案的注册处理程序。如果你不知道,URI 是一种标识符,可以让你轻松与其他用户取得联系或加入房间,类似于 Telegram 等平台上的标识符。

房间成员现在拥有一个外观整洁的个人资料页面,可用于查看有关个人资料的简短简介、踢/禁止等审核选项,甚至可以忽略他们;这样你就看不到他们发送的任何消息或邀请。

因此,用户现在可以从帐户设置页面轻松管理他们的“忽略用户”列表,可以通过单击个人资料图标附近的齿轮图标来访问该页面。

总而言之,还有许多其他改进、修复和新翻译,我在这里没有介绍。为此,我强烈建议你阅读官方 发行说明

? 下载 Fractal 6

Fractal 6 可从 Flathub 商店 获取,如果你有兴趣深入了解源代码,你也可以浏览其 GitLab 仓库

Fractal 6

? 你使用 Fractal 吗?你会选择其它的替代品吗?让我们知道!


via: https://news.itsfoss.com/fractal-6-release/

作者:Sourav Rudra 选题:lujun9972 译者:geekpi 校对:wxy

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

如何通过 VLC 使用字幕

使用 VLC 媒体播放器播放和管理字幕的新手指南。

我是一个超级动漫迷,如果你想观看最新的剧集,那么你只能观看日语音频,因此字幕对于非日语观众来说是必不可少的。

值得庆幸的是,我最喜欢的视频播放器 VLC 很好地支持字幕。难怪它是有史以来 最好的视频播放器 之一。

VLC 实际上可以做的不仅仅是播放提供的字幕。

在本指南中,我将引导你完成以下内容:

  • 如何使用可用的字幕(如果有的话)
  • 如何使用下载的字幕
  • 如何自动下载字幕(使用 vlsub 扩展)
  • 如何将字幕与视频同步
  • VLC 支持哪些字幕格式

那么让我们从第一个开始。

如何在 VLC 中启用字幕

有些视频附带字幕文件。如果字幕与视频文件位于同一文件夹中,你可以轻松启用字幕。

虽然启用字幕的方法有多种,但我将向你展示两种有效的方法。

按 V 键(最简单的方法)

如果当前播放的视频有一个或多个字幕,那么你可以按 V 键,它将在可用选项之间更改字幕。

正如你所看到的,当我按下 V 时,它会在多个字幕之间漫游,甚至可以选择完全禁用字幕。

使用顶部菜单栏或右键单击上下文菜单

虽然按 V 键是启用字幕的最简单方法,但如果你有多个字幕文件(可能有多种语言)并且必须选择其中之一,那么按 V 键的效果就不是最好了。

假设你要查找的字幕位于最后一个位置,那么你必须按 V 键几次,如果你错过了,请再次重复该过程。

因此,在这种情况下,从顶部菜单中选择字幕轨道是一种简单方便的方法。

要使用此方法,你必须遵循两个简单的步骤:

  • 单击顶部菜单栏中的 “ 字幕 Subtitle ” 菜单
  • 选择 “ 子轨道 Sub Track ”,然后选择所需的字幕轨道

你还可以通过右键单击正在播放的视频,并选择字幕选项来完成此操作。

如何在 VLC 中使用下载的字幕

如果你从网上下载了字幕,但不知道如何在 VLC 中使用它们,那么本节将解决该问题。

要使用下载的字幕,你必须将其导入 VLC。并且可以通过遵循给定的简单步骤轻松完成:

  • 首先,单击顶部菜单栏中的 “字幕”
  • 选择第一个 “ 添加字幕文件 Add Subtitle File ” 选项,它将打开文件管理器
  • 从这里找到字幕文件所在的位置并选择它

完成后,可以通过顶部菜单栏中的字幕菜单访问添加的字幕:

? 如果你要保存视频以供将来使用,我建议将字幕文件复制到与视频文件本身相同的文件夹中。更好的方法是将文件重命名为与视频文件相同的名称。因此,如果视频文件是 my-xyz.mp4,则字幕文件应该是 my-xyz.srt。这样,字幕要么自动播放,要么在你按 v 键时被识别。

如何在 VLC 中自动下载字幕(适用于 Linux 用户)

你是否知道 VLC 有一个名为 VLsub 的插件,可用于从网络下载字幕并直接在 VLC 中访问它们?

如果你是 Linux 用户,请按照给定的说明将其添加到 VLC 中。

首先,使用 wget 命令 下载 zip 文件:

wget https://github.com/exebetche/vlsub/archive/master.zip

接下来,如下所示 使用 unzip 命令解压文件

unzip master.zip

之后,你需要 创建一个新目录

mkdir -p ~/.local/share/vlc/lua/extensions

最后,使用 mv 命令 将文件移动到创建的目录,如下所示:

mv ~/vlsub-master/vlsub.lua ~/.local/share/vlc/lua/extensions

现在,打开VLC播放器,在 “ 视图 View ” 菜单下,你将找到 “VLsub”:

要使用 VLsub 下载字幕,首先,输入电影名称和年份以获得更好的结果,然后点击“ 按名称搜索 Search by name ”按钮,从结果中选择字幕文件,然后单击“ 下载选择 Download selection ”按钮,如图所示 :

就是这样!

要了解有关如何使用 VLsub 扩展的更多信息,请参阅我们有关该主题的 详细指南

如何在 VLC 中将字幕与电影同步

有时,下载的字幕可能会比电影中发生的事情稍微落后或提前,这可能会令人沮丧!

不用担心! VLC也有解决这个问题的方法!

在 VLC 中,你可以通过按 GH 键前进或后退字幕。

  • G 键将使字幕快进 50 毫秒
  • H 键将使字幕后退 50 毫秒

虽然 50 毫秒听起来太短,但你会在 2-3 次按键内注意到显着差异。

如果你在实际场景中跑得太超前或落后,也可以按住它们。

还感到困惑吗? 你可以参考我们的 如何在 VLC 中同步字幕的详细指南

VLC 支持哪些字幕格式?

如果你想从互联网上下载字幕,那么你必须了解 VLC 支持的字幕格式。

以下是 VLC 支持的字幕格式列表:

  • *.idx(VOBSub)
  • *.cvd(Chaoji VCD)
  • *.usf(通用字幕)
  • *.ttxt(MPEG-4 定时文本)
  • *.srt(SubRip)
  • *.ssa(Sub Station Alpha)
  • *.smi(SAMI)
  • *.aqt(AQTitle)
  • *.txt(ML2/VPlayer)
  • *.rt(RealText/Smil)
  • *.psb(PowerDivX)
  • *.pjs(Phoenix Subtitle)
  • *.dks(DKS)
  • *.mpl(ML2)
  • *.jss(JACOSub)
  • *.svcd(Super Video CD)
  • *.txt(ML2/VPlayer)

但最流行的微妙类型是 *.srt,并且通常在你下载视频文件时默认提供。

VLC 的功能远不止播放视频

你知道可以使用 VLC 下载 YouTube 视频吗? 嗯,它可以做的远不止这些。

为此,我们制作了关于 你可以使用 VLC 播放器做的很酷的事情 的详细指南。

以下是如何充分利用 VLC 的方法:

让 VLC 播放器在 Linux 中发挥更大作用的 5 个技巧

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

(题图:DA/39a917f2-a1b3-4167-8393-1af0859105b0)


via: https://itsfoss.com/vlc-use-subtitles/

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

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

硬核观察 #1261 X 计划在奥斯汀建立内容审核总部

#1 X 计划在奥斯汀建立内容审核总部

据报道,该部门将招聘 100 名全职员工,将主要关注 CSE 问题。这也是埃隆·马斯克在收购其前身平台 Twitter 不久后裁撤的第一个信任与安全团队。该团队还将协助执行其他审核规定,如禁止仇恨言论,审核员将调查 “垃圾信息和欺诈” 等问题,并提供客户支持。

(插图:DA/13bbe5a9-8b1d-42a8-9b16-ade0ee875a67)

消息来源:The Verge

老王点评:连老马这么刚的人都需要向现实低头,无限制的自由不是自由。

#2 利用 AI 来优化 Python 代码的性能

一款在 GitHub 上的下载量已超过 90 万次的剖析器可以优化 Python 代码。这个名为 “Scalene” 的工具可以测量每行代码平均和峰值所花费的时间和内存,以及有多少时间花在高效的库上,有多少时间花在 Python 代码上,用户可以利用由 ChatGPT 驱动的引擎获得优化建议。

但也有另外一个 研究 发现,AI 编程助手降低了代码质量和可维护性。报告指出,GitHub Copilot 与向代码库推送“错误代码”强相关。

(插图:DA/250878bb-930c-4869-b490-990a2aea634d)

消息来源:The New Stack

老王点评:在我看来,绝大部分编程工作都会被 AI 取消,就像高级语言取代汇编一样,将来的编程就是用人类语言描述大致需求,AI 优化你的需求,用底层的编程语言来实现。

#3 美国汽车行业试图取消调幅收音机

汽车制造商表示,电动汽车的兴起推动了调幅收音机的转变,因为车载电子设备会对调幅收音机信号产生干扰。据估计,要屏蔽电缆和组件以减少干扰,在 7 年内将花费汽车制造商 38 亿美元。根据尼尔森公司 2023 年春季的一项最新调查显示,调幅广播每月覆盖约 7800 万美国人,而这一数字在 2016 是 1.07 亿。但一些人希望保留调幅收音机,因为它在应急通信中发挥着重要作用,至少覆盖了 90% 的美国人口。他们认为汽车制造商越来越希望将广播和其他汽车功能置于付费墙之后,这是汽车制造商的另一个利润中心。

(插图:DA/0d2c9644-aa6e-48d5-b3c5-c08e3020677d)

消息来源:MSN

老王点评:其实背后都是生意。