理解 Linux 链接(一)
链接是可以将文件和目录放在你希望它们放在的位置的另一种方式。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/30/235607uc4dohmhoal96u28.jpg">Media</a>除了 cp 和 mv 这两个我们在<a href="https://www.linux.com/blog/2018/8/linux-beginners-moving-things-around">本系列的前一部分</a>中详细讨论过的,链接是可以将文件和目录放在你希望它们放在的位置的另一种方式。它的优点是可以让你同时在多个位置显示一个文件或目录。如前所述,在物理磁盘这个级别上,文件和目录之类的东西并不真正存在。文件系统是为了方便人类使用,将它们虚构出来。但在磁盘级别上,有一个名为分区表partition table的东西,它位于每个分区的开头,然后数据分散在磁盘的其余部分。虽然有不同类型的分区表,但是在分区开头的那个表包含的数据将映射每个目录和文件的开始和结束位置。分区表的就像一个索引:当从磁盘加载文件时,操作系统会查找表中的条目,分区表会告诉文件在磁盘上的起始位置和结束位置。然后磁盘头移动到起点,读取数据,直到它到达终点,您看:这就是你的文件。硬链接硬链接只是分区表中的一个条目,它指向磁盘上的某个区域,表示该区域<strong>已经被分配给文件</strong>。换句话说,硬链接指向已经被另一个条目索引的数据。让我们看看它是如何工作的。打开终端,创建一个实验目录并进入:<pre class="prettyprint linenums">mkdir test_dircd test_dir</pre>使用 <a href="https://www.linux.com/…
链接是可以将文件和目录放在你希望它们放在的位置的另一种方式。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/30/235607uc4dohmhoal96u28.jpg">Media</a>除了 cp 和 mv 这两个我们在<a href="https://www.linux.com/blog/2018/8/linux-beginners-moving-things-around">本系列的前一部分</a>中详细讨论过的,链接是可以将文件和目录放在你希望它们放在的位置的另一种方式。它的优点是可以让你同时在多个位置显示一个文件或目录。如前所述,在物理磁盘这个级别上,文件和目录之类的东西并不真正存在。文件系统是为了方便人类使用,将它们虚构出来。但在磁盘级别上,有一个名为分区表partition table的东西,它位于每个分区的开头,然后数据分散在磁盘的其余部分。虽然有不同类型的分区表,但是在分区开头的那个表包含的数据将映射每个目录和文件的开始和结束位置。分区表的就像一个索引:当从磁盘加载文件时,操作系统会查找表中的条目,分区表会告诉文件在磁盘上的起始位置和结束位置。然后磁盘头移动到起点,读取数据,直到它到达终点,您看:这就是你的文件。硬链接硬链接只是分区表中的一个条目,它指向磁盘上的某个区域,表示该区域<strong>已经被分配给文件</strong>。换句话说,硬链接指向已经被另一个条目索引的数据。让我们看看它是如何工作的。打开终端,创建一个实验目录并进入:<pre class="prettyprint linenums">mkdir test_dircd test_dir</pre>使用 <a href="https://www.linux.com/…
如何在 Linux 中一次重命名多个文件
在本教程中,我们将学习使用 Linux 中的 mmv 命令一次重命名多个文件。 此命令用于在类 Unix 操作系统中使用标准通配符批量移动、复制、追加和重命名文件。Media
via https://linux.cn/article-10174-1.html
在本教程中,我们将学习使用 Linux 中的 mmv 命令一次重命名多个文件。 此命令用于在类 Unix 操作系统中使用标准通配符批量移动、复制、追加和重命名文件。Media
via https://linux.cn/article-10174-1.html
如何在 Linux 中一次重命名多个文件
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/092758rlc51ctl3tlcr9cl.png">Media</a>你可能已经知道,我们使用 mv 命令在类 Unix 操作系统中重命名或者移动文件和目录。 但是,mv 命令不支持一次重命名多个文件。 不用担心。 在本教程中,我们将学习使用 Linux 中的 mmv 命令一次重命名多个文件。 此命令用于在类 Unix 操作系统中使用标准通配符批量移动、复制、追加和重命名文件。在 Linux 中一次重命名多个文件mmv 程序可在基于 Debian 的系统的默认仓库中使用。 要想在 Debian、Ubuntu、Linux Mint 上安装它,请运行以下命令:<pre class="prettyprint linenums">$ sudo apt-get install mmv</pre>我们假设你在当前目录中有以下文件。<pre class="prettyprint linenums">$ lsa1.txt a2.txt a3.txt</pre>现在,你想要将所有以字母 “a” 开头的文件重命名为以 “b” 开头的。 当然,你可以在几秒钟内手动执行此操作。 但是想想你是否有数百个文件想要重命名? 这是一个非常耗时的过程。 这时候 mmv 命令就很有帮助了。要将所有以字母 “a” 开头的文件重命名为以字母 “b” 开头的,只需要运行:<pre class="prettyprint linenums">$ mmv a\* b\#1</pre>让我们检查一下文件是否都已经重命名了。<pre class="prettyprint linenums">$ lsb1.txt b2.txt b3.txt</pre>如你所见,所有以字母 “a” 开头的文件(即 a1.txt、a2.txt、a3.txt)都重命名为 b1.txt、b2.txt、b3.txt。<strong>解释</strong>在上面的例子中,第一个参数(a\*)是 “from” 模式,第二个参数是 “to” 模式(b\#1)。根据上面的例子,mmv 将查找任何以字母 “a” 开头的文件名,并根据第二个参数重命名匹配的…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/092758rlc51ctl3tlcr9cl.png">Media</a>你可能已经知道,我们使用 mv 命令在类 Unix 操作系统中重命名或者移动文件和目录。 但是,mv 命令不支持一次重命名多个文件。 不用担心。 在本教程中,我们将学习使用 Linux 中的 mmv 命令一次重命名多个文件。 此命令用于在类 Unix 操作系统中使用标准通配符批量移动、复制、追加和重命名文件。在 Linux 中一次重命名多个文件mmv 程序可在基于 Debian 的系统的默认仓库中使用。 要想在 Debian、Ubuntu、Linux Mint 上安装它,请运行以下命令:<pre class="prettyprint linenums">$ sudo apt-get install mmv</pre>我们假设你在当前目录中有以下文件。<pre class="prettyprint linenums">$ lsa1.txt a2.txt a3.txt</pre>现在,你想要将所有以字母 “a” 开头的文件重命名为以 “b” 开头的。 当然,你可以在几秒钟内手动执行此操作。 但是想想你是否有数百个文件想要重命名? 这是一个非常耗时的过程。 这时候 mmv 命令就很有帮助了。要将所有以字母 “a” 开头的文件重命名为以字母 “b” 开头的,只需要运行:<pre class="prettyprint linenums">$ mmv a\* b\#1</pre>让我们检查一下文件是否都已经重命名了。<pre class="prettyprint linenums">$ lsb1.txt b2.txt b3.txt</pre>如你所见,所有以字母 “a” 开头的文件(即 a1.txt、a2.txt、a3.txt)都重命名为 b1.txt、b2.txt、b3.txt。<strong>解释</strong>在上面的例子中,第一个参数(a\*)是 “from” 模式,第二个参数是 “to” 模式(b\#1)。根据上面的例子,mmv 将查找任何以字母 “a” 开头的文件名,并根据第二个参数重命名匹配的…
MidnightBSD 发布 1.0!
Lucas 创建了 MightnightBSD,这成为桌面用户和 BSD 新手的一个选择。他想创造一个能让人们快速体验 BSD 桌面的东西。他认为其他发行版过于关注服务器市场。Media
via https://linux.cn/article-10175-1.html
Lucas 创建了 MightnightBSD,这成为桌面用户和 BSD 新手的一个选择。他想创造一个能让人们快速体验 BSD 桌面的东西。他认为其他发行版过于关注服务器市场。Media
via https://linux.cn/article-10175-1.html
MidnightBSD 发布 1.0!
几天前,Lucas Holt 宣布发布 MidnightBSD 1.0。让我们快速看一下这个新版本中包含的内容。什么是 MidnightBSD?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/093807l88xtkvfcqob3tlk.jpg">MidnightBSD</a><a href="https://www.midnightbsd.org/">MidnightBSD</a> 是 FreeBSD 的一个分支。Lucas 创建了 MightnightBSD,这成为桌面用户和 BSD 新手的一个选择。他想创造一个能让人们快速体验 BSD 桌面的东西。他认为其他发行版过于关注服务器市场。MidnightBSD 1.0 中有什么?根据<a href="https://www.midnightbsd.org/notes/">发布说明</a>(<a href="https://www.youtube.com/embed/-rlk2wFsjJ4">视频</a>),1.0 中的大部分工作都是更新基础系统,改进包管理器和更新工具。新版本与 FreeBSD 10-Stable 兼容。Mports(MidnightBSD 的包管理系统)已经升级支持使用一个命令安装多个包。<code>mport upgrade</code> 命令已经修复。Mports 现在会跟踪已弃用和过期的包。它还引入了新的包格式。其他变化包括:现在支持 <a href="https://itsfoss.com/what-is-zfs/">ZFS</a> 作为启动文件系统。以前,ZFS 只能用于附加存储。 * 支持 NVME SSD。 * AMD Ryzen 和 Radeon 的支持得到了改善。 * Intel、Broadcom 和其他驱动程序已更新。 * 已从 FreeBSD 移植 bhyve 支持。 * 传感器框架已被删除,因为它导致锁定问题。 * 删除了 Sudo 并用 OpenBSD 中的 <a href="https://man.openbsd.org/doas">doas</a> 替换。 * 增加了对 Microsoft hyper-v 的支持。升级之前如果你当前是 MidnightBSD 的用户或正在考虑尝试新版本,那么还是再等一会。Lucas 目前正在重建软件包以支持新的软件包格式和工具。他还计划在未来几个月内升级软件包和移植桌面环境。他目前正致力于移植 Firefox 52 ESR,因为它是最后一È…
几天前,Lucas Holt 宣布发布 MidnightBSD 1.0。让我们快速看一下这个新版本中包含的内容。什么是 MidnightBSD?<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/093807l88xtkvfcqob3tlk.jpg">MidnightBSD</a><a href="https://www.midnightbsd.org/">MidnightBSD</a> 是 FreeBSD 的一个分支。Lucas 创建了 MightnightBSD,这成为桌面用户和 BSD 新手的一个选择。他想创造一个能让人们快速体验 BSD 桌面的东西。他认为其他发行版过于关注服务器市场。MidnightBSD 1.0 中有什么?根据<a href="https://www.midnightbsd.org/notes/">发布说明</a>(<a href="https://www.youtube.com/embed/-rlk2wFsjJ4">视频</a>),1.0 中的大部分工作都是更新基础系统,改进包管理器和更新工具。新版本与 FreeBSD 10-Stable 兼容。Mports(MidnightBSD 的包管理系统)已经升级支持使用一个命令安装多个包。<code>mport upgrade</code> 命令已经修复。Mports 现在会跟踪已弃用和过期的包。它还引入了新的包格式。其他变化包括:现在支持 <a href="https://itsfoss.com/what-is-zfs/">ZFS</a> 作为启动文件系统。以前,ZFS 只能用于附加存储。 * 支持 NVME SSD。 * AMD Ryzen 和 Radeon 的支持得到了改善。 * Intel、Broadcom 和其他驱动程序已更新。 * 已从 FreeBSD 移植 bhyve 支持。 * 传感器框架已被删除,因为它导致锁定问题。 * 删除了 Sudo 并用 OpenBSD 中的 <a href="https://man.openbsd.org/doas">doas</a> 替换。 * 增加了对 Microsoft hyper-v 的支持。升级之前如果你当前是 MidnightBSD 的用户或正在考虑尝试新版本,那么还是再等一会。Lucas 目前正在重建软件包以支持新的软件包格式和工具。他还计划在未来几个月内升级软件包和移植桌面环境。他目前正致力于移植 Firefox 52 ESR,因为它是最后一È…
用 350 行代码从零开始,将 Lisp 编译成 JavaScript
我们将会在本篇文章中看到从零开始实现的编译器,将简单的类 LISP 计算语言编译成 JavaScript。Media
via https://linux.cn/article-10176-1.html
我们将会在本篇文章中看到从零开始实现的编译器,将简单的类 LISP 计算语言编译成 JavaScript。Media
via https://linux.cn/article-10176-1.html
用 350 行代码从零开始,将 Lisp 编译成 JavaScript
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/101755m9sy6j1zdhzh9gh2.jpg">Media</a>我们将会在本篇文章中看到从零开始实现的编译器,将简单的类 LISP 计算语言编译成 JavaScript。完整的源代码在 <a href="https://gist.github.com/soupi/d4ff0727ccb739045fad6cdf533ca7dd">这里</a>。我们将会:自定义语言,并用它编写一个简单的程序实现一个简单的解析器组合器为该语言实现一个解析器为该语言实现一个美观的打印器为我们的用途定义 JavaScript 的一个子集实现代码转译器,将代码转译成我们定义的 JavaScript 子集把所有东西整合在一起开始吧!1、定义语言Lisp 族语言最迷人的地方在于,它们的语法就是树状表示的,这就是这门语言很容易解析的原因。我们很快就能接触到它。但首先让我们把自己的语言定义好。关于我们语言的语法的范式(BNF)描述如下:<pre class="prettyprint linenums">program ::= exprexpr ::= <integer> | <name> | ([<expr>])</pre>基本上,我们可以在该语言的最顶层定义表达式并对其进行运算。表达式由一个整数(比如 5)、一个变量(比如 x)或者一个表达式列表(比如 (add x 1))组成。整数对应它本身的值,变量对应它在当前环境中绑定的值,表达式列表对应一个函数调用,该列表的第一个参数是相应的函数,剩下的表达式是传递给这个函数的参数。该语言中,我们保留一些内建的特殊形式,这样我们就能做一些更有意思的事情:let 表达式使我们可以在它的 body 环境中引入新…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/101755m9sy6j1zdhzh9gh2.jpg">Media</a>我们将会在本篇文章中看到从零开始实现的编译器,将简单的类 LISP 计算语言编译成 JavaScript。完整的源代码在 <a href="https://gist.github.com/soupi/d4ff0727ccb739045fad6cdf533ca7dd">这里</a>。我们将会:自定义语言,并用它编写一个简单的程序实现一个简单的解析器组合器为该语言实现一个解析器为该语言实现一个美观的打印器为我们的用途定义 JavaScript 的一个子集实现代码转译器,将代码转译成我们定义的 JavaScript 子集把所有东西整合在一起开始吧!1、定义语言Lisp 族语言最迷人的地方在于,它们的语法就是树状表示的,这就是这门语言很容易解析的原因。我们很快就能接触到它。但首先让我们把自己的语言定义好。关于我们语言的语法的范式(BNF)描述如下:<pre class="prettyprint linenums">program ::= exprexpr ::= <integer> | <name> | ([<expr>])</pre>基本上,我们可以在该语言的最顶层定义表达式并对其进行运算。表达式由一个整数(比如 5)、一个变量(比如 x)或者一个表达式列表(比如 (add x 1))组成。整数对应它本身的值,变量对应它在当前环境中绑定的值,表达式列表对应一个函数调用,该列表的第一个参数是相应的函数,剩下的表达式是传递给这个函数的参数。该语言中,我们保留一些内建的特殊形式,这样我们就能做一些更有意思的事情:let 表达式使我们可以在它的 body 环境中引入新…
重启和关闭 Linux 系统的 6 个终端命令
对于 Linux 管理员来说,重启和关闭系统是其诸多风险操作中的一例,有时候,由于某些原因,这些操作可能无法挽回,他们需要更多的时间来排查问题。Media
via https://linux.cn/article-10177-1.html
对于 Linux 管理员来说,重启和关闭系统是其诸多风险操作中的一例,有时候,由于某些原因,这些操作可能无法挽回,他们需要更多的时间来排查问题。Media
via https://linux.cn/article-10177-1.html
重启和关闭 Linux 系统的 6 个终端命令
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/205455k6w9oawuwpbifku9.png">Media</a>在 Linux 管理员的日程当中,有很多需要执行的任务,其中就有系统的重启和关闭。对于 Linux 管理员来说,重启和关闭系统是其诸多风险操作中的一例,有时候,由于某些原因,这些操作可能无法挽回,他们需要更多的时间来排查问题。在 Linux 命令行模式下我们可以执行这些任务。很多时候,由于熟悉命令行,Linux 管理员更倾向于在命令行下完成这些任务。重启和关闭系统的 Linux 命令并不多,用户需要根据需要,选择合适的命令来完成任务。以下所有命令都有其自身特点,并允许被 Linux 管理员使用.<strong>建议阅读:</strong><a href="https://www.2daygeek.com/11-methods-to-find-check-system-server-uptime-in-linux/">查看系统/服务器正常运行时间的 11 个方法</a><a href="https://www.2daygeek.com/tuptime-a-tool-to-report-the-historical-and-statistical-running-time-of-linux-system/">Tuptime 一款为 Linux 系统保存历史记录、统计运行时间工具</a>系统重启和关闭之始,会通知所有已登录的用户和进程。当然,如果使用了时间参数,系统将拒绝新的用户登入。执行此类操作之前,我建议您坚持复查,因为您只能得到很少的提示来确保这一切顺利。下面陈列了一些步骤:确保您拥有一个可以处理故障的控制台,以防之后可能会发生的问题。 VMWare 可以访问虚拟机,而 IPMI、iLO 和 iDRAC 可以访问物理服务器。您需要通过公司的流程,申请修改或故障的执行权直到得到许可。为安…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201810/31/205455k6w9oawuwpbifku9.png">Media</a>在 Linux 管理员的日程当中,有很多需要执行的任务,其中就有系统的重启和关闭。对于 Linux 管理员来说,重启和关闭系统是其诸多风险操作中的一例,有时候,由于某些原因,这些操作可能无法挽回,他们需要更多的时间来排查问题。在 Linux 命令行模式下我们可以执行这些任务。很多时候,由于熟悉命令行,Linux 管理员更倾向于在命令行下完成这些任务。重启和关闭系统的 Linux 命令并不多,用户需要根据需要,选择合适的命令来完成任务。以下所有命令都有其自身特点,并允许被 Linux 管理员使用.<strong>建议阅读:</strong><a href="https://www.2daygeek.com/11-methods-to-find-check-system-server-uptime-in-linux/">查看系统/服务器正常运行时间的 11 个方法</a><a href="https://www.2daygeek.com/tuptime-a-tool-to-report-the-historical-and-statistical-running-time-of-linux-system/">Tuptime 一款为 Linux 系统保存历史记录、统计运行时间工具</a>系统重启和关闭之始,会通知所有已登录的用户和进程。当然,如果使用了时间参数,系统将拒绝新的用户登入。执行此类操作之前,我建议您坚持复查,因为您只能得到很少的提示来确保这一切顺利。下面陈列了一些步骤:确保您拥有一个可以处理故障的控制台,以防之后可能会发生的问题。 VMWare 可以访问虚拟机,而 IPMI、iLO 和 iDRAC 可以访问物理服务器。您需要通过公司的流程,申请修改或故障的执行权直到得到许可。为安…
Linux 中国通证商城发布
这次上线的“Linux 中国通证商城”—— https://shop.linux.cn ,是基于 WooCommerce 所构建的,并专门自行开发了支持 ERC20 通证的插件,以支持我们的 LCCN 通证的链上支付。Media
via https://linux.cn/article-10178-1.html
这次上线的“Linux 中国通证商城”—— https://shop.linux.cn ,是基于 WooCommerce 所构建的,并专门自行开发了支持 ERC20 通证的插件,以支持我们的 LCCN 通证的链上支付。Media
via https://linux.cn/article-10178-1.html
Linux 中国通证商城发布
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/120610ylpd9pklyiqz1gll.jpg">Media</a>在我们发布了 Linux 中国的<a href="https://linux.cn/article-9886-1.html">社区通证 LCCN</a> 之后,我们又在通证经济建设方向迈出了一步。通证作为一个经济体系中流转的价值凭证,其不但可以根据社区成员的行为进行精细的通证分发,而且还需要建立通证的流通渠道。按照我们之前的设计,我们流通 LCCN 的通道有二:社区提供通证的 B2C 消费渠道通证持有者个人的通证消费渠道作为社区,我们可以将社区所拥有的大部分资源,比如媒体资源、客户置换资源、定制礼品等以 LCCN 兑换的方式提供给社区成员。比如这次,我们就将官方网站的广告位、认证微信的文章推送、认证微博的转发等资源开放给社区来兑换。我们也同时将从合作伙伴中置换和赞助来的资源(如兑换券、书籍等)。此外,我们也小规模组织了二手物品的交换群,可供大家用 LCCN 交换其他人手中的闲置物品。目前已经发生了多笔交易,交易了包括手机、树莓派、书籍等物品,最高交易额高达 Ⓛ28800。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/115719nkaaaavjla9rkci0.jpg">Media</a>这次上线的“Linux 中国通证商城”—— <a href="https://shop.linux.cn">https://shop.linux.cn</a> ,是基于 WooCommerce 所构建的,并专门自行开发了支持 ERC20 通证的插件,以支持我们的 LCCN 通证的链上支付。当然,作为开源社区,我们的插件同样遵循开源精神,开源到了 <a href="https://github.com/inKerk/woocommerce-erc20-payment-gateway">GitHub</a> 上。我们&…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/120610ylpd9pklyiqz1gll.jpg">Media</a>在我们发布了 Linux 中国的<a href="https://linux.cn/article-9886-1.html">社区通证 LCCN</a> 之后,我们又在通证经济建设方向迈出了一步。通证作为一个经济体系中流转的价值凭证,其不但可以根据社区成员的行为进行精细的通证分发,而且还需要建立通证的流通渠道。按照我们之前的设计,我们流通 LCCN 的通道有二:社区提供通证的 B2C 消费渠道通证持有者个人的通证消费渠道作为社区,我们可以将社区所拥有的大部分资源,比如媒体资源、客户置换资源、定制礼品等以 LCCN 兑换的方式提供给社区成员。比如这次,我们就将官方网站的广告位、认证微信的文章推送、认证微博的转发等资源开放给社区来兑换。我们也同时将从合作伙伴中置换和赞助来的资源(如兑换券、书籍等)。此外,我们也小规模组织了二手物品的交换群,可供大家用 LCCN 交换其他人手中的闲置物品。目前已经发生了多笔交易,交易了包括手机、树莓派、书籍等物品,最高交易额高达 Ⓛ28800。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/115719nkaaaavjla9rkci0.jpg">Media</a>这次上线的“Linux 中国通证商城”—— <a href="https://shop.linux.cn">https://shop.linux.cn</a> ,是基于 WooCommerce 所构建的,并专门自行开发了支持 ERC20 通证的插件,以支持我们的 LCCN 通证的链上支付。当然,作为开源社区,我们的插件同样遵循开源精神,开源到了 <a href="https://github.com/inKerk/woocommerce-erc20-payment-gateway">GitHub</a> 上。我们&…
用 Pandoc 生成一篇调研论文
学习如何用 Markdown 管理章节引用、图像、表格以及更多。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/130402un9z690xd92o60ik.jpg">Media</a>这篇文章对于使用 <a href="https://en.wikipedia.org/wiki/Markdown">Markdown</a> 语法做一篇调研论文进行了一个深度体验。覆盖了如何创建和引用章节、图像(用 Markdown 和 <a href="https://www.latex-project.org/">LaTeX</a>)和参考书目。我们也讨论了一些棘手的案例和为什么使用 LaTex 是一个正确的做法。调研调研论文一般包括对章节、图像、表格和参考书目的引用。<a href="https://pandoc.org/">Pandoc</a> 本身并不能交叉引用这些,但是它能够利用 <a href="http://lierdakil.github.io/pandoc-crossref/">pandoc-crossref</a> 过滤器来完成自动编号和章节、图像、表格的交叉引用。让我们从重写原本以 LaTax 撰写的 <a href="https://dl.acm.org/citation.cfm?id=3270118">一个教育调研报告的例子</a> 开始,然后用 Markdown(和一些 LaTax)、Pandoc 和 Pandoc-crossref 重写。添加并引用章节要想章节被自动编号,必须使用 Markdown H1 标题编写。子章节使用 H2-H4 子标题编写(通常不需要更多级别了)。例如一个章节的标题是 “Implementation”,写作 # Implementation {#sec: implementation},然后 Pandoc 会把它转化为 3. Implementation(或者转换为相应的章节编号)。Implementation 这个标题使用了 H1 并且声明了一个 {#sec: implementation} 的标签,这是作者用于引用该章节的标签。要想引用一个章节,输入 @ 符号并跟上对应章节标签,使用方括号括起来即可: [@ sec:implementation]<a href="https://dl.acm.org/citation.cfm?id=3270118">在这篇论文中</a>, 我们发现了下面这个例子:<pre class="prettyprint linenums">we lack experience (consistency between TAs, [@sec:implementation]).</pre>Pandoc 转换:<pre class="prettyprint…
学习如何用 Markdown 管理章节引用、图像、表格以及更多。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/130402un9z690xd92o60ik.jpg">Media</a>这篇文章对于使用 <a href="https://en.wikipedia.org/wiki/Markdown">Markdown</a> 语法做一篇调研论文进行了一个深度体验。覆盖了如何创建和引用章节、图像(用 Markdown 和 <a href="https://www.latex-project.org/">LaTeX</a>)和参考书目。我们也讨论了一些棘手的案例和为什么使用 LaTex 是一个正确的做法。调研调研论文一般包括对章节、图像、表格和参考书目的引用。<a href="https://pandoc.org/">Pandoc</a> 本身并不能交叉引用这些,但是它能够利用 <a href="http://lierdakil.github.io/pandoc-crossref/">pandoc-crossref</a> 过滤器来完成自动编号和章节、图像、表格的交叉引用。让我们从重写原本以 LaTax 撰写的 <a href="https://dl.acm.org/citation.cfm?id=3270118">一个教育调研报告的例子</a> 开始,然后用 Markdown(和一些 LaTax)、Pandoc 和 Pandoc-crossref 重写。添加并引用章节要想章节被自动编号,必须使用 Markdown H1 标题编写。子章节使用 H2-H4 子标题编写(通常不需要更多级别了)。例如一个章节的标题是 “Implementation”,写作 # Implementation {#sec: implementation},然后 Pandoc 会把它转化为 3. Implementation(或者转换为相应的章节编号)。Implementation 这个标题使用了 H1 并且声明了一个 {#sec: implementation} 的标签,这是作者用于引用该章节的标签。要想引用一个章节,输入 @ 符号并跟上对应章节标签,使用方括号括起来即可: [@ sec:implementation]<a href="https://dl.acm.org/citation.cfm?id=3270118">在这篇论文中</a>, 我们发现了下面这个例子:<pre class="prettyprint linenums">we lack experience (consistency between TAs, [@sec:implementation]).</pre>Pandoc 转换:<pre class="prettyprint…
Flameshot:一个简洁但功能丰富的截图工具
在本教程中,我们将看到如何安装 Flameshot 以及如何使用它来截图。Media
via https://linux.cn/article-10180-1.html
在本教程中,我们将看到如何安装 Flameshot 以及如何使用它来截图。Media
via https://linux.cn/article-10180-1.html
Flameshot:一个简洁但功能丰富的截图工具
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/131936ytmy79zy9fvf69vl.png">Media</a>截图是我工作的一部分,我先前使用深度截图工具来截图,深度截图是一个简单、轻量级且非常简洁的截图工具。它自带许多功能例如窗口识别、快捷键支持、图片编辑、延时截图、社交分享、智能存储以及图片清晰度调整等功能。今天我碰巧发现了另一个具备多种功能的截图工具,它就是 Flameshot ,一个简单但功能丰富的针对类 Unix 系统的截图工具。它简单易用,可定制并且有选项可以支持上传截图到在线图片分享网站 imgur 上。同时 Flameshot 有一个 CLI 版本,所以你也可以从命令行来进行截图。Flameshot 是一个完全免费且开源的工具。在本教程中,我们将看到如何安装 Flameshot 以及如何使用它来截图。安装 Flameshot在 Arch Linux 上:Flameshot 可以从 Arch LInux 的 [community] 仓库中获取。确保你已经启用了 community 仓库,然后就可以像下面展示的那样使用 pacman 来安装 Flameshot :<pre class="prettyprint linenums">$ sudo pacman -S flameshot</pre>它也可以从 <a href="https://aur.archlinux.org/packages/flameshot-git">AUR</a> 中获取,所以你还可以使用任意一个 AUR 帮助程序(例如 <a href="https://www.ostechnix.com/yay-found-yet-another-reliable-aur-helper/">Yay</a>)来在基于 Arch 的系统中安装它:<pre class="prettyprint linenums">$ yay -S flameshot-git</pre>在 Fedora 中:<pre class="prettyprint linenums">$ sudo dnf install flameshot</pre>在 Debian 10+ 和 Ubuntu 18.04+ 中,可以使用 APT 包管理器来安装它:<pre class="prettyprint linenums">$ sudo apt install flameshot</pre>在 openSUSE 上:<pre class="prettyprint linenums">$ sudo zypper install flameshot</pre>在其他的 Linux 发行版中,可以从源代码编译并安装它。编译过程&#…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/131936ytmy79zy9fvf69vl.png">Media</a>截图是我工作的一部分,我先前使用深度截图工具来截图,深度截图是一个简单、轻量级且非常简洁的截图工具。它自带许多功能例如窗口识别、快捷键支持、图片编辑、延时截图、社交分享、智能存储以及图片清晰度调整等功能。今天我碰巧发现了另一个具备多种功能的截图工具,它就是 Flameshot ,一个简单但功能丰富的针对类 Unix 系统的截图工具。它简单易用,可定制并且有选项可以支持上传截图到在线图片分享网站 imgur 上。同时 Flameshot 有一个 CLI 版本,所以你也可以从命令行来进行截图。Flameshot 是一个完全免费且开源的工具。在本教程中,我们将看到如何安装 Flameshot 以及如何使用它来截图。安装 Flameshot在 Arch Linux 上:Flameshot 可以从 Arch LInux 的 [community] 仓库中获取。确保你已经启用了 community 仓库,然后就可以像下面展示的那样使用 pacman 来安装 Flameshot :<pre class="prettyprint linenums">$ sudo pacman -S flameshot</pre>它也可以从 <a href="https://aur.archlinux.org/packages/flameshot-git">AUR</a> 中获取,所以你还可以使用任意一个 AUR 帮助程序(例如 <a href="https://www.ostechnix.com/yay-found-yet-another-reliable-aur-helper/">Yay</a>)来在基于 Arch 的系统中安装它:<pre class="prettyprint linenums">$ yay -S flameshot-git</pre>在 Fedora 中:<pre class="prettyprint linenums">$ sudo dnf install flameshot</pre>在 Debian 10+ 和 Ubuntu 18.04+ 中,可以使用 APT 包管理器来安装它:<pre class="prettyprint linenums">$ sudo apt install flameshot</pre>在 openSUSE 上:<pre class="prettyprint linenums">$ sudo zypper install flameshot</pre>在其他的 Linux 发行版中,可以从源代码编译并安装它。编译过程&#…
模拟 Altair 8800 计算机
Altair 8800 是 1975 年发布的自建家用电脑套件。Altair 基本上是第一台个人电脑(PC),虽然 PC 这个名词好几年前就出现了。对 Dell、HP 或者 Macbook 而言它是亚当(或者夏娃)。Media
via https://linux.cn/article-10181-1.html
Altair 8800 是 1975 年发布的自建家用电脑套件。Altair 基本上是第一台个人电脑(PC),虽然 PC 这个名词好几年前就出现了。对 Dell、HP 或者 Macbook 而言它是亚当(或者夏娃)。Media
via https://linux.cn/article-10181-1.html
模拟 Altair 8800 计算机
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/212159lb3ie9lpbn4ebpjv.jpg">Media</a><a href="https://en.wikipedia.org/wiki/Altair_8800">Altair 8800</a> 是 1975 年发布的自建家用电脑套件。Altair 基本上是第一台个人电脑(PC),虽然 PC 这个名词好几年前就出现了。对 Dell、HP 或者 Macbook 而言它是亚当(或者夏娃)。有些人认为为 Z80(与 Altair 的 Intel 8080 密切相关的处理器)编写仿真器真是太棒了,并认为它需要一个模拟 Altair 的控制面板。所以如果你想知道 1975 年使用电脑是什么感觉,你可以在你的 Macbook 上运行 Altair:<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/211940undn6oa3l4at3adg.png">Altair 8800</a>安装它你可以从<a href="http://www.autometer.de/unix4fun/z80pack/ftp/">这里</a>的 FTP 服务器下载 Z80 包。你要查找最新的 Z80 包版本,例如 z80pack-1.26.tgz。首先解压文件:<pre class="prettyprint linenums">$ tar -xvf z80pack-1.26.tgz</pre>进入解压目录:<pre class="prettyprint linenums">$ cd z80pack-1.26</pre>控制面板模拟基于名为 frontpanel 的库。你必须先编译该库。如果你进入 frontpanel 目录,你会发现 README 文件列出了这个库自己的依赖项。你在这里的体会几乎肯定会与我的不同,但也许我的痛苦可以作为例子。我安装了依赖项,但是是通过 <a href="http://brew.sh/">Homebrew</a> 安装的。为了让库能够编译,我必须确保在 Makefile.osx 中将 /usr/local/include添加到 Clang 的 include 路径中。如果你觉得依赖没有问题,那么你应该就能编译这个库(我们现在位于 z80pack-1.26/frontpanel):<pre class="prettyprint linenums">$ make -f Makefile.osx ...$ make -f Makefile.osx clean</pre>你应该会得到 libfrontpanel.so。我把它拷贝到 libfrontpanel.so。Altair 模拟器位于 z80pack-1.26/altairsim 下。你现在需要编译模拟器本身。进入 z80pack-1.26/altairsim/srcsim 并再次运行 make:<pre…
<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/212159lb3ie9lpbn4ebpjv.jpg">Media</a><a href="https://en.wikipedia.org/wiki/Altair_8800">Altair 8800</a> 是 1975 年发布的自建家用电脑套件。Altair 基本上是第一台个人电脑(PC),虽然 PC 这个名词好几年前就出现了。对 Dell、HP 或者 Macbook 而言它是亚当(或者夏娃)。有些人认为为 Z80(与 Altair 的 Intel 8080 密切相关的处理器)编写仿真器真是太棒了,并认为它需要一个模拟 Altair 的控制面板。所以如果你想知道 1975 年使用电脑是什么感觉,你可以在你的 Macbook 上运行 Altair:<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/211940undn6oa3l4at3adg.png">Altair 8800</a>安装它你可以从<a href="http://www.autometer.de/unix4fun/z80pack/ftp/">这里</a>的 FTP 服务器下载 Z80 包。你要查找最新的 Z80 包版本,例如 z80pack-1.26.tgz。首先解压文件:<pre class="prettyprint linenums">$ tar -xvf z80pack-1.26.tgz</pre>进入解压目录:<pre class="prettyprint linenums">$ cd z80pack-1.26</pre>控制面板模拟基于名为 frontpanel 的库。你必须先编译该库。如果你进入 frontpanel 目录,你会发现 README 文件列出了这个库自己的依赖项。你在这里的体会几乎肯定会与我的不同,但也许我的痛苦可以作为例子。我安装了依赖项,但是是通过 <a href="http://brew.sh/">Homebrew</a> 安装的。为了让库能够编译,我必须确保在 Makefile.osx 中将 /usr/local/include添加到 Clang 的 include 路径中。如果你觉得依赖没有问题,那么你应该就能编译这个库(我们现在位于 z80pack-1.26/frontpanel):<pre class="prettyprint linenums">$ make -f Makefile.osx ...$ make -f Makefile.osx clean</pre>你应该会得到 libfrontpanel.so。我把它拷贝到 libfrontpanel.so。Altair 模拟器位于 z80pack-1.26/altairsim 下。你现在需要编译模拟器本身。进入 z80pack-1.26/altairsim/srcsim 并再次运行 make:<pre…
在 Linux 上使用 systemd 设置定时器
学习使用 systemd 创建启动你的游戏服务器的定时器。Media
via https://linux.cn/article-10182-1.html
学习使用 systemd 创建启动你的游戏服务器的定时器。Media
via https://linux.cn/article-10182-1.html
在 Linux 上使用 systemd 设置定时器
学习使用 systemd 创建启动你的游戏服务器的定时器。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/221408u4uar48ciu4bcidy.jpg">Media</a>之前,我们看到了如何<a href="https://linux.cn/article-9700-1.html">手动的</a>、<a href="https://linux.cn/article-9703-1.html">在开机与关机时</a>、<a href="https://www.linux.com/blog/intro-to-linux/2018/6/systemd-services-reacting-change">在启用某个设备时</a>、<a href="https://www.linux.com/blog/learn/intro-to-linux/2018/6/systemd-services-monitoring-files-and-directories">在文件系统发生改变时</a> 启用与禁用 systemd 服务。定时器增加了另一种启动服务的方式,基于……时间。尽管与定时任务很相似,但 systemd 定时器稍微地灵活一些。让我们看看它是怎么工作的。“定时运行”让我们展开<a href="https://linux.cn/article-9703-1.html">本系列前两篇文章</a>中<a href="https://linux.cn/article-9700-1.html">你所设置的</a> <a href="https://www.minetest.net/">Minetest</a> 服务器作为如何使用定时器单元的第一个例子。如果你还没有读过那几篇文章,可以现在去看看。你将通过创建一个定时器来“改进” Minetest 服务器,使得在服务器启动 1 分钟后运行游戏服务器而不是立即运行。这样做的原因可能是,在启动之前可能会用到其他的服务,例如发邮件给其他玩家告诉他们游戏已经准备就绪,你要确保其他的服务(例如网络)在开始前完全启动并运行。最终,你的 minetest.timer 单元看起来就像这样:<pre class="prettyprint linenums"># minetest.timer[Unit]Description=Runs the minetest.service 1 minute after boot up[Timer]OnBootSec=1 mUnit=minetest.service[Install]WantedBy=basic.target</pre>一点也不难吧。如以往一般,开头是 [Unit] 和一段描述单元作用的信息,这儿没什么新东西。[Timer] 这一节是新出现的,但它的作用不言自…
学习使用 systemd 创建启动你的游戏服务器的定时器。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/221408u4uar48ciu4bcidy.jpg">Media</a>之前,我们看到了如何<a href="https://linux.cn/article-9700-1.html">手动的</a>、<a href="https://linux.cn/article-9703-1.html">在开机与关机时</a>、<a href="https://www.linux.com/blog/intro-to-linux/2018/6/systemd-services-reacting-change">在启用某个设备时</a>、<a href="https://www.linux.com/blog/learn/intro-to-linux/2018/6/systemd-services-monitoring-files-and-directories">在文件系统发生改变时</a> 启用与禁用 systemd 服务。定时器增加了另一种启动服务的方式,基于……时间。尽管与定时任务很相似,但 systemd 定时器稍微地灵活一些。让我们看看它是怎么工作的。“定时运行”让我们展开<a href="https://linux.cn/article-9703-1.html">本系列前两篇文章</a>中<a href="https://linux.cn/article-9700-1.html">你所设置的</a> <a href="https://www.minetest.net/">Minetest</a> 服务器作为如何使用定时器单元的第一个例子。如果你还没有读过那几篇文章,可以现在去看看。你将通过创建一个定时器来“改进” Minetest 服务器,使得在服务器启动 1 分钟后运行游戏服务器而不是立即运行。这样做的原因可能是,在启动之前可能会用到其他的服务,例如发邮件给其他玩家告诉他们游戏已经准备就绪,你要确保其他的服务(例如网络)在开始前完全启动并运行。最终,你的 minetest.timer 单元看起来就像这样:<pre class="prettyprint linenums"># minetest.timer[Unit]Description=Runs the minetest.service 1 minute after boot up[Timer]OnBootSec=1 mUnit=minetest.service[Install]WantedBy=basic.target</pre>一点也不难吧。如以往一般,开头是 [Unit] 和一段描述单元作用的信息,这儿没什么新东西。[Timer] 这一节是新出现的,但它的作用不言自…
正确选择开源数据库的 5 个技巧
对关键应用的选择不容许丝毫错误。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/232107xuvdld0n5rzcdbc0.jpg">Media</a>你或许会遇到需要选择合适的开源数据库的情况。但这无论对于开源方面的老手或是新手,都是一项艰巨的任务。在过去的几年中,采用开源技术的企业越来越多。面对这样的趋势,众多开源应用公司都纷纷承诺自己提供的解决方案能够各种问题、适应各种负载。但这些承诺不能轻信,在开源应用上的选择是重要而艰难的,尤其是数据库这种关键的应用。凭借我在 <a href="https://www.percona.com/">Percona</a> 和其它公司担任 IT 专家的经验,我很幸运能够指导其他人在开源技术的选择上做出正确的决策,因为需要考虑的重要因素太多了。希望通过这篇文章能够向大家分享这方面的一些技巧。有一个明确的目标这一点看似简单,但在和很多人聊过 MySQL、MongoDB、PostgreSQL 之后,我觉得这一点才是最重要的。面对繁杂的开源数据库,更需要明确自己的目标。无论这个数据库是作为开发用的标准化数据库后端,抑或是用于替换遗留代码中的原有数据库,这都是一个明确的目标。目标一旦确定,就可以集中精力与开源软件的提供方商讨更多细节了。了解你的工作负载尽管开源数据库技术的功能越来越丰富,但这些新加入的功能都不太具有普适性。譬如 MongoDB 新增了事务的支持、MySQL 新增了…
对关键应用的选择不容许丝毫错误。<a href="https://dn-linuxcn.qbox.me/data/attachment/album/201811/01/232107xuvdld0n5rzcdbc0.jpg">Media</a>你或许会遇到需要选择合适的开源数据库的情况。但这无论对于开源方面的老手或是新手,都是一项艰巨的任务。在过去的几年中,采用开源技术的企业越来越多。面对这样的趋势,众多开源应用公司都纷纷承诺自己提供的解决方案能够各种问题、适应各种负载。但这些承诺不能轻信,在开源应用上的选择是重要而艰难的,尤其是数据库这种关键的应用。凭借我在 <a href="https://www.percona.com/">Percona</a> 和其它公司担任 IT 专家的经验,我很幸运能够指导其他人在开源技术的选择上做出正确的决策,因为需要考虑的重要因素太多了。希望通过这篇文章能够向大家分享这方面的一些技巧。有一个明确的目标这一点看似简单,但在和很多人聊过 MySQL、MongoDB、PostgreSQL 之后,我觉得这一点才是最重要的。面对繁杂的开源数据库,更需要明确自己的目标。无论这个数据库是作为开发用的标准化数据库后端,抑或是用于替换遗留代码中的原有数据库,这都是一个明确的目标。目标一旦确定,就可以集中精力与开源软件的提供方商讨更多细节了。了解你的工作负载尽管开源数据库技术的功能越来越丰富,但这些新加入的功能都不太具有普适性。譬如 MongoDB 新增了事务的支持、MySQL 新增了…