蚊章汇 - 2016年7月
type: channel
link: https://linuxcn.bwsl.wang/2016/07/
description: Linux中国社区镜像站，没有大保镖。
items: JStock：Linux 上不错的股票投资组合管理软件
items: 开源新闻速递：Parabola GNU/Linux-libre 2016.07.27 ISO 镜像发布
items: 如何在 Ubuntu Linux 16.04上安装开源的 Discourse 论坛
items: 开源新闻速递：ArchEX Build 160724 发布
items: Fedora 内核是由什么构成的？
items: 使用 Python 创建你自己的 Shell（下）
items: Linux 上 10 个最好的 Markdown 编辑器
items: Fedora 中的容器技术：systemd-nspawn
items: 使用 Python 创建你自己的 Shell （上）
items: 怎样在 Ubuntu 中修改默认程序

JStock：Linux 上不错的股票投资组合管理软件
type: item
date: 2016-07-31T23:22:26+08:00
description: 如果你在股票市场做投资，那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受的风险，时间层面的长短和资金盈利的目标去为你量身打造的一种投资计划。鉴于这类软件的重要性，因此从来不会缺乏商业性的 app 和股票行情检测软件，每一个都可以兜售复杂的投资组合以及跟踪报告功能。对于我们这些 Linux 爱好者们，我也找到了一些好用的开源投资组合管理工具，用来在 Linux 上管理和跟踪股票的投资组合，这里高度推荐一个基于 java 编写的管理软件 JStock。如果你不是一个 java 粉，也许你会放弃它，JStock 需要运行在沉重的 JVM 环境上。但同时，在每一个安装了 JRE 的环境中它都可以马上运行起来，在你的 Linux 环境中它会运行的很顺畅。“开源”就意味着免费或标准低下的时代已经过去了。鉴于 JStock 只是一个个人完成的产物，作为一个投资组合管理软件它最令人印象深刻的是包含了非常多实用的功能，以上所有的荣誉属于它的作者 Yan Cheng Cheok！例如，JStock 支持通过监视列表去监控价格，多种投资组合，自选/内置的股票指标与相关监测，支持27个不同的股票市场和跨平台的云端备份/还原。JStock 支持多平台部署（Linux, OS X, Android 和 Windows），你可以通过云端保存你的 JStock 投资组合，并通过云平台无缝的备份/还原到其他的不同平台上面。现在我将向你展示如何安装以及使用过程的一些具体细节。在 Linux 上安装 JStock因为 JStock 使用Java编写，所以必须安装 JRE才能让它运行起来。小提示，JStock 需要 JRE1.7 或更高版本。如你的 JRE 版本不能满足这个需求，JStock 将会运行失败然后出现下面的报错。Exception in thread "main" java.lang.UnsupportedClassVersionError: org/yccheok/jstock/gui/JStock : Unsupported major.minor version 51.0 在你的 Linux 上安装好了 JRE 之后，从其官网下载最新的发布的 JStock，然后加载启动它。$ wget https://github.com/yccheok/jstock/releases/download/release_1-0-7-13/jstock-1.0.7.13-bin.zip $ unzip jstock-1.0.7.13-bin.zip $ cd jstock $ chmod +x jstock.sh $ ./jstock.sh 教程的其他部分，让我来给大家展示一些 JStock 的实用功能监视监控列表中股票价格的波动使用 JStock 你可以创建一个或多个监视列表，它可以自动的监视股票价格的波动并给你提供相应的通知。在每一个监视列表里面你可以添加多个感兴趣的股票进去。之后在“Fall Below”和“Rise Above”的表格里添加你的警戒值，分别设定该股票的最低价格和最高价格。例如你设置了 AAPL 股票的最低/最高价格分别是 $102 和 $115.50，只要在价格低于 $102 或高于 $115.50 时你就得到桌面通知。你也可以设置邮件通知，这样你将收到一些价格信息的邮件通知。设置邮件通知在“Options”菜单里，在“Alert”标签中国，打开“Send message to email(s)”，填入你的 Gmail 账户。一旦完成 Gmail 认证步骤，JStock 就会开始发送邮件通知到你的 Gmail 账户（也可以设置其他的第三方邮件地址）。管理多个投资组合JStock 允许你管理多个投资组合。这个功能对于你使用多个股票经纪人时是非常实用的。你可以为每个经纪人创建一个投资组合去管理你的“买入/卖出/红利”用来了解每一个经纪人的业务情况。你也可以在“Portfolio”菜单里面选择特定的投资组合来切换不同的组合项目。下面是一张截图用来展示一个假设的投资组合。你也可以设置付给中介费，你可以为每个买卖交易设置中介费、印花税以及结算费。如果你比较懒，你也可以在选项菜单里面启用自动费用计算，并提前为每一家经济事务所设置费用方案。当你为你的投资组合增加交易之后，JStock 将自动的计算并计入费用。使用内置/自选股票指标来监控如果你要做一些股票的技术分析，你可能需要基于各种不同的标准来监控股票（这里叫做“股票指标”）。对于股票的跟踪，JStock提供多个预设的技术指示器 去获得股票上涨/下跌/逆转指数的趋势。下面的列表里面是一些可用的指标。平滑异同移动平均线（MACD）相对强弱指标 (RSI)资金流向指标 (MFI)顺…

开源新闻速递：Parabola GNU/Linux-libre 2016.07.27 ISO 镜像发布
type: item
date: 2016-07-31T16:00:00+08:00
description: 今日关注基于 Arch Linux 的 Parabola GNU/Linux-libre 2016.07.27 ISO 镜像发布。这一最新版本中涵盖了所有最近的安全更新以及最新版本的软件。有 Main ，MATE 和 TalkingParabola这三个版本，可以支持32位和64位机。在该发布版本中，将LightDM作为默认的显示管理器，实现了对Home目录更好的读写控制权限。一部分wheel组用户默认拥有sudo权限可以执行任何命令。图文摘要Wireshark 2.0.5 发布。作为全球最流行的网络协议分析工具，安全专家们可以使用Wireshark来分析并解决网络问题。最新版本修复了20多个问题，更新了对内置的802.11 Radiotap, BGP, CAN, CANopen, H.248 Q.1950, IPv4, IPv6等协议的支持。Enlightenment 0.20 系列的最后一个版本 0.20.10 发布。不过希望用户能更新到最新、最稳定的Enlightenment 0.21.0 版本。System76 PC 机用户需要立即更行到 Ubuntu 16.04.1 LTS 了。在7.28号，Canonical也宣布不再对 Ubuntu 15.10 进行安全和软件更新。因此，如果你在System76的机器上安装的是Ubuntu 15.10，那就需要尽快更新到Ubuntu 16.04.1 LTS了。

如何在 Ubuntu Linux 16.04上安装开源的 Discourse 论坛
type: item
date: 2016-07-30T16:57:00+08:00
description: Discourse 是一个开源的论坛，它可以以邮件列表、聊天室或者论坛等多种形式工作。它是一个广受欢迎的现代的论坛工具。在服务端，它使用 Ruby on Rails 和 Postgres 搭建, 并且使用 Redis 缓存来减少读取时间 , 在客户端，它使用支持 Java Script 的浏览器。它非常容易定制，结构良好，并且它提供了转换插件，可以对你现存的论坛、公告板进行转换，例如： vBulletin、phpBB、Drupal、SMF 等等。在这篇文章中，我们将学习在 Ubuntu 操作系统下安装 Discourse。它以安全作为设计思想，所以发垃圾信息的人和黑客们不能轻易的实现其企图。它能很好的支持各种现代设备，并可以相应的调整以手机和平板的显示。在 Ubuntu 16.04 上安装 Discourse让我们开始吧 ! 最少需要 1G 的内存，并且官方支持的安装过程需要已经安装了 docker。 说到 docker，它还需要安装Git。要满足以上的两点要求我们只需要运行下面的命令：wget -qO- https://get.docker.com/ | sh 用不了多久就安装好了 docker 和 Git，安装结束以后，在你的系统上的 /var 分区创建一个 Discourse 文件夹（当然你也可以选择其他的分区）。mkdir /var/discourse 现在我们来克隆 Discourse 的 Github 仓库到这个新建的文件夹。git clone https://github.com/discourse/discourse_docker.git /var/discourse 进入这个克隆的文件夹。cd /var/discourse 你将看到“discourse-setup” 脚本文件，运行这个脚本文件进行 Discourse 的初始化。./discourse-setup 备注： 在安装 discourse 之前请确保你已经安装好了邮件服务器。安装向导将会问你以下六个问题：Hostname for your Discourse? Email address for admin account? SMTP server address? SMTP user name? SMTP port [587]: SMTP password? []: 当你提交了以上信息以后, 它会让你提交确认, 如果一切都很正常，点击回车以后安装开始。现在“坐等放宽”，需要花费一些时间来完成安装，倒杯咖啡，看看有什么错误信息没有。安装成功以后看起来应该像这样。现在打开浏览器，如果已经做了域名解析，你可以使用你的域名来连接 Discourse 页面 ，否则你只能使用IP地址了。你将看到如下信息：就是这个，点击 “Sign Up” 选项创建一个新的账户，然后进行你的 Discourse 设置。结论它安装简便，运行完美。 它拥有现代论坛所有必备功能。它以 GPL 发布，是完全开源的产品。简单、易用、以及特性丰富是它的最大特点。希望你喜欢这篇文章，如果有问题，你可以给我们留言。via: http://linuxpitstop.com/install-discourse-on-ubuntu-linux-16-04/作者：Aun 译者：kokialoves 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

开源新闻速递：ArchEX Build 160724 发布
type: item
date: 2016-07-30T03:15:00+08:00
description: 今日关注基于最新 Arch Linux 技术的 ArchEX Build 160724 发布，在这个发行版中包括了最新的软件包，比如Linux内核4.6.4。据该操作系统开发者 Arne Exton 称，这一版本在几乎所有机器上运行是最快的，鉴于Arch Linux是最轻量级、高度定制并且拥有一大批用户的操作系统，采用的LXDE桌面环境即便是在旧的PC机上也是运行最快的，我们有理由相信Arne Exton的话。图文摘要openSUSE Tumbleweed 的用户目前已经可以使用最新的 KDE Plasma 5.7 桌面环境以及KDE应用16.04软件套件了，Linux内核也更新到了4.6.4。Linux Kernel 4.4.16 LTS 发布，进行了150多处改动。Solus系统的用户已经可以优先进行更新了。Ubuntu Budgie Remix 16.04.1 发布，在这一版本中，采用了最新的Solus' Budgie桌面环境，还可以对全部磁盘进行加密，也可以对Home文件夹进行加密。另外，也可以选择任何你熟悉的语言来进行安装。还有一个好消息，这一版本引入了对快照打包的支持。

Fedora 内核是由什么构成的？
type: item
date: 2016-07-29T22:40:34+08:00
description: 每个 Fedora 系统都运行着一个内核。许多代码片段组合在一起使之成为现实。每个 Fedora 内核都起始于一个来自于上游社区的基线版本——通常称之为 vanilla 内核。上游内核就是标准。（Fedora 的）目标是包含尽可能多的上游代码，这样使得 bug 修复和 API 更新更加容易，同时也会有更多的人审查代码。理想情况下，Fedora 能够直接获取 kernel.org 的内核，然后发送给所有用户。现实情况是，使用 vanilla 内核并不能完全满足 Fedora。Vanilla 内核可能并不支持一些 Fedora 用户希望拥有的功能。用户接收的 [Fedora 内核] 是在 vanilla 内核之上打了很多补丁的内核。这些补丁被认为“ 不在树上 （ out of tree ） ”。许多这些位于补丁树之外的补丁都不会存在太久。如果某补丁能够修复一个问题，那么该补丁可能会被合并到 Fedora 树，以便用户能够更快地收到修复。当内核变基到一个新版本时，在新版本中的补丁都将被清除。一些补丁会在 Fedora 内核树上存在很长时间。一个很好的例子是，安全启动补丁就是这类补丁。这些补丁提供了 Fedora 希望支持的功能，即使上游社区还没有接受它们。保持这些补丁更新是需要付出很多努力的，所以 Fedora 尝试减少不被上游内核维护者接受的补丁数量。通常来说，想要在 Fedora 内核中获得一个补丁的最佳方法是先给 Linux 内核邮件列表（LKML） 发送补丁，然后请求将该补丁包含到 Fedora 中。如果某个维护者接受了补丁，就意味着 Fedora 内核树中将来很有可能会包含该补丁。一些来自于 GitHub 等地方的还没有提交给 LKML 的补丁是不可能进入内核树的。首先向 LKML 发送补丁是非常重要的，它能确保 Fedora 内核树中携带的补丁是功能正常的。如果没有社区审查，Fedora 最终携带的补丁将会充满 bug 并会导致问题。Fedora 内核中包含的代码来自许多地方。一切都需要提供最佳的体验。via: https://fedoramagazine.org/makes-fedora-kernel/作者：Laura Abbott 译者：ChrisLeeGit 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出

使用 Python 创建你自己的 Shell（下）
type: item
date: 2016-07-29T18:36:00+08:00
description: 在上篇中，我们已经创建了一个 shell 主循环、切分了命令输入，以及通过 fork 和 exec 执行命令。在这部分，我们将会解决剩下的问题。首先，cd test_dir2 命令无法修改我们的当前目录。其次，我们仍无法优雅地从 shell 中退出。步骤 4：内置命令“cd test_dir2 无法修改我们的当前目录” 这句话是对的，但在某种意义上也是错的。在执行完该命令之后，我们仍然处在同一目录，从这个意义上讲，它是对的。然而，目录实际上已经被修改，只不过它是在子进程中被修改。还记得我们分叉（fork）了一个子进程，然后执行命令，执行命令的过程没有发生在父进程上。结果是我们只是改变了子进程的当前目录，而不是父进程的目录。然后子进程退出，而父进程在原封不动的目录下继续运行。因此，这类与 shell 自己相关的命令必须是内置命令。它必须在 shell 进程中执行而不是在分叉中（forking）。cd让我们从 cd 命令开始。我们首先创建一个 builtins 目录。每一个内置命令都会被放进这个目录中。yosh_project |-- yosh |-- builtins | |-- __init__.py | |-- cd.py |-- __init__.py |-- shell.py 在 cd.py 中，我们通过使用系统调用 os.chdir 实现自己的 cd 命令。import os from yosh.constants import * def cd(args): os.chdir(args[0]) return SHELL_STATUS_RUN 注意，我们会从内置函数返回 shell 的运行状态。所以，为了能够在项目中继续使用常量，我们将它们移至 yosh/constants.py。yosh_project |-- yosh |-- builtins | |-- __init__.py | |-- cd.py |-- __init__.py |-- constants.py |-- shell.py 在 constants.py 中，我们将状态常量都放在这里。SHELL_STATUS_STOP = 0 SHELL_STATUS_RUN = 1 现在，我们的内置 cd 已经准备好了。让我们修改 shell.py 来处理这些内置函数。... ### 导入常量 from yosh.constants import * ### 使用哈希映射来存储内建的函数名及其引用 built_in_cmds = {} def tokenize(string): return shlex.split(string) def execute(cmd_tokens): ### 从元组中分拆命令名称与参数 cmd_name = cmd_tokens[0] cmd_args = cmd_tokens[1:] ### 如果该命令是一个内建命令，使用参数调用该函数 if cmd_name in built_in_cmds: return built_in_cmds[cmd_name](cmd_args) ... 我们使用一个 python 字典变量 built_in_cmds 作为 哈希映射 （ hash map ） ，以存储我们的内置函数。我们在 execute 函数中提取命令的名字和参数。如果该命令在我们的哈希映射中，则调用对应的内置函数。（提示：built_in_cmds[cmd_name] 返回能直接使用参数调用的函数引用。)我们差不多准备好使用内置的 cd 函数了。最后一步是将 cd 函数添加到 built_in_cmds 映射中。... ### 导入所有内建函数引用 from yosh.builtins import * ... ### 注册内建函数到内建命令的哈希映射中 def register_command(name, func): built_in_cmds[name] = func ### 在此注册所有的内建命令 def init(): register_command("cd", cd) def main(): ###在开始主循环之前初始化 shell init() shell_loop() 我们定义了 register_command 函数，以添加一个内置函数到我们内置的命令哈希映射。接着，我们定义 init 函数并且在这里注册内置的 cd 函数。注意这行 register_command("cd", cd) 。第一个参数为命令的名字。第二个参数为一个函数引用。为了能够让第二个参数 cd 引用到 yosh/builtins/cd.py 中的 cd 函数引用，我们必须将以下这行代码放在 yosh/builtins/__init__.…

Linux 上 10 个最好的 Markdown 编辑器
type: item
date: 2016-07-29T17:19:00+08:00
description: 在这篇文章中，我们会点评一些可以在 Linux 上安装使用的最好的 Markdown 编辑器。 你可以在 Linux 平台上找到非常多的 的 Markdown 编辑器，但是在这里我们将尽可能地为您推荐那些最好的。Best Linux Markdown Editors对于不了解 Markdown 的人做个简单介绍，Markdown 是由著名的 Aaron Swartz 和 John Gruber 发明的标记语言，其最初的解析器是一个用 Perl 写的简单、轻量的同名工具。它可以将用户写的纯文本转为可用的 HTML（或 XHTML）。它实际上是一门易读，易写的纯文本语言，以及一个用于将文本转为 HTML 的转换工具。希望你先对 Markdown 有一个稍微的了解，接下来让我们逐一列出这些编辑器。1. AtomAtom 是一个现代的、跨平台、开源且强大的文本编辑器，它可以运行在 Linux、Windows 和 MAC OS X 等操作系统上。用户可以在它的基础上进行定制，删减修改任何配置文件。它包含了一些非常杰出的特性：内置软件包管理器智能自动补全功能提供多窗口操作支持查找替换功能包含一个文件系统浏览器轻松自定义主题开源、高度扩展性的软件包等Atom Markdown Editor for Linux访问主页: https://atom.io/2. GNU EmacsEmacs 是 Linux 平台上一款的流行文本编辑器。它是一个非常棒的、具备高扩展性和定制性的 Markdown 语言编辑器。它综合了以下这些神奇的特性：带有丰富的内置文档，包括适合初学者的教程有完整的 Unicode 支持，可显示所有的人类符号支持内容识别的文本编辑模式包括多种文件类型的语法高亮可用 Emacs Lisp 或 GUI 对其进行高度定制提供了一个包系统可用来下载安装各种扩展等Emacs Markdown Editor for Linux访问主页: https://www.gnu.org/software/emacs/3. RemarkableRemarkable 可能是 Linux 上最好的 Markdown 编辑器了，它也适用于 Windows 操作系统。它的确是是一个卓越且功能齐全的 Markdown 编辑器，为用户提供了一些令人激动的特性。一些卓越的特性：支持实时预览支持导出 PDF 和 HTML支持 Github Markdown 语法支持定制 CSS支持语法高亮提供键盘快捷键高可定制性和其他Remarkable Markdown Editor for Linux访问主页: https://remarkableapp.github.io4. HaroopadHaroopad 是为 Linux，Windows 和 Mac OS X 构建的跨平台 Markdown 文档处理程序。用户可以用它来书写许多专家级格式的文档，包括电子邮件、报告、博客、演示文稿和博客文章等等。功能齐全且具备以下的亮点：轻松导入内容支持导出多种格式广泛支持博客和邮件支持许多数学表达式支持 Github Markdown 扩展为用户提供了一些令人兴奋的主题、皮肤和 UI 组件等等Haroopad Markdown Editor for Linux访问主页: http://pad.haroopress.com/5. ReTextReText 是为 Linux 和其它几个 POSIX 兼容操作系统提供的简单、轻量、强大的 Markdown 编辑器。它还可以作为一个 reStructuredText 编辑器，并且具有以下的特性：简单直观的 GUI具备高定制性，用户可以自定义语法文件和配置选项支持多种配色方案支持使用多种数学公式启用导出扩展等等ReText Markdown Editor for Linux访问主页: https://github.com/retext-project/retext6. UberWriterUberWriter 是一个简单、易用的 Linux Markdown 编辑器。它的开发受 Mac OS X 上的 iA writer 影响很大，同样它也具备这些卓越的特性：使用 pandoc 进行所有的文本到 HTML 的转换提供了一个简洁的 UI 界面提供了一种 专心 （ distraction free ） 模式，高亮用户最后的句子支持拼写检查支持全屏模式支持用 pandoc 导出 PDF、HTML 和 RTF启用语法高亮和数学函数等等UberWriter Markdown Editor for Linux访问主页: http://uberwriter.wolfvollprecht.de/7. Mark My WordsMark My Words 同样也是一个轻…

Fedora 中的容器技术：systemd-nspawn
type: item
date: 2016-07-29T00:54:00+08:00
description: 欢迎来到“Fedora 中的容器技术”系列！本文是该系列文章中的第一篇，它将说明你可以怎样使用 Fedora 中各种可用的容器技术。本文将学习 systemd-nspawn 的相关知识。容器是什么？一个容器就是一个用户空间实例，它能够在与托管容器的系统（叫做宿主系统）相隔离的环境中运行一个程序或者一个操作系统。这和 chroot 或 虚拟机 的思想非常类似。运行在容器中的进程是由与宿主操作系统相同的内核来管理的，但它们是与宿主文件系统以及其它进程隔离开的。什么是 systemd-nspawn？systemd 项目认为应当将容器技术变成桌面的基础部分，并且应当和用户的其余系统集成在一起。为此，systemd 提供了 systemd-nspawn，这款工具能够使用多种 Linux 技术创建容器。它也提供了一些容器管理工具。systemd-nspawn 和 chroot 在许多方面都是类似的，但是前者更加强大。它虚拟化了文件系统、进程树以及客户系统中的进程间通信。它的吸引力在于它提供了很多用于管理容器的工具，例如用来管理容器的 machinectl。由 systemd-nspawn 运行的容器将会与 systemd 组件一同运行在宿主系统上。举例来说，一个容器的日志可以输出到宿主系统的日志中。在 Fedora 24 上，systemd-nspawn 已经从 systemd 软件包分离出来了，所以你需要安装 systemd-container 软件包。一如往常，你可以使用 dnf install systemd-container 进行安装。创建容器使用 systemd-nspawn 创建一个容器是很容易的。假设你有一个专门为 Debian 创造的应用，并且无法在其它发行版中正常运行。那并不是一个问题，我们可以创造一个容器！为了设置容器使用最新版本的 Debian（现在是 Jessie），你需要挑选一个目录来放置你的系统。我暂时将使用目录 ~/DebianJessie。一旦你创建完目录，你需要运行 debootstrap，你可以从 Fedora 仓库中安装它。对于 Debian Jessie，你运行下面的命令来初始化一个 Debian 文件系统。$ debootstrap --arch=amd64 stable ~/DebianJessie 以上默认你的架构是 x86\_64。如果不是的话，你必须将架构的名称改为 amd64。你可以使用 uname -m 得知你的机器架构。一旦设置好你的根目录，你就可以使用下面的命令来启动你的容器。$ systemd-nspawn -bD ~/DebianJessie 容器将会在数秒后准备好并运行，当你试图登录时就会注意到：你无法使用你的系统上任何账户。这是因为 systemd-nspawn 虚拟化了用户。修复的方法很简单：将之前的命令中的 -b 移除即可。你将直接进入容器的 root 用户的 shell。此时，你只能使用 passwd 命令为 root 设置密码，或者使用 adduser 命令添加一个新用户。一旦设置好密码或添加好用户，你就可以把 -b 标志添加回去然后继续了。你会进入到熟悉的登录控制台，然后你使用设置好的认证信息登录进去。以上对于任意你想在容器中运行的发行版都适用，但前提是你需要使用正确的包管理器创建系统。对于 Fedora，你应使用 DNF 而非 debootstrap。想要设置一个最小化的 Fedora 系统，你可以运行下面的命令，要将“/absolute/path/”替换成任何你希望容器存放的位置。$ sudo dnf --releasever=24 --installroot=/absolute/path/ install systemd passwd dnf fedora-release 设置网络如果你尝试启动一个服务，但它绑定了你宿主机正在使用的端口，你将会注意到这个问题：你的容器正在使用和宿主机相同的网络接口。幸运的是，systemd-nspawn 提供了几种可以将网络从宿主机分开的方法。本地网络第一种方法是使用 --private-network 标志，它默认仅创建一个回环设备。这对于你不需要使用网络的环境是非常理想的，例如构建系统和其它持续集成系统。多个网络接口如果你有多个网络接口设备，你可以使用 --network-interface 标志给容器分配一个接口。想要给我的容器分配 eno1，我会添加选项 --network-interface=eno1。当某个接口分配给一个容器后，宿主机就不能同时使用那个接口了。只有当容器彻底关闭后，宿主机才可以使用那个接口。共享网络接口对于我们中那些并没有额外的网络设备的人来说，还有其它方法可以访问容器。一种就是使用 --por…

使用 Python 创建你自己的 Shell （上）
type: item
date: 2016-07-28T19:11:00+08:00
description: 我很想知道一个 shell （像 bash，csh 等）内部是如何工作的。于是为了满足自己的好奇心，我使用 Python 实现了一个名为 yosh （Your Own Shell）的 Shell。本文章所介绍的概念也可以应用于其他编程语言。（提示：你可以在这里查找本博文使用的源代码，代码以 MIT 许可证发布。在 Mac OS X 10.11.5 上，我使用 Python 2.7.10 和 3.4.3 进行了测试。它应该可以运行在其他类 Unix 环境，比如 Linux 和 Windows 上的 Cygwin。）让我们开始吧。步骤 0：项目结构对于此项目，我使用了以下的项目结构。yosh_project |-- yosh |-- __init__.py |-- shell.py yosh_project 为项目根目录（你也可以把它简单命名为 yosh）。yosh 为包目录，且 __init__.py 可以使它成为与包的目录名字相同的包（如果你不用 Python 编写的话，可以忽略它。）shell.py 是我们主要的脚本文件。步骤 1：Shell 循环当启动一个 shell，它会显示一个命令提示符并等待你的命令输入。在接收了输入的命令并执行它之后（稍后文章会进行详细解释），你的 shell 会重新回到这里，并循环等待下一条指令。在 shell.py 中，我们会以一个简单的 main 函数开始，该函数调用了 shell\_loop() 函数，如下：def shell_loop(): # Start the loop here def main(): shell_loop() if __name__ == "__main__": main() 接着，在 shell_loop() 中，为了指示循环是否继续或停止，我们使用了一个状态标志。在循环的开始，我们的 shell 将显示一个命令提示符，并等待读取命令输入。import sys SHELL_STATUS_RUN = 1 SHELL_STATUS_STOP = 0 def shell_loop(): status = SHELL_STATUS_RUN while status == SHELL_STATUS_RUN: ### 显示命令提示符 sys.stdout.write('> ') sys.stdout.flush() ### 读取命令输入 cmd = sys.stdin.readline() 之后，我们 切分命令 （ tokenize ） 输入并进行 执行 （ execute ） （我们即将实现 tokenize 和 execute 函数）。因此，我们的 shell\_loop() 会是如下这样：import sys SHELL_STATUS_RUN = 1 SHELL_STATUS_STOP = 0 def shell_loop(): status = SHELL_STATUS_RUN while status == SHELL_STATUS_RUN: ### 显示命令提示符 sys.stdout.write('> ') sys.stdout.flush() ### 读取命令输入 cmd = sys.stdin.readline() ### 切分命令输入 cmd_tokens = tokenize(cmd) ### 执行该命令并获取新的状态 status = execute(cmd_tokens) 这就是我们整个 shell 循环。如果我们使用 python shell.py 启动我们的 shell，它会显示命令提示符。然而如果我们输入命令并按回车，它会抛出错误，因为我们还没定义 tokenize 函数。为了退出 shell，可以尝试输入 ctrl-c。稍后我将解释如何以优雅的形式退出 shell。步骤 2： 命令切分 （ tokenize ） 当用户在我们的 shell 中输入命令并按下回车键，该命令将会是一个包含命令名称及其参数的长字符串。因此，我们必须切分该字符串（分割一个字符串为多个元组）。咋一看似乎很简单。我们或许可以使用 cmd.split()，以空格分割输入。它对类似 ls -a my_folder 的命令起作用，因为它能够将命令分割为一个列表 ['ls', '-a', 'my_folder']，这样我们便能轻易处理它们了。然而，也有一些类似 echo "Hello World" 或 echo 'Hello World' 以单引号或双引号引用参数的情况。如果我们使用 cmd.spilt，我们将会得到一个存有 3 个标记的列表 ['echo', '"Hello', 'World"'] 而不是 2 个标记的列表 ['echo', 'Hello World']。幸运的…

怎样在 Ubuntu 中修改默认程序
type: item
date: 2016-07-28T16:25:00+08:00
description: 简介: 这个新手指南会向你展示如何在 Ubuntu Linux 中修改默认程序对于我来说，安装 VLC 多媒体播放器是安装完 Ubuntu 16.04 该做的事中最先做的几件事之一。为了能够使我双击一个视频就用 VLC 打开，在我安装完 VLC 之后我会设置它为默认程序。作为一个新手，你需要知道如何在 Ubuntu 中修改任何默认程序，这也是我今天在这篇指南中所要讲的。在 Ubuntu 中修改默认程序这里提及的方法适用于所有的 Ubuntu 12.04，Ubuntu 14.04 和Ubuntu 16.04。在 Ubuntu 中，这里有两种基本的方法可以修改默认程序：通过系统设置通过右键菜单1.通过系统设置修改 Ubuntu 的默认程序进入 Unity 面板并且搜索 系统设置 （ System Settings ） ：在 系统设置 （ System Settings ） 中，选择 详细选项 （ Details ） ：在左边的面板中选择 默认程序 （ Default Applications ） ，你会发现在右边的面板中可以修改默认程序。正如看到的那样，这里只有少数几类的默认程序可以被改变。你可以在这里改变浏览器、邮箱客户端、日历、音乐、视频和相册的默认程序。那其他类型的默认程序怎么修改？不要担心，为了修改其他类型的默认程序，我们会用到右键菜单。2.通过右键菜单修改默认程序如果你使用过 Windows 系统，你应该看见过右键菜单的“打开方式”，可以通过这个来修改默认程序。我们在 Ubuntu 中也有相似的方法。右键一个还没有设置默认打开程序的文件，选择“ 属性 （ properties ） ”从右键菜单中选择属性在这里，你可以选择使用什么程序打开，并且设置为默认程序。在 Ubuntu 中设置打开 WebP 图片的默认程序为 gThumb小菜一碟不是么？一旦你做完这些，所有同样类型的文件都会用你选择的默认程序打开。我很希望这个新手指南对你在修改 Ubuntu 的默认程序时有帮助。如果你有任何的疑问或者建议，可以随时在下面评论。via: https://itsfoss.com/change-default-applications-ubuntu/作者：Abhishek Prakash 译者：Locez 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出