2016年9月

一个小问题:你每天做什么事?当然了,好多事情,但是我可以指出一件事,你几乎每天(如果不是每天)都会用 Google 搜索,我说的对吗?(LCTT 译注:Google 是啥?/cry )

现在,如果你是一位 Linux 用户(我猜你也是),这里有另外一个问题:如果你甚至不用离开终端就可以进行 Google 搜索那岂不是相当棒?甚至不用打开一个浏览器窗口?

如果你是一位类 *nix 系统的狂热者而且也是喜欢终端界面的人,我知道你的答案是肯定的,而且我认为,接下来你也将喜欢上我今天将要介绍的这个漂亮的小工具。它被称做 Googler。

Googler:在你 linux 终端下的 google

Googler 是一个简单的命令行工具,它用于直接在命令行窗口中进行 google 搜索,Googler 主要支持三种类型的 Google 搜索:

  • Google 搜索:简单的 Google 搜索,和在 Google 主页搜索是等效的。
  • Google 新闻搜索:Google 新闻搜索,和在 Google News 中的搜索一样。
  • Google 站点搜索:Google 从一个特定的网站搜索结果。

Googler 用标题、链接和网页摘要来显示搜索结果。搜索出来的结果可以仅通过两个按键就可以在浏览器里面直接打开。

在 Ubuntu 下安装 Googler

先让我们进行软件的安装。

首先确保你的 python 版本大于等于 3.3,可以用以下命令查看。

python3 --version

如果不是的话,就更新一下。Googler 要求 python 版本 3.3 及以上运行。

虽然 Googler 现在还不能在 Ununtu 的软件库中找到,我们可以很容易地从 GitHub 仓库中安装它。我们需要做的就是运行以下命令:

cd /tmp
git clone https://github.com/jarun/googler.git
cd googler
sudo make install
cd auto-completion/bash/
sudo cp googler-completion.bash /etc/bash_completion.d/

这样 Googler 就带着命令自动完成特性安装完毕了。

特点 & 基本用法

如果我们快速浏览它所有的特点,我们会发现 Googler 实际上是一个十分强大的工具,它的一些主要特点就是:

交互界面

在终端下运行以下命令:

googler

交互界面就会被打开,Googler 的开发者 Arun Prakash Jana 称之为 全向提示符 omniprompt ,你可以输入 ? 去寻找可用的命令参数:

在提示符处,输入任何搜索词汇关键字去开始搜索,然后你可以输入n或者p导航到搜索结果的后一页和前一页。

要在浏览器窗口中打开搜索结果,直接输入搜索结果的编号,或者你可以输入 o 命令来打开这个搜索网页。

新闻搜索

如果你想去搜索新闻,直接以N参数启动 Googler:

googler -N

随后的搜索将会从 Google News 抓取结果。

站点搜索

如果你想从某个特定的站点进行搜索,以w 域名参数启动 Googler:

googler -w itsfoss.com

随后的搜索会只从这个博客中抓取结果!

手册页

运行以下命令去查看 Googler 的带着各种用例的手册页:

man googler

指定国家/地区的 Google 搜索引擎

googler -c in "hello world"

上面的示例命令将会开始从 Google 的印度域名搜索结果(in 代表印度)

还支持:

  • 通过时间和语言偏好来过滤搜索结果
  • 支持 Google 查询关键字,例如:site:example.com 或者 filetype:pdf 等等
  • 支持 HTTPS 代理
  • Shell 命令自动补全
  • 禁用自动拼写纠正

这里还有更多特性。你可以用 Googler 去满足你的需要。

Googler 也可以和一些基于文本的浏览器整合在一起(例如:elinkslinkslynx、w3m 等),所以你甚至都不用离开终端去浏览网页。在 Googler 的 GitHub 项目页可以找到指导。

如果你想看一下 Googler 不同的特性的视频演示,方便的话你可以查看 GitHub 项目页附带的终端记录演示页: jarun/googler v2.7 quick demo

对于 Googler 的看法?

尽管 googler 可能并不是对每个人都是必要和渴望的,对于一些不想打开浏览器进行 google 搜索或者就是想泡在终端窗口里面的人来说,这是一个很棒的工具。你认为呢?


via: https://itsfoss.com/review-googler-linux/

作者:Munif Tanjim 译者:LinuxBars 校对:wxy

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

Pentbox 是一个包含了许多可以使渗透测试工作变得简单流程化的工具的安全套件。它是用 Ruby 编写并且面向 GNU / Linux,同时也支持 Windows、MacOS 和其它任何安装有 Ruby 的系统。在这篇短文中我们将讲解如何在 Kali Linux 环境下设置蜜罐。如果你还不知道什么是 蜜罐 honeypot ,“蜜罐是一种计算机安全机制,其设置用来发现、转移、或者以某种方式,抵消对信息系统的非授权尝试。”

下载 Pentbox:

在你的终端中简单的键入下面的命令来下载 pentbox-1.8。

root@kali:~# wget http://downloads.sourceforge.net/project/pentbox18realised/pentbox-1.8.tar.gz

解压 pentbox 文件

使用如下命令解压文件:

root@kali:~# tar -zxvf pentbox-1.8.tar.gz

运行 pentbox 的 ruby 脚本

改变目录到 pentbox 文件夹:

root@kali:~# cd pentbox-1.8/

使用下面的命令来运行 pentbox:

root@kali:~# ./pentbox.rb

设置一个蜜罐

使用选项 2 (Network Tools) 然后是其中的选项 3 (Honeypot)。

完成让我们执行首次测试,选择其中的选项 1 (Fast Auto Configuration)

这样就在 80 端口上开启了一个蜜罐。打开浏览器并且打开链接 http://192.168.160.128 (这里的 192.168.160.128 是你自己的 IP 地址。)你应该会看到一个 Access denied 的报错。

并且在你的终端应该会看到 “HONEYPOT ACTIVATED ON PORT 80” 和跟着的 “INTRUSION ATTEMPT DETECTED”。

现在,如果你在同一步选择了选项 2 (Manual Configuration), 你应该看见更多的其它选项:

执行相同的步骤但是这次选择 22 端口 (SSH 端口)。接着在你家里的路由器上做一个端口转发,将外部的 22 端口转发到这台机器的 22 端口上。或者,把这个蜜罐设置在你的云端服务器的一个 VPS 上。

你将会被有如此多的机器在持续不断地扫描着 SSH 端口而震惊。 你知道你接着应该干什么么? 你应该黑回它们去!桀桀桀!

如果视频是你的菜的话,这里有一个设置蜜罐的视频:


via: https://www.blackmoreops.com/2016/05/06/setup-honeypot-in-kali-linux/

作者:<blackmoreops.com> 译者:wcnnbdk1 校对:wxy

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

图片: 由Kate Ter Haar提供图片。 opensource.com 后期修饰。 CC BY-SA 2.0

如果你是盲人或像我一样有视力障碍,你可能经常需要各种软硬件才能做到视觉正常的人们视之为理所当然的事情。这其中之一就是阅读的印刷图书的专用格式: 布莱叶盲文 Braille (假设你知道怎样阅读它)或特殊的文本格式例如 DAISY。

DAISY 是什么?

DAISY 是 数字化无障碍信息系统 Digital Accessible Information System 的缩写。 它是一种开放的标准,专用于帮助盲人阅读课本、杂志、报纸、小说,以及你想到的各种东西。 它由 DAISY 联盟创立于上世纪 90 年代中期,该联盟包括的组织们致力于制定出一套标准,可以让以这种方式标记的文本易于阅读、可以跳转、进行注释以及其它的文本操作,就像视觉正常的人能做的一样。

当前的 DAISY 3.0 版本发布于 2005 年中期,是一个完全重写了的标准。它创建的目的是更容易撰写遵守该规范的书籍。值得注意的是,DAISY 能够仅支持纯文本、或仅是录音(PCM wave 文件格式或者 MP3 格式)、或既有文本也有录音。特殊的软件能阅读这类书,并支持用户设置书签和目录导航,就像正常人阅读印刷书籍一样。

DAISY 是怎样工作的呢?

DAISY,除开特殊的版本,它工作时有点像这样:你拥有自己的主向导文件(在 DAISY 2.02 中是 ncc.html),它包含书籍的元数据,比如作者姓名、版权信息、书籍页数等等。而在 DAISY 3.0 中这个文件是一个有效的 XML 文件,以及一个被强烈建议包含在每一本书中的 DTD(文档类型定义)文件。

在导航控制文件中,标记精确描述了各个位置——无论是文本导航中当前光标位置还是录音中的毫秒级定位,这让该软件可以跳到确切的位置,就像视力健康的人翻到某个章节一样。值得注意的是这种导航控制文件仅包含书中主要的、最大的书籍组成部分的位置。

更小的内容组成部分由 SMIL( 同步多媒体集成语言 Synchronized Multimedia Integration Language )文件处理。导航的层次很大程度上取决于书籍的标记的怎么样。这样设想一下,如果印刷书籍没有章节标题,你就需要花很多的时间来确定自己阅读的位置。如果一本 DAISY 格式的书籍被标记的很差,你可能只能转到书本的开头或者目录。如果书籍被标记的太差了(或者完全没有标记),你的 DAISY 阅读软件很可能会直接忽略它。

为什么需要专门的软件?

你可能会问,如果 DAISY 仅仅是 HTML、XML、录音文件,为什么还需要使用专门的软件进行阅读和操作。单纯从技术上而言,你并不需要。专业化的软件大多数情况下是为了方便。这就像在 Linux 操作系统中,一个简单的 Web 浏览器可以被用来打开并阅读书籍。如果你在一本 DAISY 3 的书中点击 XML 文件,软件通常做的就是读取那些你赋予访问权限的书籍的名称,并建立一个列表让你点击选择要打开的书。如果书籍被标记的很差,它不会显示在这份清单中。

创建 DAISY 则完全是另一件事了,通常需要专门的软件,或需要拥有足够的专业知识来修改一个通用的软件以达到这样的目的。

结语

幸运的是,DAISY 是一个已确立的标准。虽然它在阅读方面表现的很棒,但是需要特殊软件来生产它使得视力缺陷者孤立于正常人眼中的世界,在那里人们可以以各种格式去阅读他们电子化书籍。这就是 DAISY 联盟在 EPUB 格式取得了 DAISY 成功的原因,它的第 3 版支持一种叫做“媒体覆盖”的规范,基本上来说是在 EPUB 电子书中可选增加声频或视频。由于 EPUB 和 DAISY 共享了很多 XML 标记,一些能够阅读 DAISY 的软件能够看到 EPUB 电子书但不能阅读它们。这也就意味着只要网站为我们换到这种开放格式的书籍,我们将会有更多可选的软件来阅读我们的书籍。


via: https://opensource.com/life/16/5/daisy-linux-compatible-text-format-visually-impaired

作者:Kendell Clark 译者:theArcticOcean 校对:wxy

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

当你打开你的机器,开机自检(POST)成功完成后,BIOS(基本输入输出系统)立即定位所配置的引导介质,并从 MBR(主引导记录)或 GUID(全局唯一标识符)分区表读取一些命令,这是引导介质的最前面 512 个字节内容。主引导记录(MBR)中包含两个重要的信息集合,第一个是引导程序,第二个是分区表。

什么是引导程序?

引导程序 Boot Loader 是存储在 MBR(主引导记录)或 GUID(全局唯一标识符)分区表中的一个小程序,用于帮助把操作系统装载到内存中。如果没有引导程序,那么你的操作系统将不能够装载到内存中。

有一些我们可以随同 Linux 安装到系统上的引导程序,在这篇文章里,我将简要地谈论几个最好的可以与 Linux 一同工作的 Linux 引导程序。

1. GNU GRUB

GNU GRUB 是一个非常受欢迎,也可能是用的最多的具有多重引导能力的 Linux 引导程序,它以原始的 Eirch Stefan Broleyn 发明的 GRUB( 大一统引导程序 GRand Unified Bootlader )为基础。GNU GRUB 增强了原来的 GRUB,带来了一些改进、新的特性和漏洞修复。

重要的是,GRUB 2 现在已经取代了 GRUB。值得注意的是,GRUB 这个名字被重新命名为 GRUB Legacy,但没有活跃开发,不过,它可以用来引导老的系统,因为漏洞修复依然继续。

GRUB 具有下面一些显著的特性:

  • 支持多重引导
  • 支持多种硬件结构和操作系统,比如 Linux 和 Windows
  • 提供一个类似 Bash 的交互式命令行界面,从而用户可以运行 GRUB 命令来和配置文件进行交互
  • 允许访问 GRUB 编辑器
  • 支持设置加密口令以确保安全
  • 支持从网络进行引导,以及一些次要的特性

访问主页: https://www.gnu.org/software/grub/

2. LILO

LILO ( Linux 引导程序 LInux LOader )是一个简单但强大且非常稳定的 Linux 引导程序。由于 GRUB 有很大改善和增加了许多强大的特性,越来越受欢迎,因此 LILO 在 Linux 用户中已经不是很流行了。

当 LILO 引导的时候,单词“LILO”会出现在屏幕上,并且每一个字母会在一个特定的事件发生前后出现。然而,从 2015 年 12 月开始,LILO 的开发停止了,它有许多特性比如下面列举的:

  • 不提供交互式命令行界面
  • 支持一些错误代码
  • 不支持网络引导(LCTT 译注:其变体 ELILO 支持 TFTP/DHCP 引导)
  • 所有的文件存储在驱动的最开始 1024 个柱面上
  • 面临 BTFS、GTP、RAID 等的限制

访问主页: http://lilo.alioth.debian.org/

3. BURG - 新的引导程序

基于 GRUB,BURG 是一个相对来说比较新的引导程序(LCTT 译注:已于 2011 年停止了开发)。由于 BURG 起源于 GRUB, 所以它带有一些 GRUB 主要特性。尽管如此, BURG 也提供了一些出色的特性,比如一种新的对象格式可以支持包括 Linux、Windows、Mac OS、 FreeBSD 等多种平台。

另外,BURG 支持可高度配置的文本和图标模式的引导菜单,计划增加的“流”支持未来可以不同的输入/输出设备一同工作。

访问主页: https://launchpad.net/burg

4. Syslinux

Syslinux 是一种能从光盘驱动器、网络等进行引导的轻型引导程序。Syslinux 支持诸如 MS-DOS 上的 FAT、 Linux 上的 ext2、ext3、ext4 等文件系统。Syslinux 也支持未压缩的单一设备上的 Btrfs。

注意由于 Syslinux 仅能访问自己分区上的文件,因此不具备多重文件系统引导能力。

访问主页: http://www.syslinux.org/wiki/index.php?title=The_Syslinux_Project

结论

一个引导程序允许你在你的机器上管理多个操作系统,并在某个的时间选择其中一个使用。没有引导程序,你的机器就不能够装载内核以及操作系统的剩余部分。

我们是否遗漏了任何一流的 Linux 引导程序?如果有请让我们知道,请在下面的评论表中填入值得推荐的 Linux 系统引导程序。


via: http://www.tecmint.com/best-linux-boot-loaders/

作者:Aaron Kili 译者:ucasFL 校对:wxy

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

Image by : Photo by Becky Svartström. Modified by Opensource.com. CC BY-SA 4.0

图片来源:照片来自 Becky Svartström, Opensource.com 修改

Patricia Torvalds 暂时还不像她的父亲 Linus 一样闻名于 Linux 和开源领域。

在她 18 岁的时候,Patricia 已经是一个有多项技术成就、拥有开源行业经验的女权主义者,而且她已经把目标放在进入杜克大学普拉特工程学院的新学期上了。当时她以实习生的身份在位于美国奥勒冈州伯特兰市的 Puppet 实验室工作。但不久后,她就将前往北卡罗纳州的达拉莫,开始秋季学期的大学学习。

在这次独家采访中,Patricia 谈到了使她对计算机科学与工程学感兴趣的原因(剧透警告:不是因为她的父亲),她所在高中学校在技术教学上所采取的“正确”方法,女权主义在她的生活中扮演的重要角色,以及对技术缺乏多元化的思考。

是什么使你对学习计算机科学与工程学发生兴趣?

我在技术方面的兴趣主要来自于高中时代。我曾一度想投身于生物学,这种想法一直维持到大约大学二年级的时候。大二结束以后,我在波特兰 VA 做网页设计实习生。与此同时,我参加了一个叫做“ 探索冒险家 Exploratory Ventures ”(XV)的工程学课程,在我大二学年的后期,我们把一个水下机器人送入了太平洋。但是,转折点大概是在我大三学年的中期被授予“NCWIT 的计算机之理想”奖的地区冠军和全国亚军的时候出现的(LCTT 译注:NCWIT - National Center for Women & IT,女性与 IT 国家中心)。

这个奖项的获得让我感觉到确立了自己的兴趣。当然,我认为最重要的部分是我加入到一个由所有获奖者组成的 Facebook 群。女孩们获奖很难想象,因此我们彼此非常支持。由于在 XV 和 VA 的工作,我在获奖前就已经确实对计算机科学发生了兴趣,但是和这些女孩们的交谈更加坚定了这份兴趣,使之更加强烈。再后来,后期大三、大四年级的时候执教 XV 也使我体会到工程学和计算机科学的乐趣。

你打算学习什么?你已经知道自己毕业后想干什么了吗?

我希望要么主修机械,要么是电子和计算机工程学,以及计算机科学,并且辅修女性学。毕业以后,我希望在一个支持社会公益或者为其创造技术的公司工作,或者自己开公司。

我的女儿在高中有一门 Visual Basic 的编程课。她是整个班上唯一的一个女生,并且以困扰和痛苦的经历结束了这门课程。你的经历是什么样的呢?

我的高中在高年级的时候开设了计算机科学的课程,我也学习了 Visual Basic!这门课不是很糟糕,但我的确是 20 多个人的班级里仅有的三四个女生之一。其他的计算机课程似乎也有相似的性别比例差异。然而,我所在的高中极其小,并且老师对技术包容性非常支持,所以我并没有感到困扰。希望在未来的一些年里这些课程会变得更加多样化。

你的学校做了哪些促进技术的举措?它们如何能够变得更好?

我的高中学校给了我们长时间接触计算机的机会,老师们会突然在不相关的课程上安排技术相关的任务,有几次我们还为社会实践课程建了一个网站,我认为这很棒,因为它使我们每一个人都能接触到技术。机器人俱乐部也很活跃并且资金充足,但是非常小,不过我不是其中的成员。学校的技术/工程学项目中一个非常重要的组成部分是一门叫做” 探索冒险家 Exploratory Ventures “(XV)的由学生自己教的工程学课程,这是一门需要亲自动手的课程,并且每年换一个工程学或者计算机科学方面的难题。我和我的一个同学在这儿教了两年,在课程结束以后,有学生上来告诉我他们对从事工程学或者计算机科学发生了兴趣。

然而,我的高中没有特别的关注于让年轻女性加入到这些课程中来,并且在人种上也没有呈现多样化。计算机的课程和俱乐部大量的主要成员都是男性白人学生。这的确应该需要有所改善。

在成长过程中,你如何在家运用技术?

老实说,小的时候,我使用我的上机时间(我的父亲 Linus 设置了一个跟踪装置,当我们上网一个小时就会断线)来玩尼奥宠物和或者相似的游戏。我想我本可以搞乱跟踪装置或者在不连接网络的情况下玩游戏,但我没有这样做。我有时候也会和我的父亲做一些小的科学项目,我还记得有一次我和他在电脑终端上打印出几千个“Hello world”。但是大多数时候,我都是和我的妹妹一起玩网络游戏,直到高中的时候才开始学习计算机。

你在高中学校的女权俱乐部很活跃,从这份经历中你学到了什么?现在对你来说什么女权问题是最重要的?

在高中二年级的后期,我和我的朋友一起建立了女权俱乐部。刚开始,我们受到了很多人对俱乐部的排斥,并且这从来就没有完全消失过。到我们毕业的时候,女权主义思想已经彻底成为了学校文化的一部分。我们在学校做的女权主义工作通常是在一些比较直接的方面,并集中于像着装要求这样一些问题。

就我个人来说,我更关注于 新女性主义 intersectional feminism ,这是一种致力于(消除)其它方面压迫(比如,种族歧视和阶级压迫等)的女权主义。Facebook 上的 Gurrilla Feminism 专页是新女性主义一个非常好的例子,并且我从中学到了很多。我目前管理着波特兰分会。

在技术多样性方面女权主义对我也非常重要,尽管作为一名和技术世界有很强联系的高年级白人女性,女权主义问题对我产生的影响相比其他人来说少得多,我所参与的新女性主义也是同样的。《Model View Culture》的出版非常鼓舞我,谢谢 Shanley Kane 所做的这一切。

你会给想教他们的孩子学习编程的父母什么样的建议?

老实说,从没有人推着我学习计算机科学或者工程学。正如我前面说的,在很长一段时间里,我想成为一名遗传学家。大二结束的那个夏天,我在 VA 做了一个夏天的网页设计实习生,这彻底改变了我之前的想法。所以我不知道我是否能够充分回答这个问题。

我的确认为真正的兴趣很重要。如果在我 12 岁的时候,我的父亲让我坐在一台电脑前,教我配置一台网站服务器,我认为我不会对计算机科学感兴趣。相反,我的父母给了我很多可以支配的自由时间让我去做自己想做的事情,绝大多数时候是我在为我的尼奥宠物游戏编写糟糕的 HTML 网站。比我小的妹妹们没有一个对工程学或计算机科学感兴趣,我的父母也不在乎。我感到很幸运的是我的父母给了我和我的妹妹们鼓励和资源去探索自己的兴趣。

仍然要讲的是,在我成长过程中我也常说未来职业生涯要“像我爹一样”,尽管那时我还不知道我父亲是干什么的,只知道他有一个很酷的工作。另外,中学的时候有一次我告诉我的父亲这件事,然后他没有发表什么看法只是告诉我高中的时候不要想这事。所以我猜想这从一定程度上鼓励了我。

对于开源社区的领导者们,你有什么建议给他们来吸引和维持更加多元化的贡献者?

我实际上在开源社区并不是特别积极和活跃,我更喜欢和其它女性讨论计算机。我是“NCWIT 的计算机之理想”成员之一,这是我对技术持久感到兴趣的一个重要方面,同样也包括 Facebook 的”Ladies Storm Hackathons”群。

我认为对于吸引和留住那些天才而形形色色的贡献者,安全的空间很重要。我曾经看到过在一些开源社区有人发表关于女性歧视和种族主义的评论,当人们指出这一问题随后该人就被解职了。我认为要维持一个专业的社区必须就骚扰事件和不正当行为有一个高标准。当然,人们已经有、而且还会有关于在开源社区或其他任何社区能够表达什么意见的更多的观点。然而,如果社区领导人真的想吸引和留住形形色色的天才们,他们必须创造一个安全的空间并且以高标准要求社区成员们。

我也觉得一些社区领导者不明白多元化的价值。很容易觉得在技术上是唯才是举的,并且这个原因有一些是他们不在意技术上不处于中心位置的人,问题来自于发展的早期。他们争论如果一个人在自己的工作上做得很好,那么他的性别或者民族还有性取向这些情况都变得不重要了。这很容易反驳,但我不想看到为这些错误找的理由。我认为多元化的缺失是一个错误,我们应该为之负责并尽力去改善这件事。


via: http://opensource.com/life/15/8/patricia-torvalds-interview

作者:Rikki Endsley 译者:ucasFL 校对:LinuxBars, wxy

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

旅行中备份图片 - 组件

介绍

我在很长的时间内一直在寻找一个旅行中备份图片的理想方法,把 SD 卡放进你的相机包会让你暴露在太多的风险之中:SD 卡可能丢失或者被盗,数据可能损坏或者在传输过程中失败。比较好的一个选择是复制到另外一个介质中,即使它也是个 SD 卡,并且将它放到一个比较安全的地方去,备份到远端也是一个可行的办法,但是如果去了一个没有网络的地方就不太可行了。

我理想的备份步骤需要下面的工具:

  1. 用一台 iPad pro 而不是一台笔记本。我喜欢轻装旅行,我的大部分旅程都是商务相关的(而不是拍摄休闲的),我痛恨带着个人笔记本的时候还得带着商务本。而我的 iPad 却一直带着,这就是我为什么选择它的原因。
  2. 用尽可能少的硬件设备。
  3. 设备之间的连接需要很安全。我需要在旅馆和机场使用这套设备,所以设备之间的连接需要是封闭而加密的。
  4. 整个过程应该是可靠稳定的,我还用过其他的路由器/组合设备,但是效果不太理想

设备

我配置了一套满足上面条件并且在未来可以扩充的设备,它包含下面这些部件的使用:

  1. 9.7 英寸的 iPad Pro,这是本文写作时最强大、轻薄的 iOS 设备,苹果笔不是必需的,但是作为零件之一,当我在路上可以做一些编辑工作,所有的重活由树莓派做 ,其他设备只能通过 SSH 连接就行。
  2. 安装了 Raspbian 操作系统树莓派 3(LCTT 译注:Raspbian 是基于 Debian 的树莓派操作系统)。
  3. 树莓派的 Mini SD卡盒子/外壳
  4. 128G 的优盘,对于我是够用了,你可以买个更大的。你也可以买个像这样的移动硬盘,但是树莓派没法通过 USB 给移动硬盘提供足够的电量,这意味你需要额外准备一个供电的 USB hub 以及电缆,这就破坏了我们让设备轻薄的初衷。
  5. SD 读卡器
  6. 另外的 SD 卡,我会使用几个 SD 卡,在用满之前就会立即换一个,这样就会让我在一次旅途当中的照片散布在不同的 SD 卡上。

下图展示了这些设备之间如何相互连接。

旅行时照片的备份-流程图

树莓派会作为一个安全的热点。它会创建一个自己的 WPA2 加密的 WIFI 网络,iPad Pro 会连入其中。虽然有很多在线教程教你如何创建 Ad Hoc 网络(计算机到计算机的单对单网络),还更简单一些,但是它的连接是不加密的,而且附件的设备很容易就能连接进去。因此我选择创建 WIFI 网络。

相机的 SD 卡通过 SD 读卡器插到树莓派 USB 端口之一,128G 的大容量优盘一直插在树莓派的另外一个 USB 端口上,我选择了一款闪迪的,因为体积比较小。主要的思路就是通过 Python 脚本把 SD 卡的照片备份到优盘上,备份过程是增量备份,每次脚本运行时都只有变化的(比如新拍摄的照片)部分会添加到备份文件夹中,所以这个过程特别快。如果你有很多的照片或者拍摄了很多 RAW 格式的照片,在就是个巨大的优势。iPad 将用来运行 Python 脚本,而且用来浏览 SD 卡和优盘的文件。

作为额外的好处,如果给树莓派连上一根能上网的网线(比如通过以太网口),那么它就可以共享互联网连接给那些通过 WIFI 连入的设备。

1. 树莓派的设置

这部分需要你卷起袖子亲自动手了,我们要用到 Raspbian 的命令行模式,我会尽可能详细的介绍,方便大家进行下去。

安装和配置 Raspbian

给树莓派连接鼠标、键盘和 LCD 显示器,将 SD 卡插到树莓派上,按照树莓派官网的步骤安装 Raspbian。

安装完后,打开 Raspbian 的终端,执行下面的命令:

sudo apt-get update
sudo apt-get upgrade

这将升级机器上所有的软件到最新,我将树莓派连接到本地网络,而且为了安全更改了默认的密码。

Raspbian 默认开启了 SSH,这样所有的设置可以在一个远程的设备上完成。我也设置了 RSA 验证,但这是可选的功能,可以在这里查看更多信息。

这是一个在 Mac 上在 iTerm 里建立 SSH 连接到树莓派上的截图14。(LCTT 译注:原文图丢失。)

建立 WPA2 加密的 WIFI AP

安装过程基于这篇文章,根据我的情况进行了调整。

1. 安装软件包

我们需要安装下面的软件包:

sudo apt-get install hostapd
sudo apt-get install dnsmasq

hostapd 用来使用内置的 WiFi 来创建 AP,dnsmasp 是一个组合的 DHCP 和 DNS 服务其,很容易设置。

2. 编辑 dhcpcd.conf

通过以太网连接树莓派,树莓派上的网络接口配置由 dhcpd 控制,因此我们首先忽略这一点,将 wlan0 设置为一个静态的 IP。

sudo nano /etc/dhcpcd.conf 命令打开 dhcpcd 的配置文件,在最后一行添加上如下内容:

denyinterfaces wlan0

注意:它必须放在如果已经有的其它接口行之上

3. 编辑接口

现在设置静态 IP,使用 sudo nano /etc/network/interfaces 打开接口配置文件,按照如下信息编辑wlan0部分:

allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

同样,然后 wlan1 编辑如下:

#allow-hotplug wlan1
#iface wlan1 inet manual
#    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

重要: 使用 sudo service dhcpcd restart 命令重启 dhcpd服务,然后用 sudo ifdown eth0; sudo ifup wlan0 命令来重载wlan0的配置。

4. 配置 Hostapd

接下来,我们需要配置 hostapd,使用 sudo nano /etc/hostapd/hostapd.conf 命令创建一个新的配置文件,内容如下:

interface=wlan0

# Use the nl80211 driver with the brcmfmac driver
driver=nl80211

# This is the name of the network
ssid=YOUR_NETWORK_NAME_HERE

# Use the 2.4GHz band
hw_mode=g

# Use channel 6
channel=6

# Enable 802.11n
ieee80211n=1

# Enable QoS Support
wmm_enabled=1

# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

# Accept all MAC addresses
macaddr_acl=0

# Use WPA authentication
auth_algs=1

# Require clients to know the network name
ignore_broadcast_ssid=0

# Use WPA2
wpa=2

# Use a pre-shared key
wpa_key_mgmt=WPA-PSK

# The network passphrase
wpa_passphrase=YOUR_NEW_WIFI_PASSWORD_HERE

# Use AES, instead of TKIP
rsn_pairwise=CCMP

配置完成后,我们需要告诉dhcpcd 在系统启动运行时到哪里寻找配置文件。 使用 sudo nano /etc/default/hostapd 命令打开默认配置文件,然后找到#DAEMON_CONF="" 替换成DAEMON_CONF="/etc/hostapd/hostapd.conf"

5. 配置 Dnsmasq

自带的 dnsmasp 配置文件包含很多信息方便你使用它,但是我们不需要那么多选项,我建议把它移动到别的地方(而不要删除它),然后自己创建一个新文件:

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig  
sudo nano /etc/dnsmasq.conf  

粘贴下面的信息到新文件中:

interface=wlan0      # Use interface wlan0
listen-address=192.168.1.1 # Explicitly specify the address to listen on
bind-interfaces      # Bind to the interface to make sure we aren't sending things elsewhere
server=8.8.8.8       # Forward DNS requests to Google DNS
domain-needed        # Don't forward short names
bogus-priv           # Never forward addresses in the non-routed address spaces.
dhcp-range=192.168.1.50,192.168.1.100,12h # Assign IP addresses in that range  with a 12 hour lease time

6. 设置 IPv4 转发

最后我们需要做的事就是配置包转发,用 sudo nano /etc/sysctl.conf 命令打开 sysctl.conf 文件,将包含 net.ipv4.ip_forward=1的那一行之前的#号删除,它将在下次重启时生效。

我们还需要给连接到树莓派的设备通过 WIFI 分享互联网连接,做一个 wlan0eth0 之间的 NAT。我们可以参照下面的脚本来实现。

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT  

我命名这个脚本名为 hotspot-boot.sh,然后让它可以执行:

sudo chmod 755 hotspot-boot.sh

该脚本应该在树莓派启动的时候运行。有很多方法实现,下面是我实现的方式:

  1. 把文件放到/home/pi/scripts目录下。
  2. 输入sudo nano /etc/rc.local命令编辑 rc.local 文件,将运行该脚本的命令放到 exit 0之前。(更多信息参照这里)。

编辑后rc.local看起来像这样:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

sudo /home/pi/scripts/hotspot-boot.sh &

exit 0

安装 Samba 服务和 NTFS 兼容驱动

我们要安装下面几个软件来启用 samba 协议,使文件浏览器能够访问树莓派分享的文件夹,ntfs-3g 可以使我们能够访问移动硬盘中 ntfs 文件系统的文件。

sudo apt-get install ntfs-3g
sudo apt-get install samba samba-common-bin

你可以参照这些文档来配置 Samba。

重要提示:参考的文档介绍的是挂载外置硬盘到树莓派上,我们不这样做,是因为在这篇文章写作的时候,树莓派在启动时的 auto-mounts 功能同时将 SD 卡和优盘挂载到/media/pi/上,该文章有一些多余的功能我们也不会采用。

2. Python 脚本

树莓派配置好后,我们需要开发脚本来实际拷贝和备份照片。注意,这个脚本只是提供了特定的自动化备份进程,如果你有基本的 Linux/树莓派命令行操作的技能,你可以 ssh 进树莓派,然后创建需要的文件夹,使用cprsync命令拷贝你自己的照片从一个设备到另外一个设备上。在脚本里我们用rsync命令,这个命令比较可靠而且支持增量备份。

这个过程依赖两个文件,脚本文件自身和backup_photos.conf这个配置文件,后者只有几行包含被挂载的目的驱动器(优盘)和应该挂载到哪个目录,它看起来是这样的:

mount folder=/media/pi/
destination folder=PDRIVE128GB

重要提示:在这个符号=前后不要添加多余的空格,否则脚本会失效。

下面是这个 Python 脚本,我把它命名为backup_photos.py,把它放到了/home/pi/scripts/目录下,我在每行都做了注释可以方便的查看各行的功能。

#!/usr/bin/python3

import os
import sys
from sh import rsync

'''
脚本将挂载到 /media/pi 的 SD 卡上的内容复制到目的磁盘的同名目录下,目的磁盘的名字在 .conf文件里定义好了。


Argument:  label/name of the mounted SD Card.
'''

CONFIG_FILE = '/home/pi/scripts/backup_photos.conf'
ORIGIN_DEV = sys.argv[1]

def create_folder(path):

    print ('attempting to create destination folder: ',path)
    if not os.path.exists(path):
        try: 
            os.mkdir(path)
            print ('Folder created.')
        except:
            print ('Folder could not be created. Stopping.')
            return
    else:
        print ('Folder already in path. Using that instead.')



confFile = open(CONFIG_FILE,'rU') 
#重要:: rU 选项将以统一换行模式打开文件,
#所以 \n 和/或 \r 都被识别为一个新行。

confList = confFile.readlines()
confFile.close()


for line in confList:
    line = line.strip('\n')

    try:
        name , value = line.split('=')

        if name == 'mount folder':
            mountFolder = value
        elif name == 'destination folder':
            destDevice = value


    except ValueError:
        print ('Incorrect line format. Passing.')
        pass


destFolder = mountFolder+destDevice+'/'+ORIGIN_DEV
create_folder(destFolder)

print ('Copying files...')

# 取消这行备注将删除不在源处的文件
# rsync("-av", "--delete", mountFolder+ORIGIN_DEV, destFolder)
rsync("-av", mountFolder+ORIGIN_DEV+'/', destFolder)

print ('Done.')

3. iPad Pro 的配置

因为重活都由树莓派干了,文件不通过 iPad Pro 传输,这比我之前尝试的一种方案有巨大的优势。我们在 iPad 上只需要安装上 Prompt2 来通过 SSH 连接树莓派就行了,这样你既可以运行 Python 脚本也可以手动复制文件了。

iPad 用 Prompt2 通过 SSH 连接树莓派

因为我们安装了 Samba,我们可以以更图形化的方式访问连接到树莓派的 USB 设备,你可以看视频,在不同的设备之间复制和移动文件,文件浏览器对于这种用途非常完美。(LCTT 译注:原文视频丢失。)

4. 将它们结合在一起

我们假设SD32GB-03是连接到树莓派 USB 端口之一的 SD 卡的卷标,PDRIVE128GB是那个优盘的卷标,也连接到设备上,并在上面指出的配置文件中定义好。如果我们想要备份 SD 卡上的图片,我们需要这么做:

  1. 给树莓派加电打开,将驱动器自动挂载好。
  2. 连接树莓派配置好的 WIFI 网络。
  3. Prompt2 这个 app 通过 SSH 连接到树莓派。
  4. 连接好后输入下面的命令:python3 backup_photos.py SD32GB-03

首次备份需要一些时间,这依赖于你的 SD 卡使用了多少容量。这意味着你需要一直保持树莓派和 iPad 设备连接不断,你可以在脚本运行之前通过 nohup 命令解决:

nohup python3 backup_photos.py SD32GB-03 &

运行完成的脚本如图所示

未来的定制

我在树莓派上安装了 vnc 服务,这样我可以通过其它计算机或在 iPad 上用 Remoter App连接树莓派的图形界面,我安装了 BitTorrent Sync 用来远端备份我的图片,当然需要先设置好。当我有了可以运行的解决方案之后,我会补充我的文章。

你可以在下面发表你的评论和问题,我会在此页下面回复。


via: http://www.movingelectrons.net/blog/2016/06/26/backup-photos-while-traveling-with-a-raspberry-pi.html

作者:Lenin 译者:jiajia9linuxer 校对:wxy

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