2022年8月

EPUB 文件是使用开放格式发布内容的好方法。

电子书提供了一种随时随地阅读书籍、杂志和其他内容的好方法。读者可以在长途飞行和乘坐火车时享受电子书打发时间。最流行的电子书文件格式是 EPUB 文件,它是“ 电子出版物 electronic publication ”的缩写。 EPUB 文件受到各种电子阅读器的支持,并且是当今电子书出版的有效标准。

EPUB 文件格式基于 XHTML 内容和 XML 元数据的开放标准,包含在 zip 存档中。由于一切都基于开放标准,我们可以使用通用工具来创建或检查 EPUB 文件。让我们探索一个 EPUB 文件以了解更多信息。《C 编程技巧和窍门指南》,于今年早些时候在 Opensource.com 上发布,提供 PDF 或 EPUB 格式。

因为 EPUB 文件是放在 zip 文件中的 XHTML 内容和 XML 元数据,所以你可以用 unzip 命令在命令行检查 EPUB:

$ unzip -l osdc_Jim-Hall_C-Programming-Tips.epub 
Archive: osdc_Jim-Hall_C-Programming-Tips.epub
Length Date Time Name
--------- ---------- ----- ----
20 06-23-2022 00:20 mimetype
8259 06-23-2022 00:20 OEBPS/styles/stylesheet.css
1659 06-23-2022 00:20 OEBPS/toc.xhtml
4460 06-23-2022 00:20 OEBPS/content.opf
44157 06-23-2022 00:20 OEBPS/sections/section0018.xhtml
1242 06-23-2022 00:20 OEBPS/sections/section0002.xhtml
22429 06-23-2022 00:20 OEBPS/sections/section0008.xhtml
[...]
9628 06-23-2022 00:20 OEBPS/sections/section0016.xhtml
748 06-23-2022 00:20 OEBPS/sections/section0001.xhtml
3370 06-23-2022 00:20 OEBPS/toc.ncx
8308 06-23-2022 00:21 OEBPS/images/image0011.png
6598 06-23-2022 00:21 OEBPS/images/image0009.png
[...]
14492 06-23-2022 00:21 OEBPS/images/image0005.png
239 06-23-2022 00:20 META-INF/container.xml
--------- -------
959201 41 files

这个 EPUB 包含很多文件,但其中大部分是内容。要了解 EPUB 文件是如何组合在一起的,请遵循电子书阅读器的流程:

1、电子书阅读器需要验证 EPUB 文件是否真的是 EPUB 文件。他们通过检查 EPUB 存档根目录中的 mimetype 文件来验证文件。该文件仅包含一行描述 EPUB 文件的 MIME 类型:

application/epub+zip

2、为了定位内容,电子书阅读器从 META-INF/container.xml 文件开始。这是一个简短的 XML 文档,指示在哪里可以找到内容。对于此 EPUB 文件,container.xml 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
  <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
    <rootfiles>
      <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
  </rootfiles>
</container>

为了使 container.xml 文件更易于阅读,我将单行拆分为多行,并添加了一些间距来缩进每行。XML 文件并不关心新行和空格等额外的空白,因此这种额外的间距不会影响 XML 文件。

3、container.xml 文件表示 EPUB 的根从 OEBPS 目录中的 content.opf 文件开始。OPF 扩展名是因为 EPUB 基于 “ 开放打包格式 Open Packaging Format ”,但 content.opf 文件实际上只是另一个 XML 文件。

4、content.opf 文件包含一个完整的 EPUB 内容清单,以及一个有序的目录,以及查找每一章或每一节的引用。这个 EPUB 的 content.opf 文件很长,因此我将在此仅展示一小部分作为示例。

XML 数据包含在 <package> 块中,该块本身具有 <metadata> 块、<manifest> 数据和包含电子书目录的 <spine> 块:

<?xml version="1.0" encoding="UTF-8"?>
<package unique-identifier="unique-identifier" version="3.0" xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:opf="http://www.idpf.org/2007/opf">
  <metadata>
    <dc:identifier id="unique-identifier">osdc002</dc:identifier>
    <dc:title>Tips and Tricks for C Programming</dc:title>
    <dc:creator>Jim Hall</dc:creator>
    <dc:language>English</dc:language>
    <meta property="dcterms:modified">2022-06-23T12:09:13Z</meta>
    <meta content="LibreOffice/7.3.0.3$Linux_X86_64 LibreOffice_project/0f246aa12d0eee4a0f7adcefbf7c878fc2238db3 (libepubgen/0.1.1)" name="generator"/>
  </metadata>
  <manifest>
    ...
    <item href="sections/section0001.xhtml" id="section0001" media-type="application/xhtml+xml"/>
    <item href="images/image0003.png" id="image0003" media-type="image/png"/>
    <item href="styles/stylesheet.css" id="stylesheet.css" media-type="text/css"/>
    <item href="toc.ncx" id="toc.ncx" media-type="application/x-dtbncx+xml"/>
    ...
  </manifest>
  <spine toc="toc.ncx">
    <itemref idref="section0001"/>
    <itemref idref="section0002"/>
    <itemref idref="section0003"/>
    ...
  </spine>
</package>

你可以把数据匹配起来,看看在哪里可以找到每个部分。EPUB 阅读器就是这样做的。例如,目录中的第一项引用了 section0001,它在清单中被定义为位于 sections/section0001.xhtml 文件中。该文件的名称不需要与 idref 条目相同,但 LibreOffice Writer 的自动程序就是这样创建该文件的。(你可以在元数据中看到,这个 EPUB 是在 Linux 上用 LibreOffice 7.3.0.3 版本创建的,它可以将内容导出为 EPUB 文件。)

EPUB 格式

EPUB 文件是一种使用开放格式发布内容的好方法。EPUB 文件格式是 XML 元数据与 XHTML 内容,包含在一个 zip 文件内。虽然大多数技术作家使用工具来创建 EPUB 文件,因为 EPUB 是基于开放标准,意味着你可以使用其他方式创建自己的 EPUB 文件。


via: https://opensource.com/article/22/8/epub-file

作者:Jim Hall 选题:lkxed 译者:geekpi 校对:wxy

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

Python 虽然是最受欢迎的编程语言,但是找工作还是要会点 SQL

在 IEEE 的最新年度调查榜单中,Python 名列榜首,然后是三种 C 语言的变体(C、C++ 和 C#),接着是 Java、SQL 和 JavaScript。但涉及到找工作时,SQL 爬到了列表的顶端,其次是 Java、Python。该榜单的编辑称,“SQL 信号的强度并不是因为有很多雇主只寻找 SQL 程序员,……他们想要一种特定的语言加上 SQL。”

消息来源:The Register
老王点评:复杂的 SQL 不会,简单的 SQL 总是会一点的,所以,请在简历上大大的写上 SQL。

微软发现一个 ChromeOS 的高危漏洞

微软在 ChromeOS 中发现了一个漏洞,并给它打出了 9.8 的评分。在报告给谷歌后,该漏洞不到一周就得到了修复,只用了一个月就提供给了用户。这个问题源于 D-Bus,它是 Linux 中使用的一种进程间通信机制,使用了一个标准库中的典型的危险函数 strcpy(),稍有安全经验的 C 程序员都知道这个函数容易出现缓冲区溢出安全漏洞。这个漏洞为安全研究人员得到了 25000 美元的奖金。比较有趣的是,以往经常是谷歌的 Project Zero 团队提醒微软的产品漏洞,并且,如果在三个月内没修复就会不管不顾地公开漏洞细节。有时候让微软特别上火。

消息来源:The Register
老王点评:居然会犯这么低级的错误,这钱也太好挣了吧 —— 我寻思是不是写个扫描器,当这些有钱的企业的代码一旦发布,就触发对这种经典漏洞的扫描。

利用手机陀螺仪窃取物理隔离系统的数据

物理隔离在物理上是隔离的,用于对安全要求特别高的环境中,它无法与其他计算机或网络设备进行无线或物理连接。之前有研究利用物理隔离系统上的扬声器发出特定频率的声波,从而通过手机接受声波而窃取数据。现在安全专家发现陀螺仪也可用于此用途。陀螺仪用于检测智能手机的旋转速度,被广泛认为是一种安全的传感器,因而 iOS 或 Android 没有提供阻止访问的选项。安全专家利用这种方法,可以在“几米远”的范围内从物理隔离的计算机中窃取敏感信息。这些听不见的频率会让陀螺仪产生微小机械振荡,从而将其转换为数据。

消息来源:Tech Crunch
老王点评:真是无孔不入,我觉得这种物理隔离环境就不该让人带手机进去。?

Spotify 不需要介绍。它是最流行的音乐流媒体服务。

你可以 在 Web 浏览器中播放 Spotify,但如果你经常使用它,使用桌面应用会是一个更好的选择。

为什么呢?因为你可以用媒体键控制播放,得到歌曲的通知,而且不需要担心不小心关闭浏览器标签或窗口。桌面客户端给人一种完整的体验。

Spotify 为 Ubuntu 和 Debian 提供了一个仓库。但在 Arch Linux 上安装 Spotify 呢?

实际上,在 Arch Linux 上获得 Spotify 的桌面应用更加简单。只需使用这个命令:

sudo pacman -Syu spotify-launcher

这就是在基于 Arch 的 Linux 发行版上安装 Spotify 的众多方法之一,如 Manjaro、Endeavour OSGaruda Linux 等。

在本教程中,我将讨论以下安装 Spotify 的方法:

  • 使用 pacman(你已经在上面看到了,但我们会更深入地挖掘)。
  • 使用 Pamac(Manjaro的软件包管理器)进行安装
  • 使用 Flatpak(通用打包格式)进行安装
  • 使用 Snap(Spotify 团队的官方包)。

方法 1:使用 pacman 安装 Spotify

Spotify 可在 Arch Linux 的社区仓库中 找到。它实际上是 Spotify 提供的 APT 仓库的 Rust 实现。

打开你的终端,按以下方式 使用 pacman 命令

sudo pacman -Syu spotify-launcher

安装后,从应用菜单中启动它,并登录开始收听。

Spotify on Arch Linux

输入下面的命令,将其连同其依赖关系和配置文件一起删除。

sudo pacman -Rns spotify-launcher

方法 2:使用 Pamac 安装 Spotify

如果你使用 Manjaro 或者 在你的系统中安装了 Pamac,你可以用它来图形化安装 Spotify。

从应用菜单中打开添加/删除软件。点击左上角的搜索图标,搜索 Spotify。然后,选择名为 spotify-launcher 的软件包,并点击应用进行安装,如下图所示。

Using Pamac to install Spotify

你也可以在安装后取消选择该软件包,并点击应用来删除它。

使用 Pamac CLI

是的,Pamac 也有一个命令行界面,你可以通过以下方式使用它来获得 Spotify。

pamac install spotify-launcher

要删除,使用:

pamac remove spotify-launcher

方法 3:使用 Flatpak 安装 Spotify

许多用户喜欢使用 Flatpak 安装专有应用,因为它提供了沙盒。

在终端输入以下命令来更新你的系统并安装 Flatpak(如果你还没有)。

sudo pacman -Syu flatpak

然后,使用下面的命令启用 Flathub 仓库

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

现在,通过输入下面的命令安装 Spotify。

flatpak install spotify

要删除 Spotify 的 Flatpak 包,你可以使用下面的命令。

flatpak remove spotify

方法 4:使用 Snap 安装 Spotify

我知道很多人对 Snap 打包格式的“封闭性”非常反感。然而,Spotify 官方提供了一个 Snap 包。你可以从 Spotify 的开发者那里得到它。

如果你的系统支持 Snap 包,请使用以下命令:

sudo snap install spotify

如果你以后想删除它,使用这个命令:

sudo snap remove spotify

总结

第一个方法中讨论的 Arch 包是由 kpcyrd 开发和维护的。你可以在 这里 查看源代码。

如果你喜欢 Arch Linux 并想支持它,请考虑向该项目捐款。所有的工作都是由社区成员完成的,他们是无偿的志愿者。

如果你在 Arch 上安装 Spotify 有任何问题,请告诉我。


via: https://itsfoss.com/install-spotify-arch/

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

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

布莱恩·克尼汉在 80 岁的时候还在积极为他的原始项目 AWK 增加代码贡献。这真是鼓舞人心!

这位 80 岁的计算机科学家曾提出 “Unix” 这一名字,在 AWK 代码中加入了 Unicode 支持

布莱恩·克尼汉 Brian Kernighan 因其与 Unix 的创造者 肯·汤普森 Ken Thompson 丹尼斯·里奇 Dennis Ritchie 一起的工作而广为人知。他对 Unix 的发展做出了重大贡献。

不仅如此,布莱恩·克尼汉还提出了 “Unix” 这个名字,并创造了 “Hello, world” 作为程序的测试短语。

他也是《C 编程语言》一书的共同作者(另一位是丹尼斯·里奇)。因此,可以说他是你所知道的关于 Unix、Linux、BSD 和 C 编程语言的演变的重要组成部分。

而且,作为一位如今已 80 岁的老人家,他似乎投入了一些时间来为 AWK(一种他在上世纪 70 年代共同创造的脚本语言)增加了一个新的功能。

? 这真是妙极了,对吗?而且,听起真是鼓舞人心!

注:AWK 仍然是一个处理文本和提取数据的强大工具,忠实于它的最初目的。如果你感到好奇,你可以在 freeCodeCamp 上了解更多关于它的信息。

为 AWK 添加 Unicode 支持

最近,The Register 通过一篇发表在 YouTube 上的近期采访,发现了这个功能的增加。

从技术上讲,这项贡献早在几个月前就有了,但现在它才得到人们的关注。

当然,这个功能的增加对很多人来说可能不是什么大事。但是,它背后的努力,以及谁贡献了它,就有了天壤之别。

此外,有趣的是,他并不完全了解 Git 的工作原理。所以,考虑到这一点,我认为他在这里的提交做得相当好。

在这个提交 “附上 BWK 的邮件 - onetrueawk/awk@9ebe940” 中,他提到:

一旦我搞清楚了(并做了一些检查,我将尝试提交一个拉取请求。我希望我更了解 git,但尽管有你的帮助,我仍然没能正确地理解,所以这可能需要一段时间。

如果你对 Unix 的原始创造者和贡献者以及一路走来的许多重要创新有好奇心,我建议你观看上面链接的采访。

你也可以在 普林斯顿大学网站 上查看他的更多工作和最近的书籍。

? 那么,你对这位 80 岁的 Unix 传奇人物的代码贡献有何看法?你有什么特别佩服他的地方吗?请在下面的评论中分享你的想法。


via: https://news.itsfoss.com/unix-awk-unicode/

作者:Ankush Das 选题:lkxed 译者:wxy 校对:wxy

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

Tornado Cash 代码在 GitHub 上重新上传

美国财政部本月早些时候宣布制裁混币器 Tornado Cash,禁止美国个人或组织与 Tornado Cash 有任何交易往来。GitHub 随即下架了该代码库,删除了开发者账号。荷兰还逮捕了一名参与它的开发的开发者。本周,美国约翰霍普金斯大学计算机科学教授 Matthew Green 以教学和研究的目的在 GitHub 上重新上传了 Tornado Cash 代码。电子前哨基金会(EFF)宣布将代表 Green 教授捍卫发布源代码的权利。EFF 称美国宪法第一修正案保护了 GitHub 托管代码的权利,也保护了 Green 教授重新发布代码的权利。

消息来源:EFF
老王点评:这让我想起来当年 PGP 源代码以出版书籍的方式被带出美国的事情。

亚马逊使用为将来保留的 IPv4 240/4 地址段

称之为 E 类地址的 240/4(240.0.0.0 - 255.255.255.255)被保留供未来使用。但 IPv4 地址资源的稀缺促使 IETF 开始讨论使用这些地址空间。主要操作系统从 2008 年起就支持将 240/4 地址空间作为单播地址使用。调查发现,亚马逊等公司已经在没有和国际互联网机构协调的情况下,在其 AS 内使用 240/4 地址块。

消息来源:RIPE
老王点评:就算是这几亿个 IP 地址释放出来,也很快就会耗尽,所以倒不如像现在这样,当成私有地址使用好了。

美科技巨头收集了大量用户数据,谷歌最多

研究人员分析了谷歌、苹果、Facebook、亚马逊和 Twitter 等主要科技公司收集的用户的大量敏感数据。其中,谷歌从用户那里收集的数据最多,有 39 种。接下来是 Twitter,24 种;亚马逊,23 种;Facebook,14 种。排名最后的是苹果,它收集了 12 种。报告称,“用户没有耐心、时间或精力来发现网站存储了哪些信息,以及如何利用这些信息来获取利益。这意味着,用户通过接受隐私政策,能够让这些公司获取他们所需要的所有信息。”

消息来源:Stock Apps
老王点评:这些商业公司不收集用户隐私反而会是奇怪的事情,所以,现在开始比谁最过分了,不出预料,果然是广告公司谷歌拔的头筹。

Linux cheat 命令是一个实用程序,可以用来搜索和显示你想要使用的命令的使用示例。

互联网上有很多关于 Linux 和开源的信息,但是当你想要深入工作,通常需要一份便捷的文档。早在 Linux 出现之前的 Unix 系统中,就有 man(“manual” 的缩写)和 info 命令了,二者都会显示命令、配置文件、系统调用等的官方项目文档。

关于 maninfo 页面是对知晓如何使用工具的用户的有用提醒,还是为初次使用的用户提供介绍存在争议。不管怎样,maninfo 页面介绍了工具以及如何使用该工具,很少涉及特定任务以及如何完成它们。正是出于这个原因,开发了 cheat 命令。

例如,设想你想不起来如何 解压 tar 压缩包文件man 页面会给你展示所有的选项,但需要你将这些信息转换为命令:

tar -A [OPTIONS] ARCHIVE ARCHIVE
tar -c [-f ARCHIVE] [OPTIONS] [FILE...]
tar -d [-f ARCHIVE] [OPTIONS] [FILE...]
tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]
tar -r [-f ARCHIVE] [OPTIONS] [FILE...]
tar -u [-f ARCHIVE] [OPTIONS] [FILE...]
tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]

这确实是一些用户需要的,但是也使一些用户感到困惑。相比之下,cheat 命令会罗列常用命令:

$ cheat tar

# To extract an uncompressed archive:
tar -xvf /path/to/foo.tar

# To extract a .tar in specified Directory:
tar -xvf /path/to/foo.tar -C /path/to/destination/

# To create an uncompressed archive:
tar -cvf /path/to/foo.tar /path/to/foo/

# To extract a .tgz or .tar.gz archive:
tar -xzvf /path/to/foo.tgz
tar -xzvf /path/to/foo.tar.gz
[...]

这真是雪中送炭!

Linux Cheat 命令

cheat 命令是一个实用程序,可以用来搜索和显示你想要使用的命令的使用示例。如大多数 Unix 命令一样,同一个概念有多种不同的实现方式,它包括一个 使用 Go 编写 的和一个由我帮助维护的 仅用 100 行 Bash 编写 的两个版本。

若要安装 Go 版本的,下载 最新版 并将它放在某个 路径 中,例如 ~/.local/bin//usr/local/bin 中。若安装 Bash 版本,下载最新版并运行 install-cheat.sh 脚本:

$ sh ./install-cheat.sh

如需配置后安装,请使用 自动工具(Autotools):

$ aclocal ; autoconf
$ automake --add-missing ; autoreconf
$ ./configure --prefix=$HOME/.local
$ make
$ make install

在 Linux 中安装 Cheat 程序

Cheat 只是包含常用命令的纯文本文件。该程序可以从 github.com/cheat/cheatsheets 获得。当你第一次运行命令时,Go 版本会自动为你下载支持列表。如果你使用 Bash 版本,用 --fetch 选项可以下载支持列表:

$ cheat --fetch

man 一样,你的系统上可以有多个备忘单集合。 Go 版本的 cheat 使用 YAML 配置文件来定义每个集合的位置。Bash 版本在安装过程中定义了路径,默认下载 github.com/cheat/cheatsheets 集合以及 opensource.com 自己的 gitlab.com/opensource.com/cheatsheets 集合。

列出 Cheat 支持项目

使用 --list 选项即可查看 cheat 支持的项目:

$ cheat --list
7z
ab
acl
alias
ansi
ansible
ansible-galaxy
ansible-vault
apk
[...]

使用 Cheat 查看 Linux 命令

使用 cheat 查看命令如同使用 maninfo 查看一样简单。只需要输入你需要查询的命令即可:

$ cheat alias

# To show a list of your current shell aliases:
alias

# To alias `ls -l` to `ll`:
alias ll='ls -l'

默认情况下,cheat 命令会使用你的 环境变量 PAGER 中指定的分页器。你可以在运行 cheat 命令前改写 PAGER 变量值,暂时修改环境变量。

$ PAGER=most cheat less

如果你只是想在没有 PAGER 的情况下将 cheat 输出 到终端里,在 Bash 版中有 --cat 选项可以使用:

$ cheat --cat less

这并不是作弊

cheat 系统抓住了要害,你不必拼凑有关如何使用命令的线索,你只需按照示例进行操作即可。当然,对于复杂的命令,它不是深入研究实际文档的捷径,但为了快速借用,它还是可以的。

甚至你可以通过将文件放入其中一个备忘单集合中,来创建自己的备忘单。好消息是,因为这些项目是开源的,所以你可以将你的个人备忘单贡献给 GitHub 集合。另一个好消息是,当有新的 opensource.com 备忘单 版本发布时,我们将从现在开始包含纯文本版本,以便你可以将其添加到你的收藏中。

该命令称为 “ 作弊 cheat ”,但正如任何 Linux 用户都会向你保证的那样,它实际上并不是作弊。它只是以开源的方式工作得更巧妙。


via: https://opensource.com/article/22/6/linux-cheat-command

作者:Seth Kenlon 选题:lkxed 译者:Donkey 校对:wxy

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