2021年12月

我是如何通过链接每个页面回到其原始源代码来保持我的网站开放的。

 title=

我是一个开源的超级粉丝。

我支持这项事业的一个小方法是从一开始就保持我的个人博客网站开放。我这样做的部分原因是让人们看到每个页面背后的变化历史。还因为当我开始使用 Jekyll 时,我没有找到很多开源的 Jekyll 博客可以学习。我希望保持我的网站开放并公开我的尝试和错误,可以为其他人节省很多时间。

Jekyll 的 page.path 变量

我实现这一目标的方法之一是将我发布的每一个条目链接到其原始的 MarkdownJekyll 的变量 中正好有一个需要的工具:page.path。这个变量包含每个页面的原始文件系统路径。官方的描述甚至强调了它的作用是链接回源!

在一篇文章的 Markdown 文件中打印 {{page.path }},可以得到类似这样的结果:

_posts/2021-10-10-example.md

假设该文章的源代码存在于这个路径:

https://example.com/ayushsharma-in/-/blob/master/_posts/2021-10-10-example.md

如果你在任何文章的 page.path 前加上 https://example.com/ayushsharma-in/-/blob/master/,它就会生成一个返回其源码的链接。

在 Jekyll 中,生成这个完整的链接看起来像这样:

<a href="{{ page.path | prepend: site.content.blog_source_prefix }}" target="_blank">View source</a>

就是这么简单。

Jekyll 和开放 Web

现代 Web 是一种错综复杂的多层次技术,但这并不意味着它必须让人摸不清。有了 Jekyll 的变量,你可以确保你的用户可以,了解更多关于你是如何建立你的网站的,如果他们愿意的话。

你可以在我的个人博客上看到真实的例子:滚动到底部的查看源码链接。

本文改编自 ayush sharma 的笔记,并经许可转载。


via: https://opensource.com/article/21/12/reveal-source-code-jinja2-git

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

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

谷歌称 NSO Pegasus 漏洞是“有史以来技术上最复杂的漏洞”

谷歌安全团队在研究 NSO Pegasus 木马时 大吃一惊,他们发现了一个从未见过的黑客利用方式,其中包括一个假装是 GIF 图像的 PDF 文件,文件中有一个虚拟 CPU,是由对像素进行布尔操作而构建。谷歌安全研究人员说“这是我们所见过的技术上最复杂的漏洞之一”。该漏洞有效地创造了“一种无法防御的武器”,这个漏洞在后台默默工作,甚至不要求目标点击链接或浏览恶意网站。“除了不使用设备之外,没有办法防止零点击漏洞的利用。”Pegasus 木马是通过 iMessage 进入设备的,黑客们只需要一个 AppleID 的电话号码就可以瞄准并植入窃听木马。

老王点评:抛开木马本身的恶意用途不说,这个木马的设计很有创意啊。

英特尔称,元宇宙需要 1000 倍的计算能力

英特尔加速计算系统和图形组 负责人说,我们今天的计算、存储和网络基础设施根本不足以实现元宇宙愿景,它需要几个数量级的强大计算能力,以更低的延迟在多种设备形式中使用。

老王点评:这岂不是可以多卖很多芯片出去?

龙芯处理器首次成功运行开源鸿蒙系统

慧睿思通宣布,首次成功将 OpenHarmony 移植到龙芯平台。Gitee 上的项目页面 显示,它基于最新的 OpenHarmony 3.0 版本,通过裁剪和精简版本,去掉不必要的组件,移植到了龙芯 1C300 处理器平台。由于 OpenHarmony 并不支持 MIPS 架构和基于 MIPS 的龙芯,此次移植克服了不少困难,但还有一些驱动未适配,网卡、FPU 功能等尚未实现。1C300 是一款高性价比的单芯片系统,内置浮点处理单元(FPU),支持多种类型内存,可应用于工控、物联网等领域。

老王点评:这对于鸿蒙和龙芯来说都是好事,但比我预期的要晚。

inix 是一个用于获取 Linux 系统信息的终端命令。能够获取软件和硬件的详细信息,比如计算机型号、内核版本、发行版号以及桌面环境等信息,甚至可以读取主存模块占用主板的哪块 RAM 卡槽等详细信息。

inxi 还可以用于监控系统中正在消耗 CPU 或者内存资源的进程。

在本文中,我将展示使用 inxi 命令获取系统信息的常用操作。

首先,我将展示下如何安装 inxi 命令。

在 Linux 上安装 inxi

inxi 是一个非常流行的工具,所以在大多数 Linux 发行版仓库中都可以轻松获取到该工具。不过还没有流行到各大 Linux 发行版默认就安装了该软件,所以需要我们自己安装一下。

在 Ubuntu/Debian 发行版系统中,安装命令:

sudo apt install inxi

在 Fedora/RHEL8-based 等发行版中,安装命令:

sudo dnf install -y epel-release
sudo dnf install -y inxi

Arch Linux 以及它的派生分支版本中,安装命令:

sudo pacman -S inxi

使用 inxi 获取系统信息

你可以在终端运行 inxi 命令来总体浏览下系统信息。

inxi

如下图所示,运行 inxi 命令可以简要浏览 CPU、时钟频率(speed/min/max)、内核(Kernel)、内存(Mem)、磁盘存储空间(Storage)、运行进程数量(Procs)以及 Shell 等信息。

The default output of inxi command

使用 -b 参数可以获取更为详细的系统信息。-b 参数会读取更多有关 CPU、驱动器、当前运行进程、主板 UEFI 版本、GPU、显示分辨率以及网络设备等详细信息。

inxi -b

Detailed hardware and software information about machine as reported by inxi

类似 -b 参数使用方法,inxi 还有许多其他的参数可供使用。你可以综合使用这些参数来获取你关心的信息。

让我们看几个实例。

获取音频设备信息

使用 -A 参数可以获取有关音频(输出)设备信息,包括物理音频(输出)设备、声音服务器以及音频驱动等详细信息。

inxi -A

Output of inxi command when “-A” flag is used

获取电池信息

使用 -B 参数,可以获取有关电池的信息(如果安装了电池)。你将读取到例如以 Wh(瓦特小时)为单位的当前电池电量和状况。

因为我使用的是台式机,所以这里仅仅作为一个示例,让我们看看使用 inxi -B 会输出什么。

Battery:   ID-1: BAT0 charge: 50.0 Wh (100.0%) condition: 50.0/50.0

获取 CPU 信息

-C 参数用于获取有关 CPU 的详细信息。比如包括 CPU 缓存大小、频率(单位 MHz,如果有多核,会显示每个核心的频率)、核心数、CPU 型号以及 CPU 是 32 位还是 64 位。

inxi -C

Detailed CPU information displayed by inxi

注意,如果是在虚拟机中使用 inix -Cinxi 读取到的 CPU 的最大和最小频率可能异常。下面是一个在四核 Debian 11 虚拟机中使用 -C 参数的示例输出。

An example output of using the “-C” flag in a Virtual Machine

获取更多的系统信息

使用 -F 参数可以获取更详细的系统信息(类似 -b 参数,但会更为详细)。几乎囊括了所有层次的系统信息。

inxi -F

获取图形显示相关信息

-G 参数可以获取和图形相关的信息。

它会显示所有的图形设备(GPU)、正在使用的 GPU 驱动(有助于检查是否使用 Nvidia 驱动还是 nouveau 驱动)、显示输出分辨率和驱动程序版本。

inxi -G

获取运行进程信息

-I 参数(大写字母 i)显示正在运行的进程、当前 shell 、内存(内存使用情况)以及 inxi 版本号等信息。

inxi get running process info

获取内存信息

可能你已经猜到了,-m 参数可以获取与内存相关的信息。

它读取了如总可用内存、最大内存容量(硬件或 CPU 支持的)、主板物理内存插槽数、是否存在 ECC、插入的内存插槽,以及枚举每个插槽中运行的内存模块的大小和运行速度等信息。

inxi -m

要使用 -m 参数获取更详细的信息,例如最大容量、每个插槽的内存模块信息等,需要超级用户权限。

sudo inxi -m

如果只是希望简短的输出内存信息,可以使用 -memory-short 参数。

使用 -memroy-short 参数将会只显示总内存以及当前已使用的内存量。

查看正在使用的包存储库

当使用 -r 参数时,会列举当前正在使用的包管理仓库或者更新本地仓库缓存中的所有存储库列表。

List of repositories in use

获取 RAID 设备信息

-R 参数用于获取所有 RAID 设备相关信息。

令人惊喜的是,它甚至显示了有关 ZFS RAID(默认情况下,多数 Linux 系统不包含该文件系统)的信息。它显示了 RAID 设备上文件系统的详细信息、状态(包含离线状态、总大小和可用大小等)。

inxi -R

在 Linux 终端中查询天气(对,这是可以的)

利用 -W 参数,你可以查询地球上任何地方的天气情况。

-W 参数后面,需要携带以下中的任一一个体现位置的信息

  • 邮政编码
  • 纬度
  • 城市(及州)、国家(不能含有空格,使用 “+” 替换空格)
inxi -W Baroda,India

Use of the “-W” flag with inxi followed by the city,country location descriptor

监控系统资源使用情况

inxi 除了提供有关已安装的硬件和驱动的信息外,还可以用于资源监控。

使用 -t 参数可以显示进程信息。你还可以可选项 -c (用于 CPU)和 -m(用于内存)。这些选项结合使用可以按指定数量列出进程信息。

下面是一些使用 -t 参数监控资源信息的示例。

inxi -t

命令 inxi -t 默认效果等同于 inxi -t cm5 的效果。

No difference in output of “inti -t” and “inxi -t cm5”

inxi -t cm10

偶尔需要监控资源使用情况时,该工具挺管用。如果需要更多的资源监控功能,则推荐使用 专用系统资源监控工具

总结

对于需要诊断计算机问题以及获取那些并不熟悉的软硬件信息的人来说,inxi 工具是十分便利且有用的。它能识别那些消耗 CPU、内存的进程;可以检查是否安装了合适的图形驱动程序、主板 UEFI/BIOS 是否需要更新等等。

事实上,在 inxi 开源社区论坛上,我们要求那些寻求帮助的成员提供 inxi 命令输出内容以便判断他们当前正在使用什么样的系统环境。

我知道也有其他的工具可以读取 Linux 上的硬件信息,不过 inxi 同时能读取硬件和软件信息,这也是我喜欢它的地方所在。

你使用 inxi 或者其他工具么?欢迎在评论区留言分享交流。


via: https://itsfoss.com/inxi-system-info-linux/

作者:Pratham Patel 选题:lujun9972 译者:jrglinux 校对:wxy

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

如果你拍摄的照片值得处理,那么你可以看看 Darktable 为你提供了什么。

 title=

很难说好照片是如何产生的。你必须在正确的时间出现在正确的地点。你必须准备好相机和构图的观察力。而这只是发生在相机里的部分。好的摄影还有另一个阶段,许多人都没有想到这一点。它曾经需要在 暗房 中的灯光和化学品,但在今天的数字工具中,后期制作发生在暗房软件中。最好的照片处理器之一是 Darktable,我在 2016 年写了一篇 介绍 Darktable 的文章。那篇文章已经过去五年了,所以我想我应该重新审视一下这个应用,写一写它的一个高级功能:蒙版。

自从我最初写下这篇文章以来,Darktable 并没有什么变化,在我看来,这是一个真正好的应用的标志之一。一个稳定的界面和持续的优秀性能是人们对软件的所有要求,而 Darktable 依旧熟悉而强大。如果你是 Darktable 的新手,请阅读我的 介绍性文章,了解基础知识。

什么是蒙版?

在照片处理中,蒙版被用来限制你对图像的调整,使其只限于图像的一个区域。

直观地说, 蒙版 mask 是视觉艺术中的一种技术,用一种材料来遮挡另一种材料。如果你曾经在你的公寓或房子里画过一面墙,你可能使用过 遮蔽胶带(也叫油漆工胶带)来保护相邻的墙壁或造型不受杂乱笔触的影响。完成后,你剥去遮蔽胶带,你就有了漂亮的油漆直线。

模板 stencil 也是遮蔽的一种形式。

 title=

(Seth Kenlon, CC BY-SA 4.0

这是一种在摄影中使用了一个世纪的技术,因此,数字摄影工具有一个类似的技术也是合理的。

在 Darktable 中使用蒙版

在这个例子中,我使用了 Flickr 用户 bcnewdemocrats 的创作共用照片。这是一张很好的照片,因为它有迷人的主题(两个孩子在他们非常耐心的父亲脸上涂抹 Holi 粉)。因为它是关于印度的五彩节,所以它在整个过程中都有色彩飞溅。

 title=

(bcnewdemocrats, CC BY-SA 4.0

这是一张不需要改进的照片,但并不是所有的调整都需要剧烈变化才能产生显著效果。

色彩校正滤镜提供了一个特别明显的调整。在彩色摄影中,尤其是人物摄影中,一个常见的修正是添加 琥珀色(一种偏红的橙色)。人类肤色受益于琥珀色,因为我们把这种颜色与温暖和生命联系起来。

点击 “ 开启 On ” 按钮,激活 Darktable 窗口右侧的色彩校正调整面板。将中心点向上和向右拖动,给照片增加琥珀色。

 title=

(Seth Kenlon, CC BY-SA 4.0

这样做之后,整张照片就会浸透在琥珀色里。

 title=

(Seth Kenlon, CC BY-SA 4.0

在色彩校正面板的底部,点击 “ drawn & parametric mask 绘制和参数化蒙版 ” 按钮。

 title=

(Seth Kenlon, CC BY-SA 4.0

在显示出来的工具栏中,你有几种蒙版形状可以选择。有圆、椭圆、路径、画笔、梯度,还有一个编辑现有蒙版的选项。为了简单起见,选择圆形,然后点击你的对象的脸。

 title=

(Seth Kenlon, CC BY-SA 4.0

你的色彩校正滤镜立即被限制在你的圆形蒙版的区域内,给你的主要对象一个令人愉快的琥珀色调,同时避开背景。

 title=

(Seth Kenlon, CC BY-SA 4.0

你可以通过切换色彩校正滤镜的关闭和开启来看到区别。

复用蒙版

如果你想只对被摄者的脸部应用另一个滤镜,你不必为那个新的滤镜再创建一个蒙版。当你创建一个蒙版时,它会被添加到位于 Darktable 界面左边的 “ 蒙版管理器 mask manager ” 面板上。默认的名字是非常通用的,但你可以双击每个蒙版的名字来重命名它。

 title=

(Seth Kenlon, CC BY-SA 4.0

当你应用一个新的滤镜时,不是选择一个新的蒙版形状来创建,而是点击 “ 不使用蒙版 no mask used ” 下拉菜单来查看现有的蒙版列表,以及之前在同一个滤镜上一起使用过的自动分组的蒙版。选择你想用于新滤镜的蒙版或蒙版组。

 title=

(Seth Kenlon, CC BY-SA 4.0

更多蒙版

在 Darktable 中还有很多其他类型的蒙版和蒙版功能可以探索。你可以用路径和画笔工具创建复杂的形状。你也可以完全放弃使用形状,并根据色度和亮度值将过滤器限制在图像的某个区域。你可以调整蒙版的模糊度和扩散度等。在 Darktable 中进行的所有调整中,最好的一点是它们都是动态的、非破坏性的。如果你改变主意,你可以随时关闭它们,而且你实际上从未影响过图像数据本身。这并不奇怪,因为 Darktable 确实是一个强大的摄影工具,如果你拍摄的照片值得处理,你就应该看看 Darktable 为你提供了什么。


via: https://opensource.com/article/21/12/open-source-photo-processing-darktable

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

带有有安全缺陷的 Log4J 的火星直升机

灵巧号火星直升机在 12 月 5 日的第 17 次飞行中飞行了 30 分钟,这创造了新的记录。但在飞行结束时,直升机向地面下降时,飞行中的数据流意外地被切断。而之前 Apache 基金会曾骄傲地宣称灵巧号的软件里有 Log4J,因此人们怀疑是不是火星直升机也受到了该漏洞影响。不过,Log4J 漏洞披露于 12 月 9 日,而飞行活动发生在 5 日,这两个事件 完全没有联系。即便有可能,利用火星上的 Log4J 漏洞的概率也微乎其微:要攻击机器,必须将特别制作的文本发送到硬件上,并由有漏洞的库记录下来。要发生这种情况,除非内部人才能做到。

老王点评:虽然现在的飞行器处于隔离的网络环境中,但是也不好说完全不受到安全漏洞影响。而更可怕的是,将来跨越太空的网络攻击可能离我们不远了。

明年有望在苹果 M1 芯片上见到日常可用的 Linux

旨在为苹果 M1 芯片提供 Linux 支持的 Asahi Linux 项目已经完成了 许多目标。Linux 5.17 带来了更多的苹果 M1 驱动,但现在的状况还没有为最终用户做好准备。他们已经支持了触摸板和键盘,对音频播放、耳机插孔等也提供了补丁。不仅是原始的 M1,还有对最近的 M1 Pro 和 M1 Max 的支持工作。但仍需解决的工作包括 CPU 频率缩放、系统睡眠和 CPU 深度睡眠支持、完善 NVMe 存储、WiFi 驱动等补丁,以及 GPU 加速和各种固件问题。2022 年有望完成更多工作,以便在苹果 M1 硬件上形成一个日常可用的 Linux 系统。

老王点评:这就是开源的力量。但是我好奇的是,为什么苹果一直装聋作哑。

明年勒索软件的状况将更糟糕

勒索软件现在是企业的主要威胁,而安全专家认为这种犯罪 在未来将更严重。在过去的几年里,勒索软件运营商从无组织的团伙和个人,发展到针对从中小企业到软件供应链的各个层面的、高度复杂的运营机构和各个独立团队间的合作。勒索软件感染不再是网络攻击的最终目标,已经成为旨在从受害组织那里获得勒索付款的一个组成部分。安全专家认为,勒索软件即服务(RaaS)将在 2022 年继续蓬勃发展,甚至可能进一步发展为一种订阅模式,即你付钱给犯罪团伙,让他们不要针对你。

老王点评:勒索软件攻击已经成为企业必须为之列支的风险之一了。

Python 中的 Beautiful Soup 库可以很方便的从网页中提取 HTML 内容。

 title=

今天我们将讨论如何使用 Beautiful Soup 库从 HTML 页面中提取内容,之后,我们将使用它将其转换为 Python 列表或字典。

什么是 Web 刮取,为什么我需要它?

答案很简单:并非每个网站都有获取内容的 API。你可能想从你最喜欢的烹饪网站上获取食谱,或者从旅游博客上获取照片。如果没有 API,提取 HTML(或者说 刮取 scraping 可能是获取内容的唯一方法。我将向你展示如何使用 Python 来获取。

并非所以网站都喜欢被刮取,有些网站可能会明确禁止。请于网站所有者确认是否同意刮取。

Python 如何刮取网站?

使用 Python 进行刮取,我们将执行三个基本步骤:

  1. 使用 requests 库获取 HTML 内容
  2. 分析 HTML 结构并识别包含我们需要内容的标签
  3. 使用 Beautiful Soup 提取标签并将数据放入 Python 列表中

安装库

首先安装我们需要的库。requests 库从网站获取 HTML 内容,Beautiful Soup 解析 HTML 并将其转换为 Python 对象。在 Python3 中安装它们,运行:

pip3 install requests beautifulsoup4

提取 HTML

在本例中,我将选择刮取网站的 Techhology 部分。如果你跳转到此页面,你会看到带有标题、摘录和发布日期的文章列表。我们的目标是创建一个包含这些信息的文章列表。

网站页面的完整 URL 是:

https://notes.ayushsharma.in/technology

我们可以使用 requests 从这个页面获取 HTML 内容:

#!/usr/bin/python3
import requests

url = 'https://notes.ayushsharma.in/technology'

data = requests.get(url)

print(data.text)

变量 data 将包含页面的 HTML 源代码。

从 HTML 中提取内容

为了从 data 中提取数据,我们需要确定哪些标签具有我们需要的内容。

如果你浏览 HTML,你会发现靠近顶部的这一段:

<div class="col">
  <a href="/2021/08/using-variables-in-jekyll-to-define-custom-content" class="post-card">
    <div class="card">
      <div class="card-body">
        <h5 class="card-title">Using variables in Jekyll to define custom content</h5>
        <small class="card-text text-muted">I recently discovered that Jekyll's config.yml can be used to define custom
          variables for reusing content. I feel like I've been living under a rock all this time. But to err over and
          over again is human.</small>
      </div>
      <div class="card-footer text-end">
        <small class="text-muted">Aug 2021</small>
      </div>
    </div>
  </a>
</div>

这是每篇文章在整个页面中重复的部分。我们可以看到 .card-title 包含文章标题,.card-text 包含摘录,.card-footer > small 包含发布日期。

让我们使用 Beautiful Soup 提取这些内容。

#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
from pprint import pprint

url = 'https://notes.ayushsharma.in/technology'
data = requests.get(url)

my_data = []

html = BeautifulSoup(data.text, 'html.parser')
articles = html.select('a.post-card')

for article in articles:

    title = article.select('.card-title')[0].get_text()
    excerpt = article.select('.card-text')[0].get_text()
    pub_date = article.select('.card-footer small')[0].get_text()

    my_data.append({"title": title, "excerpt": excerpt, "pub_date": pub_date})

pprint(my_data)

以上代码提取文章信息并将它们放入 my_data 变量中。我使用了 pprint 来美化输出,但你可以在代码中忽略它。将上面的代码保存在一个名为 fetch.py 的文件中,然后运行它:

python3 fetch.py

如果一切顺利,你应该会看到:

[{'excerpt': "I recently discovered that Jekyll's config.yml can be used to"
"define custom variables for reusing content. I feel like I've"
'been living under a rock all this time. But to err over and over'
'again is human.',
'pub_date': 'Aug 2021',
'title': 'Using variables in Jekyll to define custom content'},
{'excerpt': "In this article, I'll highlight some ideas for Jekyll"
'collections, blog category pages, responsive web-design, and'
'netlify.toml to make static website maintenance a breeze.',
'pub_date': 'Jul 2021',
'title': 'The evolution of ayushsharma.in: Jekyll, Bootstrap, Netlify,'
'static websites, and responsive design.'},
{'excerpt': "These are the top 5 lessons I've learned after 5 years of"
'Terraform-ing.',
'pub_date': 'Jul 2021',
'title': '5 key best practices for sane and usable Terraform setups'},

... (truncated)

以上是全部内容!在这 22 行代码中,我们用 Python 构建了一个网络刮取器,你可以在 我的示例仓库中找到源代码

总结

对于 Python 列表中的网站内容,我们现在可以用它做一些很酷的事情。我们可以将它作为 JSON 返回给另一个应用程序,或者使用自定义样式将其转换为 HTML。随意复制粘贴以上代码并在你最喜欢的网站上进行试验。

玩的开心,继续编码吧。

本文最初发表在作者个人博客上,经授权改编。


via: https://opensource.com/article/21/9/web-scraping-python-beautiful-soup

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

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