2023年8月

DARPA 正在研究一种修复遗留二进制可执行文件的方法

有很多正在使用的二进制可执行文件已经丢失了源代码或者无法重建了,但是如果需要修复其中的错误或者添加功能呢?你可能会说通过反编译和逆向工程工具将它转换为源代码,但是转译出来的代码往往很难阅读。美国国防部高级研究计划局(DARPA)于 2020 年启动了一项“大型遗留软件安全与性能验证(V-SPELLS)”计划,可以将二进制可执行文件解码为人类可读的表示形式(HAR),使可读代码的更改成为可能。参与该项目的佐治亚理工学院团队开发出一种原型管道,这种“管道”可以将二进制文件拆解成带有伪代码的图结构,并以开发人员可以浏览的方式呈现,还可以用 C 和 C++ 替换或添加部分内容。该研究还处于基础研究阶段,计划和美国海军进行测试,并在以后可能推广到民用领域。

消息来源:The Register
老王点评:确实,现在已经有很多遗留的 IT 设施,全面推倒并不现实,要是能有更好的重建机制,那无疑是挽救它们的好办法。

谷歌发布首个量子弹性 FIDO2 密钥实现

FIDO2 是快速身份在线认证标准的第二个主要版本,FIDO2 密钥用于无密码认证和多因素认证(MFA)。谷歌解释说,随着量子计算时代的到来和该领域发展的加速,抗量子的 FIDO2 安全密钥实现是确保安全的关键一步。该方案使用了独特 ECC/Dilithium 混合签名模式。Dilithium 是一种抗量子加密签名方案,NIST 将其纳入了量子加密标准化后的提案中,称赞其安全性强、性能卓越。谷歌的工程师们成功地开发出了基于 Rust 的实现方法,只需要 20KB 内存,使这项工作成为可能,同时他们也注意到了它的高性能潜力。

消息来源:Bleeping Computer
老王点评:我觉得,如果将搞一两台极其昂贵的专用量子计算机,跑一些实验性的计算称做“矛”的话,这种增强现有加密抗量子能力的“盾”可能更重要,而且这并不需要你真的有一台量子计算机就能进行。

硬盘可能比固态硬盘更环保

人们普遍认为,固态硬盘通常比硬盘更具可持续性,因为固态硬盘没有转动部件,更省电。但根据最新的一项研究,硬盘可能比固态硬盘更环保。而最大的碳排放发生在生产过程中,固态硬盘的生产比硬盘产生更多的碳,固态硬盘中使用的闪存的制造成本高出约 8 倍。制造 1MB 的闪存会排放 0.16 千克二氧化碳,这就是固态硬盘的内含碳成本。但也有观点认为,随着技术进步,固态硬盘的使用年限会更长,其碳足迹会接近硬盘。

消息来源:Blocks and Files
老王点评:环保不环保的且不说,技术进步之后,总是能更环保的。固态硬盘的诸多好处之外,最让人担心的是一旦损坏,数据就很难找回了。

想知道 ls 命令输出中的颜色是什么?它们从何而来,又该如何设置?本文将为您一一解答。

相信你一定使用过 ls 命令来 列出目录的内容。在 Ubuntu 和许多其他发行版中,你将看到不同颜色的 ls 命令输出。

如果你没有看到过,你可以这样获得如下所示的彩色输出:

ls --color=auto

但是你有没有想过这些颜色在 ls 命令输出中意味着什么?

我将回答本文中的问题。如果你的终端默认情况下不显示它,我还将展示如何使用 ls 命令获取彩色输出

Ubuntu 中 ls 命令中使用的颜色的含义

? ls 命令输出的颜色没有固定的标准。不同的终端和发行版使用不同的颜色编码,你也可以根据自己的喜好进行修改。换句话说,不要依赖颜色。

我在本节中使用默认的 Ubuntu 终端及其颜色配置文件。

当你 使用 ls 命令列出文件 时,它会使用不同的颜色来指示不同类型的文件。

大多数终端都会以不同的颜色显示可执行文件、链接、常规文件和目录,以便你可以轻松区分它们。

有些终端(例如 Ubuntu 中的默认终端)将其提升到一个新的水平,并为音乐文件、图像和视频添加更多颜色。

为了演示,我列出了来自不同目录的文件,这些文件在 Ubuntu 中用不同的颜色填充了我的终端窗口:

different colors used by the ls command

看起来很混乱? 让我一一为你解密吧!

颜色描述
粗体蓝色目录
无色文件或硬链接
粗体青色指向文件的符号链接。
粗体绿色可执行文件(.sh 扩展名的脚本)
粗体红色归档文件(主要是 tarball 或 zip 文件)
洋红色表示图像和视频文件
青色音频文件
黄色配黑色背景管道文件(称为 FIFO)
粗体红色配黑色背景损坏的符号链接
无色(白色)配红色背景表示设置用户 ID 文件
黑色配黄色背景表示设置组 ID 文件
白色与蓝色背景显示粘滞位目录
蓝色配绿色背景指向其他可写目录
黑色配绿色背景当目录同时具有粘滞位和其他可写目录的特征时
? 再次强调,上述颜色数据基于终端的默认设置,如果更改调色板,将不会得到类似的结果。

但是如果你的终端不显示任何颜色怎么办? 好吧,这是有原因和解决方案的。

如果 ls 命令不显示彩色输出怎么办?

事情是这样的。默认情况下,ls 命令不应在输出中显示颜色。如果你使用 --color=auto 标志,它将显示颜色。

ls --color=auto

那么为什么 ls 命令在 Ubuntu 和其他一些发行版中默认添加颜色呢? 这是因为你的发行版为 ls 命令设置了别名,以便在执行 ls 命令时使用 --color=auto 标志:

alias

因此,如果 ls 命令未显示彩色输出,则是因为默认情况下没有设置别名。

现在,每当你使用 ls 命令时,你都可以使用 --color=auto 标志。

Use  --color=auto flag with the ls command to get the colored output

但这不太方便。相反,你应该创建别名并将其添加到 .bashrc 中,以便 ls 命令默认显示颜色。

为 ls 创建一个永久别名来显示颜色

要创建永久别名,首先,使用以下命令打开 .bashrc 文件:

nano ~/.bashrc

使用 Alt + / 跳到文件末尾粘贴如下行到终端:

alias ls='ls --color=auto'

完成后,保存更改并退出 nano 文本编辑器。

要使你刚刚所做的更改生效,请 源引 source .bashrc 文件:

source ~/.bashrc

就是这样! 从现在开始,你可以使用彩色输出。

ls 命令从哪里获取颜色?

现在有趣的部分来了。ls 命令的颜色在哪里定义? 答案是 LS_COLORS 环境变量。

是的。这是名为 LS_COLORS 的特殊环境变量,它定义 ls 命令使用的颜色。

Value of the LS_COLORS env variable in Ubuntu

这很好,但是谁定义了这个变量呢? 如果你想做出一些改变怎么办? 我也来回答一下这些问题。

实际上,你有一个专门的 dircolors 命令来为 ls 命令设置颜色。

不同的 Shell 有不同的颜色配置文件格式。这就是为什么在使用此命令时应指定 Shell。

dircolors command output for bash

如你所见,它定义了 LS_COLORS 环境变量并将其导出,以便该变量可用于子 Shell。

现在,如果你想使用它,你可以将其复制粘贴到你的 .bashrc 文件或像这样重定向输出:

dircolors -b >> .bashrc

源引 source 该文件,以便效果立即可见。你只需要做一次。

理解颜色配置文件

LS_COLORS 包含由冒号(:)分隔的键值对数据。如果该值有多个部分,则它们之间用分号(;)分隔。

键通常是预定义的。值部分代表颜色。

因此,如果显示 ln=01;36,则表示对于符号链接,字体为粗体,颜色(36)为青色。

00 为正常,01 为粗体,4 为下划线。31 代表红色,32 代表绿色等。颜色代码遵循 ANSI 转义代码

另一个例子。or=40;31;01 表示链接到不存在的文件(键为 or),使用黑色背景(颜色代码 40)、红色(31)和粗体字体(代码 01)。

我认为顺序并不重要,因为代码不重叠。31 是前景色红色的代码,41 是背景红色的颜色。因此,如果使用 41,你就知道它用于背景颜色。

使用 ls 命令执行更多操作

ls 命令可以做更多的事情,为此,我们制作了有关如何使用 ls 命令的详细教程:

在 Linux 中使用 ls 命令

Abhishek Prakash 提供资料。

(题图:MJ/4d0f1f66-259f-4671-a3a8-158f61a38b10)


via: https://itsfoss.com/ls-color-output/

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

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

Ubuntu 正在升级其软件商店以提供顺滑的体验!

随着不断发展,Canonical 似乎全力以赴,将基于 Flutter 的元素整合到 Ubuntu 中。

在前段时间 Ubuntu 23.04 发布后,我们见到了基于 Flutter 的安装程序 ,现在,Ubuntu 的另一个重要工具也接受了 Flutter 改造:一款新的软件商店应用。

不过,现有的“软件中心”并不会现在就被取代。相反,Ubuntu 将有一个新的商店,目标是经典的软件中心与由社区构建的 Flutter 商店的进化版。

但是,你看,去年我们第一次看到了由 Canonical 的许多贡献者开发的 非官方的基于 Flutter 软件中心 时,就预见到了这一点。

而且,通过 Canonical 的 Tim Holmes-Mitra 最近的更新,我们现在已经可以一窥新商店的风采了。

让我带你瞧瞧这个。

Ubuntu 商店值得期待的地方?

最初,它被称为 “ 应用商店 App Store ”,但为了避免与已经注册了该商标的苹果公司产生任何法律问题,这个名字将需要改变。

目前最受欢迎的似乎是 “ Ubuntu 商店 Ubuntu Store ” ,我个人认为这个名字会很好地融入到该发行版中。不过,这个新的基于 Flutter 的软件中心的名称尚未最终确定,所以我们还必须等待。

Tim 也提到了:

这个项目仍然在建设中,现在我们的重点在于核心功能。我很乐观的认为到 23.10 的发布时,我们的新的评级功能和对 deb 的支持以及更多的改进将会落地。

这表明,如果事情进展顺利,我们可能会在 Ubuntu 23.10 最终发布的前期就看到 新的基于 Flutter 的软件中心集成到其中

不仅限于此,你可以在接下来的一两周内在 Ubuntu 23.10(Mantic Minotaur)的每日构建版本中找到作为默认设置的新 Ubuntu 商店 。

你可以参考 Tim 的 公告 获取更详细的细节。

但是等等,还有更多!** ?

我在我的 Ubuntu 22.04 LTS 系统上测试了新的基于 Flutter 的商店 ,我必须说,用户体验远超我们现有的软件中心。

主页现在被整齐地划分为三个独特的部分:一个是包含搜索菜单的页头,另一个是包含应用类别和设置菜单的侧边栏菜单,最后是包含应用本身的中心部分。

搜索功能已经得到了大幅度的提升 ,我在输入搜索查询的过程中就已经开始显示结果了。

应用视图也得到了大幅度的提升 ,在 Snap 和 Debian 包之间有了明显的源切换器。我很高兴看到这一点,因为并不是很多人喜欢 Snap ?

想在你的 Ubuntu 22.04 / 23.04 系统上试试看吗?

在开始之前,记住它仍然在积极开发中,随着开发的进展,事物将会发生改变。

你将需要切换到 Snap 商店的 预览/边缘 preview/edge 频道才能获得它。运行以下命令:

sudo snap refresh snap-store --channel=preview/edge
? 如果它抛出了一个 “snap-store” 有正在运行的应用的错误,那么使用 sudo kill -9 PID 杀死它,然后重新运行该命令。

然后,你可以从应用启动器运行 “软件” 应用来测试它。

要恢复到原生软件中心,请运行以下命令:

sudo snap refresh snap-store --channel=latest/stable

对于新的“软件中心”是如何工作以及查看源代码的更多细节,我建议你去查看它的 GitHub 仓库

参考自:FOSTips

(题图:MJ/6f701cd5-fe15-4a70-bebc-9087c14af338)


via: https://news.itsfoss.com/ubuntu-23-10-ubuntu-store/

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

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

SUSE 将退市,被其最大股东私有化

多年来,SUSE 从成立自己的独立公司,到二十年前被 Novell 收购。在过去的十年里,SUSE 先后在 Attachmate、Micro Focus、EQT Partners 之间易手,然后于 2021 年在法兰克福证券交易所上市。两年后,拥有 SUSE 79% 的股份的 Marcel 公司正计划将该公司私有化,并溢价约 67% 从交易所退市。

消息来源:Phoronix
老王点评:SUSE,是唯一一个不断转手的大型 Linux 公司,祝愿私有化之后,SUSE 能有更好的发展。

廉价版特斯拉汽车用软件锁定了续航里程

特斯拉推出了增加了新的标准内饰的 Model S 和 Model X 的廉价版,价格减少 1 万美元,但单次充电续航里程也减少约 80 英里。不过,廉价版和旧版的 Model S 和 X 车辆都使用相同总容量的电池组,特斯拉只是用软件锁定了续航里程。这些只通过软件的变化使特斯拉能够使汽车具有足够的差异化,而无需对车辆、其装配或安装的零件进行物理修改。

消息来源:The Drive
老王点评:你买的不是车辆硬件,买的只是软件和服务,硬件不过是商品的“载体”而已。这样的说法是不是很不习惯?

《纽约时报》考虑对 OpenAI 采取法律行动

数周以来,《纽约时报》和 OpenAI 一直在就达成一项许可协议进行紧张谈判,根据该协议,OpenAI 将向《纽约时报》支付费用,将其文章纳入这家科技公司的人工智能工具中。但谈判并不顺利,以至于现在该报纸正在考虑采取法律行动。《纽约时报》最担心的是,如果 ChatGPT 通过该报纸的内容来创建回答问题的文本,当人们搜索时得到一个重塑版的答案,从而会成为该报纸的直接竞争对手。昨天,《纽约时报》更新了其服务条款,禁止其内容用于开发“任何软件程序,包括但不限于训练机器学习或人工智能系统”。

消息来源:NPR
老王点评:就像工业革命一样,人工智能带来各种生产力进步的同时,也是在破坏既有的模式。

连续集成 continuous integration (CI)是指代码变更会被自动构建和测试。以下是我为自己的 C++ 项目构建 CI 流水线的过程。

本文介绍如何在 GitLab 上配置 CI 流水线。我在前面的文章中介绍了 基于 CMake 和 VSCodium 的构建系统基于 GoogleTest 和 CTest 的单元测试。本文将在此基础上进一步配置 CI 流水线。我会先演示如何布设和运行 CI 流水线,然后再介绍如何配置它。

CI 是指提交到代码仓库的代码变更会被自动构建和测试。在开源领域,GitLab 是一个流行的 CI 流水线平台。除了作为中心 Git 仓库外,GitLab 还提供 CI/CD 流水线、 问题跟踪 issue tracking 容器注册表 container registry 功能。

相关术语

在进入正题之前,我先介绍在本文和 GitLab 文档 中会遇到的常见术语。

  • 持续交付 continuous delivery (CD):自动化供应软件,以供随时交付
  • 持续部署 continuous deployment (CD):自动化软件发布
  • 流水线 pipeline : CI/CD 的直接构件,它由阶段和作业构成
  • 阶段 stage :一组作业
  • 作业 job :某项需要执行的具体任务,比如编译、单元测试等
  • 执行器 runner :实际执行作业的服务

布设 CI 流水线

在下面的章节中,我将复用以前的 示例工程。点击 GitLab 仓库页面右上角的 复刻 Fork 按钮复刻代码仓库。

 title=

设置执行器

为了让你对整个流程有所了解,我们先从在本地安装执行器讲起。

参照执行器服务 安装指南 安装好服务,然后注册执行器。

1、选择 GitLab 项目页面左侧的 设置 Settings ,再选择 CI/CD

 title=

2、展开 执行器 Runners 区域,关闭 共享的执行器 Shared runners 选项(黄框处)。特别注意令牌和 URL(绿框处),下一步会用到它们。

 title=

3、在终端中运行 gitlab-runner register,根据提示输入以下注册信息:

  • GitLab 实例: https://gitlab.com/ (如上图)
  • 注册令牌:从执行器区域中获取 (如上图)
  • 描述:按需自由填写
  • 标签:可以不填
  • 执行环境:选 Shell

如果有需要,你可以在 ~/.gitlab-runner/config.toml 中修改这些配置。

4、用命令 gitlab-runner run 启动执行器。你可以在 GitLab 的项目设置界面执行器区域看到执行器的状态:

 title=

运行流水线

前面已经提过,流水线就是一组由执行器执行的作业。每个推送到 GitLab 的提交都会生成一个附加到该提交的流水线。如果多个提交被一起推送,那么只会为最后一个提交生成流水线。为了演示,我直接在 GitLab 在线编辑器中提交和推送修改。

打开 README.md 文件,添加一行数据:

 title=

现在提交修改。

这里注意默认的行为是为提交新建一个分支,为了简便起见,我们择提交到主分支。

 title=

提交后一会儿后,你就应该改能看到 GitLab 执行器执行的控制台中有输出消息:

Checking for jobs... received job=1975932998 repo_url=<https://gitlab.com/hANSIc99/cpp\_testing\_sample.git> runner=Z7MyQsA6

Job succeeded duration_s=3.866619798 job=1975932998 project=32818130 runner=Z7MyQsA6

在 GitLab 项目概览界面左侧选择 CI/CD --> 管道 Pipelines ,查看最近执行的流水线:

 title=

选中流水线可以在详情界面看到哪些作业失败了,并能查看各个作业的输出。

当遇到非零返回值是就认为作业执行失败了。在下面的例子中我通过调用 exit 1 强制让作业执行失败:

 title=

CI 配置

阶段、流水线和作业的配置都在仓库根目录的 .gitlab-ci.yml 文件中。我建议使用 GitLab 内置的流水线编辑器,它会自动对配置进行检查。

stages:
- build
- test

build:
  stage: build
  script:
    - cmake -B build -S .
    - cmake --build build --target Producer
  artifacts:
    paths:
      - build/Producer

RunGTest:
  stage: test
  script:
    - cmake -B build -S .
    - cmake --build build --target GeneratorTest
    - build/Generator/GeneratorTest

RunCTest:
  stage: test
  script:
    - cmake -B build -S .
    - cd build
    - ctest --output-on-failure -j6

文件中定义了两个阶段:buildtest,以及三个作业:buildRunGTestRunCTest。其中作业 build 属于一个同名的阶段,另外两个作业属于阶段 test

script 小节下的命令就是一般的 Shell 命令。你可以认为是将它们逐行输入到 Shell 中。

我要特别提及 产物artifact 这个特性。在示例中我定义了二进制的 Producer 为作业 build 的产物。产物会被上传到 GitLab 服务器,并且可以从服务器的这个页面上被下载:

 title=

默认情况下,后续阶段的作业会自动下载先前阶段作业生成的所有产物。

你可以在 docs.gitlab.com 上查看 gitlab-ci.yml 参考指南。

总结

上面只是一个最基本的例子,让你对持续集成的一般原则有一个了解。再演示中我禁用了共享执行器,然而这才是 GitLab 的优势所在。你可以在一个干净的容器化的环境中构架、测试和部署程序。除了使用 GitLab 提供的免费执行器,你也可以用自己的容器作为执行器。当然还有更高阶的用法:用 Kubernetes 来协调调度执行者容器,让流水线适应大规模使用的使用场景。如需进一步了解,可以查看 about.gitlab.com

如果你使用的是 Fedora,需要注意的一点是目前 GitLab 执行者还不支持用 Podman 作为容器引擎。(LCTT 译注:Podman 是 Fedora 自带的容器引擎。)根据 议题 issue #27119,对 Podman 支持已将列上日程。(LCTT 译注:Podman 4.2 及以上版本增加了对于 GitLab 执行器的支持。)

把重复性的操作描述成作业,并将作业合并成流水线和阶段,可以让你跟踪它们的质量而不增加额外工作。。特别是在大型社区项目中,适当配置的 CI 可以告诉你提交的代码是否对项目有改善,为你接受或拒绝合并请求提供依据。

(题图:MJ/fb711c48-251a-4726-a41c-247370e5df25)


via: https://opensource.com/article/22/2/setup-ci-pipeline-gitlab

作者:Stephan Avenwedde 选题:lujun9972 译者:toknow-gh 校对:wxy

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

想了解 Linux 命令行的基础知识吗? 这是一个带有实践方法的教程系列。

Linux 终端可能令人生畏。这块黑色的屏幕只能使用命令。很容易让人感到迷失。

问题是 Linux 命令行是一个很大的话题。你只需使用命令即可管理整个系统。我的意思是,这就是系统管理员、网络工程师和许多其他工作的角色。

本教程集的目的不是让你做好工作准备。它旨在为你提供 Linux 命令行之旅的起点。 它将为你提供足够的能力来使用终端并了解一些基本知识,例如读取文件和编辑文件。

由于这只是开始,所以大部分教程都属于“文件操作”类别。这是大多数 Linux 书籍和课程的起点。

? 最好的学习方法就是自己动手。我以“实践模式”编写了这些教程,以便你可以在 Linux 系统上参照这些示例。本系列的每一章都包含一些示例练习来锻炼。跟着学、多练习,你很快就能熟练掌握 Linux 命令行。

第 0 章:熟悉终端和术语

当你对终端完全陌生时,即使在阅读教程时你也会发现自己迷失了方向。那是因为你应该知道至少你得理解最简单的术语。

下面的文章将帮助你解决其中的一些问题。虽然我分享的一些技巧可能对你来说有点超前或不太有用,但你会发现很多有用的东西。

19 个基础而重要的 Linux 终端技巧

第 1 章:更改目录

在第一章中,学习使用绝对路径和相对路径切换目录(文件夹)。这样,你就可以在 Linux 命令行中切换。

在 Linux 终端更改目录

第 2 章:创建目录

现在你已经了解了如何切换目录,接下来了解如何创建新目录。

在 Linux 终端创建目录

第 3 章:列出目录中的内容

你已经很好地掌握了目录。学习查看目录内部并查看它们有哪些文件和子目录。

在 Linux 终端列出目录

第 4 章:创建文件

关于目录已经足够了。了解在 Linux 命令行中创建新文件。

在 Linux 终端创建文件

第 5 章:读取文件

文件里面有什么?在本章中学习阅读文本文件。

在 Linux 终端读取文件

第 6 章:删除文件和目录

现在你已经学会了创建新文件和文件夹,是时候删除它们了。

在 Linux 终端删除文件和目录

第 7 章:复制文件和目录

在终端基础知识系列的本期中,继续进行文件操作并学习复制文件和目录。

在 Linux 终端复制文件和目录

第 8 章:移动文件和目录

移动文件操作就像剪切粘贴一样。你也可以使用相同的方法重命名文件和目录。

在 Linux 终端移动文件和目录

第 9 章:编辑文件

作为最后一个主要的文件操作,学习在命令行中编辑文本文件。

在 Linux 终端编辑文件

第 10 章:获取帮助

现在你已经了解了大量基本的 Linux 命令行操作,是时候了解如何在终端本身中获取帮助了。

在 Linux 终端获取帮助

从这往哪儿走?

现在你已经更熟悉终端并了解命令行中的基本文件操作,你可能想知道接下来要怎么做。

我建议你购买一本 Linux 书籍,例如《How Linux Works》。不过,你可以从你遇到的任何 Linux 书籍开始。这里有一些 我喜欢的几本 Linux 书籍

还不想花钱买书吗? 不用担心! 这里有一些 你可以下载的免费 Linux 电子书

Bash 脚本也是 Linux 学习中不可或缺的一部分。即使你不必编写 Shell 脚本,如果你了解基础知识,你也应该能够理解使用 Linux 时遇到的脚本。

Bash 基础知识系列

学无止境。不可能面面俱到。但是,如果你至少了解基础知识,就能帮助你更有效地使用系统。

? 希望你喜欢这个 Linux 终端教程系列。请在评论部分分享你的反馈。


via: https://itsfoss.com/linux-terminal-basics/

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

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